Showing
3 changed files
with
150 additions
and
59 deletions
... | @@ -65,10 +65,11 @@ | ... | @@ -65,10 +65,11 @@ |
65 | android:screenOrientation="portrait" | 65 | android:screenOrientation="portrait" |
66 | android:theme="@style/SDKAppTheme" /> | 66 | android:theme="@style/SDKAppTheme" /> |
67 | 67 | ||
68 | +<!-- android:screenOrientation="portrait"--> | ||
68 | <activity | 69 | <activity |
69 | android:name="ly.warp.sdk.activities.TelematicsActivity" | 70 | android:name="ly.warp.sdk.activities.TelematicsActivity" |
70 | android:exported="false" | 71 | android:exported="false" |
71 | - android:screenOrientation="portrait" | 72 | + android:configChanges="orientation|screenSize" |
72 | android:theme="@style/SDKAppTheme" /> | 73 | android:theme="@style/SDKAppTheme" /> |
73 | 74 | ||
74 | <activity | 75 | <activity | ... | ... |
... | @@ -4,6 +4,7 @@ import android.Manifest; | ... | @@ -4,6 +4,7 @@ import android.Manifest; |
4 | import android.app.Activity; | 4 | import android.app.Activity; |
5 | import android.content.Context; | 5 | import android.content.Context; |
6 | import android.content.pm.PackageManager; | 6 | import android.content.pm.PackageManager; |
7 | +import android.content.res.Configuration; | ||
7 | import android.hardware.Sensor; | 8 | import android.hardware.Sensor; |
8 | import android.hardware.SensorEvent; | 9 | import android.hardware.SensorEvent; |
9 | import android.hardware.SensorEventListener; | 10 | import android.hardware.SensorEventListener; |
... | @@ -14,7 +15,7 @@ import android.location.LocationManager; | ... | @@ -14,7 +15,7 @@ import android.location.LocationManager; |
14 | import android.os.Bundle; | 15 | import android.os.Bundle; |
15 | import android.os.Environment; | 16 | import android.os.Environment; |
16 | import android.os.Handler; | 17 | import android.os.Handler; |
17 | -import android.util.Log; | 18 | +import android.view.MotionEvent; |
18 | import android.view.View; | 19 | import android.view.View; |
19 | import android.view.WindowManager; | 20 | import android.view.WindowManager; |
20 | import android.widget.ImageView; | 21 | import android.widget.ImageView; |
... | @@ -27,6 +28,7 @@ import androidx.core.content.ContextCompat; | ... | @@ -27,6 +28,7 @@ import androidx.core.content.ContextCompat; |
27 | 28 | ||
28 | import com.google.android.material.snackbar.Snackbar; | 29 | import com.google.android.material.snackbar.Snackbar; |
29 | 30 | ||
31 | +import org.jetbrains.annotations.NotNull; | ||
30 | import org.json.JSONArray; | 32 | import org.json.JSONArray; |
31 | import org.json.JSONException; | 33 | import org.json.JSONException; |
32 | import org.json.JSONObject; | 34 | import org.json.JSONObject; |
... | @@ -39,7 +41,6 @@ import java.util.Arrays; | ... | @@ -39,7 +41,6 @@ import java.util.Arrays; |
39 | 41 | ||
40 | import io.github.inflationx.viewpump.ViewPumpContextWrapper; | 42 | import io.github.inflationx.viewpump.ViewPumpContextWrapper; |
41 | import ly.warp.sdk.R; | 43 | import ly.warp.sdk.R; |
42 | -import ly.warp.sdk.db.WarplyDBHelper; | ||
43 | 44 | ||
44 | /** | 45 | /** |
45 | * Created by Panagiotis Triantafyllou on 26/June/2023. | 46 | * Created by Panagiotis Triantafyllou on 26/June/2023. |
... | @@ -58,30 +59,33 @@ public class TelematicsActivity extends Activity implements View.OnClickListener | ... | @@ -58,30 +59,33 @@ public class TelematicsActivity extends Activity implements View.OnClickListener |
58 | private ImageView mIvBack; | 59 | private ImageView mIvBack; |
59 | private boolean mIsTripStarted = false; | 60 | private boolean mIsTripStarted = false; |
60 | private LinearLayout mLlTripButton, mLlTelematicsMain; | 61 | private LinearLayout mLlTripButton, mLlTelematicsMain; |
61 | - private TextView mTvTripButton, mTvSensorData, mTvVelocity, mTvAvgVelocity, mTvRecordsSaved; | 62 | + private TextView mTvTripButton, mTvSensorData, mTvVelocity, mTvAvgVelocity, mTvRecordsSaved, |
63 | + mTvOrientationCount, mTvTouchCount; | ||
62 | private SensorManager mSensorManager; | 64 | private SensorManager mSensorManager; |
63 | private Sensor mSensor; | 65 | private Sensor mSensor; |
64 | - private Handler mHandler, mLoctionHandler; | 66 | + private Handler mHandler, mLocationHandler, mTouchHandler; |
65 | - private Runnable mRunnable, mLocationRunnable; | 67 | + private Runnable mRunnable, mLocationRunnable, mTouchRunnable; |
66 | private long lastUpdate = 0; | 68 | private long lastUpdate = 0; |
67 | private float lastX, lastY, lastZ; | 69 | private float lastX, lastY, lastZ; |
68 | private float velocity = 0; | 70 | private float velocity = 0; |
69 | private ArrayList<JSONObject> mAccelerationTimestamps = new ArrayList<>(); | 71 | private ArrayList<JSONObject> mAccelerationTimestamps = new ArrayList<>(); |
70 | - float mAcceleration = 0; | 72 | + private float mAcceleration = 0; |
71 | - | ||
72 | private static final float ALPHA = 0.8f; // Filter factor | 73 | private static final float ALPHA = 0.8f; // Filter factor |
73 | private static final float STOP_THRESHOLD = 8.0f; // Stop threshold in m/s² | 74 | private static final float STOP_THRESHOLD = 8.0f; // Stop threshold in m/s² |
74 | private static final int PERMISSION_REQUEST_WRITE_EXTERNAL_STORAGE = 4000; | 75 | private static final int PERMISSION_REQUEST_WRITE_EXTERNAL_STORAGE = 4000; |
75 | private static final int PERMISSION_REQUEST_ACCESS_FINE_LOCATION = 4001; | 76 | private static final int PERMISSION_REQUEST_ACCESS_FINE_LOCATION = 4001; |
76 | - JSONArray jsonArray = new JSONArray(); | 77 | + private JSONArray jsonArray = new JSONArray(); |
77 | private LocationManager locationManager; | 78 | private LocationManager locationManager; |
78 | private static final int LOCATION_UPDATE_INTERVAL = 1000; | 79 | private static final int LOCATION_UPDATE_INTERVAL = 1000; |
79 | - double mLatitude = 0; | 80 | + private double mLatitude = 0; |
80 | - double mLongitude = 0; | 81 | + private double mLongitude = 0; |
81 | // Radius of the Earth in meters | 82 | // Radius of the Earth in meters |
82 | - private static final double EARTH_RADIUS = 6371000.0; | 83 | + private final double EARTH_RADIUS = 6371000.0; |
83 | private Location previousLocation; | 84 | private Location previousLocation; |
84 | - double mSpeed = 0; | 85 | + private double mSpeed = 0; |
86 | + private int orientationCount = 0, touchCount = 0; | ||
87 | + final long REFRESH_TIME = 100; // miliseconds | ||
88 | + | ||
85 | 89 | ||
86 | // =========================================================== | 90 | // =========================================================== |
87 | // Methods for/from SuperClass/Interfaces | 91 | // Methods for/from SuperClass/Interfaces |
... | @@ -103,6 +107,8 @@ public class TelematicsActivity extends Activity implements View.OnClickListener | ... | @@ -103,6 +107,8 @@ public class TelematicsActivity extends Activity implements View.OnClickListener |
103 | mTvAvgVelocity = findViewById(R.id.tv_avg); | 107 | mTvAvgVelocity = findViewById(R.id.tv_avg); |
104 | mTvRecordsSaved = findViewById(R.id.tv_records); | 108 | mTvRecordsSaved = findViewById(R.id.tv_records); |
105 | mIvBack.setOnClickListener(this); | 109 | mIvBack.setOnClickListener(this); |
110 | + mTvOrientationCount = findViewById(R.id.tv_orientation); | ||
111 | + mTvTouchCount = findViewById(R.id.tv_touch); | ||
106 | 112 | ||
107 | locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); | 113 | locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); |
108 | previousLocation = null; | 114 | previousLocation = null; |
... | @@ -192,6 +198,13 @@ public class TelematicsActivity extends Activity implements View.OnClickListener | ... | @@ -192,6 +198,13 @@ public class TelematicsActivity extends Activity implements View.OnClickListener |
192 | mIsTripStarted = false; | 198 | mIsTripStarted = false; |
193 | mTvTripButton.setText(R.string.cos_dlg_start_trip); | 199 | mTvTripButton.setText(R.string.cos_dlg_start_trip); |
194 | } else { | 200 | } else { |
201 | + mTouchHandler = new Handler(); | ||
202 | + mTouchRunnable = new Runnable() { | ||
203 | + @Override | ||
204 | + public void run() { | ||
205 | + mTouchHandler.postDelayed(this, REFRESH_TIME); | ||
206 | + } | ||
207 | + }; | ||
195 | requestLocationUpdates(); | 208 | requestLocationUpdates(); |
196 | registerSensor(); | 209 | registerSensor(); |
197 | mIsTripStarted = true; | 210 | mIsTripStarted = true; |
... | @@ -239,22 +252,6 @@ public class TelematicsActivity extends Activity implements View.OnClickListener | ... | @@ -239,22 +252,6 @@ public class TelematicsActivity extends Activity implements View.OnClickListener |
239 | // requestLocationUpdatePeriodically(location); | 252 | // requestLocationUpdatePeriodically(location); |
240 | mLatitude = location.getLatitude(); | 253 | mLatitude = location.getLatitude(); |
241 | mLongitude = location.getLongitude(); | 254 | mLongitude = location.getLongitude(); |
242 | - | ||
243 | - //TODO: similar implementation, comment all of the above blocks | ||
244 | -// if (previousLocation != null) { | ||
245 | -// // Calculate the distance traveled between the previous and current location | ||
246 | -// float distance = previousLocation.distanceTo(location); // Distance in meters | ||
247 | -// | ||
248 | -// // Calculate the speed based on the distance traveled over a timeframe of x seconds | ||
249 | -// float speed = distance / (LOCATION_UPDATE_INTERVAL / 1000); // Speed in meters/second | ||
250 | -// | ||
251 | -// // Convert speed to km/h | ||
252 | -// float speedKmH = speed * 3.6f; | ||
253 | -// | ||
254 | -// mTvAvgVelocity.setText(String.format("%.1f", Math.floor(speedKmH)) + " km/h"); | ||
255 | -// } | ||
256 | -// | ||
257 | -// previousLocation = location; | ||
258 | } | 255 | } |
259 | 256 | ||
260 | @Override | 257 | @Override |
... | @@ -272,6 +269,40 @@ public class TelematicsActivity extends Activity implements View.OnClickListener | ... | @@ -272,6 +269,40 @@ public class TelematicsActivity extends Activity implements View.OnClickListener |
272 | // Handle provider disabled if needed | 269 | // Handle provider disabled if needed |
273 | } | 270 | } |
274 | 271 | ||
272 | + @Override | ||
273 | + public void onConfigurationChanged(@NotNull Configuration newConfig) { | ||
274 | + super.onConfigurationChanged(newConfig); | ||
275 | + if (mIsTripStarted) { | ||
276 | + if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE || newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) { | ||
277 | + orientationCount++; | ||
278 | + mTvOrientationCount.setText(String.valueOf(orientationCount)); | ||
279 | + } | ||
280 | + } | ||
281 | + } | ||
282 | + | ||
283 | + @Override | ||
284 | + public boolean onTouchEvent(MotionEvent event) { | ||
285 | +// return super.onTouchEvent(event); | ||
286 | + if (mIsTripStarted) { | ||
287 | +// touchCount++; | ||
288 | +// mTvTouchCount.setText(String.valueOf(touchCount)); | ||
289 | +// return true; | ||
290 | + | ||
291 | + switch (event.getAction()) { | ||
292 | + case MotionEvent.ACTION_DOWN: | ||
293 | + touchCount++; | ||
294 | + mTvTouchCount.setText(String.valueOf(touchCount)); | ||
295 | + mTouchHandler.post(mTouchRunnable); | ||
296 | + return true; | ||
297 | + case MotionEvent.ACTION_UP: | ||
298 | + mTouchHandler.removeCallbacks(mTouchRunnable); | ||
299 | + return true; | ||
300 | + } | ||
301 | + return false; | ||
302 | + } | ||
303 | + return false; | ||
304 | + } | ||
305 | + | ||
275 | // =========================================================== | 306 | // =========================================================== |
276 | // Methods | 307 | // Methods |
277 | // =========================================================== | 308 | // =========================================================== |
... | @@ -304,16 +335,16 @@ public class TelematicsActivity extends Activity implements View.OnClickListener | ... | @@ -304,16 +335,16 @@ public class TelematicsActivity extends Activity implements View.OnClickListener |
304 | } | 335 | } |
305 | 336 | ||
306 | private void requestLocationUpdatePeriodically(Location location) { | 337 | private void requestLocationUpdatePeriodically(Location location) { |
307 | - mLoctionHandler = new Handler(); | 338 | + mLocationHandler = new Handler(); |
308 | mLocationRunnable = new Runnable() { | 339 | mLocationRunnable = new Runnable() { |
309 | @Override | 340 | @Override |
310 | public void run() { | 341 | public void run() { |
311 | double speed = calculateSpeed(mLatitude, mLongitude, location.getLatitude(), location.getLongitude(), (LOCATION_UPDATE_INTERVAL / 1000)); | 342 | double speed = calculateSpeed(mLatitude, mLongitude, location.getLatitude(), location.getLongitude(), (LOCATION_UPDATE_INTERVAL / 1000)); |
312 | mTvAvgVelocity.setText(String.format("%.1f", Math.floor(speed)) + " km/h"); | 343 | mTvAvgVelocity.setText(String.format("%.1f", Math.floor(speed)) + " km/h"); |
313 | - mLoctionHandler.postDelayed(this, LOCATION_UPDATE_INTERVAL); | 344 | + mLocationHandler.postDelayed(this, LOCATION_UPDATE_INTERVAL); |
314 | } | 345 | } |
315 | }; | 346 | }; |
316 | - mLoctionHandler.postDelayed(mLocationRunnable, LOCATION_UPDATE_INTERVAL); | 347 | + mLocationHandler.postDelayed(mLocationRunnable, LOCATION_UPDATE_INTERVAL); |
317 | } | 348 | } |
318 | 349 | ||
319 | private double calculateDistance(double lat1, double lon1, double lat2, double lon2) { | 350 | private double calculateDistance(double lat1, double lon1, double lat2, double lon2) { |
... | @@ -339,8 +370,8 @@ public class TelematicsActivity extends Activity implements View.OnClickListener | ... | @@ -339,8 +370,8 @@ public class TelematicsActivity extends Activity implements View.OnClickListener |
339 | 370 | ||
340 | private void stopLocationUpdates() { | 371 | private void stopLocationUpdates() { |
341 | locationManager.removeUpdates(this); | 372 | locationManager.removeUpdates(this); |
342 | - if (mLoctionHandler != null) | 373 | + if (mLocationHandler != null) |
343 | - mLoctionHandler.removeCallbacks(mLocationRunnable); | 374 | + mLocationHandler.removeCallbacks(mLocationRunnable); |
344 | } | 375 | } |
345 | 376 | ||
346 | private void registerSensor() { | 377 | private void registerSensor() { |
... | @@ -361,6 +392,8 @@ public class TelematicsActivity extends Activity implements View.OnClickListener | ... | @@ -361,6 +392,8 @@ public class TelematicsActivity extends Activity implements View.OnClickListener |
361 | JSONObject jobjData = new JSONObject(); | 392 | JSONObject jobjData = new JSONObject(); |
362 | jobjData.putOpt("acceleration", mAcceleration); | 393 | jobjData.putOpt("acceleration", mAcceleration); |
363 | jobjData.putOpt("speed", mSpeed); | 394 | jobjData.putOpt("speed", mSpeed); |
395 | + jobjData.putOpt("orientation_count", orientationCount); | ||
396 | + jobjData.putOpt("touch_count", touchCount); | ||
364 | jobj.putOpt(String.valueOf(System.currentTimeMillis()), jobjData); | 397 | jobj.putOpt(String.valueOf(System.currentTimeMillis()), jobjData); |
365 | mAccelerationTimestamps.add(jobj); | 398 | mAccelerationTimestamps.add(jobj); |
366 | recordsCount[0]++; | 399 | recordsCount[0]++; |
... | @@ -376,12 +409,16 @@ public class TelematicsActivity extends Activity implements View.OnClickListener | ... | @@ -376,12 +409,16 @@ public class TelematicsActivity extends Activity implements View.OnClickListener |
376 | } | 409 | } |
377 | 410 | ||
378 | private void unregisterSensor() { | 411 | private void unregisterSensor() { |
412 | + orientationCount = 0; | ||
413 | + touchCount = 0; | ||
379 | mSensorManager.unregisterListener(this); | 414 | mSensorManager.unregisterListener(this); |
380 | mTvVelocity.setText("0.0 km/h"); | 415 | mTvVelocity.setText("0.0 km/h"); |
381 | mTvAvgVelocity.setText("0.0 km/h"); | 416 | mTvAvgVelocity.setText("0.0 km/h"); |
382 | Snackbar.make(mLlTelematicsMain, "Sensor Unregistered", Snackbar.LENGTH_SHORT).show(); | 417 | Snackbar.make(mLlTelematicsMain, "Sensor Unregistered", Snackbar.LENGTH_SHORT).show(); |
383 | if (mHandler != null) | 418 | if (mHandler != null) |
384 | mHandler.removeCallbacks(mRunnable); | 419 | mHandler.removeCallbacks(mRunnable); |
420 | + if (mTouchHandler != null) | ||
421 | + mTouchHandler.removeCallbacks(mTouchRunnable); | ||
385 | saveAccelerationDataToFile(); | 422 | saveAccelerationDataToFile(); |
386 | } | 423 | } |
387 | 424 | ||
... | @@ -393,37 +430,37 @@ public class TelematicsActivity extends Activity implements View.OnClickListener | ... | @@ -393,37 +430,37 @@ public class TelematicsActivity extends Activity implements View.OnClickListener |
393 | } | 430 | } |
394 | 431 | ||
395 | //TODO: uncomment if needed to write to file | 432 | //TODO: uncomment if needed to write to file |
396 | -// if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) | 433 | + if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) |
397 | -// != PackageManager.PERMISSION_GRANTED) { | 434 | + != PackageManager.PERMISSION_GRANTED) { |
398 | -// ActivityCompat.requestPermissions(this, | 435 | + ActivityCompat.requestPermissions(this, |
399 | -// new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, | 436 | + new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, |
400 | -// PERMISSION_REQUEST_WRITE_EXTERNAL_STORAGE); | 437 | + PERMISSION_REQUEST_WRITE_EXTERNAL_STORAGE); |
401 | -// } else { | 438 | + } else { |
402 | saveAccelerationDataToExternalStorage(jsonArray); | 439 | saveAccelerationDataToExternalStorage(jsonArray); |
403 | -// } | 440 | + } |
404 | } | 441 | } |
405 | 442 | ||
406 | private void saveAccelerationDataToExternalStorage(JSONArray jsonArray) { | 443 | private void saveAccelerationDataToExternalStorage(JSONArray jsonArray) { |
407 | //TODO: comment if needed to write to file | 444 | //TODO: comment if needed to write to file |
408 | - WarplyDBHelper.getInstance(this).saveTelematics(jsonArray); | 445 | +// WarplyDBHelper.getInstance(this).saveTelematics(jsonArray); |
409 | 446 | ||
410 | //TODO: uncomment if needed to write to file | 447 | //TODO: uncomment if needed to write to file |
411 | -// String state = Environment.getExternalStorageState(); | 448 | + String state = Environment.getExternalStorageState(); |
412 | -// if (Environment.MEDIA_MOUNTED.equals(state)) { | 449 | + if (Environment.MEDIA_MOUNTED.equals(state)) { |
413 | -// File documentsDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS); | 450 | + File documentsDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS); |
414 | -// File file = new File(documentsDir, "telematics_data.json"); | 451 | + File file = new File(documentsDir, "telematics_data" + String.valueOf(System.currentTimeMillis()) + ".json"); |
415 | -// try { | 452 | + try { |
416 | -// FileOutputStream fileOutputStream = new FileOutputStream(file); | 453 | + FileOutputStream fileOutputStream = new FileOutputStream(file); |
417 | -// fileOutputStream.write(jsonArray.toString().getBytes()); | 454 | + fileOutputStream.write(jsonArray.toString().getBytes()); |
418 | -// fileOutputStream.close(); | 455 | + fileOutputStream.close(); |
419 | -// Snackbar.make(mLlTelematicsMain, "Success saving data to file", Snackbar.LENGTH_SHORT).show(); | 456 | + Snackbar.make(mLlTelematicsMain, "Success saving data to file", Snackbar.LENGTH_SHORT).show(); |
420 | -// } catch (IOException e) { | 457 | + } catch (IOException e) { |
421 | -// e.printStackTrace(); | 458 | + e.printStackTrace(); |
422 | -// Snackbar.make(mLlTelematicsMain, "Error saving acceleration data to file", Snackbar.LENGTH_SHORT).show(); | 459 | + Snackbar.make(mLlTelematicsMain, "Error saving acceleration data to file", Snackbar.LENGTH_SHORT).show(); |
423 | -// } | 460 | + } |
424 | -// } else { | 461 | + } else { |
425 | -// Snackbar.make(mLlTelematicsMain, "External storage is not accessible", Snackbar.LENGTH_SHORT).show(); | 462 | + Snackbar.make(mLlTelematicsMain, "External storage is not accessible", Snackbar.LENGTH_SHORT).show(); |
426 | -// } | 463 | + } |
427 | } | 464 | } |
428 | 465 | ||
429 | // // Low-pass filter function using Exponential Moving Average (EMA) | 466 | // // Low-pass filter function using Exponential Moving Average (EMA) | ... | ... |
... | @@ -114,6 +114,59 @@ | ... | @@ -114,6 +114,59 @@ |
114 | android:textSize="16sp" /> | 114 | android:textSize="16sp" /> |
115 | 115 | ||
116 | <TextView | 116 | <TextView |
117 | + android:id="@+id/tv_orientation_label" | ||
118 | + fontPath="fonts/PeridotPE-Regular.ttf" | ||
119 | + android:layout_width="wrap_content" | ||
120 | + android:layout_height="wrap_content" | ||
121 | + android:layout_alignParentStart="true" | ||
122 | + android:layout_marginTop="24dp" | ||
123 | + android:layout_marginStart="24dp" | ||
124 | + android:text="Orientation Count" | ||
125 | + android:layout_below="@+id/tv_avg" | ||
126 | + android:textColor="@color/blue_dark" | ||
127 | + android:textSize="16sp" /> | ||
128 | + | ||
129 | + <TextView | ||
130 | + android:id="@+id/tv_orientation" | ||
131 | + fontPath="fonts/PeridotPE-Bold.ttf" | ||
132 | + android:layout_width="wrap_content" | ||
133 | + android:layout_height="wrap_content" | ||
134 | + android:layout_below="@+id/tv_orientation_label" | ||
135 | + android:layout_alignStart="@+id/tv_orientation_label" | ||
136 | + android:layout_alignEnd="@+id/tv_orientation_label" | ||
137 | + android:layout_marginTop="24dp" | ||
138 | + android:gravity="center" | ||
139 | + android:textColor="@color/blue_dark" | ||
140 | + android:textSize="16sp" /> | ||
141 | + | ||
142 | + <TextView | ||
143 | + android:id="@+id/tv_touch_label" | ||
144 | + fontPath="fonts/PeridotPE-Regular.ttf" | ||
145 | + android:layout_width="wrap_content" | ||
146 | + android:layout_height="wrap_content" | ||
147 | + android:layout_marginTop="24dp" | ||
148 | + android:layout_marginEnd="24dp" | ||
149 | + android:layout_alignParentEnd="true" | ||
150 | + android:text="Touch Count" | ||
151 | + android:layout_below="@+id/tv_avg" | ||
152 | + android:layout_alignEnd="@+id/tv_orientation_label" | ||
153 | + android:textColor="@color/blue_dark" | ||
154 | + android:textSize="16sp" /> | ||
155 | + | ||
156 | + <TextView | ||
157 | + android:id="@+id/tv_touch" | ||
158 | + fontPath="fonts/PeridotPE-Bold.ttf" | ||
159 | + android:layout_width="wrap_content" | ||
160 | + android:layout_height="wrap_content" | ||
161 | + android:layout_below="@+id/tv_touch_label" | ||
162 | + android:layout_alignStart="@+id/tv_touch_label" | ||
163 | + android:layout_alignEnd="@+id/tv_touch_label" | ||
164 | + android:layout_marginTop="24dp" | ||
165 | + android:gravity="center" | ||
166 | + android:textColor="@color/blue_dark" | ||
167 | + android:textSize="16sp" /> | ||
168 | + | ||
169 | + <TextView | ||
117 | android:id="@+id/tv_records_label" | 170 | android:id="@+id/tv_records_label" |
118 | fontPath="fonts/PeridotPE-Regular.ttf" | 171 | fontPath="fonts/PeridotPE-Regular.ttf" |
119 | android:layout_width="wrap_content" | 172 | android:layout_width="wrap_content" |
... | @@ -121,7 +174,7 @@ | ... | @@ -121,7 +174,7 @@ |
121 | android:layout_centerHorizontal="true" | 174 | android:layout_centerHorizontal="true" |
122 | android:layout_marginTop="24dp" | 175 | android:layout_marginTop="24dp" |
123 | android:text="Records Saved" | 176 | android:text="Records Saved" |
124 | - android:layout_below="@+id/tv_avg" | 177 | + android:layout_below="@+id/tv_orientation" |
125 | android:textColor="@color/blue_dark" | 178 | android:textColor="@color/blue_dark" |
126 | android:textSize="16sp" /> | 179 | android:textSize="16sp" /> |
127 | 180 | ... | ... |
-
Please register or login to post a comment