Compare commits

...

9 Commits

Author SHA1 Message Date
fengjignqi
77f6001a31 语言中英文完善 2026-06-09 10:50:23 +08:00
fengjignqi
e040be11c3 语言中英文完善 2026-06-06 18:01:18 +08:00
fengjignqi
bafd193a96 语言选择 2026-06-06 16:16:52 +08:00
fengjignqi
b621a77e8d 语言选择 2026-06-06 15:25:52 +08:00
fengjignqi
e9c17d355a 适配黑色主题,调整细节14:26 2026-06-06 14:26:38 +08:00
fengjignqi
e0249fa0fa 适配黑色主题,调整细节 2026-06-06 10:47:02 +08:00
fengjignqi
bc270205d0 权限调整 2026-06-05 09:17:02 +08:00
fengjignqi
e40cf952c0 连接蓝牙,配网 2026-06-04 17:48:36 +08:00
fengjignqi
edfa6331f5 连接蓝牙,配网 2026-06-04 16:49:14 +08:00
100 changed files with 1211 additions and 372 deletions

View File

@@ -4,7 +4,7 @@
<selectionStates>
<SelectionState runConfigName="app">
<option name="selectionMode" value="DROPDOWN" />
<DropdownSelection timestamp="2026-06-03T03:26:05.515101Z">
<DropdownSelection timestamp="2026-06-06T06:46:42.891310900Z">
<Target type="DEFAULT_BOOT">
<handle>
<DeviceId pluginId="PhysicalDevice" identifier="serial=D122222104A9" />

View File

@@ -174,7 +174,7 @@ dependencies {
implementation 'com.github.ns3chz:Picker:1.0.2'
implementation 'com.github.zzy0516alex:FileSelectorRelease:v6.2'
implementation 'com.github.chrisbanes:PhotoView:2.3.0'
implementation 'androidx.appcompat:appcompat:1.3.1'//(最低版本)
implementation 'androidx.appcompat:appcompat:1.6.1'//(最低版本)
// implementation 'com.umeng.umsdk:share-wx:7.1.5' //微信完整版
// implementation 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:6.7.0'//微信官方依赖库,必选
//商品评价星星
@@ -233,5 +233,7 @@ dependencies {
implementation 'no.nordicsemi.android:ble:2.11.0'
//espressif官方sdk用于esp固件的扫描配网等。
implementation 'com.github.espressif:esp-idf-provisioning-android:lib-2.2.3'
//自定义progressBar
implementation 'com.timqi.sectorprogressview:library:2.0.1'
}

View File

@@ -71,7 +71,9 @@
android:theme="@style/custom_app_theme"
android:supportsRtl="true"
android:hardwareAccelerated="true"
android:networkSecurityConfig="@xml/network_security_config">
android:networkSecurityConfig="@xml/network_security_config"
android:localeConfig="@xml/locale_config"
tools:replace="android:localeConfig">
<!-- 高德地图 -->
<meta-data android:name="com.amap.api.v2.apikey" android:value="a91364c6bbc2f5c773a949926fae7fb6">
</meta-data>

View File

@@ -1,7 +1,10 @@
package com.ckkj.water;
public class AppConfig {
//用户当前保存的语言状态,用于接口请求头传参
//zh_CN 中文
//en_US 英文
public static String LOCAL_LANUAGE = "zh_CN";
/**************************生产*******************************/

View File

@@ -50,5 +50,7 @@ public class ConstantUtil {
/***************设备相关*******************/
//设备解绑成功广播
public static final String DEVICE_UNBIND_SUCCESS = "device_unbind_success";
//应用语言设置
public static final String KEY_APP_LANGUAGE = "key_app_language";
}

View File

@@ -16,6 +16,7 @@ import com.google.gson.Gson;
import com.ckkj.water.login.entity.LoginEntity;
import com.ckkj.water.network.NetWorkManager;
import com.ckkj.water.utils.dataUtil.SharePreUtil;
import com.ckkj.water.utils.manager.LanguageManager;
import com.ckkj.water.utils.manager.WaterUserInfoManager;
import java.util.List;
@@ -67,6 +68,9 @@ public class MyApplication extends Application {
instance = this;
context = getApplicationContext();
// 恢复应用语言设置
applyStoredLocale();
boolean isUserAgreed = SharePreUtil.getBoolean(ConstantUtil.SHARE_PRE_NAME,context,ConstantUtil.PRIVACY_POLICY_AGREED);
if(isUserAgreed){
initializeUmengSDK();
@@ -178,4 +182,12 @@ public class MyApplication extends Application {
public static Context getContext() {
return context;
}
/**
* 应用启动时恢复保存的语言设置
* 使用 AppCompatDelegate.setApplicationLocales() API
*/
private void applyStoredLocale() {
LanguageManager.applyStoredLocale();
}
}

View File

@@ -43,6 +43,7 @@ import androidx.appcompat.app.AppCompatDelegate;
import androidx.core.app.ActivityCompat;
import androidx.viewbinding.ViewBinding;
import com.ckkj.water.dialog.LoadingProgressDialog;
import com.ckkj.water.utils.manager.ThemeManager;
import com.esafirm.imagepicker.features.ImagePicker;
import com.hjq.permissions.OnPermissionCallback;
@@ -275,6 +276,16 @@ public abstract class BaseActivity<T extends ViewBinding, P extends IPresenter>
} catch (Exception e) {
e.printStackTrace();
}
LoadingProgressDialog progressDialog = mProgressLoadingDialog;
try {
if (progressDialog != null && mContext != null) {
mProgressLoadingDialog = null;
progressDialog.dismiss();
}
} catch (Exception e) {
e.printStackTrace();
}
}
//每个activity都需要创建Presenter
@@ -317,6 +328,7 @@ public abstract class BaseActivity<T extends ViewBinding, P extends IPresenter>
@Override
public void hideLoading() {
loadingDialog.dismiss();
}
@Override
@@ -359,6 +371,9 @@ public abstract class BaseActivity<T extends ViewBinding, P extends IPresenter>
protected LoadingDialog mLoadingDialog;
/**
* 普通加载loading
*/
public void showLoadingDialog() {
LoadingDialog dialog = mLoadingDialog;
if (dialog == null && mContext != null) {
@@ -381,6 +396,33 @@ public abstract class BaseActivity<T extends ViewBinding, P extends IPresenter>
}
}
/**
* 进度条加载loading
*/
protected LoadingProgressDialog mProgressLoadingDialog;
public void showProgressLoadingDialog(int progress) {
LoadingProgressDialog dialog = mProgressLoadingDialog;
if (dialog == null && mContext != null) {
dialog = new LoadingProgressDialog(mContext);
// 不可触摸取消
dialog.setCanceledOnTouchOutside(false);
// 强制取消关闭界面
dialog.setCancelable(true);
dialog.setOnCancelListener(dialog1 -> finish());
dialog.setProgress( progress);
mProgressLoadingDialog = dialog;
} else {
dialog.dismiss();
}
if (dialog != null && mContext != null) {
try {
dialog.show();
} catch (Exception e) {
e.printStackTrace();
}
}
}
@Override
public void onNetChange(int netModel) {
@@ -1060,7 +1102,8 @@ public abstract class BaseActivity<T extends ViewBinding, P extends IPresenter>
false, false, true,
title,
content,
"不允许", "允许",
getString(R.string.button_deny),
getString(R.string.button_allow),
new BaseFragment.OnDialogClick() {
@Override
public void onCancelClick() {

View File

@@ -118,7 +118,8 @@ public abstract class BaseFragment<T extends ViewBinding,P extends IPresenter> e
false, false,
title,
content,
"不允许", "允许",
getString(R.string.button_deny),
getString(R.string.button_allow),
new BaseFragment.OnDialogClick() {
@Override
public void onCancelClick() {

View File

@@ -121,21 +121,8 @@ public class AddDeviceActivity_copy extends BaseActivity<AddDeviceLayoutBinding,
AnimationDrawable animationDrawable = (AnimationDrawable) ivScanAnimation.getDrawable();
animationDrawable.start();
}
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
// 停止帧动画
ImageView ivScanAnimation = viewBinding.ivScanAnimation;
if (ivScanAnimation.getDrawable() instanceof AnimationDrawable) {
AnimationDrawable animationDrawable = (AnimationDrawable) ivScanAnimation.getDrawable();
if (animationDrawable.isRunning()) {
animationDrawable.stop();
viewBinding.ivScanAnimation.setVisibility(GONE);
}
}
}
},3000);
initListener();
}
/**
@@ -184,6 +171,7 @@ public class AddDeviceActivity_copy extends BaseActivity<AddDeviceLayoutBinding,
super.onScanResult(callbackType, result);
//Mac地址
String deviceAddress = result.getDevice().getAddress();
// 去重:已存在的设备不再添加
if (discoveredMacSet.contains(deviceAddress)) {
return;
@@ -194,13 +182,21 @@ public class AddDeviceActivity_copy extends BaseActivity<AddDeviceLayoutBinding,
//设备名字
String deviceName = result.getScanRecord() != null ?
result.getScanRecord().getDeviceName() : "无名称";
bean.setDeviceName(deviceName);
bean.setMacAddress(deviceAddress);
mDeviceList.add(bean);
bleAdapter.notifyItemInserted(mDeviceList.size() - 1);
if(bleAdapter.getItemCount() != 0){
viewBinding.rvDevices.setVisibility(VISIBLE);
// 停止帧动画
ImageView ivScanAnimation = viewBinding.ivScanAnimation;
if (ivScanAnimation.getDrawable() instanceof AnimationDrawable) {
AnimationDrawable animationDrawable = (AnimationDrawable) ivScanAnimation.getDrawable();
if (animationDrawable.isRunning()) {
animationDrawable.stop();
viewBinding.ivScanAnimation.setVisibility(GONE);
}
}
}
}
@@ -218,7 +214,7 @@ public class AddDeviceActivity_copy extends BaseActivity<AddDeviceLayoutBinding,
ToastUtil.showShort(mContext, "扫描失败,错误码: " + errorCode);
}
};
scanner.startScan(filters, settings, mScanCallback);
scanner.startScan(null, settings, mScanCallback);
}
/**
@@ -248,13 +244,17 @@ public class AddDeviceActivity_copy extends BaseActivity<AddDeviceLayoutBinding,
return;
}
// 检查蓝牙是否开启
if (!bluetoothAdapter.isEnabled()) {
Log.e("TEST", "initBluetooth: 蓝牙未开启,请求开启");
Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
} else {
bluetoothReady = true;
try {
// 检查蓝牙是否开启
if (!bluetoothAdapter.isEnabled()) {
Log.e("TEST", "initBluetooth: 蓝牙未开启,请求开启");
Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
} else {
bluetoothReady = true;
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
@@ -413,6 +413,8 @@ public class AddDeviceActivity_copy extends BaseActivity<AddDeviceLayoutBinding,
hidePermissionDialog();
if (requestCode == REQUEST_EVENT_CODE_10001) {
scanQrcode();
}else if(requestCode == REQUEST_EVENT_CODE_10002){
}
}

View File

@@ -23,6 +23,7 @@ import com.ckkj.water.index.entity.WaterDeviceEntity;
import com.ckkj.water.network.BaseBean;
import com.ckkj.water.plan.entity.WaterPlanWeekEntity;
import com.ckkj.water.utils.manager.PowerIconManage;
import com.ckkj.water.utils.manager.ThemeManager;
import com.ckkj.water.utils.show.ToastUtil;
import com.gyf.immersionbar.ImmersionBar;
import com.lxj.xpopup.XPopup;
@@ -84,12 +85,12 @@ public class DeviceControlActivity extends BaseActivity<DeviceControlLayoutBindi
mTimeList.add("3h");
mTimeList.add("4h");
ImmersionBar.with(this)
.statusBarColor(R.color.mainBackgroundColor) // 设置状态栏颜色
.statusBarDarkFont(true) // 设置状态栏字体为黑色
.statusBarDarkFont(ThemeManager.isAppThemeLight(mContext)) // 白色状态栏图标
.navigationBarColor(R.color.mainBackgroundColor)
.titleBar(viewBinding.rlTitle)
.init();
viewBinding.includedTitle.imgSetting.setVisibility(View.VISIBLE);
viewBinding.includedTitle.imgSetting.setImageDrawable(getDrawable(R.mipmap.device_ctrl_setting));
// viewBinding.includedTitle.imgSetting.setImageDrawable(getDrawable(R.mipmap.device_ctrl_setting));
mAdapter = new DeviceTimeSelectAdapter(mContext,R.layout.device_work_time_item,mTimeList);
viewBinding.rvTimeList.setAdapter(mAdapter);
viewBinding.rvTimeList.addItemDecoration(new GridSpacingItemDecoration(4, 10, true));
@@ -162,10 +163,10 @@ public class DeviceControlActivity extends BaseActivity<DeviceControlLayoutBindi
case R.id.tv_confirm:
if(mCustomDuration == 0 && mAdapter.getmSelPostion() == -1){
ToastUtil.showShort(mContext,"请选择浇水时长");
ToastUtil.showShort(mContext,getString(R.string.select_watering_duration));
return;
}
showCenterTipDialog(R.mipmap.icon_dialog_success,"开始浇水");//
showCenterTipDialog(R.mipmap.icon_dialog_success,getString(R.string.start_watering));//
String status = mDeviceEntity.getStatus();
if(status.equals("1")){
status = "0";

View File

@@ -11,6 +11,7 @@ import com.ckkj.water.device.mvp.DeviceImpl;
import com.ckkj.water.device.mvp.DevicePresenter;
import com.ckkj.water.index.entity.WaterDeviceEntity;
import com.ckkj.water.network.BaseBean;
import com.ckkj.water.utils.manager.ThemeManager;
import com.gyf.immersionbar.ImmersionBar;
/**
@@ -28,8 +29,8 @@ public class DeviceInfoActivity extends BaseActivity<DeviceInfoLayoutBinding, De
super.initData(savedInstanceState);
ImmersionBar.with(this)
.statusBarColor(R.color.white) // 设置状态栏颜色
.statusBarDarkFont(true) // 设置状态栏字体为黑色
.statusBarDarkFont(ThemeManager.isAppThemeLight(mContext)) // 白色状态栏图标
.navigationBarColor(R.color.mainBackgroundColor)
.titleBar(viewBinding.rlTitle)
.init();
viewBinding.includedTitle.tvTitle.setText(R.string.device_setting_info);

View File

@@ -18,6 +18,7 @@ import com.ckkj.water.device.mvp.DeviceImpl;
import com.ckkj.water.device.mvp.DevicePresenter;
import com.ckkj.water.index.entity.WaterDeviceEntity;
import com.ckkj.water.network.BaseBean;
import com.ckkj.water.utils.manager.ThemeManager;
import com.ckkj.water.utils.show.ToastUtil;
import com.gyf.immersionbar.ImmersionBar;
@@ -46,8 +47,8 @@ public class DeviceSettingsActivity extends BaseActivity<DeviceSettingsLayoutBin
}
ImmersionBar.with(this)
.statusBarColor(R.color.white) // 设置状态栏颜色
.statusBarDarkFont(true) // 设置状态栏字体为黑色
.statusBarDarkFont(ThemeManager.isAppThemeLight(mContext)) // 白色状态栏图标
.navigationBarColor(R.color.mainBackgroundColor)
.titleBar(viewBinding.rlTitle)
.init();
viewBinding.includedTitle.tvTitle.setText(R.string.settings_title);

View File

@@ -9,6 +9,7 @@ import android.content.pm.PackageManager;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.os.Handler;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
@@ -19,6 +20,7 @@ import com.ckkj.water.ConstantUtil;
import com.ckkj.water.R;
import com.ckkj.water.base.BaseActivity;
import com.ckkj.water.databinding.DeviceResetWifiBinding;
import com.ckkj.water.device.adapter.WifiListAdapter;
import com.ckkj.water.device.mvp.DeviceContract;
import com.ckkj.water.device.mvp.DeviceImpl;
import com.ckkj.water.device.mvp.DevicePresenter;
@@ -100,7 +102,7 @@ public class SelectWifiActivity extends BaseActivity<DeviceResetWifiBinding, Dev
}
ImmersionBar.with(this)
.statusBarColor(R.color.mainBackgroundColor)
.statusBarColor(R.color.color_gray_theme)
.statusBarDarkFont(ThemeManager.isAppThemeLight(mContext))
.titleBar(viewBinding.rlTitle)
.init();
@@ -118,7 +120,7 @@ public class SelectWifiActivity extends BaseActivity<DeviceResetWifiBinding, Dev
}
private void initWifiList() {
wifiListAdapter = new WifiListAdapter();
wifiListAdapter = new WifiListAdapter(mContext);
viewBinding.rvWifiList.setAdapter(wifiListAdapter);
wifiListAdapter.setOnWifiItemClickListener(wifiName -> {
mWifiName = wifiName;
@@ -194,6 +196,7 @@ public class SelectWifiActivity extends BaseActivity<DeviceResetWifiBinding, Dev
ToastUtil.showShort(mContext, "设备连接中,请稍后再试");
return;
}
showProgressLoadingDialog(0);
espProvisionManager.provisionWifi(mWifiName, viewBinding.etInputPsd.getText().toString());
// goTo(mContext,DeviceConnectActivity.class,null);
}
@@ -217,27 +220,37 @@ public class SelectWifiActivity extends BaseActivity<DeviceResetWifiBinding, Dev
@Override
public void onProvisioning(int progress) {
Log.i("TEST","WIFI连接进度 == " + progress);
mProgressLoadingDialog.setProgress(progress);
}
@Override
public void onSuccess(String deviceName, String deviceType) {
Log.i("TEST","deviceName" + deviceName + "连接成功");
ToastUtil.showShort(mContext, deviceName + "连接成功");
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
hideDialogLoading();
}
}, 800);
}
@Override
public void onFailed(int errorCode, String message) {
isBleConnecting = false;
if (errorCode != 0) {
isBleConnected = espProvisionManager != null && espProvisionManager.isConnected();
isBleConnected = espProvisionManager != null && espProvisionManager .isConnected();
}
Log.i("TEST","errorCode == " + errorCode + " message == " + message);
ToastUtil.showShort(mContext, message);
hideDialogLoading();
}
@Override
public void onDisconnected() {
isBleConnecting = false;
isBleConnected = false;
hideDialogLoading();
Log.i("TEST","onDisconnected");
}

View File

@@ -41,7 +41,7 @@ public class DeviceTimeSelectAdapter extends BaseQuickAdapter<String, BaseViewHo
helper.setTextColor(R.id.tv_itme,mContext.getResources().getColor(R.color.white));
}else{
relTextBg.setBackground(mContext.getResources().getDrawable(R.drawable.shape_f7f7f7_line_button_bg));
helper.setTextColor(R.id.tv_itme,mContext.getResources().getColor(R.color.color_838080));
helper.setTextColor(R.id.tv_itme,mContext.getResources().getColor(R.color.textPrimaryColor));
}
}

View File

@@ -1,5 +1,6 @@
package com.ckkj.water.device;
package com.ckkj.water.device.adapter;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -10,6 +11,8 @@ import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.ckkj.water.R;
import com.ckkj.water.base.BaseActivity;
import com.ckkj.water.utils.manager.ThemeManager;
import java.util.ArrayList;
import java.util.List;
@@ -18,6 +21,10 @@ public class WifiListAdapter extends RecyclerView.Adapter<WifiListAdapter.WifiVi
private List<String> wifiList = new ArrayList<>();
private OnWifiItemClickListener listener;
private Context mContext;
public WifiListAdapter(BaseActivity mContext) {
this.mContext = mContext;
}
public interface OnWifiItemClickListener {
void onWifiItemClick(String wifiName);
@@ -49,6 +56,9 @@ public class WifiListAdapter extends RecyclerView.Adapter<WifiListAdapter.WifiVi
listener.onWifiItemClick(wifiName);
}
});
holder.ivWifiIcon.setImageResource(ThemeManager.isAppThemeLight(mContext) ?
R.mipmap.icon_wifi :
R.mipmap.icon_white_wifi );
}
@Override

View File

@@ -0,0 +1,94 @@
package com.ckkj.water.dialog;
import android.animation.ObjectAnimator;
import android.animation.ValueAnimator;
import android.annotation.SuppressLint;
import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.os.Handler;
import android.view.WindowManager;
import android.view.animation.LinearInterpolator;
import android.widget.ImageView;
import android.widget.TextView;
import com.ckkj.water.R;
import com.timqi.sectorprogressview.ColorfulRingProgressView;
import java.util.Objects;
/**
* author:
* time: 2019/9/18 9:34
* desc:
* version: 1.0.0
*/
public class LoadingProgressDialog extends Dialog {
private Context context;
private int mProgress = 0;
private ColorfulRingProgressView mCircleLoading;
public LoadingProgressDialog(Context context) {
super(context); // 应用透明背景样式
this.context=context;
}
public LoadingProgressDialog(Context context, String s) {
super(context);
this.context=context;
}
public void setProgress(int progress) {
mProgress = progress;
if(mCircleLoading != null){
mCircleLoading.setPercent( progress);
}
}
public LoadingProgressDialog(Context context, int theme) {
super(context, theme);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
init();
}
@SuppressLint({"ResourceAsColor", "MissingInflatedId"})
private void init() {
// 设置对话框背景为透明
getWindow().setBackgroundDrawable(context.getResources().getDrawable(R.color.transparent));
getWindow().setDimAmount(0f);
setCancelable(true);
setCanceledOnTouchOutside(false);
setContentView(R.layout.dialog_progress_layout);//loading的xml文件
mCircleLoading = findViewById(R.id.circle_loading);
mCircleLoading.setStartAngle(0);
mCircleLoading.setPercent(mProgress);
//加载动画资源
WindowManager.LayoutParams params = Objects.requireNonNull(getWindow()).getAttributes();
params.width = WindowManager.LayoutParams.MATCH_PARENT;
params.height = WindowManager.LayoutParams.MATCH_PARENT;
getWindow().setAttributes(params);
// 可选: 设置窗口大小
getWindow().setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT);
}
@Override
public void show() {//开启
// if (context==null){
// return;
// }
super.show();
}
@Override
public void dismiss() {//关闭
// if (context==null){
// return;
// }
super.dismiss();
}
}

View File

@@ -44,6 +44,7 @@ public class EspProvisionManager {
private boolean provisioning;
private boolean eventBusRegistered;
private boolean ignoreNextDisconnectEvent;
private boolean expectDisconnected; // 标记是否预期断开(配网成功后)
private String currentDeviceName;
private String currentDeviceType = ProvisionConfig.TRANSPORT_BLE;
@@ -328,7 +329,12 @@ public class EspProvisionManager {
boolean shouldNotify = connected || connecting || provisioning;
resetState();
if (shouldNotify) {
notifyDisconnected();
// 如果是配网成功后的预期断开,不发送断开回调
// 因为 onSuccess 已经通知过了
if (!expectDisconnected) {
notifyDisconnected();
}
expectDisconnected = false; // 重置标志
}
break;
@@ -364,6 +370,7 @@ public class EspProvisionManager {
connected = false;
provisioning = false;
ignoreNextDisconnectEvent = false;
// expectDisconnected 保持不变,用于断开回调判断
}
private ESPConstants.SecurityType parseSecurityType(int securityType) {
@@ -379,6 +386,7 @@ public class EspProvisionManager {
private void finishProvisionSuccess() {
mainHandler.removeCallbacks(provisionTimeoutTask);
provisioning = false;
expectDisconnected = true; // 标记为预期断开
notifyProvisioning(100);
notifySuccess();
}

View File

@@ -54,6 +54,16 @@ public class ProvisionConfig {
*/
public static final int DEFAULT_SECURITY = SECURITY_1;
/**
* 默认 PoP需和 ESP 固件保持一致
*/
public static final String DEFAULT_PROOF_OF_POSSESSION = "abcd1234";
/**
* Security2 使用的默认用户名
*/
public static final String DEFAULT_USER_NAME = "";
/**
* 连接超时时间 (毫秒)
*/

View File

@@ -42,9 +42,6 @@ public class GuideActivity extends BaseActivity<GuideActivityLayoutBinding, Logi
private List<Drawable> mImgUrls = new ArrayList<>();
private List<ImageView> mPointList = new ArrayList<>();
private boolean mHasEnterAppFlag = false;
private String desc[] = {"探索你的个性特征",
"一键生成,智能排盘工具",
"贴心提供每日生活指南"};
private int[] guideDrawableIds = {
R.mipmap.img_guide_1,

View File

@@ -18,6 +18,7 @@ import com.ckkj.water.history.mvp.HistoryImpl;
import com.ckkj.water.history.mvp.HistoryPresenter;
import com.ckkj.water.network.BaseBean;
import com.ckkj.water.plan.entity.WaterPlanWeekEntity;
import com.ckkj.water.utils.manager.ThemeManager;
import com.ckkj.water.utils.show.ToastUtil;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
@@ -64,6 +65,9 @@ public class TabHistoryFragment extends BaseFragment<TabHistoryFragmentLayoutBin
viewBinding.refresh.setRefreshFooter(new ClassicsFooter(mContext));
viewBinding.refresh.setOnRefreshListener(layout -> {
mCurrentPage = 1;
mFilterStartTime = "";
mFilterEndTime = "";
mFilterType = -1;
viewBinding.refresh.setNoMoreData(false);
getWaterHistoryList();
@@ -72,15 +76,24 @@ public class TabHistoryFragment extends BaseFragment<TabHistoryFragmentLayoutBin
mCurrentPage++;
getWaterHistoryList();
});
viewBinding.imgTimeFilter.setImageResource(
ThemeManager.isAppThemeLight(mContext) ?
R.mipmap.icon_triangle_down : R.mipmap.icon_white_triangle_down);
viewBinding.imgTypeFilter.setImageResource(
ThemeManager.isAppThemeLight(mContext) ?
R.mipmap.icon_triangle_down : R.mipmap.icon_white_triangle_down);
}
private void getWaterHistoryList(){
showLoadingDialog();
mPresenter.getWaterHistoryList(mCurrentPage,mFilterStartTime,mFilterEndTime,mFilterType);
}
private void initListener() {
setClick(viewBinding.linearTimeFilter);
setClick(viewBinding.linearTypeFilter);
setClick(viewBinding.includedNoresult.btnRefresh);
mAdapter.setOnItemChildClickListener(new BaseQuickAdapter.OnItemChildClickListener() {
@Override
public void onItemChildClick(BaseQuickAdapter adapter, View view, int position) {
@@ -126,8 +139,10 @@ public class TabHistoryFragment extends BaseFragment<TabHistoryFragmentLayoutBin
}
@Override
public void onDismiss(BasePopupView popupView) {
viewBinding.tvTimeFilter.setTextColor(mContext.getColor(R.color.color_222222));
viewBinding.imgTimeFilter.setImageResource(R.mipmap.icon_triangle_down);
viewBinding.tvTimeFilter.setTextColor(mContext.getColor(R.color.textPrimaryColor));
viewBinding.imgTimeFilter.setImageResource(
ThemeManager.isAppThemeLight(mContext) ?
R.mipmap.icon_triangle_down : R.mipmap.icon_white_triangle_down);
}
})
.asCustom(new CustomTimeFilterPopupView(getContext(), new CustomTimeFilterPopupView.OnClickListener() {
@@ -156,8 +171,10 @@ public class TabHistoryFragment extends BaseFragment<TabHistoryFragmentLayoutBin
}
@Override
public void onDismiss(BasePopupView popupView) {
viewBinding.tvTypeFilter.setTextColor(mContext.getColor(R.color.color_222222));
viewBinding.imgTypeFilter.setImageResource(R.mipmap.icon_triangle_down);
viewBinding.tvTypeFilter.setTextColor(mContext.getColor(R.color.textPrimaryColor));
viewBinding.imgTypeFilter.setImageResource(
ThemeManager.isAppThemeLight(mContext) ?
R.mipmap.icon_triangle_down : R.mipmap.icon_white_triangle_down);
}
})
.asCustom(new CustomTypeFilterPopupView(getContext(), new CustomTypeFilterPopupView.OnClickListener() {
@@ -173,7 +190,14 @@ public class TabHistoryFragment extends BaseFragment<TabHistoryFragmentLayoutBin
}
}));
typePopupView.show();
break;
case R.id.btn_refresh:
mCurrentPage = 1;
mFilterStartTime = "";
mFilterEndTime = "";
mFilterType = -1;
getWaterHistoryList();
break;
}
}

View File

@@ -88,6 +88,7 @@ public class IndexFragment extends BaseFragment<IndexFragmentLayoutBinding, Inde
private void initListener() {
setClick(viewBinding.imgScan);
setClick(viewBinding.imgAdd);
setClick(viewBinding.includedNoresult.btnRefresh);
}
private void setClick(View view) {
@@ -101,8 +102,10 @@ public class IndexFragment extends BaseFragment<IndexFragmentLayoutBinding, Inde
//检测有无相机权限
String readPermission = Manifest.permission.CAMERA;
if(!hasRecordPermission(readPermission)){
getPermissionRequst(readPermission,"权限申请",
"智能浇水需要您的授权访问相机,并使用扫一扫",REQUEST_EVENT_CODE_10001);
getPermissionRequst(readPermission,
getString(R.string.permission_request_title),
getString(R.string.camera_permission_scan_desc),
REQUEST_EVENT_CODE_10001);
}else{
scanQrcode();
}
@@ -117,6 +120,11 @@ public class IndexFragment extends BaseFragment<IndexFragmentLayoutBinding, Inde
goTo(mContext, AddDeviceActivity_copy.class,null);
}
break;
case R.id.btn_refresh:
mCurrentPage = 1;
mPresenter.getDevicesList(mCurrentPage);
break;
}
}

View File

@@ -13,6 +13,7 @@ import com.ckkj.water.login.mvp.LoginContract;
import com.ckkj.water.login.mvp.LoginImpl;
import com.ckkj.water.login.mvp.LoginPresenter;
import com.ckkj.water.network.BaseBean;
import com.ckkj.water.utils.manager.ThemeManager;
import com.ckkj.water.utils.number.PhoneNumberUtils;
import com.ckkj.water.utils.show.ToastUtil;
import com.gyf.immersionbar.ImmersionBar;
@@ -36,8 +37,8 @@ public class ForgetPasswordActivity extends BaseActivity<RegisterLayoutBinding,
public void initData(Bundle savedInstanceState) {
super.initData(savedInstanceState);
ImmersionBar.with(this)
.statusBarColor(R.color.color_F9F9F9) // 设置状态栏颜色
.statusBarDarkFont(true) // 设置状态栏字体为黑色
.statusBarDarkFont(ThemeManager.isAppThemeLight(mContext)) // 白色状态栏图标
.navigationBarColor(R.color.color_gray_theme)
.titleBar(viewBinding.rlTitle)
.init();
viewBinding.includedTitle.tvTitle.setText(R.string.reset_psd_title);

View File

@@ -22,6 +22,7 @@ import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.core.content.ContextCompat;
import com.ckkj.water.utils.manager.LanguageManager;
import com.google.gson.Gson;
import com.gyf.immersionbar.ImmersionBar;
import com.ckkj.water.AppConfig;
@@ -86,60 +87,83 @@ public class LoginActivity extends BaseActivity<LoginLayoutBinding, LoginPresent
}
private void setupAgreementText() {
//勾选协议,增加点击区域
ClickUtil.addClickPart(viewBinding.checkboxRead,100);
ClickUtil.addClickPart(viewBinding.checkboxRead, 100);
TextView tvAgreement = findViewById(R.id.tv_agreement_full);
String content = "我已经阅读并同意智能浇灌《用户协议》、《隐私政策》";
String content = getString(R.string.agree_user_policy);
String userAgreementText = getString(R.string.user_agreement);
String privacyPolicyText = getString(R.string.privacy_policy);
SpannableString spannableString = new SpannableString(content);
// 设置“用户协议”可点击
ClickableSpan userAgreementSpan = new ClickableSpan() {
addClickableSpan(
spannableString,
content,
userAgreementText,
() -> {
ToastUtil.showShort(mContext, "用户协议");
}
);
addClickableSpan(
spannableString,
content,
privacyPolicyText,
() -> {
ToastUtil.showShort(mContext, "隐私政策");
}
);
tvAgreement.setText(spannableString);
tvAgreement.setMovementMethod(LinkMovementMethod.getInstance());
tvAgreement.setHighlightColor(Color.TRANSPARENT);
}
private void addClickableSpan(
SpannableString spannableString,
String content,
String target,
Runnable action) {
int start = content.indexOf(target);
if (start < 0) {
return;
}
int end = start + target.length();
ClickableSpan clickableSpan = new ClickableSpan() {
@Override
public void onClick(@NonNull View widget) {
// 跳转用户协议
// Bundle bundle = new Bundle();
// bundle.putInt("from_requse_code", WebviewUserAgreement.AGREEMENT_CODE);
// goToWihoutNoPresent(mContext, WebviewUserAgreement.class,bundle);
ToastUtil.showShort(mContext,"用户协议");
action.run();
}
@Override
public void updateDrawState(@NonNull TextPaint ds) {
super.updateDrawState(ds);
ds.setColor(ContextCompat.getColor(mContext, R.color.color_zhu)); // 设置颜色
ds.setUnderlineText(false); // 去掉下划线
}
};
int start1 = content.indexOf("《用户协议》");
int end1 = start1 + "《用户协议》".length();
spannableString.setSpan(userAgreementSpan, start1, end1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
// 设置“隐私政策”可点击
ClickableSpan privacyPolicySpan = new ClickableSpan() {
@Override
public void onClick(@NonNull View widget) {
// 跳转隐私政策
// Bundle bundleYS = new Bundle();
// bundleYS.putInt("from_requse_code",WebviewUserAgreement.PRIVACY_CODE);
// goToWihoutNoPresent(mContext, WebviewUserAgreement.class,bundleYS);
ToastUtil.showShort(mContext,"跳转隐私政策");
}
ds.setColor(
ContextCompat.getColor(
mContext,
R.color.color_zhu
)
);
@Override
public void updateDrawState(@NonNull TextPaint ds) {
super.updateDrawState(ds);
ds.setColor(ContextCompat.getColor(mContext, R.color.color_zhu)); // 设置颜色
ds.setUnderlineText(false);
}
};
int start2 = content.indexOf("《隐私政策》");
int end2 = start2 + "《隐私政策》".length();
spannableString.setSpan(privacyPolicySpan, start2, end2, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
tvAgreement.setText(spannableString);
tvAgreement.setMovementMethod(LinkMovementMethod.getInstance()); // 开启点击事件
tvAgreement.setHighlightColor(Color.TRANSPARENT);
spannableString.setSpan(
clickableSpan,
start,
end,
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
);
}
public void onClick(View v) {
@@ -206,20 +230,24 @@ public class LoginActivity extends BaseActivity<LoginLayoutBinding, LoginPresent
break;
case R.id.tv_language:
new XPopup.Builder(mContext).asBottomList(
"选择语言",
new String[]{"中文", "English"},
new int[]{R.mipmap.ic_launcher, R.mipmap.ic_launcher},
0,
new OnSelectListener() {
@Override
public void onSelect(int position, String text) {
ToastUtil.showShort(mContext,text);
}
},
R.layout.select_language_layout,
R.layout.select_language_item
).show();
new XPopup.Builder(mContext)
.isDestroyOnDismiss(true)
.dismissOnBackPressed(true)
.dismissOnTouchOutside(true)
.asBottomList(
getString(R.string.change_language),
LanguageManager.getLanguageDisplayNames(mContext),
LanguageManager.getLanguageIcons(),
LanguageManager.getCurrentLanguageIndex(),
new OnSelectListener() {
@Override
public void onSelect(int position, String text) {
LanguageManager.switchLanguageByIndex(position, LoginActivity.this);
}
},
R.layout.select_language_layout,
R.layout.select_language_item
).show();
break;
case R.id.tv_reset_psd ://重置密码

View File

@@ -13,6 +13,7 @@ import com.ckkj.water.login.mvp.LoginContract;
import com.ckkj.water.login.mvp.LoginImpl;
import com.ckkj.water.login.mvp.LoginPresenter;
import com.ckkj.water.network.BaseBean;
import com.ckkj.water.utils.manager.ThemeManager;
import com.ckkj.water.utils.number.PhoneNumberUtils;
import com.ckkj.water.utils.show.ToastUtil;
import com.gyf.immersionbar.ImmersionBar;
@@ -35,8 +36,8 @@ public class RegisterActivity extends BaseActivity<RegisterLayoutBinding, LoginP
public void initData(Bundle savedInstanceState) {
super.initData(savedInstanceState);
ImmersionBar.with(this)
.statusBarColor(R.color.color_F9F9F9) // 设置状态栏颜色
.statusBarDarkFont(true) // 设置状态栏字体为黑色
.statusBarDarkFont(ThemeManager.isAppThemeLight(mContext)) // 白色状态栏图标
.navigationBarColor(R.color.color_gray_theme)
.titleBar(viewBinding.rlTitle)
.init();
viewBinding.includedTitle.tvTitle.setText(R.string.register_title);

View File

@@ -336,7 +336,7 @@ public class MainActivity extends BaseActivity<MainActivityLayoutBinding, MainPr
private void exitApp() {
if ((System.currentTimeMillis() - exitTime) > 2000) {
ToastUtil.showShort(getApplicationContext(), "再按一次退出");
ToastUtil.showShort(getApplicationContext(), getString(R.string.press_again_to_exit));
exitTime = System.currentTimeMillis();
} else {
//结束所有activity

View File

@@ -57,6 +57,11 @@ public class AppThemActivity extends BaseActivity<AppThemeChangeLayoutBinding, M
public void onClick(View v){
switch (v.getId()){
case R.id.img_back:
finish();
break;
case R.id.linear_light:
case R.id.img_light:
switchTheme(ThemeManager.MODE_LIGHT);

View File

@@ -2,6 +2,7 @@ package com.ckkj.water.mine;
import static android.view.View.INVISIBLE;
import android.app.Activity;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
@@ -22,6 +23,7 @@ import com.ckkj.water.mine.mvp.MinePresenter;
import com.ckkj.water.network.BaseBean;
import com.ckkj.water.utils.dataUtil.SharePreUtil;
import com.ckkj.water.utils.manager.ActivityManager;
import com.ckkj.water.utils.manager.LanguageManager;
import com.ckkj.water.utils.manager.ThemeManager;
import com.ckkj.water.utils.manager.WaterUserInfoManager;
import com.ckkj.water.utils.show.ToastUtil;
@@ -92,14 +94,14 @@ public class MineCenterFragment extends BaseFragment<MineFragmentLayoutBinding,
.dismissOnBackPressed(true)
.dismissOnTouchOutside(true)
.asBottomList(
"选择语言",
new String[]{"中文", "English"},
new int[]{R.mipmap.ic_launcher, R.mipmap.ic_launcher},
0,
getString(R.string.change_language),
LanguageManager.getLanguageDisplayNames(mContext),
LanguageManager.getLanguageIcons(),
LanguageManager.getCurrentLanguageIndex(),
new OnSelectListener() {
@Override
public void onSelect(int position, String text) {
ToastUtil.showShort(mContext,text);
LanguageManager.switchLanguageByIndex(position, getActivity());
}
},
R.layout.select_language_layout,

View File

@@ -22,6 +22,7 @@ import com.ckkj.water.network.BaseBean;
import com.ckkj.water.utils.LubanCompressUtil;
import com.ckkj.water.utils.PreviewFileUtil;
import com.ckkj.water.utils.dataUtil.FileUtil;
import com.ckkj.water.utils.manager.ThemeManager;
import com.ckkj.water.utils.manager.WaterUserInfoManager;
import com.ckkj.water.utils.show.ToastUtil;
import com.esafirm.imagepicker.features.ImagePicker;
@@ -62,8 +63,8 @@ public class MineInfomationActivity extends BaseActivity<MineInformationLayoutBi
}
}
ImmersionBar.with(this)
.statusBarColor(R.color.white) // 设置状态栏颜色
.statusBarDarkFont(true) // 设置状态栏字体为黑色
.statusBarDarkFont(ThemeManager.isAppThemeLight(mContext)) // 白色状态栏图标
.navigationBarColor(R.color.mainBackgroundColor)
.titleBar(viewBinding.rlTitle)
.init();
viewBinding.includedTitle.tvTitle.setText(R.string.mine_infomation_title);

View File

@@ -12,6 +12,7 @@ import com.ckkj.water.mine.mvp.MineContract;
import com.ckkj.water.mine.mvp.MineImpl;
import com.ckkj.water.mine.mvp.MinePresenter;
import com.ckkj.water.network.BaseBean;
import com.ckkj.water.utils.manager.ThemeManager;
import com.gyf.immersionbar.ImmersionBar;
/**
@@ -27,11 +28,11 @@ public class PsdManageActivity extends BaseActivity<PasswordManLayoutBinding, Mi
super.initData(savedInstanceState);
ImmersionBar.with(this)
.statusBarColor(R.color.white) // 设置状态栏颜色
.statusBarDarkFont(true) // 设置状态栏字体为黑色
.statusBarDarkFont(ThemeManager.isAppThemeLight(mContext)) // 白色状态栏图标
.navigationBarColor(R.color.mainBackgroundColor)
.titleBar(viewBinding.rlTitle)
.init();
viewBinding.includedTitle.tvTitle.setText(R.string.register_title);
viewBinding.includedTitle.tvTitle.setText(R.string.mine_psd_manager);
initListener();
}

View File

@@ -12,6 +12,7 @@ import com.ckkj.water.mine.mvp.MineContract;
import com.ckkj.water.mine.mvp.MineImpl;
import com.ckkj.water.mine.mvp.MinePresenter;
import com.ckkj.water.network.BaseBean;
import com.ckkj.water.utils.manager.ThemeManager;
import com.ckkj.water.utils.show.ToastUtil;
import com.gyf.immersionbar.ImmersionBar;
@@ -28,8 +29,8 @@ public class ResetPsdActivity extends BaseActivity<ResetPsdLayoutBinding, MinePr
super.initData(savedInstanceState);
ImmersionBar.with(this)
.statusBarColor(R.color.color_F9F9F9) // 设置状态栏颜色
.statusBarDarkFont(true) // 设置状态栏字体为黑色
.statusBarDarkFont(ThemeManager.isAppThemeLight(mContext)) // 白色状态栏图标
.navigationBarColor(R.color.color_gray_theme)
.titleBar(viewBinding.rlTitle)
.init();
viewBinding.includedTitle.tvTitle.setText(R.string.mine_psd_reset);

View File

@@ -13,6 +13,7 @@ import com.ckkj.water.EventMessage;
import com.ckkj.water.MyApplication;
import com.ckkj.water.R;
import com.ckkj.water.utils.AppInfoUtil;
import com.ckkj.water.utils.manager.LanguageManager;
import org.json.JSONArray;
import org.json.JSONException;
@@ -338,7 +339,7 @@ public class NetWorkManager {
try {
map.put("Authorization", "Bearer " + AppConfig.USER_TOKEN);
map.put("clientId", AppConfig.APP_CLIENT_ID);
// map.put("Authorization", "Bearer " + "eyJhbGciOiJIUzUxMiJ9.eyJ1c2VyX2lkIjoxOTI1NzYwMTgxMTMyNzI2MDIyLCJ1c2VyX2tleSI6IjY0YjVmMjRjLTIyM2ItNDRkZC1iMDJlLTI0ZTRiNzNmODgxZCIsInVzZXJuYW1lIjoiMTg2NDU5MDQzMDIifQ.PiIjBZlQ9UtOuotfhd5mZZO2e8SbMpbXU7VDvVeiWZIecsFDUd51Rae09EFxQ_MJmBUEvIdyysnyqYiBC2AEfw");
map.put("content-language", LanguageManager.getCurrentRequestLanguage());
} catch (Exception e) {
e.printStackTrace();
}

View File

@@ -1,11 +1,14 @@
package com.ckkj.water.permission;
import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.core.content.ContextCompat;
import com.ckkj.water.ConstantUtil;
import com.ckkj.water.R;
@@ -32,6 +35,9 @@ import pub.devrel.easypermissions.EasyPermissions;
*/
public class PermissionActivity extends BaseActivity<PermissionLayoutBinding, MainPresenter>
implements MainContract.MainView, EasyPermissions.PermissionCallbacks {
private static final int REQUEST_BLUETOOTH_PERMISSION = 1002;
@Override
public MainPresenter createPresenter() {
return new MainPresenter(new MainImpl());
@@ -71,16 +77,52 @@ public class PermissionActivity extends BaseActivity<PermissionLayoutBinding, Ma
break;
case R.id.tv_commit:
String[] permission = {
Manifest.permission.ACCESS_FINE_LOCATION
};
boolean hasPermission = hasRecordPermission(permission);
if(!hasPermission){
getMorePermissionRequst(permission,"权限申请","智溉管家需要您的授权获取位置权限,用于添加设备",REQUEST_EVENT_CODE_10001);
}
// String[] permission = {
// Manifest.permission.ACCESS_FINE_LOCATION
// };
// boolean hasPermission = hasRecordPermission(permission);
// if(!hasPermission){
// getMorePermissionRequst(permission,"权限申请","智溉管家需要您的授权获取位置权限,用于添加设备",REQUEST_EVENT_CODE_10001);
// }
checkBluetoothPermissions();
break;
}
}
/**
* 检查蓝牙权限
*/
private boolean checkBluetoothPermissions() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
String[] readPermission = new String[]{
Manifest.permission.BLUETOOTH_SCAN,
Manifest.permission.BLUETOOTH_CONNECT,
Manifest.permission.ACCESS_FINE_LOCATION
};
if (!hasRecordPermission(readPermission)) {
// 没有权限只在ACTION_DOWN时去申请
getMorePermissionRequst(readPermission,
getString(R.string.bluetooth_permission_title),
getString(R.string.bluetooth_permission_desc),
REQUEST_EVENT_CODE_10003);
return false;
}
} else {
// Android 12 以下需要位置权限才能扫描蓝牙
if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
!= PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[]{
Manifest.permission.ACCESS_FINE_LOCATION
}, REQUEST_EVENT_CODE_10003);
return false;
}
}
return true;
}
@Override
public void showError(String message) {
@@ -128,6 +170,9 @@ public class PermissionActivity extends BaseActivity<PermissionLayoutBinding, Ma
if (requestCode == REQUEST_EVENT_CODE_10001) {
ToastUtil.showShort(mContext,"权限获取成功");
finish();
}else if(requestCode == REQUEST_EVENT_CODE_10003){
ToastUtil.showShort(mContext,"蓝牙权限获取成功");
finish();
}
}

View File

@@ -20,6 +20,7 @@ import com.ckkj.water.plan.mvp.WaterPlanContract;
import com.ckkj.water.plan.mvp.WaterPlanImpl;
import com.ckkj.water.plan.mvp.WaterPlanPresenter;
import com.ckkj.water.plate.adapter.ViewPagerAdapter;
import com.ckkj.water.utils.manager.ThemeManager;
import com.ckkj.water.utils.show.ToastUtil;
import com.gyf.immersionbar.ImmersionBar;
@@ -57,11 +58,10 @@ public class AddWaterPlanActivity extends BaseActivity<AddWaterPlanLayoutBinding
super.initData(savedInstanceState);
ImmersionBar.with(this)
.statusBarColor(R.color.color_F9F9F9) // 设置状态栏颜色
.statusBarDarkFont(true) // 设置状态栏字体为黑色
.statusBarDarkFont(ThemeManager.isAppThemeLight(mContext)) // 白色状态栏图标
.navigationBarColor(R.color.color_zhu)
.titleBar(viewBinding.rlTitle)
.init();
Bundle bundle = getIntent().getExtras();
if (bundle != null) {
mIsEditMode = bundle.getBoolean("is_edit", false);
@@ -76,7 +76,6 @@ public class AddWaterPlanActivity extends BaseActivity<AddWaterPlanLayoutBinding
viewBinding.includedTitle.tvTitle.setText(R.string.add_water_plan_title);
viewBinding.tvBound.setVisibility(GONE);
}
mFragmentList.add(new WaterConfigFragment_copy());
mFragmentList.add(new PlanBoundDeviceFragment());
mFragmentList.add(new BindDeviceFragment());
@@ -143,8 +142,11 @@ public class AddWaterPlanActivity extends BaseActivity<AddWaterPlanLayoutBinding
// 检查是否有未保存的数据变更
if (configFragment.hasDataChanged()) {
showDialogtext(null, false, false, true,
"提示", "数据已发生变更,是否保存?",
getString(R.string.cancel_text), "保存", new BaseFragment.OnDialogClick() {
getString(R.string.tip_text),
getString(R.string.data_changed_save_confirm),
getString(R.string.cancel_text),
getString(R.string.button_save),
new BaseFragment.OnDialogClick() {
@Override
public void onCancelClick() {
}
@@ -166,13 +168,15 @@ public class AddWaterPlanActivity extends BaseActivity<AddWaterPlanLayoutBinding
return;
}
if (!configFragment.hasTimeConfig()) {
ToastUtil.showShort(mContext, "请至少配置一天的时间");
ToastUtil.showShort(mContext, getString(R.string.schedule_select_at_least_one_day));
return;
}
}
showDialogtext(null, false, false, true,
"提示", "关联设备需要保存排程配置,是否继续?",
getString(R.string.cancel_text), "继续", new BaseFragment.OnDialogClick() {
getString(R.string.tip_text),
getString(R.string.save_schedule_before_bind_device),
getString(R.string.cancel_text),
getString(R.string.btn_continue), new BaseFragment.OnDialogClick() {
@Override
public void onCancelClick() {
}
@@ -200,7 +204,7 @@ public class AddWaterPlanActivity extends BaseActivity<AddWaterPlanLayoutBinding
entity = mIsEditMode ? mEditEntity : mNewAddEntity;
}
if (entity == null) {
ToastUtil.showShort(mContext, "请先保存排程");
ToastUtil.showShort(mContext, getString(R.string.please_save_schedule_first));
return;
}
viewBinding.tvConfig.setSelected(false);

View File

@@ -21,6 +21,7 @@ import com.ckkj.water.plan.entity.WaterPlanWeekEntity;
import com.ckkj.water.plan.mvp.WaterPlanContract;
import com.ckkj.water.plan.mvp.WaterPlanImpl;
import com.ckkj.water.plan.mvp.WaterPlanPresenter;
import com.ckkj.water.utils.manager.ThemeManager;
import com.ckkj.water.utils.show.ToastUtil;
import com.ckkj.water.utils.time.ZYTimeUtils;
import com.google.gson.Gson;
@@ -59,8 +60,8 @@ public class PlanDetailActivity extends BaseActivity<WaterPlanDetailLayoutBindin
String jsonContent = getString(R.string.plan_water_entity_json);
WaterPlanWeekEntity entity = new Gson().fromJson(jsonContent, WaterPlanWeekEntity.class);
ImmersionBar.with(this)
.statusBarColor(R.color.color_F9F9F9) // 设置状态栏颜色
.statusBarDarkFont(true) // 设置状态栏字体为黑色
.statusBarDarkFont(ThemeManager.isAppThemeLight(mContext)) // 白色状态栏图标
.navigationBarColor(R.color.color_gray_theme)
.titleBar(viewBinding.rlTitle)
.init();
viewBinding.includedTitle.tvTitle.setText(R.string.plan_detail_title);
@@ -183,7 +184,7 @@ public class PlanDetailActivity extends BaseActivity<WaterPlanDetailLayoutBindin
if(!TextUtils.isEmpty(timeBean.getStartTime())
&& timeBean.getDurationMin() != 0){
hasValidTime = true;
bean.setWeekName(ZYTimeUtils.getWeekName(bean.getWeekday() - 1));
bean.setWeekName(ZYTimeUtils.getWeekName(bean.getWeekday() - 1,mContext));
break;
}
}

View File

@@ -53,7 +53,7 @@ public class WaterConfigFragment extends BaseFragment<WaterConfigFragmentLayoutB
WaterPlanWeekEntity.DetailsBean bean = new WaterPlanWeekEntity.DetailsBean();
bean.setWeekday(i + 1);
bean.setStatus("0");
bean.setWeekName(ZYTimeUtils.getWeekName(i));
bean.setWeekName(ZYTimeUtils.getWeekName(i,mContext));
list.add(bean);
}
mConfigEntity.setDetails(list);
@@ -105,7 +105,7 @@ public class WaterConfigFragment extends BaseFragment<WaterConfigFragmentLayoutB
WaterPlanWeekEntity.DetailsBean newBean = new WaterPlanWeekEntity.DetailsBean();
newBean.setId(bean.getId());
newBean.setWeekday(bean.getWeekday());
newBean.setWeekName(ZYTimeUtils.getWeekName(bean.getWeekday() - 1));
newBean.setWeekName(ZYTimeUtils.getWeekName(bean.getWeekday() - 1,mContext));
newBean.setStatus(bean.getStatus());
newBean.setStartTime(ZYTimeUtils.formatHHmm(bean.getStartTime()));
newBean.setDurationMin(bean.getDurationMin());

View File

@@ -78,7 +78,7 @@ public class WaterConfigFragment_copy extends BaseFragment<WaterConfigFragmentLa
bean.setTimeData(timeDataList);
bean.setWeekday(i + 1);
bean.setStatus("1");
bean.setWeekName(ZYTimeUtils.getWeekName(i));
bean.setWeekName(ZYTimeUtils.getWeekName(i,mContext));
bean.setTriggerType("0");
list.add(bean);
}
@@ -293,7 +293,7 @@ public class WaterConfigFragment_copy extends BaseFragment<WaterConfigFragmentLa
newBean.setTimeData(timeDataList);
newBean.setId(bean.getId());
newBean.setWeekday(bean.getWeekday());
newBean.setWeekName(ZYTimeUtils.getWeekName(bean.getWeekday() - 1));
newBean.setWeekName(ZYTimeUtils.getWeekName(bean.getWeekday() - 1,mContext));
newBean.setStatus(bean.getStatus());
detailsList.add(newBean);
}
@@ -328,7 +328,7 @@ public class WaterConfigFragment_copy extends BaseFragment<WaterConfigFragmentLa
if (!allTimeEmpty) break;
}
if (allTimeEmpty) {
ToastUtil.showShort(mContext, "请至少配置一天的时间");
ToastUtil.showShort(mContext, getString(R.string.schedule_select_at_least_one_day));
return false;
}
// 校验每一天内的时间是否有冲突
@@ -503,7 +503,7 @@ public class WaterConfigFragment_copy extends BaseFragment<WaterConfigFragmentLa
// 不冲突p1.end <= p2.start 或 p2.end <= p1.start
if (!(p1[1] <= p2[0] || p2[1] <= p1[0])) {
String dayName = dayBean.getWeekName();
return dayName + "的时间配置存在冲突,请调整";
return dayName + getString(R.string.schedule_time_conflict);
}
}
}
@@ -582,7 +582,7 @@ public class WaterConfigFragment_copy extends BaseFragment<WaterConfigFragmentLa
public void onCreateMenu(SwipeMenu leftMenu, SwipeMenu rightMenu, int position) {
SwipeMenuItem deleteItem = new SwipeMenuItem(mContext);
deleteItem.setBackground(mContext.getResources().getDrawable(R.drawable.shape_item_delete_bg));
deleteItem.setText("删除");
deleteItem.setText(getString(R.string.button_delete));
deleteItem.setTextColor(mContext.getResources().getColor(R.color.white));
deleteItem.setHeight(ViewGroup.LayoutParams.MATCH_PARENT);
deleteItem.setWidth((int) mContext.getResources().getDimension(R.dimen.dp_90));
@@ -619,7 +619,7 @@ public class WaterConfigFragment_copy extends BaseFragment<WaterConfigFragmentLa
*/
@Override
public void saveConfigSuccess(WaterPlanWeekEntity entity) {
ToastUtil.showShort(mContext, "排程新增成功");
ToastUtil.showShort(mContext, getString(R.string.schedule_add_success));
isConfigSubmitted = true;
// 把接口返回的 ID 设置到 mConfigEntity便于后续更新操作
mLocalEntity.setId(entity.getId());
@@ -644,7 +644,7 @@ public class WaterConfigFragment_copy extends BaseFragment<WaterConfigFragmentLa
*/
@Override
public void updateConfigSuccess(WaterPlanWeekEntity entity) {
ToastUtil.showShort(mContext, "排程更新成功");
ToastUtil.showShort(mContext, getString(R.string.schedule_update_success));
mRemoteEntity = entity;
}

View File

@@ -82,6 +82,7 @@ public class WaterPlanFragment extends BaseFragment<WaterPlanFragmentBinding, Wa
private void initListener() {
setClick(viewBinding.tvAdd);
setClick(viewBinding.includedNoresult.btnRefresh);
}
private void setClick(View view) {
@@ -93,6 +94,11 @@ public class WaterPlanFragment extends BaseFragment<WaterPlanFragmentBinding, Wa
case R.id.tv_add:
goTo(mContext, AddWaterPlanActivity.class,null);
break;
case R.id.btn_refresh:
mCurrentPage = 1;
mPresenter.getWaterPlanList(mCurrentPage);
break;
}
}

View File

@@ -0,0 +1,205 @@
package com.ckkj.water.utils.manager;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import androidx.appcompat.app.AppCompatDelegate;
import androidx.core.os.LocaleListCompat;
import com.ckkj.water.AppConfig;
import com.ckkj.water.ConstantUtil;
import com.ckkj.water.MyApplication;
import com.ckkj.water.R;
import com.ckkj.water.login.LoginActivity;
import com.ckkj.water.main.activity.MainActivity;
import com.ckkj.water.utils.dataUtil.SharePreUtil;
import com.ckkj.water.utils.show.ToastUtil;
/**
* 语言切换管理工具类
* 使用 AppCompatDelegate.setApplicationLocales() API 实现中英切换
*/
public class LanguageManager {
private static final String TAG = "LanguageManager";
private static final String LANGUAGE_ZH_CN = "zh_CN";
private static final String LANGUAGE_EN_US = "en_US";
/**
* 语言类型枚举
*/
public enum LanguageType {
CHINESE(0, "zh", "中文"),
ENGLISH(1, "en", "English");
public final int index;
public final String languageTag;
public final String displayName;
LanguageType(int index, String languageTag, String displayName) {
this.index = index;
this.languageTag = languageTag;
this.displayName = displayName;
}
public static LanguageType fromIndex(int index) {
for (LanguageType type : values()) {
if (type.index == index) {
return type;
}
}
return CHINESE;
}
public static LanguageType fromLanguageTag(String languageTag) {
if ("en".equals(languageTag)) {
return ENGLISH;
}
return CHINESE;
}
}
/**
* 获取当前语言类型
*/
public static LanguageType getCurrentLanguageType() {
LocaleListCompat locales = AppCompatDelegate.getApplicationLocales();
if (locales.isEmpty()) {
return LanguageType.CHINESE;
}
String language = locales.get(0).getLanguage();
return LanguageType.fromLanguageTag(language);
}
/**
* 获取当前语言索引 (0: 中文, 1: 英文)
*/
public static int getCurrentLanguageIndex() {
return getCurrentLanguageType().index;
}
/**
* 获取接口请求头需要的语言值
*/
public static String getCurrentRequestLanguage() {
return getCurrentLanguageType() == LanguageType.ENGLISH ? LANGUAGE_EN_US : LANGUAGE_ZH_CN;
}
/**
* 同步当前语言到全局配置
*/
public static void syncCurrentLanguageToAppConfig() {
AppConfig.LOCAL_LANUAGE = getCurrentRequestLanguage();
}
/**
* 切换语言
* @param languageType 要切换到的语言类型
*/
public static void switchLanguage(LanguageType languageType) {
switchLanguage(languageType, null);
}
/**
* 切换语言并重启应用
* @param languageType 要切换到的语言类型
* @param activity 触发切换的Activity用于重启
*/
public static void switchLanguage(LanguageType languageType, Activity activity) {
// 先保存语言设置
saveLanguage(languageType.languageTag);
// 设置应用语言
LocaleListCompat localeList = LocaleListCompat.forLanguageTags(languageType.languageTag);
AppCompatDelegate.setApplicationLocales(localeList);
AppConfig.LOCAL_LANUAGE = languageType == LanguageType.ENGLISH ? LANGUAGE_EN_US : LANGUAGE_ZH_CN;
// 如果传入了Activity则重启应用
if (activity != null) {
ToastUtil.showShort(activity, activity.getString(R.string.language_switch_success));
// 延迟重启应用,确保语言设置生效
new android.os.Handler(android.os.Looper.getMainLooper()).postDelayed(() -> {
try {
boolean isLogin = AppConfig.USER_LOGIN || SharePreUtil.getBoolean(
ConstantUtil.SHARE_PRE_NAME,
activity,
ConstantUtil.USER_LOGIN
);
ActivityManager.removeAllActivity();
Intent intent = new Intent(activity, isLogin ? MainActivity.class : LoginActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
activity.startActivity(intent);
System.exit(0);
} catch (Exception e) {
e.printStackTrace();
}
}, 500);
}
}
/**
* 切换语言(通过索引)
* @param position 0: 中文, 1: 英文
*/
public static void switchLanguageByIndex(int position) {
switchLanguage(LanguageType.fromIndex(position), null);
}
/**
* 切换语言并重启应用(通过索引)
* @param position 0: 中文, 1: 英文
* @param activity 触发切换的Activity
*/
public static void switchLanguageByIndex(int position, Activity activity) {
switchLanguage(LanguageType.fromIndex(position), activity);
}
/**
* 保存语言设置到本地
*/
public static void saveLanguage(String languageTag) {
SharePreUtil.putString(ConstantUtil.SHARE_PRE_NAME,
MyApplication.getContext(),
ConstantUtil.KEY_APP_LANGUAGE,
languageTag);
}
/**
* 应用启动时恢复保存的语言设置
* 应该在 Application.onCreate() 中调用
*/
public static void applyStoredLocale() {
String savedLocale = SharePreUtil.getString(
ConstantUtil.SHARE_PRE_NAME,
MyApplication.getContext(),
ConstantUtil.KEY_APP_LANGUAGE);
if (savedLocale != null && !savedLocale.isEmpty()) {
LocaleListCompat localeList = LocaleListCompat.forLanguageTags(savedLocale);
AppCompatDelegate.setApplicationLocales(localeList);
}
syncCurrentLanguageToAppConfig();
}
/**
* 获取语言选择列表的显示文本
*/
public static String[] getLanguageDisplayNames(Context context) {
return new String[]{
context.getString(R.string.language_chinese),
context.getString(R.string.language_english)
};
}
/**
* 获取语言选择列表的图标资源ID
*/
public static int[] getLanguageIcons() {
return new int[]{
R.mipmap.icon_langage_chinese,
R.mipmap.icon_langage_eng
};
}
}

View File

@@ -4,6 +4,9 @@ package com.ckkj.water.utils.time;
import android.content.Context;
import android.text.TextUtils;
import android.widget.TextView;
import com.ckkj.water.R;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
@@ -1062,16 +1065,24 @@ public class ZYTimeUtils {
}
}
private static final String[] WEEK_NAMES = {"周一", "周二", "周三", "周四", "周五", "周六", "周日"};
/**
* 根据星期索引获取星期名称
* @param weekday 星期索引0=周一1=周二,...6=周日
* @return 对应的星期名称
*/
public static String getWeekName(int weekday) {
public static String getWeekName(int weekday,Context context) {
String[] weekNames = {
context.getString(R.string.week_monday),
context.getString(R.string.week_tuesday),
context.getString(R.string.week_wednesday),
context.getString(R.string.week_thursday),
context.getString(R.string.week_friday),
context.getString(R.string.week_saturday),
context.getString(R.string.week_sunday)
};
if (weekday >= 0 && weekday < 7) {
return WEEK_NAMES[weekday];
return weekNames[weekday];
}
return "";
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 901 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="5dp"/>
<solid android:color="@color/white"/>
<solid android:color="@color/deviceControlItemColor"/>
<stroke android:color="@color/color_ebebeb" android:width="@dimen/dp_0_5"/>
</shape>

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="@dimen/dp_8"/>
<solid android:color="@color/trans_dark_50"/>
</shape>

View File

@@ -3,7 +3,14 @@
<item android:state_selected="true">
<shape android:shape="rectangle">
<solid android:color="@color/color_zhu" />
<corners android:topLeftRadius="@dimen/dp_4" android:bottomLeftRadius="@dimen/dp_4" />
<corners android:radius="@dimen/dp_4"/>
</shape>
</item>
<item android:state_selected="false">
<shape android:shape="rectangle">
<solid android:color="@color/white" />
<corners android:radius="@dimen/dp_4"/>
</shape>
</item>

View File

@@ -6,4 +6,10 @@
<corners android:topRightRadius="@dimen/dp_4" android:bottomRightRadius="@dimen/dp_4" />
</shape>
</item>
<item android:state_selected="false">
<shape android:shape="rectangle">
<solid android:color="@color/white" />
<corners android:topRightRadius="@dimen/dp_4" android:bottomRightRadius="@dimen/dp_4" />
</shape>
</item>
</selector>

View File

@@ -95,5 +95,6 @@
android:paddingVertical="@dimen/dp_10"
android:layout_marginHorizontal="@dimen/dp_20"
android:layout_marginTop="@dimen/dp_40"
android:gravity="center"/>
android:gravity="center"
android:visibility="gone"/>
</LinearLayout>

View File

@@ -2,7 +2,8 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
android:layout_height="match_parent"
android:background="@color/color_gray_theme">
<RelativeLayout
android:id="@+id/rl_title"
android:layout_width="match_parent"
@@ -10,7 +11,7 @@
<include
android:id="@+id/included_title"
layout="@layout/include_activity_back_layout" />
layout="@layout/include_activity_back_gray_layout" />
</RelativeLayout>
<LinearLayout
android:layout_width="match_parent"
@@ -24,6 +25,7 @@
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center"
android:layout_margin="@dimen/dp_1"
android:background="@drawable/tab_selector_bg"
android:textSize="14sp"
android:textColor="@drawable/tab_selector_text"
@@ -34,7 +36,8 @@
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center"
android:background="@drawable/tab_selector_bg_center"
android:layout_margin="@dimen/dp_1"
android:background="@drawable/tab_selector_bg"
android:textSize="14sp"
android:textColor="@drawable/tab_selector_text"
android:text="@string/water_bound_device"/>
@@ -44,7 +47,8 @@
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center"
android:background="@drawable/tab_selector_bg2"
android:layout_margin="@dimen/dp_1"
android:background="@drawable/tab_selector_bg"
android:textSize="14sp"
android:textColor="@drawable/tab_selector_text"
android:text="@string/water_device_bind"/>

View File

@@ -51,7 +51,7 @@
android:layout_marginLeft="@dimen/dp_5"
android:textSize="16sp"
android:textColor="@color/color_222222"
android:text="浅色"
android:text="@string/theme_light"
android:textStyle="bold"/>
</LinearLayout>
</LinearLayout>
@@ -89,7 +89,7 @@
android:layout_marginLeft="@dimen/dp_5"
android:textSize="16sp"
android:textColor="@color/color_222222"
android:text="深色"
android:text="@string/theme_dark"
android:textStyle="bold"/>
</LinearLayout>
</LinearLayout>

View File

@@ -183,10 +183,11 @@
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_10"
android:paddingVertical="@dimen/dp_6"
android:orientation="horizontal"
android:background="@drawable/shape_f9f9f9_corner_5"
android:layout_marginHorizontal="@dimen/dp_20">
android:layout_marginHorizontal="@dimen/dp_10">
<TextView
android:id="@+id/tv_work_duartion"
android:layout_width="match_parent"
@@ -195,6 +196,7 @@
android:layout_weight="3"
android:background="@null"
android:textSize="14sp"
android:textColorHint="@color/text_hint_theme_color"
android:hint="@string/device_custom_work_time"/>
<TextView
android:layout_width="wrap_content"

View File

@@ -3,7 +3,7 @@
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white">
android:background="@color/mainBackgroundColor">
<RelativeLayout
android:id="@+id/rl_title"
android:layout_width="match_parent"
@@ -22,7 +22,7 @@
android:layout_marginLeft="@dimen/dp_20"
android:layout_centerVertical="true"
android:textSize="16sp"
android:textColor="@color/color_222222"
android:textColor="@color/textPrimaryColor"
android:text="@string/device_info_code"/>
<TextView
android:layout_width="wrap_content"
@@ -44,7 +44,7 @@
android:layout_marginLeft="@dimen/dp_20"
android:layout_centerVertical="true"
android:textSize="16sp"
android:textColor="@color/color_222222"
android:textColor="@color/textPrimaryColor"
android:text="@string/device_info_type"/>
<TextView
android:layout_width="wrap_content"
@@ -66,7 +66,7 @@
android:layout_marginLeft="@dimen/dp_20"
android:layout_centerVertical="true"
android:textSize="16sp"
android:textColor="@color/color_222222"
android:textColor="@color/textPrimaryColor"
android:text="@string/device_info_serial_number"/>
<TextView
android:layout_width="wrap_content"
@@ -88,7 +88,7 @@
android:layout_marginLeft="@dimen/dp_20"
android:layout_centerVertical="true"
android:textSize="16sp"
android:textColor="@color/color_222222"
android:textColor="@color/textPrimaryColor"
android:text="@string/device_info_firmware_version"/>
<TextView
android:id="@+id/tv_device_name"

View File

@@ -4,7 +4,7 @@
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/mainBackgroundColor">
android:background="@color/color_gray_theme">
<RelativeLayout
android:id="@+id/rl_title"
android:layout_width="match_parent"
@@ -12,7 +12,7 @@
<include
android:id="@+id/included_title"
layout="@layout/include_activity_back_whitebg_layout" />
layout="@layout/include_activity_back_gray_layout" />
</RelativeLayout>
<TextView
@@ -95,6 +95,17 @@
android:hint="@string/input_wifi_psd_tip"/>
</LinearLayout>
</LinearLayout>
<TextView
android:id="@+id/tv_progress"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_20"
android:layout_marginTop="@dimen/dp_10"
android:textSize="20sp"
android:textColor="@color/textPrimaryColor"
android:text="进度"
android:textStyle="bold"
android:visibility="gone"/>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_wifi_list"
@@ -117,4 +128,5 @@
android:layout_marginTop="@dimen/dp_40"
android:gravity="center"
android:visibility="gone"/>
</LinearLayout>

View File

@@ -3,7 +3,7 @@
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/color_F9F9F9">
android:background="@color/mainBackgroundColor">
<RelativeLayout
android:id="@+id/rl_title"
android:layout_width="match_parent"
@@ -19,7 +19,7 @@
android:layout_marginLeft="@dimen/dp_20"
android:layout_marginTop="@dimen/dp_20"
android:textSize="14sp"
android:textColor="@color/color_222222"
android:textColor="@color/textPrimaryColor"
android:text="@string/device_setting_info"
android:textStyle="bold"/>
<LinearLayout
@@ -37,7 +37,7 @@
android:layout_marginLeft="@dimen/dp_20"
android:layout_centerVertical="true"
android:textSize="16sp"
android:textColor="@color/color_222222"
android:textColor="@color/textPrimaryColor"
android:text="@string/device_setting_name"/>
<ImageView
android:id="@+id/img_point1"
@@ -55,7 +55,7 @@
android:layout_toLeftOf="@+id/img_point1"
android:layout_marginRight="@dimen/dp_20"
android:textSize="14sp"
android:textColor="@color/color_999999"
android:textColor="@color/textPrimaryColor"
android:text="设备名称"/>
</RelativeLayout>
@@ -69,7 +69,7 @@
android:layout_marginLeft="@dimen/dp_20"
android:layout_centerVertical="true"
android:textSize="16sp"
android:textColor="@color/color_222222"
android:textColor="@color/textPrimaryColor"
android:text="@string/device_setting_info"/>
<ImageView
android:id="@+id/img_point2"
@@ -91,7 +91,7 @@
android:layout_marginLeft="@dimen/dp_20"
android:layout_centerVertical="true"
android:textSize="16sp"
android:textColor="@color/color_222222"
android:textColor="@color/textPrimaryColor"
android:text="@string/device_setting_wifi_manager"/>
<ImageView
android:id="@+id/img_point3"
@@ -123,7 +123,7 @@
android:layout_marginLeft="@dimen/dp_20"
android:layout_centerVertical="true"
android:textSize="16sp"
android:textColor="@color/color_222222"
android:textColor="@color/textPrimaryColor"
android:text="@string/device_setting_unbind"/>
<ImageView
android:id="@+id/img_point4"

View File

@@ -17,7 +17,7 @@
android:layout_centerVertical="true"
android:layout_centerHorizontal="true"
android:textSize="14sp"
android:textColor="@color/color_838080"
android:textColor="@color/textPrimaryColor"
android:text="30min"/>
</RelativeLayout>
</LinearLayout>

View File

@@ -0,0 +1,41 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="170dp"
android:layout_height="170dp"
android:layout_gravity="center"
android:gravity="center"
android:orientation="vertical"
android:layout_marginBottom="@dimen/dp_80"
android:background="@drawable/shape_loading_trans_bg">
<!-- <ProgressBar-->
<!-- android:visibility="gone"-->
<!-- android:id="@+id/pb_load"-->
<!-- android:layout_width="45dp"-->
<!-- android:layout_height="45dp"-->
<!-- android:indeterminateDrawable="@drawable/dialog_loading_progress_bar" />-->
<com.timqi.sectorprogressview.ColorfulRingProgressView
android:id="@+id/circle_loading"
android:layout_width="@dimen/dp_110"
android:layout_height="@dimen/dp_110"
xmlns:app="http://schemas.android.com/apk/res-auto"
app:bgColor="#e1e1e1"
app:fgColorEnd="@color/color_zhu"
app:fgColorStart="#B0F6AA"
app:percent="75"
app:startAngle="0"
app:strokeWidth="8dp"
/>
<TextView
android:id="@+id/tv_load_dialog"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="正在配置网络"
android:textColor="@color/color_zhu"
android:textSize="13sp"
android:layout_marginTop="@dimen/dp_4"/>
</LinearLayout>

View File

@@ -28,7 +28,7 @@
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_10"
android:text="@string/history_filter_time_title"
android:textColor="@color/color_666666"
android:textColor="@color/textPrimaryColor"
android:textSize="12sp" />
<LinearLayout
android:layout_width="match_parent"
@@ -51,7 +51,8 @@
android:layout_weight="2"
android:layout_marginStart="@dimen/dp_10"
android:hint="@string/history_filter_start_time_tip"
android:textColor="@color/color_666666"
android:textColor="@color/textPrimaryColor"
android:textColorHint="@color/textPrimaryColor"
android:textSize="12sp" />
<TextView
@@ -70,7 +71,8 @@
android:layout_marginEnd="@dimen/dp_10"
android:gravity="right"
android:hint="@string/history_filter_end_time_tip"
android:textColor="@color/color_666666"
android:textColor="@color/textPrimaryColor"
android:textColorHint="@color/textPrimaryColor"
android:textSize="12sp" />
</LinearLayout>

View File

@@ -17,13 +17,15 @@
android:layout_width="match_parent"
android:layout_height="@dimen/dp_40"
android:orientation="horizontal"
android:layout_marginHorizontal="@dimen/dp_20">
android:layout_marginHorizontal="@dimen/dp_20"
android:background="@drawable/shape_add_water_tab_bg">
<TextView
android:id="@+id/tv_history"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center"
android:layout_margin="@dimen/dp_1"
android:background="@drawable/tab_selector_bg"
android:textSize="14sp"
android:textColor="@drawable/tab_selector_text"
@@ -34,7 +36,8 @@
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center"
android:background="@drawable/tab_selector_bg2"
android:layout_margin="@dimen/dp_1"
android:background="@drawable/tab_selector_bg"
android:textSize="14sp"
android:textColor="@drawable/tab_selector_text"
android:text="@string/plan_tab_tally"/>

View File

@@ -0,0 +1,62 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<RelativeLayout
android:id="@+id/relative_title"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_48"
android:background="@color/color_gray_theme">
<ImageView
android:id="@+id/img_back"
android:layout_width="22dp"
android:layout_height="match_parent"
android:layout_centerVertical="true"
android:src="@mipmap/img_back_black"
android:layout_marginLeft="@dimen/dp_10"/>
<TextView
android:id="@+id/tv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:textSize="18sp"
android:textColor="@color/textPrimaryColor"
android:textStyle="bold"
android:text="标题名称"
android:layout_marginLeft="@dimen/dp_10"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true"/>
<TextView
android:id="@+id/tv_title_info"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_toRightOf="@+id/tv_title"
android:textSize="@dimen/sp_14"
android:textColor="@color/color_2E2E2E"
android:text="(剩余时间)"
android:layout_marginLeft="@dimen/dp_5"
android:visibility="gone"/>
<TextView
android:id="@+id/tv_title_right"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center_vertical"
android:layout_alignParentRight="true"
android:layout_marginRight="@dimen/dp_10"
android:textSize="14sp"
android:textColor="@color/color_333333"
android:text=""
android:layout_marginLeft="@dimen/dp_5"
android:visibility="visible"/>
<ImageView
android:id="@+id/img_setting"
android:layout_width="@dimen/dp_20"
android:layout_height="@dimen/dp_20"
android:layout_centerVertical="true"
android:layout_alignParentRight="true"
android:src="@drawable/icon_mine_settings"
android:layout_marginRight="@dimen/dp_20"
android:visibility="gone"/>
</RelativeLayout>
</RelativeLayout>

View File

@@ -12,7 +12,7 @@
android:layout_width="22dp"
android:layout_height="match_parent"
android:layout_centerVertical="true"
android:src="@mipmap/img_back_black"
android:src="@drawable/img_back_black"
android:layout_marginLeft="@dimen/dp_10"/>
<TextView
android:id="@+id/tv_title"
@@ -55,7 +55,7 @@
android:layout_height="@dimen/dp_20"
android:layout_centerVertical="true"
android:layout_alignParentRight="true"
android:src="@mipmap/icon_mine_settings"
android:src="@drawable/icon_mine_settings"
android:layout_marginRight="@dimen/dp_20"
android:visibility="gone"/>
</RelativeLayout>

View File

@@ -14,6 +14,7 @@
android:layout_centerVertical="true"
android:layout_centerHorizontal="true"/>
<TextView
android:id="@+id/tv_noresult"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="14sp"
@@ -21,5 +22,19 @@
android:text="暂无结果"
android:layout_below="@+id/img_noresult"
android:layout_centerHorizontal="true"/>
<TextView
android:id="@+id/btn_refresh"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingVertical="@dimen/dp_5"
android:paddingHorizontal="@dimen/dp_10"
android:layout_centerHorizontal="true"
android:background="@drawable/shape_green_button_bg"
android:layout_below="@+id/tv_noresult"
android:layout_marginTop="@dimen/dp_10"
android:gravity="center"
android:text="@string/btn_manual_refresh"
android:textColor="@color/color_white"
android:textSize="16sp" />
</RelativeLayout>
</RelativeLayout>

View File

@@ -28,7 +28,7 @@
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_4"
android:textSize="14sp"
android:textColor="@color/color_222222"
android:textColor="@color/textPrimaryColor"
android:text="@string/plan_start_time"
android:layout_marginVertical="@dimen/dp_13"/>
@@ -39,7 +39,7 @@
android:layout_weight="9"
android:gravity="center_vertical"
android:textSize="14sp"
android:textColor="@color/color_222222"
android:textColor="@color/textPrimaryColor"
android:layout_marginLeft="@dimen/dp_10"
android:hint="@string/select_water_time"/>
@@ -70,7 +70,7 @@
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_4"
android:textSize="14sp"
android:textColor="@color/color_222222"
android:textColor="@color/textPrimaryColor"
android:text="@string/plan_time"
android:layout_marginVertical="@dimen/dp_13"/>
@@ -81,7 +81,7 @@
android:layout_weight="9"
android:gravity="center_vertical"
android:textSize="14sp"
android:textColor="@color/color_222222"
android:textColor="@color/textPrimaryColor"
android:layout_marginLeft="@dimen/dp_10"
android:hint="@string/input_water_plan_time"/>
<TextView

View File

@@ -42,7 +42,7 @@
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_4"
android:text="YA226641000107"
android:textColor="@color/color_666666"
android:textColor="@color/color_subtitle"
android:textSize="12sp" />
<!-- 电量信息 -->
@@ -65,7 +65,7 @@
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_4"
android:text="100%"
android:textColor="@color/color_666666"
android:textColor="@color/color_subtitle"
android:textSize="12sp" />
</LinearLayout>
</LinearLayout>

View File

@@ -74,7 +74,7 @@
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/dp_15"
android:layout_marginTop="@dimen/dp_10"
android:text="设备"
android:text="@string/device_setting_info"
android:textColor="@color/color_333333"
android:textSize="16sp"
android:textStyle="bold" />

View File

@@ -91,7 +91,7 @@
android:textStyle="bold"
android:textSize="16sp"
android:textColor="@color/textPrimaryColor"
android:text="背景主题"/>
android:text="@string/theme_title"/>
<ImageView
android:layout_width="0dp"
@@ -121,7 +121,7 @@
android:textStyle="bold"
android:textSize="16sp"
android:textColor="@color/textPrimaryColor"
android:text="语言选择"/>
android:text="@string/language_selection"/>
<ImageView
android:layout_width="0dp"
@@ -151,7 +151,7 @@
android:textStyle="bold"
android:textSize="16sp"
android:textColor="@color/textPrimaryColor"
android:text="密码管理"/>
android:text="@string/password_management"/>
<ImageView
android:layout_width="0dp"

View File

@@ -64,7 +64,7 @@
android:layout_marginLeft="@dimen/dp_20"
android:layout_centerVertical="true"
android:textSize="16sp"
android:textColor="@color/color_222222"
android:textColor="@color/textPrimaryColor"
android:text="@string/mine_nickname"/>
<ImageView
android:id="@+id/img_point1"
@@ -96,7 +96,7 @@
android:layout_marginLeft="@dimen/dp_20"
android:layout_centerVertical="true"
android:textSize="16sp"
android:textColor="@color/color_222222"
android:textColor="@color/textPrimaryColor"
android:text="@string/mine_bind_phone"/>
<ImageView
android:id="@+id/img_point2"

View File

@@ -3,7 +3,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@color/white">
android:background="@color/mainBackgroundColor">
<RelativeLayout
android:id="@+id/rl_title"
android:layout_width="match_parent"
@@ -24,7 +24,7 @@
android:layout_marginLeft="@dimen/dp_20"
android:layout_centerVertical="true"
android:textSize="16sp"
android:textColor="@color/color_222222"
android:textColor="@color/textPrimaryColor"
android:text="@string/mine_psd_reset"/>
<ImageView
android:layout_width="@dimen/dp_7"
@@ -45,7 +45,7 @@
android:layout_marginLeft="@dimen/dp_20"
android:layout_centerVertical="true"
android:textSize="16sp"
android:textColor="@color/color_222222"
android:textColor="@color/textPrimaryColor"
android:text="@string/mine_find_psd"/>
<ImageView
android:layout_width="@dimen/dp_7"

View File

@@ -30,7 +30,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="智能浇水设备A1"
android:textColor="@color/color_333333"
android:textColor="@color/textPrimaryColor"
android:textSize="17sp"
android:textStyle="bold" />

View File

@@ -30,7 +30,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="智能浇水设备A1"
android:textColor="@color/color_333333"
android:textColor="@color/textPrimaryColor"
android:textSize="17sp"
android:textStyle="bold" />

View File

@@ -19,7 +19,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="12sp"
android:textColor="@color/color_222222"
android:textColor="@color/textPrimaryColor"
android:text="周一"/>
<View

View File

@@ -50,7 +50,8 @@
android:background="@drawable/shape_line_gray_bg"
android:layout_marginTop="@dimen/dp_10"
android:textSize="16sp"
android:textColor="@color/color_333333"
android:textColor="@color/textPrimaryColor"
android:textColorHint="@color/color_subtitle"
android:hint="请输入激活码"/>
<TextView

View File

@@ -3,7 +3,7 @@
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/color_F9F9F9">
android:background="@color/color_gray_theme">
<RelativeLayout
android:id="@+id/rl_title"
android:layout_width="match_parent"
@@ -11,7 +11,7 @@
<include
android:id="@+id/included_title"
layout="@layout/include_activity_back_layout" />
layout="@layout/include_activity_back_gray_layout" />
</RelativeLayout>
<TextView
android:id="@+id/tv_register_resetpsd"
@@ -20,7 +20,7 @@
android:layout_marginLeft="@dimen/dp_20"
android:layout_marginTop="@dimen/dp_10"
android:textSize="20sp"
android:textColor="@color/color_222222"
android:textColor="@color/textPrimaryColor"
android:text="@string/register_title"
android:textStyle="bold"/>
@@ -44,7 +44,8 @@
android:layout_marginLeft="@dimen/dp_5"
android:background="@null"
android:textSize="14sp"
android:textColor="@color/color_222222"
android:textColor="@color/text_hint_theme_color"
android:textColorHint="@color/text_hint_theme_color"
android:hint="@string/hint_input_account"/>
</LinearLayout>
@@ -70,7 +71,8 @@
android:layout_marginLeft="@dimen/dp_5"
android:background="@null"
android:textSize="14sp"
android:textColor="@color/color_222222"
android:textColor="@color/text_hint_theme_color"
android:textColorHint="@color/text_hint_theme_color"
android:hint="@string/hint_input_verifi"/>
<TextView
android:id="@+id/tv_get_verifi_code"
@@ -106,7 +108,8 @@
android:layout_marginLeft="@dimen/dp_5"
android:background="@null"
android:textSize="14sp"
android:textColor="@color/color_222222"
android:textColor="@color/text_hint_theme_color"
android:textColorHint="@color/text_hint_theme_color"
android:hint="@string/hint_input_psd"/>
</LinearLayout>
@@ -131,7 +134,8 @@
android:layout_marginLeft="@dimen/dp_5"
android:background="@null"
android:textSize="14sp"
android:textColor="@color/color_222222"
android:textColor="@color/text_hint_theme_color"
android:textColorHint="@color/text_hint_theme_color"
android:hint="@string/hint_input_psd_agin"/>
</LinearLayout>

View File

@@ -3,7 +3,7 @@
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/color_F9F9F9">
android:background="@color/color_gray_theme">
<RelativeLayout
android:id="@+id/rl_title"
android:layout_width="match_parent"
@@ -11,7 +11,7 @@
<include
android:id="@+id/included_title"
layout="@layout/include_activity_back_layout" />
layout="@layout/include_activity_back_gray_layout" />
</RelativeLayout>
<LinearLayout
@@ -34,7 +34,8 @@
android:layout_marginLeft="@dimen/dp_5"
android:background="@null"
android:textSize="14sp"
android:textColor="@color/color_222222"
android:textColor="@color/text_hint_theme_color"
android:textColorHint="@color/text_hint_theme_color"
android:hint="@string/hint_input_old_psd"/>
</LinearLayout>
@@ -58,7 +59,8 @@
android:layout_marginLeft="@dimen/dp_5"
android:background="@null"
android:textSize="14sp"
android:textColor="@color/color_222222"
android:textColor="@color/text_hint_theme_color"
android:textColorHint="@color/text_hint_theme_color"
android:hint="@string/hint_input_new_psd"/>
</LinearLayout>
@@ -83,7 +85,8 @@
android:layout_marginLeft="@dimen/dp_5"
android:background="@null"
android:textSize="14sp"
android:textColor="@color/color_222222"
android:textColor="@color/text_hint_theme_color"
android:textColorHint="@color/text_hint_theme_color"
android:hint="@string/hint_input_new_psd_agin"/>
</LinearLayout>

View File

@@ -10,8 +10,8 @@
android:paddingRight="@dimen/dp_20">
<ImageView
android:id="@+id/iv_image"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_width="@dimen/dp_32"
android:layout_height="@dimen/dp_21"
android:scaleType="fitCenter"/>
<TextView
android:id="@+id/tv_text"

View File

@@ -12,7 +12,7 @@
android:layout_weight="2"
android:textSize="14sp"
android:textStyle="bold"
android:textColor="@color/color_222222"
android:textColor="@color/textPrimaryColor"
android:text="周一"/>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_plan_detail_times"

View File

@@ -28,7 +28,7 @@
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_4"
android:textSize="14sp"
android:textColor="@color/color_222222"
android:textColor="@color/textPrimaryColor"
android:text="@string/plan_name_text"
android:layout_marginVertical="@dimen/dp_13"/>
@@ -38,7 +38,7 @@
android:layout_height="match_parent"
android:gravity="center_vertical"
android:textSize="14sp"
android:textColor="@color/color_222222"
android:textColor="@color/textPrimaryColor"
android:background="@null"
android:layout_marginLeft="@dimen/dp_10"
android:hint="@string/input_plan_name"/>
@@ -66,7 +66,7 @@
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_4"
android:textSize="14sp"
android:textColor="@color/color_222222"
android:textColor="@color/textPrimaryColor"
android:text="@string/plan_period"
android:layout_marginVertical="@dimen/dp_13"/>
</LinearLayout>
@@ -94,7 +94,7 @@
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_4"
android:textSize="14sp"
android:textColor="@color/color_222222"
android:textColor="@color/textPrimaryColor"
android:text="@string/device_control_start"
android:layout_marginVertical="@dimen/dp_13"/>
<View

View File

@@ -12,12 +12,12 @@
<include
android:id="@+id/included_title"
layout="@layout/include_activity_back_layout" />
layout="@layout/include_activity_back_whitebg_layout" />
</RelativeLayout>
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/color_white"
android:background="@color/mainBackgroundColor"
android:fillViewport="true"
android:overScrollMode="never">
<LinearLayout
@@ -39,7 +39,7 @@
android:layout_width="82dp"
android:layout_height="wrap_content"
android:text="@string/plan_name_text"
android:textColor="@color/color_222222"
android:textColor="@color/textPrimaryColor"
android:textSize="16sp" />
<TextView
@@ -49,7 +49,7 @@
android:layout_marginStart="@dimen/dp_10"
android:layout_weight="1"
android:text="名称名称"
android:textColor="@color/color_666666"
android:textColor="@color/textPrimaryColor"
android:textSize="16sp" />
</LinearLayout>
@@ -69,7 +69,7 @@
android:layout_width="82dp"
android:layout_height="wrap_content"
android:text="@string/plan_period"
android:textColor="@color/color_222222"
android:textColor="@color/textPrimaryColor"
android:textSize="16sp" />
<androidx.recyclerview.widget.RecyclerView
@@ -94,7 +94,7 @@
android:layout_width="82dp"
android:layout_height="wrap_content"
android:text="@string/water_bound_device"
android:textColor="@color/color_222222"
android:textColor="@color/textPrimaryColor"
android:textSize="16sp" />
<LinearLayout
@@ -141,7 +141,7 @@
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:text="@string/device_status"
android:textColor="@color/color_222222"
android:textColor="@color/textPrimaryColor"
android:textSize="16sp" />
<com.kyleduo.switchbutton.SwitchButton

View File

@@ -41,7 +41,8 @@
android:layout_toRightOf="@+id/img_search"
android:layout_marginLeft="@dimen/dp_8"
android:textSize="14sp"
android:hint="@string/input_plan_name"/>
android:hint="@string/input_plan_name"
android:textColorHint="@color/color_subtitle"/>
</RelativeLayout>
<TextView
android:id="@+id/tv_add"

View File

@@ -18,7 +18,7 @@
android:layout_weight="1"
android:layout_marginStart="@dimen/dp_12"
android:layout_gravity="center_vertical"
android:textColor="@color/color_333333"
android:textColor="@color/textPrimaryColor"
android:textSize="15sp"
android:maxLines="1"
android:ellipsize="end" />

Binary file not shown.

After

Width:  |  Height:  |  Size: 312 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 306 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 601 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 639 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 490 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 486 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 898 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 507 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 510 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 595 B

View File

@@ -1,151 +1,214 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- ==================== 登录页 ==================== -->
<string name="login_by_code">验证码登录</string>
<string name="login_by_psd">密码登录</string>
<string name="hint_input_account">请输入手机号或邮箱账号</string>
<string name="hint_input_verifi">请输入验证码</string>
<string name="get_verifi_code">获取验证码</string>
<string name="btn_login">登录</string>
<string name="go_register">立即注册</string>
<string name="change_language">语言选择</string>
<string name="reset_psd">忘记密码</string>
<string name="hint_input_old_psd">请输入原密码</string>
<string name="hint_input_psd">请输入密码</string>
<string name="hint_input_psd_agin">请再次输入密码</string>
<string name="hint_input_new_psd">请输入新密码</string>
<string name="hint_input_new_psd_agin">请再次输入新密码</string>
<string name="login_error_phone_empty">手机号不能为空</string>
<string name="hint_input_psd_not_match">两次输入的密码不一致</string>
<string name="login_error_phone_invalid">请输入正确的手机号或邮箱</string>
<string name="login_error_psd_empty">手机号或邮箱不能为空</string>
<string name="login_error_psd_agin_empty">请再次输入密码</string>
<string name="register_title">注册用户</string>
<string name="register_title_bar">注册</string>
<string name="register_success_title">注册成功</string>
<string name="button_commit">提交</string>
<string name="button_save">保存</string>
<string name="enter_app">进入平台</string>
<string name="enter_app_countdown">进入平台(%1$d)</string>
<string name="countdown_finished">倒计时结束</string>
<string name="reset_psd_title">找回密码</string>
<string name="set_permission">设置权限</string>
<string name="set_permission_content">使用智溉管家,需要给予以下访问权限</string>
<string name="permission_bluetooth_title">蓝牙</string>
<string name="permission_bluetooth_content">用于连接设备</string>
<string name="permission_wifi_title">WIFI</string>
<string name="btn_continue">继续</string>
<string name="tab_index_title">首页</string>
<string name="tab_plan_title">排程</string>
<string name="tab_history_title">历史</string>
<string name="tab_mine_title">我的</string>
<string name="scan_nearby_dev_title">扫描附近设备</string>
<string name="scan_nearby_dev_content">持续自动搜索中...</string>
<string name="scan_nearby_dev_hint">请将手机尽量靠近要添加的设备</string>
<string name="scan_add_device">扫描添加</string>
<string name="add_device_title">添加设备</string>
<string name="select_wifi_tip">选择WI-FI</string>
<string name="input_wifi_name_tip">请输入WIFI名称</string>
<string name="input_wifi_psd_tip">请输入WIFI密码</string>
<string name="wifi_not_enabled">请先开启WiFi</string>
<string name="no_wifi_found">未扫描到WiFi</string>
<string name="wifi_scan_failed">WiFi扫描失败</string>
<string name="button_next">下一步</string>
<string name="toast_select_wifi_tip">请选择要连接的Wifi</string>
<string name="toast_select_wifi_psd_tip">请输入Wifi密码</string>
<string name="connect_device_title">连接设备</string>
<string name="keep_device_bt_tips">请保持手机蓝牙开启并将手机尽量靠近设备</string>
<string name="keep_device_bt_tips2">向设备传输信息</string>
<string name="keep_device_bt_tips3">设备连接网络</string>
<string name="button_finish">完成</string>
<string name="button_reset">重置</string>
<string name="set_name">设置名称</string>
<string name="input_device_name_hint">请输入设备名称</string>
<string name="device_work_progress_title">工作进度</string>
<string name="device_work_progress_tips">进程结束后自动停止</string>
<string name="device_work_times_title">浇水时长</string>
<string name="device_custom_work_time">自定义时间</string>
<string name="device_control_start">开启浇水</string>
<string name="device_control_stop">关闭浇水</string>
<string name="device_base_setting_title">基本设置</string>
<string name="device_setting_name">设备名称</string>
<string name="device_setting_info">设备信息</string>
<string name="device_setting_wifi_manager">WiFi管理</string>
<string name="device_setting_unbind">解绑设备</string>
<string name="unbind_success">设备解绑成功</string>
<string name="settings_title">设置</string>
<string name="confirm_text">确定</string>
<string name="cancel_text">取消</string>
<string name="tip_text">提示</string>
<string name="tip_unbind_device">确定解除该绑定的设备</string>
<string name="device_info_code">设备编码</string>
<string name="device_info_type">设备型号</string>
<string name="device_info_serial_number">序列号</string>
<string name="device_info_firmware_version">固件版本</string>
<!-- Start -->
<string name="login_by_code">Sign In with Code</string>
<string name="login_by_psd">Sign In with Password</string>
<string name="hint_input_account">Enter your phone number or email</string>
<string name="hint_input_verifi">Enter verification code</string>
<string name="get_verifi_code">Get Code</string>
<string name="btn_login">Sign In</string>
<string name="go_register">Sign Up Now</string>
<string name="change_language">Language</string>
<string name="language_chinese">中文</string>
<string name="language_english">English</string>
<string name="language_switch_success">Language updated</string>
<string name="reset_psd">Forgot Password?</string>
<string name="hint_input_psd">Enter password</string>
<string name="hint_input_old_psd">Enter current password</string>
<string name="hint_input_psd_agin">Confirm password</string>
<string name="hint_input_new_psd">Enter new password</string>
<string name="hint_input_new_psd_agin">Confirm new password</string>
<string name="hint_input_psd_not_match">Passwords do not match</string>
<string name="login_error_phone_empty">Phone number or email is required</string>
<string name="login_error_psd_empty">Password is required</string>
<string name="login_error_psd_agin_empty">Please confirm your password</string>
<string name="login_error_phone_invalid">Enter a valid phone number or email</string>
<string name="hint_update_psd_success">Password reset successfully</string>
<string name="register_title">Create Account</string>
<string name="register_title_bar">Sign Up</string>
<string name="register_success_title">Registration Successful</string>
<string name="button_commit">Submit</string>
<string name="button_save">Save</string>
<string name="enter_app">Get Started</string>
<string name="enter_app_countdown">Get Started (%1$d)</string>
<string name="countdown_finished">Countdown Finished</string>
<string name="reset_psd_title">Reset Password</string>
<string name="set_permission">Permissions</string>
<string name="set_permission_content">Smart Irrigation requires the following permissions</string>
<string name="permission_bluetooth_title">Bluetooth</string>
<string name="permission_bluetooth_content">Used to connect devices</string>
<string name="permission_wifi_title">Wi-Fi</string>
<string name="btn_continue">Continue</string>
<string name="tab_index_title">Home</string>
<string name="tab_plan_title">Schedules</string>
<string name="tab_history_title">History</string>
<string name="tab_mine_title">Profile</string>
<string name="scan_nearby_dev_title">Scan Nearby Devices</string>
<string name="scan_nearby_dev_content">Searching for devices...</string>
<string name="scan_nearby_dev_hint">Move your phone closer to the device</string>
<string name="scan_add_device">Add Device</string>
<string name="add_device_title">Add Device</string>
<string name="select_wifi_tip">Select Wi-Fi</string>
<string name="input_wifi_name_tip">Enter Wi-Fi name</string>
<string name="input_wifi_psd_tip">Enter Wi-Fi password</string>
<string name="wifi_not_enabled">Please enable Wi-Fi first</string>
<string name="no_wifi_found">No Wi-Fi networks found</string>
<string name="wifi_scan_failed">Failed to scan Wi-Fi networks</string>
<string name="button_next">Next</string>
<string name="toast_select_wifi_tip">Select a Wi-Fi network</string>
<string name="toast_select_wifi_psd_tip">Enter the Wi-Fi password</string>
<string name="connect_device_title">Connect Device</string>
<string name="keep_device_bt_tips">Keep Bluetooth enabled and stay close to the device</string>
<string name="keep_device_bt_tips2">Sending information to device</string>
<string name="keep_device_bt_tips3">Connecting device to network</string>
<string name="button_finish">Finish</string>
<string name="button_reset">Reset</string>
<string name="set_name">Set Name</string>
<string name="input_device_name_hint">Enter device name</string>
<string name="device_work_progress_title">Watering Progress</string>
<string name="device_work_progress_tips">Will stop automatically when completed</string>
<string name="device_work_times_title">Watering Duration</string>
<string name="device_custom_work_time">Custom Duration</string>
<string name="device_control_start">Start Watering</string>
<string name="device_control_stop">Stop Watering</string>
<string name="device_base_setting_title">General Settings</string>
<string name="device_setting_name">Device Name</string>
<string name="device_setting_info">Device Info</string>
<string name="device_setting_wifi_manager">Wi-Fi Settings</string>
<string name="device_setting_unbind">Remove Device</string>
<string name="unbind_success">Device removed successfully</string>
<string name="settings_title">Settings</string>
<string name="confirm_text">Confirm</string>
<string name="cancel_text">Cancel</string>
<string name="tip_text">Notice</string>
<string name="tip_unbind_device">Are you sure you want to remove this device?</string>
<string name="device_info_code">Device ID</string>
<string name="device_info_type">Model</string>
<string name="device_info_serial_number">Serial Number</string>
<string name="device_info_firmware_version">Firmware Version</string>
<string name="device_status_working">Running</string>
<string name="device_status_not_working">Idle</string>
<string name="select_watering_duration">Select watering duration</string>
<string name="start_watering">Start Watering</string>
<!-- Schedule -->
<string name="input_plan_name">Enter schedule name</string>
<string name="add_water_plan">+ New Schedule</string>
<string name="plan_title">Schedules</string>
<string name="water_device_config">Watering Settings</string>
<string name="water_bound_device">Linked Devices</string>
<string name="water_device_bind">Available Devices</string>
<string name="add_water_plan_title">New Schedule</string>
<string name="edit_water_plan_title">Edit Schedule</string>
<string name="plan_name_text">Schedule Name</string>
<string name="plan_name_text_empty_hint">Schedule name cannot be empty</string>
<string name="plan_week_empty_hint">Select watering days</string>
<string name="select_the_device_to_link">Select a device to link</string>
<string name="delete_plan_tip">Delete this schedule?</string>
<string name="delete_plan_success">Deleted successfully</string>
<string name="close_plan_dialog_tip">Disable this schedule?</string>
<string name="no_bound_devices_tips">No devices linked</string>
<string name="plan_period">Repeat</string>
<string name="plan_time">Duration</string>
<string name="plan_start_time">Start Time</string>
<string name="select_water_time">Select watering time</string>
<string name="input_water_plan_time">Enter watering duration</string>
<string name="input_water_plan_time_error">Duration cannot be less than 0</string>
<string name="device_status">Status</string>
<string name="button_delete">Delete</string>
<string name="button_edit">Edit</string>
<string name="plan_detail_title">Schedule Details</string>
<string name="btn_manual_refresh">Refresh</string>
<!-- History -->
<string name="history_title">History</string>
<string name="plan_tab_history">Watering History</string>
<string name="plan_tab_tally">Statistics</string>
<string name="tab_filter_time">Date Range</string>
<string name="tab_filter_type">Trigger Type</string>
<string name="history_filter_time_title">Date Range</string>
<string name="history_filter_start_time_tip">Select start date</string>
<string name="history_filter_end_time_tip">Select end date</string>
<string name="history_filter_start_time_toast">Start date is required</string>
<string name="history_filter_end_time_toast">End date is required</string>
<string name="history_filter_end_time_error">End date cannot be earlier than start date</string>
<string name="history_filter_manual">Manual</string>
<string name="history_filter_auto">Scheduled</string>
<string name="history_filter_type_toast">Select a trigger type</string>
<string name="history_watering_adapter_time">Watering Time</string>
<string name="total_water_count">Total Watering Sessions</string>
<string name="week_water_count">This Week</string>
<string name="month_water_count">This Month</string>
<string name="schedule_water_count">Scheduled Sessions</string>
<string name="manual_water_count">Manual Sessions</string>
<string name="total_water_duration">Total Watering Time</string>
<string name="avg_water_duration">Average Duration</string>
<string name="unit_times">times</string>
<!-- Profile -->
<string name="mine_center_title">Profile</string>
<string name="button_logout">Sign Out</string>
<string name="mine_nickname">Nickname</string>
<string name="mine_bind_phone">Phone Number</string>
<string name="mine_infomation_title">Profile Information</string>
<string name="mine_psd_manager">Password Settings</string>
<string name="mine_psd_reset">Change Password</string>
<string name="mine_find_psd">Forgot Password</string>
<string name="logout_tips">Sign out of your account</string>
<!--排程-->
<string name="input_plan_name">输入排程名称</string>
<string name="add_water_plan">+新增排程</string>
<string name="plan_title">排程</string>
<string name="water_device_config">浇水配置</string>
<string name="water_bound_device">已关联设备</string>
<string name="water_device_bind">关联设备</string>
<string name="add_water_plan_title">新增排程</string>
<string name="edit_water_plan_title">Edit Plan</string>
<string name="plan_name_text">排程名称</string>
<string name="plan_period">浇水周期</string>
<string name="plan_time">浇水时长</string>
<string name="plan_start_time">开始时间</string>
<string name="select_water_time">请选择浇水时间</string>
<string name="input_water_plan_time_error">浇水时长不能小于0</string>
<string name="input_water_plan_time">请输入浇水时长</string>
<string name="device_status">状态</string>
<string name="button_delete">删除</string>
<string name="button_edit">编辑</string>
<string name="plan_detail_title">排程详情</string>
<string name="agree_user_policy">
I have read and agree to the Smart Irrigation User Agreement and Privacy Policy</string>
<string name="user_agreement">User Agreement</string>
<string name="privacy_policy">Privacy Policy</string>
<!--历史-->
<string name="history_title">历史</string>
<string name="plan_tab_history">浇水历史</string>
<string name="plan_tab_tally">数据统计</string>
<string name="tab_filter_time">时间筛选</string>
<string name="tab_filter_type">触发方式</string>
<string name="history_filter_time_title">时间</string>
<string name="history_filter_start_time_tip">选择开始时间</string>
<string name="history_filter_end_time_tip">选择结束时间</string>
<string name="history_filter_start_time_toast">开始时间不能为空</string>
<string name="history_filter_end_time_toast">结束时间不能为空</string>
<string name="history_filter_end_time_error">结束时间不能早于开始时间</string>
<string name="history_filter_manual">手动</string>
<string name="history_filter_auto">排程</string>
<string name="history_filter_type_toast">请选择一种触发方式</string>
<string name="history_watering_adapter_time">浇水时间</string>
<!-- 中文 -->
<string name="total_water_count">总浇水次数</string>
<string name="week_water_count">本周浇水次数</string>
<string name="month_water_count">本月浇水次数</string>
<string name="schedule_water_count">排程浇水次数</string>
<string name="manual_water_count">手动浇水次数</string>
<string name="total_water_duration">总浇水时间</string>
<string name="avg_water_duration">平均浇水时间</string>
<string name="unit_times"></string>
<string name="permission_request_title">Permission Request</string>
<string name="camera_permission_scan_desc">
Smart Irrigation requires access to your camera to scan QR codes and add devices</string>
<string name="button_deny">Cancel</string>
<string name="button_allow">Allow</string>
<string name="bluetooth_permission_title">Bluetooth Permission</string>
<!--个人中心-->
<string name="bluetooth_permission_desc">
Smart Irrigation requires Bluetooth access to scan and add devices</string>
<string name="mine_center_title">个人中心</string>
<string name="button_logout">退出登录</string>
<string name="mine_nickname">昵称</string>
<string name="mine_bind_phone">绑定手机</string>
<string name="mine_infomation_title">个人资料</string>
<string name="mine_psd_manager">密码管理</string>
<string name="mine_psd_reset">重置密码</string>
<string name="mine_find_psd">找回密码</string>
<string name="week_monday">Mon</string>
<string name="week_tuesday">Tue</string>
<string name="week_wednesday">Wed</string>
<string name="week_thursday">Thu</string>
<string name="week_friday">Fri</string>
<string name="week_saturday">Sat</string>
<string name="week_sunday">Sun</string>
<string name="schedule_time_conflict">Schedule conflict detected. Please adjust.</string>
<string name="schedule_select_at_least_one_day">Select at least one day</string>
<string name="save_schedule_before_bind_device">The schedule must be saved before linking a device. Continue?</string>
<string name="please_save_schedule_first">Save the schedule first</string>
<string name="data_changed_save_confirm">You have unsaved changes. Save before leaving?</string>
<string name="schedule_add_success">Schedule created</string>
<string name="schedule_update_success">Schedule updated</string>
<string name="theme_title">Theme</string>
<string name="language_selection">Language</string>
<string name="password_management">Password Management</string>
<string name="theme_light">Light</string>
<string name="theme_dark">Dark</string>
<string name="press_again_to_exit">Press again to exit</string>
<!-- End -->

View File

@@ -4,5 +4,9 @@
<color name="colorPrimaryDark">#000063</color>
<color name="colorAccent">#FF80AB</color>
<color name="mainBackgroundColor">#303030</color>
<color name="color_gray_theme">#303030</color>
<color name="textPrimaryColor">#E0E0E0</color>
<color name="color_subtitle">#E0E0E0</color>
<color name="text_hint_theme_color">#303030</color>
<color name="deviceControlItemColor">#878787</color>
</resources>

View File

@@ -5,6 +5,12 @@
<color name="colorAccent">#FF4081</color>
<color name="mainBackgroundColor">#FFFFFF</color>
<color name="textPrimaryColor">#222222</color>
<color name="text_hint_theme_color">#838080</color>
<color name="color_subtitle">#666666</color>
<color name="color_gray_theme">#F9F9F9</color>
<color name="deviceControlItemColor">#FFFFFF</color>
<color name="transparent">#00000000</color>
<color name="color_white">#FFFFFF</color>
@@ -48,7 +54,13 @@
<color name="color_676767">#676767</color>
<color name="color_c5d7e1">#C5D7E1</color>
<color name="color_EFEFEF">#EFEFEF</color>
<!-- 主题适配 -->
<color name="color_666666">#666666</color>
<color name="color_F9F9F9">#F9F9F9</color>
<color name="color_DDE6F5">#DDE6F5</color>
<color name="color_2E9CF3">#2E9CF3</color>
<color name="color_F7F9FA">#F7F9FA</color>
@@ -105,7 +117,7 @@
<color name="color_F0F8F1">#F0F8F1</color>
<color name="color_FFFCEB">#FFFCEB</color>
<color name="color_1D90FF">#1D90FF</color>
<color name="color_F9F9F9">#F9F9F9</color>
<color name="color_8000CA9D">#8000CA9D</color>

View File

@@ -1,6 +1,7 @@
<resources
xmlns:tools="http://schemas.android.com/tools"
tools:locale="zh">
<!--开始-->
<string name="login_by_code">验证码登录</string>
<string name="login_by_psd">密码登录</string>
<string name="hint_input_account">请输入手机号或邮箱账号</string>
@@ -9,6 +10,9 @@
<string name="btn_login">登录</string>
<string name="go_register">立即注册</string>
<string name="change_language">语言选择</string>
<string name="language_chinese">中文</string>
<string name="language_english">English</string>
<string name="language_switch_success">语言切换成功</string>
<string name="reset_psd">忘记密码</string>
<string name="hint_input_psd">请输入密码</string>
<string name="hint_input_old_psd">请输入原密码</string>
@@ -85,6 +89,8 @@
<string name="device_info_firmware_version">固件版本</string>
<string name="device_status_working">工作中</string>
<string name="device_status_not_working">待机中</string>
<string name="select_watering_duration">请选择浇水时长</string>
<string name="start_watering">开始浇水</string>
<!--排程-->
@@ -114,6 +120,7 @@
<string name="button_delete">删除</string>
<string name="button_edit">编辑</string>
<string name="plan_detail_title">排程详情</string>
<string name="btn_manual_refresh">手动刷新</string>
<!--历史-->
@@ -143,8 +150,6 @@
<string name="unit_times"></string>
<!--个人中心-->
<string name="mine_center_title">个人中心</string>
@@ -158,8 +163,42 @@
<string name="logout_tips">退出当前账号</string>
<string name="agree_user_policy">
我已阅读并同意智能浇灌《用户协议》《隐私政策》</string>
<string name="user_agreement">《用户协议》</string>
<string name="privacy_policy">《隐私政策》</string>
<string name="permission_request_title">权限申请</string>
<string name="camera_permission_scan_desc">智能浇水需要访问您的相机,用于扫描二维码添加设备</string>
<string name="button_deny">不允许</string>
<string name="button_allow">允许</string>
<string name="bluetooth_permission_title">蓝牙权限申请</string>
<string name="bluetooth_permission_desc">智溉管家需要访问蓝牙,以扫描并添加设备</string>
<string name="week_monday">周一</string>
<string name="week_tuesday">周二</string>
<string name="week_wednesday">周三</string>
<string name="week_thursday">周四</string>
<string name="week_friday">周五</string>
<string name="week_saturday">周六</string>
<string name="week_sunday">周日</string>
<string name="schedule_time_conflict">时间配置存在冲突,请调整</string>
<string name="schedule_select_at_least_one_day">请至少配置一天的时间</string>
<string name="save_schedule_before_bind_device">关联设备需要保存排程配置,是否继续?</string>
<string name="please_save_schedule_first">请先保存排程</string>
<string name="data_changed_save_confirm">数据已发生变更,是否保存?</string>
<string name="schedule_add_success">排程新增成功</string>
<string name="schedule_update_success">排程更新成功</string>
<string name="theme_title">背景主题</string>
<string name="language_selection">语言选择</string>
<string name="password_management">密码管理</string>
<string name="theme_light">浅色</string>
<string name="theme_dark">深色</string>
<string name="press_again_to_exit">再按一次退出</string>
<!--结束-->

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<locale-config xmlns:android="http://schemas.android.com/apk/res/android">
<locale android:name="zh" />
<locale android:name="en" />
</locale-config>