Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5b2d839b authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge "Add the measurement frequency selection." into main

parents 713dad66 58108ccf
Loading
Loading
Loading
Loading
+34 −2
Original line number Diff line number Diff line
@@ -38,6 +38,34 @@ import java.util.concurrent.Executors;

class DistanceMeasurementInitiator {

    enum Freq {
        HIGH(DistanceMeasurementParams.REPORT_FREQUENCY_HIGH),
        MEDIUM(DistanceMeasurementParams.REPORT_FREQUENCY_MEDIUM),
        LOW(DistanceMeasurementParams.REPORT_FREQUENCY_LOW);
        private final int freq;

        Freq(int freq) {
            this.freq = freq;
        }

        int getFreq() {
            return freq;
        }

        @Override
        public String toString() {
            return name();
        }

        public static Freq fromName(String name) {
            try {
                return Freq.valueOf(name);
            } catch (IllegalArgumentException e) {
                return MEDIUM;
            }
        }
    }

    private static final int DISTANCE_MEASUREMENT_DURATION_SEC = 3600;
    private static final List<Pair<Integer, String>> mDistanceMeasurementMethodMapping =
            List.of(
@@ -119,8 +147,12 @@ class DistanceMeasurementInitiator {
        return methods;
    }

    List<String> getMeasurementFreqs() {
        return List.of(Freq.MEDIUM.toString(), Freq.HIGH.toString(), Freq.LOW.toString());
    }

    @SuppressLint("MissingPermission") // permissions are checked upfront
    void startDistanceMeasurement(String distanceMeasurementMethodName) {
    void startDistanceMeasurement(String distanceMeasurementMethodName, String selectedFreq) {

        if (mTargetDevice == null) {
            printLog("do Gatt connect first");
@@ -132,7 +164,7 @@ class DistanceMeasurementInitiator {
        DistanceMeasurementParams params =
                new DistanceMeasurementParams.Builder(mTargetDevice)
                        .setDurationSeconds(DISTANCE_MEASUREMENT_DURATION_SEC)
                        .setFrequency(DistanceMeasurementParams.REPORT_FREQUENCY_LOW)
                        .setFrequency(Freq.fromName(selectedFreq).getFreq())
                        .setMethodId(getDistanceMeasurementMethodId(distanceMeasurementMethodName))
                        .build();
        DistanceMeasurementManager distanceMeasurementManager =
+11 −2
Original line number Diff line number Diff line
@@ -43,9 +43,11 @@ public class InitiatorFragment extends Fragment {
    private static final DecimalFormat DISTANCE_DECIMAL_FMT = new DecimalFormat("0.00");

    private ArrayAdapter<String> mDmMethodArrayAdapter;
    private ArrayAdapter<String> mFreqArrayAdapter;
    private TextView mDistanceText;
    private CanvasView mDistanceCanvasView;
    private Spinner mSpinnerDmMethod;
    private Spinner mSpinnerFreq;
    private Button mButtonCs;
    private LinearLayout mDistanceViewLayout;
    private TextView mLogText;
@@ -63,6 +65,7 @@ public class InitiatorFragment extends Fragment {

        mButtonCs = (Button) root.findViewById(R.id.btn_cs);
        mSpinnerDmMethod = (Spinner) root.findViewById(R.id.spinner_dm_method);
        mSpinnerFreq = (Spinner) root.findViewById(R.id.spinner_freq);
        mDistanceViewLayout = (LinearLayout) root.findViewById(R.id.layout_distance_view);
        mDistanceText = new TextView(getContext());
        mDistanceViewLayout.addView(mDistanceText);
@@ -85,6 +88,11 @@ public class InitiatorFragment extends Fragment {
        mDmMethodArrayAdapter.setDropDownViewResource(
                android.R.layout.simple_spinner_dropdown_item);
        mSpinnerDmMethod.setAdapter(mDmMethodArrayAdapter);
        mFreqArrayAdapter =
                new ArrayAdapter<String>(
                        getContext(), android.R.layout.simple_spinner_item, new ArrayList<>());
        mFreqArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        mSpinnerFreq.setAdapter(mFreqArrayAdapter);

        mInitiatorViewModel = new ViewModelProvider(this).get(InitiatorViewModel.class);
        mBleConnectionViewModel = new ViewModelProvider(this).get(BleConnectionViewModel.class);
@@ -134,14 +142,15 @@ public class InitiatorFragment extends Fragment {
                        });

        mDmMethodArrayAdapter.addAll(mInitiatorViewModel.getSupportedDmMethods());

        mFreqArrayAdapter.addAll(mInitiatorViewModel.getMeasurementFreqs());
        mButtonCs.setOnClickListener(
                v -> {
                    String methodName = mSpinnerDmMethod.getSelectedItem().toString();
                    String freq = mSpinnerFreq.getSelectedItem().toString();
                    if (TextUtils.isEmpty(methodName)) {
                        printLog("the device doesn't support any distance measurement methods.");
                    }
                    mInitiatorViewModel.toggleCsStartStop(methodName);
                    mInitiatorViewModel.toggleCsStartStop(methodName, freq);
                });
    }

+7 −2
Original line number Diff line number Diff line
@@ -71,9 +71,14 @@ public class InitiatorViewModel extends AndroidViewModel {
        return mDistanceMeasurementInitiator.getDistanceMeasurementMethods();
    }

    void toggleCsStartStop(String distanceMeasurementMethodName) {
    List<String> getMeasurementFreqs() {
        return mDistanceMeasurementInitiator.getMeasurementFreqs();
    }

    void toggleCsStartStop(String distanceMeasurementMethodName, String freq) {
        if (!mCsStarted.getValue()) {
            mDistanceMeasurementInitiator.startDistanceMeasurement(distanceMeasurementMethodName);
            mDistanceMeasurementInitiator.startDistanceMeasurement(
                    distanceMeasurementMethodName, freq);
        } else {
            mDistanceMeasurementInitiator.stopDistanceMeasurement();
        }
+33 −5
Original line number Diff line number Diff line
@@ -21,15 +21,43 @@
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />


        <TextView
            android:id="@+id/dm_method_label"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text= "Method"
            app:layout_constraintBottom_toTopOf="@id/btn_cs"
            app:layout_constraintEnd_toStartOf="@id/spinner_dm_method"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@id/init_ble_connection_container"
            />
        <Spinner
            android:id="@+id/spinner_dm_method"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginTop="8dp"
            android:padding="10dp"
            app:layout_constraintEnd_toStartOf="@id/btn_cs"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintEnd_toStartOf="@id/freq_label"
            app:layout_constraintStart_toEndOf="@id/dm_method_label"
            app:layout_constraintTop_toBottomOf="@id/init_ble_connection_container" />
        <TextView
            android:id="@+id/freq_label"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text= "Freq"
            app:layout_constraintBottom_toTopOf="@id/btn_cs"
            app:layout_constraintEnd_toStartOf="@id/spinner_freq"
            app:layout_constraintStart_toEndOf="@id/spinner_dm_method"
            app:layout_constraintTop_toBottomOf="@id/init_ble_connection_container"
            />
        <Spinner
            android:id="@+id/spinner_freq"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginTop="8dp"
            android:padding="10dp"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toEndOf="@id/freq_label"
            app:layout_constraintTop_toBottomOf="@id/init_ble_connection_container" />
        <Button
            android:id="@+id/btn_cs"
@@ -40,8 +68,8 @@
            android:padding="10dp"
            android:text="Start Distance Measurement"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toEndOf="@id/spinner_dm_method"
            app:layout_constraintTop_toBottomOf="@id/init_ble_connection_container" />
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@id/spinner_dm_method" />
        <TextView
            android:id="@+id/text_log"
            android:layout_width="match_parent"