2020import android .support .design .widget .Snackbar ;
2121import android .support .v4 .app .Fragment ;
2222import android .support .v7 .app .AppCompatActivity ;
23+ import android .support .v7 .widget .Toolbar ;
2324import android .view .Display ;
2425import android .view .GestureDetector ;
26+ import android .view .Menu ;
27+ import android .view .MenuItem ;
2528import android .view .MotionEvent ;
2629import android .view .View ;
2730import android .view .Window ;
@@ -161,8 +164,6 @@ public class OscilloscopeActivity extends AppCompatActivity implements View.OnCl
161164 private Fragment dataAnalysisFragment ;
162165 private Fragment xyPlotFragment ;
163166 private Fragment playbackFragment ;
164- @ BindView (R .id .imageView_led_os )
165- ImageView ledImageView ;
166167 @ BindView (R .id .show_guide_oscilloscope )
167168 TextView showText ;
168169 private ScienceLab scienceLab ;
@@ -179,9 +180,7 @@ public class OscilloscopeActivity extends AppCompatActivity implements View.OnCl
179180 private volatile boolean monitor = true ;
180181 private BottomSheetBehavior bottomSheetBehavior ;
181182 private GestureDetector gestureDetector ;
182- private boolean btnLongpressed ;
183183 private double maxAmp , maxFreq ;
184- private ImageView recordButton ;
185184 private boolean isRecording = false ;
186185 private Realm realm ;
187186 public RealmResults <OscilloscopeData > recordedOscilloscopeData ;
@@ -205,6 +204,9 @@ public class OscilloscopeActivity extends AppCompatActivity implements View.OnCl
205204 private String [] loggingYdata = new String [4 ];
206205 public String xyPlotAxis1 = "CH1" ;
207206 public String xyPlotAxis2 = "CH2" ;
207+ private boolean isPlayingback = false ;
208+ private boolean isPlaying = false ;
209+ private MenuItem playMenu ;
208210
209211 private enum CHANNEL {CH1 , CH2 , CH3 , MIC }
210212
@@ -229,6 +231,14 @@ public void onClick(View v) {
229231 });
230232 mainLayout = findViewById (R .id .oscilloscope_mail_layout );
231233
234+ Toolbar toolbar = findViewById (R .id .toolbar );
235+ setSupportActionBar (toolbar );
236+ getSupportActionBar ().setTitle (R .string .oscilloscope );
237+ if (getSupportActionBar () != null ) {
238+ getSupportActionBar ().setDisplayHomeAsUpEnabled (true );
239+ getSupportActionBar ().setDisplayShowHomeEnabled (true );
240+ }
241+
232242 channelIndexMap = new HashMap <>();
233243 channelIndexMap .put (CHANNEL .CH1 .toString (), 1 );
234244 channelIndexMap .put (CHANNEL .CH2 .toString (), 2 );
@@ -240,8 +250,6 @@ public void onClick(View v) {
240250 (LocationManager ) getSystemService (Context .LOCATION_SERVICE ));
241251 csvLogger = new CSVLogger (getString (R .string .oscilloscope ));
242252
243- recordButton = findViewById (R .id .oscilloscope_record_button );
244-
245253 scienceLab = ScienceLabCommon .scienceLab ;
246254 x1 = mChart .getXAxis ();
247255 y1 = mChart .getAxisLeft ();
@@ -447,18 +455,6 @@ public void run() {
447455 }
448456 }
449457
450- if (!isInBuiltMicSelected && (!scienceLab .isConnected () || (!isCH1Selected && !isCH2Selected && !isCH3Selected && !isAudioInputSelected ))) {
451- if (!String .valueOf (ledImageView .getTag ()).equals ("red" )) {
452- runOnUiThread (new Runnable () {
453- @ Override
454- public void run () {
455- ledImageView .setImageResource (R .drawable .red_led );
456- ledImageView .setTag ("red" );
457- }
458- });
459- }
460- }
461-
462458 if (scienceLab .isConnected () && isXYPlotSelected ) {
463459 xyPlotTask = new XYPlotTask ();
464460 xyPlotTask .execute (xyPlotAxis1 , xyPlotAxis2 );
@@ -481,42 +477,38 @@ public void run() {
481477 monitorThread = new Thread (runnable );
482478 monitorThread .start ();
483479
484- ImageView guideImageView = findViewById (R .id .oscilloscope_guide_button );
485- guideImageView .setOnClickListener (new View .OnClickListener () {
486- @ Override
487- public void onClick (View v ) {
488- bottomSheetBehavior .setState (bottomSheetBehavior .getState () == BottomSheetBehavior .STATE_HIDDEN ?
489- BottomSheetBehavior .STATE_EXPANDED : BottomSheetBehavior .STATE_HIDDEN );
490- }
491- });
492- guideImageView .setOnLongClickListener (new View .OnLongClickListener () {
493- @ Override
494- public boolean onLongClick (View v ) {
495- showText .setVisibility (View .VISIBLE );
496- btnLongpressed = true ;
497- return true ;
498- }
499- });
500- guideImageView .setOnTouchListener (new View .OnTouchListener () {
501- @ Override
502- public boolean onTouch (View v , MotionEvent event ) {
503- v .onTouchEvent (event );
504- if (event .getAction () == MotionEvent .ACTION_UP ) {
505- if (btnLongpressed ) {
506- showText .setVisibility (View .GONE );
507- btnLongpressed = false ;
508- }
509- }
510- return true ;
511- }
512- });
480+ if (getIntent ().getExtras () != null && getIntent ().getExtras ().getBoolean (KEY_LOG )) {
481+ recordedOscilloscopeData = LocalDataLog .with ()
482+ .getBlockOfOscilloscopeRecords (getIntent ().getExtras ().getLong (DATA_BLOCK ));
483+ isPlayingback = true ;
484+ setLayoutForPlayback ();
485+ }
486+ }
513487
514- recordButton .setOnClickListener (new View .OnClickListener () {
515- @ Override
516- public void onClick (View v ) {
488+ @ Override
489+ public boolean onCreateOptionsMenu (Menu menu ) {
490+ getMenuInflater ().inflate (R .menu .activity_landscape_menu , menu );
491+ return true ;
492+ }
493+
494+ @ Override
495+ public boolean onPrepareOptionsMenu (Menu menu ) {
496+ playMenu = menu .findItem (R .id .play_data );
497+ menu .findItem (R .id .record_pause_data ).setVisible (!isPlayingback );
498+ menu .findItem (R .id .play_data ).setVisible (isPlayingback );
499+ return super .onPrepareOptionsMenu (menu );
500+ }
501+
502+ @ Override
503+ public boolean onOptionsItemSelected (MenuItem item ) {
504+ switch (item .getItemId ()) {
505+ case android .R .id .home :
506+ finish ();
507+ break ;
508+ case R .id .record_pause_data :
517509 if (isRecording ) {
518510 isRecording = false ;
519- recordButton . setImageResource (R .drawable .ic_record_white );
511+ item . setIcon (R .drawable .ic_record_white );
520512 CustomSnackBar .showSnackBar (mainLayout ,
521513 getString (R .string .csv_store_text ) + " " + csvLogger .getCurrentFilePath ()
522514 , getString (R .string .open ), new View .OnClickListener () {
@@ -529,7 +521,7 @@ public void onClick(View view) {
529521 }, Snackbar .LENGTH_SHORT );
530522 } else {
531523 isRecording = true ;
532- recordButton . setImageResource (R .drawable .ic_record_stop_white );
524+ item . setIcon (R .drawable .ic_record_stop_white );
533525 block = System .currentTimeMillis ();
534526 if (gpsLogger .isGPSEnabled ()) {
535527 Location location = gpsLogger .getDeviceLocation ();
@@ -551,26 +543,42 @@ public void onClick(View view) {
551543 recordSensorDataBlockID (new SensorDataBlock (block , getResources ().getString (R .string .oscilloscope )));
552544 CustomSnackBar .showSnackBar (mainLayout , getString (R .string .data_recording_start ), null , null , Snackbar .LENGTH_SHORT );
553545 }
554- }
555- });
556-
557- if (getIntent ().getExtras () != null && getIntent ().getExtras ().getBoolean (KEY_LOG )) {
558- recordedOscilloscopeData = LocalDataLog .with ()
559- .getBlockOfOscilloscopeRecords (getIntent ().getExtras ().getLong (DATA_BLOCK ));
560- setLayoutForPlayback ();
546+ break ;
547+ case R .id .show_guide :
548+ bottomSheetBehavior .setState (bottomSheetBehavior .getState () == BottomSheetBehavior .STATE_HIDDEN ?
549+ BottomSheetBehavior .STATE_EXPANDED : BottomSheetBehavior .STATE_HIDDEN );
550+ break ;
551+ case R .id .show_logged_data :
552+ Intent intent = new Intent (OscilloscopeActivity .this , DataLoggerActivity .class );
553+ intent .putExtra (DataLoggerActivity .CALLER_ACTIVITY , getResources ().getString (R .string .oscilloscope ));
554+ startActivity (intent );
555+ break ;
556+ case R .id .play_data :
557+ if (isPlaying ) {
558+ isPlaying = false ;
559+ item .setIcon (R .drawable .ic_play_arrow_white_24dp );
560+ pauseData ();
561+ } else {
562+ isPlaying = true ;
563+ item .setIcon (R .drawable .ic_pause_white_24dp );
564+ playRecordedData ();
565+ }
566+ break ;
567+ default :
568+ break ;
561569 }
570+ return true ;
562571 }
563572
564573 private void setLayoutForPlayback () {
565574 findViewById (R .id .layout_dock_os1 ).setVisibility (View .GONE );
566- recordButton .setVisibility (View .GONE );
567575 RelativeLayout .LayoutParams lineChartParams = (RelativeLayout .LayoutParams ) mChartLayout .getLayoutParams ();
568576 RelativeLayout .LayoutParams frameLayoutParams = (RelativeLayout .LayoutParams ) frameLayout .getLayoutParams ();
569- lineChartParams .height = height * 4 / 5 ;
570- lineChartParams .width = width ;
577+ lineChartParams .height = height * 3 / 4 ;
578+ lineChartParams .width = RelativeLayout . LayoutParams . MATCH_PARENT ;
571579 mChartLayout .setLayoutParams (lineChartParams );
572- frameLayoutParams .height = height / 5 ;
573- frameLayoutParams .width = width ;
580+ frameLayoutParams .height = height / 4 ;
581+ frameLayoutParams .width = RelativeLayout . LayoutParams . MATCH_PARENT ;
574582 frameLayout .setLayoutParams (frameLayoutParams );
575583 replaceFragment (R .id .layout_dock_os2 , playbackFragment , "Playback Fragment" );
576584 }
@@ -643,15 +651,15 @@ public void run() {
643651 } else {
644652 playbackTimer .cancel ();
645653 playbackTimer = null ;
646- (( OscilloscopePlaybackFragment ) playbackFragment ). resetPlayButton ( );
654+ playMenu . setIcon ( R . drawable . ic_play_arrow_white_24dp );
647655 currentPosition = 0 ;
648656 }
649657 } catch (Exception e ) {
650658 if (playbackTimer != null ) {
651659 playbackTimer .cancel ();
652660 playbackTimer = null ;
653661 }
654- (( OscilloscopePlaybackFragment ) playbackFragment ). resetPlayButton ( );
662+ playMenu . setIcon ( R . drawable . ic_play_arrow_white_24dp );
655663 currentPosition = 0 ;
656664 }
657665 }
@@ -662,8 +670,10 @@ public void run() {
662670 }
663671
664672 public void pauseData () {
665- playbackTimer .cancel ();
666- playbackTimer = null ;
673+ if (playbackTimer != null ) {
674+ playbackTimer .cancel ();
675+ playbackTimer = null ;
676+ }
667677 }
668678
669679 private void logChannelData (String [] channels ) {
@@ -760,10 +770,10 @@ public void onWindowFocusChanged() {
760770 frameLayoutParams .width = width * 7 / 8 ;
761771 frameLayout .setLayoutParams (frameLayoutParams );
762772 } else {
763- lineChartParams .height = height * 2 / 3 ;
773+ lineChartParams .height = height * 3 / 5 ;
764774 lineChartParams .width = width * 5 / 6 ;
765775 mChartLayout .setLayoutParams (lineChartParams );
766- frameLayoutParams .height = height / 3 ;
776+ frameLayoutParams .height = height * 2 / 5 ;
767777 frameLayoutParams .width = width * 5 / 6 ;
768778 frameLayout .setLayoutParams (frameLayoutParams );
769779 }
@@ -1131,10 +1141,6 @@ public void run() {
11311141 @ Override
11321142 protected void onPostExecute (Void aVoid ) {
11331143 super .onPostExecute (aVoid );
1134- if (!String .valueOf (ledImageView .getTag ()).equals ("green" )) {
1135- ledImageView .setImageResource (R .drawable .green_led );
1136- ledImageView .setTag ("green" );
1137- }
11381144
11391145 List <ILineDataSet > dataSets = new ArrayList <>();
11401146 for (int i = 0 ; i < Math .min (entries .size (), paramsChannels .length ); i ++) {
0 commit comments