ITECH2000 Mobile Development Fundamentals | My Assignment Tutor

Page 1 of 7ITECH2000 Mobile Development FundamentalsAssessment Task 3 – AppInventor App (Reddit Browser)OverviewYou will implement in AppInventor a multi-screen app, based on a given project specification. This appwill use a range of components taught up to and including Week 11 of the course. You will also submita brief report containing pseudocode and a description of how your solution utilises various conceptslearned in class.Timelines and ExpectationsPercentage value of task: 25% (of final course mark)Due date: 11:59pm, Sunday 6th June 2021 (Week 11) – after this date, you will receive a penaltyCut-off date: 11:59pm, Sunday 13th June 2021 – after this date work will not be acceptedMinimum time expectation: 20 hoursMaximum time expectation: 40 hours – Most students should not require this much time.Learning Outcomes AssessedThe following course learning outcomes are assessed by completing this assessment.K1. Understand constructs typical of many programming languages such as: variables, expressions,assignment, sequence, selection, iteration, procedures, parameters, return values.A1. Design, develop, test and debug mobile apps from a given textual program specification.S1. Analyse the input, processing and output needs of small programming problems.S2. Design code sequences to realise algorithms in a programming language.S3. Design basic user interfaces and develop storyboards to convey designed interaction sequences.S5. Develop test cases to ensure correct behaviour.Assessment DetailsThis assignment contains two parts: an app and a brief report.1. App DetailsYour assignment is to develop an Android application, using MIT AppInventor, which will store a list ofinteresting “subreddits” from the popular social website Reddit (, and download thecurrent top posts from those “subreddits” for viewing. If you are not familiar with the Reddit platform,you can read more about it here: As your application will only bereading information from the Reddit API (and not posting any information), you will not be required toregister your own account on Reddit for this assignment.The application should contain a number of screens, which are described in the following sections. Aslong as you fulfil the requirements in a logical way that follows what you have learned this semester interms of programming and app design, you have free reign to design your interfaces as you like.CRICOS Provider No. 00103D | RTO Code 4909CRICOS Provider No. 00103D | RTO Code 4909 Page 2 of 7Screen 1: Subreddit ListWhen the application is first opened, a screen should be displayed which contains a list of “subreddits”that the user has previously added (or an empty list on the first run), as well as a “Add New Subreddit”button and a “View Saved Posts” button.When the “Add New Subreddit” button is clicked, this should open Screen 2, where the user inputs asubreddit name that is returned back to this screen and added to the list of “subreddits” (if it’s not aduplicate that is already in the list).When the “View Saved Posts” button is clicked, this should open Screen 5.Once the user has added a subreddit, it should be displayed in the list of subreddits (along with anyother subreddits that have been added). The list of subreddits should be persisted using a TinyDB sothat it can be reloaded after the user closes and reopens the app or returns to this screen from anotherscreen. As an added feature, the list of subreddits should always display in alphabetical order using asorting algorithm (see Week 10 materials).When the user clicks on a subreddit from the list, they should be presented with two options:1. View Posts: If selected, then Screen 3 should be loaded with this subreddit being passed to itas a start value. Screen 3 will load the most recent posts from this subreddit (if it’s valid).2. Delete Subreddit: If selected, then this subreddit should be removed from the list and nolonger persisted in the TinyDB.Screen 2: Add Subreddit ScreenThis screen should allow the user to enter a subreddit name and choose to save it.If the user enters a subreddit name (it doesn’t have to be valid) and chooses to save it, it should returnthe subreddit name back to Screen 1 to be persisted. This screen should include validation so that theuser can’t save an empty subreddit name.If the users decides not to add a subreddit, they should be able to cancel and return back to Screen 1without making any changes to the list of subreddits.Screen 3: View Posts ScreenAfter a user selects to view the posts for a subreddit from Screen 1, this screen should be loaded. Thename of the subreddit that is being viewed should be displayed on this screen, as well as a list of thetitles of the most recent posts from this subreddit. See the instructions below for guidance ondownloading the posts. If the subreddit doesn’t exist, or there is no network connection, an appropriateerror should be displayed to the user.When a post title is clicked, its associated URL should be passed to Screen 4 which will load anddisplay the website.Downloading posts from Reddit using an APIWe are going to use the Pushshift Reddit API to download the most recent posts for a subreddit. Youcan get the most recent posts for a subreddit in JSON format using the following URL – all you need todo is replace with an actual subreddit’s name as required:CRICOS Provider No. 00103D | RTO Code 4909 Page 3 of 7 example, will give usthe five most recent posts from the Android subreddit. Note that the limit parameter is optional, but tokeep things simple I recommend loading only a small number of posts to start with.Note: If you are receiving error 1101 when trying to connect to the Pushshift API, try changing the URLto use http instead of https, e.g.,… etc.If you visit the link and view the JSON in a web browser, you will see that the JSON contains an array(data) of posts, with each post containing a range of information that describes the post. For thepurposes of this assignment, we are only interested in the title and the url values for each post, soyour app should extract these and load into an appropriate data structure to achieve the functionalityrequired for this screen.On the other hand, if you provide a subreddit to the API that doesn’t exist (try typing in somegibberish), you will see that the API returns an empty array of posts. This will help you to determinewhether a subreddit is valid or not for the purpose of displaying an error to the user.Screen 4: View URL ScreenAfter the user selects an individual post to view on Screen 3, this screen receives the post’s URL andloads it in a WebViewer component. Using relevant event blocks, the user should be shown a loadingmessage while the website URL is loading, which should disappear once the site has completedloading. This screen should also provide the user with a mechanism to return to the previous screen(Screen 3) to select another post to view from the current subreddit.There should also be an option on this screen for the user to save the current link as a “favourite”. Thisoption should prompt the user to input a custom title for the link, and then the custom title andassociated URL should be saved to a Text file. Do not use a TinyDB for this feature!Screen 5: Saved / Favourite Posts ScreenScreen 5 should display the list of favourites by loading them from the Text file, as saved in Screen 4.The custom titles of the favourites should be displayed in a list on the screen. When the user selects atitle from the list, the associated URL should be opened and displayed in Screen 4.This screen should also provide an option to clear the favourites, which would delete all the currentlysaved favourites from the Text file.General Requirements for CodingWhile your app should meet the functionality described above, you need to ensure that youdemonstrate the concepts we have covered in ITECH2000 so far. To achieve full marks you will needto ensure that you have correctly made use of each of the following components, constructs orconcepts somewhere in your app:• Dictionary• WebViewer and Web component• ListView or ListPicker• TinyDB and File• Local and global variables• ProceduresCRICOS Provider No. 00103D | RTO Code 4909 Page 4 of 7You should follow best practices for coding that we have described this semester, including the use ofprocedures to promote code reuse. Make sure you thoroughly test your application to ensure that it isrobust.Please read through all of the requirements before you commence work on the app, so you geta full sense of what is required to be done. It is recommended that you first model any eventsusing pseudocode before commencing programming.3. Brief ReportAs well as completing the program described above in AppInventor, you are also required to submit abrief report that includes the following:• A title page that includes your name and student ID number.• Pseudocode describing the behaviour of two (2) events that your app will respond to. Ensurethat you clearly label your pseudocode so that it is clear what aspect you are modelling.• For each of the design components/blocks listed in the previous section (GeneralRequirements for Coding), you should describe in 2-3 sentences how you used thecomponent(s) in your solution and justify why. If you have used a component multiple times,please describe one example. Note: There are 6 in total.• A description of how you tested your application to ensure that it functioned correctly, withrespect to user inputs, outputs, and networking.Getting Assistance and ClarificationIf any part of the task is unclear to you, or you are not quite sure how to do some aspect of the task,you should either contact your lecturer directly (via email, or in person while you are in class), or elsepost a question to the Discussion Forum on Moodle. However, any questions posted to the forum onMoodle should not include anything that you plan to submit (such as screenshots of code you mightwant to submit).PlagiarismPlagiarism is the presentation of the expressed thought or work of another person as though it is one’sown without properly acknowledging that person. You must not allow other students to copy your workand must take care to safeguard against this happening. More information about the plagiarism policyand procedure for the university can be found at must export your AppInventor project for submission. To do this, go to the “Projects” menu, andselect “Export selected project (.aia) to my computer”. Rename the .aia file to include both your nameand student ID number. App files submitted in any other format than .aia (e.g. apk) will not beaccepted and you will receive zero marks.You should also save your brief report as a PDF including both your name and student ID in the filename.Upload these files to Moodle through the assignment link labelled “Submit Assignment 2”. This link willonly become available after you have completed the “Declaration of Originality” form for theCRICOS Provider No. 00103D | RTO Code 4909 Page 5 of 7assignment, which requires you to accept the Student’s Statement. It is a legal declaration that thework was done by you, without any part of it being done by someone else.FeedbackYou can expect to receive your final mark and feedback comments within 2 weeks of the due date orthe date which you submitted your work – whichever is later. You may be required to attend aninterview with the marker to answer questions about your work; if this is the case, your mark will bewithheld until you have attended.Continue to the next page for the Marking Criteria/RubricCRICOS Provider No. 00103D | RTO Code 4909 Page 6 of 7Marking Criteria/RubricStudent Name: ______________________ Student ID: ______________________ RequirementMarksAwardedScreen 1: Subreddit List ScreenInput/output elements included on this screen appropriate for requirementsList of subreddits loaded from TinyDB when the screen is initialisedFunctionality provided for the user to open Screen 2Subreddit retrieved from Screen 2 and added to list/TinyDB if not duplicateFunctionality to navigate to Screen 3 implemented correctlyFunctionality to delete a subreddit from the list/TinyDB implemented correctlySorting algorithm implemented correctly to keep list of subreddits in alphabetic order1 2 1 3 1 2 2Screen 2: Add Subreddit ScreenInput/output elements included on this screen appropriate for requirementsValidation implemented correctly for subreddit nameFunctionality provided for user to cancel adding a subreddit and return to Screen 11 1 1Screen 3: View Posts ScreenInput/output elements included on this screen are appropriate for requirementsCurrent subreddit correctly displayed on the screenRecent posts from subreddit are loaded and displayed using the Pushshift APIError correctly displayed for invalid/non-existent subredditError correctly displayed for lack of internet connectivityClicking on a subreddit opens Screen 4 with the post’s URL as a start value1 1 3 1 2 1Screen 4: View URL ScreenInput/output elements included on this screen appropriate for requirementsLoading message displayed/hidden using appropriate eventsPost URL correctly loaded and displayed in a WebViewer componentFunctionality correctly implemented for user to return to Screen 3 to view another postFunctionality correctly implemented for a link to be saved as “favourite” to File1 1 2 1 2Screen 5: Saved / Favourite Posts ScreenInput/output elements included on this screen appropriate for requirementsSaved posts correctly loaded from File and displayed as titles using appropriate methodsClicking on a saved post opens the correctly associated link in Screen 4Functionality to delete all saved posts from the File is implemented correctly1 2 1 1 CRICOS Provider No. 00103D | RTO Code 4909 Page 7 of 7 General Programming Requirements[For each of the following criteria – full marks if included and no issues; half marks if included bysome issues; no marks if not demonstrated in solution]Has used TextBoxes, CheckBoxes, Labels, and Buttons appropriately (including usingtheir action blocks and event blocks)Has used the screen-changing mechanisms correctly and appropriatelyHas used repetition construct(s) to repeat code sequences appropriately and inappropriate placesHas used decision constructs appropriately / in appropriate placesHas formed appropriate boolean and relational expressionsHas used the list construct for appropriate purposes and used its action blocks in anappropriate manner to manipulate/use listsHas used the dictionary construct for appropriate purposes and used its action blocks inan appropriate manner to manipulate/use dictionariesHas formed procedures appropriately and in appropriate circumstancesHas used the TinyDB component appropriatelyHas used the File component appropriatelyHas used the Web and WebViewer components appropriately1 1 1 1 1 1 1 1 2 2 2The names used for variables, components, procedures and their argument slots areappropriate and clearly communicate their purpose in the code1The app is designed to be robust and does not crash unexpectedly2Brief ReportTwo (2) events are adequately modelled using pseudocodeExamples and explanations are provided for each of the 6 components/concepts listed inthe General Requirements for Coding section (0.5 marks each)Description of testing plan conducted to ensure robustness of app2 3 2Total:60 marksTotal Course Marks:25%Feedback:


Leave a Reply

Your email address will not be published. Required fields are marked *