Skip to content

Commit fba6f17

Browse files
authored
Merge pull request #1839 from fossasia/development
Merge development into master to release v2.0.16
2 parents 2eef628 + 35ba5ec commit fba6f17

25 files changed

+1201
-2071
lines changed

app/build.gradle

+2-2
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ android {
88
applicationId "io.pslab"
99
minSdkVersion rootProject.ext.minSdkVersion
1010
targetSdkVersion rootProject.ext.targetSdkVersion
11-
versionCode 16
12-
versionName "2.0.15"
11+
versionCode 17
12+
versionName "2.0.16"
1313
multiDexEnabled true
1414
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
1515
}

app/src/main/java/io/pslab/activity/AccelerometerActivity.java

+2-13
Original file line numberDiff line numberDiff line change
@@ -115,19 +115,8 @@ private void reinstateConfigurations() {
115115
accelerometerConfigurations = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
116116
locationEnabled = accelerometerConfigurations.getBoolean(AccelerometerSettingsFragment.KEY_INCLUDE_LOCATION, true);
117117
AccelerometerDataFragment.setParameters(
118-
getValueFromText(accelerometerConfigurations.getString(AccelerometerSettingsFragment.KEY_HIGH_LIMIT, "2000"),
119-
10, 10000),
120-
getValueFromText(accelerometerConfigurations.getString(AccelerometerSettingsFragment.KEY_UPDATE_PERIOD, "1000"),
121-
100, 1000),
122-
accelerometerConfigurations.getString(AccelerometerSettingsFragment.KEY_ACCELEROMETER_SENSOR_TYPE, "0"),
118+
Float.valueOf(accelerometerConfigurations.getString(AccelerometerSettingsFragment.KEY_HIGH_LIMIT, "20")),
119+
Integer.valueOf(accelerometerConfigurations.getString(AccelerometerSettingsFragment.KEY_UPDATE_PERIOD, "1000")),
123120
accelerometerConfigurations.getString(AccelerometerSettingsFragment.KEY_ACCELEROMETER_SENSOR_GAIN, "1"));
124121
}
125-
126-
private int getValueFromText(String strValue, int lowerBound, int upperBound) {
127-
if (strValue.isEmpty()) return lowerBound;
128-
int value = Integer.parseInt(strValue);
129-
if (value > upperBound) return upperBound;
130-
else if (value < lowerBound) return lowerBound;
131-
else return value;
132-
}
133122
}

app/src/main/java/io/pslab/activity/GyroscopeActivity.java

+6-6
Original file line numberDiff line numberDiff line change
@@ -107,12 +107,12 @@ protected void onResume() {
107107
}
108108

109109
private void reinstateConfigurations() {
110-
SharedPreferences accelerometerConfigurations;
111-
accelerometerConfigurations = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
112-
locationEnabled = accelerometerConfigurations.getBoolean(GyroscopeSettingsFragment.KEY_INCLUDE_LOCATION, true);
110+
SharedPreferences gyroscopeConfigurations;
111+
gyroscopeConfigurations = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
112+
locationEnabled = gyroscopeConfigurations.getBoolean(GyroscopeSettingsFragment.KEY_INCLUDE_LOCATION, true);
113113
GyroscopeDataFragment.setParameters(
114-
Float.valueOf(accelerometerConfigurations.getString(GyroscopeSettingsFragment.KEY_HIGH_LIMIT, "20")),
115-
Integer.valueOf(accelerometerConfigurations.getString(GyroscopeSettingsFragment.KEY_UPDATE_PERIOD, "1000")),
116-
accelerometerConfigurations.getString(GyroscopeSettingsFragment.KEY_GYROSCOPE_SENSOR_GAIN, "1"));
114+
Float.valueOf(gyroscopeConfigurations.getString(GyroscopeSettingsFragment.KEY_HIGH_LIMIT, "20")),
115+
Integer.valueOf(gyroscopeConfigurations.getString(GyroscopeSettingsFragment.KEY_UPDATE_PERIOD, "1000")),
116+
gyroscopeConfigurations.getString(GyroscopeSettingsFragment.KEY_GYROSCOPE_SENSOR_GAIN, "1"));
117117
}
118118
}

app/src/main/java/io/pslab/activity/OscilloscopeActivity.java

+275-778
Large diffs are not rendered by default.

app/src/main/java/io/pslab/activity/RoboticArmActivity.java

+107-1
Original file line numberDiff line numberDiff line change
@@ -2,24 +2,31 @@
22

33
import android.content.Context;
44
import android.content.Intent;
5+
import android.content.SharedPreferences;
56
import android.graphics.Point;
67
import android.location.Location;
78
import android.location.LocationManager;
89
import android.os.Build;
910
import android.os.CountDownTimer;
11+
import android.os.Handler;
12+
import android.support.annotation.NonNull;
13+
import android.support.design.widget.BottomSheetBehavior;
1014
import android.support.design.widget.Snackbar;
1115
import android.support.v7.app.AppCompatActivity;
1216
import android.os.Bundle;
1317
import android.view.Display;
1418
import android.view.DragEvent;
19+
import android.view.GestureDetector;
1520
import android.view.KeyEvent;
1621
import android.view.LayoutInflater;
22+
import android.view.MotionEvent;
1723
import android.view.View;
1824
import android.view.WindowManager;
1925
import android.view.inputmethod.EditorInfo;
2026
import android.widget.Button;
2127
import android.widget.EditText;
2228
import android.widget.HorizontalScrollView;
29+
import android.widget.ImageView;
2330
import android.widget.LinearLayout;
2431
import android.widget.RelativeLayout;
2532
import android.widget.TextView;
@@ -30,6 +37,8 @@
3037
import java.util.ArrayList;
3138
import java.util.Date;
3239

40+
import butterknife.BindView;
41+
import butterknife.ButterKnife;
3342
import io.pslab.R;
3443
import io.pslab.communication.ScienceLab;
3544
import io.pslab.models.SensorDataBlock;
@@ -38,13 +47,16 @@
3847
import io.pslab.others.CustomSnackBar;
3948
import io.pslab.others.GPSLogger;
4049
import io.pslab.others.LocalDataLog;
50+
import io.pslab.others.MathUtils;
4151
import io.pslab.others.ScienceLabCommon;
52+
import io.pslab.others.SwipeGestureDetector;
4253
import io.realm.Realm;
4354
import io.realm.RealmObject;
4455
import io.realm.RealmResults;
4556

4657
public class RoboticArmActivity extends AppCompatActivity {
4758

59+
private static final String PREF_NAME = "RoboticArmActivity";
4860
private EditText degreeText1, degreeText2, degreeText3, degreeText4;
4961
private SeekArc seekArc1, seekArc2, seekArc3, seekArc4;
5062
private LinearLayout servo1TimeLine, servo2TimeLine, servo3TimeLine, servo4TimeLine;
@@ -62,11 +74,32 @@ public class RoboticArmActivity extends AppCompatActivity {
6274
private final String DATA_BLOCK = "data_block";
6375
private int timelinePosition = 0;
6476
private ScienceLab scienceLab;
77+
private BottomSheetBehavior bottomSheetBehavior;
78+
private GestureDetector gestureDetector;
79+
@BindView(R.id.sheet_slide_text_robotic_arm)
80+
TextView bottomSheetSlideText;
81+
@BindView(R.id.parent_layout_robotic)
82+
View parentLayout;
83+
@BindView(R.id.bottom_sheet_robotic_arm)
84+
LinearLayout bottomSheet;
85+
@BindView(R.id.img_arrow_robotic_arm)
86+
ImageView arrowUpDown;
6587

6688
@Override
6789
protected void onCreate(Bundle savedInstanceState) {
6890
super.onCreate(savedInstanceState);
6991
setContentView(R.layout.activity_robotic_arm);
92+
ButterKnife.bind(this);
93+
94+
setUpBottomSheet();
95+
parentLayout.setOnClickListener(new View.OnClickListener() {
96+
@Override
97+
public void onClick(View v) {
98+
if (bottomSheetBehavior.getState() == BottomSheetBehavior.STATE_EXPANDED)
99+
bottomSheetBehavior.setState(BottomSheetBehavior.STATE_HIDDEN);
100+
parentLayout.setVisibility(View.GONE);
101+
}
102+
});
70103

71104
scienceLab = ScienceLabCommon.scienceLab;
72105
if (!scienceLab.isConnected()) {
@@ -484,6 +517,79 @@ public void onClick(View v) {
484517
.getBlockOfServoRecords(getIntent().getExtras().getLong(DATA_BLOCK));
485518
setReceivedData();
486519
}
520+
521+
Button guideButton = findViewById(R.id.timeline_guide_button);
522+
guideButton.setOnClickListener(new View.OnClickListener() {
523+
@Override
524+
public void onClick(View v) {
525+
bottomSheetBehavior.setState(bottomSheetBehavior.getState() == BottomSheetBehavior.STATE_HIDDEN ?
526+
BottomSheetBehavior.STATE_EXPANDED : BottomSheetBehavior.STATE_HIDDEN);
527+
}
528+
});
529+
}
530+
531+
private void setUpBottomSheet() {
532+
bottomSheetBehavior = BottomSheetBehavior.from(bottomSheet);
533+
534+
final SharedPreferences settings = this.getSharedPreferences(PREF_NAME, MODE_PRIVATE);
535+
Boolean isFirstTime = settings.getBoolean("RoboticArmFirstTime", true);
536+
537+
if (isFirstTime) {
538+
bottomSheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED);
539+
parentLayout.setVisibility(View.VISIBLE);
540+
parentLayout.setAlpha(0.8f);
541+
arrowUpDown.setRotation(180);
542+
bottomSheetSlideText.setText(R.string.hide_guide_text);
543+
SharedPreferences.Editor editor = settings.edit();
544+
editor.putBoolean("RoboticArmFirstTime", false);
545+
editor.apply();
546+
} else {
547+
bottomSheetBehavior.setState(BottomSheetBehavior.STATE_HIDDEN);
548+
}
549+
550+
bottomSheetBehavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
551+
private Handler handler = new Handler();
552+
private Runnable runnable = new Runnable() {
553+
@Override
554+
public void run() {
555+
bottomSheetBehavior.setState(BottomSheetBehavior.STATE_HIDDEN);
556+
}
557+
};
558+
559+
@Override
560+
public void onStateChanged(@NonNull final View bottomSheet, int newState) {
561+
switch (newState) {
562+
case BottomSheetBehavior.STATE_EXPANDED:
563+
handler.removeCallbacks(runnable);
564+
bottomSheetSlideText.setText(R.string.hide_guide_text);
565+
break;
566+
567+
case BottomSheetBehavior.STATE_COLLAPSED:
568+
handler.postDelayed(runnable, 2000);
569+
break;
570+
571+
default:
572+
handler.removeCallbacks(runnable);
573+
bottomSheetSlideText.setText(R.string.show_guide_text);
574+
break;
575+
}
576+
}
577+
578+
@Override
579+
public void onSlide(@NonNull View bottomSheet, float slideOffset) {
580+
Float value = (float) MathUtils.map((double) slideOffset, 0.0, 1.0, 0.0, 0.8);
581+
parentLayout.setVisibility(View.VISIBLE);
582+
parentLayout.setAlpha(value);
583+
arrowUpDown.setRotation(slideOffset * 180);
584+
}
585+
});
586+
gestureDetector = new GestureDetector(this, new SwipeGestureDetector(bottomSheetBehavior));
587+
}
588+
589+
@Override
590+
public boolean onTouchEvent(MotionEvent event) {
591+
gestureDetector.onTouchEvent(event); //Gesture detector need this to transfer touch event to the gesture detector.
592+
return super.onTouchEvent(event);
487593
}
488594

489595
private void toastInvalidValueMessage() {
@@ -545,7 +651,7 @@ private void saveTimeline() {
545651
}
546652
}
547653
servoCSVLogger.writeCSVFile(data);
548-
CustomSnackBar.showSnackBar(findViewById(R.id.robotic_arm_relative_view),
654+
CustomSnackBar.showSnackBar(findViewById(R.id.robotic_arm_coordinator),
549655
getString(R.string.csv_store_text) + " " + servoCSVLogger.getCurrentFilePath()
550656
, getString(R.string.open), new View.OnClickListener() {
551657
@Override

app/src/main/java/io/pslab/activity/WaveGeneratorActivity.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -456,8 +456,7 @@ public void onClick(View view) {
456456
double dutySqr4 = ((double) WaveGeneratorCommon.wave.get(WaveConst.SQR4).get(WaveConst.DUTY)) / 100;
457457
double phaseSqr4 = (double) WaveGeneratorCommon.wave.get(WaveConst.SQR4).get(WaveConst.PHASE) / 360;
458458

459-
scienceLab.sqrPWM(freqSqr1, dutySqr1, phaseSqr2, dutySqr2, phaseSqr3, dutySqr3, phaseSqr4, dutySqr4, true);
460-
scienceLab.setState(WaveGeneratorCommon.state);
459+
scienceLab.sqrPWM(freqSqr1, dutySqr1, phaseSqr2, dutySqr2, phaseSqr3, dutySqr3, phaseSqr4, dutySqr4, false);
461460
}
462461

463462
waveDialog.show();

0 commit comments

Comments
 (0)