diff --git a/Listify/app/src/main/java/com/example/listify/ItemDetails.java b/Listify/app/src/main/java/com/example/listify/ItemDetails.java index 415d1a4..15f0767 100644 --- a/Listify/app/src/main/java/com/example/listify/ItemDetails.java +++ b/Listify/app/src/main/java/com/example/listify/ItemDetails.java @@ -1,5 +1,8 @@ package com.example.listify; +import android.app.Dialog; +import android.graphics.Color; +import android.graphics.drawable.ColorDrawable; import android.os.Bundle; import com.amplifyframework.auth.AuthException; @@ -11,6 +14,8 @@ import com.google.android.material.floatingactionbutton.FloatingActionButton; import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.widget.Toolbar; import android.view.View; +import android.view.Window; +import android.view.WindowManager; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.LinearLayout; @@ -71,6 +76,17 @@ public class ItemDetails extends AppCompatActivity implements ListPickerDialogFr @Override public void onClick(View v) { closeFABMenu(); + // Create and show a loading dialog + Dialog loadingDialog = new Dialog(ItemDetails.this); + loadingDialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE); + loadingDialog.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); + // layout to display + loadingDialog.setContentView(R.layout.dialog_loading); + // set color transpartent + loadingDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); + loadingDialog.setCancelable(false); + loadingDialog.setCanceledOnTouchOutside(false); + loadingDialog.show(); Properties configs = new Properties(); try { @@ -82,20 +98,27 @@ public class ItemDetails extends AppCompatActivity implements ListPickerDialogFr Requestor requestor = new Requestor(am, configs.getProperty("apiKey")); SynchronousReceiver listIdsReceiver = new SynchronousReceiver<>(); SynchronousReceiver listReceiver = new SynchronousReceiver<>(); - requestor.getListOfIds(List.class, listIdsReceiver, listIdsReceiver); - try { - Integer[] listIds = listIdsReceiver.await(); - for (int i = 0; i < listIds.length; i++) { - requestor.getObject(Integer.toString(listIds[i]), List.class, listReceiver, listReceiver); - shoppingLists.add(listReceiver.await()); - } - } catch (Exception e) { - e.printStackTrace(); - } - ListPickerDialogFragment listPickerDialog = new ListPickerDialogFragment(shoppingLists); - listPickerDialog.show(getSupportFragmentManager(), "User Lists"); + Thread t = new Thread(new Runnable() { + @Override + public void run() { + try { + Integer[] listIds = listIdsReceiver.await(); + for (int i = 0; i < listIds.length; i++) { + requestor.getObject(Integer.toString(listIds[i]), List.class, listReceiver, listReceiver); + shoppingLists.add(listReceiver.await()); + } + } catch (Exception e) { + e.printStackTrace(); + } + + loadingDialog.cancel(); + ListPickerDialogFragment listPickerDialog = new ListPickerDialogFragment(shoppingLists); + listPickerDialog.show(getSupportFragmentManager(), "User Lists"); + } + }); + t.start(); } }); @@ -184,6 +207,17 @@ public class ItemDetails extends AppCompatActivity implements ListPickerDialogFr // Create a new list and add the item to it @Override public void sendNewListName(String name, int quantity) { + // Create and show a loading dialog + Dialog loadingDialog = new Dialog(this); + loadingDialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE); + loadingDialog.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); + // layout to display + loadingDialog.setContentView(R.layout.dialog_loading); + // set color transpartent + loadingDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); + loadingDialog.setCancelable(false); + loadingDialog.setCanceledOnTouchOutside(false); + loadingDialog.show(); Properties configs = new Properties(); try { @@ -196,16 +230,34 @@ public class ItemDetails extends AppCompatActivity implements ListPickerDialogFr com.example.listify.data.List newList = new List(-1, name, "user filled by lambda", Instant.now().toEpochMilli()); - try { - requestor.postObject(newList, idReceiver, idReceiver); - int newListId = idReceiver.await(); - ListEntry entry = new ListEntry(newListId, curProduct.getItemId(), quantity, Instant.now().toEpochMilli(),false); - requestor.postObject(entry); + Thread t = new Thread(new Runnable() { + @Override + public void run() { + try { + requestor.postObject(newList, idReceiver, idReceiver); + int newListId = idReceiver.await(); + ListEntry entry = new ListEntry(newListId, curProduct.getItemId(), quantity, Instant.now().toEpochMilli(),false); + requestor.postObject(entry); - Toast.makeText(this, String.format("%s created and item added", name), Toast.LENGTH_LONG).show(); - } catch (Exception e) { - Toast.makeText(this, "An error occurred", Toast.LENGTH_LONG).show(); - e.printStackTrace(); - } + runOnUiThread(new Runnable() { + @Override + public void run() { + Toast.makeText(ItemDetails.this, String.format("%s created and item added", name), Toast.LENGTH_LONG).show(); + loadingDialog.cancel(); + } + }); + } catch (Exception e) { + runOnUiThread(new Runnable() { + @Override + public void run() { + Toast.makeText(ItemDetails.this, "An error occurred", Toast.LENGTH_LONG).show(); + loadingDialog.cancel(); + e.printStackTrace(); + } + }); + } + } + }); + t.start(); } } \ No newline at end of file diff --git a/Listify/app/src/main/java/com/example/listify/ui/lists/ListsFragment.java b/Listify/app/src/main/java/com/example/listify/ui/lists/ListsFragment.java index e542c0a..6c1c2c1 100644 --- a/Listify/app/src/main/java/com/example/listify/ui/lists/ListsFragment.java +++ b/Listify/app/src/main/java/com/example/listify/ui/lists/ListsFragment.java @@ -1,10 +1,15 @@ package com.example.listify.ui.lists; +import android.app.Dialog; import android.content.Intent; +import android.graphics.Color; +import android.graphics.drawable.ColorDrawable; import android.os.Bundle; import android.view.View; import android.view.ViewGroup; import android.view.LayoutInflater; +import android.view.Window; +import android.view.WindowManager; import android.widget.AdapterView; import android.widget.ListView; import android.widget.ProgressBar; @@ -85,6 +90,17 @@ public class ListsFragment extends Fragment implements CreateListDialogFragment. @Override public void sendNewListName(String name) { + // Create and show a loading dialog + Dialog loadingDialog = new Dialog(getActivity()); + loadingDialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE); + loadingDialog.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); + // layout to display + loadingDialog.setContentView(R.layout.dialog_loading); + // set color transpartent + loadingDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); + loadingDialog.setCancelable(false); + loadingDialog.setCanceledOnTouchOutside(false); + loadingDialog.show(); Properties configs = new Properties(); try { @@ -99,14 +115,39 @@ public class ListsFragment extends Fragment implements CreateListDialogFragment. try { requestor.postObject(newList, idReceiver, idReceiver); - newList.setItemID(idReceiver.await()); - shoppingLists.add(newList); - displayShoppingListsAdapter.notifyDataSetChanged(); - Toast.makeText(getContext(), String.format("%s created", name), Toast.LENGTH_LONG).show(); } catch (Exception e) { Toast.makeText(getContext(), "An error occurred", Toast.LENGTH_LONG).show(); e.printStackTrace(); } + Thread t = new Thread(new Runnable() { + @Override + public void run() { + try { + newList.setItemID(idReceiver.await()); + } catch (Exception e) { + getActivity().runOnUiThread(new Runnable() { + @Override + public void run() { + Toast.makeText(getContext(), "An error occurred", Toast.LENGTH_LONG).show(); + loadingDialog.cancel(); + } + }); + e.printStackTrace(); + + } + shoppingLists.add(newList); + + getActivity().runOnUiThread(new Runnable() { + @Override + public void run() { + displayShoppingListsAdapter.notifyDataSetChanged(); + loadingDialog.cancel(); + Toast.makeText(getContext(), String.format("%s created", name), Toast.LENGTH_LONG).show(); + } + }); + } + }); + t.start(); } @Override diff --git a/Listify/app/src/main/res/layout/dialog_loading.xml b/Listify/app/src/main/res/layout/dialog_loading.xml new file mode 100644 index 0000000..a51c2a1 --- /dev/null +++ b/Listify/app/src/main/res/layout/dialog_loading.xml @@ -0,0 +1,16 @@ + + + + + \ No newline at end of file diff --git a/Listify/app/src/main/res/menu/activity_main_drawer.xml b/Listify/app/src/main/res/menu/activity_main_drawer.xml index 93efe47..f2e00a0 100644 --- a/Listify/app/src/main/res/menu/activity_main_drawer.xml +++ b/Listify/app/src/main/res/menu/activity_main_drawer.xml @@ -20,10 +20,10 @@ android:id="@+id/nav_lists" android:icon="@drawable/ic_baseline_list_alt_28" android:title="@string/menu_lists" /> - + + + + + \ No newline at end of file