swenggroup4 / scranplan Goto Github PK
View Code? Open in Web Editor NEWScran Plan Android Cooking App
Home Page: http://scranplan.xyz
Scran Plan Android Cooking App
Home Page: http://scranplan.xyz
When going into your feed, clicking on another persons post and enlarging it to the screen where your able to post comments, clicking the view author profile button doesn’t work.
When searching for ingredient and no results appear. Clicking on no more results button causes the app to crash.
Sentry Issue: SCRANPLAN-46
NullPointerException: Attempt to invoke virtual method 'java.util.Map com.google.firebase.firestore.DocumentSnapshot.getData()' on a null object reference
at com.group4sweng.scranplan.SearchFunctions.SearchListFragment.recipeSelected(SearchListFragment.java:205)
at com.group4sweng.scranplan.SearchFunctions.SearchRecyclerAdapter$1.onClick(SearchRecyclerAdapter.java:108)
...
(8 additional frame(s) were not displayed)
I believe infinite scroll is broken on the main recipe fragment page. It only loads 5 recipes at a time and doesn't display any more when you reach the end of the horizontal scroll.
Linked from issue #111, only looking at filters and searching by chef.
The profile image is being correctly uploaded to firebase but it's not displaying correctly within the edit profile page.
Louis suggested adding 2 image views with one that hides behind the existing one and is set to HIDDEN to begin with since we have been having issues with loading the image using glide.
How to reproduce:
Probably wont fix this because it's not really a big issue and I can't really think of a workaround anyway.
Basically if a user cancels an image upload mid way through when they go back into there public profile there image is blank. I could replace this with a placeholder image or joke 404 image instead or even create a new image file name each time and delete the previous file name but this is all extra time I don't want to spend.
How to reproduce:
The filter settings don't update and unlike the simular issue whereby the recipe list dosen't refresh with the new settings for an entire session these filter settings wont be updated. IE only works on log out and back in.
This was broken somewhere along the way through one of the more recent pull requests but i'm happy to give it a stab tommorow since it's related to me branch.
The out of memory error has re-surfaced except this time it's on the emulator which is a bit more worrying. Again an issue with older devices not having enough memory/storager available to display the bitmap images.
The bitmap in this case seems to be 45mb which is very large for a recipe image so restrictions into what you can import into the recipe thing need to be implemented if they haven't already
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.group4sweng.scranplan, PID: 3690
java.lang.OutOfMemoryError: Failed to allocate a 45158412 byte allocation with 4194304 free bytes and 25MB until OOM
at dalvik.system.VMRuntime.newNonMovableArray(Native Method)
at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:609)
at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:444)
at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:973)
at android.content.res.Resources.loadDrawableForCookie(Resources.java:2423)
at android.content.res.Resources.loadDrawable(Resources.java:2330)
at android.content.res.Resources.getDrawable(Resources.java:758)
at android.graphics.drawable.StateListDrawable.inflate(StateListDrawable.java:175)
at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:1095)
at android.graphics.drawable.Drawable.createFromXml(Drawable.java:1017)
at android.content.res.Resources.loadDrawableForCookie(Resources.java:2418)
at android.content.res.Resources.loadDrawable(Resources.java:2330)
at android.content.res.TypedArray.getDrawable(TypedArray.java:749)
at android.view.View.<init>(View.java:3730)
at android.widget.TextView.<init>(TextView.java:634)
at android.widget.Button.<init>(Button.java:111)
at android.widget.CompoundButton.<init>(CompoundButton.java:81)
at android.widget.CheckBox.<init>(CheckBox.java:72)
at android.widget.CheckBox.<init>(CheckBox.java:68)
at androidx.appcompat.widget.AppCompatCheckBox.<init>(AppCompatCheckBox.java:69)
at androidx.appcompat.widget.AppCompatCheckBox.<init>(AppCompatCheckBox.java:65)
at androidx.appcompat.app.AppCompatViewInflater.createCheckBox(AppCompatViewInflater.java:212)
at androidx.appcompat.app.AppCompatViewInflater.createView(AppCompatViewInflater.java:127)
at androidx.appcompat.app.AppCompatDelegateImpl.createView(AppCompatDelegateImpl.java:1407)
at androidx.appcompat.app.AppCompatDelegateImpl.onCreateView(AppCompatDelegateImpl.java:1457)
at android.view.LayoutInflater$FactoryMerger.onCreateView(LayoutInflater.java:180)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:725)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:806)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:809)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:809)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:809)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:809)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:809)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:809)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:809)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:809)
at android.view.LayoutInflater.inflate(LayoutInflater.java:504)
at android.view.LayoutInflater.inflate(LayoutInflater.java:414)
at android.view.LayoutInflater.inflate(LayoutInflater.java:365)
at com.group4sweng.scranplan.Social.PostPage.onCreateView(PostPage.java:125)
at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2698)
at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:320)
at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1187)
at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1356)
at androidx.fragment.app.FragmentManager.moveFragmentToExpectedState(FragmentManager.java:1434)
at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1497)
at androidx.fragment.app.BackStackRecord.executeOps(BackStackRecord.java:447)
at androidx.fragment.app.FragmentManager.executeOps(FragmentManager.java:2169)
at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1992)
at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1947)
at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1849)
at androidx.fragment.```
Sentry Issue: SCRANPLAN-9G
NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference
at com.group4sweng.scranplan.RecipeInfo.RecipeReviewFragment$1.onComplete(RecipeReviewFragment.java:139)
...
(4 additional frame(s) were not displayed)
Sentry Issue: SCRANPLAN-2Z
IllegalArgumentException: Could not serialize object. Exceeded maximum depth of 500, which likely indicates there's an object cycle (found in field '[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].user.mealPlanner.[0].ingredientList.[0]')
at com.group4sweng.scranplan.MealPlanner.PlannerFragment.updateMealPlan(PlannerFragment.java:253)
at com.group4sweng.scranplan.MealPlanner.PlannerFragment.onActivityResult(PlannerFragment.java:226)
at com.group4sweng.scranplan.RecipeFragment.onActivityResult(RecipeFragment.java:600)
at com.group4sweng.scranplan.RecipeInfo.RecipeInfoFragment$2.onClick(RecipeInfoFragment.java:145)
...
(245 additional frame(s) were not displayed)
Change Profile Settings - Load bar stays on 0% forever when attempting to upload a profile photo, when changing picture while loading bar present - causes loading bar to go but new settings can no longer be saved.
Crashes on the following line at the 'reheat' instructions.
(Line 589, RecipeFragment.class.)
Crash report:
![image](https://user-images.githubusercontent.com/46009144/77852625-8b779a00-71d7-11ea-9186-f25cfbe26f5c.png)
Best estimate of whats going on is it needs to check for if the user is within the mealplanner screen or not. Best done by extending the current class to include the meaplanner stuff. This hasn't yet been done so the checks I think are failing
Sometimes when leaving a rating on a recipe, the overallRating will either become NaN or go above 5. Not sure what is happening.
When pressing the skip button on first register the user goes to the MainActivity.java page and hangs at the scranplan logo.
Think this is some issue to do with what happened when we moved the MainActivity and Home classes around.
Going to edit profile, clicking to add photo, then trying to save the photo fails.
Fairly self explanitory. From the recipe info screen unable to visit a chefs profile.
It would probably also make sense to make the actual chefs name clickable as well just incase.
Titles self explanitory.
When saving profile settings and returning from the activity new recipes are not generated based on the users preferences. Not sure how to fix this. Might need some help with this one.
Add functionality to search by user and display the public profile of user(s).
Throws an exception on any device running lower than Android PI due to the material components elements added (it's basically the tab bar in the public profile). Android Pi only has a %39.4 support so switching to the standard way of adding tabs in, default Android libraries is required unless an alternative can be found or a kind of workaround.
See latest comment.
To replicate:
The following still applies. But it does seem to work with android 5.
Process: com.group4sweng.scranplan, PID: 4041
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.group4sweng.scranplan/com.group4sweng.scranplan.PublicProfile}: android.view.InflateException: Binary XML file line #379: Error inflating class com.google.android.material.tabs.TabItem
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
at android.app.ActivityThread.access$800(ActivityThread.java:144)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
Caused by: android.view.InflateException: Binary XML file line #379: Error inflating class com.google.android.material.tabs.TabItem
at android.view.LayoutInflater.createView(LayoutInflater.java:633)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:743)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:806)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:809)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:809)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:809)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:809)
at android.view.LayoutInflater.inflate(LayoutInflater.java:504)
at android.view.LayoutInflater.inflate(LayoutInflater.java:414)
at android.view.LayoutInflater.inflate(LayoutInflater.java:365)
at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:555)
at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:161)
at com.group4sweng.scranplan.PublicProfile.onCreate(PublicProfile.java:104)
at android.app.Activity.performCreate(Activity.java:5937)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
at android.app.ActivityThread.access$800(ActivityThread.java:144)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Constructor.newInstance(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:288)
at android.view.LayoutInflater.createView(LayoutInflater.java:607)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:743)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:806)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:809)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:809)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:809)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:809)
at android.view.LayoutInflater.inflate(LayoutInflater.java:504)
at android.view.LayoutInflater.inflate(LayoutInflater.java:414)
at android.view.LayoutInflater.inflate(LayoutInflater.java:365)
at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:555)
at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:161)
at com.group4sweng.scranplan.PublicProfile.onCreate(PublicProfile.java:104)
at android.app.Activity.performCreate(Activity.java:5937)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
at android.app.ActivityThread.access$800(ActivityThread.java:144)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
Caused by: android.content.res.Resources$NotFoundException: Resource ID #0x7f0800f3
at android.content.res.Resources.getValue(Resources.java:1233)
at androidx.appcompat.widget.ResourceManagerInternal.loadDrawableFromDelegates(ResourceManagerInternal.java:252)
at androidx.appcompat.widget.ResourceManagerInternal.getDrawable(ResourceManagerInternal.java:139)
at androidx.appcompat.widget.ResourceManagerInternal.getDrawable(ResourceManagerInternal.java:132)
at androidx.appcompat.content.res.AppCompatResources.getDrawable(AppCompatResources.java:104)
at androidx.appcompat.widget.TintTypedArray.getDrawable(TintTypedArray.java:76)
at com.google.android.material.tabs.TabItem.<init>(TabItem.java:57)```
The main recipe screen updates properly but you can only update the MealPlanner upon logging out and back in again. I'm pretty sure this is because the userInfoPrivate object containing all local profile info isn't being passed upon switching tabs to the MealPlanner.
With a bit of debugging you could confirm if this is true or not quite easily.
Given i've been working with the Mealplanner I might be able to figure out how to fix this but this is more James Cs thing to fix I think.
When changing the filters when searching for a recipe these filter settings are saved when moving between the mealplanner, timeline, and recipes fragments but reset after visiting the profile settings or public profile page.
This is kind of confusing. Need a way of storing the filters search preferences within app. Shared preferences would work.
Definitely not a big issue and can be resolved in time or not at all if we are running low on time.
Basically need to sync the 2. IE, if a privacy setting is enabled on public update on friends and equivalently if updated on private to off then do the same to public.
Can do it but i'd rarther leave this here for the moment and get the branch done without it because it's taking a hell of a lot longer than expected.
Will have to push the minimum supported SDK version to 21 (Lollipop).
KitKat has a lot of weird quirks that isn't allowing it to work for multiple different reasons.
for e.g. switches take on this weird style that means they don't fit within a view and for some reason it fails to load the recipe screens for recipes causing a crash.
The next version up, lollipop only has the search query layout issue which we can fix.
All the other issues don't exist for this version.
With this version we are still supporting 94.1% of available devices.
If we have to move up another version because of more issues then Marshmallow would be our best bet but it starts getting rocky there with only 85% support.
Initially in #53, but this is for the layout issues @profjb58 found.
Happens when trying to load the recipe fragment for different recipes from the home screen.
Start of the error
I/art: Alloc sticky concurrent mark sweep GC freed 15774(781KB) AllocSpace objects, 3(48KB) LOS objects, 8% free, 85MB/93MB, paused 1.220ms total 21.453ms I/art: Clamp target GC heap from 101MB to 96MB Alloc partial concurrent mark sweep GC freed 2615(129KB) AllocSpace objects, 1(16KB) LOS objects, 11% free, 85MB/96MB, paused 1.007ms total 62.957ms I/art: Clamp target GC heap from 101MB to 96MB Alloc concurrent mark sweep GC freed 519(45KB) AllocSpace objects, 0(0B) LOS objects, 11% free, 85MB/96MB, paused 1.007ms total 73.486ms Forcing collection of SoftReferences for 12MB allocation I/art: Clamp target GC heap from 101MB to 96MB Alloc concurrent mark sweep GC freed 15(456B) AllocSpace objects, 0(0B) LOS objects, 11% free, 85MB/96MB, paused 1.068ms total 72.570ms E/art: Throwing OutOfMemoryError "Failed to allocate a 12635196 byte allocation with 11297172 free bytes and 10MB until OOM" I/art: Alloc sticky concurrent mark sweep GC freed 5(672B) AllocSpace objects, 0(0B) LOS objects, 8% free, 85MB/93MB, paused 1.007ms total 7.324ms I/art: Clamp target GC heap from 101MB to 96MB Alloc partial concurrent mark sweep GC freed 6(192B) AllocSpace objects, 0(0B) LOS objects, 11% free, 85MB/96MB, paused 1.037ms total 62.988ms I/art: Clamp target GC heap from 101MB to 96MB Alloc concurrent mark sweep GC freed 3(96B) AllocSpace objects, 0(0B) LOS objects, 11% free, 85MB/96MB, paused 1.007ms total 72.021ms Forcing collection of SoftReferences for 12MB allocation I/art: Clamp target GC heap from 101MB to 96MB Alloc concurrent mark sweep GC freed 3(96B) AllocSpace objects, 0(0B) LOS objects, 11% free, 85MB/96MB, paused 976us total 72.326ms E/art: Throwing OutOfMemoryError "Failed to allocate a 12635196 byte allocation with 11297076 free bytes and 10MB until OOM" D/skia: --- allocation failed for scaled bitmap D/AndroidRuntime: Shutting down VM E/art: li.han, Prepare to dump hprof for OOM Error ! li.han, Directory [/data/log] could not be write !
End of error
E/AndroidRuntime: FATAL EXCEPTION: main Process: com.group4sweng.scranplan, PID: 18270 java.lang.OutOfMemoryError: Failed to allocate a 12635196 byte allocation with 11297076 free bytes and 10MB until OOM at dalvik.system.VMRuntime.newNonMovableArray(Native Method) at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method) at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:837) at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:656) at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:1037) at android.content.res.Resources.loadDrawableForCookie(Resources.java:4056) at android.content.res.Resources.loadDrawable(Resources.java:3929) at android.content.res.Resources.getDrawable(Resources.java:1991) at android.content.res.Resources.getDrawable(Resources.java:1973) at android.content.Context.getDrawable(Context.java:409) at androidx.core.content.ContextCompat.getDrawable(ContextCompat.java:454) at androidx.appcompat.widget.ResourceManagerInternal.getDrawable(ResourceManagerInternal.java:144) at androidx.appcompat.widget.ResourceManagerInternal.getDrawable(ResourceManagerInternal.java:132) at androidx.appcompat.content.res.AppCompatResources.getDrawable(AppCompatResources.java:104) at androidx.appcompat.widget.AppCompatImageHelper.loadFromAttributes(AppCompatImageHelper.java:59) at androidx.appcompat.widget.AppCompatImageView.<init>(AppCompatImageView.java:78) at androidx.appcompat.widget.AppCompatImageView.<init>(AppCompatImageView.java:68) at androidx.appcompat.app.AppCompatViewInflater.createImageView(AppCompatViewInflater.java:187) at androidx.appcompat.app.AppCompatViewInflater.createView(AppCompatViewInflater.java:107) at androidx.appcompat.app.AppCompatDelegateImpl.createView(AppCompatDelegateImpl.java:1407) at androidx.appcompat.app.AppCompatDelegateImpl.onCreateView(AppCompatDelegateImpl.java:1457) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:732) at android.view.LayoutInflater.rInflate(LayoutInflater.java:813) at android.view.LayoutInflater.rInflate(LayoutInflater.java:821) at android.view.LayoutInflater.inflate(LayoutInflater.java:511) at android.view.LayoutInflater.inflate(LayoutInflater.java:415) at android.view.LayoutInflater.inflate(LayoutInflater.java:366) at com.group4sweng.scranplan.RecipeInfo.RecipeInfoFragment.onCreateView(RecipeInfoFragment.java:116) at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2698) at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:320) at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1187) at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1356) at androidx.fragment.app.FragmentManager.moveFragmentToExpectedState(FragmentManager.java:1434) at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1497) at androidx.fragment.app.BackStackRecord.executeOps(BackStackRecord.java:447) at androidx.fragment.app.FragmentManager.executeOps(FragmentManager.java:2169) at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1992) at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1947) at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1849) at androidx.fragment.app.FragmentManager$4.run(FragmentManager.java:413) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:145) at android.app.ActivityThread.main(ActivityThread.java:6934) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)
Deleting posts with photos close to the 4mb limit took up to about 10 seconds to delete on occasion on an actual testing device. Using the same loading screen when deleting a post might be an idea.
No gif/video, on an actual device with no screen capture available.
If a chef's account is deleted (or in the future if a recipe is removed from an account) the recipe info fragment crashes when attempting to display the chefs name.
Need a simple handler to display a '[deleted]' string or something similar to avoid this.
E/AndroidRuntime: FATAL EXCEPTION: main Process: com.group4sweng.scranplan, PID: 9155 java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.Object java.util.Map.get(java.lang.Object)' on a null object reference at com.group4sweng.scranplan.RecipeInfo.RecipeInfoFragment$6$1.onComplete(RecipeInfoFragment.java:432) at com.google.android.gms.tasks.zzj.run(Unknown Source:4) at android.os.Handler.handleCallback(Handler.java:883) at android.os.Handler.dispatchMessage(Handler.java:100) at android.os.Looper.loop(Looper.java:237) at android.app.ActivityThread.main(ActivityThread.java:7777) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1047)
When making items your favourite, they don't work from the meal planner. Work fine form the recipe screen.
Go into meal planner and try and favourite an item after adding it to your meal plan.
How to reproduce:
Search results will fail consistently afterwards as well regardless.
This was previously thought to be an issue with Algolia but dosen't seem to be. It's a very well hidden issue which is why it's took a while to figure out.
In descending order...
Apologies for not outlining these initially before merge, they where quite hard to find and involved making 2 accounts.
There are other issues as well currently in master but i've resolved them with the 'bug+design fixes' branch. Might be worth doing some pair programming to fix this. Certainly could speed things up a bit or if yer short for time I could have a stab.
Process: com.group4sweng.scranplan, PID: 22436
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Class java.lang.Object.getClass()' on a null object reference
at com.group4sweng.scranplan.PublicProfile$4.onTabSelected(PublicProfile.java:302)
at com.google.android.material.tabs.TabLayout.dispatchTabSelected(TabLayout.java:1734)
at com.google.android.material.tabs.TabLayout.selectTab(TabLayout.java:1727)
at com.google.android.material.tabs.TabLayout.selectTab(TabLayout.java:1687)
at com.google.android.material.tabs.TabLayout$Tab.select(TabLayout.java:2080)
at com.google.android.material.tabs.TabLayout$TabView.performClick(TabLayout.java:2269)
at android.view.View.performClickInternal(View.java:7102)
at android.view.View.access$3500(View.java:801)
at android.view.View$PerformClick.run(View.java:27336)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7356)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)```
I have decided to merge #131 but we have failing tests for the other user stories, this issue is to remind me to resolve them so we have 100% test success rate.
From what I have tried before...
layout.setVisibility(View.GONE);
dosen't work for relative layouts so the only way I can think of fixing this is to convert to a constraint layout. If y'all have a workaround go for it though.
Mainly pointing this issue to @Jimb0nda since he designed the recipe info screen.
Also tagged @louisifn because he mentioned the View.GONE thing before & @jamesclawley knows a lot more about relative layouts.
The unique username tick button dosen't always update to a cross when entering a username that has already been taken and the prompt (toast message) returned when choosing a username already taken is not correct.
Get permissions for 'getSize()' method from the following gist: https://gist.github.com/VassilisPallas/b88fb701c55cdace0c420356ee7c1464
Used within the static ImageHelpers package.
Already sent an email out... More for my own reference.
It is a public gist so it should be fine but just need to check.
Searching is failing from meal planner screen - working on bug fix now
Timer appears on the first slide of the presentation. #55 was approved due to this bug being non-fatal and documentation updated.
How to reproduce
Rotating the screen on the main recipe page causes the app to crash.
There are a number of issues presented when rotating the screen. For e.g. there technically 2 different views so you have to pass info between them otherwise the following can happen.
We can just fix this by forcing the recipe screen so it can't be displayed in landscape within the android manifests file. I did do this before but it got removed for some reason.
I'm assuming because we wanted it to be displayed in landscape, but tbf it looks pretty bad in landscape atm so it would need to be re-designed as well for that orientation.
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.group4sweng.scranplan, PID: 31088
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.group4sweng.scranplan/com.group4sweng.scranplan.Home}: androidx.fragment.app.Fragment$InstantiationException: Unable to instantiate fragment com.group4sweng.scranplan.RecipeFragment: could not find Fragment constructor
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3121)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3264)
at android.app.ActivityThread.handleRelaunchActivityInner(ActivityThread.java:5046)
at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:4955)
at android.app.servertransaction.ActivityRelaunchItem.execute(ActivityRelaunchItem.java:69)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1955)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7078)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:964)
Caused by: androidx.fragment.app.Fragment$InstantiationException: Unable to instantiate fragment com.group4sweng.scranplan.RecipeFragment: could not find Fragment constructor
at androidx.fragment.app.Fragment.instantiate(Fragment.java:563)
at androidx.fragment.app.FragmentContainer.instantiate(FragmentContainer.java:57)
at androidx.fragment.app.FragmentManager$3.instantiate(FragmentManager.java:390)
at androidx.fragment.app.FragmentStateManager.<init>(FragmentStateManager.java:74)
at androidx.fragment.app.FragmentManager.restoreSaveState(FragmentManager.java:2454)
at androidx.fragment.app.FragmentController.restoreSaveState(FragmentController.java:196)
at androidx.fragment.app.FragmentActivity.onCreate(FragmentActivity.java:287)
at androidx.appcompat.app.AppCompatActivity.onCreate(AppCompatActivity.java:106)
at com.group4sweng.scranplan.Home.onCreate(Home.java:104)
at android.app.Activity.performCreate(Activity.java:7327)
at android.app.Activity.performCreate(Activity.java:7318)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1275)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3101)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3264)
at android.app.ActivityThread.handleRelaunchActivityInner(ActivityThread.java:5046)
at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:4955)
at android.app.servertransaction.ActivityRelaunchItem.execute(ActivityRelaunchItem.java:69)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1955)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7078)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:964)
Caused by: java.lang.NoSuchMethodException: com.group4sweng.scranplan.RecipeFragment.<init> []
at java.lang.Class.getConstructor0(Class.java:2328)
at java.lang.Class.getConstructor(Class.java:1725)
at androidx.fragment.app.Fragment.instantiate(Fragment.java:548)
at androidx.fragment.app.FragmentContainer.instantiate(FragmentContainer.java:57)
at androidx.fragment.app.FragmentManager$3.instantiate(FragmentManager.java:390)
at androidx.fragment.app.FragmentStateManager.<init>(FragmentStateManager.java:74)
at androidx.fragment.app.FragmentManager.restoreSaveState(FragmentManager.java:2454)
at androidx.fragment.app.FragmentController.restoreSaveState(FragmentController.java:196)
at androidx.fragment.app.FragmentActivity.onCreate(FragmentActivity.java:287)
at androidx.appcompat.app.AppCompatActivity.onCreate(AppCompatActivity.java:106)
at com.group4sweng.scranplan.Home.onCreate(Home.java:104)
at android.app.Activity.performCreate(Activity.java:7327)
at android.app.Activity.performCreate(Activity.java:7318)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1275)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3101)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3264)
at android.app.ActivityThread.handleRelaunchActivityInner(ActivityThread.java:5046)
at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:4955)
at android.app.servertransaction.ActivityRelaunchItem.execute(ActivityRelaunchItem.java:69)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1955)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7078)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:964) ```
How to replicate
Assuming something in the more recent branches has broken this functionality.
Filters also shouldn't ever effect the ability to search for a chef.
Sentry Issue: SCRANPLAN-G6
IllegalStateException: Fragment RecipeFragment{d123cb1} (49ff028b-d1c0-4e63-ad5e-a99d50ac1868)} not attached to a context.
at com.group4sweng.scranplan.SearchFunctions.RecipeFragment.loadNativeAds(RecipeFragment.java:756)
at com.group4sweng.scranplan.SearchFunctions.RecipeFragment.access$200(RecipeFragment.java:57)
at com.group4sweng.scranplan.SearchFunctions.RecipeFragment$5.onComplete(RecipeFragment.java:453)
...
(9 additional frame(s) were not displayed)
Countdown timer is throwing an error from within the PresentationTextView class.
This isn't the same countdown timer i've just finished (the audio one).
I think the jist of the error is it dosen't exist.
I think James Clawley and Nathan mainly worked on the presentation so just tagging u guys.
at com.group4sweng.scranplan.Presentation.Views.PresentationTextView.stopTimers(PresentationTextView.java:169)
W/System.err: at com.group4sweng.scranplan.Presentation.PresentationSlide.hide(PresentationSlide.java:49)
at com.group4sweng.scranplan.Presentation.Presentation.toSlide(Presentation.java:410)
at com.group4sweng.scranplan.Presentation.Presentation.access$000(Presentation.java:70)
at com.group4sweng.scranplan.Presentation.Presentation$2.onItemSelected(Presentation.java:269)
at android.widget.AdapterView.fireOnSelected(AdapterView.java:957)
at android.widget.AdapterView.dispatchOnItemSelected(AdapterView.java:946)
at android.widget.AdapterView.access$300(AdapterView.java:55)
at android.widget.AdapterView$SelectionNotifier.run(AdapterView.java:910)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7356)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)```
When adding a recipe to favourites it would make sense for the star at the top to change colour or fill in. Currently it just sends a toast message.
How to replicate.
Just needs an extra check in the Login class to make sure when registering the email dosen't already exist in the Firebase Database.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.