diff --git a/android/app/src/main/java/org/openbot/logging/SensorListAdapter.java b/android/app/src/main/java/org/openbot/logging/SensorListAdapter.java index 989c27179..0413215b2 100644 --- a/android/app/src/main/java/org/openbot/logging/SensorListAdapter.java +++ b/android/app/src/main/java/org/openbot/logging/SensorListAdapter.java @@ -8,20 +8,25 @@ import java.util.HashMap; import java.util.List; import org.jetbrains.annotations.NotNull; +import org.openbot.R; import org.openbot.databinding.ItemSensorBinding; import org.openbot.env.SharedPreferencesManager; public class SensorListAdapter extends RecyclerView.Adapter { private final List names; - private final List status; + private List status; private final SharedPreferencesManager preferencesManager; + private CheckBox allSelector; public SensorListAdapter( - HashMap items, SharedPreferencesManager preferencesManager) { + HashMap items, + CheckBox allSelector, + SharedPreferencesManager preferencesManager) { names = new ArrayList<>(items.keySet()); status = new ArrayList<>(items.values()); this.preferencesManager = preferencesManager; + this.allSelector = allSelector; } @NotNull @@ -36,7 +41,24 @@ public void onBindViewHolder(final ViewHolder holder, int position) { holder.checkBox.setText(names.get(position)); holder.checkBox.setChecked(status.get(position)); holder.checkBox.setOnClickListener( - v -> preferencesManager.setSensorStatus(holder.checkBox.isChecked(), names.get(position))); + v -> { + status.set(position, holder.checkBox.isChecked()); + preferencesManager.setSensorStatus(holder.checkBox.isChecked(), names.get(position)); + allSelector.setChecked(getStatusChange()); + allSelector.setText( + allSelector.isChecked() + ? allSelector.getContext().getResources().getString(R.string.clearAll) + : allSelector.getContext().getResources().getString(R.string.selectAll)); + }); + } + + private boolean getStatusChange() { + for (boolean b : status) if (!b) return false; + return true; + } + + public void updateStatusValue(boolean value) { + for (int i = 0; i < status.size(); i++) status.set(i, value); } @Override diff --git a/android/app/src/main/java/org/openbot/logging/SensorsDialog.java b/android/app/src/main/java/org/openbot/logging/SensorsDialog.java index 38343a6ae..03f41dc64 100644 --- a/android/app/src/main/java/org/openbot/logging/SensorsDialog.java +++ b/android/app/src/main/java/org/openbot/logging/SensorsDialog.java @@ -1,5 +1,6 @@ package org.openbot.logging; +import android.annotation.SuppressLint; import android.content.Context; import android.hardware.Sensor; import android.hardware.SensorManager; @@ -11,9 +12,11 @@ import android.view.ViewGroup; import androidx.fragment.app.DialogFragment; import androidx.recyclerview.widget.LinearLayoutManager; +import java.util.ArrayList; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; +import java.util.Map; import org.jetbrains.annotations.NotNull; import org.openbot.R; import org.openbot.databinding.DialogSensorsBinding; @@ -30,6 +33,7 @@ public void onCreate(Bundle savedInstanceState) { setStyle(DialogFragment.STYLE_NORMAL, R.style.FullScreenDialog); } + @SuppressLint("NotifyDataSetChanged") @Override public View onCreateView( @NotNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { @@ -57,12 +61,42 @@ public View onCreateView( } } - SensorListAdapter adapter = new SensorListAdapter(list, preferencesManager); + SensorListAdapter adapter = + new SensorListAdapter(list, binding.selectAllCheck, preferencesManager); binding.listView.setLayoutManager(new LinearLayoutManager(requireContext())); binding.listView.setAdapter(adapter); binding.dismiss.setOnClickListener(v -> dismiss()); + int sensorStatusCount = 0; + + for (boolean b : new ArrayList<>(list.values())) + if (b) sensorStatusCount++; + else break; + + if (list.values().size() == sensorStatusCount) { + binding.selectAllCheck.setChecked(true); + binding.selectAllCheck.setText(getResources().getText(R.string.clearAll)); + } else { + binding.selectAllCheck.setChecked(false); + binding.selectAllCheck.setText(getResources().getText(R.string.selectAll)); + } + + binding.selectAllCheck.setOnClickListener( + v -> { + for (Map.Entry entry : list.entrySet()) + preferencesManager.setSensorStatus(binding.selectAllCheck.isChecked(), entry.getKey()); + + binding.selectAllCheck.setChecked(binding.selectAllCheck.isChecked()); + binding.selectAllCheck.setText( + binding.selectAllCheck.isChecked() + ? getResources().getText(R.string.clearAll) + : getResources().getText(R.string.selectAll)); + + adapter.updateStatusValue(binding.selectAllCheck.isChecked()); + adapter.notifyDataSetChanged(); + }); + binding.delay.setText(String.valueOf(preferencesManager.getDelay())); binding.delay.addTextChangedListener( new TextWatcher() { diff --git a/android/app/src/main/res/layout-land/dialog_sensors.xml b/android/app/src/main/res/layout-land/dialog_sensors.xml index 1baefce29..feff2d174 100644 --- a/android/app/src/main/res/layout-land/dialog_sensors.xml +++ b/android/app/src/main/res/layout-land/dialog_sensors.xml @@ -36,47 +36,78 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> - - + app:layout_constraintTop_toBottomOf="@+id/textView"> + + + + + + + + + + + + + app:layout_constraintStart_toStartOf="parent"> + android:text="Delay (ms)" + android:textColor="@android:color/black" /> + android:layout_marginEnd="16dp" + android:layout_weight="2" + android:digits="0123456789" + android:inputType="number" + android:paddingHorizontal="16dp" /> diff --git a/android/app/src/main/res/layout/dialog_sensors.xml b/android/app/src/main/res/layout/dialog_sensors.xml index 803412643..e4d1f319b 100644 --- a/android/app/src/main/res/layout/dialog_sensors.xml +++ b/android/app/src/main/res/layout/dialog_sensors.xml @@ -66,18 +66,50 @@ - + app:layout_constraintTop_toBottomOf="@+id/textView"> + + + + + + + + + + + + @@ -94,7 +126,6 @@ app:layout_constraintEnd_toEndOf="@+id/cardView4" app:layout_constraintStart_toStartOf="@+id/cardView4"> -