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 @@ + + + + + +