Tesis 1.0.0
Loading...
Searching...
No Matches
MainActivity.java
Go to the documentation of this file.
1package com.example.food_front;
2
3import android.content.Intent;
4import android.os.Bundle;
5import android.util.Log;
6import android.view.MenuItem;
7import android.view.View;
8
9import androidx.annotation.NonNull;
10import androidx.appcompat.app.AppCompatActivity;
11import androidx.fragment.app.FragmentManager;
12import androidx.fragment.app.FragmentTransaction;
13import com.example.food_front.databinding.ActivityMainBinding;
14import com.example.food_front.utils.ProfileManager;
15import com.example.food_front.utils.SessionManager;
16import com.google.android.material.bottomnavigation.BottomNavigationView;
17
18public class MainActivity extends AppCompatActivity {
19
20 private ActivityMainBinding binding;
21 private SessionManager sessionManager;
22 private ProfileManager profileManager;
23
24
25 @Override
26 protected void onCreate(Bundle savedInstanceState) {
27 super.onCreate(savedInstanceState); binding = ActivityMainBinding.inflate(getLayoutInflater());
28 setContentView(binding.getRoot());
29
30 // Initialize SessionManager and ProfileManager
31 sessionManager = new SessionManager(this);
32 profileManager = new ProfileManager(this);
33
34 // Cargar el LoginFragment al inicio
35
36 // Check if a token exists to determine the initial fragment
37 if (sessionManager.getToken() != null) {
38 mostrarHomeLimpiandoBackStack(); // Show HomeFragment if logged in, limpiando el back stack
39 } else {
40 mostrarLogin(); // Show LoginFragment if not logged in
41 }
42
43// mostrarLogin(); // Carga el LoginFragment al iniciar la aplicación
44
45
46 binding.bottomNavigation.setOnItemSelectedListener(new BottomNavigationView.OnItemSelectedListener() {
47 @Override
48 public boolean onNavigationItemSelected(@NonNull MenuItem item) {
49
50 int itemId = item.getItemId();
51 if (itemId == R.id.home) {
52 mostrarHomeLimpiandoBackStack(); // Show HomeFragment limpiando el back stack
53 return true;
54 } else if (itemId == R.id.profile || itemId == R.id.menu || itemId == R.id.carrito) {
55 if (sessionManager.getToken() == null ){
56 mostrarLogin();
57 return false;
58 } else {
59 if (itemId == R.id.profile){
60 mostrarPerfil();
61 return true;
62 }else if (itemId == R.id.menu ){
63 mostrarProductos();
64 return true;
65 }else if (itemId == R.id.carrito){
66 mostrarCarrito(); // Show CartFragment
67 return true;
68 }
69 }
70 } else if (itemId == R.id.contact) {
71 mostrarContact(); // Show ContactFragment
72 return true;
73 }
74 return false;
75 }
76 });
77
78 // Manejar deep link también al abrir la app desde cerrado
79 Intent intent = getIntent();
80 if (intent != null && Intent.ACTION_VIEW.equals(intent.getAction()) && intent.getData() != null) {
81 String scheme = intent.getData().getScheme();
82 String host = intent.getData().getHost();
83 if ("foodapp".equals(scheme) && "success".equals(host)) {
84 getSupportFragmentManager()
85 .beginTransaction()
86 .replace(R.id.fragment_container_view, new SuccessFragment())
87 .addToBackStack(null)
88 .commit();
89 return;
90 }
91 }
92 }
93
94 public void mostrarLogin() {
95 FragmentManager fragmentManager = getSupportFragmentManager();
96 FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
97 fragmentTransaction.replace(R.id.fragment_container_view, new LoginFragment());
98 fragmentTransaction.commit();
99 }
100 public void mostrarHome() {
101 FragmentManager fragmentManager = getSupportFragmentManager();
102 FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
103 fragmentTransaction.addToBackStack(null);
104 fragmentTransaction.replace(R.id.fragment_container_view, new HomeFragment(), "HomeFragment");
105 fragmentTransaction.commit();
106 }
107
109 FragmentManager fragmentManager = getSupportFragmentManager();
110 fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
111 FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
112 fragmentTransaction.replace(R.id.fragment_container_view, new HomeFragment(), "HomeFragment");
113 fragmentTransaction.commit();
114 }
115
116 public void mostrarPerfil() {
117 FragmentManager fragmentManager = getSupportFragmentManager();
118 FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
119 fragmentTransaction.addToBackStack(null);
120 fragmentTransaction.replace(R.id.fragment_container_view, new ProfileFragment());
121 fragmentTransaction.commit();
122 }
123
124 public void mostrarProductos() {
125 FragmentManager fragmentManager = getSupportFragmentManager();
126 FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
127 fragmentTransaction.addToBackStack(null);
128 fragmentTransaction.replace(R.id.fragment_container_view, new ProductsFragment());
129 fragmentTransaction.commit();
130 }
131
132 public void mostrarCarrito() {
133 FragmentManager fragmentManager = getSupportFragmentManager();
134 FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
135 fragmentTransaction.addToBackStack(null);
136 fragmentTransaction.replace(R.id.fragment_container_view, new CartFragment());
137 fragmentTransaction.commit();
138 }
139
140 public void mostrarContact() {
141 FragmentManager fragmentManager = getSupportFragmentManager();
142 FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
143 fragmentTransaction.addToBackStack(null);
144 fragmentTransaction.replace(R.id.fragment_container_view, new ContactFragment());
145 fragmentTransaction.commit();
146 }
147
148 // Método para actualizar la imagen de perfil en todos los fragmentos
149 public void actualizarImagenPerfil(String imageUrl) {
150 try {
151 // Limpiar caché primero
152 com.example.food_front.utils.ImageCacheManager.clearGlideCache(this);
153
154 // Guarda la nueva URL en el ProfileManager
155 ProfileManager profileManager = new ProfileManager(this);
156 profileManager.saveProfileImageUrl(imageUrl);
157
158 Log.d("MainActivity", "Actualizando imagen de perfil en todos los fragmentos: " + imageUrl);
159
160 // Actualizar todos los fragmentos directamente en el hilo UI
161 actualizarFragmentosDirectamente(imageUrl);
162
163 } catch (Exception e) {
164 Log.e("MainActivity", "Error al actualizar imagen de perfil: " + e.getMessage());
165 }
166 }
167
171 private void actualizarFragmentosDirectamente(String imageUrl) {
172 try {
173 runOnUiThread(() -> {
174 try {
175 // Actualizar HomeFragment si está visible
176 HomeFragment homeFragment = (HomeFragment) getSupportFragmentManager()
177 .findFragmentByTag("HomeFragment");
178 if (homeFragment != null) {
179 homeFragment.actualizarImagenPerfil(imageUrl);
180 }
181
182 // Intentar actualizar ProfileFragment si está visible
183 for (androidx.fragment.app.Fragment fragment : getSupportFragmentManager().getFragments()) {
184 if (fragment instanceof ProfileFragment && fragment.isVisible()) {
185 ((ProfileFragment)fragment).actualizarImagenDePerfil(imageUrl);
186 break;
187 }
188 }
189 } catch (Exception e) {
190 Log.e("MainActivity", "Error al actualizar fragmentos directamente: " + e.getMessage());
191 }
192 });
193 } catch (Exception e) {
194 Log.e("MainActivity", "Error en actualizarFragmentosDirectamente: " + e.getMessage());
195 }
196 }
197
205 try {
206 // Opción más segura: Simplemente llamar al método seguro que ya tenemos
207 actualizarFragmentosDirectamente(profileManager.getProfileImageUrl());
208 } catch (Exception e) {
209 Log.e("MainActivity", "Error en actualizarTodasLasImagenes: " + e.getMessage());
210 }
211 }
212
213 @Override
214 protected void onNewIntent(Intent intent) {
215 super.onNewIntent(intent);
216 setIntent(intent);
217 // Manejo del deep link foodapp://success
218 if (intent != null && Intent.ACTION_VIEW.equals(intent.getAction()) && intent.getData() != null) {
219 String scheme = intent.getData().getScheme();
220 String host = intent.getData().getHost();
221 if ("foodapp".equals(scheme) && "success".equals(host)) {
222 // Redirigir directamente al fragmento de éxito
223 getSupportFragmentManager()
224 .beginTransaction()
225 .replace(R.id.fragment_container_view, new SuccessFragment())
226 .addToBackStack(null)
227 .commit();
228 }
229 }
230 }
231}
void onCreate(Bundle savedInstanceState)
void actualizarImagenPerfil(String imageUrl)