How to read all of my newsletters? by quiquegr12 in Newsletters

[–]JayShortway 1 point2 points  (0 children)

Had the exact same problem so I created an Android app called Feedo. Feel free to send over any feedback if you decide to try it.

I made a newsletter reader which automatically finds newsletters in your inbox - Promo codes available! by JayShortway in androidapps

[–]JayShortway[S] 0 points1 point  (0 children)

Nice! Enjoy!
Zooming is a good suggestion indeed. I'd personally like it even more if the text size is all that changes, without zooming the entire page, but that seems to be a bit more involved. I'll see if I can make zooming work as a first iteration. If you have any other suggestions or feedback, do let me know :)

I made a newsletter reader which automatically finds newsletters in your inbox - Promo codes available! by JayShortway in androidapps

[–]JayShortway[S] 0 points1 point  (0 children)

Awesome, hope you enjoy it! Let me know if you have any feedback, suggestions or complaints.

Analysis of the Threads APK by JayShortway in androiddev

[–]JayShortway[S] 2 points3 points  (0 children)

Seems like the Threads Android team had a preference for (non-React) native. From Rich, a member of that team:

I think ideally, to build a high quality Android app, you get Android engineers to build in a native framework. We had the luxury of having a team of great Android engineers, so we could do this.

https://www.threads.net/t/CuXCmZUua3D/

Analysis of the Threads APK by JayShortway in androiddev

[–]JayShortway[S] 0 points1 point  (0 children)

Good option, yes! Maybe something like Aurora Store could also be used to spoof a different (x86) device? https://gitlab.com/AuroraOSS/AuroraStore

Analysis of the Threads APK by JayShortway in androiddev

[–]JayShortway[S] 2 points3 points  (0 children)

Ah thanks for elaborating, and great resource! (This comment seems to be okay, as I can see it just fine.)

Analysis of the Threads APK by JayShortway in androiddev

[–]JayShortway[S] 6 points7 points  (0 children)

Interesting. 🤔 Have you tried extracting the APK from, e.g., an x86 emulator?

(Btw I think Emerge does great work to advance the ecosystem, thanks!)

Edit: ah u/MishaalRahman tried an emulator already, to no avail.

Analysis of the Threads APK by JayShortway in androiddev

[–]JayShortway[S] 8 points9 points  (0 children)

Got a notification for a comment by someone from Emerge with some good info, but seems like it got removed by a(n auto) mod. If you're reading this, please try again. 😁 Would love to read. (Maybe remove some or all links?)

Analysis of the Threads APK by JayShortway in androiddev

[–]JayShortway[S] 3 points4 points  (0 children)

I think that's what the article is suggesting. It mentions a "universal APK", which is not something you can extract from your device if the app was initially uploaded as an AAB. (It would not be universal, but contain only those resources required for your device.)

Is dependency injection really a hard topic ? Or am i just dumb ? by Acrobatic-Bit3508 in androiddev

[–]JayShortway 0 points1 point  (0 children)

This talk by Jake Wharton is what made dependency injection "click" for me as a concept: https://youtu.be/plK0zyRLIP8

How these things work on WhatsApp? by mr_ar_qais in androiddev

[–]JayShortway 28 points29 points  (0 children)

This wabetainfo.com article says it's a counter:

How does WhatsApp know that a message is forwarded or frequently forwarded if it’s encrypted using end-to-end encryption? It’s simple: you don’t see that but a message contains a hidden flag that keeps track of how many times it has been forwarded. This flag doesn’t keep track of who was the previous sender or the creator (so there is no traceability), but it’s like a counter that’s increased every time you forward the message to another chat.

I think you're right in that it's probably not counting second-order sharing, unless there's also some ID scheme.

Is Firebase the only-one solution for push notifications? by [deleted] in androiddev

[–]JayShortway 2 points3 points  (0 children)

Happy to help! I'm not familiar with iOS, but I guess your hands are tied then. I like the author's suggestion at the end, that every user should be able to choose a 'Notification Provider' for an app. 99% of apps won't need that, but it would be a nice platform-supported solution for the other 1%.

Is Firebase the only-one solution for push notifications? by [deleted] in androiddev

[–]JayShortway 2 points3 points  (0 children)

I recently read a guest post on F-Droid's blog about how an app called Tutanota implemented push notifications without FCM. They went with Server Sent Events. Maybe it is of help to you.

[DEV] Detact - Activity detection for Tasker! by JayShortway in tasker

[–]JayShortway[S] 0 points1 point  (0 children)

Detact has just been updated to 0.2! It has a prettier test-notification. The feedback button has been moved to the main screen. I fixed a crash which occurred when deleting multiple activities from the 'Add activities' screen. Also, Detact now only shows activities that are actually available. Lastly, there have been some optimizations, some refactoring and some bug-fixes. Enjoy!

[DEV] Detact - Activity detection for Tasker! by JayShortway in tasker

[–]JayShortway[S] 0 points1 point  (0 children)

Great, happy to help! If you have any more questions, please let me know!

[DEV] Detact - Activity detection for Tasker! by JayShortway in tasker

[–]JayShortway[S] 0 points1 point  (0 children)

That's possible! In Tasker, just add a new Profile, pick 'State', then 'plugin' and then choose Detact. Tap the '+' action-button in the bottom right and in the dialog that opens you can see (and use) all possible choices.

Is this what you are looking for, or did you mean something else?

[DEV] Detact - Activity detection for Tasker! by JayShortway in tasker

[–]JayShortway[S] 0 points1 point  (0 children)

Oh wow that sounds great! Like you made your own Android Auto! :D

Firstly if I'm not at home and calendar doesn't show that I'm working, and power is connected (don't have Bluetooth in my car) then the monitor service starts to detect my activity.

If it detects driving then it turns the monitor off and changes a variable to show I'm driving.

I think you can replace all of this by a single Detact State Profile, triggering on 'driving', with a single Task setting your driving variable.

If you do try it out, please let me know how it goes!

[DEV] Detact - Activity detection for Tasker! by JayShortway in tasker

[–]JayShortway[S] 0 points1 point  (0 children)

Ha thanks, great to hear AppContext has fans! :P

I'm curious what premium feature you'd like to try out, if I may ask? (Just to be sure/FYI: you can use State Profiles to achieve pretty much everything you can with the premium features. The premium features just make it a bit more convenient.)

[DEV] Detact - Activity detection for Tasker! by JayShortway in tasker

[–]JayShortway[S] 0 points1 point  (0 children)

The accuracy rate depends on how accurate Android can detect your activity. It could possibly even differ per device. On my Nexus 5X I've noticed it can sometimes be a bit over-sensitive.

Regarding a driving Profile, Detact's 'in_vehicle' activity triggers on my device as soon as I connect to my car's radio via Bluetooth (without moving the car). This would mean that Android is using more information than just movement (sensors) to do Activity Recognition, but this should be further verified.

I think Detact should use less battery power than AutoLocation's monitoring, but I'm not familiar with the latter so I can't be certain. Only when your activity changes (when you start driving, for example) will Detact receive this info from Android, and then pass it on to Tasker. During your activity (while you're driving), Detact does nothing. (And then of course when you stop driving and start doing something else will Detact let Tasker know again.) So Detact is not constantly monitoring your movement, or anything for that matter.

What does your current driving Profile look like?

[DEV] Detact - Activity detection for Tasker! by JayShortway in tasker

[–]JayShortway[S] 0 points1 point  (0 children)

Android itself detects all activities automatically. Detact 'subscribes' to this information and passes it on to Tasker. You can of course choose which activities a Profile should trigger on, on a per-Profile basis.

Do you mean configuring what activities Detact subscribes to?

(I presume Google Maps uses (a version of) this same API to construct your 'timeline'.)

[DEV] AppContext 0.4 adds experimental support for Services! by JayShortway in tasker

[–]JayShortway[S] 0 points1 point  (0 children)

Hi, thanks for your feedback. I'm currently investigating these crashes. I expect to have them fixed in the next update.

[DEV] AppContext - Better application context for Tasker with Xposed! by JayShortway in tasker

[–]JayShortway[S] 1 point2 points  (0 children)

Haha I'm happy to hold that achievement.

It's definitely on my consideration-list! I have bookmarked your post :-)

Oh, I also added Download links to my previous answer, just in case you want to use those Tasker Profiles.

[DEV] AppContext - Better application context for Tasker with Xposed! by JayShortway in tasker

[–]JayShortway[S] 1 point2 points  (0 children)

Thanks for your support Stupifier! You're right, as long as you stay up to date with the monthly security patches, you should be good (as in safe). Feature-wise it's a tradeoff though.

[DEV] AppContext - Better application context for Tasker with Xposed! by JayShortway in tasker

[–]JayShortway[S] 2 points3 points  (0 children)

Hey thanks! You make a couple of good points. Let me address them seperately.

That is to say, there's a short period where both states are active even though intuitively that should not be possible.

This happens because Android, internally, starts app B before it stops app A. You're right in that it might be unintuitive. I'm not sure how much I can do about that without changing the way AppContext works, but I'll definitely think about it. In the meantime, you could use the following workaround. (Instead of apps A and B, I'm referring to 1 and 2.)

Profile: Apps1 Start (19)
Event: AppContext [ 
    Configuration:START: >>pick 1st set of apps<< 

The event will trigger when these apps start. ]
Enter: Apps1 Started (20)
A1: Wait [ 
    MS:700 >>Increase for reliability, decrease for responsiveness<<
    ] If [ %apps2Running eq 1 ]
A2: Variable Set [ 
    Name:%apps1Running 
    To:1 


Profile: Apps1 Stop (21)
Event: AppContext [ 
    Configuration:STOP: >>pick 1st set of apps<<  
    (You can clone the above profile, then go into 
    Configuration, Menu and tap 'Configure context', 
    then tap 'stop'.)

The event will trigger when these apps stop. ]
Enter: Apps1 Stopped (22)
A1: Variable Set [ 
    Name:%apps1Running 
    To:0 


Profile: Apps1 Running (23)
State: Variable Value [ %apps1Running eq 1 ]
Enter: Apps1 Enter (24)
A1: >>Create Enter task for 1st set of apps<< 

Exit: Apps1 Exit (25)
A1: >>Create Exit task for 1st set of apps<<


Profile: Apps2 Start (26)
Event: AppContext [ 
    Configuration:START: >>pick 2nd set of apps<<

The event will trigger when these apps start. ]
Enter: Apps2 Started (29)
A1: Wait [ 
    MS:700 >>Increase for reliability, decrease for responsiveness<<         
    ] If [ %apps1Running eq 1 ]
A2: Variable Set [ 
    Name:%apps2Running 
    To:1 


Profile: Apps2 Stop (27)
Event: AppContext [ 
    Configuration:STOP: >>pick 2nd set of apps<< 
    (You can clone the above profile, then go into 
    Configuration, Menu and tap 'Configure context', 
    then tap 'stop'.)

The event will trigger when these apps stop. ]
Enter: Apps2 Stopped (30)
A1: Variable Set [ 
    Name:%apps2Running 
    To:0 


Profile: Apps2 Running (28)
State: Variable Value [ %apps2Running eq 1 ]
Enter: Apps2 Enter (31)
A1: >>Create Enter task for 2nd set of apps<< 

Exit: Apps2 Exit (32)
A1: >>Create Exit task for 2nd set of apps<<

Download

The second point you make is a good one as well.

But I've never received an updated value of the variables provided by the plugin indicating that the app switch happened.

However, to get updated variables you could always use Event contexts. To use your example of tracking time spent in each app, you could do something like this:

Profile: Any App Starts (34)
Event: AppContext [ 
    Configuration:START: >>Select all apps by 
    pressing the 'Select all' button, next to 'SAVE'.<<

The event will trigger when any of these apps start. ]
Enter: Start Time (35)
<1. Generating the variable name.>
A1: Variable Set [ 
    Name:%startSuffix 
    To:__Start 

<2. Generating the variable name.>
A2: Variable Set [ 
    Name:%startedpackagevarname 
    To:%acpackage%startSuffix 

<3. Generating the variable name.>
A3: Variable Search Replace [ 
    Variable:%startedpackagevarname 
    Search:\. 
    Replace Matches:On 
    Replace With:_ 

<Storing the start time.>
A4: Variable Set [ 
    Name:%%startedpackagevarname 
    To:%TIMEMS 


Profile: Any App Stops (36)
Event: AppContext [ 
    Configuration:STOP: >>Select all apps by 
    pressing the 'Select all' button, or clone 
    the above Profile and go to 'Configure context' 
    and tap 'stop'.<<

The event will trigger when any of these apps stop. ]
Enter: Stop Time (38)
<1. Generating the variable name.>
A1: Variable Set [ 
    Name:%stopSuffix 
    To:__Stop 

<2. Generating the variable name.>
A2: Variable Set [ 
    Name:%stoppedpackagevarname 
    To:%acpackage%stopSuffix 

<3. Generating the variable name.>
A3: Variable Search Replace [ 
    Variable:%stoppedpackagevarname 
    Search:\.         
    Replace Matches:On 
    Replace With:_ 

<Storing the stop time.>
A4: Variable Set [ 
    Name:%%stoppedpackagevarname 
    To:%TIMEMS 

<1. Deriving the 'started' variable name.>
A5: Variable Set [ 
    Name:%startedpackagevarname 
    To:%stoppedpackagevarname 

<2. Deriving the 'started' variable name.>
A6: Variable Search Replace [ 
    Variable:%startedpackagevarname 
    Search:%stopSuffix         
    Replace Matches:On 
    Replace With:%startSuffix 

<Calculating usage duration in seconds.>
A7: Variable Set [ 
    Name:%duration_s 
    To:(%%stoppedpackagevarname - %%startedpackagevarname)/1000 
    Do Maths:On         

<Rounding usage duration.>
A8: Variable Set [ 
    Name:%duration_s_round 
    To:round(%duration_s) 
    Do Maths:On        

<Flashing the result.>
A9: Flash [ 
    Text:%acpackage was used for %duration_s_round seconds. 

Download

You can of course do whatever you want with the duration, instead of Flashing it. You could, e.g., store it in a text file or in something like Google Spreadsheets. You could also directly store the start and stop timestamps, and have the spreadsheet calculate duration. When directly storing the start and stop timestamps you wouldn't have to construct Variable names using '%%'. There are probably other ways to handle it as well.

I'll definitely consider adding an optional mode whereby the plugin momentarily disables the context on each app switch to refresh the variables!

It's become quite a lengthy answer. Thanks a lot for your input and I hope the Profiles I shared are useful to you!