renaming PersonalApp -> VehicleOwner (package personalapp -> vehown);

Subscribe DTCs
This commit is contained in:
tl 2021-05-25 15:13:43 +02:00
parent 63230ce3c8
commit a346f753d1
144 changed files with 807 additions and 705 deletions

View File

@ -10,7 +10,7 @@ android {
exclude 'META-INF/NOTICE.txt'
}
defaultConfig {
applicationId "eu.csc.personalapp"
applicationId "eu.csc.vehown"
minSdkVersion 26
targetSdkVersion 30
versionCode 1
@ -79,15 +79,15 @@ dependencies {
implementation 'com.google.android.material:material:1.3.0'
implementation 'androidx.annotation:annotation:1.2.0'
implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.2.0'
implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0'
implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.3.1'
implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1'
implementation 'androidx.navigation:navigation-fragment:2.3.5'
implementation 'androidx.navigation:navigation-ui:2.3.5'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'androidx.recyclerview:recyclerview:1.2.0'
testImplementation 'junit:junit:4.+'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.2'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
//Lombok
@ -95,7 +95,7 @@ dependencies {
annotationProcessor 'org.projectlombok:lombok:1.18.20'
androidTestImplementation 'org.projectlombok:lombok:1.18.20'
compileOnly 'com.google.android.wearable:wearable:2.6.0'
//compileOnly 'com.google.android.wearable:wearable:2.6.0'
testAnnotationProcessor 'org.projectlombok:lombok:1.18.20'
//room
@ -105,10 +105,10 @@ dependencies {
// compile fileTree(dir: 'libs', include: '*.jar')
//implementation project(":module:EventReportModule")
//Retrofit
implementation 'com.squareup.retrofit2:retrofit:2.4.0'
implementation 'com.squareup.retrofit2:converter-gson:2.4.0'
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.5.0'
implementation 'io.reactivex.rxjava2:rxandroid:2.0.2'
implementation 'io.reactivex.rxjava2:rxjava:2.1.13'
implementation 'io.reactivex.rxjava2:rxjava:2.2.9'
implementation 'com.squareup.retrofit2:adapter-rxjava2:2.4.0'
//MQTT
@ -123,3 +123,47 @@ dependencies {
implementation files('libs/log4j-1.2.17.jar')
}
task uploadPersonalConfigsBundle {
doLast {
println('uploadPersonalConfigBundle:')
def id = '12345679'
def personalization = 'none'
def customization = 'none'
def locales = 'en_GB,de_DE'
def device = 'R58MC0YPL0B' // Smartphone-PCTL
def andDest = '/sdcard/Android/data/eu.csc.vehown/files/1';
def adb = 'D:/Dev/Android/sdk/platform-tools/adb.exe'
def localMavenRepo = new File(System.getProperty('user.home'), '.m2/repository').absolutePath
//copy configuration files
def openxavaConfigDir = "D:/Dev/Tools/openxava/data/config/"
def dest = 'D:/Dev/project/VehicleOwner/app/config'
delete fileTree(dir: dest, include: '*')
println(' from ' + openxavaConfigDir)
println(' to ' + dest)
copy { from openxavaConfigDir into dest include 'obd-ii*.*gtdfsys' }
copy { from openxavaConfigDir into dest include 'itsstation*.*gtdfsys' }
//create configBundle file
dest = projectDir.getAbsolutePath() + '/config/configBundle'
def jarfile = localMavenRepo + '/eu/csc/core/coregtdm/1.0/coregtdm-1.0.jar'
println(' create ConfigBundle(' + id + ', ' + personalization + ', ' + customization + ', ' + locales + ')')
println(' in ' + dest)
exec {
commandLine 'java', '-cp', jarfile, 'eu.csc.gtdm.ConfigBundle', id, personalization, customization, locales, dest
}
//upload
def source = projectDir.getAbsolutePath() + '/config'
println(' to ' + andDest)
exec {
executable adb
args('-s', device, 'shell', 'rm', '-f', andDest + '/config/*')
}
exec {
executable adb
args('-s', device, 'push', source, andDest)
}
}
}

19
app/log4j.properties Normal file
View File

@ -0,0 +1,19 @@
### config ####
eu.csc=INFO
eu.csc.comm.TcpClient=DEBUG
eu.csc.ugp.UGPClient=DEBUG
#show UGP primitives (DEBUG=show content, INFO=show only primitive)
UGP=DEBUG
#show no UGP (WARN), UGP service name with length (INFO), UGP with ASN.1 byte code (DEBUG)
UGP_asn1=WARN
#set type of sockets (INFO=SSL, WARN=normal)
UGP.sockets=WARN
#show Messages of specific MessageType and higher (DEBUG=unknown, INFO=info, WARN=warning, ERROR=alarm)
UGP.message=DEBUG
#show Message cache (DEBUG) if Message.level fits
UGP.message.cache=INFO
#show Message trace (DEBUG) if Message.level fits
UGP.message.trace=INFO
#show no values (WARN), values (INFO), ASN.1 byte code (DEBUG) if Message (level) fits
UGP.message.values=WARN

View File

@ -1,10 +0,0 @@
package eu.csc.personalapp.services.persistence;
import static org.junit.Assert.*;
public class PersonalAppDatabaseTest {
@org.junit.Before
public void setUp() throws Exception {
}
}

View File

@ -1,4 +1,4 @@
package eu.csc.personalapp;
package eu.csc.vehown;
import android.content.Context;
@ -21,6 +21,6 @@ public class ExampleInstrumentedTest {
public void useAppContext() {
// Context of the app under test.
Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
assertEquals("eu.csc.personalapp", appContext.getPackageName());
assertEquals("eu.csc.vehown", appContext.getPackageName());
}
}

View File

@ -1,4 +1,4 @@
package eu.csc.ssv.personalapp.persistence;
package eu.csc.vehown.services.persistence;
import org.junit.Test;

View File

@ -1,4 +1,4 @@
package eu.csc.personalapp.services.persistence;
package eu.csc.vehown.services.persistence;
import android.content.Context;
@ -6,13 +6,13 @@ import androidx.room.Room;
import androidx.test.core.app.ApplicationProvider;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import eu.csc.personalapp.services.persistence.dao.LeaseEntityDao;
import eu.csc.personalapp.services.persistence.dao.VehicleDao;
import eu.csc.personalapp.services.persistence.dao.VehicleInfoDao;
import eu.csc.personalapp.services.persistence.entity.lease.LeaseEntity;
import eu.csc.personalapp.services.persistence.entity.vehicle.VehicleEntity;
import eu.csc.personalapp.services.persistence.entity.vehicle.VehicleWithEvents;
import eu.csc.personalapp.services.persistence.entity.vehicle.VehicleWithInfos;
import eu.csc.vehown.services.persistence.dao.LeaseEntityDao;
import eu.csc.vehown.services.persistence.dao.VehicleDao;
import eu.csc.vehown.services.persistence.dao.VehicleInfoDao;
import eu.csc.vehown.services.persistence.entity.lease.LeaseEntity;
import eu.csc.vehown.services.persistence.entity.vehicle.VehicleEntity;
import eu.csc.vehown.services.persistence.entity.vehicle.VehicleWithEvents;
import eu.csc.vehown.services.persistence.entity.vehicle.VehicleWithInfos;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
@ -31,7 +31,7 @@ import static org.junit.Assert.assertThat;
public class SimpleEntityReadWriteTest {
private LeaseEntityDao leaseDao;
private VehicleDao vehicleDao;
private PersonalAppDatabase db;
private VehicleOwnerDatabase db;
private static Logger logger = Logger.getLogger(SimpleEntityReadWriteTest.class.getSimpleName());
private VehicleInfoDao vehicleInfoDao;
@ -39,7 +39,7 @@ public class SimpleEntityReadWriteTest {
@Before
public void createDb() {
Context context = ApplicationProvider.getApplicationContext();
db = Room.inMemoryDatabaseBuilder(context, PersonalAppDatabase.class).build();
db = Room.inMemoryDatabaseBuilder(context, VehicleOwnerDatabase.class).build();
leaseDao = db.leaseDao();
vehicleDao = db.vehicleDao();
vehicleInfoDao = db.vehicleInfoDao();

View File

@ -0,0 +1,8 @@
package eu.csc.vehown.services.persistence;
public class VehicleOwnerDatabaseTest {
@org.junit.Before
public void setUp() throws Exception {
}
}

View File

@ -1,12 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="eu.csc.personalapp">
package="eu.csc.vehown">
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="18"
tools:ignore="ScopedStorage"/>
<!--uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="18"
tools:ignore="ScopedStorage"/-->
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
@ -19,7 +19,7 @@
android:networkSecurityConfig="@xml/network_security_config"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.PersonalApp"
android:theme="@style/Theme.VehicleOwner"
android:usesCleartextTraffic="true"
tools:targetApi="n">
@ -36,14 +36,14 @@
<receiver
android:name=".broadcast.VehicleEventReceivedReceiver">
android:name="eu.csc.vehown.broadcast.VehicleEventReceivedReceiver">
<intent-filter>
<action android:name="eu.csc.personalapp.EVENTINTENT"/>
<action android:name="eu.csc.vehown.EVENTINTENT"/>
</intent-filter>
</receiver>
<receiver
android:name=".broadcast.StartupReceiver"
android:name="eu.csc.vehown.broadcast.StartupReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
@ -52,62 +52,62 @@
</receiver>
<service
android:name=".ugp.UGPService"
android:name="eu.csc.vehown.ugp.UGPService"
android:enabled="true"
android:exported="true" />
<service
android:name=".services.rest.UploadFileService"
android:name="eu.csc.vehown.services.rest.UploadFileService"
android:enabled="true"
android:exported="true" />
<activity
android:name=".ui.main.MainActivity"
android:name="eu.csc.vehown.ui.main.MainActivity"
android:label="@string/app_name"
android:theme="@style/Theme.PersonalApp.NoActionBar">
android:theme="@style/Theme.VehicleOwner.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<activity
android:name=".ui.svi.RegisterSVIActivity"
android:name="eu.csc.vehown.ui.svi.RegisterSVIActivity"
android:label="@string/register_svi"
android:theme="@style/Theme.PersonalApp.NoActionBar">
android:theme="@style/Theme.VehicleOwner.NoActionBar">
</activity>
<activity
android:name=".ui.reportEvent.ReportEventActivity"
android:theme="@style/Theme.PersonalApp.NoActionBar">
android:name="eu.csc.vehown.ui.reportEvent.ReportEventActivity"
android:theme="@style/Theme.VehicleOwner.NoActionBar">
</activity>
<activity
android:name=".ui.reportEvent.SelectEventsActivity"
android:theme="@style/Theme.PersonalApp.NoActionBar">
android:name="eu.csc.vehown.ui.reportEvent.SelectEventsActivity"
android:theme="@style/Theme.VehicleOwner.NoActionBar">
</activity>
<activity
android:name=".ui.reportEvent.SelectRepairShopActivity"
android:theme="@style/Theme.PersonalApp.NoActionBar">
android:name="eu.csc.vehown.ui.reportEvent.SelectRepairShopActivity"
android:theme="@style/Theme.VehicleOwner.NoActionBar">
</activity>
<activity
android:name=".ui.tp.TreatmentPlanActivity"
android:theme="@style/Theme.PersonalApp.NoActionBar">
android:name="eu.csc.vehown.ui.tp.TreatmentPlanActivity"
android:theme="@style/Theme.VehicleOwner.NoActionBar">
</activity>
<activity
android:name=".ui.FailureEvent.FailureEventActivity"
android:name="eu.csc.vehown.ui.FailureEvent.FailureEventActivity"
android:label="@string/title_activity_failure_event"
android:theme="@style/Theme.PersonalApp.NoActionBar"/>
android:theme="@style/Theme.VehicleOwner.NoActionBar"/>
<activity
android:name=".ui.registerCustomer.RegisterCustomerActivity"
android:name="eu.csc.vehown.ui.registerCustomer.RegisterCustomerActivity"
android:label="@string/title_activity_register_customer"
android:theme="@style/Theme.PersonalApp.NoActionBar"/>
android:theme="@style/Theme.VehicleOwner.NoActionBar"/>
<activity
android:name=".ui.login.LoginActivity"
android:name="eu.csc.vehown.ui.login.LoginActivity"
android:label="@string/app_name">
</activity>
<activity
android:name=".ui.test.Test3Activity"
android:name="eu.csc.vehown.ui.test.Test3Activity"
android:label="@string/title_activity_test3"
android:theme="@style/Theme.PersonalApp.NoActionBar">
android:theme="@style/Theme.VehicleOwner.NoActionBar">
</activity>
</application>

View File

@ -1,15 +0,0 @@
package eu.csc.personalapp.services.persistence;
import eu.csc.personalapp.data.model.Event;
import eu.csc.personalapp.data.model.RepairShop;
import eu.csc.personalapp.data.model.TreatmentPlan;
import java.util.List;
public interface IPersistenceClient {
Event[] getEvents();
TreatmentPlan getTreatmentPlan();
}

View File

@ -1,43 +0,0 @@
package eu.csc.personalapp.services.persistence;
import androidx.room.Database;
import androidx.room.RoomDatabase;
import eu.csc.personalapp.services.persistence.dao.*;
import eu.csc.personalapp.services.persistence.entity.events.EventEntity;
import eu.csc.personalapp.services.persistence.entity.lease.LeaseEntity;
import eu.csc.personalapp.services.persistence.entity.lease.LeaseInfoEntity;
import eu.csc.personalapp.services.persistence.entity.lease.LeaseSystemEntity;
import eu.csc.personalapp.services.persistence.entity.vehicle.VehicleEntity;
import eu.csc.personalapp.services.persistence.entity.vehicle.VehicleInfoEntity;
import eu.csc.personalapp.services.persistence.entity.vehicle.VehicleSystemEntity;
@Database(entities = {
EventEntity.class,
VehicleEntity.class,
VehicleInfoEntity.class,
VehicleSystemEntity.class,
LeaseEntity.class,
LeaseSystemEntity.class,
LeaseInfoEntity.class,
},
exportSchema = true,
version = 1)
public abstract class PersonalAppDatabase extends RoomDatabase {
public static final String dbName = "personalAppDB";
public abstract EventDao eventDao();
public abstract VehicleDao vehicleDao();
public abstract LeaseEntityDao leaseDao();
public abstract VehicleInfoDao vehicleInfoDao();
}

View File

@ -1,8 +0,0 @@
package eu.csc.personalapp.services.persistence.dao;
import androidx.room.Dao;
import eu.csc.personalapp.services.persistence.entity.events.EventEntity;
@Dao
public interface EventDao extends BaseDao<EventEntity> {
}

View File

@ -1,121 +0,0 @@
package eu.csc.personalapp.ugp;
import android.app.*;
import android.content.Intent;
import android.graphics.Color;
import android.os.Build;
import android.os.Handler;
import android.os.IBinder;
import android.os.Looper;
import androidx.core.app.NotificationCompat;
import asn.GTP.ActionType;
import asn.GTP.SessionType;
import eu.csc.comm.ThTcpServer;
import eu.csc.data.IDataConsts;
import eu.csc.gtdm.ConfigException;
import eu.csc.gtdm.ConfigProvider;
import eu.csc.gtdm.GTException;
import eu.csc.gtp.IGTPCnfNegative;
import eu.csc.log.CSCLog;
import eu.csc.log.CSCLogFactory;
import eu.csc.personalapp.ui.main.MainActivity;
import eu.csc.personalapp.ui.main.dboard.DashboardFragment;
import eu.csc.personalapp.ui.modal.Helper;
import eu.csc.ugp.UGPClient;
import java.io.File;
public class UGPService extends Service implements IDataConsts, Runnable {
public static final String HOST = "host";
private static final String GT_SERVICE_CHANNEL = "GTServiceChannel";
private static final CSCLog LOG = CSCLogFactory.getLog(UGPService.class);
private static NotificationChannel serviceChannel;
private String host;
private final String certName;
private final String leaseToken;
private Handler handler;
public UGPService() {
certName = "Diagnostic-OwnerInfo";
leaseToken = "super-11112222";
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
/*int ret = */super.onStartCommand(intent, flags, startId);
host = intent.getStringExtra(HOST);
createNotificationChannel();
Intent notificationIntent = new Intent(this, MainActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this,0, notificationIntent, 0);
Notification notification = new NotificationCompat.Builder(this, GT_SERVICE_CHANNEL)
.setContentTitle("UGP Service")
.setContentText("started")
//.setSmallIcon(R.drawable.ic_running)
.setContentIntent(pendingIntent)
.build();
startForeground(1, notification);
new Thread(this, getClass().getSimpleName()).start();
//do heavy work on a background thread
//stopSelf();
return START_NOT_STICKY; //TODO -> START_REDELIVER_INTENT
}
@Override
public void run() {
try {
System.setProperty("gtdm.odp", this.getExternalFilesDir(null).getAbsolutePath());
ConfigProvider cp = ConfigProvider.get();
cp.readGeneralConfigs(false);
File dirCerts = new File(cp.getDirCurrent(), "certs");
UGPClient ugpClient = new UGPClient(dirCerts, certName, host, PORT_UGP, 0);
ugpClient.startIt(null);
handler = new Handler(Looper.getMainLooper());
// try {
// ugpClient.setNegativeCnf(negativeCnf);
// //ugpClient.sendGetSupportedInfoReq("", DataFilter.stationunit_info_only, null, null, null, null, supportedInfoCnf);
// //TODO ugpClient.sendManageSessionReq(SessionType.vehOwnAuth, ActionType.enable, leaseToken, null, manageSessionCnf);
// } catch (GTException e) {
// LOG.error(e.getMessage(), e);
// }
} catch (ConfigException e) { //| InterruptedException
LOG.error(e.getMessage(), e.getCause());
}
}
@Override
public void onDestroy() {
NsdHelper.unregisterListener(getApplicationContext());
super.onDestroy();
}
private void createNotificationChannel() {
if (serviceChannel == null) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
serviceChannel = new NotificationChannel(GT_SERVICE_CHANNEL,"GT Service Channel", NotificationManager.IMPORTANCE_DEFAULT);
serviceChannel.setLightColor(Color.GREEN);
NotificationManager manager = getSystemService(NotificationManager.class);
manager.createNotificationChannel(serviceChannel);
}
}
}
private final IGTPCnfNegative negativeCnf = new IGTPCnfNegative() {
@Override
public void negativeCnf(Integer csn, String messageName, GTException e) {
LOG.error(e.getMessage(), e);
Helper.errorDialog(handler, null, e, leaveActivity);
}
};
private final Helper.IDialogOkHandler leaveActivity = () -> {
//TODO
};
}

View File

@ -1,4 +1,4 @@
package eu.csc.personalapp.broadcast;
package eu.csc.vehown.broadcast;
import android.content.BroadcastReceiver;
import android.content.Context;

View File

@ -1,17 +1,16 @@
package eu.csc.personalapp.broadcast;
package eu.csc.vehown.broadcast;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import android.view.View;
import android.widget.Toast;
public class VehicleEventReceivedReceiver extends BroadcastReceiver {
public static final String EVENT_INTENT_NAME = "eu.csc.personalapp.EVENTINTENT";
public static final String EVENT_INTENT_NAME = "eu.csc.vehown.EVENTINTENT";
@Override

View File

@ -1,6 +1,6 @@
package eu.csc.personalapp.data;
package eu.csc.vehown.data;
import eu.csc.personalapp.data.model.LoggedInUser;
import eu.csc.vehown.data.model.LoggedInUser;
import java.io.IOException;

View File

@ -1,6 +1,6 @@
package eu.csc.personalapp.data;
package eu.csc.vehown.data;
import eu.csc.personalapp.data.model.LoggedInUser;
import eu.csc.vehown.data.model.LoggedInUser;
/**
* Class that requests authentication and user information from the remote data source and

View File

@ -1,4 +1,4 @@
package eu.csc.personalapp.data;
package eu.csc.vehown.data;
/**
* A generic class that holds a result success w/ data or an error exception.

View File

@ -1,6 +1,5 @@
package eu.csc.personalapp.data.model;
package eu.csc.vehown.data.model;
import eu.csc.personalapp.services.rest.data.ApiEventUploadRequest;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

View File

@ -1,4 +1,4 @@
package eu.csc.personalapp.data.model;
package eu.csc.vehown.data.model;
import lombok.Getter;
import lombok.NoArgsConstructor;

View File

@ -1,4 +1,4 @@
package eu.csc.personalapp.data.model;
package eu.csc.vehown.data.model;
import lombok.Getter;
import lombok.NoArgsConstructor;
@ -12,12 +12,17 @@ import java.text.DateFormat;
@NoArgsConstructor
public class Event implements Serializable {
private String id;
private String name;
private String description;
private String ecu;
private String vehicle;
private long timestamp;
public enum EventStatus { UNDEFINED, PERMANENT, PENDING, CONFIRMED }
public enum EventSeverity { LOW, MEDIUM, HIGH }
private String id;
private String name;
private String description;
private String ecu;
private String vehicle;
private long timestamp;
private EventStatus status;
private EventSeverity severity;
public Event(String name) {
this.name = name;
@ -30,13 +35,15 @@ public class Event implements Serializable {
this.timestamp = timestamp;
}
public Event(String id, String name, String description, String ecu, String vehicle, long timestamp) {
public Event(String id, String name, String description, String ecu, String vehicle, long timestamp, EventStatus status, EventSeverity severity) {
this.id = id;
this.name = name;
this.description = description;
this.ecu = ecu;
this.vehicle = vehicle;
this.timestamp = timestamp;
this.status = status;
this.severity = severity;
}
public String toShortString(DateFormat dateFormat) {
@ -45,13 +52,15 @@ public class Event implements Serializable {
@Override
public String toString() {
return "Event {" +
return "Event{" +
"id='" + id + '\'' +
", name='" + name + '\'' +
", description='" + description + '\'' +
", ecu='" + ecu + '\'' +
", vehicle='" + vehicle + '\'' +
", timestamp=" + timestamp +
", status=" + status +
", severity=" + severity +
'}';
}
}

View File

@ -1,4 +1,4 @@
package eu.csc.personalapp.data.model;
package eu.csc.vehown.data.model;
import java.util.Date;

View File

@ -1,4 +1,4 @@
package eu.csc.personalapp.data.model;
package eu.csc.vehown.data.model;
public interface ICustomer {

View File

@ -1,6 +1,4 @@
package eu.csc.personalapp.data.model;
import java.util.Set;
package eu.csc.vehown.data.model;
public interface ICustomerVehicle {

View File

@ -1,4 +1,4 @@
package eu.csc.personalapp.data.model;
package eu.csc.vehown.data.model;
public interface IEcu {
String getId();

View File

@ -1,4 +1,4 @@
package eu.csc.personalapp.data.model;
package eu.csc.vehown.data.model;
public interface IRepairShop {

View File

@ -1,4 +1,4 @@
package eu.csc.personalapp.data.model;
package eu.csc.vehown.data.model;
public interface IVehicleSystem {

View File

@ -1,4 +1,4 @@
package eu.csc.personalapp.data.model;
package eu.csc.vehown.data.model;
import lombok.Getter;

View File

@ -1,4 +1,4 @@
package eu.csc.personalapp.data.model;
package eu.csc.vehown.data.model;
import lombok.Getter;
import lombok.NoArgsConstructor;

View File

@ -1,4 +1,4 @@
package eu.csc.personalapp.data.model;
package eu.csc.vehown.data.model;
import lombok.Getter;
import lombok.NoArgsConstructor;

View File

@ -1,4 +1,4 @@
package eu.csc.personalapp.data.model;
package eu.csc.vehown.data.model;
import lombok.Getter;
import lombok.NoArgsConstructor;

View File

@ -1,4 +1,4 @@
package eu.csc.personalapp.services;
package eu.csc.vehown.services;
import android.app.IntentService;
import android.content.Intent;
@ -18,13 +18,13 @@ public class LocalDataServiceIntent extends IntentService {
// TODO: Rename actions, choose action names that describe tasks that this
// IntentService can perform, e.g. ACTION_FETCH_NEW_ITEMS
private static final String ACTION_FOO = "eu.csc.personalapp.services.rest.action.FOO";
private static final String ACTION_BAZ = "eu.csc.personalapp.services.rest.action.BAZ";
private static final String ACTION_FOO = "eu.csc.vehown.services.rest.action.FOO";
private static final String ACTION_BAZ = "eu.csc.vehown.services.rest.action.BAZ";
// TODO: Rename parameters
private static final String EXTRA_PARAM1 = "eu.csc.personalapp.services.rest.extra.PARAM1";
private static final String EXTRA_PARAM2 = "eu.csc.personalapp.services.rest.extra.PARAM2";
private static final String EXTRA_PARAM1 = "eu.csc.vehown.services.rest.extra.PARAM1";
private static final String EXTRA_PARAM2 = "eu.csc.vehown.services.rest.extra.PARAM2";
private static String TAG = LocalDataServiceIntent.class.getSimpleName();
private static final Random random = new Random();

View File

@ -1,14 +1,13 @@
package eu.csc.personalapp.services;
package eu.csc.vehown.services;
import android.content.Context;
import android.util.Log;
import eu.csc.personalapp.data.model.Event;
import eu.csc.personalapp.data.model.IRepairShop;
import eu.csc.personalapp.data.model.RepairShop;
import eu.csc.personalapp.services.persistence.ExampleDataClient;
import eu.csc.personalapp.services.persistence.PersistenceFactory;
import eu.csc.personalapp.services.persistence.entity.lease.LeaseEntity;
import eu.csc.personalapp.services.rest.data.GrantedLeaseResponse;
import eu.csc.vehown.data.model.IRepairShop;
import eu.csc.vehown.data.model.RepairShop;
import eu.csc.vehown.services.persistence.ExampleDataClient;
import eu.csc.vehown.services.persistence.PersistenceFactory;
import eu.csc.vehown.services.persistence.entity.lease.LeaseEntity;
import eu.csc.vehown.services.rest.data.GrantedLeaseResponse;
import lombok.var;
import java.util.ArrayList;

View File

@ -1,13 +1,4 @@
package eu.csc.personalapp.services.mqtt;
import android.util.Log;
import java.net.URISyntaxException;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.util.concurrent.BlockingDeque;
import java.util.concurrent.LinkedBlockingDeque;
package eu.csc.vehown.services.mqtt;
public abstract class Constants {

View File

@ -1,4 +1,4 @@
package eu.csc.personalapp.services.mqtt;
package eu.csc.vehown.services.mqtt;
import android.content.Context;
@ -6,8 +6,8 @@ import android.util.Log;
import com.rabbitmq.client.*;
import eu.csc.personalapp.services.notifications.NotificationService;
import eu.csc.personalapp.services.persistence.ExampleDataClient;
import eu.csc.vehown.services.notifications.NotificationService;
import eu.csc.vehown.services.persistence.ExampleDataClient;
import java.io.IOException;
import java.nio.charset.StandardCharsets;

View File

@ -1,4 +1,4 @@
package eu.csc.personalapp.services.mqtt;
package eu.csc.vehown.services.mqtt;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;

View File

@ -1,4 +1,4 @@
package eu.csc.personalapp.services.notifications;
package eu.csc.vehown.services.notifications;
import android.app.*;
import android.content.Context;
@ -7,12 +7,15 @@ import android.os.Build;
import android.util.Log;
import androidx.core.app.NotificationCompat;
import androidx.core.app.NotificationManagerCompat;
import eu.csc.personalapp.R;
import eu.csc.personalapp.data.model.Event;
import eu.csc.personalapp.data.model.TreatmentPlan;
import eu.csc.personalapp.services.persistence.ExampleDataClient;
import eu.csc.personalapp.ui.reportEvent.ReportEventActivity;
import eu.csc.personalapp.ui.tp.TreatmentPlanActivity;
import eu.csc.log.CSCLog;
import eu.csc.log.CSCLogFactory;
import eu.csc.vehown.R;
import eu.csc.vehown.data.model.Event;
import eu.csc.vehown.data.model.TreatmentPlan;
import eu.csc.vehown.services.persistence.ExampleDataClient;
import eu.csc.vehown.ui.main.MainActivity;
import eu.csc.vehown.ui.reportEvent.ReportEventActivity;
import eu.csc.vehown.ui.tp.TreatmentPlanActivity;
import java.text.SimpleDateFormat;
import java.util.Arrays;
@ -24,12 +27,14 @@ public class NotificationService {
public static final String INTENT_EVENT_KEY = "event";
public static final String TREATMENTPLAN_KEY = "THE_PLAN";
private static final String EVENT_CHANNEL = "EventCannel";
private static final String INFO_CHANNEL = "InfoCannel";
private static final String EVENT_CHANNEL = "EventChannel";
private static final String INFO_CHANNEL = "InfoChannel";
private static final String UGP_SERVICE_CHANNEL = "UGPServiceChannel";
private static final int EVENT_NOTIFICATION_ID = 142;
private static final int TREATMENTPLAN_NOTIFICATION_ID = 421;
private static final String TAG = NotificationService.class.getSimpleName();
//private static final String TAG = NotificationService.class.getSimpleName();
private static final CSCLog LOG = CSCLogFactory.getLog(NotificationService.class);
private static final SimpleDateFormat dateFormat;
@ -45,13 +50,19 @@ public class NotificationService {
// Create the NotificationChannel, but only on API 26+ because the NotificationChannel class is new and not in the support library
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
NotificationManager notificationManager = context.getSystemService(NotificationManager.class);
NotificationChannel eventChannel = new NotificationChannel(EVENT_CHANNEL, context.getString(R.string.event_channel_name), NotificationManager.IMPORTANCE_HIGH);
eventChannel.setDescription(context.getString(R.string.event_channel_description));
// Register the channel with the system; you can't change the importance or other notification behaviors after this
notificationManager.createNotificationChannel(eventChannel);
NotificationChannel infoChannel = new NotificationChannel(INFO_CHANNEL, context.getString(R.string.info_channel_name), NotificationManager.IMPORTANCE_HIGH);
infoChannel.setDescription(context.getString(R.string.info_channel_description));
notificationManager.createNotificationChannels(Arrays.asList(eventChannel, infoChannel));
NotificationChannel ugpServiceChannel = new NotificationChannel(UGP_SERVICE_CHANNEL,context.getString(R.string.ugp_service_channel_name), NotificationManager.IMPORTANCE_DEFAULT);
ugpServiceChannel.setDescription(context.getString(R.string.ugp_service_channel_description));
//ugpServiceChannel.setLightColor(Color.GREEN);
notificationManager.createNotificationChannels(Arrays.asList(eventChannel, infoChannel, ugpServiceChannel));
}
}
@ -60,7 +71,8 @@ public class NotificationService {
}
public void createEventsNotification(Context context, Event[] events) {
Log.d(TAG, "ENTERED createEventsNotification");
LOG.debug("createEventsNotification " + events.length);
//Log.d(TAG, "ENTERED createEventsNotification");
StringBuilder sbNames = new StringBuilder();
StringBuilder sbEvents = new StringBuilder();
@ -73,8 +85,7 @@ public class NotificationService {
Intent showFullQuoteIntent = new Intent(context, ReportEventActivity.class);
showFullQuoteIntent.putExtra(INTENT_EVENT_KEY, events); //ToDo refresh Date ?
int uniqueInt = (int) (System.currentTimeMillis() & 0xfffffff);
PendingIntent pendingIntent = PendingIntent.getActivity(context, uniqueInt, showFullQuoteIntent, PendingIntent.FLAG_UPDATE_CURRENT);
PendingIntent pendingIntent = PendingIntent.getActivity(context, getUniqueInt(), showFullQuoteIntent, PendingIntent.FLAG_UPDATE_CURRENT);
Notification notification = new NotificationCompat.Builder(context, EVENT_CHANNEL)
.setSmallIcon(R.drawable.ic_dlg_warning)
@ -91,7 +102,8 @@ public class NotificationService {
}
public void createTreatmentPlanNotification(Context context, TreatmentPlan treatmentPlan) {
Log.d(TAG, "ENTERED sendNotification");
LOG.debug("createTreatmentPlanNotification " + treatmentPlan);
//Log.d(TAG, "ENTERED createTreatmentPlanNotification");
Intent showFullQuoteIntent = new Intent(context, TreatmentPlanActivity.class);
showFullQuoteIntent.putExtra(TREATMENTPLAN_KEY, ExampleDataClient.getExampleTreatmentPlan());
@ -104,8 +116,7 @@ public class NotificationService {
// both of these approaches now work: FLAG_CANCEL, FLAG_UPDATE; the uniqueInt may be the real solution.
//PendingIntent pendingIntent = PendingIntent.getActivity(this, uniqueInt, showFullQuoteIntent, PendingIntent.FLAG_CANCEL_CURRENT);
int uniqueInt = (int) (System.currentTimeMillis() & 0xfffffff);
PendingIntent pendingIntent = PendingIntent.getActivity(context, uniqueInt, showFullQuoteIntent, PendingIntent.FLAG_UPDATE_CURRENT);
PendingIntent pendingIntent = PendingIntent.getActivity(context, getUniqueInt(), showFullQuoteIntent, PendingIntent.FLAG_UPDATE_CURRENT);
Notification notification = new NotificationCompat.Builder(context, INFO_CHANNEL)
.setSmallIcon(R.drawable.ic_dlg_info)
@ -121,4 +132,25 @@ public class NotificationService {
NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context);
notificationManager.notify(TREATMENTPLAN_NOTIFICATION_ID, notification);
}
public void createUGPServiceNotification(Context context, Service service) {
LOG.debug("createUGPServiceNotification");
//Log.d(TAG, "ENTERED createUGPServiceNotification");
Intent notificationIntent = new Intent(context, MainActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(context, getUniqueInt(), notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
Notification notification = new NotificationCompat.Builder(context, UGP_SERVICE_CHANNEL)
.setSmallIcon(R.drawable.ic_dlg_info)
.setContentTitle("UGP Service")
.setContentText("started")
.setContentIntent(pendingIntent)
.build();
service.startForeground(1, notification);
}
private int getUniqueInt() {
return (int) (System.currentTimeMillis() & 0xfffffff);
}
}

View File

@ -1,7 +1,7 @@
package eu.csc.personalapp.services.persistence;
package eu.csc.vehown.services.persistence;
import asn.GTLease.Lease;
import eu.csc.personalapp.data.model.*;
import eu.csc.vehown.data.model.*;
import java.text.SimpleDateFormat;
import java.util.*;
@ -20,8 +20,8 @@ public class ExampleDataClient implements IPersistenceClient {
public static final VehicleSystem System_WiFi = new VehicleSystem("wifi", "WiFi");
public static final LoggedInUser exampleLoggedInUser = new LoggedInUser();
public static final Event exampleEvent1 = new Event("1", "P0100", "Mass or Volume Air Flow 'A' Circuit", "OBDII1", "Dodge Charger '265G21'", 1620649836986L);
public static final Event exampleEvent2 = new Event("2", "P0200", "Injector Circuit/Open", "OBDII1", "Dodge Charger '265G21'", 1620649836987L);
public static final Event exampleEvent1 = new Event("1", "P0100", "Mass or Volume Air Flow 'A' Circuit", "OBDII1", "Dodge Charger '265G21'", 1620649836986L, Event.EventStatus.CONFIRMED, Event.EventSeverity.HIGH);
public static final Event exampleEvent2 = new Event("2", "P0200", "Injector Circuit/Open", "OBDII1", "Dodge Charger '265G21'", 1620649836987L, Event.EventStatus.CONFIRMED, Event.EventSeverity.HIGH);
public static final IRepairShop RepairShop_DIAutoService = new RepairShop("D.I. Auto Service", "4263 Boulder Hwy. Las Vegas, NV", "https://www.diautorepair.com/", "dias@x.com", "1234567");
@ -43,13 +43,13 @@ public class ExampleDataClient implements IPersistenceClient {
customerVehicle.systems.add(System_ABS);
customerVehicle.systems.add(System_WiFi);
Event e3 = new Event("3", "P0300", "Random/Multiple Cylinder Misfire Detected", "OBDII1", "Dodge Charger '265G21'", 1620649836988L);
Event e4 = new Event("4", "U0100", "Lost Communication With ECM/PCM 'A'", "OBDII1", "Dodge Charger '265G21'", 1620649836991L);
Event e5 = new Event("5", "P0101", "Mass or Volume Air Flow 'A' Circuit Range/Performance", "OBDII2", "Dodge Charger '265G21'", 1620649836992L);
Event e6 = new Event("6", "P0107", "Manifold Absolute Pressure/Barometric Pressure Circuit Low", "OBDII1", "Dodge Charger '265G21'", 1620649837049L);
Event e7 = new Event("7", "P0207", "Injector Circuit/Open - Cylinder 7", "OBDII1", "Dodge Charger '265G21'", 1620649837050L);
Event e8 = new Event("8", "P0307", "Cylinder 7 Misfire Detected", "OBDII1", "Dodge Charger '265G21'", 1620649837051L);
Event e9 = new Event("9", "P0102", "Mass or Volume Air Flow 'A' Circuit Low", "OBDII2", "Dodge Charger '265G21'", 1620649837053L);
Event e3 = new Event("3", "P0300", "Random/Multiple Cylinder Misfire Detected", "OBDII1", "Dodge Charger '265G21'", 1620649836988L, Event.EventStatus.PENDING, Event.EventSeverity.MEDIUM);
Event e4 = new Event("4", "U0100", "Lost Communication With ECM/PCM 'A'", "OBDII1", "Dodge Charger '265G21'", 1620649836991L, Event.EventStatus.PERMANENT, Event.EventSeverity.LOW);
Event e5 = new Event("5", "P0101", "Mass or Volume Air Flow 'A' Circuit Range/Performance", "OBDII2", "Dodge Charger '265G21'", 1620649836992L, Event.EventStatus.PERMANENT, Event.EventSeverity.LOW);
Event e6 = new Event("6", "P0107", "Manifold Absolute Pressure/Barometric Pressure Circuit Low", "OBDII1", "Dodge Charger '265G21'", 1620649837049L, Event.EventStatus.PERMANENT, Event.EventSeverity.LOW);
Event e7 = new Event("7", "P0207", "Injector Circuit/Open - Cylinder 7", "OBDII1", "Dodge Charger '265G21'", 1620649837050L, Event.EventStatus.PERMANENT, Event.EventSeverity.LOW);
Event e8 = new Event("8", "P0307", "Cylinder 7 Misfire Detected", "OBDII1", "Dodge Charger '265G21'", 1620649837051L, Event.EventStatus.PERMANENT, Event.EventSeverity.LOW);
Event e9 = new Event("9", "P0102", "Mass or Volume Air Flow 'A' Circuit Low", "OBDII2", "Dodge Charger '265G21'", 1620649837053L, Event.EventStatus.PERMANENT, Event.EventSeverity.LOW);
exampleEvents1 = new Event[] {exampleEvent1, exampleEvent2, e3, e4 };
exampleEvents2 = new Event[] {exampleEvent1, exampleEvent2, e3, e4, e5, e6, e7, e8, e9 };
}

View File

@ -0,0 +1,12 @@
package eu.csc.vehown.services.persistence;
import eu.csc.vehown.data.model.Event;
import eu.csc.vehown.data.model.TreatmentPlan;
public interface IPersistenceClient {
Event[] getEvents();
TreatmentPlan getTreatmentPlan();
}

View File

@ -1,12 +1,10 @@
package eu.csc.personalapp.services.persistence;
package eu.csc.vehown.services.persistence;
import android.app.Activity;
import android.content.Context;
import android.util.Log;
import androidx.room.Room;
import eu.csc.personalapp.services.persistence.entity.lease.LeaseEntity;
import static eu.csc.personalapp.services.persistence.PersonalAppDatabase.dbName;
import static eu.csc.vehown.services.persistence.VehicleOwnerDatabase.dbName;
public class PersistenceFactory {
@ -16,9 +14,9 @@ public class PersistenceFactory {
return new ExampleDataClient();
}
public static PersonalAppDatabase generateDatabase(Context context){
PersonalAppDatabase db = Room.databaseBuilder(context,
PersonalAppDatabase.class, dbName).build();
public static VehicleOwnerDatabase generateDatabase(Context context){
VehicleOwnerDatabase db = Room.databaseBuilder(context,
VehicleOwnerDatabase.class, dbName).build();
return db;
@ -31,7 +29,7 @@ public class PersistenceFactory {
Log.d(TAG, "START LOADING EXAMPLE DATA");
try{
PersonalAppDatabase database = generateDatabase(context);
VehicleOwnerDatabase database = generateDatabase(context);
database.vehicleDao().deleteAll();
}

View File

@ -1,8 +1,8 @@
package eu.csc.personalapp.services.persistence;
package eu.csc.vehown.services.persistence;
import eu.csc.personalapp.services.persistence.entity.lease.LeaseEntity;
import eu.csc.personalapp.services.persistence.entity.vehicle.VehicleEntity;
import eu.csc.personalapp.services.persistence.entity.vehicle.VehicleInfoEntity;
import eu.csc.vehown.services.persistence.entity.lease.LeaseEntity;
import eu.csc.vehown.services.persistence.entity.vehicle.VehicleEntity;
import eu.csc.vehown.services.persistence.entity.vehicle.VehicleInfoEntity;
import java.util.ArrayList;
import java.util.List;

View File

@ -0,0 +1,44 @@
package eu.csc.vehown.services.persistence;
import androidx.room.Database;
import androidx.room.RoomDatabase;
import eu.csc.vehown.services.persistence.dao.*;
import eu.csc.vehown.services.persistence.entity.events.EventEntity;
import eu.csc.vehown.services.persistence.entity.lease.LeaseEntity;
import eu.csc.vehown.services.persistence.entity.lease.LeaseInfoEntity;
import eu.csc.vehown.services.persistence.entity.lease.LeaseSystemEntity;
import eu.csc.vehown.services.persistence.entity.vehicle.VehicleEntity;
import eu.csc.vehown.services.persistence.entity.vehicle.VehicleInfoEntity;
import eu.csc.vehown.services.persistence.entity.vehicle.VehicleSystemEntity;
@Database(entities = {
EventEntity.class,
VehicleEntity.class,
VehicleInfoEntity.class,
VehicleSystemEntity.class,
LeaseEntity.class,
LeaseSystemEntity.class,
LeaseInfoEntity.class,
},
exportSchema = true,
version = 1)
public abstract class VehicleOwnerDatabase extends RoomDatabase {
public static final String dbName = "vehicleOwnerDB";
public abstract EventDao eventDao();
public abstract VehicleDao vehicleDao();
public abstract LeaseEntityDao leaseDao();
public abstract VehicleInfoDao vehicleInfoDao();
}

View File

@ -1,4 +1,4 @@
package eu.csc.personalapp.services.persistence.converter;
package eu.csc.vehown.services.persistence.converter;
import androidx.room.TypeConverter;

View File

@ -1,4 +1,4 @@
package eu.csc.personalapp.services.persistence.converter;
package eu.csc.vehown.services.persistence.converter;
import androidx.room.TypeConverter;

View File

@ -1,4 +1,4 @@
package eu.csc.personalapp.services.persistence.dao;
package eu.csc.vehown.services.persistence.dao;
import androidx.room.Dao;
import androidx.room.Delete;

View File

@ -0,0 +1,8 @@
package eu.csc.vehown.services.persistence.dao;
import androidx.room.Dao;
import eu.csc.vehown.services.persistence.entity.events.EventEntity;
@Dao
public interface EventDao extends BaseDao<EventEntity> {
}

View File

@ -1,9 +1,9 @@
package eu.csc.personalapp.services.persistence.dao;
package eu.csc.vehown.services.persistence.dao;
import androidx.room.Dao;
import androidx.room.Query;
import eu.csc.personalapp.services.persistence.entity.lease.LeaseEntity;
import eu.csc.personalapp.services.persistence.entity.lease.LeaseWithSystems;
import eu.csc.vehown.services.persistence.entity.lease.LeaseEntity;
import eu.csc.vehown.services.persistence.entity.lease.LeaseWithSystems;
import java.util.List;

View File

@ -1,4 +1,4 @@
package eu.csc.personalapp.services.persistence.dao;
package eu.csc.vehown.services.persistence.dao;
import androidx.room.Dao;
@ -6,10 +6,10 @@ import androidx.room.Delete;
import androidx.room.Insert;
import androidx.room.Query;
import androidx.room.Transaction;
import eu.csc.personalapp.services.persistence.entity.vehicle.VehicleEntity;
import eu.csc.personalapp.services.persistence.entity.vehicle.VehicleWithEvents;
import eu.csc.personalapp.services.persistence.entity.vehicle.VehicleWithInfos;
import eu.csc.personalapp.services.persistence.entity.vehicle.VehicleWithSystems;
import eu.csc.vehown.services.persistence.entity.vehicle.VehicleEntity;
import eu.csc.vehown.services.persistence.entity.vehicle.VehicleWithEvents;
import eu.csc.vehown.services.persistence.entity.vehicle.VehicleWithInfos;
import eu.csc.vehown.services.persistence.entity.vehicle.VehicleWithSystems;
import java.util.List;

View File

@ -1,4 +1,4 @@
package eu.csc.personalapp.services.persistence.dao;
package eu.csc.vehown.services.persistence.dao;
import androidx.room.Dao;
import androidx.room.Insert;
@ -6,7 +6,7 @@ import androidx.room.Query;
import java.util.List;
import eu.csc.personalapp.services.persistence.entity.vehicle.VehicleInfoEntity;
import eu.csc.vehown.services.persistence.entity.vehicle.VehicleInfoEntity;
@Dao
public interface VehicleInfoDao {

View File

@ -1,4 +1,4 @@
package eu.csc.personalapp.services.persistence.entity;
package eu.csc.vehown.services.persistence.entity;
import androidx.room.PrimaryKey;

View File

@ -1,8 +1,8 @@
package eu.csc.personalapp.services.persistence.entity.events;
package eu.csc.vehown.services.persistence.entity.events;
import androidx.room.*;
import eu.csc.personalapp.services.persistence.converter.TimestampConverter;
import eu.csc.personalapp.services.persistence.entity.vehicle.VehicleEntity;
import eu.csc.vehown.services.persistence.converter.TimestampConverter;
import eu.csc.vehown.services.persistence.entity.vehicle.VehicleEntity;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

View File

@ -1,10 +1,10 @@
package eu.csc.personalapp.services.persistence.entity.lease;
package eu.csc.vehown.services.persistence.entity.lease;
import androidx.room.ColumnInfo;
import androidx.room.Entity;
import androidx.room.PrimaryKey;
import androidx.room.TypeConverters;
import eu.csc.personalapp.services.persistence.converter.TimestampConverter;
import eu.csc.vehown.services.persistence.converter.TimestampConverter;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

View File

@ -1,8 +1,8 @@
package eu.csc.personalapp.services.persistence.entity.lease;
package eu.csc.vehown.services.persistence.entity.lease;
import androidx.room.Entity;
import androidx.room.ForeignKey;
import eu.csc.personalapp.services.persistence.entity.BaseIdentifiable;
import eu.csc.vehown.services.persistence.entity.BaseIdentifiable;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

View File

@ -1,9 +1,9 @@
package eu.csc.personalapp.services.persistence.entity.lease;
package eu.csc.vehown.services.persistence.entity.lease;
import androidx.room.Entity;
import androidx.room.ForeignKey;
import eu.csc.personalapp.services.persistence.entity.BaseIdentifiable;
import eu.csc.vehown.services.persistence.entity.BaseIdentifiable;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

View File

@ -1,4 +1,4 @@
package eu.csc.personalapp.services.persistence.entity.lease;
package eu.csc.vehown.services.persistence.entity.lease;
public enum LeaseTransferStatus {

View File

@ -1,4 +1,4 @@
package eu.csc.personalapp.services.persistence.entity.lease;
package eu.csc.vehown.services.persistence.entity.lease;
import androidx.room.Embedded;
import androidx.room.Relation;

View File

@ -1,8 +1,7 @@
package eu.csc.personalapp.services.persistence.entity.lease;
package eu.csc.vehown.services.persistence.entity.lease;
import androidx.room.Embedded;
import androidx.room.Relation;
import eu.csc.personalapp.services.persistence.entity.events.EventEntity;
import java.util.List;

View File

@ -1,9 +1,9 @@
package eu.csc.personalapp.services.persistence.entity.treatmentplan;
package eu.csc.vehown.services.persistence.entity.treatmentplan;
import androidx.annotation.NonNull;
import androidx.room.Entity;
import eu.csc.personalapp.services.persistence.entity.BaseIdentifiable;
import eu.csc.vehown.services.persistence.entity.BaseIdentifiable;
import lombok.Getter;

View File

@ -1,8 +1,8 @@
package eu.csc.personalapp.services.persistence.entity.treatmentplan;
package eu.csc.vehown.services.persistence.entity.treatmentplan;
import androidx.room.Entity;
import eu.csc.personalapp.services.persistence.entity.BaseIdentifiable;
import eu.csc.vehown.services.persistence.entity.BaseIdentifiable;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

View File

@ -1,10 +1,10 @@
package eu.csc.personalapp.services.persistence.entity.vehicle;
package eu.csc.vehown.services.persistence.entity.vehicle;
import androidx.room.ColumnInfo;
import androidx.room.Entity;
import androidx.room.PrimaryKey;
import androidx.room.TypeConverters;
import eu.csc.personalapp.services.persistence.converter.TimestampConverter;
import eu.csc.vehown.services.persistence.converter.TimestampConverter;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

View File

@ -1,10 +1,10 @@
package eu.csc.personalapp.services.persistence.entity.vehicle;
package eu.csc.vehown.services.persistence.entity.vehicle;
import androidx.room.ColumnInfo;
import androidx.room.Entity;
import androidx.room.ForeignKey;
import eu.csc.personalapp.services.persistence.entity.BaseIdentifiable;
import eu.csc.vehown.services.persistence.entity.BaseIdentifiable;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

View File

@ -1,9 +1,9 @@
package eu.csc.personalapp.services.persistence.entity.vehicle;
package eu.csc.vehown.services.persistence.entity.vehicle;
import androidx.room.ColumnInfo;
import androidx.room.Entity;
import androidx.room.ForeignKey;
import eu.csc.personalapp.services.persistence.entity.BaseIdentifiable;
import eu.csc.vehown.services.persistence.entity.BaseIdentifiable;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

View File

@ -1,11 +1,11 @@
package eu.csc.personalapp.services.persistence.entity.vehicle;
package eu.csc.vehown.services.persistence.entity.vehicle;
import androidx.room.Embedded;
import androidx.room.Relation;
import java.util.List;
import eu.csc.personalapp.services.persistence.entity.events.EventEntity;
import eu.csc.vehown.services.persistence.entity.events.EventEntity;
public class VehicleWithEvents {

View File

@ -1,4 +1,4 @@
package eu.csc.personalapp.services.persistence.entity.vehicle;
package eu.csc.vehown.services.persistence.entity.vehicle;
import androidx.room.Embedded;
import androidx.room.Relation;

View File

@ -1,4 +1,4 @@
package eu.csc.personalapp.services.persistence.entity.vehicle;
package eu.csc.vehown.services.persistence.entity.vehicle;
import androidx.room.Embedded;
import androidx.room.Relation;

View File

@ -1,6 +1,6 @@
package eu.csc.personalapp.services.rest;
package eu.csc.vehown.services.rest;
import eu.csc.personalapp.services.rest.data.*;
import eu.csc.vehown.services.rest.data.*;
import io.reactivex.Single;
import okhttp3.ResponseBody;
import retrofit2.Call;
@ -22,7 +22,7 @@ public interface RetrofitApiClient {
@POST("api/generateLease")
Call<GrantedLeaseResponse> genereateLease(@Body GrantedLeaseRequest body);
Call<GrantedLeaseResponse> generateLease(@Body GrantedLeaseRequest body);
@GET("api/treatmentproposal/{order}")
Single<RepairShopTreatmentProposalResponse> getTreatmentProposal(String order);

View File

@ -1,6 +1,6 @@
package eu.csc.personalapp.services.rest;
package eu.csc.vehown.services.rest;
import eu.csc.personalapp.services.serialization.JSONHelper;
import eu.csc.vehown.services.serialization.JSONHelper;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;

View File

@ -1,4 +1,4 @@
package eu.csc.personalapp.services.rest;
package eu.csc.vehown.services.rest;
import android.app.Service;
import android.content.Intent;

View File

@ -1,4 +1,4 @@
package eu.csc.personalapp.services.rest.data;
package eu.csc.vehown.services.rest.data;
import lombok.Getter;

View File

@ -1,4 +1,4 @@
package eu.csc.personalapp.services.rest.data;
package eu.csc.vehown.services.rest.data;
import lombok.Getter;
import lombok.NoArgsConstructor;

View File

@ -1,8 +1,7 @@
package eu.csc.personalapp.services.rest.data;
package eu.csc.vehown.services.rest.data;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.NonNull;
import lombok.Setter;
import java.io.Serializable;

View File

@ -1,14 +1,13 @@
package eu.csc.personalapp.services.rest.data;
package eu.csc.vehown.services.rest.data;
import eu.csc.personalapp.data.model.ICustomer;
import eu.csc.personalapp.data.model.ICustomerVehicle;
import eu.csc.personalapp.data.model.IRepairShop;
import eu.csc.personalapp.data.model.IVehicleSystem;
import eu.csc.vehown.data.model.ICustomer;
import eu.csc.vehown.data.model.ICustomerVehicle;
import eu.csc.vehown.data.model.IRepairShop;
import eu.csc.vehown.data.model.IVehicleSystem;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import java.io.File;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

View File

@ -1,4 +1,4 @@
package eu.csc.personalapp.services.rest.data;
package eu.csc.vehown.services.rest.data;
import lombok.Getter;
import lombok.NoArgsConstructor;

View File

@ -1,4 +1,4 @@
package eu.csc.personalapp.services.rest.data;
package eu.csc.vehown.services.rest.data;
import lombok.Getter;

View File

@ -1,9 +1,8 @@
package eu.csc.personalapp.services.rest.data;
package eu.csc.vehown.services.rest.data;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import retrofit2.http.GET;
import java.io.Serializable;

View File

@ -1,9 +1,8 @@
package eu.csc.personalapp.services.rest.data;
package eu.csc.vehown.services.rest.data;
import com.google.gson.annotations.SerializedName;
import eu.csc.personalapp.data.model.IAppointment;
import eu.csc.personalapp.data.model.IVehicleSystem;
import eu.csc.personalapp.data.model.TreatmentPlan;
import eu.csc.vehown.data.model.IAppointment;
import eu.csc.vehown.data.model.IVehicleSystem;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

View File

@ -1,6 +1,5 @@
package eu.csc.personalapp.services.rest.data;
package eu.csc.vehown.services.rest.data;
import com.google.gson.annotations.SerializedName;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

View File

@ -1,4 +1,4 @@
package eu.csc.personalapp.services.rest.data;
package eu.csc.vehown.services.rest.data;
import lombok.Getter;
import lombok.NoArgsConstructor;

View File

@ -1,4 +1,4 @@
package eu.csc.personalapp.services.serialization;
package eu.csc.vehown.services.serialization;
import java.lang.reflect.Type;
import java.util.Date;
@ -11,12 +11,6 @@ import com.google.gson.JsonParseException;
import com.google.gson.JsonPrimitive;
import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer;
import com.google.gson.reflect.TypeToken;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import java.util.Date;
public class JSONHelper {

View File

@ -1,6 +1,6 @@
package eu.csc.personalapp.services.storage;
package eu.csc.vehown.services.storage;
import eu.csc.personalapp.data.model.LoggedInUser;
import eu.csc.vehown.data.model.LoggedInUser;
public interface LocalStorageClient {

View File

@ -1,13 +1,12 @@
package eu.csc.personalapp.services.storage;
package eu.csc.vehown.services.storage;
import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import eu.csc.personalapp.R;
import eu.csc.personalapp.data.model.LoggedInUser;
import eu.csc.personalapp.services.serialization.JSONHelper;
import eu.csc.vehown.R;
import eu.csc.vehown.data.model.LoggedInUser;
import eu.csc.vehown.services.serialization.JSONHelper;
import java.io.File;

View File

@ -1,4 +1,4 @@
package eu.csc.personalapp.services.storage;
package eu.csc.vehown.services.storage;
import android.app.Activity;
import android.content.Context;

View File

@ -1,4 +1,4 @@
package eu.csc.personalapp.ugp;
package eu.csc.vehown.ugp;
import android.content.Context;
import android.net.nsd.NsdManager;

View File

@ -0,0 +1,164 @@
package eu.csc.vehown.ugp;
import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.Handler;
import android.os.IBinder;
import android.os.Looper;
import androidx.appcompat.app.AppCompatActivity;
import asn.GTDF.DtcInfo;
import asn.GTDF.IdentifierType;
import asn.GTP.ActionType;
import asn.GTP.SessionType;
import eu.csc.data.IDataConsts;
import eu.csc.gtdm.ConfigException;
import eu.csc.gtdm.ConfigProvider;
import eu.csc.gtdm.GTException;
import eu.csc.gtp.IGTPCnfNegative;
import eu.csc.gtp.IGTPCnfPositive;
import eu.csc.gtp.IGTPCnfPublishDtc;
import eu.csc.log.CSCLog;
import eu.csc.log.CSCLogFactory;
import eu.csc.vehown.data.model.Event;
import eu.csc.vehown.services.notifications.NotificationService;
import eu.csc.vehown.ui.modal.Helper;
import eu.csc.ugp.UGPClient;
import java.io.File;
import java.util.List;
import java.util.Locale;
import static eu.csc.vehown.ui.modal.Helper.errorDialog;
public class UGPService extends Service implements IDataConsts, Runnable {
public static final String HOST = "host";
private static final CSCLog LOG = CSCLogFactory.getLog(UGPService.class);
private final String vehicle;
private final String certName;
private final String leaseToken;
private final Locale locale;
private final IBinder binder = new LocalBinder(); // Binder given to clients
private AppCompatActivity activity;
private String host;
private Handler handler;
private ConfigProvider cp;
private UGPClient ugpClient;
public UGPService() {
certName = "Diagnostic-OwnerInfo";
leaseToken = "super-11112222";
locale = Locale.ENGLISH;
vehicle = "Dodge Charger";
}
// Class used for the client Binder.
public class LocalBinder extends Binder {
UGPService getService() {
// Return this instance of MyService so clients can call public methods
return UGPService.this;
}
}
@Override
public IBinder onBind(Intent intent) {
return binder;
}
public void setActivity(AppCompatActivity activity) {
this.activity = activity;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
/*int ret = */super.onStartCommand(intent, flags, startId);
host = intent.getStringExtra(HOST);
NotificationService.getInstance().createUGPServiceNotification(this, this);
handler = new Handler(Looper.getMainLooper());
new Thread(this, getClass().getSimpleName()).start();
//do heavy work on a background thread
//stopSelf();
return START_NOT_STICKY; //TODO -> START_REDELIVER_INTENT
}
@Override
public void run() {
System.setProperty("gtdm.odp", this.getExternalFilesDir(null).getAbsolutePath());
cp = ConfigProvider.get();
try {
cp.readGeneralConfigs(false);
File dirCerts = new File(cp.getDirCurrent(), "certs");
ugpClient = new UGPClient(dirCerts, certName, host, PORT_UGP, 0);
ugpClient.startIt(null);
ugpClient.setNegativeCnf(negativeCnf);
ugpClient.sendManageSessionReq(SessionType.vehOwnAuth, ActionType.enable, leaseToken, null, manageSessionCnf);
} catch (GTException | ConfigException e) {
LOG.error(e.getMessage(), e);
errorDialog(handler, activity, e, leaveActivity);
}
}
@Override
public void onDestroy() {
NsdHelper.unregisterListener(getApplicationContext());
super.onDestroy();
}
private final IGTPCnfNegative negativeCnf = new IGTPCnfNegative() {
@Override
public void negativeCnf(Integer csn, String messageName, GTException e) {
LOG.error(e.getMessage(), e);
errorDialog(handler, activity, e, leaveActivity);
}
};
private final IGTPCnfPositive manageSessionCnf = new IGTPCnfPositive() {
@Override
public void positiveCnf(Integer csn, String messageName) throws GTException {
ugpClient.sendSubscribeDtcInfoReq(3000, "", null, null, (Integer) null, false, null, allDtcsCnf);
}
};
private final IGTPCnfPublishDtc allDtcsCnf = new IGTPCnfPublishDtc() {
@Override
public void publishDtcInfoCnf(Integer csn, int count, List<DtcInfo> dtcInfo) throws GTException {
Event[] events = new Event[dtcInfo.size()];
int i = 0;
for (DtcInfo d : dtcInfo) {
events[i++] = createEvent(d);
}
//TODO persist events
NotificationService.getInstance().createEventsNotification(activity, events);
}
};
private final Helper.IDialogOkHandler leaveActivity = () -> {
//TODO
};
private Event createEvent(DtcInfo d) {
String id = cp.getDtcBaseName(locale, d.getDtcBaseId(), NameType.shortname);
Event e = new Event(id);
e.setId(id);
e.setDescription(cp.getDtcBaseName(Locale.ENGLISH, d.getDtcBaseId(), NameType.longname));
e.setEcu(cp.getName(locale, IdentifierType.ecu, d.getEcuId(), NameType.shortname));
e.setVehicle(vehicle);
e.setTimestamp(d.getTimestamp());
if (d.getStatus().getConfirmedDTC()) {
e.setStatus(Event.EventStatus.CONFIRMED);
e.setSeverity(Event.EventSeverity.HIGH);
} else if (d.getStatus().getPendingDTC()) {
e.setStatus(Event.EventStatus.PENDING);
e.setSeverity(Event.EventSeverity.MEDIUM);
} else if (d.getStatus().getPermanentDTC()) {
e.setStatus(Event.EventStatus.PERMANENT);
e.setSeverity(Event.EventSeverity.LOW);
} else {
e.setStatus(Event.EventStatus.UNDEFINED);
e.setSeverity(Event.EventSeverity.LOW);
}
return e;
}
}

View File

@ -1,17 +1,22 @@
package eu.csc.personalapp.ugp;
package eu.csc.vehown.ugp;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.app.Activity;
import android.content.*;
import android.net.nsd.NsdManager;
import android.net.nsd.NsdServiceInfo;
import android.net.wifi.WifiManager;
import android.os.IBinder;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.content.ContextCompat;
import eu.csc.log.CSCLog;
import eu.csc.log.CSCLogFactory;
public class WifiConnectedReceiver extends BroadcastReceiver {
public WifiConnectedReceiver(AppCompatActivity activity) {
this.activity = activity;
}
@Override
public void onReceive(Context context, Intent intent) {
this.context = context;
@ -29,10 +34,14 @@ public class WifiConnectedReceiver extends BroadcastReceiver {
private static final CSCLog LOG = CSCLogFactory.getLog(WifiConnectedReceiver.class);
private final AppCompatActivity activity;
private Context context;
private NsdManager nsdManager;
private NsdManager.DiscoveryListener discoveryListener;
private NsdManager.ResolveListener resolveListener;
private UGPService ugpService;
private boolean bound = false;
private NsdManager.DiscoveryListener initDiscoveryListener() {
if (discoveryListener != null) {
@ -111,11 +120,28 @@ public class WifiConnectedReceiver extends BroadcastReceiver {
LOG.debug("Resolve Succeeded, connect to " + serviceInfo);
}
Intent intent = new Intent(context, UGPService.class);
context.bindService(intent, serviceConnection, Context.BIND_AUTO_CREATE);
intent.putExtra(UGPService.HOST, serviceInfo.getHost().getHostAddress());
ContextCompat.startForegroundService(WifiConnectedReceiver.this.context, intent);
context.startActivity(intent);
}
};
}
}
/** Callbacks for service binding, passed to bindService() */
private ServiceConnection serviceConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName className, IBinder service) {
// cast the IBinder and get MyService instance
UGPService.LocalBinder binder = (UGPService.LocalBinder) service;
ugpService = binder.getService();
bound = true;
ugpService.setActivity(activity); // register
}
@Override
public void onServiceDisconnected(ComponentName arg0) {
bound = false;
}
};
}

View File

@ -1,4 +1,4 @@
package eu.csc.personalapp.ui.FailureEvent;
package eu.csc.vehown.ui.FailureEvent;
import android.os.Bundle;
import android.widget.ListView;
@ -8,8 +8,8 @@ import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import android.view.View;
import eu.csc.personalapp.R;
import eu.csc.personalapp.data.model.RepairShop;
import eu.csc.vehown.R;
import eu.csc.vehown.data.model.RepairShop;
import java.util.ArrayList;
import java.util.List;

View File

@ -1,4 +1,4 @@
package eu.csc.personalapp.ui.FailureEvent;
package eu.csc.vehown.ui.FailureEvent;
import android.content.Context;
import android.view.LayoutInflater;
@ -6,8 +6,8 @@ import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;
import eu.csc.personalapp.R;
import eu.csc.personalapp.data.model.RepairShop;
import eu.csc.vehown.R;
import eu.csc.vehown.data.model.RepairShop;
import java.util.ArrayList;
import java.util.List;

View File

@ -1,4 +1,4 @@
package eu.csc.personalapp.ui.login;
package eu.csc.vehown.ui.login;
/**
* Class exposing authenticated user details to the UI.

View File

@ -1,4 +1,4 @@
package eu.csc.personalapp.ui.login;
package eu.csc.vehown.ui.login;
import android.app.Activity;
import androidx.lifecycle.Observer;
@ -18,9 +18,7 @@ import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
import eu.csc.personalapp.R;
import eu.csc.personalapp.ui.login.LoginViewModel;
import eu.csc.personalapp.ui.login.LoginViewModelFactory;
import eu.csc.vehown.R;
public class LoginActivity extends AppCompatActivity {

View File

@ -1,4 +1,4 @@
package eu.csc.personalapp.ui.login;
package eu.csc.vehown.ui.login;
import androidx.annotation.Nullable;

View File

@ -1,4 +1,4 @@
package eu.csc.personalapp.ui.login;
package eu.csc.vehown.ui.login;
import androidx.annotation.Nullable;

View File

@ -1,14 +1,14 @@
package eu.csc.personalapp.ui.login;
package eu.csc.vehown.ui.login;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;
import android.util.Patterns;
import eu.csc.personalapp.data.LoginRepository;
import eu.csc.personalapp.data.Result;
import eu.csc.personalapp.data.model.LoggedInUser;
import eu.csc.personalapp.R;
import eu.csc.vehown.data.LoginRepository;
import eu.csc.vehown.data.Result;
import eu.csc.vehown.data.model.LoggedInUser;
import eu.csc.vehown.R;
public class LoginViewModel extends ViewModel {

View File

@ -1,11 +1,11 @@
package eu.csc.personalapp.ui.login;
package eu.csc.vehown.ui.login;
import androidx.lifecycle.ViewModel;
import androidx.lifecycle.ViewModelProvider;
import androidx.annotation.NonNull;
import eu.csc.personalapp.data.LoginDataSource;
import eu.csc.personalapp.data.LoginRepository;
import eu.csc.vehown.data.LoginDataSource;
import eu.csc.vehown.data.LoginRepository;
/**
* ViewModel provider factory to instantiate LoginViewModel.

View File

@ -1,38 +1,35 @@
package eu.csc.personalapp.ui.main;
package eu.csc.vehown.ui.main;
import android.Manifest;
import android.content.IntentFilter;
import android.content.pm.PackageManager;
import android.net.ConnectivityManager;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.StrictMode;
import android.view.Menu;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import com.google.android.material.navigation.NavigationView;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.drawerlayout.widget.DrawerLayout;
import androidx.navigation.NavController;
import androidx.navigation.Navigation;
import androidx.navigation.ui.AppBarConfiguration;
import androidx.navigation.ui.NavigationUI;
import androidx.drawerlayout.widget.DrawerLayout;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import eu.csc.personalapp.R;
import eu.csc.personalapp.broadcast.VehicleEventReceivedReceiver;
import eu.csc.personalapp.services.mqtt.MqttClient;
import eu.csc.personalapp.services.notifications.NotificationService;
import eu.csc.personalapp.ugp.WifiConnectedReceiver;
import java.util.ArrayList;
import com.google.android.material.navigation.NavigationView;
import eu.csc.log.CSCLog;
import eu.csc.log.CSCLog4jFactory;
import eu.csc.vehown.R;
import eu.csc.vehown.broadcast.VehicleEventReceivedReceiver;
import eu.csc.vehown.services.mqtt.MqttClient;
import eu.csc.vehown.services.notifications.NotificationService;
import eu.csc.vehown.ugp.WifiConnectedReceiver;
public class MainActivity extends AppCompatActivity {
private static final int PERMISSIONS_REQUESTED = 1;
// private static final int PERMISSIONS_REQUESTED = 1;
private static final String CONNECTIVITY_CHANGE = "android.net.conn.CONNECTIVITY_CHANGE";
private CSCLog log;
private Handler handler;
private AppBarConfiguration mAppBarConfiguration;
@Override
@ -40,13 +37,10 @@ public class MainActivity extends AppCompatActivity {
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
super.onCreate(savedInstanceState);
log = CSCLog4jFactory.initiate(this, getString(R.string.app_name).toLowerCase());
handler = new Handler(Looper.getMainLooper());
new NotificationService(this);
// checkPermissions(new String[]{
// Manifest.permission.WRITE_EXTERNAL_STORAGE,
// Manifest.permission.ACCESS_FINE_LOCATION,
// Manifest.permission.ACCESS_COARSE_LOCATION,
// Manifest.permission.CHANGE_WIFI_STATE}
// );
//checkPermissions(new String[] { Manifest.permission.WRITE_EXTERNAL_STORAGE } );
setContentView(R.layout.activity_main);
Toolbar toolbar = findViewById(R.id.toolbar);
@ -72,7 +66,8 @@ public class MainActivity extends AppCompatActivity {
private void setup() {
IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
filter.addAction(VehicleEventReceivedReceiver.EVENT_INTENT_NAME);
this.registerReceiver(new VehicleEventReceivedReceiver(), filter);
registerReceiver(new VehicleEventReceivedReceiver(), filter);
registerReceiver(new WifiConnectedReceiver(this), new IntentFilter(CONNECTIVITY_CHANGE));
}
@Override
@ -89,38 +84,36 @@ public class MainActivity extends AppCompatActivity {
|| super.onSupportNavigateUp();
}
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
switch (requestCode) {
case PERMISSIONS_REQUESTED:
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
checkPermissions(permissions); //again
}
return;
// other 'case' lines to check for other
// permissions this app might request
default:
break;
}
}
private void checkPermissions(String[] permissions) {
ArrayList<String> requestPermissions = new ArrayList<>();
for (String permission : permissions) {
if (ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED) {
requestPermissions.add(permission);
}
}
if (!requestPermissions.isEmpty()) {
ActivityCompat.requestPermissions(this, requestPermissions.toArray(new String[requestPermissions.size()]), PERMISSIONS_REQUESTED);
return;
}
onPermissionRequested();
}
public void onPermissionRequested() {
registerReceiver(new WifiConnectedReceiver(), new IntentFilter(CONNECTIVITY_CHANGE));
//TODO startup
}
// public void onRequestPermissionsResult(int requestCode, @NotNull String[] permissions, @NotNull int[] grantResults) {
// if (requestCode == PERMISSIONS_REQUESTED) {// If request is cancelled, the result arrays are empty.
// if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// checkPermissions(permissions); //again
// }
// // other 'case' lines to check for other
// // permissions this app might request
// }
// }
//
// private void checkPermissions(String[] permissions) {
// ArrayList<String> requestPermissions = new ArrayList<>();
// for (String permission : permissions) {
// if (ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED) {
// if (ActivityCompat.shouldShowRequestPermissionRationale(this, permission)) {
// Log.e("MainActivity", "Permission " + permission + " denied");
// }
// requestPermissions.add(permission);
// }
// }
// if (!requestPermissions.isEmpty()) {
// ActivityCompat.requestPermissions(this, requestPermissions.toArray(new String[0]), PERMISSIONS_REQUESTED);
// return;
// }
// onPermissionRequested();
// }
//
// public void onPermissionRequested() {
// registerReceiver(new WifiConnectedReceiver(), new IntentFilter(CONNECTIVITY_CHANGE));
// //TODO startup
// }
}

View File

@ -1,4 +1,4 @@
package eu.csc.personalapp.ui.main.dboard;
package eu.csc.vehown.ui.main.dboard;
import android.content.Intent;
import android.os.Build;
@ -10,15 +10,15 @@ import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
import androidx.fragment.app.Fragment;
import eu.csc.personalapp.R;
import eu.csc.personalapp.services.mqtt.MqttClient;
import eu.csc.personalapp.services.notifications.NotificationService;
import eu.csc.personalapp.services.persistence.ExampleDataClient;
import eu.csc.personalapp.services.persistence.PersistenceFactory;
import eu.csc.personalapp.ui.reportEvent.ReportEventActivity;
import eu.csc.personalapp.ui.svi.RegisterSVIActivity;
import eu.csc.personalapp.ui.svi.UploadLeaseActivity;
import eu.csc.personalapp.ui.tp.TreatmentPlanActivity;
import eu.csc.vehown.R;
import eu.csc.vehown.services.mqtt.MqttClient;
import eu.csc.vehown.services.notifications.NotificationService;
import eu.csc.vehown.services.persistence.ExampleDataClient;
import eu.csc.vehown.services.persistence.PersistenceFactory;
import eu.csc.vehown.ui.reportEvent.ReportEventActivity;
import eu.csc.vehown.ui.svi.RegisterSVIActivity;
import eu.csc.vehown.ui.svi.UploadLeaseActivity;
import eu.csc.vehown.ui.tp.TreatmentPlanActivity;
import java.time.Instant;

View File

@ -1,4 +1,4 @@
package eu.csc.personalapp.ui.main.dboard;
package eu.csc.vehown.ui.main.dboard;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;

View File

@ -1,4 +1,4 @@
package eu.csc.personalapp.ui.main.dwev;
package eu.csc.vehown.ui.main.dwev;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;

View File

@ -1,4 +1,4 @@
package eu.csc.personalapp.ui.main.dwev;
package eu.csc.vehown.ui.main.dwev;
import android.os.Bundle;
import android.view.LayoutInflater;
@ -12,7 +12,7 @@ import androidx.fragment.app.Fragment;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProvider;
import eu.csc.personalapp.R;
import eu.csc.vehown.R;
public class DownloadedEventsFragment extends Fragment {

View File

@ -1,4 +1,4 @@
package eu.csc.personalapp.ui.main.repev;
package eu.csc.vehown.ui.main.repev;
import android.os.Bundle;
import android.view.LayoutInflater;
@ -12,7 +12,7 @@ import androidx.fragment.app.Fragment;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProvider;
import eu.csc.personalapp.R;
import eu.csc.vehown.R;
public class ReportedEventsFragment extends Fragment {

View File

@ -1,4 +1,4 @@
package eu.csc.personalapp.ui.main.repev;
package eu.csc.vehown.ui.main.repev;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;

View File

@ -1,4 +1,4 @@
package eu.csc.personalapp.ui.modal;
package eu.csc.vehown.ui.modal;
import android.annotation.SuppressLint;
import android.app.Activity;
@ -13,32 +13,35 @@ import android.provider.DocumentsContract;
import android.provider.MediaStore;
import androidx.annotation.DrawableRes;
import androidx.appcompat.app.AlertDialog;
import eu.csc.personalapp.R;
import eu.csc.vehown.R;
import org.jetbrains.annotations.NotNull;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
public abstract class Helper {
public static void errorDialog(Handler handler, Activity activity, Exception e, IDialogOkHandler okHandler) {
dialog(handler, activity, R.drawable.ic_dlg_warning, "Error", e.getMessage(), okHandler);
public static void errorDialog(@NotNull Handler handler, @NotNull Context context, @NotNull Exception e, IDialogOkHandler okHandler) {
dialog(handler, context, R.drawable.ic_dlg_warning, "Error", e.getMessage(), okHandler);
}
public static void pause(long millis) {
try { Thread.sleep(millis); } catch (InterruptedException e) {}
}
public static void dialog(Handler handler, Activity activity, @DrawableRes int iconId, String title, String message, IDialogOkHandler okHandler) {
public static void dialog(@NotNull Handler handler, @NotNull Context context, @DrawableRes int iconId, @NotNull String title, @NotNull String message, IDialogOkHandler okHandler) {
handler.post(() -> {
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
AlertDialog.Builder builder = new AlertDialog.Builder(context);
AlertDialog alertDialog = builder.create();
alertDialog.setIcon(iconId);
alertDialog.setTitle(title);
alertDialog.setMessage(message);
alertDialog.setButton(AlertDialog.BUTTON_POSITIVE, "OK", (dialog, which) -> { dialog.dismiss(); okHandler.onOk(); });
alertDialog.setButton(AlertDialog.BUTTON_POSITIVE, "OK", (dialog, which) -> {
dialog.dismiss();
if (okHandler != null) okHandler.onOk();
});
alertDialog.show();
});
}

Some files were not shown because too many files have changed in this diff Show More