• After 15+ years, we've made a big change: Android Forums is now Early Bird Club. Learn more here.

Root Amon_RA 1.6.2 Custom Recovery: trackball not required!

Hi roscuthiii, long time no read!

I'll let scary alien answer the question you posed - I probably could do it but I would have to go back and reread everything scary posted first.

FWIW, the entire trackball assembly can be easily replaced. Recently I tried repairing a digitizer on a broken Eris, and was surprised to discover that the trackball assembly has no electronics at all: it has 4 little rollers on each corner which hover over 4 corresponding sensors on the motherboard. I'm not 100 percent sure what the mechanism is, but I suspect the sensors are magnetic sensors (not optical).

Anyhow, the trackball assembly just sits in a little cavity above the motherboard and will fall out in one piece if you disassemble the phone. ( Just follow the online youtube instructions for disassembling as if you were going to repair the digitizer, but of course don't actually muck with the screen.)

If I had to hazard a guess, and I will - I'd bet that 99 percent of trackball failures are due to gumming up of the trackball assembly with finger jam or toe jam. Once you have the trackball assembly out of the phone, you could soak the whole trackball assembly in rubbing alcohol (for instance). Just make sure it is thoroughly dried out before you reassemble the phone.

Or you could swap 1 in from a "parts" phone, but it is probably worth while to try the cleaning method first.


cheers and happy travels,

eu1
 
  • Like
Reactions: roscuthiii
Upvote 0
Basically, just what I have running for now, GSB and the original Amon_Ra... figured if I made hers a clone of mine I could take some chances I wouldn't normally take. But, I tend to proceed with caution.

Guess I could always just take a shot with the script... it's not like it'll cause Global Themal Nuclear War if it's not compatible right? (fingers crossed)

In retrospect... I could have saved myself a heap of time if I'd just put the trackball optional recovery on hers from the get go. New work schedule - sleep deprived.

Since you've got GSB, you'll need to be aware that there's no native "mkdir" command provided in the shell that GSB implements, so you'll need to tweak the script to prefix the "mkdir" reference with a busybox invocation (i.e., "mkdir" becomes "busybox mkdir" in order for the script to work.

Just search for "GSB" in the first post and you'll see the references to this issue and work-around.

Gscript is really pretty simple, so you might actually spend more time trying to get the scripts to work under Script Manager, LOL.

Lemme know if you have any questions or issues... I'll be around...(might be in and out, but I'll be back on this evening, too).

Cheers!
 
  • Like
Reactions: roscuthiii
Upvote 0
Hey, eu1, did you ever see this thread over at XDA?:

Trackball Transplant - xda-developers

It would help roscuthiii (or anyone else) since its got pics and everything and re-enforces your post, too.

Cheers!

No, I'll take a look - thanks.

I've never actually had any trackball problems, but inspection of the trackball assembly when I had an Eris apart seems like it is unlikely to be damaged by soaking it for a couple minutes in rubbing alcohol - afterward you can roll it around on a piece of paper, or spin the ball in four directions to see if each of the little "rollers" in each corner are turning as they should. That would allow you to (perhaps) repair a wonky trackball without ordering parts or buying a "for parts" Eris off of eBay. The only specialized tool that is really needed is a Torx screwdriver, size T5. (The case opener tool can be replaced with any thin, stiff piece of plastic - one of the vids on YouTube a guy is using a guitar pick).


But, back on topic - How about a "Scenario 6" to replace some of the portability complications of "Scenario 3"?

You could work on this in your copious spare time :D

Basic idea: drop a signed zip file (via a root-privileged script w/ GscriptLite or other script-launcher) into /cache, and then drop a command file ( /cache/recovery/command ) which has a single line for Amon_RA to execute. (See this XDA post).

Then, do a "reboot recovery" from within GscriptLite.

The only "portability issues" from (rooted) ROM to ROM would be whether or not the /system/bin/reboot (or /system/xbin/reboot) honors the command-line argument "recovery".

As for creating the signed .zip file, you could expunge everything from one of my "FlashBack" ROM .zips except for the "flash_image" binary, and the corresponding usage of the same from within META-INF/com/google/android/update-script. (Replace the recovery image in the zip with your trackball-optional version, re-sign, and blam - you are done!).

That would require that different rooted ROMs only support the "cat", "echo", commands and "reboot recovery", e.g. I am assuming the last bit is fairly universal - but you know what they say about assuming.

Code:
#!/system/bin/sh
cat /sdcard/gscript/ScaryScenario6.zip > /cache/ScaryScenario6.zip
echo '--update_package=CACHE:ScaryScenario6.zip' > /cache/recovery/command
reboot recovery



cheers

eu1
 
  • Like
Reactions: scary alien
Upvote 0
Oooo, thanks eu1, I've always wanted to mess with a flashable .zip file and the "reboot recovery" tip is one I've know about (through you, of course), but never made that connection that this could be used as a vehicle for doing this sort of thing.

I'll certainly put these things on the pile of things to look into (Scotty's left me alone for a couple of weeks now, LOL--he must be busy with his ThunderBolt stuff ;)).

Cheers and thanks again!
 
Upvote 0
Okay guys, we've seen lots of reports of people whose Erises (Erii?) have or are starting to have trackball issues and are unable to properly navigate through Amon_RA's custom recovery. Well, I've been trying to figure-out how to tweak Amon_RA's custom recovery to work without relying on the trackball.

Anyway, after a lot of thrashing about, and with some sage guidance from Amon_RA, I was able to modify and recompile Amon_RA's 1.6.2 Eris custom recovery to allow an alternate set of keys to be used in lieu of having / needing to use the trackball--not just for scrolling, but for selection / confirmation! I left-in the support for using the trackball so that it will work either way.

Here's the new, alternate key mappings:

Code:
[FONT=Courier New][B][COLOR=blue][SIZE=3]volume-UP[/SIZE][/COLOR][/B]:  [B]scroll-up[/B] (trackball scroll-up still works too)[/FONT]
 
[FONT=Courier New][COLOR=blue][B][COLOR=green]green[/COLOR] [SIZE=3]Call button[/SIZE][/B][/COLOR]: [B]scroll-down[/B] (trackball scroll-down still works too)[/FONT]

[FONT=Courier New][COLOR=blue][B][COLOR=red]red[/COLOR] [SIZE=3]End/Power button[/SIZE][/B][/COLOR]: [B]select / confirm[/B] (trackball-press still works too)[/FONT]
 
[FONT=Courier New]The [COLOR=blue][B]volume-DOWN[/B] [/COLOR][COLOR=black]key,[/COLOR] which is used to take you back to the prior[/FONT]
[FONT=Courier New]menu / screen, remains unchanged.[/FONT]
Here's a screenshot of the new version: View attachment 13309

Notice the [trackball optional] (or [trackball not required]) text at the bottom of the screen under the "Build : RA-eris-v1.6.2" line that lets you know you are using the new, alternate version.

=================================================

Note / Edit: 20-November-2010: Click below to read the note:
I became aware that the menu options for partitioning the /sdcard were "missing" from my initial version of this custom recovery (I didn't notice it because I don't use apps2sd).

The reason for this was that the Amon_RA custom recovery source I used was pulled from the "desirec" (HTC Eris) branch of the amonra_bootable_recovery github (kindly managed by packetlss). All of the files in this branch are labeled as "1.6.2" (including the only file that I modified, recovery.c).

Then, late last night, early this morning, AF member TheLedge93 and guide mhotovec pointed-out that there were menu options missing for the Partition sdcard function. I double-checked the "1.6.2" source that I used and those menu item references indeed were not present. They are/were, however present in the "mahimahi" (Nexus One) branch of source for this recovery, many of whose files are listed with a version number of 1.7.1 :)confused:).

So, I spent this morning seeing if the mahimahi source branch would compile in lieu of the desirec branch I was using--and indeed it did. So, I re-made my tweaks to support the alternative trackball navigation keys in the 1.7.1 version of recovery.c. I've compiled and flashed this new version, testing the trackball, alternate keys, Nandroid backup, Nandroid restore, and saw (but did not test) that the "missing" menu items for the Partition sdcard function were again present.

What does this mean? Here's the scoop:

1. I don't exactly know which version of the recovery.c source (or branch) was used by Amon_RA to compile the "1.6.2" recovery that virtually everyone has is and is using (other than those using the tweaked, trackball-optional version that I made a few weeks ago). The build number listed at the bottom of the screen still reads "1.6.2" since this value is gleaned from the default.prop (property) file that is not directly associated with the source (i.e., not involved in the compilation process). I would guess that the build version was not changed in the property file when a version newer than the 1.6.2 source was used to create the recovery images widely-used today.

I don't believe that the version that most people have is actually the same version that I just built since I have identified at least one slight difference in behavior: Nandroid backups will now backup the /cache filesystem, resulting in Nandroid backup directory names being prefixed with "BCDS-" instead of "BDS-" like were all used to seeing [this threw me for a loop for a while until I finally figured-out that each letter of the prefix indicates what is actually being backed-up by the nandroid-mobile.sh script: B=boot, C=cache, D=data, S=system].

2. Anyway, so I'm posting both the old and new versions of this alternate recovery image. The old (1.6.2) version is named:

recovery-RA-eris-v1.6.2-trackball-not-required.img

and the new ("1.7.1") version is named:

recovery-RA-eris-v1.6.2-trackball-optional.img

I also changed the text string below the build number at the bottom of the recovery screen to indicate the different versions.

I don't think this is too big of a mystery or issue since my hope is that there will be very few of you that will have trackball problems and need either of these tweaked recoveries (although if you are reading this you might be one of those :eek:). Anyway, the old version should suffice for those that don't want or need to partition their /sdcard and hopefully the new version will behave properly for those that do need to (i.e., for a2sd).
=================================================

Disclaimer: Again, your mileage may vary, etc., etc. Use these custom recoveries at your own risk. I am not responsible for any bad things that might occur to your phone should you use these.

=================================================

Here are the download links to the trackball alternative custom recovery:

New ("1.7.1") version:

https://sites.google.com/site/scary...ecovery-RA-eris-v1.6.2-trackball-optional.img

File size: 3,926,016 bytes
MD5 checksum: 3217768b831a3841180699942204762d

Old (original, "1.6.2") version:
https://sites.google.com/site/scary...ery-RA-eris-v1.6.2-trackball-not-required.img

File size: 3,923,968 bytes
MD5 checksum: 9ec2510f53a25658ca5d52b34b6c1524
Always (please!) verify the checksum of this file after you download and place it on your phone.

Please reference Amon_RA's thread over on XDA for additional details regarding this custom recovery:

[Recovery] [17-Mar-2010] RA-eris-v1.6.2 - xda-developers

--------------------------------------------------

Special thanks to:

Amon_RA: for creating this custom recovery and providing much needed guidance to allow me to tweak his code

Packetlss: for hosting the github and guiding me to Amon_RA

erisuser1: for his continued guidance, knowledge, and contributions to the Android community (especially the Eris folks)

Disclaimer: Use these custom recoveries at your own risk. As always, read carefully, be careful, and use caution when rooting and/or attempting anything discussed in this thread. I cannot be responsible for any "bad things" that might happen to your phone in the course of you using any of the information contained herein. I hate including something like this, but this is meant to give pause to any casual reader that isn't fully prepared for the consequences, intended or otherwise, related to rooting and installing a custom recovery.

----------------------------------------
INSTALLATION INSTRUCTIONS

Since there are a variety of states for phones to "accept" or have custom recovery installed on it, there are a few different scenarios for installing. For a better breakdown (and source ;)) of these different scenarios, please reference this post http://androidforums.com/eris-all-t...overy-trackball-not-required.html#post1874718 that appears later in this same thread (thank you again, eu1!):

/========\
| SCENARIO 1| Stock/unrooted Eris phones:
\========/

For "stock", unrooted, HTC/VZW phones, can use erisuser1's http://androidforums.com/eris-all-things-root/127861-universal-eris-root-dummies.html method, use his thread's instructions but do the following steps after the section labeled Setting Things Up with a File Manager (i.e., after figure 18) and before the section labeled Rooting with Gscript Lite:

A. Download the recovery-RA-eris-v1.6.2-trackball-optional.img file from the link above, being sure to verify the file size and MD5 sum (listed above) and transfer it to your phone's /sdcard/gscript/tools directory (that was created by the time you get to figure 18). I recommend using the free AFV (Android File Verifier) app [shameless plug :D] for checking a file's MD5 sum on your phone.

B. Use a file manager such as EStrongs File Explorer or Astro File Manager to navigate to the /sdcard/gscript/tools directory and rename the "recovery.img" file to "old-recovery.img".

C. Next, while you are still in the /sdcard/gscript/tools directory, rename the "recovery-RA-eris-v1.6.2-trackball-optional.img" file to "recovery.img".

D. Continue/resume the rooting process in eu1's thread from the section labeled Rooting with Gscript Lite. It should use the new, trackball optional custom recovery.

/========\
| SCENARIO 2| Partially rooted phones (process halted by wonky trackball):
\========/

This scenario covers phones that were "partially" rooted--i.e., the "Universal Dummies" or "1-click" method was used to root the phone, but a ROM could not be flashed because of a non-functioning trackball. If this is the case, you should be able to follow the steps indicated in Scenario 1 above.

If you were able to flash a ROM via some other means (i.e., ClockworkMod or manual flash via adb), then you can't use the Scenario 1 method above.

/========\
| SCENARIO 3| Rooted phone w/non-stock ROM & 1.6.2 Amon_RA Eris custom recovery installed:
\========/

This is for most folks that are already rooted and don't want to use their PCs and/or are not familiar with the Android SDK and using adb.

What you'll need:

A. Download and install the Gscript Lite app (don't run it yet):

https://market.android.com/details?id=nl.rogro.GScriptLite

B. Download or transfer the gscript-sa-171.zip file to your phone (we'll assume that you placed it in the /sdcard/download directory):

Here is the new "1.7.1" version (see notes above) that includes the "lost" Partition sdcard menu items:

https://sites.google.com/site/scaryalienware/downloads/gscript-sa-171.zip

MD5 sum of gscript-sa-171.zip: 2580f0c92f3e1e8acd9c8af1b5eae513
File size of gscript-sa-171.zip: 3,915,425 bytes

Here is the original ("1.6.2") version:
https://sites.google.com/site/scaryalienware/downloads/gscript-sa.zip

MD5 sum of gscript-sa.zip: c04a56675c103448ff4a5cdc1b48267f
File size of gscript-sa.zip: 3,914,222 bytes
C. Extract the contents of the gscript-sa-171.zip file to your SD card:

Code:
[FONT=Courier New]Using [B][COLOR=blue]Astro File Manager[/COLOR][/B] (free in the Market), let's move [COLOR=blue][B]gscript-sa-171.zip [/B][/COLOR][/FONT]
[FONT=Courier New]from the [COLOR=blue]/sdcard/download[/COLOR] folder to [COLOR=blue]/sdcard[/COLOR] and extract its contents:[/FONT]
 
[FONT=Courier New]A. [B]long-press[/B] the [COLOR=blue][B]gscript-sa-171.zip[/B][/COLOR] file[/FONT]
[FONT=Courier New]B. [B]select[/B] [COLOR=blue][B]Edit[/B][/COLOR][/FONT]
[FONT=Courier New]C. [B]select[/B] [COLOR=blue][B]Move[/B][/COLOR][/FONT]
[FONT=Courier New]D. [B]press[/B] the [COLOR=blue][B]Up icon[/B][/COLOR] at in the tool bar at the top of the screen[/FONT]
   [FONT=Courier New](this will navigate to the [COLOR=blue]/sdcard[/COLOR] directory)[/FONT]
[FONT=Courier New]E. finally, [B]select[/B] the [COLOR=blue][B]Paste icon[/B][/COLOR] in the tool bar at the top of the screen[/FONT]
[FONT=Courier New]F. [B]long-press[/B] the [B][COLOR=blue]gscript-sa-171.zip[/COLOR][/B] file and select [COLOR=blue][B]Extract[/B][/COLOR][/FONT]
[FONT=Courier New]G. [B]select[/B] [COLOR=blue][B]Extract To This Directory[/B][/COLOR][/FONT]
[FONT=Courier New]H. let it do its extracting thing...and then [B]exit[/B] Astro File Manager[/FONT]
Note: If you have to re-extract the gscript-sa-171.zip file (via Astro) and re-run the gscript-sa.sh script from Gscript, its probably a good idea to delete the gscript-sa script from inside Gscript (long-press the gscript-sa script name and select Delete).

*** Special Note for those using KaosFroyo ROMs ***
Code:
[B][COLOR=red]*** Special Note for those using [COLOR=blue]KaosFroyo [/COLOR]ROMs ***[/COLOR][/B]
 
Note: it appears that the [B]getprop [/B]command that is used in my Gscript script is
not present in KaosFroyo ROMs. The [B]getprop [/B]command is used to verify / validate 
that you are indeed running the script on an HTC Droid Eris.
 
Please reference the posts starting this with one
 [URL]http://androidforums.com/eris-all-things-root/214240-amon_ra-1-6-2-custom-recovery-trackball-not-required-2.html#post2089171[/URL] 
for information about how to modify my script to continue the installation of this alternate recovery (specifically this post: 
[URL]http://androidforums.com/eris-all-things-root/214240-amon_ra-1-6-2-custom-recovery-trackball-not-required-3.html#post2093137[/URL]).

Note: if you have problems using the above "regular" gscript-sa.sh scripts, you might have to use the method mentioned below where it might be necessary to add the "busybox " command (note the trailing space char) in front of the mkdir command in the script before it will work. So, check out the instructions below if you get stymied.
*** Special Note for CM7, GSB 2.8+ and other Gingerbread-based ROMs ***
Code:
[B][COLOR=red]*** Special Note for CM7, GSB 2.8+ and other Gingerbread-based ROMs ***[/COLOR][/B]
 
It appears that the more recent Gingerbread-based and CyanogenMod (CM7)
ROMs might not support the "[B]mkdir[/B]" command in the shell that Gscript
uses. So, to get around this, the [B]busybox [/B]"mkdir" command must be
referenced. Please reference this post:
 
[URL]http://androidforums.com/eris-all-things-root/214240-amon_ra-1-6-2-custom-recovery-trackball-not-required-4.html#post2594769[/URL]
 
for more information about details for getting the script to work on the 
GingerBread and CyanogenMod (CM7) ROMs.
D. Launch a new Gscript Lite app instance and do the following:

Code:
[FONT=Courier New][B]Launch[/B] a new [B][COLOR=blue]Gscript Lite[/COLOR][/B] instance and:[/FONT]
 
[FONT=Courier New]A. [B]press[/B] the soft menu button[/FONT]
[FONT=Courier New]B. [B]select[/B] [B][COLOR=blue]Add script[/COLOR][/B] option (lower left)[/FONT]
[FONT=Courier New]C. [B]press[/B] the [B][COLOR=blue]Load file[/COLOR][/B] button[/FONT]
[FONT=Courier New]D. [B]select[/B] the [COLOR=blue]gscript-sa.sh[/COLOR] script[/FONT]
[FONT=Courier New]E. leave the [B][COLOR=blue]Needs SU?[/COLOR][/B] checkbox checked (you need root for [/FONT][FONT=Courier New]the flash to work)[/FONT]
[FONT=Courier New]F. [B]press[/B] the [COLOR=blue][B]Save[/B][/COLOR] button (lower left)[/FONT]
[FONT=Courier New]G. you'll now be returned to the main Gscript Lite menu and you should[/FONT]
   [FONT=Courier New]see [COLOR=blue]gscript-sa[/COLOR] available at the bottom of the list of scripts[/FONT]
[FONT=Courier New]H. to run the script, [B]short-press[/B] the [COLOR=blue]gscript-sa[/COLOR] script name[/FONT]
[FONT=Courier New]I. you should be prompted by the SuperUser whitelist app to allow[/FONT]
   [FONT=Courier New]the Gscript program to run the [COLOR=blue]/system/bin/sh[/COLOR] as root ([B]select[/B] [COLOR=blue][B]Allow[/B][/COLOR])[/FONT]
The screens should look like this:

View attachment 13501 View attachment 13502 View attachment 13555
If you are not rooted, didn't enable the Needs SU? checkbox, or there's a problem flashing the custom recovery image, you'll see something like this:
View attachment 13556

/========\
| SCENARIO 4| Old-school :p (already rooted; Android SDK/adb-familiar):
\========/

If you have a rooted phone, have the Android SDK installed, and are proficient / knowledgeable about using adb and flash_image, then you can follow these steps (note: I am purposely omitting some details that those familiar with this process should not need--if you need it, you probably shouldn't be using this):

Via flash_image through adb

A. Download the new (1.7.1) recovery-RA-eris-v1.6.2-trackball-optional.img file or the old (1.6.2) recovery-RA-eris-v1.6.2-trackball-not-required.img file from one of the links above, being sure to verify the file size and MD5 sum (listed above) and transfer it to your Android SDK's tools directory.

B. Use adb to push the new custom recovery over to your phone's /sdcard:

Code:
[COLOR=blue][B]adb push recovery-RA-eris-v1.6.2-trackball-optional.img /sdcard/[/B][/COLOR]
C. Wait/pause 5 seconds to allow the push/transfer to complete (this data transfer actually occurs in the background via the adb service on your PC that talks to the adb daemon on your phone)

D. Now, flash the updated custom recovery image to your phone:

Code:
[FONT=Courier New][COLOR=blue][B]adb shell flash_image recovery /sdcard/recovery-RA-eris-v1.6.2-trackball-optional.img[/B][/COLOR][/FONT]
E. Reboot into recovery to enjoy your new trackball-optional custom recovery! ;)

Via fastboot (note: requires S-OFF bootloader)

Also, LexusBrian400 pointed-out in this post: http://androidforums.com/eris-all-t...ery-trackball-not-required-2.html#post1932514 that you can also flash the recovery using the fastboot utility (if you have it):

Note: a quick word of caution, courtesy of erisuser1 and excerpted (verbatim) from this post: http://androidforums.com/eris-all-t...le-pb00img-zip-update-method.html#post1990081:

If you ever use fastboot to flash things to the phone, be very very careful about md5 checksums and so forth - the one thing which is nice about the signing methodology used with ROMs and Amon_RA is that it makes it impossible to flash a corrupted ROM file - but when flashing with fastboot, no protection is provided for you, so you need to be damn sure you are working with correct and unmangled files.

1. Make sure your USB cable is plugged-in between your phone and your PC.

2. From a powered-off state, boot your phone into FASTBOOT USB mode by simultaneously pressing the green CALL and the red END/PWR buttons. This should take you into the FASTBOOT menu/screen. Note: if you don't have the USB cable plugged-in, the "FASTBOOT USB" (white text w/red background) will simply show "FASTBOOT".

3. Place the alternate custom recovery image you wish to flash in the Android SDK's tools directory.

4. Next, from your Android SDK's tools directory, flash the alternate custom recovery:

Code:
fastboot flash recovery recovery-RA-eris-v1.6.2-trackball-optional.img
5. Here's what it will look like from the Windows (DOS) Prompt:

Code:
d:\android-sdk-windows\tools>[B][COLOR=blue]fastboot flash recovery recovery-RA-eris-v1.6.2-trackball-optional.img[/COLOR][/B]
  sending 'recovery' (3834 KB)... OKAY [  0.844s]
            writing 'recovery'... OKAY [  1.390s]
finished. total time: 2.236s
d:\android-sdk-windows\tools>
6. After the flash, press the volume-DOWN key to enter HBOOT. From HBOOT, press volume-UP to enter your shiny-new custom recovery.

/========\
| SCENARIO 5| jcase's 1-click app, now with trackball-optional custom recovery:
\========/

I finally received permission from jcase to re-pack his Eris 1-click app to include the trackball-optional recovery. This version is identical to his original--I simply replaced the file containing the original Amon_RA custom recovery with the trackball-optional version.

You can use this version to root or re-root a stock Sense Eris (which should also include those running Sense-based ROMs such as xtrSENSE, and some of the very old, original Eris ROMs). If you are already rooted, you don't need to re-root (i.e., you don't need to re-flash the rootme.zip file), you just need to re-run the app as you normally would in order to get the special trackball-optional Amon_RA custom recovery installed.

I also think that this app will work if you already have the original Amon_RA custom recovery installed and you need to replace it with the trackball-optional one.

https://sites.google.com/site/scaryalienware/downloads/one-click-tbo.apk

MD5 sum: 15763b51cf707c027cc73bc117e1fc39

I won't repeat the installation instructions here, but instead will point you towards both of jcase's threads (here at AF and over at XDA):

Universal 1 Click Eris Root App Apk - No PCs, No Scripts Needed, EASY - xda-developers

http://androidforums.com/eris-all-things-root/139178-universal-1-click-eris-app-apk-no-pcs-no-scripts-needed-easy.html

If you are simply replacing your custom recovery with the trackball-optional one, then you basically just run steps 1-3.

I would also urge you to honor the spirit of jcase's threads regarding donations to help-out those less fortunate. All credit to jcase and his team for creating this app that has helped so many people.
Thank you scary for the extremely helpful work you've done!!! Much appreciated!
 
  • Like
Reactions: scary alien
Upvote 0

BEST TECH IN 2023

We've been tracking upcoming products and ranking the best tech since 2007. Thanks for trusting our opinion: we get rewarded through affiliate links that earn us a commission and we invite you to learn more about us.

Smartphones