use of org.openbot.env.SharedPreferencesManager in project OpenBot by isl-org.
the class ControlsFragment method onViewCreated.
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
requireActivity().getWindow().addFlags(android.view.WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
phoneController = PhoneController.getInstance(requireContext());
preferencesManager = new SharedPreferencesManager(requireContext());
audioPlayer = new AudioPlayer(requireContext());
masterList = FileUtils.loadConfigJSONFromAsset(requireActivity());
serverCommunication = new ServerCommunication(requireContext(), this);
requireActivity().getSupportFragmentManager().setFragmentResultListener(Constants.GENERIC_MOTION_EVENT, this, (requestKey, result) -> {
MotionEvent motionEvent = result.getParcelable(Constants.DATA);
vehicle.setControl(vehicle.getGameController().processJoystickInput(motionEvent, -1));
processControllerKeyData(Constants.CMD_DRIVE);
});
requireActivity().getSupportFragmentManager().setFragmentResultListener(Constants.KEY_EVENT, this, (requestKey, result) -> processKeyEvent(result.getParcelable(Constants.DATA)));
mViewModel = new ViewModelProvider(requireActivity()).get(MainViewModel.class);
vehicle = mViewModel.getVehicle().getValue();
startAnimation = AnimationUtils.loadAnimation(requireContext(), R.anim.blink);
mViewModel.getUsbData().observe(getViewLifecycleOwner(), data -> {
char header = data.charAt(0);
String body = data.substring(1);
switch(header) {
case 'f':
vehicle.processVehicleConfig(body);
break;
case 'v':
if (FormatUtils.isNumeric(body)) {
vehicle.setBatteryVoltage(Float.parseFloat(body));
} else {
String[] msgParts = body.split(":");
switch(msgParts[0]) {
case "min":
vehicle.setMinMotorVoltage(Float.parseFloat(msgParts[1]));
case "low":
vehicle.setLowBatteryVoltage(Float.parseFloat(msgParts[1]));
break;
case "max":
vehicle.setMaxBatteryVoltage(Float.parseFloat(msgParts[1]));
break;
default:
Toast.makeText(requireContext().getApplicationContext(), "Invalid voltage message received!", Toast.LENGTH_SHORT).show();
break;
}
}
break;
case 's':
if (FormatUtils.isNumeric(body)) {
vehicle.setSonarReading(Float.parseFloat(body));
}
break;
case 'w':
String[] itemList = body.split(",");
if (itemList.length == 2 && FormatUtils.isNumeric(itemList[0]) && FormatUtils.isNumeric(itemList[1])) {
vehicle.setLeftWheelRpm(Float.parseFloat(itemList[0]));
vehicle.setRightWheelRpm(Float.parseFloat(itemList[1]));
}
break;
case 'b':
// do nothing
break;
}
processUSBData(data);
});
handlePhoneControllerEvents();
vehicle.requestVehicleConfig();
}
use of org.openbot.env.SharedPreferencesManager in project OpenBot by isl-org.
the class SensorsDialog method onCreateView.
@SuppressLint("NotifyDataSetChanged")
@Override
public View onCreateView(@NotNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
SharedPreferencesManager preferencesManager = new SharedPreferencesManager(requireContext());
DialogSensorsBinding binding = DialogSensorsBinding.inflate(LayoutInflater.from(getContext()));
SensorManager sensorManager = (SensorManager) requireActivity().getSystemService(Context.SENSOR_SERVICE);
List<Sensor> sensorList = sensorManager.getSensorList(Sensor.TYPE_ALL);
HashMap<String, Boolean> list = new LinkedHashMap<>();
list.put(Enums.SensorType.VEHICLE.getSensor(), preferencesManager.getSensorStatus(Enums.SensorType.VEHICLE.getSensor()));
// Every modern phone has GPS
list.put(Enums.SensorType.GPS.getSensor(), preferencesManager.getSensorStatus(Enums.SensorType.GPS.getSensor()));
for (Sensor sensor : sensorList) {
for (Enums.SensorType name : Enums.SensorType.values()) if (sensor.getStringType().toLowerCase().contains(name.getSensor().toLowerCase())) {
list.put(name.getSensor(), preferencesManager.getSensorStatus(name.getSensor()));
break;
}
}
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<String, Boolean> 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() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
if (!s.toString().isEmpty())
preferencesManager.setDelay(Integer.parseInt(s.toString()));
}
});
return binding.getRoot();
}
use of org.openbot.env.SharedPreferencesManager in project OpenBot by isl-org.
the class CameraActivity method onCreate.
@Override
protected void onCreate(final Bundle savedInstanceState) {
LOGGER.d("onCreate " + this);
super.onCreate(null);
context = getApplicationContext();
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
vehicle = OpenBotApplication.vehicle;
phoneController = PhoneController.getInstance(this);
setContentView(R.layout.activity_camera);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayShowTitleEnabled(false);
if (PermissionUtils.hasCameraPermission(this)) {
setFragment();
} else {
PermissionUtils.requestCameraPermission(this);
}
preferencesManager = new SharedPreferencesManager(this);
connectionSwitchCompat = findViewById(R.id.connection_switch);
threadsTextView = findViewById(R.id.threads);
plusImageView = findViewById(R.id.plus);
minusImageView = findViewById(R.id.minus);
networkSwitchCompat = findViewById(R.id.network_switch);
bottomSheetLayout = findViewById(R.id.bottom_sheet_layout);
gestureLayout = findViewById(R.id.gesture_layout);
sheetBehavior = BottomSheetBehavior.from(bottomSheetLayout);
bottomSheetArrowImageView = findViewById(R.id.bottom_sheet_arrow);
logSwitchCompat = findViewById(R.id.logger_switch);
cameraSwitchCompat = findViewById(R.id.camera_toggle_switch);
baudRateSpinner = findViewById(R.id.baud_rate_spinner);
ArrayAdapter<CharSequence> baudRateAdapter = ArrayAdapter.createFromResource(this, R.array.baud_rates, R.layout.spinner_item);
baudRateAdapter.setDropDownViewResource(android.R.layout.simple_list_item_checked);
baudRateSpinner.setAdapter(baudRateAdapter);
modelSpinner = findViewById(R.id.model_spinner);
masterList = FileUtils.loadConfigJSONFromAsset(this);
List<String> models = masterList.stream().filter(f -> f.pathType != Model.PATH_TYPE.URL).map(f -> FileUtils.nameWithoutExtension(f.name)).collect(Collectors.toList());
masterList.stream().filter(f -> f.name.contains(preferencesManager.getDefaultModel())).findFirst().ifPresent(f -> model = f);
modelAdapter = new ArrayAdapter<>(this, R.layout.spinner_item, new ArrayList<>(models));
modelAdapter.setDropDownViewResource(android.R.layout.simple_list_item_checked);
modelSpinner.setAdapter(modelAdapter);
deviceSpinner = findViewById(R.id.device_spinner);
ArrayAdapter<CharSequence> deviceAdapter = ArrayAdapter.createFromResource(this, R.array.devices, R.layout.spinner_item);
deviceAdapter.setDropDownViewResource(android.R.layout.simple_list_item_checked);
deviceSpinner.setAdapter(deviceAdapter);
logSpinner = findViewById(R.id.log_spinner);
ArrayAdapter<CharSequence> logAdapter = ArrayAdapter.createFromResource(this, R.array.log_settings, R.layout.spinner_item);
logAdapter.setDropDownViewResource(android.R.layout.simple_list_item_checked);
logSpinner.setAdapter(logAdapter);
controlModeSpinner = findViewById(R.id.control_mode_spinner);
ArrayAdapter<CharSequence> controlModeAdapter = ArrayAdapter.createFromResource(this, R.array.control_modes, R.layout.spinner_item);
controlModeAdapter.setDropDownViewResource(android.R.layout.simple_list_item_checked);
controlModeSpinner.setAdapter(controlModeAdapter);
driveModeSpinner = findViewById(R.id.drive_mode_spinner);
ArrayAdapter<CharSequence> driveModeAdapter = ArrayAdapter.createFromResource(this, R.array.drive_modes, R.layout.spinner_item);
driveModeAdapter.setDropDownViewResource(android.R.layout.simple_list_item_checked);
driveModeSpinner.setAdapter(driveModeAdapter);
speedModeSpinner = findViewById(R.id.speed_mode_spinner);
ArrayAdapter<CharSequence> controlAdapter = ArrayAdapter.createFromResource(this, R.array.speed_modes, R.layout.spinner_item);
controlAdapter.setDropDownViewResource(android.R.layout.simple_list_item_checked);
speedModeSpinner.setAdapter(controlAdapter);
ViewTreeObserver vto = gestureLayout.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
gestureLayout.getViewTreeObserver().removeOnGlobalLayoutListener(this);
// int width = bottomSheetLayout.getMeasuredWidth();
int height = gestureLayout.getMeasuredHeight();
sheetBehavior.setPeekHeight(height);
}
});
sheetBehavior.setHideable(false);
sheetBehavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
@Override
public void onStateChanged(@NonNull View bottomSheet, int newState) {
switch(newState) {
case BottomSheetBehavior.STATE_HIDDEN:
break;
case BottomSheetBehavior.STATE_EXPANDED:
bottomSheetArrowImageView.setImageResource(R.drawable.icn_chevron_down);
preferencesManager.setSheetExpanded(true);
break;
case BottomSheetBehavior.STATE_COLLAPSED:
bottomSheetArrowImageView.setImageResource(R.drawable.icn_chevron_up);
preferencesManager.setSheetExpanded(false);
break;
case BottomSheetBehavior.STATE_DRAGGING:
break;
case BottomSheetBehavior.STATE_SETTLING:
bottomSheetArrowImageView.setImageResource(R.drawable.icn_chevron_up);
break;
}
}
@Override
public void onSlide(@NonNull View bottomSheet, float slideOffset) {
}
});
voltageTextView = findViewById(R.id.voltage_info);
speedTextView = findViewById(R.id.speed_info);
sonarTextView = findViewById(R.id.sonar_info);
frameValueTextView = findViewById(R.id.frame_info);
cropValueTextView = findViewById(R.id.crop_info);
inferenceTimeTextView = findViewById(R.id.inference_info);
controlValueTextView = findViewById(R.id.control_info);
connectionSwitchCompat.setOnCheckedChangeListener(this);
networkSwitchCompat.setOnCheckedChangeListener(this);
logSwitchCompat.setOnCheckedChangeListener(this);
cameraSwitchCompat.setOnCheckedChangeListener(this);
plusImageView.setOnClickListener(this);
minusImageView.setOnClickListener(this);
baudRateSpinner.setOnItemSelectedListener(this);
modelSpinner.setOnItemSelectedListener(this);
deviceSpinner.setOnItemSelectedListener(this);
logSpinner.setOnItemSelectedListener(this);
controlModeSpinner.setOnItemSelectedListener(this);
driveModeSpinner.setOnItemSelectedListener(this);
speedModeSpinner.setOnItemSelectedListener(this);
// Intent for sensor service
intentSensorService = new Intent(this, SensorService.class);
setInitialValues();
// Try to connect to serial device
toggleConnection(true);
localBroadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action != null) {
switch(action) {
case Constants.USB_ACTION_DATA_RECEIVED:
long timestamp = SystemClock.elapsedRealtimeNanos();
String data = intent.getStringExtra("data");
char header = data.charAt(0);
String body = data.substring(1);
int type = -1;
switch(header) {
case 'f':
vehicle.processVehicleConfig(body);
break;
case 'v':
if (FormatUtils.isNumeric(body)) {
type = SensorService.MSG_VOLTAGE;
vehicle.setBatteryVoltage(Float.parseFloat(body));
runOnUiThread(() -> {
voltageTextView.setText(String.format(Locale.US, "%2.1f V", vehicle.getBatteryVoltage()));
});
} else {
String[] msgParts = body.split(":");
switch(msgParts[0]) {
case "min":
vehicle.setMinMotorVoltage(Float.parseFloat(msgParts[1]));
break;
case "low":
vehicle.setLowBatteryVoltage(Float.parseFloat(msgParts[1]));
break;
case "max":
vehicle.setMaxBatteryVoltage(Float.parseFloat(msgParts[1]));
break;
default:
Toast.makeText(getApplicationContext(), "Invalid voltage message received!", Toast.LENGTH_SHORT).show();
break;
}
}
break;
case 's':
if (FormatUtils.isNumeric(body)) {
type = SensorService.MSG_SONAR;
vehicle.setSonarReading(Float.parseFloat(body));
runOnUiThread(() -> {
sonarTextView.setText(String.format(Locale.US, "%3.0f cm", vehicle.getSonarReading()));
});
}
break;
case 'w':
String[] itemList = body.split(",");
if (itemList.length == 2 && FormatUtils.isNumeric(itemList[0]) && FormatUtils.isNumeric(itemList[1])) {
type = SensorService.MSG_WHEELS;
vehicle.setLeftWheelRpm(Float.parseFloat(itemList[0]));
vehicle.setRightWheelRpm(Float.parseFloat(itemList[1]));
runOnUiThread(() -> {
speedTextView.setText(String.format(Locale.US, "%3.0f,%3.0f rpm", vehicle.getLeftWheelRpm(), vehicle.getRightWheelRpm()));
});
}
break;
case 'b':
type = SensorService.MSG_BUMPER;
break;
}
if (type > 0)
sendVehicleDataToSensorService(timestamp, data, type);
break;
}
}
}
};
IntentFilter localIntentFilter = new IntentFilter();
localIntentFilter.addAction(Constants.USB_ACTION_DATA_RECEIVED);
localBroadcastManager = LocalBroadcastManager.getInstance(this);
localBroadcastManager.registerReceiver(localBroadcastReceiver, localIntentFilter);
vehicle.requestVehicleConfig();
}
use of org.openbot.env.SharedPreferencesManager in project OpenBot by isl-org.
the class SensorService method onCreate.
@RequiresApi(api = Build.VERSION_CODES.N)
@Override
public final void onCreate() {
super.onCreate();
sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
accelerometerSensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
gyroscopeSensor = sensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE);
gravitySensor = sensorManager.getDefaultSensor(Sensor.TYPE_GRAVITY);
magneticSensor = sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
lightSensor = sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
proximitySensor = sensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);
pressureSensor = sensorManager.getDefaultSensor(Sensor.TYPE_PRESSURE);
temperatureSensor = sensorManager.getDefaultSensor(Sensor.TYPE_AMBIENT_TEMPERATURE);
poseSensor = sensorManager.getDefaultSensor(Sensor.TYPE_POSE_6DOF);
motionSensor = sensorManager.getDefaultSensor(Sensor.TYPE_MOTION_DETECT);
// Initialize the FusedLocationClient.
fusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
preferencesManager = new SharedPreferencesManager(this);
}
Aggregations