Skip to content
Snippets Groups Projects
Commit c10fe120 authored by vtnguyen's avatar vtnguyen
Browse files

Read sensor and create database

parent bcf8ac56
Branches main
No related tags found
No related merge requests found
Showing
with 196 additions and 48 deletions
......@@ -4,12 +4,12 @@ plugins {
android {
namespace 'fr.laas.tiennv.ibids'
compileSdk 33
compileSdk 34
defaultConfig {
applicationId "fr.laas.tiennv.ibids"
minSdk 24
targetSdk 33
targetSdk 34
versionCode 1
versionName "1.0"
......@@ -36,6 +36,9 @@ android {
}
dependencies {
def room_version = "2.6.1"
implementation "androidx.room:room-runtime:$room_version"
annotationProcessor "androidx.room:room-compiler:$room_version"
implementation 'androidx.appcompat:appcompat:1.4.1'
implementation 'com.google.android.material:material:1.5.0'
......
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<uses-permission android:name="android.permission.HIGH_SAMPLING_RATE_SENSORS"/>
<application
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
......@@ -24,10 +24,7 @@
</activity>
<activity
android:name=".ui.features.FeatureListActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.FEATURE_LIST_IBIDS" />
</intent-filter>
android:exported="false">
</activity>
</application>
......
package fr.laas.tiennv.ibids.model;
import androidx.room.Database;
import androidx.room.RoomDatabase;
import fr.laas.tiennv.ibids.model.accephone.AccelerometerPhone;
import fr.laas.tiennv.ibids.model.accephone.AccelerometerPhoneDao;
@Database(entities = {AccelerometerPhone.class}, version = 1)
public abstract class AppDatabase extends RoomDatabase {
public abstract AccelerometerPhoneDao accelerometerPhoneDao();
}
package fr.laas.tiennv.ibids.model.accephone;
import androidx.room.ColumnInfo;
import androidx.room.Entity;
import androidx.room.PrimaryKey;
@Entity(tableName = "accelerometerphone")
public class AccelerometerPhone {
@PrimaryKey
public int rId;
@ColumnInfo(name = "timestamp")
public int timeStamp;
@ColumnInfo(name = "acce_x")
public float acceX;
@ColumnInfo(name = "acce_y")
public float acceY;
@ColumnInfo(name = "acce_z")
public float acceZ;
}
package fr.laas.tiennv.ibids.model.accephone;
import androidx.room.Dao;
import androidx.room.Insert;
import androidx.room.Query;
import java.util.List;
@Dao
public interface AccelerometerPhoneDao {
@Query("SELECT * FROM accelerometerphone")
List<AccelerometerPhone> getAll();
@Insert
void insertAll(AccelerometerPhone... records);
}
package fr.laas.tiennv.ibids.ui.features;
import android.content.Context;
import android.os.Bundle;
import android.os.PersistableBundle;
import android.util.AttributeSet;
import android.view.View;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProvider;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.room.Room;
import java.util.ArrayList;
import fr.laas.tiennv.ibids.R;
import fr.laas.tiennv.ibids.databinding.ActivityFeatureListBinding;
import fr.laas.tiennv.ibids.model.AppDatabase;
import fr.laas.tiennv.ibids.model.Feature;
public class FeatureListActivity extends AppCompatActivity {
private ActivityFeatureListBinding binding;
private ArrayList<Feature> mFeatures;
private AppDatabase mAppDatabase;
@Override
public void onCreate(@Nullable Bundle savedInstanceState, @Nullable PersistableBundle persistentState) {
super.onCreate(savedInstanceState, persistentState);
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final FeatureListViewModel featureListViewModel = new ViewModelProvider(this).get(FeatureListViewModel.class);
binding = ActivityFeatureListBinding.inflate(getLayoutInflater());
fr.laas.tiennv.ibids.databinding.ActivityFeatureListBinding binding = ActivityFeatureListBinding.inflate(getLayoutInflater());
View view = binding.getRoot();
setContentView(view);
RecyclerView featureListView = binding.featureItemList;
......@@ -39,10 +39,24 @@ public class FeatureListActivity extends AppCompatActivity {
FeatureListAdapter adapter = new FeatureListAdapter(mFeatures);
featureListView.setAdapter(adapter);
featureListView.setLayoutManager(new LinearLayoutManager(this));
final TextView acceXTextView = binding.testAcceX;
final TextView acceYTextView = binding.testAcceY;
final TextView acceZTextView = binding.testAcceZ;
final Observer<Float> acceXObserver = aFloat -> acceXTextView.setText(aFloat.toString());
final Observer<Float> acceYObserver = aFloat -> acceYTextView.setText(aFloat.toString());
final Observer<Float> acceZObserver = aFloat -> acceZTextView.setText(aFloat.toString());
featureListViewModel.getDataAcceX().observe(this, acceXObserver);
featureListViewModel.getDataAcceY().observe(this, acceYObserver);
featureListViewModel.getDataAcceZ().observe(this, acceZObserver);
featureListViewModel.listenSensors(this);
mAppDatabase = Room.databaseBuilder(this, AppDatabase.class, "TEST_DATABASE").build();
}
private void createFeatureList() {
mFeatures = new ArrayList<Feature>();
mFeatures = new ArrayList<>();
mFeatures.add(new Feature("Acce", "0"));
mFeatures.add(new Feature("Gyro", "0"));
mFeatures.add(new Feature("Baro", "0"));
......
package fr.laas.tiennv.ibids.ui.features;
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;
......@@ -8,27 +14,68 @@ import java.util.ArrayList;
public class FeatureListViewModel extends ViewModel {
private final MutableLiveData<ArrayList<String>> featureList;
private final MutableLiveData<String> acceData;
private SensorManager mSensorManager;
private Sensor mSensorAcce;
private SensorEventListener mListenerAcce;
private final MutableLiveData<ArrayList<String>> mFeatureList;
private final MutableLiveData<Float> mDataAcceX;
private final MutableLiveData<Float> mDataAcceY;
private final MutableLiveData<Float> mDataAcceZ;
// private final MutableLiveData<Float> acceX;
// private final MutableLiveData<Float> acceX;
public FeatureListViewModel(){
featureList = new MutableLiveData<>();
acceData = new MutableLiveData<>();
mFeatureList = new MutableLiveData<>();
mDataAcceX = new MutableLiveData<>();
mDataAcceY = new MutableLiveData<>();
mDataAcceZ = new MutableLiveData<>();
ArrayList<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("C");
featureList.setValue(list);
mFeatureList.setValue(list);
}
public LiveData<ArrayList<String>> getFeatureList(){
return featureList;
return mFeatureList;
}
public LiveData<Float> getDataAcceX(){
return mDataAcceX;
}
public LiveData<Float> getDataAcceY(){
return mDataAcceY;
}
public LiveData<Float> getDataAcceZ(){
return mDataAcceZ;
}
public void listenSensors(Context context) {
mSensorManager = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE);
mSensorAcce = mSensorManager.getDefaultSensor(Sensor.TYPE_LINEAR_ACCELERATION);
mListenerAcce = new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent event) {
mDataAcceX.setValue(event.values[0]);
mDataAcceY.setValue(event.values[1]);
mDataAcceZ.setValue(event.values[2]);
}
public LiveData<String> getAcceData(){
return acceData;
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
};
mSensorManager.registerListener(mListenerAcce, mSensorAcce, SensorManager.SENSOR_DELAY_NORMAL);
}
public void stopListenSensor() {
mSensorManager.unregisterListener(mListenerAcce);
}
}
......@@ -2,12 +2,12 @@ package fr.laas.tiennv.ibids.ui.home;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
......@@ -30,30 +30,17 @@ public class HomeFragment extends Fragment {
View root = binding.getRoot();
final TextView textView = binding.textHome;
final Observer<String> homeTextObserver = new Observer<String>() {
@Override
public void onChanged(String s) {
textView.setText(s);
}
};
final Observer<String> homeTextObserver = textView::setText;
homeViewModel.getTextHome().observe(getViewLifecycleOwner(), homeTextObserver);
final Button collectButton = binding.homeCollectBttnId;
collectButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
homeViewModel.onClickCollect();
Intent featureIntent = new Intent(getContext(), FeatureListActivity.class);
startActivity(featureIntent);
}
collectButton.setOnClickListener(v -> {
homeViewModel.onClickCollect();
Intent featureIntent = new Intent(getContext(), FeatureListActivity.class);
startActivity(featureIntent);
});
binding.homeCancelBttnId.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
homeViewModel.onClickCancel();
}
});
binding.homeCancelBttnId.setOnClickListener(v -> homeViewModel.onClickCancel());
return root;
}
......
......@@ -13,10 +13,57 @@
android:layout_height="match_parent"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:layout_marginEnd="10dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:orientation="horizontal">
<TextView
android:id="@+id/test_acce_title"
android:text="Accelerometer"
android:textAlignment="viewStart"
android:gravity="center"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"/>
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:orientation="vertical"
android:layout_weight="1">
<TextView
android:id="@+id/test_acce_x"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"/>
<TextView
android:id="@+id/test_acce_y"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"/>
<TextView
android:id="@+id/test_acce_z"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"/>
</LinearLayout>
</LinearLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/feature_item_list"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginStart="10dp"
android:layout_marginEnd="10dp"
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
......
......@@ -7,11 +7,14 @@
android:id="@+id/feature_item_title"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"/>
android:layout_weight="1"
android:textColor="@color/laas_text"/>
<TextView
android:id="@+id/feature_item_value"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"/>
android:layout_weight="1"
android:textColor="@color/laas_text"
android:textAlignment="viewEnd"/>
</LinearLayout>
\ No newline at end of file
......@@ -18,5 +18,4 @@ android.useAndroidX=true
# Enables namespacing of each library's R class so that its R class includes only the
# resources declared in the library itself and none from the library's dependencies,
# thereby reducing the size of the R class for that library
android.nonTransitiveRClass=true
android.databinding.enableV2=true
\ No newline at end of file
android.nonTransitiveRClass=true
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment