From 2d3cb9c5d5ec27a64e0ba75d0de2de2da0c88fc5 Mon Sep 17 00:00:00 2001
From: GrapixLeGrand <38352876+GrapixLeGrand@users.noreply.github.com>
Date: Tue, 27 Apr 2021 12:37:33 +0200
Subject: [PATCH 1/4] added first try
---
app/src/main/AndroidManifest.xml | 16 +++---
.../java/ch/epfl/sdp/appart/MainActivity.java | 4 +-
.../epfl/sdp/appart/datapass/Activity1.java | 46 +++++++++++++++++
.../epfl/sdp/appart/datapass/Activity2.java | 32 ++++++++++++
.../sdp/appart/datapass/DataContainer.java | 20 ++++++++
.../sdp/appart/datapass/DataTransfer.java | 49 +++++++++++++++++++
.../epfl/sdp/appart/hilt/TransferModule.java | 33 +++++++++++++
app/src/main/res/layout/activity_1.xml | 30 ++++++++++++
app/src/main/res/layout/activity_2.xml | 30 ++++++++++++
app/src/main/res/values/strings.xml | 4 +-
10 files changed, 253 insertions(+), 11 deletions(-)
create mode 100644 app/src/main/java/ch/epfl/sdp/appart/datapass/Activity1.java
create mode 100644 app/src/main/java/ch/epfl/sdp/appart/datapass/Activity2.java
create mode 100644 app/src/main/java/ch/epfl/sdp/appart/datapass/DataContainer.java
create mode 100644 app/src/main/java/ch/epfl/sdp/appart/datapass/DataTransfer.java
create mode 100644 app/src/main/java/ch/epfl/sdp/appart/hilt/TransferModule.java
create mode 100644 app/src/main/res/layout/activity_1.xml
create mode 100644 app/src/main/res/layout/activity_2.xml
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 60ea6ff5c..62e94c729 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -2,8 +2,8 @@
-
-
+
+
@@ -17,11 +17,12 @@
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
-
+
+
-
-
+
@@ -44,10 +45,9 @@
-
-
+
\ No newline at end of file
diff --git a/app/src/main/java/ch/epfl/sdp/appart/MainActivity.java b/app/src/main/java/ch/epfl/sdp/appart/MainActivity.java
index 834c56cc5..7b0d8d295 100644
--- a/app/src/main/java/ch/epfl/sdp/appart/MainActivity.java
+++ b/app/src/main/java/ch/epfl/sdp/appart/MainActivity.java
@@ -6,6 +6,8 @@
import android.util.Log;
import androidx.appcompat.app.AppCompatActivity;
+import ch.epfl.sdp.appart.datapass.Activity1;
+
/**
* The main UI class.
*/
@@ -17,7 +19,7 @@ protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Bundle extras = this.getIntent().getExtras();
- Intent intent = new Intent(this, LoginActivity.class);
+ Intent intent = new Intent(this, Activity1.class);
if(extras != null && extras.containsKey("email") && extras.containsKey("password")){
intent.putExtra("email", extras.getString("email"));
intent.putExtra("password", extras.getString("password"));
diff --git a/app/src/main/java/ch/epfl/sdp/appart/datapass/Activity1.java b/app/src/main/java/ch/epfl/sdp/appart/datapass/Activity1.java
new file mode 100644
index 000000000..2c8c41984
--- /dev/null
+++ b/app/src/main/java/ch/epfl/sdp/appart/datapass/Activity1.java
@@ -0,0 +1,46 @@
+package ch.epfl.sdp.appart.datapass;
+
+import androidx.appcompat.app.AppCompatActivity;
+import ch.epfl.sdp.appart.R;
+import dagger.hilt.android.AndroidEntryPoint;
+
+import android.content.Intent;
+import android.net.Uri;
+import android.os.Bundle;
+import android.view.View;
+import android.widget.Button;
+
+import java.util.List;
+
+import javax.inject.Inject;
+
+@AndroidEntryPoint
+public class Activity1 extends AppCompatActivity {
+
+ @Inject
+ DataTransfer transferService;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_1);
+ Button gotoActivity2Button = findViewById(R.id.goto_activity_2_button);
+ gotoActivity2Button.setOnClickListener(v -> {
+ Intent intent = new Intent(this, Activity2.class);
+ startActivity(intent);
+ });
+
+ transferService.registerContainerList(Activity1.class, Uri.class);
+ }
+
+ @Override
+ protected void onResume() {
+ super.onResume();
+ DataContainer> container = transferService.getRegisteredContainer(Activity1.class);
+ if (!container.isDirty()) {
+ List result = container.getData();
+ Uri r = result.get(0);
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/ch/epfl/sdp/appart/datapass/Activity2.java b/app/src/main/java/ch/epfl/sdp/appart/datapass/Activity2.java
new file mode 100644
index 000000000..78cebed83
--- /dev/null
+++ b/app/src/main/java/ch/epfl/sdp/appart/datapass/Activity2.java
@@ -0,0 +1,32 @@
+package ch.epfl.sdp.appart.datapass;
+
+import androidx.appcompat.app.AppCompatActivity;
+
+import android.net.Uri;
+import android.os.Bundle;
+
+import java.util.Arrays;
+import java.util.List;
+
+import javax.inject.Inject;
+
+import ch.epfl.sdp.appart.R;
+import dagger.hilt.android.AndroidEntryPoint;
+
+@AndroidEntryPoint
+public class Activity2 extends AppCompatActivity {
+
+ @Inject
+ DataTransfer transferService;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_2);
+
+ DataContainer> container = transferService.getRegisteredContainer(Activity1.class);
+ List uris = Arrays.asList(Uri.parse("abc"), Uri.parse("1234"), Uri.parse("coucou"));
+ container.setData(uris);
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/ch/epfl/sdp/appart/datapass/DataContainer.java b/app/src/main/java/ch/epfl/sdp/appart/datapass/DataContainer.java
new file mode 100644
index 000000000..ba4ebcb03
--- /dev/null
+++ b/app/src/main/java/ch/epfl/sdp/appart/datapass/DataContainer.java
@@ -0,0 +1,20 @@
+package ch.epfl.sdp.appart.datapass;
+
+public class DataContainer {
+ private T data;
+ private boolean isDirty = true;
+ public void setData(T data) {
+ this.data = data;
+ isDirty = false;
+ }
+ public T getData() {
+ if (isDirty) {
+ throw new IllegalStateException("container is in dirty state");
+ }
+ isDirty = true;
+ return data;
+ }
+ public boolean isDirty() {
+ return isDirty;
+ }
+}
diff --git a/app/src/main/java/ch/epfl/sdp/appart/datapass/DataTransfer.java b/app/src/main/java/ch/epfl/sdp/appart/datapass/DataTransfer.java
new file mode 100644
index 000000000..665c63be3
--- /dev/null
+++ b/app/src/main/java/ch/epfl/sdp/appart/datapass/DataTransfer.java
@@ -0,0 +1,49 @@
+package ch.epfl.sdp.appart.datapass;
+
+import org.jetbrains.annotations.NotNull;
+
+import java.util.HashMap;
+import java.util.List;
+
+import javax.inject.Inject;
+import javax.inject.Singleton;
+
+@Singleton
+public class DataTransfer {
+
+ private HashMap> map = new HashMap<>();
+
+ @Inject
+ public DataTransfer() {}
+
+ public void registerContainer(@NotNull Class source, @NotNull Class dataType) {
+ DataContainer emptyContainer = new DataContainer<>();
+ map.put(source.getCanonicalName(), emptyContainer);
+ }
+
+ public void registerContainerList(@NotNull Class source, @NotNull Class dataType) {
+ DataContainer> emptyContainer = new DataContainer<>();
+ map.put(source.getCanonicalName(), emptyContainer);
+ }
+
+ public DataContainer getRegisteredContainer(@NotNull Class source) {
+
+ if (!map.containsKey(source.getCanonicalName())) {
+ throw new IllegalStateException("the class must be registered");
+ }
+
+ if (map.get(source.getCanonicalName()) == null) {
+ throw new IllegalStateException("the registered container cannot be null");
+ }
+
+ DataContainer result;
+ try {
+ result = (DataContainer) map.get(source.getCanonicalName());
+ } catch (ClassCastException e) {
+ throw new IllegalStateException("failed to cast the generic buffer");
+ }
+
+ return result;
+ }
+
+}
diff --git a/app/src/main/java/ch/epfl/sdp/appart/hilt/TransferModule.java b/app/src/main/java/ch/epfl/sdp/appart/hilt/TransferModule.java
new file mode 100644
index 000000000..bb24a29d6
--- /dev/null
+++ b/app/src/main/java/ch/epfl/sdp/appart/hilt/TransferModule.java
@@ -0,0 +1,33 @@
+package ch.epfl.sdp.appart.hilt;
+
+import android.content.Context;
+
+import com.google.android.gms.location.FusedLocationProviderClient;
+import com.google.android.gms.location.LocationServices;
+
+import javax.inject.Singleton;
+
+import ch.epfl.sdp.appart.datapass.DataTransfer;
+import dagger.Binds;
+import dagger.Module;
+import dagger.Provides;
+import dagger.hilt.InstallIn;
+import dagger.hilt.android.qualifiers.ApplicationContext;
+import dagger.hilt.components.SingletonComponent;
+
+@Module
+@InstallIn(SingletonComponent.class)
+public abstract class TransferModule {
+
+ /*
+ @Singleton
+ @Binds
+ public abstract DataTransfer bindTransferService(DataTransfer transferService);
+ */
+
+ @Singleton
+ @Provides
+ public static DataTransfer provideLocationProvider(@ApplicationContext Context context) {
+ return new DataTransfer();
+ }
+}
diff --git a/app/src/main/res/layout/activity_1.xml b/app/src/main/res/layout/activity_1.xml
new file mode 100644
index 000000000..7c8e53fca
--- /dev/null
+++ b/app/src/main/res/layout/activity_1.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_2.xml b/app/src/main/res/layout/activity_2.xml
new file mode 100644
index 000000000..d92e7a0e0
--- /dev/null
+++ b/app/src/main/res/layout/activity_2.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 8669debce..c0f584fb9 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -107,7 +107,7 @@
Open page for creating an ad
-
+
Confirm
@@ -116,7 +116,7 @@
Load previous image
Load next image
There was an error loading the image, please try again later.
-
+
Permission granted
Permission refused
From 3514176bb8c466fdac017cebbcf0d719280b3808 Mon Sep 17 00:00:00 2001
From: GrapixLeGrand <38352876+GrapixLeGrand@users.noreply.github.com>
Date: Tue, 27 Apr 2021 14:32:07 +0200
Subject: [PATCH 2/4] added progress
---
.../epfl/sdp/appart/datapass/Activity1.java | 39 +++++++++++--
.../epfl/sdp/appart/datapass/Activity2.java | 24 ++++++--
.../sdp/appart/datapass/GenericTransfer.java | 38 +++++++++++++
.../sdp/appart/hilt/GenericInjectModule.java | 55 +++++++++++++++++++
.../epfl/sdp/appart/hilt/TransferModule.java | 2 +-
.../IntegerDataTransferProvider.java | 12 ++++
.../StringDataTransferProvider.java | 10 ++++
.../UriListDataTransferProvider.java | 10 ++++
8 files changed, 180 insertions(+), 10 deletions(-)
create mode 100644 app/src/main/java/ch/epfl/sdp/appart/datapass/GenericTransfer.java
create mode 100644 app/src/main/java/ch/epfl/sdp/appart/hilt/GenericInjectModule.java
create mode 100644 app/src/main/java/ch/epfl/sdp/appart/hilt/annotations/IntegerDataTransferProvider.java
create mode 100644 app/src/main/java/ch/epfl/sdp/appart/hilt/annotations/StringDataTransferProvider.java
create mode 100644 app/src/main/java/ch/epfl/sdp/appart/hilt/annotations/UriListDataTransferProvider.java
diff --git a/app/src/main/java/ch/epfl/sdp/appart/datapass/Activity1.java b/app/src/main/java/ch/epfl/sdp/appart/datapass/Activity1.java
index 2c8c41984..7d4cd3284 100644
--- a/app/src/main/java/ch/epfl/sdp/appart/datapass/Activity1.java
+++ b/app/src/main/java/ch/epfl/sdp/appart/datapass/Activity1.java
@@ -2,6 +2,9 @@
import androidx.appcompat.app.AppCompatActivity;
import ch.epfl.sdp.appart.R;
+import ch.epfl.sdp.appart.hilt.annotations.IntegerDataTransferProvider;
+import ch.epfl.sdp.appart.hilt.annotations.StringDataTransferProvider;
+import ch.epfl.sdp.appart.hilt.annotations.UriListDataTransferProvider;
import dagger.hilt.android.AndroidEntryPoint;
import android.content.Intent;
@@ -17,8 +20,20 @@
@AndroidEntryPoint
public class Activity1 extends AppCompatActivity {
+ //@Inject
+ //DataTransfer transferService;
+
+ @IntegerDataTransferProvider
+ @Inject
+ GenericTransfer integerTransfer;
+
+ @StringDataTransferProvider
+ @Inject
+ GenericTransfer stringTransfer;
+
+ @UriListDataTransferProvider
@Inject
- DataTransfer transferService;
+ GenericTransfer> uriListTransfer;
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -30,16 +45,30 @@ protected void onCreate(Bundle savedInstanceState) {
startActivity(intent);
});
- transferService.registerContainerList(Activity1.class, Uri.class);
+ integerTransfer.registerContainer(Activity1.class);
+ stringTransfer.registerContainer(Activity1.class);
+
+ //transferService.registerContainerList(Activity1.class, Uri.class);
}
@Override
protected void onResume() {
super.onResume();
- DataContainer> container = transferService.getRegisteredContainer(Activity1.class);
+
+ DataContainer container = integerTransfer.getRegisteredContainer(Activity1.class);
if (!container.isDirty()) {
- List result = container.getData();
- Uri r = result.get(0);
+ int a = container.getData();
+ int b = 0;
+ //List result = container.getData();
+ //Uri r = result.get(0);
+ }
+
+ DataContainer container2 = stringTransfer.getRegisteredContainer(Activity1.class);
+ if (!container2.isDirty()) {
+ String hello = container2.getData();
+ int a = 0;
+ //List result = container.getData();
+ //Uri r = result.get(0);
}
}
diff --git a/app/src/main/java/ch/epfl/sdp/appart/datapass/Activity2.java b/app/src/main/java/ch/epfl/sdp/appart/datapass/Activity2.java
index 78cebed83..6f5693974 100644
--- a/app/src/main/java/ch/epfl/sdp/appart/datapass/Activity2.java
+++ b/app/src/main/java/ch/epfl/sdp/appart/datapass/Activity2.java
@@ -11,22 +11,38 @@
import javax.inject.Inject;
import ch.epfl.sdp.appart.R;
+import ch.epfl.sdp.appart.hilt.annotations.IntegerDataTransferProvider;
+import ch.epfl.sdp.appart.hilt.annotations.StringDataTransferProvider;
import dagger.hilt.android.AndroidEntryPoint;
@AndroidEntryPoint
public class Activity2 extends AppCompatActivity {
+ //@Inject
+ //DataTransfer transferService;
+
+ @IntegerDataTransferProvider
+ @Inject
+ GenericTransfer integerTransfer;
+
+ @StringDataTransferProvider
@Inject
- DataTransfer transferService;
+ GenericTransfer stringTransfer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_2);
- DataContainer> container = transferService.getRegisteredContainer(Activity1.class);
- List uris = Arrays.asList(Uri.parse("abc"), Uri.parse("1234"), Uri.parse("coucou"));
- container.setData(uris);
+ DataContainer container = integerTransfer.getRegisteredContainer(Activity1.class);
+ container.setData(1);
+
+ DataContainer container2 = stringTransfer.getRegisteredContainer(Activity1.class);
+ container2.setData("coucou !");
+
+ //DataContainer> container = transferService.getRegisteredContainer(Activity1.class);
+ //List uris = Arrays.asList(Uri.parse("abc"), Uri.parse("1234"), Uri.parse("coucou"));
+ //container.setData(uris);
}
}
\ No newline at end of file
diff --git a/app/src/main/java/ch/epfl/sdp/appart/datapass/GenericTransfer.java b/app/src/main/java/ch/epfl/sdp/appart/datapass/GenericTransfer.java
new file mode 100644
index 000000000..a749016d7
--- /dev/null
+++ b/app/src/main/java/ch/epfl/sdp/appart/datapass/GenericTransfer.java
@@ -0,0 +1,38 @@
+package ch.epfl.sdp.appart.datapass;
+
+import org.jetbrains.annotations.NotNull;
+
+import java.util.HashMap;
+import java.util.List;
+
+import javax.inject.Inject;
+import javax.inject.Singleton;
+
+@Singleton
+public class GenericTransfer {
+
+ private HashMap> map = new HashMap<>();
+
+ @Inject
+ public GenericTransfer() {}
+
+ public void registerContainer(@NotNull Class source) {
+ DataContainer emptyContainer = new DataContainer<>();
+ map.put(source.getCanonicalName(), emptyContainer);
+ }
+
+ public DataContainer getRegisteredContainer(@NotNull Class source) {
+
+ if (!map.containsKey(source.getCanonicalName())) {
+ throw new IllegalStateException("the class must be registered");
+ }
+
+ if (map.get(source.getCanonicalName()) == null) {
+ throw new IllegalStateException("the registered container cannot be null");
+ }
+
+ DataContainer result = map.get(source.getCanonicalName());
+ return result;
+ }
+
+}
diff --git a/app/src/main/java/ch/epfl/sdp/appart/hilt/GenericInjectModule.java b/app/src/main/java/ch/epfl/sdp/appart/hilt/GenericInjectModule.java
new file mode 100644
index 000000000..8eb099e0e
--- /dev/null
+++ b/app/src/main/java/ch/epfl/sdp/appart/hilt/GenericInjectModule.java
@@ -0,0 +1,55 @@
+package ch.epfl.sdp.appart.hilt;
+
+import android.content.Context;
+import android.net.Uri;
+
+
+import java.util.List;
+
+import javax.inject.Singleton;
+
+import ch.epfl.sdp.appart.datapass.GenericTransfer;
+import ch.epfl.sdp.appart.hilt.annotations.IntegerDataTransferProvider;
+import ch.epfl.sdp.appart.hilt.annotations.StringDataTransferProvider;
+import ch.epfl.sdp.appart.hilt.annotations.UriListDataTransferProvider;
+import dagger.Module;
+import dagger.Provides;
+import dagger.hilt.InstallIn;
+import dagger.hilt.android.qualifiers.ApplicationContext;
+import dagger.hilt.components.SingletonComponent;
+
+
+
+@Module
+@InstallIn(SingletonComponent.class)
+public abstract class GenericInjectModule {
+
+ /*
+ @Singleton
+ @Binds
+ public abstract DataTransfer bindTransferService(DataTransfer transferService);
+ */
+
+
+ @IntegerDataTransferProvider
+ @Singleton
+ @Provides
+ public static GenericTransfer provideDataTransferService(@ApplicationContext Context context) {
+ return new GenericTransfer<>();
+ }
+
+ @StringDataTransferProvider
+ @Singleton
+ @Provides
+ public static GenericTransfer provideOtherDataTransferService(@ApplicationContext Context context) {
+ return new GenericTransfer<>();
+ }
+
+ @UriListDataTransferProvider
+ @Singleton
+ @Provides
+ public static GenericTransfer> provideUriList(@ApplicationContext Context context) {
+ return new GenericTransfer<>();
+ }
+
+}
diff --git a/app/src/main/java/ch/epfl/sdp/appart/hilt/TransferModule.java b/app/src/main/java/ch/epfl/sdp/appart/hilt/TransferModule.java
index bb24a29d6..b07c15a86 100644
--- a/app/src/main/java/ch/epfl/sdp/appart/hilt/TransferModule.java
+++ b/app/src/main/java/ch/epfl/sdp/appart/hilt/TransferModule.java
@@ -27,7 +27,7 @@ public abstract class TransferModule {
@Singleton
@Provides
- public static DataTransfer provideLocationProvider(@ApplicationContext Context context) {
+ public static DataTransfer provideDataTransferService(@ApplicationContext Context context) {
return new DataTransfer();
}
}
diff --git a/app/src/main/java/ch/epfl/sdp/appart/hilt/annotations/IntegerDataTransferProvider.java b/app/src/main/java/ch/epfl/sdp/appart/hilt/annotations/IntegerDataTransferProvider.java
new file mode 100644
index 000000000..94233d7d9
--- /dev/null
+++ b/app/src/main/java/ch/epfl/sdp/appart/hilt/annotations/IntegerDataTransferProvider.java
@@ -0,0 +1,12 @@
+package ch.epfl.sdp.appart.hilt.annotations;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Retention(RetentionPolicy.RUNTIME)
+public @interface IntegerDataTransferProvider {}
+
+
diff --git a/app/src/main/java/ch/epfl/sdp/appart/hilt/annotations/StringDataTransferProvider.java b/app/src/main/java/ch/epfl/sdp/appart/hilt/annotations/StringDataTransferProvider.java
new file mode 100644
index 000000000..d5070edf3
--- /dev/null
+++ b/app/src/main/java/ch/epfl/sdp/appart/hilt/annotations/StringDataTransferProvider.java
@@ -0,0 +1,10 @@
+package ch.epfl.sdp.appart.hilt.annotations;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Retention(RetentionPolicy.RUNTIME)
+public @interface StringDataTransferProvider {}
\ No newline at end of file
diff --git a/app/src/main/java/ch/epfl/sdp/appart/hilt/annotations/UriListDataTransferProvider.java b/app/src/main/java/ch/epfl/sdp/appart/hilt/annotations/UriListDataTransferProvider.java
new file mode 100644
index 000000000..3f3a6d004
--- /dev/null
+++ b/app/src/main/java/ch/epfl/sdp/appart/hilt/annotations/UriListDataTransferProvider.java
@@ -0,0 +1,10 @@
+package ch.epfl.sdp.appart.hilt.annotations;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Retention(RetentionPolicy.RUNTIME)
+public @interface UriListDataTransferProvider {}
From a665b47f61ffde3db946caa7b327133f98d37427 Mon Sep 17 00:00:00 2001
From: GrapixLeGrand <38352876+GrapixLeGrand@users.noreply.github.com>
Date: Tue, 27 Apr 2021 18:44:29 +0200
Subject: [PATCH 3/4] added progress
---
app/src/main/AndroidManifest.xml | 4 +-
.../java/ch/epfl/sdp/appart/MainActivity.java | 3 +-
.../ch/epfl/sdp/appart/databus/Activity1.java | 69 ++++++++++++++++
.../ch/epfl/sdp/appart/databus/Activity2.java | 57 +++++++++++++
.../databus/ActivityMutableDataBus.java | 47 +++++++++++
.../ch/epfl/sdp/appart/databus/DataBus.java | 36 +++++++++
.../sdp/appart/databus/ExclusiveDataBus.java | 79 +++++++++++++++++++
.../epfl/sdp/appart/datapass/Activity1.java | 75 ------------------
.../epfl/sdp/appart/datapass/Activity2.java | 48 -----------
.../sdp/appart/datapass/DataContainer.java | 20 -----
.../sdp/appart/datapass/DataTransfer.java | 49 ------------
.../sdp/appart/datapass/GenericTransfer.java | 38 ---------
.../sdp/appart/hilt/ActivityBusModule.java | 46 +++++++++++
.../hilt/ActivityMutableDataBusModule.java | 26 ++++++
.../sdp/appart/hilt/GenericInjectModule.java | 55 -------------
.../epfl/sdp/appart/hilt/TransferModule.java | 33 --------
...nsferProvider.java => IntegerDataBus.java} | 4 +-
...ansferProvider.java => StringDataBus.java} | 2 +-
...rovider.java => StringMutableDataBus.java} | 4 +-
.../hilt/annotations/UriListDataBus.java | 10 +++
app/src/main/res/layout/activity_1.xml | 2 +-
app/src/main/res/layout/activity_2.xml | 2 +-
22 files changed, 380 insertions(+), 329 deletions(-)
create mode 100644 app/src/main/java/ch/epfl/sdp/appart/databus/Activity1.java
create mode 100644 app/src/main/java/ch/epfl/sdp/appart/databus/Activity2.java
create mode 100644 app/src/main/java/ch/epfl/sdp/appart/databus/ActivityMutableDataBus.java
create mode 100644 app/src/main/java/ch/epfl/sdp/appart/databus/DataBus.java
create mode 100644 app/src/main/java/ch/epfl/sdp/appart/databus/ExclusiveDataBus.java
delete mode 100644 app/src/main/java/ch/epfl/sdp/appart/datapass/Activity1.java
delete mode 100644 app/src/main/java/ch/epfl/sdp/appart/datapass/Activity2.java
delete mode 100644 app/src/main/java/ch/epfl/sdp/appart/datapass/DataContainer.java
delete mode 100644 app/src/main/java/ch/epfl/sdp/appart/datapass/DataTransfer.java
delete mode 100644 app/src/main/java/ch/epfl/sdp/appart/datapass/GenericTransfer.java
create mode 100644 app/src/main/java/ch/epfl/sdp/appart/hilt/ActivityBusModule.java
create mode 100644 app/src/main/java/ch/epfl/sdp/appart/hilt/ActivityMutableDataBusModule.java
delete mode 100644 app/src/main/java/ch/epfl/sdp/appart/hilt/GenericInjectModule.java
delete mode 100644 app/src/main/java/ch/epfl/sdp/appart/hilt/TransferModule.java
rename app/src/main/java/ch/epfl/sdp/appart/hilt/annotations/{StringDataTransferProvider.java => IntegerDataBus.java} (81%)
rename app/src/main/java/ch/epfl/sdp/appart/hilt/annotations/{UriListDataTransferProvider.java => StringDataBus.java} (81%)
rename app/src/main/java/ch/epfl/sdp/appart/hilt/annotations/{IntegerDataTransferProvider.java => StringMutableDataBus.java} (80%)
create mode 100644 app/src/main/java/ch/epfl/sdp/appart/hilt/annotations/UriListDataBus.java
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 62e94c729..c7c9d9b5c 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -17,8 +17,8 @@
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
-
-
+
+
integerBus;
+
+ @StringDataBus
+ @Inject
+ DataBus stringBus;
+
+ @UriListDataBus
+ @Inject
+ DataBus> uriListBus;
+
+ @StringMutableDataBus
+ @Inject
+ ActivityMutableDataBus stringMutableDataBus;
+
+ private MutableLiveData stringMutableData;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_1);
+ Button gotoActivity2Button = findViewById(R.id.goto_activity_2_button);
+
+ //we fill the busses with non-trivial data
+ integerBus.setData(1234);
+ stringBus.setData("coucou !");
+ uriListBus.setData(Arrays.asList(Uri.parse("abc"), Uri.parse("1234"), Uri.parse("cool")));
+
+ //setting ownership of the bus by Activity1
+ stringMutableDataBus.bind(Activity1.class, stringMutableData);
+
+ gotoActivity2Button.setOnClickListener(v -> {
+ Intent intent = new Intent(this, Activity2.class);
+ startActivity(intent);
+ });
+
+ }
+
+ @Override
+ protected void onResume() {
+ super.onResume();
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/ch/epfl/sdp/appart/databus/Activity2.java b/app/src/main/java/ch/epfl/sdp/appart/databus/Activity2.java
new file mode 100644
index 000000000..10f803fba
--- /dev/null
+++ b/app/src/main/java/ch/epfl/sdp/appart/databus/Activity2.java
@@ -0,0 +1,57 @@
+package ch.epfl.sdp.appart.databus;
+
+import androidx.appcompat.app.AppCompatActivity;
+
+import android.net.Uri;
+import android.os.Bundle;
+
+import java.util.List;
+
+import javax.inject.Inject;
+
+import ch.epfl.sdp.appart.R;
+import ch.epfl.sdp.appart.hilt.annotations.IntegerDataBus;
+import ch.epfl.sdp.appart.hilt.annotations.StringDataBus;
+import ch.epfl.sdp.appart.hilt.annotations.StringMutableDataBus;
+import ch.epfl.sdp.appart.hilt.annotations.UriListDataBus;
+import dagger.hilt.android.AndroidEntryPoint;
+
+@AndroidEntryPoint
+public class Activity2 extends AppCompatActivity {
+
+ /**
+ * Bellow we declare the bus we want to use
+ */
+
+ @IntegerDataBus
+ @Inject
+ DataBus integerBus;
+
+ @StringDataBus
+ @Inject
+ DataBus stringBus;
+
+ @UriListDataBus
+ @Inject
+ DataBus> uriListBus;
+
+ @StringMutableDataBus
+ @Inject
+ ActivityMutableDataBus stringMutableDataBus;
+
+ private Integer a;
+ private String b;
+ private List c;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_2);
+
+ //we retrieve the data sent by activity 1
+ a = integerBus.getData();
+ b = stringBus.getData();
+ c = uriListBus.getData();
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/ch/epfl/sdp/appart/databus/ActivityMutableDataBus.java b/app/src/main/java/ch/epfl/sdp/appart/databus/ActivityMutableDataBus.java
new file mode 100644
index 000000000..89bdf5395
--- /dev/null
+++ b/app/src/main/java/ch/epfl/sdp/appart/databus/ActivityMutableDataBus.java
@@ -0,0 +1,47 @@
+package ch.epfl.sdp.appart.databus;
+
+import androidx.lifecycle.MutableLiveData;
+
+import javax.inject.Inject;
+import javax.inject.Singleton;
+
+/**
+ * Test class to allows for activities or view models to exchange and set their respective data.
+ * @param
+ */
+@Singleton
+public class ActivityMutableDataBus {
+ MutableLiveData data;
+ Class> owner;
+
+ @Inject
+ public ActivityMutableDataBus() {}
+
+ public void bind(Class> newOwner, MutableLiveData data) {
+
+ if (owner != null) {
+ throw new IllegalStateException("bus already owned by " + owner.getCanonicalName()
+ + "but requested by " + newOwner.getCanonicalName());
+ }
+
+ this.owner = newOwner;
+ this.data = data;
+ }
+
+ public void release(Class> oldOwner) {
+ if (!owner.getCanonicalName().equals(oldOwner.getCanonicalName())) {
+ throw new IllegalStateException("bus already owned by " + owner.getCanonicalName()
+ + "but trying to be released by " + oldOwner.getCanonicalName());
+ }
+ owner = null;
+ data = null;
+ }
+
+ public void setData(T value) {
+ if (this.data == null) {
+ throw new IllegalStateException("live data must be bounded.");
+ }
+ data.setValue(value);
+ }
+
+}
diff --git a/app/src/main/java/ch/epfl/sdp/appart/databus/DataBus.java b/app/src/main/java/ch/epfl/sdp/appart/databus/DataBus.java
new file mode 100644
index 000000000..8079550d3
--- /dev/null
+++ b/app/src/main/java/ch/epfl/sdp/appart/databus/DataBus.java
@@ -0,0 +1,36 @@
+package ch.epfl.sdp.appart.databus;
+
+import javax.inject.Inject;
+import javax.inject.Singleton;
+
+/**
+ * Class that allows activities to talk to each other with a bus. All classes that
+ * utilise this class defined for some type T will utilize the same class.
+ * @param The type of the data that will be exchangeable over the bus.
+ * This class is only meant to be used via hilt injection and should never be instantiated.
+ */
+@Singleton
+public class DataBus {
+
+ T data;
+
+ @Inject
+ public DataBus() {}
+
+ /**
+ * Set the data contained in the bus.
+ * @param data data T to be set.
+ */
+ public void setData(T data) {
+ this.data = data;
+ }
+
+ /**
+ * Get the data contained in the bus.
+ * @return T data
+ */
+ public T getData() {
+ return data;
+ }
+
+}
diff --git a/app/src/main/java/ch/epfl/sdp/appart/databus/ExclusiveDataBus.java b/app/src/main/java/ch/epfl/sdp/appart/databus/ExclusiveDataBus.java
new file mode 100644
index 000000000..8463cbb12
--- /dev/null
+++ b/app/src/main/java/ch/epfl/sdp/appart/databus/ExclusiveDataBus.java
@@ -0,0 +1,79 @@
+package ch.epfl.sdp.appart.databus;
+
+/**
+ * This class allows for two classes to exchange data by allowing exactly two classes to
+ * talk with each other.
+ * @param the type of parameters
+ */
+public class ExclusiveDataBus {
+
+ private T data;
+ private Class> firstTalker;
+ private Class> secondTalker;
+
+ /**
+ * Set the owner ship of the bus for one of the talker
+ * @param newTalker
+ */
+ public void bind(Class> newTalker) {
+ if (firstTalker == null) {
+ firstTalker = newTalker;
+ return;
+ }
+
+ if (secondTalker == null) {
+ secondTalker = newTalker;
+ return;
+ }
+
+ throw new IllegalStateException("bus already owned by " + firstTalker.getCanonicalName()
+ + " and " + secondTalker.getCanonicalName() + " but requested by " + newTalker.getCanonicalName());
+ }
+
+ public void release(Class> talker) {
+
+ if (firstTalker.getCanonicalName().equals(talker.getCanonicalName())) {
+ firstTalker = null;
+ return;
+ }
+
+ if (secondTalker.getCanonicalName().equals(talker.getCanonicalName())) {
+ secondTalker = null;
+ return;
+ }
+
+ throw new IllegalStateException("bus owned by " + firstTalker.getCanonicalName()
+ + " and " + secondTalker.getCanonicalName() + " but trying to be released by "
+ + talker.getCanonicalName());
+
+ }
+
+ public void setData(Class> talker, T data) {
+ if (!firstTalker.getCanonicalName().equals(talker.getCanonicalName()) &&
+ !secondTalker.getCanonicalName().equals(talker.getCanonicalName())) {
+ throw new IllegalStateException("bus already owned by " + firstTalker.getCanonicalName()
+ + " and " + secondTalker.getCanonicalName() + " but accessed by " + talker.getCanonicalName());
+ }
+
+ if (firstTalker == null || secondTalker == null) {
+ throw new IllegalStateException("Two talkers must be registered");
+ }
+
+ this.data = data;
+ }
+
+ public T getData(Class> talker) {
+ if (!firstTalker.getCanonicalName().equals(talker.getCanonicalName()) &&
+ !secondTalker.getCanonicalName().equals(talker.getCanonicalName())) {
+ throw new IllegalStateException("bus already owned by " + firstTalker.getCanonicalName()
+ + " and " + secondTalker.getCanonicalName() + " but read by " + talker.getCanonicalName());
+ }
+
+ if (firstTalker == null || secondTalker == null) {
+ throw new IllegalStateException("Two talkers must be registered");
+ }
+
+ return data;
+ }
+
+}
diff --git a/app/src/main/java/ch/epfl/sdp/appart/datapass/Activity1.java b/app/src/main/java/ch/epfl/sdp/appart/datapass/Activity1.java
deleted file mode 100644
index 7d4cd3284..000000000
--- a/app/src/main/java/ch/epfl/sdp/appart/datapass/Activity1.java
+++ /dev/null
@@ -1,75 +0,0 @@
-package ch.epfl.sdp.appart.datapass;
-
-import androidx.appcompat.app.AppCompatActivity;
-import ch.epfl.sdp.appart.R;
-import ch.epfl.sdp.appart.hilt.annotations.IntegerDataTransferProvider;
-import ch.epfl.sdp.appart.hilt.annotations.StringDataTransferProvider;
-import ch.epfl.sdp.appart.hilt.annotations.UriListDataTransferProvider;
-import dagger.hilt.android.AndroidEntryPoint;
-
-import android.content.Intent;
-import android.net.Uri;
-import android.os.Bundle;
-import android.view.View;
-import android.widget.Button;
-
-import java.util.List;
-
-import javax.inject.Inject;
-
-@AndroidEntryPoint
-public class Activity1 extends AppCompatActivity {
-
- //@Inject
- //DataTransfer transferService;
-
- @IntegerDataTransferProvider
- @Inject
- GenericTransfer integerTransfer;
-
- @StringDataTransferProvider
- @Inject
- GenericTransfer stringTransfer;
-
- @UriListDataTransferProvider
- @Inject
- GenericTransfer> uriListTransfer;
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_1);
- Button gotoActivity2Button = findViewById(R.id.goto_activity_2_button);
- gotoActivity2Button.setOnClickListener(v -> {
- Intent intent = new Intent(this, Activity2.class);
- startActivity(intent);
- });
-
- integerTransfer.registerContainer(Activity1.class);
- stringTransfer.registerContainer(Activity1.class);
-
- //transferService.registerContainerList(Activity1.class, Uri.class);
- }
-
- @Override
- protected void onResume() {
- super.onResume();
-
- DataContainer container = integerTransfer.getRegisteredContainer(Activity1.class);
- if (!container.isDirty()) {
- int a = container.getData();
- int b = 0;
- //List result = container.getData();
- //Uri r = result.get(0);
- }
-
- DataContainer container2 = stringTransfer.getRegisteredContainer(Activity1.class);
- if (!container2.isDirty()) {
- String hello = container2.getData();
- int a = 0;
- //List result = container.getData();
- //Uri r = result.get(0);
- }
-
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/ch/epfl/sdp/appart/datapass/Activity2.java b/app/src/main/java/ch/epfl/sdp/appart/datapass/Activity2.java
deleted file mode 100644
index 6f5693974..000000000
--- a/app/src/main/java/ch/epfl/sdp/appart/datapass/Activity2.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package ch.epfl.sdp.appart.datapass;
-
-import androidx.appcompat.app.AppCompatActivity;
-
-import android.net.Uri;
-import android.os.Bundle;
-
-import java.util.Arrays;
-import java.util.List;
-
-import javax.inject.Inject;
-
-import ch.epfl.sdp.appart.R;
-import ch.epfl.sdp.appart.hilt.annotations.IntegerDataTransferProvider;
-import ch.epfl.sdp.appart.hilt.annotations.StringDataTransferProvider;
-import dagger.hilt.android.AndroidEntryPoint;
-
-@AndroidEntryPoint
-public class Activity2 extends AppCompatActivity {
-
- //@Inject
- //DataTransfer transferService;
-
- @IntegerDataTransferProvider
- @Inject
- GenericTransfer integerTransfer;
-
- @StringDataTransferProvider
- @Inject
- GenericTransfer stringTransfer;
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_2);
-
- DataContainer container = integerTransfer.getRegisteredContainer(Activity1.class);
- container.setData(1);
-
- DataContainer container2 = stringTransfer.getRegisteredContainer(Activity1.class);
- container2.setData("coucou !");
-
- //DataContainer> container = transferService.getRegisteredContainer(Activity1.class);
- //List uris = Arrays.asList(Uri.parse("abc"), Uri.parse("1234"), Uri.parse("coucou"));
- //container.setData(uris);
-
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/ch/epfl/sdp/appart/datapass/DataContainer.java b/app/src/main/java/ch/epfl/sdp/appart/datapass/DataContainer.java
deleted file mode 100644
index ba4ebcb03..000000000
--- a/app/src/main/java/ch/epfl/sdp/appart/datapass/DataContainer.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package ch.epfl.sdp.appart.datapass;
-
-public class DataContainer {
- private T data;
- private boolean isDirty = true;
- public void setData(T data) {
- this.data = data;
- isDirty = false;
- }
- public T getData() {
- if (isDirty) {
- throw new IllegalStateException("container is in dirty state");
- }
- isDirty = true;
- return data;
- }
- public boolean isDirty() {
- return isDirty;
- }
-}
diff --git a/app/src/main/java/ch/epfl/sdp/appart/datapass/DataTransfer.java b/app/src/main/java/ch/epfl/sdp/appart/datapass/DataTransfer.java
deleted file mode 100644
index 665c63be3..000000000
--- a/app/src/main/java/ch/epfl/sdp/appart/datapass/DataTransfer.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package ch.epfl.sdp.appart.datapass;
-
-import org.jetbrains.annotations.NotNull;
-
-import java.util.HashMap;
-import java.util.List;
-
-import javax.inject.Inject;
-import javax.inject.Singleton;
-
-@Singleton
-public class DataTransfer {
-
- private HashMap> map = new HashMap<>();
-
- @Inject
- public DataTransfer() {}
-
- public void registerContainer(@NotNull Class source, @NotNull Class dataType) {
- DataContainer emptyContainer = new DataContainer<>();
- map.put(source.getCanonicalName(), emptyContainer);
- }
-
- public void registerContainerList(@NotNull Class source, @NotNull Class dataType) {
- DataContainer> emptyContainer = new DataContainer<>();
- map.put(source.getCanonicalName(), emptyContainer);
- }
-
- public DataContainer getRegisteredContainer(@NotNull Class source) {
-
- if (!map.containsKey(source.getCanonicalName())) {
- throw new IllegalStateException("the class must be registered");
- }
-
- if (map.get(source.getCanonicalName()) == null) {
- throw new IllegalStateException("the registered container cannot be null");
- }
-
- DataContainer result;
- try {
- result = (DataContainer) map.get(source.getCanonicalName());
- } catch (ClassCastException e) {
- throw new IllegalStateException("failed to cast the generic buffer");
- }
-
- return result;
- }
-
-}
diff --git a/app/src/main/java/ch/epfl/sdp/appart/datapass/GenericTransfer.java b/app/src/main/java/ch/epfl/sdp/appart/datapass/GenericTransfer.java
deleted file mode 100644
index a749016d7..000000000
--- a/app/src/main/java/ch/epfl/sdp/appart/datapass/GenericTransfer.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package ch.epfl.sdp.appart.datapass;
-
-import org.jetbrains.annotations.NotNull;
-
-import java.util.HashMap;
-import java.util.List;
-
-import javax.inject.Inject;
-import javax.inject.Singleton;
-
-@Singleton
-public class GenericTransfer {
-
- private HashMap> map = new HashMap<>();
-
- @Inject
- public GenericTransfer() {}
-
- public void registerContainer(@NotNull Class source) {
- DataContainer emptyContainer = new DataContainer<>();
- map.put(source.getCanonicalName(), emptyContainer);
- }
-
- public DataContainer getRegisteredContainer(@NotNull Class source) {
-
- if (!map.containsKey(source.getCanonicalName())) {
- throw new IllegalStateException("the class must be registered");
- }
-
- if (map.get(source.getCanonicalName()) == null) {
- throw new IllegalStateException("the registered container cannot be null");
- }
-
- DataContainer result = map.get(source.getCanonicalName());
- return result;
- }
-
-}
diff --git a/app/src/main/java/ch/epfl/sdp/appart/hilt/ActivityBusModule.java b/app/src/main/java/ch/epfl/sdp/appart/hilt/ActivityBusModule.java
new file mode 100644
index 000000000..d5203ddb6
--- /dev/null
+++ b/app/src/main/java/ch/epfl/sdp/appart/hilt/ActivityBusModule.java
@@ -0,0 +1,46 @@
+package ch.epfl.sdp.appart.hilt;
+
+import android.content.Context;
+import android.net.Uri;
+
+
+import java.util.List;
+
+import javax.inject.Singleton;
+
+import ch.epfl.sdp.appart.databus.DataBus;
+import ch.epfl.sdp.appart.hilt.annotations.IntegerDataBus;
+import ch.epfl.sdp.appart.hilt.annotations.StringDataBus;
+import ch.epfl.sdp.appart.hilt.annotations.UriListDataBus;
+import dagger.Module;
+import dagger.Provides;
+import dagger.hilt.InstallIn;
+import dagger.hilt.android.qualifiers.ApplicationContext;
+import dagger.hilt.components.SingletonComponent;
+
+@Module
+@InstallIn(SingletonComponent.class)
+public abstract class ActivityBusModule {
+
+ @IntegerDataBus
+ @Singleton
+ @Provides
+ public static DataBus provideDataTransferService(@ApplicationContext Context context) {
+ return new DataBus<>();
+ }
+
+ @StringDataBus
+ @Singleton
+ @Provides
+ public static DataBus provideOtherDataTransferService(@ApplicationContext Context context) {
+ return new DataBus<>();
+ }
+
+ @UriListDataBus
+ @Singleton
+ @Provides
+ public static DataBus> provideUriList(@ApplicationContext Context context) {
+ return new DataBus<>();
+ }
+
+}
diff --git a/app/src/main/java/ch/epfl/sdp/appart/hilt/ActivityMutableDataBusModule.java b/app/src/main/java/ch/epfl/sdp/appart/hilt/ActivityMutableDataBusModule.java
new file mode 100644
index 000000000..27c4d8be0
--- /dev/null
+++ b/app/src/main/java/ch/epfl/sdp/appart/hilt/ActivityMutableDataBusModule.java
@@ -0,0 +1,26 @@
+package ch.epfl.sdp.appart.hilt;
+
+import android.content.Context;
+
+import javax.inject.Singleton;
+
+import ch.epfl.sdp.appart.databus.ActivityMutableDataBus;
+import ch.epfl.sdp.appart.hilt.annotations.StringMutableDataBus;
+import dagger.Module;
+import dagger.Provides;
+import dagger.hilt.InstallIn;
+import dagger.hilt.android.qualifiers.ApplicationContext;
+import dagger.hilt.components.SingletonComponent;
+
+@Module
+@InstallIn(SingletonComponent.class)
+public abstract class ActivityMutableDataBusModule {
+
+ @StringMutableDataBus
+ @Singleton
+ @Provides
+ public static ActivityMutableDataBus provideStringMutableDataBus(@ApplicationContext Context context) {
+ return new ActivityMutableDataBus<>();
+ }
+
+}
diff --git a/app/src/main/java/ch/epfl/sdp/appart/hilt/GenericInjectModule.java b/app/src/main/java/ch/epfl/sdp/appart/hilt/GenericInjectModule.java
deleted file mode 100644
index 8eb099e0e..000000000
--- a/app/src/main/java/ch/epfl/sdp/appart/hilt/GenericInjectModule.java
+++ /dev/null
@@ -1,55 +0,0 @@
-package ch.epfl.sdp.appart.hilt;
-
-import android.content.Context;
-import android.net.Uri;
-
-
-import java.util.List;
-
-import javax.inject.Singleton;
-
-import ch.epfl.sdp.appart.datapass.GenericTransfer;
-import ch.epfl.sdp.appart.hilt.annotations.IntegerDataTransferProvider;
-import ch.epfl.sdp.appart.hilt.annotations.StringDataTransferProvider;
-import ch.epfl.sdp.appart.hilt.annotations.UriListDataTransferProvider;
-import dagger.Module;
-import dagger.Provides;
-import dagger.hilt.InstallIn;
-import dagger.hilt.android.qualifiers.ApplicationContext;
-import dagger.hilt.components.SingletonComponent;
-
-
-
-@Module
-@InstallIn(SingletonComponent.class)
-public abstract class GenericInjectModule {
-
- /*
- @Singleton
- @Binds
- public abstract DataTransfer bindTransferService(DataTransfer transferService);
- */
-
-
- @IntegerDataTransferProvider
- @Singleton
- @Provides
- public static GenericTransfer provideDataTransferService(@ApplicationContext Context context) {
- return new GenericTransfer<>();
- }
-
- @StringDataTransferProvider
- @Singleton
- @Provides
- public static GenericTransfer provideOtherDataTransferService(@ApplicationContext Context context) {
- return new GenericTransfer<>();
- }
-
- @UriListDataTransferProvider
- @Singleton
- @Provides
- public static GenericTransfer> provideUriList(@ApplicationContext Context context) {
- return new GenericTransfer<>();
- }
-
-}
diff --git a/app/src/main/java/ch/epfl/sdp/appart/hilt/TransferModule.java b/app/src/main/java/ch/epfl/sdp/appart/hilt/TransferModule.java
deleted file mode 100644
index b07c15a86..000000000
--- a/app/src/main/java/ch/epfl/sdp/appart/hilt/TransferModule.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package ch.epfl.sdp.appart.hilt;
-
-import android.content.Context;
-
-import com.google.android.gms.location.FusedLocationProviderClient;
-import com.google.android.gms.location.LocationServices;
-
-import javax.inject.Singleton;
-
-import ch.epfl.sdp.appart.datapass.DataTransfer;
-import dagger.Binds;
-import dagger.Module;
-import dagger.Provides;
-import dagger.hilt.InstallIn;
-import dagger.hilt.android.qualifiers.ApplicationContext;
-import dagger.hilt.components.SingletonComponent;
-
-@Module
-@InstallIn(SingletonComponent.class)
-public abstract class TransferModule {
-
- /*
- @Singleton
- @Binds
- public abstract DataTransfer bindTransferService(DataTransfer transferService);
- */
-
- @Singleton
- @Provides
- public static DataTransfer provideDataTransferService(@ApplicationContext Context context) {
- return new DataTransfer();
- }
-}
diff --git a/app/src/main/java/ch/epfl/sdp/appart/hilt/annotations/StringDataTransferProvider.java b/app/src/main/java/ch/epfl/sdp/appart/hilt/annotations/IntegerDataBus.java
similarity index 81%
rename from app/src/main/java/ch/epfl/sdp/appart/hilt/annotations/StringDataTransferProvider.java
rename to app/src/main/java/ch/epfl/sdp/appart/hilt/annotations/IntegerDataBus.java
index d5070edf3..865d17218 100644
--- a/app/src/main/java/ch/epfl/sdp/appart/hilt/annotations/StringDataTransferProvider.java
+++ b/app/src/main/java/ch/epfl/sdp/appart/hilt/annotations/IntegerDataBus.java
@@ -7,4 +7,6 @@
@Qualifier
@Retention(RetentionPolicy.RUNTIME)
-public @interface StringDataTransferProvider {}
\ No newline at end of file
+public @interface IntegerDataBus {}
+
+
diff --git a/app/src/main/java/ch/epfl/sdp/appart/hilt/annotations/UriListDataTransferProvider.java b/app/src/main/java/ch/epfl/sdp/appart/hilt/annotations/StringDataBus.java
similarity index 81%
rename from app/src/main/java/ch/epfl/sdp/appart/hilt/annotations/UriListDataTransferProvider.java
rename to app/src/main/java/ch/epfl/sdp/appart/hilt/annotations/StringDataBus.java
index 3f3a6d004..a549cf3db 100644
--- a/app/src/main/java/ch/epfl/sdp/appart/hilt/annotations/UriListDataTransferProvider.java
+++ b/app/src/main/java/ch/epfl/sdp/appart/hilt/annotations/StringDataBus.java
@@ -7,4 +7,4 @@
@Qualifier
@Retention(RetentionPolicy.RUNTIME)
-public @interface UriListDataTransferProvider {}
+public @interface StringDataBus {}
\ No newline at end of file
diff --git a/app/src/main/java/ch/epfl/sdp/appart/hilt/annotations/IntegerDataTransferProvider.java b/app/src/main/java/ch/epfl/sdp/appart/hilt/annotations/StringMutableDataBus.java
similarity index 80%
rename from app/src/main/java/ch/epfl/sdp/appart/hilt/annotations/IntegerDataTransferProvider.java
rename to app/src/main/java/ch/epfl/sdp/appart/hilt/annotations/StringMutableDataBus.java
index 94233d7d9..2e094fa77 100644
--- a/app/src/main/java/ch/epfl/sdp/appart/hilt/annotations/IntegerDataTransferProvider.java
+++ b/app/src/main/java/ch/epfl/sdp/appart/hilt/annotations/StringMutableDataBus.java
@@ -7,6 +7,4 @@
@Qualifier
@Retention(RetentionPolicy.RUNTIME)
-public @interface IntegerDataTransferProvider {}
-
-
+public @interface StringMutableDataBus {}
\ No newline at end of file
diff --git a/app/src/main/java/ch/epfl/sdp/appart/hilt/annotations/UriListDataBus.java b/app/src/main/java/ch/epfl/sdp/appart/hilt/annotations/UriListDataBus.java
new file mode 100644
index 000000000..a1f0b587f
--- /dev/null
+++ b/app/src/main/java/ch/epfl/sdp/appart/hilt/annotations/UriListDataBus.java
@@ -0,0 +1,10 @@
+package ch.epfl.sdp.appart.hilt.annotations;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Retention(RetentionPolicy.RUNTIME)
+public @interface UriListDataBus {}
diff --git a/app/src/main/res/layout/activity_1.xml b/app/src/main/res/layout/activity_1.xml
index 7c8e53fca..c3a025119 100644
--- a/app/src/main/res/layout/activity_1.xml
+++ b/app/src/main/res/layout/activity_1.xml
@@ -4,7 +4,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
- tools:context=".datapass.Activity1">
+ tools:context=".databus.Activity1">
+ tools:context=".databus.Activity2">
Date: Tue, 27 Apr 2021 21:43:31 +0200
Subject: [PATCH 4/4] added three solutions
---
.../ch/epfl/sdp/appart/databus/Activity1.java | 24 ++++++----
.../ch/epfl/sdp/appart/databus/Activity2.java | 25 ++++++----
.../databus/ActivityMutableDataBus.java | 47 -------------------
.../ch/epfl/sdp/appart/databus/DataBus.java | 1 +
.../sdp/appart/databus/ExclusiveDataBus.java | 1 +
.../sdp/appart/databus/PrivateDataBus.java | 44 +++++++++++++++++
.../appart/databus/PrivateDataBusToken.java | 26 ++++++++++
.../databus/PrivateDataBusTokenFactory.java | 10 ++++
.../hilt/ActivityMutableDataBusModule.java | 26 ----------
.../annotations/StringMutableDataBus.java | 10 ----
.../hilt/{ => databus}/ActivityBusModule.java | 8 ++--
.../hilt/databus/PrivateDataBusModule.java | 46 ++++++++++++++++++
.../annotations/IntegerDataBus.java | 2 +-
.../annotations/StringDataBus.java | 2 +-
.../annotations/UriListDataBus.java | 2 +-
15 files changed, 166 insertions(+), 108 deletions(-)
delete mode 100644 app/src/main/java/ch/epfl/sdp/appart/databus/ActivityMutableDataBus.java
create mode 100644 app/src/main/java/ch/epfl/sdp/appart/databus/PrivateDataBus.java
create mode 100644 app/src/main/java/ch/epfl/sdp/appart/databus/PrivateDataBusToken.java
create mode 100644 app/src/main/java/ch/epfl/sdp/appart/databus/PrivateDataBusTokenFactory.java
delete mode 100644 app/src/main/java/ch/epfl/sdp/appart/hilt/ActivityMutableDataBusModule.java
delete mode 100644 app/src/main/java/ch/epfl/sdp/appart/hilt/annotations/StringMutableDataBus.java
rename app/src/main/java/ch/epfl/sdp/appart/hilt/{ => databus}/ActivityBusModule.java (80%)
create mode 100644 app/src/main/java/ch/epfl/sdp/appart/hilt/databus/PrivateDataBusModule.java
rename app/src/main/java/ch/epfl/sdp/appart/hilt/{ => databus}/annotations/IntegerDataBus.java (79%)
rename app/src/main/java/ch/epfl/sdp/appart/hilt/{ => databus}/annotations/StringDataBus.java (78%)
rename app/src/main/java/ch/epfl/sdp/appart/hilt/{ => databus}/annotations/UriListDataBus.java (79%)
diff --git a/app/src/main/java/ch/epfl/sdp/appart/databus/Activity1.java b/app/src/main/java/ch/epfl/sdp/appart/databus/Activity1.java
index 8da81654c..38c17d700 100644
--- a/app/src/main/java/ch/epfl/sdp/appart/databus/Activity1.java
+++ b/app/src/main/java/ch/epfl/sdp/appart/databus/Activity1.java
@@ -4,10 +4,9 @@
import androidx.lifecycle.MutableLiveData;
import ch.epfl.sdp.appart.R;
-import ch.epfl.sdp.appart.hilt.annotations.IntegerDataBus;
-import ch.epfl.sdp.appart.hilt.annotations.StringDataBus;
-import ch.epfl.sdp.appart.hilt.annotations.StringMutableDataBus;
-import ch.epfl.sdp.appart.hilt.annotations.UriListDataBus;
+import ch.epfl.sdp.appart.hilt.databus.annotations.IntegerDataBus;
+import ch.epfl.sdp.appart.hilt.databus.annotations.StringDataBus;
+import ch.epfl.sdp.appart.hilt.databus.annotations.UriListDataBus;
import dagger.hilt.android.AndroidEntryPoint;
import android.content.Intent;
@@ -35,11 +34,12 @@ public class Activity1 extends AppCompatActivity {
@Inject
DataBus> uriListBus;
- @StringMutableDataBus
+ @UriListDataBus
@Inject
- ActivityMutableDataBus stringMutableDataBus;
+ PrivateDataBus> uriPrivateDataBus;
- private MutableLiveData stringMutableData;
+ private PrivateDataBusToken token =
+ PrivateDataBusTokenFactory.makeToken(Activity1.class, Activity2.class);
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -47,13 +47,17 @@ protected void onCreate(Bundle savedInstanceState) {
setContentView(R.layout.activity_1);
Button gotoActivity2Button = findViewById(R.id.goto_activity_2_button);
- //we fill the busses with non-trivial data
+ /**
+ * Solution 1 : basic bus
+ */
integerBus.setData(1234);
stringBus.setData("coucou !");
uriListBus.setData(Arrays.asList(Uri.parse("abc"), Uri.parse("1234"), Uri.parse("cool")));
- //setting ownership of the bus by Activity1
- stringMutableDataBus.bind(Activity1.class, stringMutableData);
+ /**
+ * Solution 2 : private bus
+ */
+ uriPrivateDataBus.setData(token, Arrays.asList(Uri.parse("so"), Uri.parse("private")));
gotoActivity2Button.setOnClickListener(v -> {
Intent intent = new Intent(this, Activity2.class);
diff --git a/app/src/main/java/ch/epfl/sdp/appart/databus/Activity2.java b/app/src/main/java/ch/epfl/sdp/appart/databus/Activity2.java
index 10f803fba..ef5a67d21 100644
--- a/app/src/main/java/ch/epfl/sdp/appart/databus/Activity2.java
+++ b/app/src/main/java/ch/epfl/sdp/appart/databus/Activity2.java
@@ -10,10 +10,9 @@
import javax.inject.Inject;
import ch.epfl.sdp.appart.R;
-import ch.epfl.sdp.appart.hilt.annotations.IntegerDataBus;
-import ch.epfl.sdp.appart.hilt.annotations.StringDataBus;
-import ch.epfl.sdp.appart.hilt.annotations.StringMutableDataBus;
-import ch.epfl.sdp.appart.hilt.annotations.UriListDataBus;
+import ch.epfl.sdp.appart.hilt.databus.annotations.IntegerDataBus;
+import ch.epfl.sdp.appart.hilt.databus.annotations.StringDataBus;
+import ch.epfl.sdp.appart.hilt.databus.annotations.UriListDataBus;
import dagger.hilt.android.AndroidEntryPoint;
@AndroidEntryPoint
@@ -22,7 +21,6 @@ public class Activity2 extends AppCompatActivity {
/**
* Bellow we declare the bus we want to use
*/
-
@IntegerDataBus
@Inject
DataBus integerBus;
@@ -35,9 +33,16 @@ public class Activity2 extends AppCompatActivity {
@Inject
DataBus> uriListBus;
- @StringMutableDataBus
+ /**
+ * Solution 2 : private databus
+ */
+
+ @UriListDataBus
@Inject
- ActivityMutableDataBus stringMutableDataBus;
+ PrivateDataBus> uriPrivateDataBus;
+
+ private PrivateDataBusToken token =
+ PrivateDataBusTokenFactory.makeToken(Activity1.class, Activity2.class);
private Integer a;
private String b;
@@ -48,10 +53,14 @@ protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_2);
- //we retrieve the data sent by activity 1
+ /**
+ * Solution 1 and 2 get data
+ */
a = integerBus.getData();
b = stringBus.getData();
c = uriListBus.getData();
+ c = uriPrivateDataBus.getData(token);
+
}
}
\ No newline at end of file
diff --git a/app/src/main/java/ch/epfl/sdp/appart/databus/ActivityMutableDataBus.java b/app/src/main/java/ch/epfl/sdp/appart/databus/ActivityMutableDataBus.java
deleted file mode 100644
index 89bdf5395..000000000
--- a/app/src/main/java/ch/epfl/sdp/appart/databus/ActivityMutableDataBus.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package ch.epfl.sdp.appart.databus;
-
-import androidx.lifecycle.MutableLiveData;
-
-import javax.inject.Inject;
-import javax.inject.Singleton;
-
-/**
- * Test class to allows for activities or view models to exchange and set their respective data.
- * @param
- */
-@Singleton
-public class ActivityMutableDataBus {
- MutableLiveData data;
- Class> owner;
-
- @Inject
- public ActivityMutableDataBus() {}
-
- public void bind(Class> newOwner, MutableLiveData data) {
-
- if (owner != null) {
- throw new IllegalStateException("bus already owned by " + owner.getCanonicalName()
- + "but requested by " + newOwner.getCanonicalName());
- }
-
- this.owner = newOwner;
- this.data = data;
- }
-
- public void release(Class> oldOwner) {
- if (!owner.getCanonicalName().equals(oldOwner.getCanonicalName())) {
- throw new IllegalStateException("bus already owned by " + owner.getCanonicalName()
- + "but trying to be released by " + oldOwner.getCanonicalName());
- }
- owner = null;
- data = null;
- }
-
- public void setData(T value) {
- if (this.data == null) {
- throw new IllegalStateException("live data must be bounded.");
- }
- data.setValue(value);
- }
-
-}
diff --git a/app/src/main/java/ch/epfl/sdp/appart/databus/DataBus.java b/app/src/main/java/ch/epfl/sdp/appart/databus/DataBus.java
index 8079550d3..ac1a1fd0d 100644
--- a/app/src/main/java/ch/epfl/sdp/appart/databus/DataBus.java
+++ b/app/src/main/java/ch/epfl/sdp/appart/databus/DataBus.java
@@ -4,6 +4,7 @@
import javax.inject.Singleton;
/**
+ * Solution 1
* Class that allows activities to talk to each other with a bus. All classes that
* utilise this class defined for some type T will utilize the same class.
* @param The type of the data that will be exchangeable over the bus.
diff --git a/app/src/main/java/ch/epfl/sdp/appart/databus/ExclusiveDataBus.java b/app/src/main/java/ch/epfl/sdp/appart/databus/ExclusiveDataBus.java
index 8463cbb12..373db9810 100644
--- a/app/src/main/java/ch/epfl/sdp/appart/databus/ExclusiveDataBus.java
+++ b/app/src/main/java/ch/epfl/sdp/appart/databus/ExclusiveDataBus.java
@@ -1,6 +1,7 @@
package ch.epfl.sdp.appart.databus;
/**
+ * Solution 2
* This class allows for two classes to exchange data by allowing exactly two classes to
* talk with each other.
* @param the type of parameters
diff --git a/app/src/main/java/ch/epfl/sdp/appart/databus/PrivateDataBus.java b/app/src/main/java/ch/epfl/sdp/appart/databus/PrivateDataBus.java
new file mode 100644
index 000000000..3afd87f3c
--- /dev/null
+++ b/app/src/main/java/ch/epfl/sdp/appart/databus/PrivateDataBus.java
@@ -0,0 +1,44 @@
+package ch.epfl.sdp.appart.databus;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+import java.util.HashMap;
+
+import javax.inject.Inject;
+
+/**
+ * This class allows activities to talk with the use of tokens.
+ * A token equals a channel and enforce that to see a value you need to have the right token
+ * See the token factory to see how it is synthesized.
+ * @param
+ */
+public class PrivateDataBus {
+
+ private HashMap entries = new HashMap<>();
+
+ @Inject
+ public PrivateDataBus() {}
+
+ /**
+ * Set the data contained in the bus.
+ * @param data data T to be set.
+ */
+ public void setData(@NonNull PrivateDataBusToken token, @Nullable T data) {
+ if (token == null) {
+ throw new IllegalArgumentException("token cannot be null");
+ }
+ entries.put(token, data);
+ }
+
+ /**
+ * Get the data contained in the bus.
+ * @return T data
+ */
+ public T getData(@NonNull PrivateDataBusToken token) {
+ if (token == null) {
+ throw new IllegalArgumentException("token cannot be null");
+ }
+ return entries.getOrDefault(token, null);
+ }
+}
diff --git a/app/src/main/java/ch/epfl/sdp/appart/databus/PrivateDataBusToken.java b/app/src/main/java/ch/epfl/sdp/appart/databus/PrivateDataBusToken.java
new file mode 100644
index 000000000..3d7e88e2f
--- /dev/null
+++ b/app/src/main/java/ch/epfl/sdp/appart/databus/PrivateDataBusToken.java
@@ -0,0 +1,26 @@
+package ch.epfl.sdp.appart.databus;
+
+public class PrivateDataBusToken {
+ private final int token;
+ public PrivateDataBusToken(int token) { this.token = token; }
+ protected int getToken() { return token; }
+
+ @Override
+ public int hashCode() {
+ return token;
+ }
+
+ @Override
+ public boolean equals(Object other) {
+ if (this == other) {
+ return true;
+ } else if (other == null) {
+ return false;
+ } else if (getClass() != other.getClass()) {
+ return false;
+ } else {
+ PrivateDataBusToken t = (PrivateDataBusToken) other;
+ return t.getToken() == getToken();
+ }
+ }
+}
diff --git a/app/src/main/java/ch/epfl/sdp/appart/databus/PrivateDataBusTokenFactory.java b/app/src/main/java/ch/epfl/sdp/appart/databus/PrivateDataBusTokenFactory.java
new file mode 100644
index 000000000..3e47f164d
--- /dev/null
+++ b/app/src/main/java/ch/epfl/sdp/appart/databus/PrivateDataBusTokenFactory.java
@@ -0,0 +1,10 @@
+package ch.epfl.sdp.appart.databus;
+
+import java.util.HashMap;
+
+public class PrivateDataBusTokenFactory {
+ public static PrivateDataBusToken makeToken(Class first, Class second) {
+ int hash = (first.getCanonicalName() + second.getCanonicalName()).hashCode();
+ return new PrivateDataBusToken(hash);
+ }
+}
diff --git a/app/src/main/java/ch/epfl/sdp/appart/hilt/ActivityMutableDataBusModule.java b/app/src/main/java/ch/epfl/sdp/appart/hilt/ActivityMutableDataBusModule.java
deleted file mode 100644
index 27c4d8be0..000000000
--- a/app/src/main/java/ch/epfl/sdp/appart/hilt/ActivityMutableDataBusModule.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package ch.epfl.sdp.appart.hilt;
-
-import android.content.Context;
-
-import javax.inject.Singleton;
-
-import ch.epfl.sdp.appart.databus.ActivityMutableDataBus;
-import ch.epfl.sdp.appart.hilt.annotations.StringMutableDataBus;
-import dagger.Module;
-import dagger.Provides;
-import dagger.hilt.InstallIn;
-import dagger.hilt.android.qualifiers.ApplicationContext;
-import dagger.hilt.components.SingletonComponent;
-
-@Module
-@InstallIn(SingletonComponent.class)
-public abstract class ActivityMutableDataBusModule {
-
- @StringMutableDataBus
- @Singleton
- @Provides
- public static ActivityMutableDataBus provideStringMutableDataBus(@ApplicationContext Context context) {
- return new ActivityMutableDataBus<>();
- }
-
-}
diff --git a/app/src/main/java/ch/epfl/sdp/appart/hilt/annotations/StringMutableDataBus.java b/app/src/main/java/ch/epfl/sdp/appart/hilt/annotations/StringMutableDataBus.java
deleted file mode 100644
index 2e094fa77..000000000
--- a/app/src/main/java/ch/epfl/sdp/appart/hilt/annotations/StringMutableDataBus.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package ch.epfl.sdp.appart.hilt.annotations;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-
-import javax.inject.Qualifier;
-
-@Qualifier
-@Retention(RetentionPolicy.RUNTIME)
-public @interface StringMutableDataBus {}
\ No newline at end of file
diff --git a/app/src/main/java/ch/epfl/sdp/appart/hilt/ActivityBusModule.java b/app/src/main/java/ch/epfl/sdp/appart/hilt/databus/ActivityBusModule.java
similarity index 80%
rename from app/src/main/java/ch/epfl/sdp/appart/hilt/ActivityBusModule.java
rename to app/src/main/java/ch/epfl/sdp/appart/hilt/databus/ActivityBusModule.java
index d5203ddb6..d69a7cefa 100644
--- a/app/src/main/java/ch/epfl/sdp/appart/hilt/ActivityBusModule.java
+++ b/app/src/main/java/ch/epfl/sdp/appart/hilt/databus/ActivityBusModule.java
@@ -1,4 +1,4 @@
-package ch.epfl.sdp.appart.hilt;
+package ch.epfl.sdp.appart.hilt.databus;
import android.content.Context;
import android.net.Uri;
@@ -9,9 +9,9 @@
import javax.inject.Singleton;
import ch.epfl.sdp.appart.databus.DataBus;
-import ch.epfl.sdp.appart.hilt.annotations.IntegerDataBus;
-import ch.epfl.sdp.appart.hilt.annotations.StringDataBus;
-import ch.epfl.sdp.appart.hilt.annotations.UriListDataBus;
+import ch.epfl.sdp.appart.hilt.databus.annotations.IntegerDataBus;
+import ch.epfl.sdp.appart.hilt.databus.annotations.StringDataBus;
+import ch.epfl.sdp.appart.hilt.databus.annotations.UriListDataBus;
import dagger.Module;
import dagger.Provides;
import dagger.hilt.InstallIn;
diff --git a/app/src/main/java/ch/epfl/sdp/appart/hilt/databus/PrivateDataBusModule.java b/app/src/main/java/ch/epfl/sdp/appart/hilt/databus/PrivateDataBusModule.java
new file mode 100644
index 000000000..7e1986e22
--- /dev/null
+++ b/app/src/main/java/ch/epfl/sdp/appart/hilt/databus/PrivateDataBusModule.java
@@ -0,0 +1,46 @@
+package ch.epfl.sdp.appart.hilt.databus;
+
+import android.content.Context;
+import android.net.Uri;
+
+import java.util.List;
+
+import javax.inject.Singleton;
+
+import ch.epfl.sdp.appart.databus.DataBus;
+import ch.epfl.sdp.appart.databus.PrivateDataBus;
+import ch.epfl.sdp.appart.hilt.databus.annotations.IntegerDataBus;
+import ch.epfl.sdp.appart.hilt.databus.annotations.StringDataBus;
+import ch.epfl.sdp.appart.hilt.databus.annotations.UriListDataBus;
+import dagger.Module;
+import dagger.Provides;
+import dagger.hilt.InstallIn;
+import dagger.hilt.android.qualifiers.ApplicationContext;
+import dagger.hilt.components.SingletonComponent;
+
+@Module
+@InstallIn(SingletonComponent.class)
+public class PrivateDataBusModule {
+
+ @IntegerDataBus
+ @Singleton
+ @Provides
+ public static PrivateDataBus provideIntegerDataBus(@ApplicationContext Context context) {
+ return new PrivateDataBus<>();
+ }
+
+ @StringDataBus
+ @Singleton
+ @Provides
+ public static PrivateDataBus provideStringDataBus(@ApplicationContext Context context) {
+ return new PrivateDataBus<>();
+ }
+
+ @UriListDataBus
+ @Singleton
+ @Provides
+ public static PrivateDataBus> provideUriListDataBus(@ApplicationContext Context context) {
+ return new PrivateDataBus<>();
+ }
+
+}
diff --git a/app/src/main/java/ch/epfl/sdp/appart/hilt/annotations/IntegerDataBus.java b/app/src/main/java/ch/epfl/sdp/appart/hilt/databus/annotations/IntegerDataBus.java
similarity index 79%
rename from app/src/main/java/ch/epfl/sdp/appart/hilt/annotations/IntegerDataBus.java
rename to app/src/main/java/ch/epfl/sdp/appart/hilt/databus/annotations/IntegerDataBus.java
index 865d17218..2784ef809 100644
--- a/app/src/main/java/ch/epfl/sdp/appart/hilt/annotations/IntegerDataBus.java
+++ b/app/src/main/java/ch/epfl/sdp/appart/hilt/databus/annotations/IntegerDataBus.java
@@ -1,4 +1,4 @@
-package ch.epfl.sdp.appart.hilt.annotations;
+package ch.epfl.sdp.appart.hilt.databus.annotations;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
diff --git a/app/src/main/java/ch/epfl/sdp/appart/hilt/annotations/StringDataBus.java b/app/src/main/java/ch/epfl/sdp/appart/hilt/databus/annotations/StringDataBus.java
similarity index 78%
rename from app/src/main/java/ch/epfl/sdp/appart/hilt/annotations/StringDataBus.java
rename to app/src/main/java/ch/epfl/sdp/appart/hilt/databus/annotations/StringDataBus.java
index a549cf3db..2f9361739 100644
--- a/app/src/main/java/ch/epfl/sdp/appart/hilt/annotations/StringDataBus.java
+++ b/app/src/main/java/ch/epfl/sdp/appart/hilt/databus/annotations/StringDataBus.java
@@ -1,4 +1,4 @@
-package ch.epfl.sdp.appart.hilt.annotations;
+package ch.epfl.sdp.appart.hilt.databus.annotations;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
diff --git a/app/src/main/java/ch/epfl/sdp/appart/hilt/annotations/UriListDataBus.java b/app/src/main/java/ch/epfl/sdp/appart/hilt/databus/annotations/UriListDataBus.java
similarity index 79%
rename from app/src/main/java/ch/epfl/sdp/appart/hilt/annotations/UriListDataBus.java
rename to app/src/main/java/ch/epfl/sdp/appart/hilt/databus/annotations/UriListDataBus.java
index a1f0b587f..50e125f42 100644
--- a/app/src/main/java/ch/epfl/sdp/appart/hilt/annotations/UriListDataBus.java
+++ b/app/src/main/java/ch/epfl/sdp/appart/hilt/databus/annotations/UriListDataBus.java
@@ -1,4 +1,4 @@
-package ch.epfl.sdp.appart.hilt.annotations;
+package ch.epfl.sdp.appart.hilt.databus.annotations;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;