From 47dd865640ffe66aec28cb7d6195dcbe5b501e9f Mon Sep 17 00:00:00 2001 From: nawal-ahmad Date: Mon, 29 Nov 2021 23:48:36 +0200 Subject: [PATCH 1/2] wishlist-v2 --- .gitignore | 24 +- .idea/misc.xml | 3 + .../analytics/ThriftyOWUjV/parameters.json | 0 .../pinpoint-cloudformation-template.json | 0 amplify/backend/api/thrifty/cli-inputs.json | 2 +- amplify/backend/api/thrifty/parameters.json | 0 .../backend/api/thrifty/resolvers/README.md | 0 amplify/backend/api/thrifty/schema.graphql | 17 + .../api/thrifty/stacks/CustomResources.json | 0 .../backend/api/thrifty/transform.conf.json | 0 .../auth/thrifty21f6c364/parameters.json | 0 ...hrifty21f6c364-cloudformation-template.yml | 0 amplify/backend/backend-config.json | 0 .../storage/SSDStorage/parameters.json | 0 .../s3-cloudformation-template.json | 0 .../storage/SSDStorage/storage-params.json | 0 amplify/backend/tags.json | 0 amplify/cli.json | 0 app/src/main/AndroidManifest.xml | 84 ++--- .../generated/model/AmplifyModelProvider.java | 4 +- .../datastore/generated/model/Favorite.java | 325 ++++++++++++++++++ .../datastore/generated/model/Product.java | 46 ++- .../datastore/generated/model/User.java | 175 ++++++++++ .../main/java/com/example/thrifty/Admin.java | 2 + .../com/example/thrifty/FavoriteActivity.java | 14 + .../com/example/thrifty/MainActivity.java | 83 +++-- .../main/java/com/example/thrifty/Splash.java | 6 +- .../thrifty/adapters/FavoriteAdapter.java | 72 ++++ .../thrifty/{ => auth}/ConfirmationPage.java | 9 +- .../example/thrifty/{ => auth}/Signin.java | 6 +- .../example/thrifty/{ => auth}/Signup.java | 4 +- .../res/layout/activity_confirmation_page.xml | 2 +- app/src/main/res/layout/activity_favorite.xml | 9 + app/src/main/res/layout/activity_signin.xml | 2 +- app/src/main/res/layout/activity_signup.xml | 2 +- app/src/main/res/layout/card_layout.xml | 4 +- 36 files changed, 783 insertions(+), 112 deletions(-) mode change 100644 => 100755 amplify/backend/analytics/ThriftyOWUjV/parameters.json mode change 100644 => 100755 amplify/backend/analytics/ThriftyOWUjV/pinpoint-cloudformation-template.json mode change 100644 => 100755 amplify/backend/api/thrifty/cli-inputs.json mode change 100644 => 100755 amplify/backend/api/thrifty/parameters.json mode change 100644 => 100755 amplify/backend/api/thrifty/resolvers/README.md mode change 100644 => 100755 amplify/backend/api/thrifty/schema.graphql mode change 100644 => 100755 amplify/backend/api/thrifty/stacks/CustomResources.json mode change 100644 => 100755 amplify/backend/api/thrifty/transform.conf.json mode change 100644 => 100755 amplify/backend/auth/thrifty21f6c364/parameters.json mode change 100644 => 100755 amplify/backend/auth/thrifty21f6c364/thrifty21f6c364-cloudformation-template.yml mode change 100644 => 100755 amplify/backend/backend-config.json mode change 100644 => 100755 amplify/backend/storage/SSDStorage/parameters.json mode change 100644 => 100755 amplify/backend/storage/SSDStorage/s3-cloudformation-template.json mode change 100644 => 100755 amplify/backend/storage/SSDStorage/storage-params.json mode change 100644 => 100755 amplify/backend/tags.json mode change 100644 => 100755 amplify/cli.json create mode 100644 app/src/main/java/com/amplifyframework/datastore/generated/model/Favorite.java create mode 100644 app/src/main/java/com/amplifyframework/datastore/generated/model/User.java create mode 100644 app/src/main/java/com/example/thrifty/FavoriteActivity.java create mode 100644 app/src/main/java/com/example/thrifty/adapters/FavoriteAdapter.java rename app/src/main/java/com/example/thrifty/{ => auth}/ConfirmationPage.java (90%) rename app/src/main/java/com/example/thrifty/{ => auth}/Signin.java (96%) rename app/src/main/java/com/example/thrifty/{ => auth}/Signup.java (97%) create mode 100644 app/src/main/res/layout/activity_favorite.xml diff --git a/.gitignore b/.gitignore index c0c193f..9f0bb74 100644 --- a/.gitignore +++ b/.gitignore @@ -20,7 +20,6 @@ amplify/.config/local-* amplify/logs amplify/mock-data amplify/backend/amplify-meta.json -amplify/backend/awscloudformation amplify/backend/.temp build/ dist/ @@ -34,25 +33,4 @@ amplify-gradle-config.json amplifytools.xcconfig .secret-* **.sample -#amplify-do-not-edit-end - -#amplify-do-not-edit-begin -amplify/\#current-cloud-backend -amplify/.config/local-* -amplify/logs -amplify/mock-data -amplify/backend/amplify-meta.json -amplify/backend/.temp -build/ -dist/ -node_modules/ -aws-exports.js -awsconfiguration.json -amplifyconfiguration.json -amplifyconfiguration.dart -amplify-build-config.json -amplify-gradle-config.json -amplifytools.xcconfig -.secret-* -**.sample -#amplify-do-not-edit-end +#amplify-do-not-edit-end diff --git a/.idea/misc.xml b/.idea/misc.xml index b22f299..2002d91 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -18,6 +18,9 @@ + + + diff --git a/amplify/backend/analytics/ThriftyOWUjV/parameters.json b/amplify/backend/analytics/ThriftyOWUjV/parameters.json old mode 100644 new mode 100755 diff --git a/amplify/backend/analytics/ThriftyOWUjV/pinpoint-cloudformation-template.json b/amplify/backend/analytics/ThriftyOWUjV/pinpoint-cloudformation-template.json old mode 100644 new mode 100755 diff --git a/amplify/backend/api/thrifty/cli-inputs.json b/amplify/backend/api/thrifty/cli-inputs.json old mode 100644 new mode 100755 index c4199c3..8619fe6 --- a/amplify/backend/api/thrifty/cli-inputs.json +++ b/amplify/backend/api/thrifty/cli-inputs.json @@ -12,7 +12,7 @@ } }, "apiName": "thrifty", - "gqlSchemaPath": "/tmp/amplify-1fac80fc-70ea-4f02-9b3e-a61e0e82577b/amplify/backend/api/thrifty/schema.graphql", + "gqlSchemaPath": "/tmp/amplify-b38aed8f-cc0e-48c1-ab26-b93ee968bf10/amplify/backend/api/thrifty/schema.graphql", "additionalAuthTypes": [ { "mode": "API_KEY", diff --git a/amplify/backend/api/thrifty/parameters.json b/amplify/backend/api/thrifty/parameters.json old mode 100644 new mode 100755 diff --git a/amplify/backend/api/thrifty/resolvers/README.md b/amplify/backend/api/thrifty/resolvers/README.md old mode 100644 new mode 100755 diff --git a/amplify/backend/api/thrifty/schema.graphql b/amplify/backend/api/thrifty/schema.graphql old mode 100644 new mode 100755 index 2f8d608..27ddccd --- a/amplify/backend/api/thrifty/schema.graphql +++ b/amplify/backend/api/thrifty/schema.graphql @@ -1,3 +1,19 @@ +type Favorite @model @auth(rules: [{allow: private}]) @key(name: "byUser", fields: ["userID"]) { + id: ID! + titleFav: String! + imageFav: String! + priceFav: String! + sizeFav: String! + categoryFav: String! + userID: ID +} + +type User @model @auth(rules: [{allow: private}]) { + id: ID! + email: String! + Favorite: [Favorite] @connection(keyName: "byUser", fields: ["id"]) +} + type Category @model @auth(rules: [{allow: private}]) { id: ID! name: String! @@ -12,5 +28,6 @@ type Product @model @auth(rules: [{allow: private}]) @key(name: "byCategory", fi size: String! color: String! categoryID: ID + image: String! } \ No newline at end of file diff --git a/amplify/backend/api/thrifty/stacks/CustomResources.json b/amplify/backend/api/thrifty/stacks/CustomResources.json old mode 100644 new mode 100755 diff --git a/amplify/backend/api/thrifty/transform.conf.json b/amplify/backend/api/thrifty/transform.conf.json old mode 100644 new mode 100755 diff --git a/amplify/backend/auth/thrifty21f6c364/parameters.json b/amplify/backend/auth/thrifty21f6c364/parameters.json old mode 100644 new mode 100755 diff --git a/amplify/backend/auth/thrifty21f6c364/thrifty21f6c364-cloudformation-template.yml b/amplify/backend/auth/thrifty21f6c364/thrifty21f6c364-cloudformation-template.yml old mode 100644 new mode 100755 diff --git a/amplify/backend/backend-config.json b/amplify/backend/backend-config.json old mode 100644 new mode 100755 diff --git a/amplify/backend/storage/SSDStorage/parameters.json b/amplify/backend/storage/SSDStorage/parameters.json old mode 100644 new mode 100755 diff --git a/amplify/backend/storage/SSDStorage/s3-cloudformation-template.json b/amplify/backend/storage/SSDStorage/s3-cloudformation-template.json old mode 100644 new mode 100755 diff --git a/amplify/backend/storage/SSDStorage/storage-params.json b/amplify/backend/storage/SSDStorage/storage-params.json old mode 100644 new mode 100755 diff --git a/amplify/backend/tags.json b/amplify/backend/tags.json old mode 100644 new mode 100755 diff --git a/amplify/cli.json b/amplify/cli.json old mode 100644 new mode 100755 diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7161f63..ffce0ff 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,41 +1,45 @@ - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/amplifyframework/datastore/generated/model/AmplifyModelProvider.java b/app/src/main/java/com/amplifyframework/datastore/generated/model/AmplifyModelProvider.java index 008f8d9..c7a5842 100644 --- a/app/src/main/java/com/amplifyframework/datastore/generated/model/AmplifyModelProvider.java +++ b/app/src/main/java/com/amplifyframework/datastore/generated/model/AmplifyModelProvider.java @@ -13,7 +13,7 @@ */ public final class AmplifyModelProvider implements ModelProvider { - private static final String AMPLIFY_MODEL_VERSION = "fccdd8bbe737f1d4f95aa5a65535d183"; + private static final String AMPLIFY_MODEL_VERSION = "1c29971a13d9fcd249685dddf076b501"; private static AmplifyModelProvider amplifyGeneratedModelInstance; private AmplifyModelProvider() { @@ -34,7 +34,7 @@ public static AmplifyModelProvider getInstance() { @Override public Set> models() { final Set> modifiableSet = new HashSet<>( - Arrays.>asList(Category.class, Product.class) + Arrays.>asList(Favorite.class, User.class, Category.class, Product.class) ); return Immutable.of(modifiableSet); diff --git a/app/src/main/java/com/amplifyframework/datastore/generated/model/Favorite.java b/app/src/main/java/com/amplifyframework/datastore/generated/model/Favorite.java new file mode 100644 index 0000000..4d856a9 --- /dev/null +++ b/app/src/main/java/com/amplifyframework/datastore/generated/model/Favorite.java @@ -0,0 +1,325 @@ +package com.amplifyframework.datastore.generated.model; + +import com.amplifyframework.core.model.temporal.Temporal; + +import java.util.List; +import java.util.UUID; +import java.util.Objects; + +import androidx.core.util.ObjectsCompat; + +import com.amplifyframework.core.model.AuthStrategy; +import com.amplifyframework.core.model.Model; +import com.amplifyframework.core.model.ModelOperation; +import com.amplifyframework.core.model.annotations.AuthRule; +import com.amplifyframework.core.model.annotations.Index; +import com.amplifyframework.core.model.annotations.ModelConfig; +import com.amplifyframework.core.model.annotations.ModelField; +import com.amplifyframework.core.model.query.predicate.QueryField; + +import static com.amplifyframework.core.model.query.predicate.QueryField.field; + +/** This is an auto generated class representing the Favorite type in your schema. */ +@SuppressWarnings("all") +@ModelConfig(pluralName = "Favorites", authRules = { + @AuthRule(allow = AuthStrategy.PRIVATE, operations = { ModelOperation.CREATE, ModelOperation.UPDATE, ModelOperation.DELETE, ModelOperation.READ }) +}) +@Index(name = "byUser", fields = {"userID"}) +public final class Favorite implements Model { + public static final QueryField ID = field("Favorite", "id"); + public static final QueryField TITLE_FAV = field("Favorite", "titleFav"); + public static final QueryField IMAGE_FAV = field("Favorite", "imageFav"); + public static final QueryField PRICE_FAV = field("Favorite", "priceFav"); + public static final QueryField SIZE_FAV = field("Favorite", "sizeFav"); + public static final QueryField CATEGORY_FAV = field("Favorite", "categoryFav"); + public static final QueryField USER_ID = field("Favorite", "userID"); + private final @ModelField(targetType="ID", isRequired = true) String id; + private final @ModelField(targetType="String", isRequired = true) String titleFav; + private final @ModelField(targetType="String", isRequired = true) String imageFav; + private final @ModelField(targetType="String", isRequired = true) String priceFav; + private final @ModelField(targetType="String", isRequired = true) String sizeFav; + private final @ModelField(targetType="String", isRequired = true) String categoryFav; + private final @ModelField(targetType="ID") String userID; + private @ModelField(targetType="AWSDateTime", isReadOnly = true) Temporal.DateTime createdAt; + private @ModelField(targetType="AWSDateTime", isReadOnly = true) Temporal.DateTime updatedAt; + public String getId() { + return id; + } + + public String getTitleFav() { + return titleFav; + } + + public String getImageFav() { + return imageFav; + } + + public String getPriceFav() { + return priceFav; + } + + public String getSizeFav() { + return sizeFav; + } + + public String getCategoryFav() { + return categoryFav; + } + + public String getUserId() { + return userID; + } + + public Temporal.DateTime getCreatedAt() { + return createdAt; + } + + public Temporal.DateTime getUpdatedAt() { + return updatedAt; + } + + public Favorite(String id, String titleFav, String imageFav, String priceFav, String sizeFav, String categoryFav, String userID) { + this.id = id; + this.titleFav = titleFav; + this.imageFav = imageFav; + this.priceFav = priceFav; + this.sizeFav = sizeFav; + this.categoryFav = categoryFav; + this.userID = userID; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } else if(obj == null || getClass() != obj.getClass()) { + return false; + } else { + Favorite favorite = (Favorite) obj; + return ObjectsCompat.equals(getId(), favorite.getId()) && + ObjectsCompat.equals(getTitleFav(), favorite.getTitleFav()) && + ObjectsCompat.equals(getImageFav(), favorite.getImageFav()) && + ObjectsCompat.equals(getPriceFav(), favorite.getPriceFav()) && + ObjectsCompat.equals(getSizeFav(), favorite.getSizeFav()) && + ObjectsCompat.equals(getCategoryFav(), favorite.getCategoryFav()) && + ObjectsCompat.equals(getUserId(), favorite.getUserId()) && + ObjectsCompat.equals(getCreatedAt(), favorite.getCreatedAt()) && + ObjectsCompat.equals(getUpdatedAt(), favorite.getUpdatedAt()); + } + } + + @Override + public int hashCode() { + return new StringBuilder() + .append(getId()) + .append(getTitleFav()) + .append(getImageFav()) + .append(getPriceFav()) + .append(getSizeFav()) + .append(getCategoryFav()) + .append(getUserId()) + .append(getCreatedAt()) + .append(getUpdatedAt()) + .toString() + .hashCode(); + } + + @Override + public String toString() { + return new StringBuilder() + .append("Favorite {") + .append("id=" + String.valueOf(getId()) + ", ") + .append("titleFav=" + String.valueOf(getTitleFav()) + ", ") + .append("imageFav=" + String.valueOf(getImageFav()) + ", ") + .append("priceFav=" + String.valueOf(getPriceFav()) + ", ") + .append("sizeFav=" + String.valueOf(getSizeFav()) + ", ") + .append("categoryFav=" + String.valueOf(getCategoryFav()) + ", ") + .append("userID=" + String.valueOf(getUserId()) + ", ") + .append("createdAt=" + String.valueOf(getCreatedAt()) + ", ") + .append("updatedAt=" + String.valueOf(getUpdatedAt())) + .append("}") + .toString(); + } + + public static TitleFavStep builder() { + return new Builder(); + } + + /** + * WARNING: This method should not be used to build an instance of this object for a CREATE mutation. + * This is a convenience method to return an instance of the object with only its ID populated + * to be used in the context of a parameter in a delete mutation or referencing a foreign key + * in a relationship. + * @param id the id of the existing item this instance will represent + * @return an instance of this model with only ID populated + */ + public static Favorite justId(String id) { + return new Favorite( + id, + null, + null, + null, + null, + null, + null + ); + } + + public CopyOfBuilder copyOfBuilder() { + return new CopyOfBuilder(id, + titleFav, + imageFav, + priceFav, + sizeFav, + categoryFav, + userID); + } + public interface TitleFavStep { + ImageFavStep titleFav(String titleFav); + } + + + public interface ImageFavStep { + PriceFavStep imageFav(String imageFav); + } + + + public interface PriceFavStep { + SizeFavStep priceFav(String priceFav); + } + + + public interface SizeFavStep { + CategoryFavStep sizeFav(String sizeFav); + } + + + public interface CategoryFavStep { + BuildStep categoryFav(String categoryFav); + } + + + public interface BuildStep { + Favorite build(); + BuildStep id(String id); + BuildStep userId(String userId); + } + + + public static class Builder implements TitleFavStep, ImageFavStep, PriceFavStep, SizeFavStep, CategoryFavStep, BuildStep { + private String id; + private String titleFav; + private String imageFav; + private String priceFav; + private String sizeFav; + private String categoryFav; + private String userID; + @Override + public Favorite build() { + String id = this.id != null ? this.id : UUID.randomUUID().toString(); + + return new Favorite( + id, + titleFav, + imageFav, + priceFav, + sizeFav, + categoryFav, + userID); + } + + @Override + public ImageFavStep titleFav(String titleFav) { + Objects.requireNonNull(titleFav); + this.titleFav = titleFav; + return this; + } + + @Override + public PriceFavStep imageFav(String imageFav) { + Objects.requireNonNull(imageFav); + this.imageFav = imageFav; + return this; + } + + @Override + public SizeFavStep priceFav(String priceFav) { + Objects.requireNonNull(priceFav); + this.priceFav = priceFav; + return this; + } + + @Override + public CategoryFavStep sizeFav(String sizeFav) { + Objects.requireNonNull(sizeFav); + this.sizeFav = sizeFav; + return this; + } + + @Override + public BuildStep categoryFav(String categoryFav) { + Objects.requireNonNull(categoryFav); + this.categoryFav = categoryFav; + return this; + } + + @Override + public BuildStep userId(String userId) { + this.userID = userId; + return this; + } + + /** + * @param id id + * @return Current Builder instance, for fluent method chaining + */ + public BuildStep id(String id) { + this.id = id; + return this; + } + } + + + public final class CopyOfBuilder extends Builder { + private CopyOfBuilder(String id, String titleFav, String imageFav, String priceFav, String sizeFav, String categoryFav, String userId) { + super.id(id); + super.titleFav(titleFav) + .imageFav(imageFav) + .priceFav(priceFav) + .sizeFav(sizeFav) + .categoryFav(categoryFav) + .userId(userId); + } + + @Override + public CopyOfBuilder titleFav(String titleFav) { + return (CopyOfBuilder) super.titleFav(titleFav); + } + + @Override + public CopyOfBuilder imageFav(String imageFav) { + return (CopyOfBuilder) super.imageFav(imageFav); + } + + @Override + public CopyOfBuilder priceFav(String priceFav) { + return (CopyOfBuilder) super.priceFav(priceFav); + } + + @Override + public CopyOfBuilder sizeFav(String sizeFav) { + return (CopyOfBuilder) super.sizeFav(sizeFav); + } + + @Override + public CopyOfBuilder categoryFav(String categoryFav) { + return (CopyOfBuilder) super.categoryFav(categoryFav); + } + + @Override + public CopyOfBuilder userId(String userId) { + return (CopyOfBuilder) super.userId(userId); + } + } + +} diff --git a/app/src/main/java/com/amplifyframework/datastore/generated/model/Product.java b/app/src/main/java/com/amplifyframework/datastore/generated/model/Product.java index b7c3b83..0cc6a03 100644 --- a/app/src/main/java/com/amplifyframework/datastore/generated/model/Product.java +++ b/app/src/main/java/com/amplifyframework/datastore/generated/model/Product.java @@ -33,6 +33,7 @@ public final class Product implements Model { public static final QueryField SIZE = field("Product", "size"); public static final QueryField COLOR = field("Product", "color"); public static final QueryField CATEGORY_ID = field("Product", "categoryID"); + public static final QueryField IMAGE = field("Product", "image"); private final @ModelField(targetType="ID", isRequired = true) String id; private final @ModelField(targetType="String", isRequired = true) String title; private final @ModelField(targetType="String", isRequired = true) String description; @@ -40,6 +41,7 @@ public final class Product implements Model { private final @ModelField(targetType="String", isRequired = true) String size; private final @ModelField(targetType="String", isRequired = true) String color; private final @ModelField(targetType="ID") String categoryID; + private final @ModelField(targetType="String", isRequired = true) String image; private @ModelField(targetType="AWSDateTime", isReadOnly = true) Temporal.DateTime createdAt; private @ModelField(targetType="AWSDateTime", isReadOnly = true) Temporal.DateTime updatedAt; public String getId() { @@ -70,6 +72,10 @@ public String getCategoryId() { return categoryID; } + public String getImage() { + return image; + } + public Temporal.DateTime getCreatedAt() { return createdAt; } @@ -78,7 +84,7 @@ public Temporal.DateTime getUpdatedAt() { return updatedAt; } - private Product(String id, String title, String description, String price, String size, String color, String categoryID) { + private Product(String id, String title, String description, String price, String size, String color, String categoryID, String image) { this.id = id; this.title = title; this.description = description; @@ -86,6 +92,7 @@ private Product(String id, String title, String description, String price, Strin this.size = size; this.color = color; this.categoryID = categoryID; + this.image = image; } @Override @@ -103,6 +110,7 @@ public boolean equals(Object obj) { ObjectsCompat.equals(getSize(), product.getSize()) && ObjectsCompat.equals(getColor(), product.getColor()) && ObjectsCompat.equals(getCategoryId(), product.getCategoryId()) && + ObjectsCompat.equals(getImage(), product.getImage()) && ObjectsCompat.equals(getCreatedAt(), product.getCreatedAt()) && ObjectsCompat.equals(getUpdatedAt(), product.getUpdatedAt()); } @@ -118,6 +126,7 @@ public int hashCode() { .append(getSize()) .append(getColor()) .append(getCategoryId()) + .append(getImage()) .append(getCreatedAt()) .append(getUpdatedAt()) .toString() @@ -135,6 +144,7 @@ public String toString() { .append("size=" + String.valueOf(getSize()) + ", ") .append("color=" + String.valueOf(getColor()) + ", ") .append("categoryID=" + String.valueOf(getCategoryId()) + ", ") + .append("image=" + String.valueOf(getImage()) + ", ") .append("createdAt=" + String.valueOf(getCreatedAt()) + ", ") .append("updatedAt=" + String.valueOf(getUpdatedAt())) .append("}") @@ -161,6 +171,7 @@ public static Product justId(String id) { null, null, null, + null, null ); } @@ -172,7 +183,8 @@ public CopyOfBuilder copyOfBuilder() { price, size, color, - categoryID); + categoryID, + image); } public interface TitleStep { DescriptionStep title(String title); @@ -195,7 +207,12 @@ public interface SizeStep { public interface ColorStep { - BuildStep color(String color); + ImageStep color(String color); + } + + + public interface ImageStep { + BuildStep image(String image); } @@ -206,13 +223,14 @@ public interface BuildStep { } - public static class Builder implements TitleStep, DescriptionStep, PriceStep, SizeStep, ColorStep, BuildStep { + public static class Builder implements TitleStep, DescriptionStep, PriceStep, SizeStep, ColorStep, ImageStep, BuildStep { private String id; private String title; private String description; private String price; private String size; private String color; + private String image; private String categoryID; @Override public Product build() { @@ -225,7 +243,8 @@ public Product build() { price, size, color, - categoryID); + categoryID, + image); } @Override @@ -257,12 +276,19 @@ public ColorStep size(String size) { } @Override - public BuildStep color(String color) { + public ImageStep color(String color) { Objects.requireNonNull(color); this.color = color; return this; } + @Override + public BuildStep image(String image) { + Objects.requireNonNull(image); + this.image = image; + return this; + } + @Override public BuildStep categoryId(String categoryId) { this.categoryID = categoryId; @@ -281,13 +307,14 @@ public BuildStep id(String id) { public final class CopyOfBuilder extends Builder { - private CopyOfBuilder(String id, String title, String description, String price, String size, String color, String categoryId) { + private CopyOfBuilder(String id, String title, String description, String price, String size, String color, String categoryId, String image) { super.id(id); super.title(title) .description(description) .price(price) .size(size) .color(color) + .image(image) .categoryId(categoryId); } @@ -316,6 +343,11 @@ public CopyOfBuilder color(String color) { return (CopyOfBuilder) super.color(color); } + @Override + public CopyOfBuilder image(String image) { + return (CopyOfBuilder) super.image(image); + } + @Override public CopyOfBuilder categoryId(String categoryId) { return (CopyOfBuilder) super.categoryId(categoryId); diff --git a/app/src/main/java/com/amplifyframework/datastore/generated/model/User.java b/app/src/main/java/com/amplifyframework/datastore/generated/model/User.java new file mode 100644 index 0000000..5e33a2e --- /dev/null +++ b/app/src/main/java/com/amplifyframework/datastore/generated/model/User.java @@ -0,0 +1,175 @@ +package com.amplifyframework.datastore.generated.model; + +import com.amplifyframework.core.model.annotations.HasMany; +import com.amplifyframework.core.model.temporal.Temporal; + +import java.util.List; +import java.util.UUID; +import java.util.Objects; + +import androidx.core.util.ObjectsCompat; + +import com.amplifyframework.core.model.AuthStrategy; +import com.amplifyframework.core.model.Model; +import com.amplifyframework.core.model.ModelOperation; +import com.amplifyframework.core.model.annotations.AuthRule; +import com.amplifyframework.core.model.annotations.Index; +import com.amplifyframework.core.model.annotations.ModelConfig; +import com.amplifyframework.core.model.annotations.ModelField; +import com.amplifyframework.core.model.query.predicate.QueryField; + +import static com.amplifyframework.core.model.query.predicate.QueryField.field; + +/** This is an auto generated class representing the User type in your schema. */ +@SuppressWarnings("all") +@ModelConfig(pluralName = "Users", authRules = { + @AuthRule(allow = AuthStrategy.PRIVATE, operations = { ModelOperation.CREATE, ModelOperation.UPDATE, ModelOperation.DELETE, ModelOperation.READ }) +}) +public final class User implements Model { + public static final QueryField ID = field("User", "id"); + public static final QueryField EMAIL = field("User", "email"); + private final @ModelField(targetType="ID", isRequired = true) String id; + private final @ModelField(targetType="String", isRequired = true) String email; + private final @ModelField(targetType="Favorite") @HasMany(associatedWith = "userID", type = Favorite.class) List Favorite = null; + private @ModelField(targetType="AWSDateTime", isReadOnly = true) Temporal.DateTime createdAt; + private @ModelField(targetType="AWSDateTime", isReadOnly = true) Temporal.DateTime updatedAt; + public String getId() { + return id; + } + + public String getEmail() { + return email; + } + + public List getFavorite() { + return Favorite; + } + + public Temporal.DateTime getCreatedAt() { + return createdAt; + } + + public Temporal.DateTime getUpdatedAt() { + return updatedAt; + } + + private User(String id, String email) { + this.id = id; + this.email = email; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } else if(obj == null || getClass() != obj.getClass()) { + return false; + } else { + User user = (User) obj; + return ObjectsCompat.equals(getId(), user.getId()) && + ObjectsCompat.equals(getEmail(), user.getEmail()) && + ObjectsCompat.equals(getCreatedAt(), user.getCreatedAt()) && + ObjectsCompat.equals(getUpdatedAt(), user.getUpdatedAt()); + } + } + + @Override + public int hashCode() { + return new StringBuilder() + .append(getId()) + .append(getEmail()) + .append(getCreatedAt()) + .append(getUpdatedAt()) + .toString() + .hashCode(); + } + + @Override + public String toString() { + return new StringBuilder() + .append("User {") + .append("id=" + String.valueOf(getId()) + ", ") + .append("email=" + String.valueOf(getEmail()) + ", ") + .append("createdAt=" + String.valueOf(getCreatedAt()) + ", ") + .append("updatedAt=" + String.valueOf(getUpdatedAt())) + .append("}") + .toString(); + } + + public static EmailStep builder() { + return new Builder(); + } + + /** + * WARNING: This method should not be used to build an instance of this object for a CREATE mutation. + * This is a convenience method to return an instance of the object with only its ID populated + * to be used in the context of a parameter in a delete mutation or referencing a foreign key + * in a relationship. + * @param id the id of the existing item this instance will represent + * @return an instance of this model with only ID populated + */ + public static User justId(String id) { + return new User( + id, + null + ); + } + + public CopyOfBuilder copyOfBuilder() { + return new CopyOfBuilder(id, + email); + } + public interface EmailStep { + BuildStep email(String email); + } + + + public interface BuildStep { + User build(); + BuildStep id(String id); + } + + + public static class Builder implements EmailStep, BuildStep { + private String id; + private String email; + @Override + public User build() { + String id = this.id != null ? this.id : UUID.randomUUID().toString(); + + return new User( + id, + email); + } + + @Override + public BuildStep email(String email) { + Objects.requireNonNull(email); + this.email = email; + return this; + } + + /** + * @param id id + * @return Current Builder instance, for fluent method chaining + */ + public BuildStep id(String id) { + this.id = id; + return this; + } + } + + + public final class CopyOfBuilder extends Builder { + private CopyOfBuilder(String id, String email) { + super.id(id); + super.email(email); + } + + @Override + public CopyOfBuilder email(String email) { + return (CopyOfBuilder) super.email(email); + } + } + +} diff --git a/app/src/main/java/com/example/thrifty/Admin.java b/app/src/main/java/com/example/thrifty/Admin.java index 687ad2f..5b211bd 100644 --- a/app/src/main/java/com/example/thrifty/Admin.java +++ b/app/src/main/java/com/example/thrifty/Admin.java @@ -25,6 +25,7 @@ public class Admin extends AppCompatActivity { + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -103,6 +104,7 @@ public void onClick(View v) { .price(setprice) .size(setsize) .color(setcolor) + .image("lol") .categoryId(setcategory) .build(); diff --git a/app/src/main/java/com/example/thrifty/FavoriteActivity.java b/app/src/main/java/com/example/thrifty/FavoriteActivity.java new file mode 100644 index 0000000..a714969 --- /dev/null +++ b/app/src/main/java/com/example/thrifty/FavoriteActivity.java @@ -0,0 +1,14 @@ +package com.example.thrifty; + +import androidx.appcompat.app.AppCompatActivity; + +import android.os.Bundle; + +public class FavoriteActivity extends AppCompatActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_favorite); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/thrifty/MainActivity.java b/app/src/main/java/com/example/thrifty/MainActivity.java index eec583e..11efcd8 100644 --- a/app/src/main/java/com/example/thrifty/MainActivity.java +++ b/app/src/main/java/com/example/thrifty/MainActivity.java @@ -23,18 +23,23 @@ import android.util.Log; import android.widget.Button; +import android.widget.TextView; +import android.widget.Toast; import android.widget.Toolbar; import com.amazonaws.mobileconnectors.pinpoint.PinpointManager; import com.amplifyframework.AmplifyException; import com.amplifyframework.analytics.pinpoint.AWSPinpointAnalyticsPlugin; import com.amplifyframework.api.aws.AWSApiPlugin; +import com.amplifyframework.api.graphql.model.ModelMutation; import com.amplifyframework.api.graphql.model.ModelQuery; import com.amplifyframework.auth.cognito.AWSCognitoAuthPlugin; import com.amplifyframework.core.Amplify; import com.amplifyframework.datastore.AWSDataStorePlugin; +import com.amplifyframework.datastore.generated.model.Favorite; import com.amplifyframework.datastore.generated.model.Product; import com.amplifyframework.storage.s3.AWSS3StoragePlugin; +import com.example.thrifty.adapters.FavoriteAdapter; import com.example.thrifty.adapters.NewItemsAdapter; import com.example.thrifty.adapters.PopularItemsAdapter; import com.example.thrifty.adapters.SuggestedItemsAdapter; @@ -46,7 +51,7 @@ import java.util.List; -public class MainActivity extends AppCompatActivity { +public class MainActivity extends AppCompatActivity { private List NewProduct = new ArrayList<>(); private List PopularProduct = new ArrayList<>(); @@ -57,6 +62,7 @@ public class MainActivity extends AppCompatActivity { NewItemsAdapter newItemsAdapter; SuggestedItemsAdapter suggestedItemsAdapter; PopularItemsAdapter popularItemsAdapter; + FavoriteAdapter favoriteAdapter; public static PinpointManager getPinpointManager(Context applicationContext) { return null; @@ -68,6 +74,7 @@ protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); +// favMethod(); MainMenuFragment mainMenuFragment = new MainMenuFragment(); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); // toolbar.setNavigationIcon(R.drawable.ic_baseline_arrow_back_ios_new_24); @@ -94,18 +101,17 @@ public void onClick(View v) { initRecyclerViews(); - -findViewById(R.id.admin).setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - Intent intent = new Intent(MainActivity.this, Admin.class); - startActivity(intent); + findViewById(R.id.admin).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + Intent intent = new Intent(MainActivity.this, Admin.class); + startActivity(intent); + } + }); } -}); - } - public void bottomNav(){ + public void bottomNav() { BottomNavigationView bottomNavigationView = findViewById(R.id.bottomNavigationView); bottomNavigationView.setSelectedItemId(R.id.homeNav); BottomNavigationItemView homeNav = findViewById(R.id.homeNav); @@ -116,34 +122,34 @@ public void bottomNav(){ search.setOnClickListener(view -> { Intent intent = new Intent(getApplicationContext(), SearchActivity.class); - intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK| Intent.FLAG_ACTIVITY_NEW_TASK); + intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); }); homeNav.setOnClickListener(view -> { Intent intent = new Intent(getApplicationContext(), MainActivity.class); - intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK| Intent.FLAG_ACTIVITY_NEW_TASK); + intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); }); } - private void initRecyclerViews(){ + private void initRecyclerViews() { newItemRecView = findViewById(R.id.newItemsRecView); suggestedRecView = findViewById(R.id.suggestedRecView); popularRecView = findViewById(R.id.popularRecView); // newItemRecView.setAdapter(newItemsAdapter); - newItemRecView.setLayoutManager(new LinearLayoutManager(getApplicationContext(),RecyclerView.HORIZONTAL,false)); + newItemRecView.setLayoutManager(new LinearLayoutManager(getApplicationContext(), RecyclerView.HORIZONTAL, false)); suggestedRecView.setAdapter(suggestedItemsAdapter); - suggestedRecView.setLayoutManager(new LinearLayoutManager(getApplicationContext(), RecyclerView.HORIZONTAL,false)); + suggestedRecView.setLayoutManager(new LinearLayoutManager(getApplicationContext(), RecyclerView.HORIZONTAL, false)); popularRecView.setAdapter(popularItemsAdapter); - popularRecView.setLayoutManager(new LinearLayoutManager(getApplicationContext(),RecyclerView.HORIZONTAL,false)); + popularRecView.setLayoutManager(new LinearLayoutManager(getApplicationContext(), RecyclerView.HORIZONTAL, false)); - newItemRecView.setAdapter(new NewItemsAdapter(NewProduct , MainActivity.this)); + newItemRecView.setAdapter(new NewItemsAdapter(NewProduct, MainActivity.this)); Handler handler = new Handler(Looper.myLooper(), new Handler.Callback() { @SuppressLint("NotifyDataSetChanged") @Override @@ -154,7 +160,7 @@ public boolean handleMessage(@NonNull Message message) { }); - popularRecView.setAdapter(new NewItemsAdapter(PopularProduct , MainActivity.this)); + popularRecView.setAdapter(new NewItemsAdapter(PopularProduct, MainActivity.this)); Handler popularhandler = new Handler(Looper.myLooper(), new Handler.Callback() { @SuppressLint("NotifyDataSetChanged") @Override @@ -164,7 +170,7 @@ public boolean handleMessage(@NonNull Message message) { } }); - suggestedRecView.setAdapter(new NewItemsAdapter(SuggestProduct , MainActivity.this)); + suggestedRecView.setAdapter(new NewItemsAdapter(SuggestProduct, MainActivity.this)); Handler suggesthandler = new Handler(Looper.myLooper(), new Handler.Callback() { @SuppressLint("NotifyDataSetChanged") @Override @@ -178,14 +184,13 @@ public boolean handleMessage(@NonNull Message message) { ModelQuery.list(Product.class), response -> { for (Product todo : response.getData()) { - NewProduct.add(todo); + NewProduct.add(todo); } handler.sendEmptyMessage(1); }, error -> Log.e("MyAmplifyApp", "Query failure", error) ); - Amplify.API.query( ModelQuery.list(Product.class), response -> { @@ -216,9 +221,43 @@ protected void onResume() { stopButton.setVisibility(View.GONE); SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(MainActivity.this); String email1 = sharedPreferences.getString("email", "Your email"); - if (email1.equals("hebaalmomani1998@gmail.com")){ + if (email1.equals("na25wal@yahoo.com")) { stopButton.setVisibility(View.VISIBLE); } } + public void favMethod() { + Log.i("Favorie","llllllllllllllllll"); + Button favButtons = findViewById(R.id.favButton); + favButtons.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + TextView name = findViewById(R.id.titlefrag1); + TextView category = findViewById(R.id.categoryfrag); +// TextView email = findViewById(R.id.editTextTextPersonName6); + + String nameFav = name.getText().toString(); + String categoryFav = category.getText().toString(); +// String emailFav = email.getText().toString(); + + Favorite favorite = new Favorite.Builder() + .titleFav(nameFav) + .imageFav("categoryFav") + .priceFav("15") + .sizeFav("15") + .categoryFav(categoryFav) + .userId("emailFav") + .build(); + Log.i("Favorie","kkkkkkkkkkkkkkkkkkk"+favorite); + + Amplify.API.mutate( + ModelMutation.create(favorite), + response -> Log.i("MyAmplifyApp", "Added Todo with id: " + response.getData().getId()), + error -> Log.e("MyAmplifyApp", "Create failed", error) + ); + + Toast.makeText(getApplicationContext(), "add to fav", Toast.LENGTH_SHORT).show(); + } + }); + } } \ No newline at end of file diff --git a/app/src/main/java/com/example/thrifty/Splash.java b/app/src/main/java/com/example/thrifty/Splash.java index dac8789..c634580 100644 --- a/app/src/main/java/com/example/thrifty/Splash.java +++ b/app/src/main/java/com/example/thrifty/Splash.java @@ -1,12 +1,12 @@ package com.example.thrifty; -import androidx.appcompat.app.AppCompatActivity; - import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.os.Handler; +import com.example.thrifty.auth.Signin; + public class Splash extends Activity { /** Duration of wait **/ @@ -24,7 +24,7 @@ public void onCreate(Bundle icicle) { @Override public void run() { /* Create an Intent that will start the Menu-Activity. */ - Intent mainIntent = new Intent(Splash.this,MainActivity.class); + Intent mainIntent = new Intent(Splash.this, Signin.class); Splash.this.startActivity(mainIntent); Splash.this.finish(); } diff --git a/app/src/main/java/com/example/thrifty/adapters/FavoriteAdapter.java b/app/src/main/java/com/example/thrifty/adapters/FavoriteAdapter.java new file mode 100644 index 0000000..5de526a --- /dev/null +++ b/app/src/main/java/com/example/thrifty/adapters/FavoriteAdapter.java @@ -0,0 +1,72 @@ +package com.example.thrifty.adapters; + +import android.annotation.SuppressLint; +import android.content.Intent; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.amplifyframework.datastore.generated.model.Favorite; +import com.example.thrifty.MainActivity; +import com.example.thrifty.R; + +import java.util.ArrayList; +import java.util.List; + + +public class FavoriteAdapter extends RecyclerView.Adapter { + List favoriteList = new ArrayList<>(); + + public FavoriteAdapter(List favoriteList, MainActivity mainActivity){ + this.favoriteList = favoriteList; + } + + + @NonNull + @Override + public NewItemsHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_layout, parent , false); + return new FavoriteAdapter.NewItemsHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull NewItemsHolder holder, @SuppressLint("RecyclerView") int position) { + holder.Favorite = favoriteList.get(position); + TextView title = holder.itemView.findViewById(R.id.titlefrag1); + TextView category = holder.itemView.findViewById(R.id.categoryfrag); + + title.setText(holder.Favorite.getTitleFav()); + category.setText(holder.Favorite.getCategoryFav()); + + + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + Intent goToDetails = new Intent(view.getContext(), MainActivity.class); + goToDetails.putExtra("Title",favoriteList.get(position).getTitleFav()); + goToDetails.putExtra("category",favoriteList.get(position).getCategoryFav()); + + view.getContext().startActivity(goToDetails); + } + }); + } + + + @Override + public int getItemCount() { + return favoriteList.size(); + } + + public static class NewItemsHolder extends RecyclerView.ViewHolder{ + public Favorite Favorite; + public View itemView; + public NewItemsHolder(@NonNull View itemView) { + super(itemView); + this.itemView = itemView; + } + } +} diff --git a/app/src/main/java/com/example/thrifty/ConfirmationPage.java b/app/src/main/java/com/example/thrifty/auth/ConfirmationPage.java similarity index 90% rename from app/src/main/java/com/example/thrifty/ConfirmationPage.java rename to app/src/main/java/com/example/thrifty/auth/ConfirmationPage.java index 16e8a6d..c2cf617 100644 --- a/app/src/main/java/com/example/thrifty/ConfirmationPage.java +++ b/app/src/main/java/com/example/thrifty/auth/ConfirmationPage.java @@ -1,4 +1,4 @@ -package com.example.thrifty; +package com.example.thrifty.auth; import androidx.appcompat.app.AppCompatActivity; @@ -10,10 +10,9 @@ import android.widget.EditText; import android.widget.Toolbar; -import com.amplifyframework.AmplifyException; -import com.amplifyframework.api.aws.AWSApiPlugin; -import com.amplifyframework.auth.cognito.AWSCognitoAuthPlugin; import com.amplifyframework.core.Amplify; +import com.example.thrifty.MainActivity; +import com.example.thrifty.R; public class ConfirmationPage extends AppCompatActivity { @@ -49,7 +48,7 @@ public void onClick(View v) { error -> Log.e("AuthQuickstart", error.toString()) ); - Intent intent = new Intent(ConfirmationPage.this,MainActivity.class); + Intent intent = new Intent(ConfirmationPage.this, MainActivity.class); startActivity(intent); } }); diff --git a/app/src/main/java/com/example/thrifty/Signin.java b/app/src/main/java/com/example/thrifty/auth/Signin.java similarity index 96% rename from app/src/main/java/com/example/thrifty/Signin.java rename to app/src/main/java/com/example/thrifty/auth/Signin.java index f2d89df..2a3c42f 100644 --- a/app/src/main/java/com/example/thrifty/Signin.java +++ b/app/src/main/java/com/example/thrifty/auth/Signin.java @@ -1,4 +1,4 @@ -package com.example.thrifty; +package com.example.thrifty.auth; import androidx.appcompat.app.AppCompatActivity; @@ -8,11 +8,9 @@ import android.os.Bundle; import android.preference.PreferenceManager; import android.util.Log; -import android.view.Gravity; import android.view.View; import android.widget.Button; import android.widget.EditText; -import android.widget.Toast; import android.widget.Toolbar; import com.amplifyframework.AmplifyException; @@ -20,6 +18,8 @@ import com.amplifyframework.auth.cognito.AWSCognitoAuthPlugin; import com.amplifyframework.core.Amplify; import com.amplifyframework.storage.s3.AWSS3StoragePlugin; +import com.example.thrifty.MainActivity; +import com.example.thrifty.R; public class Signin extends AppCompatActivity { public static final String TAG = "SignIn"; diff --git a/app/src/main/java/com/example/thrifty/Signup.java b/app/src/main/java/com/example/thrifty/auth/Signup.java similarity index 97% rename from app/src/main/java/com/example/thrifty/Signup.java rename to app/src/main/java/com/example/thrifty/auth/Signup.java index b7b6a94..5e6f670 100644 --- a/app/src/main/java/com/example/thrifty/Signup.java +++ b/app/src/main/java/com/example/thrifty/auth/Signup.java @@ -1,4 +1,4 @@ -package com.example.thrifty; +package com.example.thrifty.auth; import androidx.appcompat.app.AppCompatActivity; @@ -18,6 +18,8 @@ import com.amplifyframework.auth.options.AuthSignUpOptions; import com.amplifyframework.core.Amplify; import com.amplifyframework.storage.s3.AWSS3StoragePlugin; +import com.example.thrifty.MainActivity; +import com.example.thrifty.R; public class Signup extends AppCompatActivity { public static final String TAG = "SignUp"; diff --git a/app/src/main/res/layout/activity_confirmation_page.xml b/app/src/main/res/layout/activity_confirmation_page.xml index a933453..8389d3e 100644 --- a/app/src/main/res/layout/activity_confirmation_page.xml +++ b/app/src/main/res/layout/activity_confirmation_page.xml @@ -4,7 +4,7 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - tools:context=".ConfirmationPage"> + tools:context=".auth.ConfirmationPage"> + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_signin.xml b/app/src/main/res/layout/activity_signin.xml index 50ba7d4..5cc8540 100644 --- a/app/src/main/res/layout/activity_signin.xml +++ b/app/src/main/res/layout/activity_signin.xml @@ -4,7 +4,7 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - tools:context=".Signin"> + tools:context=".auth.Signin"> + tools:context=".auth.Signup"> @@ -58,7 +58,7 @@ android:text="category" />