From 04ee882dbf34a549d5480bbb5e88ed328848d9aa Mon Sep 17 00:00:00 2001 From: Heba1998 Date: Mon, 8 Nov 2021 21:49:18 +0200 Subject: [PATCH 1/6] initial setups --- .gitignore | 24 +- .graphqlconfig.yml | 15 + amplify/.config/project-config.json | 13 + amplify/README.md | 8 + .../backend/api/taskmaster/parameters.json | 5 + .../api/taskmaster/resolvers/README.md | 2 + amplify/backend/api/taskmaster/schema.graphql | 6 + .../taskmaster/stacks/CustomResources.json | 58 + .../api/taskmaster/transform.conf.json | 10 + amplify/backend/backend-config.json | 20 + amplify/backend/tags.json | 10 + amplify/cli.json | 45 + amplify/hooks/README.md | 7 + amplify/team-provider-info.json | 15 + app/build.gradle | 4 +- .../taskmaster/ExampleInstrumentedTest.java | 5 +- app/src/main/AndroidManifest.xml | 3 + .../generated/graphql/mutations.graphql | 40 + .../amplify/generated/graphql/queries.graphql | 28 + .../generated/graphql/subscriptions.graphql | 31 + app/src/main/graphql/schema.json | 2583 +++++++++++++++++ .../generated/model/AmplifyModelProvider.java | 53 + .../datastore/generated/model/Task.java | 218 ++ .../com/example/taskmaster/TaskDetail.java | 2 +- .../main/res/layout/activity_task_detail.xml | 2 +- build.gradle | 5 +- 26 files changed, 3204 insertions(+), 8 deletions(-) create mode 100644 .graphqlconfig.yml create mode 100644 amplify/.config/project-config.json create mode 100644 amplify/README.md create mode 100644 amplify/backend/api/taskmaster/parameters.json create mode 100644 amplify/backend/api/taskmaster/resolvers/README.md create mode 100644 amplify/backend/api/taskmaster/schema.graphql create mode 100644 amplify/backend/api/taskmaster/stacks/CustomResources.json create mode 100644 amplify/backend/api/taskmaster/transform.conf.json create mode 100644 amplify/backend/backend-config.json create mode 100644 amplify/backend/tags.json create mode 100644 amplify/cli.json create mode 100644 amplify/hooks/README.md create mode 100644 amplify/team-provider-info.json create mode 100644 app/src/main/graphql/com/amazonaws/amplify/generated/graphql/mutations.graphql create mode 100644 app/src/main/graphql/com/amazonaws/amplify/generated/graphql/queries.graphql create mode 100644 app/src/main/graphql/com/amazonaws/amplify/generated/graphql/subscriptions.graphql create mode 100644 app/src/main/graphql/schema.json create mode 100644 app/src/main/java/com/amplifyframework/datastore/generated/model/AmplifyModelProvider.java create mode 100644 app/src/main/java/com/amplifyframework/datastore/generated/model/Task.java diff --git a/.gitignore b/.gitignore index aa724b7..14106d4 100644 --- a/.gitignore +++ b/.gitignore @@ -12,4 +12,26 @@ /captures .externalNativeBuild .cxx -local.properties +local.properties + +#amplify-do-not-edit-begin +amplify/\#current-cloud-backend +amplify/.config/local-* +amplify/logs +amplify/mock-data +amplify/backend/amplify-meta.json +amplify/backend/awscloudformation +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 diff --git a/.graphqlconfig.yml b/.graphqlconfig.yml new file mode 100644 index 0000000..926c275 --- /dev/null +++ b/.graphqlconfig.yml @@ -0,0 +1,15 @@ +projects: + taskmaster: + schemaPath: app/src/main/graphql/schema.json + includes: + - app/src/main/graphql/**/*.graphql + excludes: + - ./amplify/** + extensions: + amplify: + codeGenTarget: '' + generatedFileName: '' + docsFilePath: app/src/main/graphql/com/amazonaws/amplify/generated/graphql +extensions: + amplify: + version: 3 diff --git a/amplify/.config/project-config.json b/amplify/.config/project-config.json new file mode 100644 index 0000000..59735ea --- /dev/null +++ b/amplify/.config/project-config.json @@ -0,0 +1,13 @@ +{ + "projectName": "TaskMaster", + "version": "3.1", + "frontend": "android", + "android": { + "config": { + "ResDir": "app/src/main/res" + } + }, + "providers": [ + "awscloudformation" + ] +} \ No newline at end of file diff --git a/amplify/README.md b/amplify/README.md new file mode 100644 index 0000000..7c0a9e2 --- /dev/null +++ b/amplify/README.md @@ -0,0 +1,8 @@ +# Getting Started with Amplify CLI +This directory was generated by [Amplify CLI](https://docs.amplify.aws/cli). + +Helpful resources: +- Amplify documentation: https://docs.amplify.aws +- Amplify CLI documentation: https://docs.amplify.aws/cli +- More details on this folder & generated files: https://docs.amplify.aws/cli/reference/files +- Join Amplify's community: https://amplify.aws/community/ diff --git a/amplify/backend/api/taskmaster/parameters.json b/amplify/backend/api/taskmaster/parameters.json new file mode 100644 index 0000000..7fa5788 --- /dev/null +++ b/amplify/backend/api/taskmaster/parameters.json @@ -0,0 +1,5 @@ +{ + "AppSyncApiName": "taskmaster", + "DynamoDBBillingMode": "PAY_PER_REQUEST", + "DynamoDBEnableServerSideEncryption": false +} \ No newline at end of file diff --git a/amplify/backend/api/taskmaster/resolvers/README.md b/amplify/backend/api/taskmaster/resolvers/README.md new file mode 100644 index 0000000..89e564c --- /dev/null +++ b/amplify/backend/api/taskmaster/resolvers/README.md @@ -0,0 +1,2 @@ +Any resolvers that you add in this directory will override the ones automatically generated by Amplify CLI and will be directly copied to the cloud. +For more information, visit [https://docs.amplify.aws/cli/graphql-transformer/resolvers](https://docs.amplify.aws/cli/graphql-transformer/resolvers) \ No newline at end of file diff --git a/amplify/backend/api/taskmaster/schema.graphql b/amplify/backend/api/taskmaster/schema.graphql new file mode 100644 index 0000000..779080c --- /dev/null +++ b/amplify/backend/api/taskmaster/schema.graphql @@ -0,0 +1,6 @@ +type Task @model { + id: ID! + title: String! + body: String + state: String +} diff --git a/amplify/backend/api/taskmaster/stacks/CustomResources.json b/amplify/backend/api/taskmaster/stacks/CustomResources.json new file mode 100644 index 0000000..f95feea --- /dev/null +++ b/amplify/backend/api/taskmaster/stacks/CustomResources.json @@ -0,0 +1,58 @@ +{ + "AWSTemplateFormatVersion": "2010-09-09", + "Description": "An auto-generated nested stack.", + "Metadata": {}, + "Parameters": { + "AppSyncApiId": { + "Type": "String", + "Description": "The id of the AppSync API associated with this project." + }, + "AppSyncApiName": { + "Type": "String", + "Description": "The name of the AppSync API", + "Default": "AppSyncSimpleTransform" + }, + "env": { + "Type": "String", + "Description": "The environment name. e.g. Dev, Test, or Production", + "Default": "NONE" + }, + "S3DeploymentBucket": { + "Type": "String", + "Description": "The S3 bucket containing all deployment assets for the project." + }, + "S3DeploymentRootKey": { + "Type": "String", + "Description": "An S3 key relative to the S3DeploymentBucket that points to the root\nof the deployment directory." + } + }, + "Resources": { + "EmptyResource": { + "Type": "Custom::EmptyResource", + "Condition": "AlwaysFalse" + } + }, + "Conditions": { + "HasEnvironmentParameter": { + "Fn::Not": [ + { + "Fn::Equals": [ + { + "Ref": "env" + }, + "NONE" + ] + } + ] + }, + "AlwaysFalse": { + "Fn::Equals": ["true", "false"] + } + }, + "Outputs": { + "EmptyOutput": { + "Description": "An empty output. You may delete this if you have at least one resource above.", + "Value": "" + } + } +} diff --git a/amplify/backend/api/taskmaster/transform.conf.json b/amplify/backend/api/taskmaster/transform.conf.json new file mode 100644 index 0000000..1a748d4 --- /dev/null +++ b/amplify/backend/api/taskmaster/transform.conf.json @@ -0,0 +1,10 @@ +{ + "Version": 5, + "ElasticsearchWarning": true, + "ResolverConfig": { + "project": { + "ConflictHandler": "AUTOMERGE", + "ConflictDetection": "VERSION" + } + } +} \ No newline at end of file diff --git a/amplify/backend/backend-config.json b/amplify/backend/backend-config.json new file mode 100644 index 0000000..f75f5e8 --- /dev/null +++ b/amplify/backend/backend-config.json @@ -0,0 +1,20 @@ +{ + "api": { + "taskmaster": { + "service": "AppSync", + "providerPlugin": "awscloudformation", + "output": { + "authConfig": { + "defaultAuthentication": { + "authenticationType": "API_KEY", + "apiKeyConfig": { + "apiKeyExpirationDays": 35, + "description": "Heba Key" + } + }, + "additionalAuthenticationProviders": [] + } + } + } + } +} \ No newline at end of file diff --git a/amplify/backend/tags.json b/amplify/backend/tags.json new file mode 100644 index 0000000..b9321d7 --- /dev/null +++ b/amplify/backend/tags.json @@ -0,0 +1,10 @@ +[ + { + "Key": "user:Stack", + "Value": "{project-env}" + }, + { + "Key": "user:Application", + "Value": "{project-name}" + } +] \ No newline at end of file diff --git a/amplify/cli.json b/amplify/cli.json new file mode 100644 index 0000000..3440a11 --- /dev/null +++ b/amplify/cli.json @@ -0,0 +1,45 @@ +{ + "features": { + "graphqltransformer": { + "addmissingownerfields": true, + "improvepluralization": false, + "validatetypenamereservedwords": true, + "useexperimentalpipelinedtransformer": false, + "enableiterativegsiupdates": true, + "secondarykeyasgsi": true, + "skipoverridemutationinputtypes": true + }, + "frontend-ios": { + "enablexcodeintegration": true + }, + "auth": { + "enablecaseinsensitivity": true, + "useinclusiveterminology": true, + "breakcirculardependency": true, + "forcealiasattributes": false + }, + "codegen": { + "useappsyncmodelgenplugin": true, + "usedocsgeneratorplugin": true, + "usetypesgeneratorplugin": true, + "cleangeneratedmodelsdirectory": true, + "retaincasestyle": true, + "addtimestampfields": true, + "handlelistnullabilitytransparently": true, + "emitauthprovider": true, + "generateindexrules": true, + "enabledartnullsafety": true + }, + "appsync": { + "generategraphqlpermissions": true + }, + "latestregionsupport": { + "pinpoint": 1, + "translate": 1, + "transcribe": 1, + "rekognition": 1, + "textract": 1, + "comprehend": 1 + } + } +} \ No newline at end of file diff --git a/amplify/hooks/README.md b/amplify/hooks/README.md new file mode 100644 index 0000000..8fb601e --- /dev/null +++ b/amplify/hooks/README.md @@ -0,0 +1,7 @@ +# Command Hooks + +Command hooks can be used to run custom scripts upon Amplify CLI lifecycle events like pre-push, post-add-function, etc. + +To get started, add your script files based on the expected naming convention in this directory. + +Learn more about the script file naming convention, hook parameters, third party dependencies, and advanced configurations at https://docs.amplify.aws/cli/usage/command-hooks diff --git a/amplify/team-provider-info.json b/amplify/team-provider-info.json new file mode 100644 index 0000000..fc1646c --- /dev/null +++ b/amplify/team-provider-info.json @@ -0,0 +1,15 @@ +{ + "dev": { + "awscloudformation": { + "AuthRoleName": "amplify-taskmaster-dev-195815-authRole", + "UnauthRoleArn": "arn:aws:iam::420812806768:role/amplify-taskmaster-dev-195815-unauthRole", + "AuthRoleArn": "arn:aws:iam::420812806768:role/amplify-taskmaster-dev-195815-authRole", + "Region": "eu-central-1", + "DeploymentBucketName": "amplify-taskmaster-dev-195815-deployment", + "UnauthRoleName": "amplify-taskmaster-dev-195815-unauthRole", + "StackName": "amplify-taskmaster-dev-195815", + "StackId": "arn:aws:cloudformation:eu-central-1:420812806768:stack/amplify-taskmaster-dev-195815/79c987d0-40bd-11ec-87f0-02bc731afc30", + "AmplifyAppId": "d2y63djc1sd750" + } + } +} \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 18651da..8abeb7a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -51,6 +51,8 @@ dependencies { +// // lab32 - + implementation 'com.amplifyframework:aws-api:1.28.3' + implementation 'com.amplifyframework:aws-datastore:1.28.3' } \ No newline at end of file diff --git a/app/src/androidTest/java/com/example/taskmaster/ExampleInstrumentedTest.java b/app/src/androidTest/java/com/example/taskmaster/ExampleInstrumentedTest.java index b8242a0..38e33b6 100644 --- a/app/src/androidTest/java/com/example/taskmaster/ExampleInstrumentedTest.java +++ b/app/src/androidTest/java/com/example/taskmaster/ExampleInstrumentedTest.java @@ -18,8 +18,6 @@ import org.junit.Test; import org.junit.runner.RunWith; -import static org.junit.Assert.*; - /** * Instrumented test, which will execute on an Android device. * @@ -59,9 +57,10 @@ public void AllTasksTest() { @Test public void RecyclerViewTest(){ onView(withId(R.id.recycleViewId)).perform(click()); - onView(withId(R.id.title)).check(matches(isDisplayed())); +// onView(withId(R.id.title1)).check(matches(isDisplayed())); onView(withId(R.id.body)).check(matches(isDisplayed())); onView(withId(R.id.state)).check(matches(isDisplayed())); + onView(withId(R.id.title1)).check(matches(isDisplayed())); } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c8a06dd..f823577 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -2,6 +2,9 @@ + + + > models() { + final Set> modifiableSet = new HashSet<>( + Arrays.>asList(Task.class) + ); + + return Immutable.of(modifiableSet); + + } + + /** + * Get the version of the models. + * + * @return the version string of the models. + */ + @Override + public String version() { + return AMPLIFY_MODEL_VERSION; + } +} diff --git a/app/src/main/java/com/amplifyframework/datastore/generated/model/Task.java b/app/src/main/java/com/amplifyframework/datastore/generated/model/Task.java new file mode 100644 index 0000000..05dd6d3 --- /dev/null +++ b/app/src/main/java/com/amplifyframework/datastore/generated/model/Task.java @@ -0,0 +1,218 @@ +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.Model; +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 Task type in your schema. */ +@SuppressWarnings("all") +@ModelConfig(pluralName = "Tasks") +public final class Task implements Model { + public static final QueryField ID = field("Task", "id"); + public static final QueryField TITLE = field("Task", "title"); + public static final QueryField BODY = field("Task", "body"); + public static final QueryField STATE = field("Task", "state"); + private final @ModelField(targetType="ID", isRequired = true) String id; + private final @ModelField(targetType="String", isRequired = true) String title; + private final @ModelField(targetType="String") String body; + private final @ModelField(targetType="String") String state; + 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 getTitle() { + return title; + } + + public String getBody() { + return body; + } + + public String getState() { + return state; + } + + public Temporal.DateTime getCreatedAt() { + return createdAt; + } + + public Temporal.DateTime getUpdatedAt() { + return updatedAt; + } + + private Task(String id, String title, String body, String state) { + this.id = id; + this.title = title; + this.body = body; + this.state = state; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } else if(obj == null || getClass() != obj.getClass()) { + return false; + } else { + Task task = (Task) obj; + return ObjectsCompat.equals(getId(), task.getId()) && + ObjectsCompat.equals(getTitle(), task.getTitle()) && + ObjectsCompat.equals(getBody(), task.getBody()) && + ObjectsCompat.equals(getState(), task.getState()) && + ObjectsCompat.equals(getCreatedAt(), task.getCreatedAt()) && + ObjectsCompat.equals(getUpdatedAt(), task.getUpdatedAt()); + } + } + + @Override + public int hashCode() { + return new StringBuilder() + .append(getId()) + .append(getTitle()) + .append(getBody()) + .append(getState()) + .append(getCreatedAt()) + .append(getUpdatedAt()) + .toString() + .hashCode(); + } + + @Override + public String toString() { + return new StringBuilder() + .append("Task {") + .append("id=" + String.valueOf(getId()) + ", ") + .append("title=" + String.valueOf(getTitle()) + ", ") + .append("body=" + String.valueOf(getBody()) + ", ") + .append("state=" + String.valueOf(getState()) + ", ") + .append("createdAt=" + String.valueOf(getCreatedAt()) + ", ") + .append("updatedAt=" + String.valueOf(getUpdatedAt())) + .append("}") + .toString(); + } + + public static TitleStep 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 Task justId(String id) { + return new Task( + id, + null, + null, + null + ); + } + + public CopyOfBuilder copyOfBuilder() { + return new CopyOfBuilder(id, + title, + body, + state); + } + public interface TitleStep { + BuildStep title(String title); + } + + + public interface BuildStep { + Task build(); + BuildStep id(String id); + BuildStep body(String body); + BuildStep state(String state); + } + + + public static class Builder implements TitleStep, BuildStep { + private String id; + private String title; + private String body; + private String state; + @Override + public Task build() { + String id = this.id != null ? this.id : UUID.randomUUID().toString(); + + return new Task( + id, + title, + body, + state); + } + + @Override + public BuildStep title(String title) { + Objects.requireNonNull(title); + this.title = title; + return this; + } + + @Override + public BuildStep body(String body) { + this.body = body; + return this; + } + + @Override + public BuildStep state(String state) { + this.state = state; + 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 title, String body, String state) { + super.id(id); + super.title(title) + .body(body) + .state(state); + } + + @Override + public CopyOfBuilder title(String title) { + return (CopyOfBuilder) super.title(title); + } + + @Override + public CopyOfBuilder body(String body) { + return (CopyOfBuilder) super.body(body); + } + + @Override + public CopyOfBuilder state(String state) { + return (CopyOfBuilder) super.state(state); + } + } + +} diff --git a/app/src/main/java/com/example/taskmaster/TaskDetail.java b/app/src/main/java/com/example/taskmaster/TaskDetail.java index 82592de..1076616 100644 --- a/app/src/main/java/com/example/taskmaster/TaskDetail.java +++ b/app/src/main/java/com/example/taskmaster/TaskDetail.java @@ -31,7 +31,7 @@ public void onClick(View v) { Intent intent = getIntent(); String taskTitle = intent.getExtras().getString("Task Title"); - TextView Title = findViewById(R.id.title); + TextView Title = findViewById(R.id.title1); Title.setText(taskTitle); String taskBody = intent.getStringExtra("body"); diff --git a/app/src/main/res/layout/activity_task_detail.xml b/app/src/main/res/layout/activity_task_detail.xml index 6d537bb..4c96fad 100644 --- a/app/src/main/res/layout/activity_task_detail.xml +++ b/app/src/main/res/layout/activity_task_detail.xml @@ -47,7 +47,7 @@ app:layout_constraintVertical_bias="0.411" /> Date: Mon, 8 Nov 2021 23:48:06 +0200 Subject: [PATCH 2/6] lab32 done --- README.md | 13 + .../generated/graphql/mutations.graphql | 9 + .../amplify/generated/graphql/queries.graphql | 34 ++ .../generated/graphql/subscriptions.graphql | 9 + app/src/main/graphql/schema.json | 417 ++++++++++++------ .../java/com/example/taskmaster/AddTask.java | 20 +- .../com/example/taskmaster/MainActivity.java | 60 ++- .../example/taskmaster/TaskViewAdapter.java | 2 +- screenshots/lab32.png | Bin 0 -> 79095 bytes 9 files changed, 415 insertions(+), 149 deletions(-) create mode 100644 screenshots/lab32.png diff --git a/README.md b/README.md index 7c3e14f..28dc859 100644 --- a/README.md +++ b/README.md @@ -86,4 +86,17 @@ ![test](screenshots/Test31.png) +## **Lab32** + +* Tasks Are Cloudy +Using the amplify add api command, create a Task resource that replicates our existing Task schema. Update all references to the Task data to instead use AWS Amplify to access your data in DynamoDB instead of in Room. + +* Add Task Form +Modify your Add Task form to save the data entered in as a Task to DynamoDB. + +* Homepage +Refactor your homepage’s RecyclerView to display all Task entities in DynamoDB. + +![lab32](screenshots/lab32.png) + diff --git a/app/src/main/graphql/com/amazonaws/amplify/generated/graphql/mutations.graphql b/app/src/main/graphql/com/amazonaws/amplify/generated/graphql/mutations.graphql index b951d46..1486563 100644 --- a/app/src/main/graphql/com/amazonaws/amplify/generated/graphql/mutations.graphql +++ b/app/src/main/graphql/com/amazonaws/amplify/generated/graphql/mutations.graphql @@ -8,6 +8,9 @@ mutation CreateTask( title body state + _version + _deleted + _lastChangedAt createdAt updatedAt } @@ -21,6 +24,9 @@ mutation UpdateTask( title body state + _version + _deleted + _lastChangedAt createdAt updatedAt } @@ -34,6 +40,9 @@ mutation DeleteTask( title body state + _version + _deleted + _lastChangedAt createdAt updatedAt } diff --git a/app/src/main/graphql/com/amazonaws/amplify/generated/graphql/queries.graphql b/app/src/main/graphql/com/amazonaws/amplify/generated/graphql/queries.graphql index 88a0cba..37aabab 100644 --- a/app/src/main/graphql/com/amazonaws/amplify/generated/graphql/queries.graphql +++ b/app/src/main/graphql/com/amazonaws/amplify/generated/graphql/queries.graphql @@ -1,10 +1,40 @@ # this is an auto generated file. This will be overwritten +query SyncTasks( + $filter: ModelTaskFilterInput + $limit: Int + $nextToken: String + $lastSync: AWSTimestamp +) { + syncTasks( + filter: $filter + limit: $limit + nextToken: $nextToken + lastSync: $lastSync + ) { + items { + id + title + body + state + _version + _deleted + _lastChangedAt + createdAt + updatedAt + } + nextToken + startedAt + } +} query GetTask($id: ID!) { getTask(id: $id) { id title body state + _version + _deleted + _lastChangedAt createdAt updatedAt } @@ -20,9 +50,13 @@ query ListTasks( title body state + _version + _deleted + _lastChangedAt createdAt updatedAt } nextToken + startedAt } } diff --git a/app/src/main/graphql/com/amazonaws/amplify/generated/graphql/subscriptions.graphql b/app/src/main/graphql/com/amazonaws/amplify/generated/graphql/subscriptions.graphql index d4f9858..566f1af 100644 --- a/app/src/main/graphql/com/amazonaws/amplify/generated/graphql/subscriptions.graphql +++ b/app/src/main/graphql/com/amazonaws/amplify/generated/graphql/subscriptions.graphql @@ -5,6 +5,9 @@ subscription OnCreateTask { title body state + _version + _deleted + _lastChangedAt createdAt updatedAt } @@ -15,6 +18,9 @@ subscription OnUpdateTask { title body state + _version + _deleted + _lastChangedAt createdAt updatedAt } @@ -25,6 +31,9 @@ subscription OnDeleteTask { title body state + _version + _deleted + _lastChangedAt createdAt updatedAt } diff --git a/app/src/main/graphql/schema.json b/app/src/main/graphql/schema.json index 1a8fe05..56c727e 100644 --- a/app/src/main/graphql/schema.json +++ b/app/src/main/graphql/schema.json @@ -15,6 +15,59 @@ "name": "Query", "description": null, "fields": [ + { + "name": "syncTasks", + "description": null, + "args": [ + { + "name": "filter", + "description": null, + "type": { + "kind": "INPUT_OBJECT", + "name": "ModelTaskFilterInput", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "limit", + "description": null, + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "nextToken", + "description": null, + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "lastSync", + "description": null, + "type": { + "kind": "SCALAR", + "name": "AWSTimestamp", + "ofType": null + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "ModelTaskConnection", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, { "name": "getTask", "description": null, @@ -91,135 +144,6 @@ "enumValues": null, "possibleTypes": null }, - { - "kind": "SCALAR", - "name": "ID", - "description": "The `ID` scalar type represents a unique identifier, often used to refetch an object or as key for a cache. The ID type appears in a JSON response as a String; however, it is not intended to be human-readable. When expected as an input type, any string (such as `\"4\"`) or integer (such as `4`) input value will be accepted as an ID.", - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "Task", - "description": null, - "fields": [ - { - "name": "id", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "title", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "body", - "description": null, - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "state", - "description": null, - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "createdAt", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "AWSDateTime", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "updatedAt", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "AWSDateTime", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "SCALAR", - "name": "String", - "description": "The `String` scalar type represents textual data, represented as UTF-8 character sequences. The String type is most often used by GraphQL to represent free-form human-readable text.", - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "SCALAR", - "name": "AWSDateTime", - "description": null, - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, { "kind": "INPUT_OBJECT", "name": "ModelTaskFilterInput", @@ -454,6 +378,16 @@ "enumValues": null, "possibleTypes": null }, + { + "kind": "SCALAR", + "name": "ID", + "description": "The `ID` scalar type represents a unique identifier, often used to refetch an object or as key for a cache. The ID type appears in a JSON response as a String; however, it is not intended to be human-readable. When expected as an input type, any string (such as `\"4\"`) or integer (such as `4`) input value will be accepted as an ID.", + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, { "kind": "SCALAR", "name": "Boolean", @@ -775,6 +709,26 @@ "enumValues": null, "possibleTypes": null }, + { + "kind": "SCALAR", + "name": "String", + "description": "The `String` scalar type represents textual data, represented as UTF-8 character sequences. The String type is most often used by GraphQL to represent free-form human-readable text.", + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "SCALAR", + "name": "AWSTimestamp", + "description": null, + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, { "kind": "OBJECT", "name": "ModelTaskConnection", @@ -807,6 +761,161 @@ }, "isDeprecated": false, "deprecationReason": null + }, + { + "name": "startedAt", + "description": null, + "args": [], + "type": { + "kind": "SCALAR", + "name": "AWSTimestamp", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "Task", + "description": null, + "fields": [ + { + "name": "id", + "description": null, + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "title", + "description": null, + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "body", + "description": null, + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "state", + "description": null, + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "_version", + "description": null, + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "_deleted", + "description": null, + "args": [], + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "_lastChangedAt", + "description": null, + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "AWSTimestamp", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "createdAt", + "description": null, + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "AWSDateTime", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "updatedAt", + "description": null, + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "AWSDateTime", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null } ], "inputFields": null, @@ -814,6 +923,16 @@ "enumValues": null, "possibleTypes": null }, + { + "kind": "SCALAR", + "name": "AWSDateTime", + "description": null, + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, { "kind": "OBJECT", "name": "Mutation", @@ -985,6 +1104,16 @@ "ofType": null }, "defaultValue": null + }, + { + "name": "_version", + "description": null, + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null } ], "interfaces": null, @@ -1119,6 +1248,16 @@ "ofType": null }, "defaultValue": null + }, + { + "name": "_version", + "description": null, + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null } ], "interfaces": null, @@ -1144,6 +1283,16 @@ } }, "defaultValue": null + }, + { + "name": "_version", + "description": null, + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null } ], "interfaces": null, @@ -2013,16 +2162,6 @@ "enumValues": null, "possibleTypes": null }, - { - "kind": "SCALAR", - "name": "AWSTimestamp", - "description": null, - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, { "kind": "SCALAR", "name": "AWSEmail", diff --git a/app/src/main/java/com/example/taskmaster/AddTask.java b/app/src/main/java/com/example/taskmaster/AddTask.java index e86be1d..cbb6065 100644 --- a/app/src/main/java/com/example/taskmaster/AddTask.java +++ b/app/src/main/java/com/example/taskmaster/AddTask.java @@ -6,6 +6,7 @@ import android.annotation.SuppressLint; import android.content.Intent; import android.os.Bundle; +import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.EditText; @@ -13,6 +14,11 @@ import android.widget.Toast; import android.widget.Toolbar; +import com.amplifyframework.api.graphql.model.ModelMutation; +import com.amplifyframework.core.Amplify; +import com.amplifyframework.datastore.generated.model.Task; + + public class AddTask extends AppCompatActivity { @Override @@ -55,11 +61,21 @@ public void onClick(View view) { String setBody = taskBody.getText().toString(); String setState = taskState.getText().toString(); - Task details = new Task(setTitle , setBody , setState); - taskDao.insert(details); +// Task details = new Task(setTitle , setBody , setState); +// taskDao.insert(details); + com.amplifyframework.datastore.generated.model.Task todo = Task.builder() + .title(setTitle) + .body(setBody) + .state(setState) + .build(); + Amplify.API.mutate( + ModelMutation.create(todo), + response -> Log.i("MyAmplifyApp", "Added Todo with id: " + response.getData().getId()), + error -> Log.e("MyAmplifyApp", "Create failed", error) + ); } }); diff --git a/app/src/main/java/com/example/taskmaster/MainActivity.java b/app/src/main/java/com/example/taskmaster/MainActivity.java index f443921..5182867 100644 --- a/app/src/main/java/com/example/taskmaster/MainActivity.java +++ b/app/src/main/java/com/example/taskmaster/MainActivity.java @@ -1,24 +1,36 @@ package com.example.taskmaster; +import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import androidx.room.Room; +import android.annotation.SuppressLint; import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; +import android.os.Handler; +import android.os.Looper; +import android.os.Message; import android.preference.PreferenceManager; +import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import android.widget.Toolbar; +import com.amplifyframework.AmplifyException; +import com.amplifyframework.api.aws.AWSApiPlugin; +import com.amplifyframework.api.graphql.model.ModelQuery; +import com.amplifyframework.core.Amplify; + import java.util.ArrayList; import java.util.List; public class MainActivity extends AppCompatActivity { + private List taskList = new ArrayList<>(); @Override protected void onCreate(Bundle savedInstanceState) { @@ -102,6 +114,39 @@ public void onClick(View V) { // startActivity(goToTask3); // })); + try { + + Amplify.addPlugin(new AWSApiPlugin()); + Amplify.configure(getApplicationContext()); + + Log.i("MyAmplifyApp", "Initialized Amplify"); + } catch (AmplifyException error) { + Log.e("MyAmplifyApp", "Could not initialize Amplify", error); + } + RecyclerView AllTasks = findViewById(R.id.recycleViewId); + AllTasks.setLayoutManager(new LinearLayoutManager(this)); + + AllTasks.setAdapter(new TaskViewAdapter(taskList, MainActivity.this)); + + Handler handler = new Handler(Looper.myLooper(), new Handler.Callback() { + @SuppressLint("NotifyDataSetChanged") + @Override + public boolean handleMessage(@NonNull Message msg) { + AllTasks.getAdapter().notifyDataSetChanged(); + return false; + } + }); + Amplify.API.query( + ModelQuery.list(com.amplifyframework.datastore.generated.model.Task.class), + response -> { + for (com.amplifyframework.datastore.generated.model.Task todo : response.getData()) { + Task taskOrg = new Task(todo.getTitle(),todo.getBody(),todo.getState()); + Log.i("graph testing", todo.getTitle()); + taskList.add(taskOrg); + } + handler.sendEmptyMessage(1); + }, error -> Log.e("MyAmplifyApp", "Query failure", error) + ); } @Override @@ -113,11 +158,12 @@ protected void onResume() { userTasks.setText(username+"’s tasks"); // database render - TaskDatabase db = Room.databaseBuilder(getApplicationContext(), - TaskDatabase.class, "database-name").allowMainThreadQueries().build(); - TaskDAO taskDao = db.taskDao(); - List taskList = taskDao.getAll(); - RecyclerView taskRec = findViewById(R.id.recycleViewId); - taskRec.setLayoutManager(new LinearLayoutManager(this)); - taskRec.setAdapter(new TaskViewAdapter(taskList)); } +// TaskDatabase db = Room.databaseBuilder(getApplicationContext(), +// TaskDatabase.class, "database-name").allowMainThreadQueries().build(); +// TaskDAO taskDao = db.taskDao(); +// List taskList = taskDao.getAll(); +// RecyclerView taskRec = findViewById(R.id.recycleViewId); +// taskRec.setLayoutManager(new LinearLayoutManager(this)); +// taskRec.setAdapter(new TaskViewAdapter(taskList)); + } } \ No newline at end of file diff --git a/app/src/main/java/com/example/taskmaster/TaskViewAdapter.java b/app/src/main/java/com/example/taskmaster/TaskViewAdapter.java index 497f0f8..74bd33e 100644 --- a/app/src/main/java/com/example/taskmaster/TaskViewAdapter.java +++ b/app/src/main/java/com/example/taskmaster/TaskViewAdapter.java @@ -19,7 +19,7 @@ public class TaskViewAdapter extends RecyclerView.Adapter { List AllTasks = new ArrayList<>(); - public TaskViewAdapter(List AllTasks){ + public TaskViewAdapter(List AllTasks, MainActivity mainActivity){ this.AllTasks= AllTasks; } diff --git a/screenshots/lab32.png b/screenshots/lab32.png new file mode 100644 index 0000000000000000000000000000000000000000..61fce4018ea094b53549085789d118aba737c7b4 GIT binary patch literal 79095 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

;>k-rWED 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 Pn&I_y^>bP0l+XkK-j8Gd literal 0 HcmV?d00001 From 4ec1cc771519cace35d31793edd554e0546c0d35 Mon Sep 17 00:00:00 2001 From: Heba1998 Date: Tue, 9 Nov 2021 00:20:58 +0200 Subject: [PATCH 3/6] lab32 done --- app/src/main/java/com/example/taskmaster/AddTask.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/example/taskmaster/AddTask.java b/app/src/main/java/com/example/taskmaster/AddTask.java index cbb6065..c9a1c80 100644 --- a/app/src/main/java/com/example/taskmaster/AddTask.java +++ b/app/src/main/java/com/example/taskmaster/AddTask.java @@ -65,7 +65,7 @@ public void onClick(View view) { // taskDao.insert(details); - com.amplifyframework.datastore.generated.model.Task todo = Task.builder() + Task todo = Task.builder() .title(setTitle) .body(setBody) .state(setState) From f0ed9159e41973cd727960535388910f354e4168 Mon Sep 17 00:00:00 2001 From: Heba1998 Date: Tue, 9 Nov 2021 22:21:02 +0200 Subject: [PATCH 4/6] =?UTF-8?q?not=20finished=20yet=20=F0=9F=98=A5?= =?UTF-8?q?=F0=9F=98=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/misc.xml | 6 +- README.md | 25 + amplify/backend/api/taskmaster/schema.graphql | 11 +- amplify/backend/backend-config.json | 2 +- .../generated/graphql/mutations.graphql | 108 +- .../amplify/generated/graphql/queries.graphql | 81 +- .../generated/graphql/subscriptions.graphql | 99 +- app/src/main/graphql/schema.json | 1010 +++++++++++++---- .../generated/model/AmplifyModelProvider.java | 4 +- .../datastore/generated/model/Task.java | 39 +- .../datastore/generated/model/Team.java | 163 +++ .../java/com/example/taskmaster/AddTask.java | 37 + .../com/example/taskmaster/MainActivity.java | 6 +- .../java/com/example/taskmaster/Setting.java | 16 + app/src/main/res/layout/activity_add_task.xml | 58 +- app/src/main/res/layout/activity_main.xml | 20 +- app/src/main/res/layout/activity_setting.xml | 52 +- screenshots/AddTask33.png | Bin 0 -> 50281 bytes screenshots/homepage33.png | Bin 0 -> 58476 bytes screenshots/setting33.png | Bin 0 -> 49127 bytes 20 files changed, 1428 insertions(+), 309 deletions(-) create mode 100644 app/src/main/java/com/amplifyframework/datastore/generated/model/Team.java create mode 100644 screenshots/AddTask33.png create mode 100644 screenshots/homepage33.png create mode 100644 screenshots/setting33.png diff --git a/.idea/misc.xml b/.idea/misc.xml index ef26bd8..8765ba7 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -4,10 +4,10 @@