Async creating lists and adding items

This commit is contained in:
Clayton Wilson 2020-10-22 23:09:57 -04:00
parent 07d0cd44cb
commit 8604d98e63
4 changed files with 140 additions and 31 deletions

View File

@ -1,5 +1,8 @@
package com.example.listify; package com.example.listify;
import android.app.Dialog;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle; import android.os.Bundle;
import com.amplifyframework.auth.AuthException; import com.amplifyframework.auth.AuthException;
@ -11,6 +14,8 @@ import com.google.android.material.floatingactionbutton.FloatingActionButton;
import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar; import androidx.appcompat.widget.Toolbar;
import android.view.View; import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ImageButton; import android.widget.ImageButton;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.LinearLayout; import android.widget.LinearLayout;
@ -71,6 +76,17 @@ public class ItemDetails extends AppCompatActivity implements ListPickerDialogFr
@Override @Override
public void onClick(View v) { public void onClick(View v) {
closeFABMenu(); 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(); Properties configs = new Properties();
try { try {
@ -82,8 +98,11 @@ public class ItemDetails extends AppCompatActivity implements ListPickerDialogFr
Requestor requestor = new Requestor(am, configs.getProperty("apiKey")); Requestor requestor = new Requestor(am, configs.getProperty("apiKey"));
SynchronousReceiver<Integer[]> listIdsReceiver = new SynchronousReceiver<>(); SynchronousReceiver<Integer[]> listIdsReceiver = new SynchronousReceiver<>();
SynchronousReceiver<List> listReceiver = new SynchronousReceiver<>(); SynchronousReceiver<List> listReceiver = new SynchronousReceiver<>();
requestor.getListOfIds(List.class, listIdsReceiver, listIdsReceiver); requestor.getListOfIds(List.class, listIdsReceiver, listIdsReceiver);
Thread t = new Thread(new Runnable() {
@Override
public void run() {
try { try {
Integer[] listIds = listIdsReceiver.await(); Integer[] listIds = listIdsReceiver.await();
for (int i = 0; i < listIds.length; i++) { for (int i = 0; i < listIds.length; i++) {
@ -94,10 +113,14 @@ public class ItemDetails extends AppCompatActivity implements ListPickerDialogFr
e.printStackTrace(); e.printStackTrace();
} }
loadingDialog.cancel();
ListPickerDialogFragment listPickerDialog = new ListPickerDialogFragment(shoppingLists); ListPickerDialogFragment listPickerDialog = new ListPickerDialogFragment(shoppingLists);
listPickerDialog.show(getSupportFragmentManager(), "User Lists"); listPickerDialog.show(getSupportFragmentManager(), "User Lists");
} }
}); });
t.start();
}
});
linCreateList.setOnClickListener(new View.OnClickListener() { linCreateList.setOnClickListener(new View.OnClickListener() {
@Override @Override
@ -184,6 +207,17 @@ public class ItemDetails extends AppCompatActivity implements ListPickerDialogFr
// Create a new list and add the item to it // Create a new list and add the item to it
@Override @Override
public void sendNewListName(String name, int quantity) { 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(); Properties configs = new Properties();
try { 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()); com.example.listify.data.List newList = new List(-1, name, "user filled by lambda", Instant.now().toEpochMilli());
Thread t = new Thread(new Runnable() {
@Override
public void run() {
try { try {
requestor.postObject(newList, idReceiver, idReceiver); requestor.postObject(newList, idReceiver, idReceiver);
int newListId = idReceiver.await(); int newListId = idReceiver.await();
ListEntry entry = new ListEntry(newListId, curProduct.getItemId(), quantity, Instant.now().toEpochMilli(),false); ListEntry entry = new ListEntry(newListId, curProduct.getItemId(), quantity, Instant.now().toEpochMilli(),false);
requestor.postObject(entry); requestor.postObject(entry);
Toast.makeText(this, String.format("%s created and item added", name), Toast.LENGTH_LONG).show(); 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) { } catch (Exception e) {
Toast.makeText(this, "An error occurred", Toast.LENGTH_LONG).show(); runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(ItemDetails.this, "An error occurred", Toast.LENGTH_LONG).show();
loadingDialog.cancel();
e.printStackTrace(); e.printStackTrace();
} }
});
}
}
});
t.start();
} }
} }

View File

@ -1,10 +1,15 @@
package com.example.listify.ui.lists; package com.example.listify.ui.lists;
import android.app.Dialog;
import android.content.Intent; import android.content.Intent;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle; import android.os.Bundle;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.Window;
import android.view.WindowManager;
import android.widget.AdapterView; import android.widget.AdapterView;
import android.widget.ListView; import android.widget.ListView;
import android.widget.ProgressBar; import android.widget.ProgressBar;
@ -85,6 +90,17 @@ public class ListsFragment extends Fragment implements CreateListDialogFragment.
@Override @Override
public void sendNewListName(String name) { 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(); Properties configs = new Properties();
try { try {
@ -99,14 +115,39 @@ public class ListsFragment extends Fragment implements CreateListDialogFragment.
try { try {
requestor.postObject(newList, idReceiver, idReceiver); 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) { } catch (Exception e) {
Toast.makeText(getContext(), "An error occurred", Toast.LENGTH_LONG).show(); Toast.makeText(getContext(), "An error occurred", Toast.LENGTH_LONG).show();
e.printStackTrace(); 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 @Override

View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@null">
<ProgressBar
android:id="@+id/progress_loading_lists"
style="?android:attr/progressBarStyleLarge"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:indeterminate="true"
android:visibility="visible"/>
</RelativeLayout>

View File

@ -20,10 +20,10 @@
android:id="@+id/nav_lists" android:id="@+id/nav_lists"
android:icon="@drawable/ic_baseline_list_alt_28" android:icon="@drawable/ic_baseline_list_alt_28"
android:title="@string/menu_lists" /> android:title="@string/menu_lists" />
<item <!-- <item-->
android:id="@+id/nav_create_list" <!-- android:id="@+id/nav_create_list"-->
android:icon="@drawable/ic_baseline_add_28" <!-- android:icon="@drawable/ic_baseline_add_28"-->
android:title="Create New List" <!-- android:title="Create New List"-->
android:onClick="onClickCreateList"/> <!-- android:onClick="onClickCreateList"/>-->
</group> </group>
</menu> </menu>