diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 139883fab32f9672d9fdbce96ad9da0ce0d2a241..6fefa4f92ccb6e804493fff16466ae63cca909a0 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -21,6 +21,12 @@ <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> + <activity + android:name=".CreateActivity" + android:exported="false"/> + <activity + android:name=".OpenActivity" + android:exported="false"/> </application> </manifest> \ No newline at end of file diff --git a/app/src/main/java/fr/ul/projet/CreateActivity.java b/app/src/main/java/fr/ul/projet/CreateActivity.java new file mode 100644 index 0000000000000000000000000000000000000000..ffe67472c8c76e8d393f3856bb61bfe8ad13382d --- /dev/null +++ b/app/src/main/java/fr/ul/projet/CreateActivity.java @@ -0,0 +1,37 @@ +package fr.ul.projet; + +import android.content.Intent; +import android.os.Bundle; +import android.view.View; +import android.widget.TextView; + +import androidx.activity.EdgeToEdge; +import androidx.appcompat.app.AppCompatActivity; +import androidx.core.graphics.Insets; +import androidx.core.view.ViewCompat; +import androidx.core.view.WindowInsetsCompat; + +public class CreateActivity extends AppCompatActivity { + @Override + protected void onCreate(Bundle savedInstanceState){ + super.onCreate(savedInstanceState); + EdgeToEdge.enable(this); + setContentView(R.layout.activity_create); + + String titreModele = getIntent().getStringExtra("titreModele"); + TextView textView = findViewById(R.id.textView); + textView.setText(titreModele); + + ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.create), (v, insets) -> { + Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()); + v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom); + return insets; + }); + + } + + public void home(View v){ + Intent res = new Intent(); + finish(); + } +} diff --git a/app/src/main/java/fr/ul/projet/MainActivity.java b/app/src/main/java/fr/ul/projet/MainActivity.java index d656455e2a9042bf59e5b8cebc83af52d785b296..8a7b2f6a15359d0a23c1929fbde76ced6b461719 100644 --- a/app/src/main/java/fr/ul/projet/MainActivity.java +++ b/app/src/main/java/fr/ul/projet/MainActivity.java @@ -1,14 +1,32 @@ package fr.ul.projet; +import android.content.ContentResolver; +import android.content.DialogInterface; +import android.content.Intent; +import android.database.Cursor; +import android.net.Uri; import android.os.Bundle; +import android.provider.OpenableColumns; +import android.view.View; +import android.widget.EditText; +import android.widget.Toast; import androidx.activity.EdgeToEdge; +import androidx.activity.result.ActivityResult; +import androidx.activity.result.ActivityResultCallback; +import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.contract.ActivityResultContracts; +import androidx.annotation.Nullable; +import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AppCompatActivity; import androidx.core.graphics.Insets; import androidx.core.view.ViewCompat; import androidx.core.view.WindowInsetsCompat; -public class MainActivity extends AppCompatActivity { +public class MainActivity extends AppCompatActivity implements View.OnClickListener{ + + private ActivityResultLauncher<Intent> launcher; + private static final int PICK_FILE_REQUEST = 1; @Override protected void onCreate(Bundle savedInstanceState) { @@ -20,5 +38,129 @@ public class MainActivity extends AppCompatActivity { v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom); return insets; }); + findViewById(R.id.boutonNouveau).setOnClickListener(this); + findViewById(R.id.boutonOuvrir).setOnClickListener(this); + + this.launcher = registerForActivityResult( + new ActivityResultContracts.StartActivityForResult(), + new ActivityResultCallback<ActivityResult>() { + @Override + public void onActivityResult(ActivityResult result){ + int resCode = result.getResultCode(); // Code retourné par l'activité + + } + } + ); + } + + public void onClick(View v){ + if (v.getId() == R.id.boutonNouveau) { + nouveauModele(); + }else if (v.getId() == R.id.boutonOuvrir){ + ouvrirModele(); + } + } + + public void nouveauModele(){ + AlertDialog.Builder builder = new AlertDialog.Builder(this); + builder.setTitle("Entrez un nom pour votre modèle"); + + final EditText input = new EditText(this); + builder.setView(input); + + // Bouton de validation + builder.setPositiveButton("OK", new DialogInterface.OnClickListener(){ + @Override + public void onClick(DialogInterface dialog, int which){ + String userInput = input.getText().toString(); + Intent intent = new Intent(MainActivity.this, CreateActivity.class); + intent.putExtra("titreModele", userInput); + launcher.launch(intent); + } + }); + + // Bouton d'annulatiopn + builder.setNegativeButton("Annuler", new DialogInterface.OnClickListener(){ + @Override + public void onClick(DialogInterface dialog, int which){ + dialog.cancel(); + } + }); + builder.show(); + } + + public void ouvrirModele(){ + AlertDialog.Builder builder = new AlertDialog.Builder(this); + builder.setTitle("Sélectionner un fichier"); + builder.setMessage("Voulez-vous choisir un fihcier ?"); + + // Bouton de validation + builder.setPositiveButton("Choisir", new DialogInterface.OnClickListener(){ + @Override + public void onClick(DialogInterface dialog, int which){ + openFileChooser(); + } + }); + + // Bouton d'annulatiopn + builder.setNegativeButton("Annuler", new DialogInterface.OnClickListener(){ + @Override + public void onClick(DialogInterface dialog, int which){ + dialog.dismiss(); + } + }); + builder.show(); + } + + private void openFileChooser(){ + Intent intent = new Intent(Intent.ACTION_GET_CONTENT); + intent.setType("*/*"); + intent.addCategory(Intent.CATEGORY_OPENABLE); + startActivityForResult(Intent.createChooser(intent, "Sélectionner un fichier"), PICK_FILE_REQUEST); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data){ + super.onActivityResult(requestCode, resultCode, data); + + if (requestCode == PICK_FILE_REQUEST && resultCode == RESULT_OK && data != null){ + Uri fileUri = data.getData(); + + if (fileUri != null){ + Intent intent = new Intent(MainActivity.this, OpenActivity.class); + intent.putExtra("fichier", getFileName(fileUri)); + launcher.launch(intent); + } + } + } + + public String getFileName(Uri uri){ + String result = null; + + // Vérifier si l'URI contient un nom de fichier + if (uri.getScheme().equals("content")) { + ContentResolver contentResolver = getContentResolver(); + Cursor cursor = contentResolver.query(uri, null, null, null, null); + + if (cursor != null) { + int nameIndex = cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME); + if (nameIndex != -1) { + cursor.moveToFirst(); + result = cursor.getString(nameIndex); + } + cursor.close(); + } + } + + // Si l'URI est un chemin de fichier, extraire le nom du fichier + if (result == null) { + result = uri.getPath(); + int cut = result.lastIndexOf('/'); + if (cut != -1) { + result = result.substring(cut + 1); + } + } + + return result; } } \ No newline at end of file diff --git a/app/src/main/java/fr/ul/projet/OpenActivity.java b/app/src/main/java/fr/ul/projet/OpenActivity.java new file mode 100644 index 0000000000000000000000000000000000000000..5fd7a4258d927efb214477d207fbcb1d88954a19 --- /dev/null +++ b/app/src/main/java/fr/ul/projet/OpenActivity.java @@ -0,0 +1,37 @@ +package fr.ul.projet; + +import android.content.Intent; +import android.os.Bundle; +import android.view.View; +import android.widget.TextView; + +import androidx.activity.EdgeToEdge; +import androidx.appcompat.app.AppCompatActivity; +import androidx.core.graphics.Insets; +import androidx.core.view.ViewCompat; +import androidx.core.view.WindowInsetsCompat; + +public class OpenActivity extends AppCompatActivity { + @Override + protected void onCreate(Bundle savedInstanceState){ + super.onCreate(savedInstanceState); + EdgeToEdge.enable(this); + setContentView(R.layout.activity_open); + + String nomFichier = getIntent().getStringExtra("fichier"); + TextView textView = findViewById(R.id.textView); + textView.setText(nomFichier); + + ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.open), (v, insets) -> { + Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()); + v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom); + return insets; + }); + + } + + public void home(View v){ + Intent res = new Intent(); + finish(); + } +} diff --git a/app/src/main/res/layout/activity_create.xml b/app/src/main/res/layout/activity_create.xml new file mode 100644 index 0000000000000000000000000000000000000000..8df3329c36a7753c86aa40458c33c19027ce2211 --- /dev/null +++ b/app/src/main/res/layout/activity_create.xml @@ -0,0 +1,30 @@ +<?xml version="1.0" encoding="utf-8"?> +<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + android:id="@+id/create" + android:layout_width="match_parent" + android:layout_height="match_parent"> + + <TextView + android:id="@+id/textView" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="@string/creer_mess" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" /> + + <Button + android:id="@+id/home" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:onClick="home" + android:text="@string/home" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintHorizontal_bias="0.498" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintVertical_bias="0.929" /> +</androidx.constraintlayout.widget.ConstraintLayout> \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 86a5d977951ccdfedf6e21f7fe07f1ac54b3b2ce..17854991daf3118b18b8574bd6ab08107264ee38 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -7,13 +7,28 @@ android:layout_height="match_parent" tools:context=".MainActivity"> - <TextView + <Button + android:id="@+id/boutonNouveau" + android:layout_width="220dp" + android:layout_height="41dp" + android:text="@string/creer" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintHorizontal_bias="0.498" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintVertical_bias="0.39" /> + + <Button + android:id="@+id/boutonOuvrir" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:text="Hello World!" + android:text="@string/ouvrir" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintHorizontal_bias="0.498" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toTopOf="parent" /> + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintVertical_bias="0.556" /> </androidx.constraintlayout.widget.ConstraintLayout> \ No newline at end of file diff --git a/app/src/main/res/layout/activity_open.xml b/app/src/main/res/layout/activity_open.xml new file mode 100644 index 0000000000000000000000000000000000000000..cc8915cea9a93ddad5f12a1d574d8a336fa4506f --- /dev/null +++ b/app/src/main/res/layout/activity_open.xml @@ -0,0 +1,30 @@ +<?xml version="1.0" encoding="utf-8"?> +<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + android:id="@+id/open" + android:layout_width="match_parent" + android:layout_height="match_parent"> + + <TextView + android:id="@+id/textView" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="@string/ouvrir_mess" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" /> + + <Button + android:id="@+id/home" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:onClick="home" + android:text="@string/home" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintHorizontal_bias="0.498" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintVertical_bias="0.929" /> +</androidx.constraintlayout.widget.ConstraintLayout> \ 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 a6c96e696d4de1d63549040fe071f973e530b96d..96fc3ad88d86bb7f82c0128b4606b3351406ef45 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,3 +1,8 @@ <resources> <string name="app_name">PROJET</string> + <string name="creer">Créer un nouveau modèle</string> + <string name="ouvrir">Ouvrir un modèle existant</string> + <string name="creer_mess">Nouveau modèle créé</string> + <string name="ouvrir_mess">Modèle correctement importé</string> + <string name="home">Retour à l\'accueil</string> </resources> \ No newline at end of file