diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..94a25f7
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/yztiot/streetlamp/BootCompleteReceiver.java b/app/src/main/java/com/yztiot/streetlamp/BootCompleteReceiver.java
index fcf8c71..0ee7ce4 100644
--- a/app/src/main/java/com/yztiot/streetlamp/BootCompleteReceiver.java
+++ b/app/src/main/java/com/yztiot/streetlamp/BootCompleteReceiver.java
@@ -7,6 +7,7 @@ import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.util.Log;
+import android.widget.Toast;
import java.util.Calendar;
@@ -15,7 +16,13 @@ public class BootCompleteReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) {
// 读取文件并设置AlarmManager
- setAlarms(context);
+ SharedPreferences prefs = context.getSharedPreferences(MainActivity.PREFS_NAME, Context.MODE_PRIVATE);
+ int switchValue = prefs.getInt(MainActivity.SWITCH_KEY,-1);
+ Log.d("BootCompleteReceiver","BootCompleteReceiver: "+switchValue);
+ Toast.makeText(context, "switchValue: "+switchValue, Toast.LENGTH_SHORT).show();
+ if (switchValue == 1){
+ setAlarms(context);
+ }
}
}
@@ -26,6 +33,9 @@ public class BootCompleteReceiver extends BroadcastReceiver {
int endHour = prefs.getInt(MainActivity.END_HOUR_KEY, -1);
int endMinute = prefs.getInt(MainActivity.END_MINUTE_KEY, -1);
+
+
+
if (startHour != -1 && startMinute != -1 && endHour != -1 && endMinute != -1) {
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
diff --git a/app/src/main/java/com/yztiot/streetlamp/ColorModeAdapter.java b/app/src/main/java/com/yztiot/streetlamp/ColorModeAdapter.java
deleted file mode 100644
index 8719fbd..0000000
--- a/app/src/main/java/com/yztiot/streetlamp/ColorModeAdapter.java
+++ /dev/null
@@ -1,201 +0,0 @@
-package com.yztiot.streetlamp;
-
-import android.graphics.drawable.GradientDrawable;
-import android.util.Log;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.ImageView;
-import android.widget.TextView;
-
-import androidx.recyclerview.widget.RecyclerView;
-
-import java.util.List;
-
-public class ColorModeAdapter extends RecyclerView.Adapter {
- private List titles;
- private int selectedPosition = -1;
-
- public ColorModeAdapter(List titles) {
- this.titles = titles;
- }
-
- private OnSelectionChangedListener selectionChangedListener;
-
- public static class ViewHolder extends RecyclerView.ViewHolder {
- View rootView;
- TextView status;
- ImageView lightModeBackground;
-
- public ViewHolder(View itemView) {
- super(itemView);
- rootView = itemView;
- status = itemView.findViewById(R.id.color_mode_status);
- lightModeBackground = itemView.findViewById(R.id.light_mode_background);
- }
- }
-
- @Override
- public ColorModeAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
- View view = LayoutInflater.from(parent.getContext())
- .inflate(R.layout.color_mode, parent, false);
- return new ViewHolder(view);
- }
-
- @Override
- public void onBindViewHolder(ColorModeAdapter.ViewHolder holder, int position) {
- String colorName = titles.get(position);
- holder.status.setText(colorName);
-
- // 设置颜色圆圈背景
- View colorShow = holder.rootView.findViewById(R.id.color_show);
- colorShow.setBackground(getColorDrawableByName(colorName));
-
- // 设置选中样式
- if (position == selectedPosition) {
- holder.lightModeBackground.setBackgroundResource(R.drawable.btn_yellow);
- } else {
- holder.lightModeBackground.setBackgroundResource(R.drawable.btn_transparent);
- }
-
- holder.rootView.setOnClickListener(v -> {
- int currentPos = holder.getAdapterPosition();
- if (currentPos == RecyclerView.NO_POSITION) return;
-
- int oldPos = selectedPosition;
- selectedPosition = currentPos;
-
- notifyItemChanged(oldPos);
- notifyItemChanged(selectedPosition);
- Log.d("ColorMode", "选中:" + colorName);
- if (selectionChangedListener != null) {
- selectionChangedListener.onSelectionChanged(selectedPosition);
- }
- });
- }
-
- private GradientDrawable getColorDrawableByName(String colorName) {
- // 创建一个 GradientDrawable 对象
- GradientDrawable drawable = new GradientDrawable();
- drawable.setShape(GradientDrawable.OVAL); // 明确设置形状为圆形
-
- switch (colorName) {
- case "红黄":
- case "Red-Yellow":
- drawable.setColors(new int[]{0xCCFF0000, 0xCCFFFF00});
- break;
- case "红紫":
- case "Red-Purple":
- drawable.setColors(new int[]{0xCCFF0000, 0xCC800080});
- break;
- case "红青":
- case "Red-Cyan":
- drawable.setColors(new int[]{0xCCFF0000, 0xCC00FFFF});
- break;
- case "绿青":
- case "Green-Cyan":
- drawable.setColors(new int[]{0xCC00FF00, 0xCC00FFFF});
- break;
- case "绿蓝":
- case "Green-Blue":
- drawable.setColors(new int[]{0xCC00FF00, 0xCC0000FF});
- break;
- case "绿黄":
- case "Green-Yellow":
- drawable.setColors(new int[]{0xCC00FF00, 0xCCFFFF00});
- break;
- case "绿紫":
- case "Green-Purple":
- drawable.setColors(new int[]{0xCC00FF00, 0xCC800080});
- break;
- case "黄紫":
- case "Yellow-Purple":
- drawable.setColors(new int[]{0xCCFFFF00, 0xCC800080});
- break;
- case "黄青":
- case "Yellow-Cyan":
- drawable.setColors(new int[]{0xCCFFFF00, 0xCC00FFFF});
- break;
- case "紫青":
- case "Purple-Cyan":
- drawable.setColors(new int[]{0xCC800080, 0xCC00FFFF});
- break;
- case "红绿蓝":
- case "Red-Green-Blue":
- drawable.setColors(new int[]{0xCCFF0000, 0xCC00FF00, 0xCC0000FF});
- break;
- case "紫黄青":
- case "Purple-Yellow-Cyan":
- drawable.setColors(new int[]{0xCC800080, 0xCCFFFF00, 0xCC00FFFF});
- break;
- case "红蓝":
- case "Red-Blue":
- drawable.setColors(new int[]{0xCCFF0000, 0xCC0000FF});
- break;
- case "Red-Green":
- case "红绿":
- drawable.setColors(new int[]{0xCCFF0000, 0xCC00FF00});
- break;
- case "Red":
- case "红":
- drawable.setColor(0xCCFF0000);
- break;
- case "Green":
- case "绿":
- drawable.setColor(0xCC00FF00);
- break;
- case "Blue":
- case "蓝":
- drawable.setColor(0xCC0000FF);
- break;
- case "White":
- case "白":
- drawable.setColor(0xCCFFFFFF);
- break;
- case "Black":
- case "黑":
- drawable.setColors(new int[]{ 0xCC575757,0xCC000000});
- break;
- case "紫":
- case "Purple":
- drawable.setColor(0xCC800080);
- break;
- case "Yellow":
- case "黄":
- drawable.setColor(0xCCFFFF00);
- break;
- case "Cyan":
- case "青":
- drawable.setColor(0xCC00FFFF);
- break;
- case "关":
- case "off":
- default:
- drawable.setColor(0x00444444);
- break;
- }
-
- return drawable;
- }
-
- public interface OnSelectionChangedListener {
- void onSelectionChanged(int selectedPosition);
- }
-
- public void setOnSelectionChangedListener(OnSelectionChangedListener listener) {
- this.selectionChangedListener = listener;
- }
-
- @Override
- public int getItemCount() {
- return titles.size();
- }
-
- public int getSelectedPosition() {
- return selectedPosition;
- }
- public void setSelectedPosition(int position) {
- this.selectedPosition = position;
- notifyDataSetChanged();
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/yztiot/streetlamp/LightMode.java b/app/src/main/java/com/yztiot/streetlamp/LightMode.java
new file mode 100644
index 0000000..4333341
--- /dev/null
+++ b/app/src/main/java/com/yztiot/streetlamp/LightMode.java
@@ -0,0 +1,53 @@
+package com.yztiot.streetlamp;
+
+public class LightMode {
+ private String modeName;
+ private int colorResId;
+ private int color1ResId;
+ private int color2ResId;
+ private int color3ResId;
+ private int index;
+
+ public LightMode(String modeName) {
+ this.modeName = modeName;
+ this.colorResId = 0;
+ }
+
+ public LightMode(String modeName, int colorResId) {
+ this.modeName = modeName;
+ this.colorResId = colorResId;
+ }
+
+ public LightMode(String modeName, int color1ResId, int color2ResId) {
+ this.modeName = modeName;
+ this.color1ResId = color1ResId;
+ this.color2ResId = color2ResId;
+ }
+
+ public LightMode(String modeName, int color1ResId, int color2ResId, int color3ResId) {
+ this.modeName = modeName;
+ this.color1ResId = color1ResId;
+ this.color2ResId = color2ResId;
+ this.color3ResId = color3ResId;
+ }
+
+ public String getModeName() {
+ return modeName;
+ }
+
+ public int getColorResId() {
+ return colorResId;
+ }
+
+ public int getColor1ResId() {
+ return color1ResId;
+ }
+
+ public int getColor2ResId() {
+ return color2ResId;
+ }
+
+ public int getColor3ResId() {
+ return color3ResId;
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/yztiot/streetlamp/LightModeAdapter.java b/app/src/main/java/com/yztiot/streetlamp/LightModeAdapter.java
index 4d444fa..dda3b1f 100644
--- a/app/src/main/java/com/yztiot/streetlamp/LightModeAdapter.java
+++ b/app/src/main/java/com/yztiot/streetlamp/LightModeAdapter.java
@@ -1,92 +1,138 @@
package com.yztiot.streetlamp;
+import android.graphics.Color;
+import android.graphics.drawable.GradientDrawable;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
-import android.widget.ImageView;
import android.widget.TextView;
+import androidx.core.content.ContextCompat;
import androidx.recyclerview.widget.RecyclerView;
import java.util.List;
-public class LightModeAdapter extends RecyclerView.Adapter {
- private List titles;
+public class LightModeAdapter extends RecyclerView.Adapter {
+ private List lightModes;
private int selectedPosition = -1;
- private OnSelectionChangedListener selectionChangedListener;
+ private int containerId;
- public LightModeAdapter(List titles) {
- this.titles = titles;
+ private OnLightModeSelectedListener listener;
+
+ public LightModeAdapter(List lightModes, int containerId, OnLightModeSelectedListener listener) {
+ this.lightModes = lightModes;
+ this.containerId = containerId;
+ this.listener = listener;
+ }
+ public interface OnLightModeSelectedListener {
+ void onLightModeSelected(LightMode lightMode, int containerId, int position, StringBuilder frameBuilder);
+ void onFrameBuilt(String frame);
}
- public static class ViewHolder extends RecyclerView.ViewHolder {
- View rootView;
- TextView title, color;
- ImageView lightModeBackground;
-
- public ViewHolder(View itemView) {
- super(itemView);
- rootView = itemView;
- title = itemView.findViewById(R.id.light_mode_title);
- color = itemView.findViewById(R.id.light_mode_color);
- lightModeBackground = itemView.findViewById(R.id.light_mode_background);
- }
+ public void setSelectedPosition(int position) {
+ this.selectedPosition = position;
+ notifyDataSetChanged(); // 刷新视图
}
@Override
- public LightModeAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
- View view = LayoutInflater.from(parent.getContext())
- .inflate(R.layout.light_mode, parent, false);
- return new ViewHolder(view);
+ public LightModeViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+ View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.color_mode, parent, false);
+ return new LightModeViewHolder(view);
}
@Override
- public void onBindViewHolder(LightModeAdapter.ViewHolder holder, int position) {
- holder.title.setText(titles.get(position));
- holder.color.setText(R.string.off);
+ public void onBindViewHolder(LightModeViewHolder holder, int position) {
+ LightMode lightMode = lightModes.get(position);
+ holder.bind(lightMode, position == selectedPosition);
- if (position == selectedPosition) {
- holder.lightModeBackground.setBackgroundResource(R.drawable.light_mode_on);
- } else {
- holder.lightModeBackground.setBackgroundResource(R.drawable.light_mode_off);
- }
+ holder.itemView.setOnClickListener(v -> {
+ // 记录当前选中的位置
+ int oldPosition = selectedPosition;
+ selectedPosition = position; // 更新为当前选中的位置
- holder.rootView.setOnClickListener(v -> {
- int currentPos = holder.getAdapterPosition();
- if (currentPos == RecyclerView.NO_POSITION) return;
-
- int oldPos = selectedPosition;
- selectedPosition = currentPos;
-
- notifyItemChanged(oldPos);
+ // 更新显示
+ notifyItemChanged(oldPosition);
notifyItemChanged(selectedPosition);
- Log.d("LightMode", "选中:" + titles.get(currentPos));
- if (selectionChangedListener != null) {
- selectionChangedListener.onSelectionChanged(selectedPosition);
+
+ if (listener != null) {
+ listener.onLightModeSelected(lightMode, containerId, position, new StringBuilder()); // 传递选中的模式
}
+
+ Log.d("LightModeAdapter", "Clicked containerId: " + containerId + ", position: " + position);
});
}
- public interface OnSelectionChangedListener {
- void onSelectionChanged(int selectedPosition);
- }
-
-
- public void setOnSelectionChangedListener(OnSelectionChangedListener listener) {
- this.selectionChangedListener = listener;
- }
-
@Override
public int getItemCount() {
- return titles.size();
+ return lightModes.size();
}
- public int getSelectedPosition() {
- return selectedPosition;
+ public static class LightModeViewHolder extends RecyclerView.ViewHolder {
+ private TextView modeStatus;
+ private View colorShow, colorMode;
+
+ public LightModeViewHolder(View itemView) {
+ super(itemView);
+ modeStatus = itemView.findViewById(R.id.color_mode_status);
+ colorShow = itemView.findViewById(R.id.color_show);
+ colorMode = itemView.findViewById(R.id.color_mode);
+ }
+
+ public void bind(LightMode lightMode, boolean isSelected) {
+ itemView.setTag(lightMode);
+ modeStatus.setText(lightMode.getModeName());
+
+ // 设置选中状态样式
+ if (isSelected) {
+ colorMode.setBackgroundResource(R.drawable.light_mode_on);
+ modeStatus.setTextColor(Color.BLACK);
+ } else {
+ colorMode.setBackgroundResource(R.drawable.light_mode_off); // 你需要创建这个背景
+ modeStatus.setTextColor(Color.GRAY);
+ }
+
+ // 渐变色设置(与之前一样)
+ if (lightMode.getColorResId() != 0) {
+ int color = ContextCompat.getColor(itemView.getContext(), lightMode.getColorResId());
+ GradientDrawable circleDrawable = new GradientDrawable();
+ circleDrawable.setColor(color);
+ circleDrawable.setShape(GradientDrawable.OVAL);
+ colorShow.setBackground(circleDrawable);
+ } else if (lightMode.getColor1ResId() != 0 && lightMode.getColor2ResId() != 0) {
+ int color1 = ContextCompat.getColor(itemView.getContext(), lightMode.getColor1ResId());
+ int color2 = ContextCompat.getColor(itemView.getContext(), lightMode.getColor2ResId());
+ GradientDrawable gradientDrawable = new GradientDrawable(
+ GradientDrawable.Orientation.LEFT_RIGHT,
+ new int[]{color1, color2});
+ gradientDrawable.setShape(GradientDrawable.OVAL);
+ colorShow.setBackground(gradientDrawable);
+ } else if (lightMode.getColor1ResId() != 0 && lightMode.getColor2ResId() != 0 && lightMode.getColor3ResId() != 0) {
+ int color1 = ContextCompat.getColor(itemView.getContext(), lightMode.getColor1ResId());
+ int color2 = ContextCompat.getColor(itemView.getContext(), lightMode.getColor2ResId());
+ int color3 = ContextCompat.getColor(itemView.getContext(), lightMode.getColor3ResId());
+ GradientDrawable gradientDrawable = new GradientDrawable(
+ GradientDrawable.Orientation.LEFT_RIGHT,
+ new int[]{color1, color2, color3});
+ gradientDrawable.setShape(GradientDrawable.OVAL);
+ colorShow.setBackground(gradientDrawable);
+ } else {
+ int[] rainbowColors = {
+ Color.parseColor("#FF6B6B"),
+ Color.parseColor("#FFA94D"),
+ Color.parseColor("#FFD43B"),
+ Color.parseColor("#69DB7C"),
+ Color.parseColor("#38D9A9"),
+ Color.parseColor("#4DABF7"),
+ Color.parseColor("#9775FA")
+ };
+ GradientDrawable rainbowDrawable = new GradientDrawable(
+ GradientDrawable.Orientation.LEFT_RIGHT,
+ rainbowColors);
+ rainbowDrawable.setShape(GradientDrawable.OVAL);
+ colorShow.setBackground(rainbowDrawable);
+ }
+ }
+
}
- public void setSelectedPosition(int position) {
- this.selectedPosition = position;
- notifyDataSetChanged();
- }
-}
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/yztiot/streetlamp/MainActivity.java b/app/src/main/java/com/yztiot/streetlamp/MainActivity.java
index aa0f7ff..008297f 100644
--- a/app/src/main/java/com/yztiot/streetlamp/MainActivity.java
+++ b/app/src/main/java/com/yztiot/streetlamp/MainActivity.java
@@ -2,7 +2,6 @@ package com.yztiot.streetlamp;
import android.app.AlarmManager;
import android.app.AlertDialog;
-import android.app.Dialog;
import android.app.PendingIntent;
import android.app.TimePickerDialog;
import android.content.Context;
@@ -12,7 +11,6 @@ import android.os.Bundle;
import android.os.Handler;
import android.text.InputType;
import android.util.Log;
-import android.util.TypedValue;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
@@ -23,7 +21,6 @@ import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.SeekBar;
import android.widget.Spinner;
-import android.widget.TextView;
import android.widget.Toast;
import androidx.activity.EdgeToEdge;
@@ -33,35 +30,40 @@ import androidx.recyclerview.widget.RecyclerView;
import com.yztiot.demo.yztiotManager;
-import java.util.Arrays;
+import java.util.ArrayList;
import java.util.Calendar;
+import java.util.List;
public class MainActivity extends AppCompatActivity {
private Handler handler = new Handler();
- private RecyclerView lightModeView,colorModeView;
private ImageView lightModeImage,lowerLamplight,upperLamplight;
private ImageButton btnSettings,btnSpeed,btnTiming;
- private Button btnUpLight, btnBlowLight, btnSend,loginPhoto,btnLogin;
- private Spinner spinner;
+ private Button btnSend,loginPhoto,btnLogin;
private LightModeAdapter lightModeAdapter;
- private ColorModeAdapter colorModeAdapter;
+ private Spinner spinner;
private boolean isSerialOpen = false;
- private int upperLight = -1, upperColor = -1;
- private int lowerLight = -1, lowerColor = -1;
- public boolean isSelectingUpper = true;
+ private int upperLight = 01, upperColor = -1;
+ private int lowerLight = 02, lowerColor = -1;
public static final String PREFS_NAME = "password_prefs";
private static final String SUPER_ADMIN_PASSWORD_KEY = "super_admin_password";
private static final String USER_PASSWORD_KEY = "user_password";
private String superAdminPassword = "654321";
+ private int saveSwitch;
+ private String frame;
private String userPassword = "000000";
public static final String START_HOUR_KEY = "start_hour";
public static final String START_MINUTE_KEY = "start_minute";
public static final String END_HOUR_KEY = "end_hour";
+ public static final String SWITCH_KEY = "switch";
+ public static final String FRAME_KEY = "frame";
public static final String END_MINUTE_KEY = "end_minute";
private View loginInputLayout;
private EditText loginInput;
private FrameLayout screenLayout;
private boolean isLoginInputVisible = false;
+ private RecyclerView lightModeContainer,colorModeContainer;
+ private int selectedLightModeUpper;
+ private int selectedLightModeLower;
public static com.yztiot.demo.yztiotManager yztiotManager = new yztiotManager();
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -76,57 +78,34 @@ public class MainActivity extends AppCompatActivity {
openSerial();
initializePasswords();
loadPasswords();
- setAlarmManager();
+ if (saveSwitch == 0){
+ cancelAlarmManager();
+ } else if (saveSwitch == 1){
+ setAlarmManager();
+ }
+ initializeSelection();
+ }
+ private void initializeSelection() {
+ int lightModePosition = Integer.parseInt(frame.substring(6, 8), 16); // 子节目1
+ int colorModePosition = Integer.parseInt(frame.substring(10, 12), 16); // 子节目2
+
+ // 设置 lightModeContainer 的选中位置
+ if (colorModeContainer.getAdapter() != null) {
+ LightModeAdapter lightModeAdapter = (LightModeAdapter) lightModeContainer.getAdapter();
+ lightModeAdapter.setSelectedPosition(lightModePosition );
+ lightModeAdapter.notifyDataSetChanged();
+ }
+
+ // 设置 colorModeContainer 的选中位置
+ if (colorModeContainer.getAdapter() != null) {
+ LightModeAdapter colorModeAdapter = (LightModeAdapter) colorModeContainer.getAdapter();
+ colorModeAdapter.setSelectedPosition(colorModePosition); // 索引从0开始
+ colorModeAdapter.notifyDataSetChanged();
+ }
+
+ Log.d("lightModeAdapter", "lightModeAdapter: " + lightModeAdapter + " colorModeContainer :" + colorModeContainer);
}
private void onClickListener(){
- btnUpLight.setOnClickListener(v -> {
- lightModeImage.setBackgroundResource(R.drawable.upper_light);
- upperLamplight.setVisibility(View.VISIBLE);
- lowerLamplight.setVisibility(View.GONE);
- isSelectingUpper = true;
-
- upperLight = lightModeAdapter.getSelectedPosition();
- upperColor = colorModeAdapter.getSelectedPosition();
-
- lightModeAdapter.setSelectedPosition(upperLight);
- colorModeAdapter.setSelectedPosition(upperColor);
-
- if (upperLight >= 0 && upperColor >= 0) {
- Log.d("UpperProgram", String.format("light: %02X, color: %02X, upperProgram: %02X %02X", upperLight, upperColor, upperLight, upperColor));
- }
- });
-
- btnBlowLight.setOnClickListener(v -> {
- lightModeImage.setBackgroundResource(R.drawable.lower_light);
- upperLamplight.setVisibility(View.GONE);
- lowerLamplight.setVisibility(View.VISIBLE);
- isSelectingUpper = false;
- lowerLight = lightModeAdapter.getSelectedPosition();
- lowerColor = colorModeAdapter.getSelectedPosition();
-
- lightModeAdapter.setSelectedPosition(lowerLight);
- colorModeAdapter.setSelectedPosition(lowerColor);
-
- if (lowerLight >= 0 && lowerColor >= 0) {
- Log.d("LowerProgram", String.format("light: %02X, color: %02X, lowerProgram: %02X %02X", lowerLight, lowerColor, lowerLight, lowerColor));
- }
- });
-
- lightModeAdapter.setOnSelectionChangedListener(position -> {
- if (isSelectingUpper) {
- upperLight = position;
- } else {
- lowerLight = position;
- }
- });
-
- colorModeAdapter.setOnSelectionChangedListener(position -> {
- if (isSelectingUpper) {
- upperColor = position;
- } else {
- lowerColor = position;
- }
- });
btnSend.setOnClickListener(v -> {
SerialManage.getInstance().init(new SerialInter() {
@@ -150,6 +129,25 @@ public class MainActivity extends AppCompatActivity {
Toast.makeText(this, R.string.send_successfully, Toast.LENGTH_SHORT).show();
});
+ btnTiming.setOnLongClickListener(v -> {
+ new AlertDialog.Builder(MainActivity.this, R.style.BlueAlertDialog)
+ .setTitle(R.string.timer_switch)
+ .setMessage(R.string.confirm_open_timer) // 提示信息
+
+ .setNegativeButton(R.string.cancel, (dialog, which) -> {
+ setAlarmManager();
+ Toast.makeText(MainActivity.this, R.string.timer_cancelled, Toast.LENGTH_SHORT).show();
+ })
+ .setPositiveButton(R.string.confirm, (dialog, which) -> {
+ // 用户确认打开定时开关
+ Toast.makeText(MainActivity.this, R.string.timer_opened, Toast.LENGTH_SHORT).show();
+ // 例如,设置定时器
+ cancelAlarmManager();
+ })
+ .show();
+
+ return true; // 返回 true 表示事件已处理
+ });
btnTiming.setOnClickListener(v -> {
final Calendar calendar = Calendar.getInstance();
int hour = calendar.get(Calendar.HOUR_OF_DAY);
@@ -271,8 +269,29 @@ public class MainActivity extends AppCompatActivity {
}
loginInput.setText("");
});
- }
+ }
+ private void cancelAlarmManager() {
+ AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
+
+ Intent startIntent = new Intent(this, TimingReceiver.class);
+ startIntent.setAction("com.yztiot.streetlamp.START_ALARM");
+ PendingIntent startPendingIntent = PendingIntent.getBroadcast(this, 0, startIntent, PendingIntent.FLAG_UPDATE_CURRENT);
+
+ Intent endIntent = new Intent(this, TimingReceiver.class);
+ endIntent.setAction("com.yztiot.streetlamp.END_ALARM");
+ PendingIntent endPendingIntent = PendingIntent.getBroadcast(this, 1, endIntent, PendingIntent.FLAG_UPDATE_CURRENT);
+
+ if (alarmManager != null) {
+ alarmManager.cancel(startPendingIntent);
+ alarmManager.cancel(endPendingIntent);
+ Log.d("MainActivity", "Alarms canceled");
+ }
+
+ // 更换按钮背景图
+ btnTiming.setBackgroundResource(R.drawable.btn_timing_off);
+ saveSwitch(SWITCH_KEY,0);
+ }
private void setAlarmManager() {
// 获取保存的时间
SharedPreferences prefs = getSharedPreferences(MainActivity.PREFS_NAME, MODE_PRIVATE);
@@ -317,10 +336,19 @@ public class MainActivity extends AppCompatActivity {
alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, endCalendar.getTimeInMillis(), endPendingIntent);
Log.d("MainActivity", "End alarm set for: " + endCalendar.getTime());
+ btnTiming.setBackgroundResource(R.drawable.btn_timing_on);
+ saveSwitch(SWITCH_KEY,1);
} else {
Log.d("MainActivity", "No valid time settings found");
}
}
+ private void saveSwitch(String key, int value) {
+ SharedPreferences prefs = getSharedPreferences(PREFS_NAME, MODE_PRIVATE);
+ SharedPreferences.Editor editor = prefs.edit();
+ editor.putInt(key, value);
+ editor.apply();
+ Log.d("SwitchSave", key + ": " + value);
+ }
private void saveTime(String key, int value) {
SharedPreferences prefs = getSharedPreferences(PREFS_NAME, MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
@@ -328,6 +356,13 @@ public class MainActivity extends AppCompatActivity {
editor.apply();
Log.d("TimeSave", key + ": " + value);
}
+ private void saveFrame(String key, String value) {
+ SharedPreferences prefs = getSharedPreferences(PREFS_NAME, MODE_PRIVATE);
+ SharedPreferences.Editor editor = prefs.edit();
+ editor.putString(key, value);
+ editor.apply();
+ Log.d("saveFrame", key + ": " + value);
+ }
private void savePasswords() {
SharedPreferences prefs = getSharedPreferences(PREFS_NAME, MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
@@ -340,29 +375,24 @@ public class MainActivity extends AppCompatActivity {
byte FH = 0x55;
byte channel = (byte) (spinner.getSelectedItemPosition() + 1);
- byte upperHigh = (byte) ((upperLight + 1) & 0xFF);
+ byte upperHigh = (byte) ((upperLight ) & 0xFF);
byte upperLow = (byte) (upperColor & 0xFF);
- byte lowerHigh = (byte) ((lowerLight + 1) & 0xFF);
+ byte lowerHigh = (byte) ((lowerLight) & 0xFF);
byte lowerLow = (byte) (lowerColor & 0xFF);
- byte speed = 0x32;
- byte extra = 0x01; // 新增字节
-
- byte[] frame = new byte[9];
+ byte[] frame = new byte[7];
frame[0] = FH;
frame[1] = channel;
frame[2] = upperHigh;
frame[3] = upperLow;
frame[4] = lowerHigh;
frame[5] = lowerLow;
- frame[6] = speed;
- frame[7] = extra;
int sum = 0;
- for (int i = 0; i < 8; i++) {
+ for (int i = 0; i < 6; i++) {
sum += (frame[i] & 0xFF);
}
- frame[8] = (byte) (sum & 0xFF);
+ frame[6] = (byte) (sum & 0xFF);
StringBuilder sb = new StringBuilder();
for (byte b : frame) {
@@ -377,6 +407,7 @@ public class MainActivity extends AppCompatActivity {
byte[] bytesToSend = hexStringToByteArray(hexToSend);
String hexString = bytesToHex(bytesToSend);
SerialManage.getInstance().send(hexString);
+ saveFrame(FRAME_KEY,hexString);
} else {
Toast.makeText(this, R.string.port_manager_not_initialized, Toast.LENGTH_SHORT).show();
}
@@ -454,15 +485,17 @@ public class MainActivity extends AppCompatActivity {
SharedPreferences prefs = getSharedPreferences(PREFS_NAME, MODE_PRIVATE);
superAdminPassword = prefs.getString(SUPER_ADMIN_PASSWORD_KEY, "654321");
userPassword = prefs.getString(USER_PASSWORD_KEY, "000000");
+ saveSwitch = prefs.getInt(SWITCH_KEY, 0);
+ frame = prefs.getString(FRAME_KEY,"");
Log.d("PasswordLoad", "Super Admin Password: " + superAdminPassword);
Log.d("PasswordLoad", "User Password: " + userPassword);
+ Log.d("PasswordLoad", "saveSwitch: " + saveSwitch);
+ Log.d("PasswordLoad", "saveSwitch: " + frame);
}
private void findId(){
spinner = findViewById(R.id.ttys_spinner);
- btnUpLight = findViewById(R.id.btn_up_light);
btnSend = findViewById(R.id.btn_send);
- btnBlowLight = findViewById(R.id.btn_blow_light);
lightModeImage = findViewById(R.id.light_mode_image);
lowerLamplight = findViewById(R.id.lower_lamplight);
upperLamplight = findViewById(R.id.upper_lamplight);
@@ -474,20 +507,10 @@ public class MainActivity extends AppCompatActivity {
loginPhoto = findViewById(R.id.login_photo);
screenLayout = findViewById(R.id.screen_layout);
btnLogin = findViewById(R.id.btn_login);
+ colorModeContainer = findViewById(R.id.color_mode_container);
+ lightModeContainer = findViewById(R.id.light_mode_container);
}
private void layout(){
- lightModeView = findViewById(R.id.light_mode_container);
- lightModeView.setLayoutManager(new LinearLayoutManager(this));
-
- lightModeAdapter = new LightModeAdapter(Arrays.asList(getResources().getStringArray(R.array.light_modes)));
- lightModeView.setAdapter(lightModeAdapter);
-
- colorModeView = findViewById(R.id.color_mode_container);
- colorModeView.setLayoutManager(new LinearLayoutManager(this));
-
- colorModeAdapter = new ColorModeAdapter(Arrays.asList(getResources().getStringArray(R.array.color_modes)));
- colorModeView.setAdapter(colorModeAdapter);
-
spinner = findViewById(R.id.ttys_spinner);
ArrayAdapter adapter = ArrayAdapter.createFromResource(
this,
@@ -496,12 +519,98 @@ public class MainActivity extends AppCompatActivity {
);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
+
+ int red = R.color.red;
+ int green = R.color.green;
+ int blue = R.color.blue;
+ int white = R.color.white;
+ int black = R.color.black;
+ int purple = R.color.purple;
+ int yellow = R.color.yellow;
+ int cyan = R.color.cyan;
+ int transparent = R.color.transparent;
+
+ List colorModes = new ArrayList<>();
+
+ // 单色常亮 (8个)
+ colorModes.add(new LightMode(getString(R.string.off), transparent));
+ colorModes.add(new LightMode(getString(R.string.solid_color_constant), red));
+ colorModes.add(new LightMode(getString(R.string.solid_color_constant), green));
+ colorModes.add(new LightMode(getString(R.string.solid_color_constant), blue));
+ colorModes.add(new LightMode(getString(R.string.solid_color_constant), white));
+ colorModes.add(new LightMode(getString(R.string.solid_color_constant), black));
+ colorModes.add(new LightMode(getString(R.string.solid_color_constant), purple));
+ colorModes.add(new LightMode(getString(R.string.solid_color_constant), yellow));
+ colorModes.add(new LightMode(getString(R.string.solid_color_constant), cyan));
+
+ // 单色呼吸渐变 (7个)
+ colorModes.add(new LightMode(getString(R.string.solid_color_breathing), red));
+ colorModes.add(new LightMode(getString(R.string.solid_color_breathing), green));
+ colorModes.add(new LightMode(getString(R.string.solid_color_breathing), blue));
+ colorModes.add(new LightMode(getString(R.string.solid_color_breathing), white));
+ colorModes.add(new LightMode(getString(R.string.solid_color_breathing), purple));
+ colorModes.add(new LightMode(getString(R.string.solid_color_breathing), yellow));
+ colorModes.add(new LightMode(getString(R.string.solid_color_breathing), cyan));
+
+ // 双色交替渐变 (9个)
+ colorModes.add(new LightMode(getString(R.string.dual_color_alternating), red, yellow));
+ colorModes.add(new LightMode(getString(R.string.dual_color_alternating), red, purple));
+ colorModes.add(new LightMode(getString(R.string.dual_color_alternating), red, cyan));
+ colorModes.add(new LightMode(getString(R.string.dual_color_alternating), green, cyan));
+ colorModes.add(new LightMode(getString(R.string.dual_color_alternating), green, yellow));
+ colorModes.add(new LightMode(getString(R.string.dual_color_alternating), green, purple));
+ colorModes.add(new LightMode(getString(R.string.dual_color_alternating), yellow, purple));
+ colorModes.add(new LightMode(getString(R.string.dual_color_alternating), yellow, cyan));
+ colorModes.add(new LightMode(getString(R.string.dual_color_alternating), purple, cyan));
+
+ // 三色渐变 (2个)
+ colorModes.add(new LightMode(getString(R.string.tricolor_gradient),red, green, blue));
+ colorModes.add(new LightMode(getString(R.string.tricolor_gradient), purple, yellow, cyan));
+
+ // 其他模式 (各1个)
+ colorModes.add(new LightMode(getString(R.string.seven_color_gradient)));
+ colorModes.add(new LightMode(getString(R.string.seven_color_jump)));
+ colorModes.add(new LightMode(getString(R.string.colorful_trail_run)));
+ colorModes.add(new LightMode(getString(R.string.colorful_color_chase)));
+
+
+ while (colorModes.size() < 30) {
+ colorModes.addAll(colorModes);
+ }
+ colorModes = colorModes.subList(0, 30);
+
+ lightModeContainer.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));
+ colorModeContainer.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));
+
+ LightModeAdapter.OnLightModeSelectedListener listener = new LightModeAdapter.OnLightModeSelectedListener() {
+ @Override
+ public void onLightModeSelected(LightMode lightMode, int containerId, int position, StringBuilder frameBuilder) {
+ if (containerId == 1) {
+ upperColor = position; // 存储上部选中的模式
+ Log.d("MainActivity", "Upper Light Mode Selected: " + lightMode.getModeName() + " at position " + position);
+ } else if (containerId == 2) {
+ lowerColor = position; // 存储下部选中的模式
+ Log.d("MainActivity", "Lower Light Mode Selected: " + selectedLightModeLower + " at position " + position);
+ }
+ Log.d("MainActivity", "upperColor " + upperColor + " lowerColor " + lowerColor);
+ }
+
+ @Override
+ public void onFrameBuilt(String frame) {
+ // 可以根据需要处理数据帧
+ }
+ };
+
+ lightModeContainer.setAdapter(new LightModeAdapter(colorModes, 01, listener));
+ colorModeContainer.setAdapter(new LightModeAdapter(colorModes, 02, listener));
}
+
+
private Runnable hideNavBarRunnable = new Runnable() {
@Override
public void run() {
hideNavigationBar();
- handler.postDelayed(this, 1000); // 每秒检查一次
+ handler.postDelayed(this, 1000);
}
};
@Override
diff --git a/app/src/main/java/com/yztiot/streetlamp/TimingReceiver.java b/app/src/main/java/com/yztiot/streetlamp/TimingReceiver.java
index 0ed8222..b341b7c 100644
--- a/app/src/main/java/com/yztiot/streetlamp/TimingReceiver.java
+++ b/app/src/main/java/com/yztiot/streetlamp/TimingReceiver.java
@@ -24,16 +24,17 @@ public class TimingReceiver extends BroadcastReceiver {
int startMinute = prefs.getInt(MainActivity.START_MINUTE_KEY, -1);
int endHour = prefs.getInt(MainActivity.END_HOUR_KEY, -1);
int endMinute = prefs.getInt(MainActivity.END_MINUTE_KEY, -1);
+ String frame = prefs.getString(MainActivity.FRAME_KEY,"");
if ("com.yztiot.streetlamp.START_ALARM".equals(intent.getAction())) {
if (startHour == currentHour && startMinute == currentMinute) {
- Log.d("TimingCheck", "开始时间到达: " + currentHour + ":" + currentMinute);
- send("55010101020232018F");
+ Log.d("TimingCheck", "开始时间到达: " + currentHour + ":" + currentMinute+"frame: "+frame);
+ send(frame);
}
} else if ("com.yztiot.streetlamp.END_ALARM".equals(intent.getAction())) {
if (endHour == currentHour && endMinute == currentMinute) {
- Log.d("TimingCheck", "结束时间到达: " + currentHour + ":" + currentMinute);
- send("550101010202320290");
+ Log.d("TimingCheck", "结束时间到达: " + currentHour + ":" + currentMinute+"frame: "+frame);
+ send("55010100020059");
}
}
diff --git a/app/src/main/res/drawable-en/light_mode_off.png b/app/src/main/res/drawable-en/light_mode_off.png
deleted file mode 100644
index 1b2fa9f..0000000
Binary files a/app/src/main/res/drawable-en/light_mode_off.png and /dev/null differ
diff --git a/app/src/main/res/drawable-en/light_mode_on.png b/app/src/main/res/drawable-en/light_mode_on.png
deleted file mode 100644
index f449f16..0000000
Binary files a/app/src/main/res/drawable-en/light_mode_on.png and /dev/null differ
diff --git a/app/src/main/res/drawable-en/lower_light.png b/app/src/main/res/drawable-en/lower_light.png
deleted file mode 100644
index da07fd9..0000000
Binary files a/app/src/main/res/drawable-en/lower_light.png and /dev/null differ
diff --git a/app/src/main/res/drawable-en/upper_light.png b/app/src/main/res/drawable-en/upper_light.png
index ec56bc8..d6360b3 100644
Binary files a/app/src/main/res/drawable-en/upper_light.png and b/app/src/main/res/drawable-en/upper_light.png differ
diff --git a/app/src/main/res/drawable/circle_shape.xml b/app/src/main/res/drawable/circle_shape.xml
index 8a46878..801f008 100644
--- a/app/src/main/res/drawable/circle_shape.xml
+++ b/app/src/main/res/drawable/circle_shape.xml
@@ -1,4 +1,4 @@
-
+
diff --git a/app/src/main/res/drawable/light_mode_on.png b/app/src/main/res/drawable/light_mode_on.png
index f449f16..49069b8 100644
Binary files a/app/src/main/res/drawable/light_mode_on.png and b/app/src/main/res/drawable/light_mode_on.png differ
diff --git a/app/src/main/res/drawable/lower_light.png b/app/src/main/res/drawable/lower_light.png
deleted file mode 100644
index 343e342..0000000
Binary files a/app/src/main/res/drawable/lower_light.png and /dev/null differ
diff --git a/app/src/main/res/drawable/upper_light.png b/app/src/main/res/drawable/upper_light.png
index a73ca6a..227dae6 100644
Binary files a/app/src/main/res/drawable/upper_light.png and b/app/src/main/res/drawable/upper_light.png differ
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index 44ffdb9..8ece609 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -48,7 +48,7 @@
android:layout_marginTop="@dimen/y3"
android:layout_marginLeft="@dimen/y11">
@@ -94,6 +94,7 @@
android:background="@drawable/btn_send"/>
-
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:layout_gravity="center">
diff --git a/app/src/main/res/layout/custom_time_picker_dialog.xml b/app/src/main/res/layout/custom_time_picker_dialog.xml
new file mode 100644
index 0000000..0afed4b
--- /dev/null
+++ b/app/src/main/res/layout/custom_time_picker_dialog.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/light_mode.xml b/app/src/main/res/layout/light_mode.xml
deleted file mode 100644
index 1cdace1..0000000
--- a/app/src/main/res/layout/light_mode.xml
+++ /dev/null
@@ -1,39 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/app/src/main/res/values-en/strings.xml b/app/src/main/res/values-en/strings.xml
index 8faaeb1..605c8c0 100644
--- a/app/src/main/res/values-en/strings.xml
+++ b/app/src/main/res/values-en/strings.xml
@@ -1,7 +1,17 @@
LED Remote Control System
-
+
+ - @string/solid_color_constant
+ - @string/solid_color_breathing
+ - @string/dual_color_alternating
+ - @string/tricolor_gradient
+ - @string/seven_color_gradient
+ - @string/seven_color_jump
+ - @string/colorful_trail_run
+ - @string/colorful_color_chase
+
+
- @string/solid_color_constant
- @string/solid_color_breathing
- @string/dual_color_alternating
@@ -12,31 +22,31 @@
- @string/colorful_color_chase
-
- - @string/off
- - @string/red
- - @string/green
- - @string/blue
- - @string/white
- - @string/black
- - @string/purple
- - @string/red_blue
- - @string/yellow
- - @string/red_green
- - @string/cyan
- - @string/green_blue
- - @string/red_yellow
- - @string/red_purple
- - @string/red_cyan
- - @string/green_cyan
- - @string/green_yellow
- - @string/green_purple
- - @string/yellow_purple
- - @string/yellow_cyan
- - @string/purple_cyan
- - @string/red_green_blue
- - @string/purple_yellow_cyan
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Solid Color Constant Light
Solid Color Breathing Gradient
@@ -90,4 +100,8 @@
Modify the user password
The password has been modified successfully. The new password is:
The password cannot be empty!
+ Timing switch
+ Whether to turn on the timer switch?
+ The timing switch has been turned on
+ The timer switch has been cancelled
\ No newline at end of file
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index d29b31c..1cbd85f 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -2,7 +2,13 @@
#FF000000
#FFFFFFFF
- #FF1807
+ #FF0000
+ #00FF00
+ #0000FF
+ #800080
+ #FFFF00
+ #00FFFF
+ #0000FFFF
#2196F3
#1976D2
#2196F3
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index f1dd036..0642d83 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -2,7 +2,7 @@
LED远程控制系统
-
+
- @string/solid_color_constant
- @string/solid_color_breathing
- @string/dual_color_alternating
@@ -12,32 +12,15 @@
- @string/colorful_trail_run
- @string/colorful_color_chase
-
-
-
- - @string/off
- - @string/red
- - @string/green
- - @string/blue
- - @string/white
- - @string/black
- - @string/purple
- - @string/red_blue
- - @string/yellow
- - @string/red_green
- - @string/cyan
- - @string/green_blue
- - @string/red_yellow
- - @string/red_purple
- - @string/red_cyan
- - @string/green_cyan
- - @string/green_yellow
- - @string/green_purple
- - @string/yellow_purple
- - @string/yellow_cyan
- - @string/purple_cyan
- - @string/red_green_blue
- - @string/purple_yellow_cyan
+
+ - @string/solid_color_constant
+ - @string/solid_color_breathing
+ - @string/dual_color_alternating
+ - @string/tricolor_gradient
+ - @string/seven_color_gradient
+ - @string/seven_color_jump
+ - @string/colorful_trail_run
+ - @string/colorful_color_chase
单色常亮
@@ -86,10 +69,14 @@
请输入超级管理员密码
身份验证
请输入新用户密码
- 确认
- 取消
速度
修改用户密码
密码修改成功,新密码为:
密码不能为空!
+ 定时开关
+ 是否关闭定时开关?
+ 定时开关已打开
+ 定时开关已取消
+ 确认
+ 取消
\ No newline at end of file