in progress!
This commit is contained in:
65
app/src/main/java/com/example/quiz/AnnulationTicket.java
Normal file
65
app/src/main/java/com/example/quiz/AnnulationTicket.java
Normal file
@@ -0,0 +1,65 @@
|
||||
package com.example.quiz;
|
||||
|
||||
import android.os.Bundle;
|
||||
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
import androidx.fragment.app.Fragment;
|
||||
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import com.example.quiz.databinding.FragmentAnnulationTicketBinding;
|
||||
|
||||
/**
|
||||
* A simple {@link Fragment} subclass.
|
||||
* Use the {@link AnnulationTicket#newInstance} factory method to
|
||||
* create an instance of this fragment.
|
||||
*/
|
||||
public class AnnulationTicket extends Fragment {
|
||||
|
||||
FragmentAnnulationTicketBinding binding;
|
||||
|
||||
public AnnulationTicket() {
|
||||
// Required empty public constructor
|
||||
}
|
||||
|
||||
|
||||
public static AnnulationTicket newInstance() {
|
||||
AnnulationTicket fragment = new AnnulationTicket();
|
||||
Bundle args = new Bundle();
|
||||
fragment.setArguments(args);
|
||||
return fragment;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
}
|
||||
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
||||
Bundle savedInstanceState) {
|
||||
binding = FragmentAnnulationTicketBinding.inflate(inflater, container, false);
|
||||
return binding.getRoot();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onViewCreated(View view, Bundle savedInstanceState) {
|
||||
super.onViewCreated(view, savedInstanceState);
|
||||
|
||||
binding.annuleTicketBtnBack.setOnClickListener(v->{
|
||||
getActivity().onBackPressed();
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
AppCompatActivity activity = (AppCompatActivity) getActivity();
|
||||
if(activity != null){
|
||||
activity.getSupportActionBar().setTitle("Annulation Ticket");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,15 +1,19 @@
|
||||
package com.example.quiz;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.bluetooth.BluetoothAdapter;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.BitmapFactory;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.drawable.ColorDrawable;
|
||||
import android.os.Bundle;
|
||||
|
||||
import androidx.activity.result.ActivityResultLauncher;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
import androidx.core.app.ActivityCompat;
|
||||
import androidx.fragment.app.Fragment;
|
||||
@@ -54,6 +58,7 @@ import java.time.format.DateTimeFormatter;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.stream.Collectors;
|
||||
import dagger.hilt.android.AndroidEntryPoint;
|
||||
|
||||
@@ -70,6 +75,8 @@ public class BetValidation extends Fragment {
|
||||
|
||||
SharedViewModel shared;
|
||||
|
||||
private AlertDialog dialog;
|
||||
|
||||
|
||||
private boolean order;
|
||||
|
||||
@@ -169,7 +176,7 @@ public class BetValidation extends Fragment {
|
||||
textView.setWidth(80);
|
||||
textView.setHeight(100);
|
||||
textView.setGravity(Gravity.CENTER);
|
||||
textView.setBackgroundResource(R.drawable.number_background);
|
||||
textView.setBackgroundResource(Objects.equals(horse, "X") ?R.drawable.x_background: R.drawable.number_background);
|
||||
textView.setTextAlignment(View.TEXT_ALIGNMENT_CENTER);
|
||||
textView.setOnClickListener(v -> {
|
||||
final List<String> horses = new ArrayList<>(selectedHorses.getValue());
|
||||
@@ -292,11 +299,7 @@ public class BetValidation extends Fragment {
|
||||
Toast.makeText(getContext(), "En cours", Toast.LENGTH_SHORT).show();
|
||||
break;
|
||||
case SUCCESS:
|
||||
try {
|
||||
printPari(pariResult.data);
|
||||
} catch (WriterException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
_showPariDialog(pariResult.data);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -358,6 +361,45 @@ public class BetValidation extends Fragment {
|
||||
}
|
||||
|
||||
|
||||
@SuppressLint({"MissingInflatedId", "SetTextI18n"})
|
||||
void _showPariDialog(Pari pari){
|
||||
LayoutInflater inflater = getLayoutInflater();
|
||||
View view = inflater.inflate(R.layout.pari_confirmation, null);
|
||||
TextView numero_course = (TextView) view.findViewById(R.id.alert_course_numero);
|
||||
numero_course.setText("Numero Course: "+String.valueOf(shared.selectedCourse.getValue().getId()));
|
||||
TextView alert_pari_type = (TextView) view.findViewById(R.id.alert_pari_type);
|
||||
alert_pari_type.setText(shared.typeOfBet.getValue().getName());
|
||||
TextView is_elargie = (TextView) view.findViewById(R.id.alert_is_elargie);
|
||||
is_elargie.setText(selectedHorses.getValue().size() > shared.typeOfBet.getValue().getNumberOfHorse()?"CE":"SI");
|
||||
TextView alert_combinaison = (TextView) view.findViewById(R.id.alert_combinaison);
|
||||
alert_combinaison.setText(selectedHorses.getValue().stream()
|
||||
.map(String::valueOf)
|
||||
.collect(Collectors.joining("-")));
|
||||
TextView aler_coeff = (TextView) view.findViewById(R.id.alert_coeff);
|
||||
aler_coeff.setText("Coef:"+String.valueOf(coeff));
|
||||
TextView alert_montant = (TextView) view.findViewById(R.id.alert_montant);
|
||||
alert_montant.setText("Montant: "+String.valueOf(mise)+" CFA");
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
|
||||
builder.setView(view);
|
||||
builder.setCancelable(false);
|
||||
|
||||
dialog = builder.create();
|
||||
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
|
||||
|
||||
view.findViewById(R.id.alert_validate).setOnClickListener(v->{
|
||||
try {
|
||||
printPari(pari);
|
||||
dialog.dismiss();
|
||||
} catch (WriterException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
});
|
||||
view.findViewById(R.id.alert_cancel).setOnClickListener(v -> {
|
||||
dialog.dismiss();
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
void _initializeToZero(){
|
||||
mise = 0;
|
||||
binding.mise.setText(String.valueOf(mise+" CFA"));
|
||||
|
||||
100
app/src/main/java/com/example/quiz/Caisse.java
Normal file
100
app/src/main/java/com/example/quiz/Caisse.java
Normal file
@@ -0,0 +1,100 @@
|
||||
package com.example.quiz;
|
||||
|
||||
import android.os.Bundle;
|
||||
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
import androidx.fragment.app.Fragment;
|
||||
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import com.example.quiz.databinding.FragmentCaisseBinding;
|
||||
import com.google.android.material.appbar.MaterialToolbar;
|
||||
|
||||
/**
|
||||
* A simple {@link Fragment} subclass.
|
||||
* Use the {@link Caisse#newInstance} factory method to
|
||||
* create an instance of this fragment.
|
||||
*/
|
||||
public class Caisse extends Fragment {
|
||||
|
||||
FragmentCaisseBinding binding;
|
||||
|
||||
public Caisse() {
|
||||
// Required empty public constructor
|
||||
}
|
||||
|
||||
// TODO: Rename and change types and number of parameters
|
||||
public static Caisse newInstance() {
|
||||
Caisse fragment = new Caisse();
|
||||
Bundle args = new Bundle();
|
||||
fragment.setArguments(args);
|
||||
return fragment;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
}
|
||||
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
||||
Bundle savedInstanceState) {
|
||||
binding = FragmentCaisseBinding.inflate(inflater, container, false);
|
||||
return binding.getRoot();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onViewCreated(View view, Bundle savedInstanceState){
|
||||
super.onViewCreated(view, savedInstanceState);
|
||||
binding.soldeBtn.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
Sold sold = Sold.newInstance();
|
||||
getActivity().getSupportFragmentManager()
|
||||
.beginTransaction()
|
||||
.replace(R.id.nav_host_fragment_content_main, sold)
|
||||
.addToBackStack(null)
|
||||
.commit();
|
||||
}
|
||||
});
|
||||
binding.winTicketBtn.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
WinTicket winTicket = WinTicket.newInstance();
|
||||
getActivity().getSupportFragmentManager()
|
||||
.beginTransaction()
|
||||
.replace(R.id.nav_host_fragment_content_main, winTicket)
|
||||
.addToBackStack(null)
|
||||
.commit();
|
||||
}
|
||||
});
|
||||
binding.cancelTicketBtn.setOnClickListener(v -> {
|
||||
AnnulationTicket annulationTicket = AnnulationTicket.newInstance();
|
||||
getActivity().getSupportFragmentManager()
|
||||
.beginTransaction()
|
||||
.replace(R.id.nav_host_fragment_content_main, annulationTicket)
|
||||
.addToBackStack(null)
|
||||
.commit();
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
AppCompatActivity activity = (AppCompatActivity) getActivity();
|
||||
if (activity != null){
|
||||
MaterialToolbar toolbar = activity.findViewById(R.id.toolbar);
|
||||
activity.setSupportActionBar(toolbar);
|
||||
if(toolbar != null){
|
||||
if(activity.getSupportActionBar() != null){
|
||||
activity.getSupportActionBar().setTitle("Caisse");
|
||||
toolbar.setBackgroundColor(getResources().getColor(R.color.primary_green));
|
||||
toolbar.setTitleTextColor(getResources().getColor(R.color.white));
|
||||
toolbar.setVisibility(View.VISIBLE);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -23,9 +23,12 @@ import android.view.ViewGroup;
|
||||
import android.widget.Toast;
|
||||
import android.widget.Toolbar;
|
||||
|
||||
import com.anggastudio.printama.Pref;
|
||||
import com.anggastudio.printama.Printama;
|
||||
import com.example.quiz.data.adapter.ReunionAdapter;
|
||||
import com.example.quiz.data.model.Reunion;
|
||||
import com.example.quiz.databinding.FragmentListOfReunionsBinding;
|
||||
import com.example.quiz.utils.BluetoothUtils;
|
||||
import com.example.quiz.utils.Result;
|
||||
import com.example.quiz.viewModel.ReunionViewModel;
|
||||
import com.example.quiz.viewModel.SharedViewModel;
|
||||
@@ -67,7 +70,30 @@ public class ListOfReunions extends Fragment {
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
requestPermission();
|
||||
}
|
||||
private void requestPermission(){
|
||||
Pref.init(getContext());
|
||||
if (BluetoothUtils.needsBluetoothPermissions()) {
|
||||
if (!BluetoothUtils.hasBluetoothPermission(getContext())) {
|
||||
// Demande la permission si non accordée
|
||||
BluetoothUtils.requestBluetoothPermission(getActivity());
|
||||
return; // arrête ici, la popup va apparaître
|
||||
}
|
||||
}
|
||||
|
||||
// 2️⃣ Permission OK, on peut afficher la liste
|
||||
try {
|
||||
Printama printama = Printama.with(getContext());
|
||||
if(!printama.isConnected()){
|
||||
BluetoothUtils.showPrinterList(getContext(), getActivity());
|
||||
}
|
||||
} catch (SecurityException e) {
|
||||
Toast.makeText(getContext(),
|
||||
"Permission Bluetooth non accordée", Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
|
||||
|
||||
@@ -1,25 +1,15 @@
|
||||
package com.example.quiz;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.graphics.drawable.ColorDrawable;
|
||||
import android.os.Bundle;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
import androidx.core.content.ContextCompat;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.fragment.app.FragmentManager;
|
||||
import androidx.fragment.app.FragmentTransaction;
|
||||
|
||||
import android.provider.Settings;
|
||||
import android.text.Editable;
|
||||
import android.text.TextWatcher;
|
||||
import android.util.Log;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.Toast;
|
||||
import android.widget.Toolbar;
|
||||
|
||||
import com.example.quiz.databinding.FragmentLoginBinding;
|
||||
import com.example.quiz.utils.SharedPrefsHelper;
|
||||
@@ -73,27 +63,25 @@ public class Login extends Fragment {
|
||||
binding.loginButton.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
if(binding.userNameInput.getText().toString().isEmpty()){
|
||||
binding.userNameInput.setError("Le nom d'utilisateur est obligatoire");
|
||||
binding.userNameInput.requestFocus();
|
||||
return;
|
||||
}
|
||||
if(binding.passwordInput.getText().toString().isEmpty()){
|
||||
binding.passwordInput.setError("Le mot de passe est obligatoire");
|
||||
binding.passwordInput.requestFocus();
|
||||
return;
|
||||
}
|
||||
if(binding.passwordInput.getText().toString().length() < 6){
|
||||
binding.passwordInput.setError("Le mot de passe doit contenir au moins 6 caractères ");
|
||||
binding.passwordInput.requestFocus();
|
||||
return;
|
||||
}
|
||||
|
||||
prefsHelper = SharedPrefsHelper.getInstance(getContext());
|
||||
prefsHelper.save("username", binding.userNameInput.getText().toString());
|
||||
FragmentManager fragmentManager = getParentFragmentManager();
|
||||
ListOfReunions reunions = ListOfReunions.newInstance(binding.userNameInput.getText().toString());
|
||||
ListOfReunions reunions = ListOfReunions.newInstance("");
|
||||
fragmentManager.beginTransaction()
|
||||
.replace(R.id.nav_host_fragment_content_main, reunions)
|
||||
.addToBackStack(null)
|
||||
.commit();
|
||||
}
|
||||
});
|
||||
|
||||
binding.caisse.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
Caisse caisse = Caisse.newInstance();
|
||||
FragmentManager fragmentManager = getParentFragmentManager();
|
||||
fragmentManager.beginTransaction()
|
||||
.replace(R.id.nav_host_fragment_content_main, caisse)
|
||||
.addToBackStack(null)
|
||||
.commit();
|
||||
}
|
||||
});
|
||||
|
||||
@@ -1,22 +1,29 @@
|
||||
package com.example.quiz;
|
||||
|
||||
import android.graphics.Color;
|
||||
import android.graphics.drawable.ColorDrawable;
|
||||
import android.os.Bundle;
|
||||
|
||||
import com.anggastudio.printama.Pref;
|
||||
import com.anggastudio.printama.Printama;
|
||||
import com.example.quiz.utils.BluetoothUtils;
|
||||
import com.example.quiz.data.model.dtos.auth.LoginPayload;
|
||||
import com.example.quiz.data.model.dtos.auth.LoginResponse;
|
||||
import com.example.quiz.utils.Result;
|
||||
import com.example.quiz.utils.SessionManager;
|
||||
import com.example.quiz.utils.SharedPrefsHelper;
|
||||
import com.example.quiz.viewModel.LoginViewModel;
|
||||
import com.google.android.material.snackbar.Snackbar;
|
||||
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
|
||||
import android.os.Handler;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.MotionEvent;
|
||||
import android.view.View;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.fragment.app.FragmentManager;
|
||||
import androidx.lifecycle.Observer;
|
||||
import androidx.lifecycle.ViewModelProvider;
|
||||
import androidx.navigation.NavController;
|
||||
import androidx.navigation.Navigation;
|
||||
import androidx.navigation.ui.AppBarConfiguration;
|
||||
@@ -29,7 +36,10 @@ import dagger.hilt.android.AndroidEntryPoint;
|
||||
@AndroidEntryPoint
|
||||
public class PageQuiz extends AppCompatActivity {
|
||||
|
||||
LoginViewModel viewModel;
|
||||
private SessionManager sessionManager;
|
||||
|
||||
private AlertDialog dialog;
|
||||
private Handler handler = new Handler();
|
||||
private Runnable checkRunnable;
|
||||
|
||||
@@ -38,48 +48,15 @@ public class PageQuiz extends AppCompatActivity {
|
||||
|
||||
private SharedPrefsHelper prefsHelper;
|
||||
|
||||
private void requestPermission(){
|
||||
Pref.init(getApplicationContext());
|
||||
if (BluetoothUtils.needsBluetoothPermissions()) {
|
||||
if (!BluetoothUtils.hasBluetoothPermission(getApplicationContext())) {
|
||||
// Demande la permission si non accordée
|
||||
BluetoothUtils.requestBluetoothPermission(this);
|
||||
return; // arrête ici, la popup va apparaître
|
||||
}
|
||||
}
|
||||
|
||||
// 2️⃣ Permission OK, on peut afficher la liste
|
||||
try {
|
||||
Printama printama = Printama.with(getApplicationContext());
|
||||
if(!printama.isConnected()){
|
||||
BluetoothUtils.showPrinterList(getApplicationContext(), this);
|
||||
}
|
||||
} catch (SecurityException e) {
|
||||
Toast.makeText(getApplicationContext(),
|
||||
"Permission Bluetooth non accordée", Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
requestPermission();
|
||||
binding = ActivityPageQuizBinding.inflate(getLayoutInflater());
|
||||
_showPinDialog();
|
||||
setContentView(binding.getRoot());
|
||||
sessionManager = new SessionManager();
|
||||
|
||||
// Vérification périodique
|
||||
checkRunnable = new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
if (sessionManager.isExpired()) {
|
||||
Toast.makeText(getApplicationContext(), "I'm herer", Toast.LENGTH_LONG).show();
|
||||
} else {
|
||||
handler.postDelayed(this, 60 * 1000);
|
||||
}
|
||||
}
|
||||
};
|
||||
handler.postDelayed(checkRunnable, 60 * 1000);
|
||||
prefsHelper = SharedPrefsHelper.getInstance(getApplicationContext());
|
||||
viewModel = new ViewModelProvider(this).get(LoginViewModel.class);
|
||||
setSupportActionBar(binding.toolbar);
|
||||
binding.toolbar.setBackgroundColor(Color.parseColor("#501C5A29"));
|
||||
binding.fab.setOnClickListener(new View.OnClickListener() {
|
||||
@@ -90,22 +67,97 @@ public class PageQuiz extends AppCompatActivity {
|
||||
.setAction("Action", null).show();
|
||||
}
|
||||
});
|
||||
prefsHelper = SharedPrefsHelper.getInstance(getApplicationContext());
|
||||
FragmentManager fragmentManager = getSupportFragmentManager();
|
||||
|
||||
if(prefsHelper.get("username") != null){
|
||||
ListOfReunions reunions = ListOfReunions.newInstance(prefsHelper.get("username"));
|
||||
fragmentManager
|
||||
.beginTransaction()
|
||||
.replace(R.id.nav_host_fragment_content_main, reunions)
|
||||
.commit();
|
||||
}else{
|
||||
Login login = Login.newInstance();
|
||||
fragmentManager
|
||||
.beginTransaction()
|
||||
.replace(R.id.nav_host_fragment_content_main, login)
|
||||
.commit();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean dispatchTouchEvent(MotionEvent ev) {
|
||||
|
||||
if (dialog != null && dialog.isShowing()) {
|
||||
return super.dispatchTouchEvent(ev);
|
||||
}
|
||||
|
||||
|
||||
if(sessionManager.isExpired()){
|
||||
_showPinDialog();
|
||||
return true;
|
||||
}
|
||||
sessionManager.updateLastExpiredDate();
|
||||
return super.dispatchTouchEvent(ev);
|
||||
}
|
||||
|
||||
void _showPinDialog(){
|
||||
LayoutInflater inflater = getLayoutInflater();
|
||||
View view = inflater.inflate(R.layout.pin_view, null);
|
||||
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(this);
|
||||
builder.setView(view);
|
||||
builder.setCancelable(false);
|
||||
|
||||
dialog = builder.create();
|
||||
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
|
||||
|
||||
// Bouton OK
|
||||
view.findViewById(R.id.pin_validate).setOnClickListener(v -> {
|
||||
TextView pin = view.findViewById(R.id.pin);
|
||||
if(pin.getText().toString().isEmpty()){
|
||||
pin.setError("Entrez le pin!");
|
||||
return;
|
||||
}
|
||||
if(pin.getText().toString().length() != 5){
|
||||
pin.setError("Le pin doit contenir 5 chiffres!");
|
||||
return;
|
||||
}
|
||||
LoginPayload loginPayload = new LoginPayload(
|
||||
pin.getText().toString()
|
||||
);
|
||||
viewModel.login(loginPayload).observe(this, new Observer<Result<LoginResponse>>() {
|
||||
@Override
|
||||
public void onChanged(Result<LoginResponse> loginResponseResult) {
|
||||
switch (loginResponseResult.status){
|
||||
case LOADING:
|
||||
Toast.makeText(getApplicationContext(), "Loading",Toast.LENGTH_SHORT).show();
|
||||
break;
|
||||
case ERROR:
|
||||
pin.setError("Pin incorrect");
|
||||
break;
|
||||
case SUCCESS:
|
||||
loginSuccess(loginResponseResult.data);
|
||||
sessionManager.updateLastExpiredDate();
|
||||
dialog.dismiss();
|
||||
break;
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
dialog.show();
|
||||
}
|
||||
|
||||
|
||||
private void loginSuccess(LoginResponse loginResponse){
|
||||
prefsHelper.save("firstName", loginResponse.getPrenom());
|
||||
prefsHelper.save("lastName", loginResponse.getNom());
|
||||
prefsHelper.save("profile", loginResponse.getProfile());
|
||||
prefsHelper.save("limit", String.valueOf(loginResponse.getLimiteSuperieure()));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onResume() {
|
||||
super.onResume();
|
||||
handler = new Handler();
|
||||
checkRunnable = new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
if (sessionManager.isExpired()) {
|
||||
if(dialog != null && !dialog.isShowing()){
|
||||
_showPinDialog();
|
||||
}
|
||||
} else {
|
||||
handler.postDelayed(this, 10); // check every second
|
||||
}
|
||||
}
|
||||
};
|
||||
handler.postDelayed(checkRunnable, 10);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
69
app/src/main/java/com/example/quiz/WinTicket.java
Normal file
69
app/src/main/java/com/example/quiz/WinTicket.java
Normal file
@@ -0,0 +1,69 @@
|
||||
package com.example.quiz;
|
||||
|
||||
import android.os.Bundle;
|
||||
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
import androidx.fragment.app.Fragment;
|
||||
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import com.example.quiz.databinding.FragmentWinTicketBinding;
|
||||
import com.google.android.material.appbar.MaterialToolbar;
|
||||
|
||||
/**
|
||||
* A simple {@link Fragment} subclass.
|
||||
* Use the {@link WinTicket#newInstance} factory method to
|
||||
* create an instance of this fragment.
|
||||
*/
|
||||
public class WinTicket extends Fragment {
|
||||
|
||||
FragmentWinTicketBinding binding;
|
||||
|
||||
|
||||
public WinTicket() {
|
||||
// Required empty public constructor
|
||||
}
|
||||
public static WinTicket newInstance() {
|
||||
WinTicket fragment = new WinTicket();
|
||||
Bundle args = new Bundle();
|
||||
|
||||
fragment.setArguments(args);
|
||||
return fragment;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
}
|
||||
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
||||
Bundle savedInstanceState) {
|
||||
binding = FragmentWinTicketBinding.inflate(inflater, container, false);
|
||||
return binding.getRoot();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onViewCreated(View view, Bundle savedInstanceState) {
|
||||
super.onViewCreated(view, savedInstanceState);
|
||||
binding.winTicketBtnBack.setOnClickListener(v -> {
|
||||
getActivity().onBackPressed();
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
AppCompatActivity activity = (AppCompatActivity) getActivity();
|
||||
if (activity != null) {
|
||||
activity.getSupportActionBar();
|
||||
MaterialToolbar toolbar = activity.findViewById(R.id.toolbar);
|
||||
if(toolbar!= null){
|
||||
toolbar.setTitle("Ticket Gagnant");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package com.example.quiz.data.model.dtos.auth;
|
||||
|
||||
public class LoginPayload {
|
||||
private String pin;
|
||||
|
||||
public LoginPayload(String pin) {
|
||||
this.pin = pin;
|
||||
}
|
||||
|
||||
public String getPin() {
|
||||
return pin;
|
||||
}
|
||||
|
||||
public void setPin(String pin) {
|
||||
this.pin = pin;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,237 @@
|
||||
package com.example.quiz.data.model.dtos.auth;
|
||||
|
||||
public class LoginResponse {
|
||||
private int id;
|
||||
private String code;
|
||||
private String profile;
|
||||
private String principalCode;
|
||||
private String caisseProfile;
|
||||
private String statut;
|
||||
private String zone;
|
||||
private String kiosk;
|
||||
private String fonction;
|
||||
private String dateEmbauche;
|
||||
private String derniereConnexion;
|
||||
private String nom;
|
||||
private String prenom;
|
||||
private String autresNom;
|
||||
private String dateNaissance;
|
||||
private String lieuNaissance;
|
||||
private String ville;
|
||||
private String adresse;
|
||||
private String cni;
|
||||
private double limiteInferieure;
|
||||
private double limiteSuperieure;
|
||||
private double limiteParTransaction;
|
||||
private String autreAdresse1;
|
||||
|
||||
public LoginResponse(int id, String code, String profile, String principalCode, String caisseProfile, String statut, String zone, String kiosk, String fonction, String dateEmbauche, String derniereConnexion, String nom, String prenom, String autresNom, String dateNaissance, String lieuNaissance, String ville, String adresse, String cni, double limiteInferieure, double limiteSuperieure, double limiteParTransaction, String autreAdresse1) {
|
||||
this.id = id;
|
||||
this.code = code;
|
||||
this.profile = profile;
|
||||
this.principalCode = principalCode;
|
||||
this.caisseProfile = caisseProfile;
|
||||
this.statut = statut;
|
||||
this.zone = zone;
|
||||
this.kiosk = kiosk;
|
||||
this.fonction = fonction;
|
||||
this.dateEmbauche = dateEmbauche;
|
||||
this.derniereConnexion = derniereConnexion;
|
||||
this.nom = nom;
|
||||
this.prenom = prenom;
|
||||
this.autresNom = autresNom;
|
||||
this.dateNaissance = dateNaissance;
|
||||
this.lieuNaissance = lieuNaissance;
|
||||
this.ville = ville;
|
||||
this.adresse = adresse;
|
||||
this.cni = cni;
|
||||
this.limiteInferieure = limiteInferieure;
|
||||
this.limiteSuperieure = limiteSuperieure;
|
||||
this.limiteParTransaction = limiteParTransaction;
|
||||
this.autreAdresse1 = autreAdresse1;
|
||||
}
|
||||
|
||||
public int getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(int id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getCode() {
|
||||
return code;
|
||||
}
|
||||
|
||||
public void setCode(String code) {
|
||||
this.code = code;
|
||||
}
|
||||
|
||||
public String getProfile() {
|
||||
return profile;
|
||||
}
|
||||
|
||||
public void setProfile(String profile) {
|
||||
this.profile = profile;
|
||||
}
|
||||
|
||||
public String getPrincipalCode() {
|
||||
return principalCode;
|
||||
}
|
||||
|
||||
public void setPrincipalCode(String principalCode) {
|
||||
this.principalCode = principalCode;
|
||||
}
|
||||
|
||||
public String getCaisseProfile() {
|
||||
return caisseProfile;
|
||||
}
|
||||
|
||||
public void setCaisseProfile(String caisseProfile) {
|
||||
this.caisseProfile = caisseProfile;
|
||||
}
|
||||
|
||||
public String getStatut() {
|
||||
return statut;
|
||||
}
|
||||
|
||||
public void setStatut(String statut) {
|
||||
this.statut = statut;
|
||||
}
|
||||
|
||||
public String getZone() {
|
||||
return zone;
|
||||
}
|
||||
|
||||
public void setZone(String zone) {
|
||||
this.zone = zone;
|
||||
}
|
||||
|
||||
public String getKiosk() {
|
||||
return kiosk;
|
||||
}
|
||||
|
||||
public void setKiosk(String kiosk) {
|
||||
this.kiosk = kiosk;
|
||||
}
|
||||
|
||||
public String getFonction() {
|
||||
return fonction;
|
||||
}
|
||||
|
||||
public void setFonction(String fonction) {
|
||||
this.fonction = fonction;
|
||||
}
|
||||
|
||||
public String getDateEmbauche() {
|
||||
return dateEmbauche;
|
||||
}
|
||||
|
||||
public void setDateEmbauche(String dateEmbauche) {
|
||||
this.dateEmbauche = dateEmbauche;
|
||||
}
|
||||
|
||||
public String getDerniereConnexion() {
|
||||
return derniereConnexion;
|
||||
}
|
||||
|
||||
public void setDerniereConnexion(String derniereConnexion) {
|
||||
this.derniereConnexion = derniereConnexion;
|
||||
}
|
||||
|
||||
public String getNom() {
|
||||
return nom;
|
||||
}
|
||||
|
||||
public void setNom(String nom) {
|
||||
this.nom = nom;
|
||||
}
|
||||
|
||||
public String getPrenom() {
|
||||
return prenom;
|
||||
}
|
||||
|
||||
public void setPrenom(String prenom) {
|
||||
this.prenom = prenom;
|
||||
}
|
||||
|
||||
public String getAutresNom() {
|
||||
return autresNom;
|
||||
}
|
||||
|
||||
public void setAutresNom(String autresNom) {
|
||||
this.autresNom = autresNom;
|
||||
}
|
||||
|
||||
public String getDateNaissance() {
|
||||
return dateNaissance;
|
||||
}
|
||||
|
||||
public void setDateNaissance(String dateNaissance) {
|
||||
this.dateNaissance = dateNaissance;
|
||||
}
|
||||
|
||||
public String getLieuNaissance() {
|
||||
return lieuNaissance;
|
||||
}
|
||||
|
||||
public void setLieuNaissance(String lieuNaissance) {
|
||||
this.lieuNaissance = lieuNaissance;
|
||||
}
|
||||
|
||||
public String getVille() {
|
||||
return ville;
|
||||
}
|
||||
|
||||
public void setVille(String ville) {
|
||||
this.ville = ville;
|
||||
}
|
||||
|
||||
public String getAdresse() {
|
||||
return adresse;
|
||||
}
|
||||
|
||||
public void setAdresse(String adresse) {
|
||||
this.adresse = adresse;
|
||||
}
|
||||
|
||||
public String getCni() {
|
||||
return cni;
|
||||
}
|
||||
|
||||
public void setCni(String cni) {
|
||||
this.cni = cni;
|
||||
}
|
||||
|
||||
public double getLimiteInferieure() {
|
||||
return limiteInferieure;
|
||||
}
|
||||
|
||||
public void setLimiteInferieure(double limiteInferieure) {
|
||||
this.limiteInferieure = limiteInferieure;
|
||||
}
|
||||
|
||||
public double getLimiteSuperieure() {
|
||||
return limiteSuperieure;
|
||||
}
|
||||
|
||||
public void setLimiteSuperieure(double limiteSuperieure) {
|
||||
this.limiteSuperieure = limiteSuperieure;
|
||||
}
|
||||
|
||||
public double getLimiteParTransaction() {
|
||||
return limiteParTransaction;
|
||||
}
|
||||
|
||||
public void setLimiteParTransaction(double limiteParTransaction) {
|
||||
this.limiteParTransaction = limiteParTransaction;
|
||||
}
|
||||
|
||||
public String getAutreAdresse1() {
|
||||
return autreAdresse1;
|
||||
}
|
||||
|
||||
public void setAutreAdresse1(String autreAdresse1) {
|
||||
this.autreAdresse1 = autreAdresse1;
|
||||
}
|
||||
}
|
||||
@@ -20,7 +20,7 @@ import retrofit2.converter.gson.GsonConverterFactory;
|
||||
@Module
|
||||
@InstallIn(SingletonComponent.class)
|
||||
public class ApiClient {
|
||||
private static final String BASE_URL = "https://performances-leeds-operations-continued.trycloudflare.com/api/v1/";
|
||||
private static final String BASE_URL = "https://970b6b1c025c.ngrok-free.app/api/v1/";
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
|
||||
@@ -3,6 +3,8 @@ package com.example.quiz.data.remote;
|
||||
import com.example.quiz.data.model.Course;
|
||||
import com.example.quiz.data.model.Pari;
|
||||
import com.example.quiz.data.model.Reunion;
|
||||
import com.example.quiz.data.model.dtos.auth.LoginPayload;
|
||||
import com.example.quiz.data.model.dtos.auth.LoginResponse;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@@ -21,4 +23,7 @@ public interface ApiService {
|
||||
|
||||
@POST("pari")
|
||||
Call<Pari> createPari(@Body Pari pari);
|
||||
|
||||
@POST("auth/agent/login")
|
||||
Call<LoginResponse> login(@Body LoginPayload loginPayload);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,44 @@
|
||||
package com.example.quiz.data.repository;
|
||||
|
||||
import androidx.lifecycle.LiveData;
|
||||
import androidx.lifecycle.MutableLiveData;
|
||||
|
||||
import com.example.quiz.data.model.dtos.auth.LoginPayload;
|
||||
import com.example.quiz.data.model.dtos.auth.LoginResponse;
|
||||
import com.example.quiz.data.remote.ApiService;
|
||||
import com.example.quiz.utils.Result;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
import retrofit2.Call;
|
||||
import retrofit2.Callback;
|
||||
import retrofit2.Response;
|
||||
|
||||
public class LoginRepository {
|
||||
private ApiService apiService;
|
||||
@Inject
|
||||
public LoginRepository(ApiService apiService) {
|
||||
this.apiService = apiService;
|
||||
}
|
||||
|
||||
public LiveData<Result<LoginResponse>> login(LoginPayload loginPayload){
|
||||
MutableLiveData<Result<LoginResponse>> liveLogin = new MutableLiveData<Result<LoginResponse>>();
|
||||
liveLogin.setValue(Result.loading());
|
||||
apiService.login(loginPayload).enqueue(new Callback<LoginResponse>() {
|
||||
@Override
|
||||
public void onResponse(Call<LoginResponse> call, Response<LoginResponse> response) {
|
||||
if(response.isSuccessful()){
|
||||
liveLogin.postValue(Result.success(response.body()));
|
||||
}else{
|
||||
liveLogin.postValue(Result.error(response.message()));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure(Call<LoginResponse> call, Throwable throwable) {
|
||||
liveLogin.postValue(Result.error(throwable.getMessage()));
|
||||
}
|
||||
});
|
||||
return liveLogin;
|
||||
}
|
||||
}
|
||||
@@ -5,19 +5,20 @@ import java.time.LocalDateTime;
|
||||
|
||||
public class SessionManager {
|
||||
// 10 minutes en millisecondes
|
||||
private static final long sessionExpiredTime = 60 * 1000;
|
||||
private static final long sessionExpiredTime = 10 * 60 * 1000;
|
||||
|
||||
private LocalDateTime lastExpiredDate;
|
||||
|
||||
public SessionManager() {
|
||||
updateLastExpiredDate();
|
||||
}
|
||||
public SessionManager() {}
|
||||
|
||||
public void updateLastExpiredDate() {
|
||||
lastExpiredDate = LocalDateTime.now();
|
||||
}
|
||||
|
||||
public boolean isExpired() {
|
||||
if (lastExpiredDate == null) {
|
||||
return true;
|
||||
}
|
||||
// Vérifie si le temps écoulé depuis lastExpiredDate > sessionExpiredTime
|
||||
Duration elapsed = Duration.between(lastExpiredDate, LocalDateTime.now());
|
||||
return elapsed.toMillis() > sessionExpiredTime;
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
package com.example.quiz.viewModel;
|
||||
|
||||
import androidx.lifecycle.LiveData;
|
||||
import androidx.lifecycle.ViewModel;
|
||||
|
||||
import com.example.quiz.data.model.dtos.auth.LoginPayload;
|
||||
import com.example.quiz.data.model.dtos.auth.LoginResponse;
|
||||
import com.example.quiz.data.repository.LoginRepository;
|
||||
import com.example.quiz.utils.Result;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
import dagger.hilt.android.lifecycle.HiltViewModel;
|
||||
|
||||
@HiltViewModel
|
||||
public class LoginViewModel extends ViewModel {
|
||||
LoginRepository loginRepository;
|
||||
|
||||
@Inject
|
||||
public LoginViewModel(LoginRepository loginRepository) {
|
||||
this.loginRepository = loginRepository;
|
||||
}
|
||||
|
||||
public LiveData<Result<LoginResponse>> login(LoginPayload loginPayload){
|
||||
return loginRepository.login(loginPayload);
|
||||
}
|
||||
}
|
||||
3
app/src/main/res/drawable/button_transparent.xml
Normal file
3
app/src/main/res/drawable/button_transparent.xml
Normal file
@@ -0,0 +1,3 @@
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
|
||||
<solid android:color="@android:color/transparent"/>
|
||||
</shape>
|
||||
21
app/src/main/res/drawable/camera.xml
Normal file
21
app/src/main/res/drawable/camera.xml
Normal file
@@ -0,0 +1,21 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="105dp"
|
||||
android:height="105dp"
|
||||
android:viewportWidth="100"
|
||||
android:viewportHeight="100">
|
||||
<path
|
||||
android:strokeWidth="1"
|
||||
android:pathData="m38.03,65.13a28.13,28.13 0,1 1,23.97 0l6.25,16.67 -36.47,0z"
|
||||
android:fillColor="#545454"
|
||||
android:strokeColor="#222222"/>
|
||||
<path
|
||||
android:strokeWidth="1"
|
||||
android:pathData="M50.02,39.6m-20.84,0a20.84,20.84 0,1 1,41.68 0a20.84,20.84 0,1 1,-41.68 0"
|
||||
android:fillColor="#FFF"
|
||||
android:strokeColor="#222222"/>
|
||||
<path
|
||||
android:strokeWidth="1"
|
||||
android:pathData="M50.02,39.6m-16.67,0a16.67,16.67 0,1 1,33.34 0a16.67,16.67 0,1 1,-33.34 0"
|
||||
android:fillColor="#03A9F4"
|
||||
android:strokeColor="#222222"/>
|
||||
</vector>
|
||||
@@ -1,7 +1,7 @@
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
|
||||
<solid android:color="@color/white" />
|
||||
<stroke android:width="1dp" android:color="@color/text_light_grey" />
|
||||
<corners android:radius="12dp" />
|
||||
<corners android:radius="5dp" />
|
||||
<padding
|
||||
android:left="8dp"
|
||||
android:top="2dp"
|
||||
|
||||
10
app/src/main/res/drawable/edittext_outline_white.xml
Normal file
10
app/src/main/res/drawable/edittext_outline_white.xml
Normal file
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
|
||||
<solid android:color="#FFFFFF"/> <!-- Fond blanc -->
|
||||
|
||||
<stroke
|
||||
android:width="1dp"
|
||||
android:color="#CCCCCC" /> <!-- Bordure grise -->
|
||||
</shape>
|
||||
15
app/src/main/res/drawable/hashtag.xml
Normal file
15
app/src/main/res/drawable/hashtag.xml
Normal file
File diff suppressed because one or more lines are too long
9
app/src/main/res/drawable/horse_head_svgrepo_com.xml
Normal file
9
app/src/main/res/drawable/horse_head_svgrepo_com.xml
Normal file
@@ -0,0 +1,9 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="40dp"
|
||||
android:height="40dp"
|
||||
android:viewportWidth="512"
|
||||
android:viewportHeight="512">
|
||||
<path
|
||||
android:pathData="M400,16c-21.33,9.73 -58.24,17.34 -73.09,48.23 -22.36,1.95 -72.75,10.67 -122.22,40.25 -58.1,34.74 -116.02,97.42 -131.78,213.7l-0.48,3.54 -2.77,2.25c-30.87,25 -40.66,38.94 -44.42,61.15 -3.54,20.9 -0.72,51.46 -0.36,101.88L328.36,487c3.45,-16.89 10.44,-29.25 12.47,-41.57 2.34,-14.18 0.19,-29.94 -20.81,-58.55 -43.08,-58.68 -46.85,-129.46 -12.92,-171.28 -8.65,-2.77 -15.09,-6.89 -19.46,-12.55 -6.11,-7.92 -7.4,-17.01 -8.57,-25.88l17.85,-2.35c1.11,8.45 2.38,13.88 4.97,17.24 2.59,3.36 7.31,6.47 19.55,8.46l-0.02,0.13 0.17,-0.17 6,9.42c19.96,31.36 42.84,51.29 73.33,54.44l6.51,0.67 1.37,6.4c2.74,12.83 8.63,19.09 15.12,22.24 6.49,3.14 14.23,2.94 20.47,0.2 9.32,-4.09 14.52,-11.35 16.7,-22.71 2.12,-11.05 0.55,-25.83 -5.14,-42.11 -33.54,-38.25 -44.47,-87.28 -63.9,-128.77 -6.05,-9.95 -12.45,-18.52 -20.39,-24.86C376.81,55.13 386.46,34.85 400,16zM214.07,34.97C179.55,35.06 146.07,43.06 96,58.58c31.15,9.92 70.4,18.9 86.04,39.01 4.46,-3.02 8.94,-5.88 13.42,-8.56 40.51,-24.22 80.39,-35.29 108.23,-40.04 -35.85,-9.48 -63.05,-14.09 -89.62,-14.02zM157.16,96.71c-1.13,-0.01 -2.27,-0.01 -3.4,0 -30.35,0.37 -63.1,9.74 -96.65,31.28 27.19,3.67 54.67,3.72 72.58,15.4 15.9,-17.92 33.14,-32.63 50.68,-44.67 -7.55,-1.24 -15.29,-1.94 -23.21,-2.02zM368,128a13.21,13.22 0,0 1,13.21 13.22A13.21,13.22 0,0 1,368 154.43a13.21,13.22 0,0 1,-13.21 -13.22A13.21,13.22 0,0 1,368 128zM129.09,144.07c-36.4,1.5 -68.9,6.53 -104.76,24.77 33.24,7.09 50.91,13.51 65.03,33.83 11.52,-22.53 25.05,-41.93 39.73,-58.6zM74.52,201.46C53.53,201.65 36.61,213.14 16,224c27.85,0 46.07,3.86 58.71,12.06 4.33,-11.65 9.16,-22.61 14.41,-32.92 -5.12,-1.19 -9.96,-1.71 -14.6,-1.67zM73.89,238.28c-17.93,5.84 -35.45,7.15 -54.23,22.28 17.62,4.64 34.79,9.6 41.4,22.03 3.5,-15.77 7.81,-30.52 12.83,-44.32zM444.04,246.85c1.62,-0.04 3.22,0.04 4.78,0.19l-1.64,17.93c-3.93,-0.36 -5.51,0.42 -5.57,0.47 -0.06,0.05 -1.03,0.66 -0.63,5.89l-17.95,1.37c-0.64,-8.35 1.3,-16.21 6.95,-21 4.24,-3.59 9.21,-4.74 14.06,-4.84zM52.22,290.72c-10.35,0.13 -23.76,5.65 -34.66,12.33 12.17,6.83 12.36,23.47 8.94,37.67 7.3,-9.1 16.85,-18.32 29.16,-28.48 1.02,-7.04 2.19,-13.9 3.51,-20.58 -2.08,-0.67 -4.42,-0.97 -6.95,-0.94z"
|
||||
android:fillColor="#ffffff"/>
|
||||
</vector>
|
||||
@@ -1,5 +1,5 @@
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
<solid android:color="@color/primary_green"/> <!-- couleur verte -->
|
||||
<corners android:radius="12dp"/> <!-- coins arrondis -->
|
||||
<corners android:radius="16dp"/> <!-- coins arrondis -->
|
||||
</shape>
|
||||
|
||||
11
app/src/main/res/drawable/settings_icon.xml
Normal file
11
app/src/main/res/drawable/settings_icon.xml
Normal file
@@ -0,0 +1,11 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="40dp"
|
||||
android:height="40dp"
|
||||
android:viewportWidth="600"
|
||||
android:viewportHeight="600">
|
||||
<path
|
||||
android:pathData="M440,0.01A39.99,40.01 90,0 0,399.99 40L399.99,60.01L40.01,60.01A39.99,40.01 90,0 0,-0 100A39.99,40.01 90,0 0,40.01 139.99L399.99,139.99L399.99,160.03A39.99,40.01 90,0 0,440 200.01A39.99,40.01 90,0 0,480.01 160.03L480.01,139.99L559.99,139.99A39.99,40.01 90,0 0,600 100A39.99,40.01 90,0 0,559.99 60.01L480.01,60.01L480.01,40A39.99,40.01 90,0 0,440 0.01zM150,200.01A39.99,40.01 90,0 0,109.99 240L109.99,260.01L40.02,260.01A39.99,40.01 90,0 0,0.01 300A39.99,40.01 90,0 0,40.02 339.99L109.99,339.99L109.99,360.03A39.99,40.01 90,0 0,150 400.01A39.99,40.01 90,0 0,190.01 360.03L190.01,339.99L560,339.99A39.99,40.01 90,0 0,600.01 300A39.99,40.01 90,0 0,560 260.01L190.01,260.01L190.01,240A39.99,40.01 90,0 0,150 200.01zM280,400.01A39.99,40.01 90,0 0,239.99 440L239.99,460.01L40.02,460.01A39.99,40.01 90,0 0,0.01 500A39.99,40.01 90,0 0,40.02 539.99L239.99,539.99L239.99,560.03A39.99,40.01 90,0 0,280 600.01A39.99,40.01 90,0 0,320.01 560.03L320.01,539.99L560,539.99A39.99,40.01 90,0 0,600.01 500A39.99,40.01 90,0 0,560 460.01L320.01,460.01L320.01,440A39.99,40.01 90,0 0,280 400.01z"
|
||||
android:strokeWidth="1"
|
||||
android:fillColor="#ffffff"
|
||||
android:strokeLineCap="round"/>
|
||||
</vector>
|
||||
48
app/src/main/res/drawable/tpe.xml
Normal file
48
app/src/main/res/drawable/tpe.xml
Normal file
@@ -0,0 +1,48 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="40dp"
|
||||
android:height="40dp"
|
||||
android:viewportWidth="462.73"
|
||||
android:viewportHeight="462.73">
|
||||
<path
|
||||
android:pathData="M376.36,130h-34.65V15c0,-8.28 -6.72,-15 -15,-15h-190.7c-8.28,0 -15,6.72 -15,15v115h-34.65c-8.28,0 -15,6.72 -15,15v116.2c0,8.28 6.72,15 15,15h1.69v171.53c0,8.28 6.72,15 15,15h256.62c8.28,0 15,-6.72 15,-15V276.2h1.69c8.28,0 15,-6.72 15,-15V145C391.36,136.71 384.65,130 376.36,130zM311.72,130h-83.35V30h83.35V130zM208.37,30v100h-22V30H208.37zM151.02,30h15.35v100h-15.35V30zM101.36,160h260v86.2h-260V160zM344.68,432.73h-226.62V276.2h226.62V432.73z"
|
||||
android:fillColor="#ffffff"/>
|
||||
<path
|
||||
android:pathData="M130.37,236.95h202c5.52,0 10,-4.48 10,-10v-47.69c0,-5.52 -4.48,-10 -10,-10h-202c-5.52,0 -10,4.48 -10,10v47.69C120.36,232.47 124.84,236.95 130.37,236.95zM224.82,216.95l27.69,-27.69h24.72l-27.69,27.69H224.82zM322.36,216.95h-44.55l27.69,-27.69h16.86V216.95zM140.37,189.25h83.86l-27.69,27.69h-56.17V189.25z"
|
||||
android:fillColor="#ffffff"/>
|
||||
<path
|
||||
android:pathData="M146.37,314.46h30c5.52,0 10,-4.48 10,-10s-4.48,-10 -10,-10h-30c-5.52,0 -10,4.48 -10,10S140.84,314.46 146.37,314.46z"
|
||||
android:fillColor="#ffffff"/>
|
||||
<path
|
||||
android:pathData="M146.37,347.8h30c5.52,0 10,-4.48 10,-10s-4.48,-10 -10,-10h-30c-5.52,0 -10,4.48 -10,10S140.84,347.8 146.37,347.8z"
|
||||
android:fillColor="#ffffff"/>
|
||||
<path
|
||||
android:pathData="M146.37,381.13h30c5.52,0 10,-4.48 10,-10s-4.48,-10 -10,-10h-30c-5.52,0 -10,4.48 -10,10S140.84,381.13 146.37,381.13z"
|
||||
android:fillColor="#ffffff"/>
|
||||
<path
|
||||
android:pathData="M176.37,394.46h-30c-5.52,0 -10,4.48 -10,10s4.48,10 10,10h30c5.52,0 10,-4.48 10,-10S181.89,394.46 176.37,394.46z"
|
||||
android:fillColor="#ffffff"/>
|
||||
<path
|
||||
android:pathData="M216.37,314.46h30c5.52,0 10,-4.48 10,-10s-4.48,-10 -10,-10h-30c-5.52,0 -10,4.48 -10,10S210.84,314.46 216.37,314.46z"
|
||||
android:fillColor="#ffffff"/>
|
||||
<path
|
||||
android:pathData="M216.37,347.8h30c5.52,0 10,-4.48 10,-10s-4.48,-10 -10,-10h-30c-5.52,0 -10,4.48 -10,10S210.84,347.8 216.37,347.8z"
|
||||
android:fillColor="#ffffff"/>
|
||||
<path
|
||||
android:pathData="M216.37,381.13h30c5.52,0 10,-4.48 10,-10s-4.48,-10 -10,-10h-30c-5.52,0 -10,4.48 -10,10S210.84,381.13 216.37,381.13z"
|
||||
android:fillColor="#ffffff"/>
|
||||
<path
|
||||
android:pathData="M216.37,414.46h30c5.52,0 10,-4.48 10,-10s-4.48,-10 -10,-10h-30c-5.52,0 -10,4.48 -10,10S210.84,414.46 216.37,414.46z"
|
||||
android:fillColor="#ffffff"/>
|
||||
<path
|
||||
android:pathData="M286.37,314.46h30c5.52,0 10,-4.48 10,-10s-4.48,-10 -10,-10h-30c-5.52,0 -10,4.48 -10,10S280.84,314.46 286.37,314.46z"
|
||||
android:fillColor="#ffffff"/>
|
||||
<path
|
||||
android:pathData="M286.37,347.8h30c5.52,0 10,-4.48 10,-10s-4.48,-10 -10,-10h-30c-5.52,0 -10,4.48 -10,10S280.84,347.8 286.37,347.8z"
|
||||
android:fillColor="#ffffff"/>
|
||||
<path
|
||||
android:pathData="M286.37,381.13h30c5.52,0 10,-4.48 10,-10s-4.48,-10 -10,-10h-30c-5.52,0 -10,4.48 -10,10S280.84,381.13 286.37,381.13z"
|
||||
android:fillColor="#ffffff"/>
|
||||
<path
|
||||
android:pathData="M286.37,414.46h30c5.52,0 10,-4.48 10,-10s-4.48,-10 -10,-10h-30c-5.52,0 -10,4.48 -10,10S280.84,414.46 286.37,414.46z"
|
||||
android:fillColor="#ffffff"/>
|
||||
</vector>
|
||||
5
app/src/main/res/drawable/x_background.xml
Normal file
5
app/src/main/res/drawable/x_background.xml
Normal file
@@ -0,0 +1,5 @@
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
<solid android:color="@android:color/holo_blue_dark" />
|
||||
<stroke android:width="2dp" android:color="@android:color/holo_blue_dark" />
|
||||
</shape>
|
||||
65
app/src/main/res/layout/fragment_annulation_ticket.xml
Normal file
65
app/src/main/res/layout/fragment_annulation_ticket.xml
Normal file
@@ -0,0 +1,65 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
tools:context=".AnnulationTicket">
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical"
|
||||
android:paddingTop="50dp"
|
||||
android:paddingHorizontal="24dp"
|
||||
android:gravity="center_horizontal">
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:textSize="18sp"
|
||||
android:layout_marginBottom="20dp"
|
||||
android:textFontWeight="200"
|
||||
android:text="Reference Ticket"
|
||||
android:textColor="@color/primary_green">
|
||||
</TextView>
|
||||
<EditText
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="40dp"
|
||||
android:hint="Reference Ticket"
|
||||
android:drawablePadding="5dp"
|
||||
android:textSize="14sp"
|
||||
android:drawableStart="@drawable/hashtag"
|
||||
android:background="@drawable/edittext_outline_white"
|
||||
android:inputType="number"
|
||||
/>
|
||||
<ImageButton
|
||||
android:id="@+id/scan_ticket_btn"
|
||||
android:layout_width="100dp"
|
||||
android:layout_height="100dp"
|
||||
android:layout_marginVertical="15dp"
|
||||
android:src="@drawable/camera"
|
||||
>
|
||||
|
||||
</ImageButton>
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal"
|
||||
android:gravity="center_horizontal">
|
||||
<Button
|
||||
android:id="@+id/annule_ticket_btn_back"
|
||||
android:layout_width="120dp"
|
||||
android:layout_height="35dp"
|
||||
android:background="@color/primary_green"
|
||||
android:text="@string/cancel" />
|
||||
<LinearLayout
|
||||
android:layout_width="10sp"
|
||||
android:layout_height="wrap_content"/>
|
||||
<Button
|
||||
android:id="@+id/annule_ticket_btn"
|
||||
android:layout_width="120dp"
|
||||
android:layout_height="35dp"
|
||||
android:background="@color/primary_green"
|
||||
android:text="Verifier" />
|
||||
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
</FrameLayout>
|
||||
86
app/src/main/res/layout/fragment_caisse.xml
Normal file
86
app/src/main/res/layout/fragment_caisse.xml
Normal file
@@ -0,0 +1,86 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:visibility="visible"
|
||||
android:background="@color/login_background"
|
||||
android:id="@+id/login_container"
|
||||
tools:context=".Caisse">
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical"
|
||||
android:padding="24dp">
|
||||
<Button
|
||||
android:id="@+id/solde_btn"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="57dp"
|
||||
android:textSize="21sp"
|
||||
android:textAlignment="textStart"
|
||||
android:layout_marginVertical="4sp"
|
||||
android:background="@drawable/rounded_button_green"
|
||||
android:fontFamily="sans-serif-medium"
|
||||
android:backgroundTint="@color/primary_green"
|
||||
android:drawableLeft="@drawable/tpe"
|
||||
android:text="@string/sold_u"
|
||||
android:textAllCaps="false"
|
||||
android:textColor="#FFFFFF"/>
|
||||
<Button
|
||||
android:id="@+id/win_ticket_btn"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="57dp"
|
||||
android:textSize="21sp"
|
||||
android:textAlignment="textStart"
|
||||
android:layout_marginVertical="4sp"
|
||||
android:background="@drawable/rounded_button_green"
|
||||
android:fontFamily="sans-serif-medium"
|
||||
android:backgroundTint="@color/primary_green"
|
||||
android:drawableLeft="@drawable/tpe"
|
||||
android:text="@string/win_ticket"
|
||||
android:textAllCaps="false"
|
||||
android:textColor="#FFFFFF"/>
|
||||
<Button
|
||||
android:id="@+id/cancel_ticket_btn"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="57dp"
|
||||
android:textSize="21sp"
|
||||
android:textAlignment="textStart"
|
||||
android:layout_marginVertical="4sp"
|
||||
android:background="@drawable/rounded_button_green"
|
||||
android:fontFamily="sans-serif-medium"
|
||||
android:backgroundTint="@color/primary_green"
|
||||
android:drawableLeft="@drawable/tpe"
|
||||
android:text="ANNULER TICKET"
|
||||
android:textAllCaps="false"
|
||||
android:textColor="#FFFFFF"/>
|
||||
<Button
|
||||
android:id="@+id/report_btn"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="57dp"
|
||||
android:textSize="21sp"
|
||||
android:textAlignment="textStart"
|
||||
android:layout_marginVertical="4sp"
|
||||
android:background="@drawable/rounded_button_green"
|
||||
android:fontFamily="sans-serif-medium"
|
||||
android:backgroundTint="@color/primary_green"
|
||||
android:drawableLeft="@drawable/tpe"
|
||||
android:text="RAPPORTS"
|
||||
android:textAllCaps="false"
|
||||
android:textColor="#FFFFFF"/>
|
||||
<Button
|
||||
android:id="@+id/last_bets_btn"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="57dp"
|
||||
android:textSize="21sp"
|
||||
android:textAlignment="textStart"
|
||||
android:layout_marginVertical="4sp"
|
||||
android:background="@drawable/rounded_button_green"
|
||||
android:fontFamily="sans-serif-medium"
|
||||
android:backgroundTint="@color/primary_green"
|
||||
android:drawableLeft="@drawable/tpe"
|
||||
android:text="DERNIERS PARIS"
|
||||
android:textAllCaps="false"
|
||||
android:textColor="#FFFFFF"/>
|
||||
</LinearLayout>
|
||||
</FrameLayout>
|
||||
@@ -3,7 +3,6 @@
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:paddingTop="100dp"
|
||||
android:visibility="visible"
|
||||
android:background="@color/login_background"
|
||||
android:id="@+id/login_container"
|
||||
@@ -13,23 +12,22 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:paddingHorizontal="24dp"
|
||||
android:gravity="center_vertical"
|
||||
android:gravity="start"
|
||||
android:orientation="vertical"
|
||||
android:visibility="visible">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center"
|
||||
android:layout_marginTop="48dp"
|
||||
android:layout_marginBottom="32dp"
|
||||
android:layout_marginVertical="10dp"
|
||||
android:padding="12dp"
|
||||
android:layout_marginTop="10dp"
|
||||
android:layout_marginBottom="30dp"
|
||||
android:layout_gravity="center"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<ImageView
|
||||
android:layout_width="200dp"
|
||||
android:layout_height="200dp"
|
||||
android:layout_marginBottom="24dp"
|
||||
android:layout_width="300dp"
|
||||
android:layout_height="100dp"
|
||||
android:contentDescription="@string/logo"
|
||||
android:scaleType="fitCenter"
|
||||
android:src="@drawable/pmu_logo" />
|
||||
@@ -39,47 +37,49 @@
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical"
|
||||
android:visibility="visible"
|
||||
android:paddingTop="12dp"
|
||||
android:gravity="center_horizontal">
|
||||
<EditText
|
||||
android:id="@+id/userNameInput"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:padding="12dp"
|
||||
android:autofillHints="username"
|
||||
android:drawableStart="@android:drawable/ic_menu_myplaces"
|
||||
android:textColorHint="@color/text_hint_color"
|
||||
android:textColor="@color/text_color"
|
||||
android:background="@drawable/edittext_border"
|
||||
android:inputType="text"
|
||||
android:hint="@string/username_message" />
|
||||
|
||||
<EditText
|
||||
android:id="@+id/passwordInput"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:padding="12dp"
|
||||
android:autofillHints="password"
|
||||
android:textColorHint="@color/text_hint_color"
|
||||
android:textColor="@color/text_color"
|
||||
android:layout_marginVertical="19dp"
|
||||
android:drawableStart="@android:drawable/ic_lock_idle_lock"
|
||||
android:background="@drawable/edittext_border"
|
||||
android:inputType="textPassword"
|
||||
android:hint="@string/password_message" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/loginButton"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="24dp"
|
||||
android:layout_height="57dp"
|
||||
android:textSize="21sp"
|
||||
android:textAlignment="textStart"
|
||||
android:layout_marginVertical="4sp"
|
||||
android:background="@drawable/rounded_button_green"
|
||||
android:fontFamily="sans-serif-medium"
|
||||
android:backgroundTint="@color/primary_green"
|
||||
android:padding="14dp"
|
||||
android:text="@string/log_in"
|
||||
android:drawableLeft="@drawable/horse_head_svgrepo_com"
|
||||
android:text="@string/pmu"
|
||||
android:textAllCaps="false"
|
||||
android:textColor="#FFFFFF" />
|
||||
android:textColor="#FFFFFF"/>
|
||||
<Button
|
||||
android:id="@+id/caisse"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="57dp"
|
||||
android:textSize="21sp"
|
||||
android:textAlignment="textStart"
|
||||
android:layout_marginVertical="4sp"
|
||||
android:background="@drawable/rounded_button_green"
|
||||
android:fontFamily="sans-serif-medium"
|
||||
android:backgroundTint="@color/primary_green"
|
||||
android:drawableLeft="@drawable/tpe"
|
||||
android:text="@string/caisse"
|
||||
android:textAllCaps="false"
|
||||
android:textColor="#FFFFFF"/>
|
||||
<Button
|
||||
android:id="@+id/settings"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="57dp"
|
||||
android:textSize="23sp"
|
||||
android:textAlignment="textStart"
|
||||
android:layout_marginVertical="4sp"
|
||||
android:background="@drawable/rounded_button_green"
|
||||
android:fontFamily="sans-serif-medium"
|
||||
android:backgroundTint="@color/primary_green"
|
||||
android:drawableLeft="@drawable/settings_icon"
|
||||
android:text="@string/settings"
|
||||
android:textAllCaps="false"
|
||||
android:textColor="#FFFFFF"/>
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
|
||||
|
||||
65
app/src/main/res/layout/fragment_win_ticket.xml
Normal file
65
app/src/main/res/layout/fragment_win_ticket.xml
Normal file
@@ -0,0 +1,65 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
tools:context=".WinTicket">
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical"
|
||||
android:paddingTop="50dp"
|
||||
android:paddingHorizontal="24dp"
|
||||
android:gravity="center_horizontal">
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:textSize="18sp"
|
||||
android:layout_marginBottom="20dp"
|
||||
android:textFontWeight="200"
|
||||
android:text="Reference Ticket"
|
||||
android:textColor="@color/primary_green">
|
||||
</TextView>
|
||||
<EditText
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="40dp"
|
||||
android:hint="Reference Ticket"
|
||||
android:drawablePadding="5dp"
|
||||
android:textSize="14sp"
|
||||
android:drawableStart="@drawable/hashtag"
|
||||
android:background="@drawable/edittext_outline_white"
|
||||
android:inputType="number"
|
||||
/>
|
||||
<ImageButton
|
||||
android:id="@+id/scan_ticket_btn"
|
||||
android:layout_width="100dp"
|
||||
android:layout_height="100dp"
|
||||
android:layout_marginVertical="15dp"
|
||||
android:src="@drawable/camera"
|
||||
>
|
||||
|
||||
</ImageButton>
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal"
|
||||
android:gravity="center_horizontal">
|
||||
<Button
|
||||
android:id="@+id/win_ticket_btn_back"
|
||||
android:layout_width="120dp"
|
||||
android:layout_height="35dp"
|
||||
android:background="@color/primary_green"
|
||||
android:text="@string/cancel" />
|
||||
<LinearLayout
|
||||
android:layout_width="10sp"
|
||||
android:layout_height="wrap_content"/>
|
||||
<Button
|
||||
android:id="@+id/win_ticket_verification_btn"
|
||||
android:layout_width="120dp"
|
||||
android:layout_height="35dp"
|
||||
android:background="@color/primary_green"
|
||||
android:text="Verifier" />
|
||||
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
</FrameLayout>
|
||||
136
app/src/main/res/layout/pari_confirmation.xml
Normal file
136
app/src/main/res/layout/pari_confirmation.xml
Normal file
@@ -0,0 +1,136 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:card_view="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
card_view:cardCornerRadius="20dp"
|
||||
card_view:cardElevation="8dp"
|
||||
android:foreground="?attr/selectableItemBackground">
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical"
|
||||
android:padding="15sp">
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/confirmation_pari"
|
||||
android:layout_marginBottom="10dp"
|
||||
android:textColor="@color/primary_green"
|
||||
android:layout_gravity="center_horizontal"
|
||||
android:textFontWeight="400"
|
||||
android:textSize="20sp"
|
||||
/>
|
||||
<TextView
|
||||
android:id="@+id/alert_course_numero"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:textSize="17sp"
|
||||
android:textFontWeight="500"
|
||||
android:text=""/>
|
||||
<com.google.android.material.divider.MaterialDivider
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="2sp"
|
||||
tools:ignore="SmallSp"
|
||||
android:layout_marginVertical="10sp" />
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal"
|
||||
android:gravity="center_vertical"
|
||||
android:layout_marginHorizontal="28dp">
|
||||
|
||||
<!-- Premier TextView -->
|
||||
<TextView
|
||||
android:id="@+id/alert_pari_type"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:text=""
|
||||
android:textColor="@color/primary_green"
|
||||
android:gravity="center"
|
||||
android:textStyle="normal"
|
||||
android:textSize="17sp"/>
|
||||
|
||||
<!-- Divider -->
|
||||
<com.google.android.material.divider.MaterialDivider
|
||||
android:layout_width="1dp"
|
||||
android:layout_height="40dp"
|
||||
android:layout_marginHorizontal="8dp"/>
|
||||
|
||||
<!-- Deuxième TextView -->
|
||||
<TextView
|
||||
android:id="@+id/alert_is_elargie"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:text=""
|
||||
android:gravity="center"
|
||||
android:textSize="17sp"
|
||||
android:textStyle="bold"/>
|
||||
</LinearLayout>
|
||||
<com.google.android.material.divider.MaterialDivider
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="2sp"
|
||||
tools:ignore="SmallSp"
|
||||
android:layout_marginVertical="10sp" />
|
||||
<TextView
|
||||
android:id="@+id/alert_combinaison"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text=""
|
||||
android:gravity="center"
|
||||
android:textSize="17sp"
|
||||
android:textStyle="bold"/>
|
||||
<com.google.android.material.divider.MaterialDivider
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="2sp"
|
||||
tools:ignore="SmallSp"
|
||||
android:layout_marginVertical="10sp" />
|
||||
<TextView
|
||||
android:id="@+id/alert_coeff"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text=""
|
||||
android:gravity="center"
|
||||
android:textSize="17sp"
|
||||
android:textStyle="bold"/>
|
||||
<com.google.android.material.divider.MaterialDivider
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="2sp"
|
||||
tools:ignore="SmallSp"
|
||||
android:layout_marginVertical="10sp" />
|
||||
<TextView
|
||||
android:id="@+id/alert_montant"
|
||||
android:layout_marginBottom="30sp"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text=""
|
||||
android:textColor="@color/primary_green"
|
||||
android:layout_gravity="start"
|
||||
android:textFontWeight="400"
|
||||
android:textSize="20sp"
|
||||
/>
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal"
|
||||
android:gravity="end">
|
||||
<Button
|
||||
android:id="@+id/alert_cancel"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@drawable/button_transparent"
|
||||
android:text="@string/no"
|
||||
android:textColor="@color/primary_green" />
|
||||
<Button
|
||||
android:id="@+id/alert_validate"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@drawable/button_transparent"
|
||||
android:text="@string/yes"
|
||||
android:textColor="@color/primary_green" />
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
</androidx.cardview.widget.CardView>
|
||||
57
app/src/main/res/layout/pin_view.xml
Normal file
57
app/src/main/res/layout/pin_view.xml
Normal file
@@ -0,0 +1,57 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:card_view="http://schemas.android.com/apk/res-auto"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
card_view:cardCornerRadius="20dp"
|
||||
card_view:cardElevation="8dp"
|
||||
android:foreground="?attr/selectableItemBackground">
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:padding="12dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical"
|
||||
>
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal"
|
||||
android:gravity="center_horizontal"
|
||||
android:layout_marginBottom="20dp"
|
||||
>
|
||||
<ImageView
|
||||
android:layout_width="100sp"
|
||||
android:layout_height="100sp"
|
||||
android:src="@drawable/pmu_logo">
|
||||
</ImageView>
|
||||
</LinearLayout>
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="20sp"
|
||||
android:orientation="vertical">
|
||||
<EditText
|
||||
android:id="@+id/pin"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="45dp"
|
||||
android:hint="@string/pin_message"
|
||||
android:inputType="numberPassword"
|
||||
android:textSize="18sp"
|
||||
android:textFontWeight="600"
|
||||
android:drawableStart="@android:drawable/ic_lock_idle_lock"
|
||||
android:background="@drawable/edittext_border">
|
||||
</EditText>
|
||||
</LinearLayout>
|
||||
<Button
|
||||
android:id="@+id/pin_validate"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="38sp"
|
||||
android:layout_gravity="center_horizontal"
|
||||
android:background="@drawable/rounded_button_green"
|
||||
android:layout_marginTop="20sp"
|
||||
android:text="@string/validate"
|
||||
>
|
||||
|
||||
</Button>
|
||||
</LinearLayout>
|
||||
</androidx.cardview.widget.CardView>
|
||||
@@ -2,6 +2,8 @@
|
||||
<string name="app_name">PMU</string>
|
||||
<string name="action_settings">Settings</string>
|
||||
<string name="sold">Solde</string>
|
||||
<string name="sold_u">SOLDE</string>
|
||||
<string name="win_ticket">TICKET GAGNANT</string>
|
||||
<string name="last_bets">Derniers paris</string>
|
||||
<string name="others">Autres</string>
|
||||
<string name="by_course">Solde par course</string>
|
||||
@@ -71,4 +73,11 @@
|
||||
<string name="hello_blank_fragment">Hello blank fragment</string>
|
||||
<string name="coefficient">Coefficient</string>
|
||||
<string name="tout_ordre">Tout ordre</string>
|
||||
<string name="pin_message">Entrez le pin</string>
|
||||
<string name="confirmation_pari">Confirmation Pari</string>
|
||||
<string name="no">non</string>
|
||||
<string name="yes">oui</string>
|
||||
<string name="pmu">PMU</string>
|
||||
<string name="caisse">CAISSE</string>
|
||||
<string name="settings">PARAMERES\n</string>
|
||||
</resources>
|
||||
Reference in New Issue
Block a user