From f00c4201049cfa69ba7f8fc1015c8aeadb49a6ce Mon Sep 17 00:00:00 2001 From: Ashley Marie Date: Fri, 15 Nov 2019 12:09:06 -0800 Subject: [PATCH] Include stop button on experiment feed during recording PiperOrigin-RevId: 280708631 --- .../whistlepunk/ControlBarController.java | 34 +++++++++++++++++++ ...perimentDetailsWithActionAreaFragment.java | 9 +++++ ...es_experiment_details_with_action_area.xml | 9 +++-- 3 files changed, 49 insertions(+), 3 deletions(-) diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/ControlBarController.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/ControlBarController.java index 23d97ac0..f9e8fc26 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/ControlBarController.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/ControlBarController.java @@ -139,6 +139,40 @@ public void attachRecordButton(ImageButton recordButton, FragmentManager fragmen }); } + public void attachStopButton(CardView recordButton, FragmentManager fragmentManager) { + Observable recordingStatus = + AppSingleton.getInstance(recordButton.getContext()) + .getRecorderController(appAccount) + .watchRecordingStatus(); + + Resources resources = recordButton.getResources(); + ((TextView) recordButton.findViewById(R.id.record_button_text)) + .setText(R.string.btn_stop_label); + recordButton.setContentDescription(resources.getString(R.string.btn_stop_description)); + ((ImageView) recordButton.findViewById(R.id.record_button_icon)) + .setImageDrawable(resources.getDrawable(R.drawable.ic_recording_stop_42dp)); + + RxView.clicks(recordButton) + .flatMapMaybe(click -> recordingStatus.firstElement()) + .subscribe( + status -> { + if (status.isRecording()) { + tryStopRecording(recordButton, fragmentManager); + } + }); + + recordingStatus + .takeUntil(RxView.detaches(recordButton)) + .subscribe( + status -> { + if (status.state.shouldShowStopButton()) { + recordButton.setVisibility(View.VISIBLE); + } else { + recordButton.setVisibility(View.INVISIBLE); + } + }); + } + /** * Updates the recording button, action area, title bar, and sensor card view for {@link * SensorFragment} when a recording starts/stops. diff --git a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/project/experiment/ExperimentDetailsWithActionAreaFragment.java b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/project/experiment/ExperimentDetailsWithActionAreaFragment.java index b8574218..1b3ff8f7 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/project/experiment/ExperimentDetailsWithActionAreaFragment.java +++ b/OpenScienceJournal/whistlepunk_library/src/main/java/com/google/android/apps/forscience/whistlepunk/project/experiment/ExperimentDetailsWithActionAreaFragment.java @@ -56,6 +56,7 @@ import com.google.android.apps.forscience.whistlepunk.AppSingleton; import com.google.android.apps.forscience.whistlepunk.Appearances; import com.google.android.apps.forscience.whistlepunk.ColorUtils; +import com.google.android.apps.forscience.whistlepunk.ControlBarController; import com.google.android.apps.forscience.whistlepunk.DataController; import com.google.android.apps.forscience.whistlepunk.DeletedLabel; import com.google.android.apps.forscience.whistlepunk.DevOptionsFragment; @@ -73,6 +74,7 @@ import com.google.android.apps.forscience.whistlepunk.RxDataController; import com.google.android.apps.forscience.whistlepunk.RxEvent; import com.google.android.apps.forscience.whistlepunk.SensorAppearance; +import com.google.android.apps.forscience.whistlepunk.SnackbarManager; import com.google.android.apps.forscience.whistlepunk.StatsAccumulator; import com.google.android.apps.forscience.whistlepunk.StatsList; import com.google.android.apps.forscience.whistlepunk.WhistlePunkApplication; @@ -172,6 +174,7 @@ public interface ListenerProvider { private RxEvent destroyed = new RxEvent(); private LocalSyncManager localSyncManager; private ExperimentLibraryManager experimentLibraryManager; + private ControlBarController controlBarController; /** * Creates a new instance of this fragment. @@ -223,6 +226,8 @@ public void onCreate(Bundle savedInstanceState) { experimentId = getArguments().getString(ARG_EXPERIMENT_ID); claimExperimentsMode = getArguments().getBoolean(ARG_CLAIM_EXPERIMENTS_MODE); setHasOptionsMenu(true); + controlBarController = + new ControlBarController(appAccount, getExperimentId(), new SnackbarManager()); if (claimExperimentsMode) { WhistlePunkApplication.getUsageTracker(getActivity()) .trackEvent( @@ -394,10 +399,14 @@ public View onCreateView( graphOptionsController.loadIntoScalarDisplayOptions(scalarDisplayOptions, view); ActionAreaView actionArea = view.findViewById(R.id.action_area); + CardView recordButton = view.findViewById(R.id.record); + ExperimentActivity experimentActivity = (ExperimentActivity) getActivity(); if (experimentActivity.isTwoPane()) { + recordButton.setVisibility(View.GONE); actionArea.setVisibility(View.GONE); } else { + controlBarController.attachStopButton(recordButton, getChildFragmentManager()); actionArea.addItems( getContext(), experimentActivity.getActionAreaItems(), experimentActivity); actionArea.setUpScrollListener(details); diff --git a/OpenScienceJournal/whistlepunk_library/src/main/res/layout/fragment_panes_experiment_details_with_action_area.xml b/OpenScienceJournal/whistlepunk_library/src/main/res/layout/fragment_panes_experiment_details_with_action_area.xml index 2df51604..9074aca6 100644 --- a/OpenScienceJournal/whistlepunk_library/src/main/res/layout/fragment_panes_experiment_details_with_action_area.xml +++ b/OpenScienceJournal/whistlepunk_library/src/main/res/layout/fragment_panes_experiment_details_with_action_area.xml @@ -13,15 +13,18 @@ See the License for the specific language governing permissions and limitations under the License. --> - + + + style="@style/DefaultActionArea" + android:layout_alignParentBottom="true" /> - +