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

Commit 73df4ed5 authored by Eric Shih's avatar Eric Shih
Browse files

Support the measurement duration selection

Flag: EXEMPT not part of BT stack, only a demo app.
Bug: 383287702
Test: m ChannelSoundingTestApp
Change-Id: Ibb792377eeba466baffa8ef91abb34dbb67b0feb
parent 403bfc31
Loading
Loading
Loading
Loading
+7 −3
Original line number Diff line number Diff line
@@ -66,7 +66,6 @@ class DistanceMeasurementInitiator {
        }
    }

    private static final int DISTANCE_MEASUREMENT_DURATION_SEC = 3600;
    private static final List<Pair<Integer, String>> mDistanceMeasurementMethodMapping =
            List.of(
                    new Pair<>(DistanceMeasurementMethod.DISTANCE_MEASUREMENT_METHOD_AUTO, "AUTO"),
@@ -151,8 +150,13 @@ class DistanceMeasurementInitiator {
        return List.of(Freq.MEDIUM.toString(), Freq.HIGH.toString(), Freq.LOW.toString());
    }

    List<String> getMeasureDurationsInSeconds() {
        return List.of("3600", "300", "60", "10");
    }

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

        if (mTargetDevice == null) {
            printLog("do Gatt connect first");
@@ -163,7 +167,7 @@ class DistanceMeasurementInitiator {

        DistanceMeasurementParams params =
                new DistanceMeasurementParams.Builder(mTargetDevice)
                        .setDurationSeconds(DISTANCE_MEASUREMENT_DURATION_SEC)
                        .setDurationSeconds(duration)
                        .setFrequency(Freq.fromName(selectedFreq).getFreq())
                        .setMethodId(getDistanceMeasurementMethodId(distanceMeasurementMethodName))
                        .build();
+14 −1
Original line number Diff line number Diff line
@@ -44,10 +44,12 @@ public class InitiatorFragment extends Fragment {

    private ArrayAdapter<String> mDmMethodArrayAdapter;
    private ArrayAdapter<String> mFreqArrayAdapter;
    private ArrayAdapter<String> mDurationArrayAdapter;
    private TextView mDistanceText;
    private CanvasView mDistanceCanvasView;
    private Spinner mSpinnerDmMethod;
    private Spinner mSpinnerFreq;
    private Spinner mSpinnerDuration;
    private Button mButtonCs;
    private LinearLayout mDistanceViewLayout;
    private TextView mLogText;
@@ -66,6 +68,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);
        mSpinnerDuration = (Spinner) root.findViewById(R.id.spinner_duration);
        mDistanceViewLayout = (LinearLayout) root.findViewById(R.id.layout_distance_view);
        mDistanceText = new TextView(getContext());
        mDistanceViewLayout.addView(mDistanceText);
@@ -93,6 +96,12 @@ public class InitiatorFragment extends Fragment {
                        getContext(), android.R.layout.simple_spinner_item, new ArrayList<>());
        mFreqArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        mSpinnerFreq.setAdapter(mFreqArrayAdapter);
        mDurationArrayAdapter =
                new ArrayAdapter<String>(
                        getContext(), android.R.layout.simple_spinner_item, new ArrayList<>());
        mDurationArrayAdapter.setDropDownViewResource(
                android.R.layout.simple_spinner_dropdown_item);
        mSpinnerDuration.setAdapter(mDurationArrayAdapter);

        mInitiatorViewModel = new ViewModelProvider(this).get(InitiatorViewModel.class);
        mBleConnectionViewModel = new ViewModelProvider(this).get(BleConnectionViewModel.class);
@@ -143,14 +152,18 @@ public class InitiatorFragment extends Fragment {

        mDmMethodArrayAdapter.addAll(mInitiatorViewModel.getSupportedDmMethods());
        mFreqArrayAdapter.addAll(mInitiatorViewModel.getMeasurementFreqs());
        mDurationArrayAdapter.addAll(mInitiatorViewModel.getMeasurementDurations());
        mButtonCs.setOnClickListener(
                v -> {
                    String methodName = mSpinnerDmMethod.getSelectedItem().toString();
                    String freq = mSpinnerFreq.getSelectedItem().toString();
                    int duration = Integer.parseInt(mSpinnerDuration.getSelectedItem().toString());

                    if (TextUtils.isEmpty(methodName)) {
                        printLog("the device doesn't support any distance measurement methods.");
                    }
                    mInitiatorViewModel.toggleCsStartStop(methodName, freq);

                    mInitiatorViewModel.toggleCsStartStop(methodName, freq, duration);
                });
    }

+6 −2
Original line number Diff line number Diff line
@@ -75,10 +75,14 @@ public class InitiatorViewModel extends AndroidViewModel {
        return mDistanceMeasurementInitiator.getMeasurementFreqs();
    }

    void toggleCsStartStop(String distanceMeasurementMethodName, String freq) {
    List<String> getMeasurementDurations() {
        return mDistanceMeasurementInitiator.getMeasureDurationsInSeconds();
    }

    void toggleCsStartStop(String distanceMeasurementMethodName, String freq, int duration) {
        if (!mCsStarted.getValue()) {
            mDistanceMeasurementInitiator.startDistanceMeasurement(
                    distanceMeasurementMethodName, freq);
                    distanceMeasurementMethodName, freq, duration);
        } else {
            mDistanceMeasurementInitiator.stopDistanceMeasurement();
        }
+68 −36
Original line number Diff line number Diff line
@@ -16,49 +16,81 @@
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:gravity="center_vertical"
            app:layout_constraintBottom_toTopOf="@id/spinner_dm_method"
            app:layout_constraintBottom_toTopOf="@id/layout_methods"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

        <LinearLayout android:id="@+id/layout_methods"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:layout_constraintTop_toBottomOf="@id/init_ble_connection_container"
            app:layout_constraintBottom_toTopOf="@id/layout_parameters"
            android:weightSum="4"
            android:orientation="horizontal">
            <TextView
                android:id="@+id/dm_method_label"
            android:layout_width="wrap_content"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="0.6"
                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"
                app:layout_constraintEnd_toStartOf="@id/spinner_dm_method"
                />
            <Spinner
                android:id="@+id/spinner_dm_method"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
            android:layout_marginTop="8dp"
                android:layout_weight="1.4"
                android:padding="10dp"
            app:layout_constraintEnd_toStartOf="@id/freq_label"
                app:layout_constraintStart_toEndOf="@id/dm_method_label"
            app:layout_constraintTop_toBottomOf="@id/init_ble_connection_container" />
                app:layout_constraintEnd_toEndOf="parent"
                />
        </LinearLayout>
        <LinearLayout android:id="@+id/layout_parameters"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:layout_constraintTop_toBottomOf="@id/layout_methods"
            app:layout_constraintBottom_toTopOf="@id/btn_cs"
            android:weightSum="4"
            android:orientation="horizontal">
            <TextView
                android:id="@+id/freq_label"
            android:layout_width="wrap_content"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="0.6"
                android:text= "Freq"
            app:layout_constraintBottom_toTopOf="@id/btn_cs"
                app:layout_constraintStart_toStartOf="parent"
                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:layout_weight="1.4"
                android:padding="10dp"
            app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toEndOf="@id/freq_label"
            app:layout_constraintTop_toBottomOf="@id/init_ble_connection_container" />
                app:layout_constraintEnd_toStartOf="@id/duration_label"
                />
            <TextView
                android:id="@+id/duration_label"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="0.7"
                android:text= "Duration (s)"
                app:layout_constraintStart_toEndOf="@id/spinner_freq"
                app:layout_constraintEnd_toStartOf="@id/spinner_duration"
                />
            <Spinner
                android:id="@+id/spinner_duration"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1.3"
                android:padding="10dp"
                app:layout_constraintStart_toEndOf="@id/duration_label"
                app:layout_constraintEnd_toEndOf="parent"
                />
        </LinearLayout>
        <Button
            android:id="@+id/btn_cs"
            android:layout_width="wrap_content"
@@ -69,7 +101,7 @@
            android:text="Start Distance Measurement"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@id/spinner_dm_method" />
            app:layout_constraintTop_toBottomOf="@id/layout_parameters" />
        <TextView
            android:id="@+id/text_log"
            android:layout_width="match_parent"