Enable Copy & Paste on the Nook Tablet - Barnes & Noble Nook Tablet

Enable Copy & Paste on the Nook Tablet​
Background
The lack of copy & paste functionality on the Nook Tablet is one of the most annoying "features" of the B&N firmware and it affects not just geeks like me but also the average user. This thread and this thread are two of many, many threads complaining about the missing copy & paste. This thread proposes a "fix" by combining the Hacker's Keyboard and Swype, but is still really lame.
The method I will describe here solves the problem by replacing /system/framework/framework.jar which contains the code for Android widgets like text fields. I have merged into the stock /syste/framework/framework.jar the code responsible for copy & paste from the Android source code.
Instructions
Video walkthrough: http://www.youtube.com/watch?v=7V70a3FYbt4
0. Before you proceed, know that THIS IS EXPERIMENTAL SOFTWARE THAT PROBABLY VOIDS YOUR WARRANTY AND MAY PERMANENTLY OR TEMPORARILY BRICK YOUR TABLET. Even though it worked for me, it may not work for you, and worse, it is quite possible that it could cause your tablet to boot-loop or die. I AM NOT RESPONSIBLE FOR ANY POSSIBLE DAMAGES TO YOUR TABLET / ANYTHING ELSE CAUSED BY THIS METHOD. BY USING IT YOU AGREE TO ASSUME ALL RESPONSIBILITY FOR YOUR ACTIONS.
1. Your tablet needs to be rooted for this to work. If you have not rooted it yet, search this forum for instructions.
2. Since we will be copying files to /system, you will need to install ES File Explorer or Root Explorer or whatever other app that allows you to do that.
3. Download the file that corresponds to your OS version from below:
1.4.2 (16GB/8GB): http://www.mediafire.com/?5pf2aegq02194lq MD5: ef35d35daffd0d9574f48a43ccc4b58c​1.4.0 (16GB): http://www.mediafire.com/?es6gd31wzr7yk8a MD5: 99d2e7eff173fbdc77c79b4f4a6ff53c
The 1.4.0 version has been reported to cause boot loops for some people, while it has worked for others. You have been warned.​If you're on a different OS version, post the file /system/framework/framework.jar form your tablet and I will make a package for it.
4. Extract file contents to microSD card, and insert microSD card into the tablet.
5. Using ES File Explorer / Root Explorer, copy the extracted file framework.jar.new to the directory /system/framework/. (If you're using ES File Explorer, make sure "Up to Root", "Root Explorer", and "Mount File System" are checked in settings.)
6. Copy the extracted file uim-sysfs to /system/bin/.
7. Go to /system/bin/, and change the permissions of the file uim-sysfs to executable. (If using ES File Explorer, long press -> Properties -> Change -> Check everything under "execute".)
8. Power off tablet and power on again. The tablet should take much longer to boot this time than normally, so no need to worry. When the tablet boots up, you will most likely see lots of force close dialogs. This is normal.
9. Wait one minute. You could be stuck in a boot loop if you don't wait.
10. Power off tablet and power on yet again. This time it should also take much longer to boot; the boot times will return to normal after several reboots.
11. Profit.
Force close issues
The first time you run some (read most) apps after applying this hack would likely result in force closes. While annoying, there is no way to get around it due to how the Dalvik VM caches references to /system/framework/framework.jar. In addition, every time you install new apps or update apps, you will have to reboot the machine before those apps are usable; you will get a force close when you try to use those apps until you reboot.
The solution is simply to reboot your tablet each time you get a force close error from an app that worked fine before this hack. The force close error for that particular app should go away following a reboot. If you get a force close from another app after that, just reboot again.
How it works
The information below is for people interested in understanding how this stuff works. If you just wanted to enable copy and paste on your tablet, you can stop reading.
This hack is based on the exploit explained at http://forum.xda-developers.com/showthread.php?t=1534518. The uim-sysfs script in the attached file saves the stock /system/framework/framework.jar, copies over my modified framework.jar.new, and restarts the zygote process. After the zygote process has loaded my framework.jar.new, the uim-sysfs script restores the stock /system/framework/framework.jar so that /init will not bail on the next boot.
To enable copy & paste in /system/framework/framework.jar, I decompiled the stock implementation and merged in related code from AOSP. The two classes I changed are android.widget.TextView and android.widget.EditText. For android.widget.EditText, I simply used the AOSP implementation because the only difference between the two was in the enabling of copy & paste. I manually merged android.widget.TextView because there appears to be B&N enhancements in it in addition to disabling copy & paste.
The exact steps I took as well as a diff of my modifications are documented in post #12.
Disclaimer
Again, this is experimental software. That it worked for me does not mean it will work for you, or that it won't brick your tablet. I am not responsible for any possible damages resulting from using this method.

Here i post framework.jar from stock 1.4.0 rooted
~ Veronica

lavero.burgos said:
Here i post framework.jar from stock 1.4.0 rooted
Click to expand...
Click to collapse
OK. Looks like the framework.jar from 1.4.0 is different from 1.4.2; I've merged in the same changes. If you're feeling brave, the package I've made for 1.4.0 is here.
MD5: 99d2e7eff173fbdc77c79b4f4a6ff53c
Can you confirm whether this works?

16gb Nootlet with 1.4.0 rom, rooted, OTA blocked yada yada.
Stayed at the "read forever" screen almost forever, then finally started up. Fellow victims take note, it isn't dead so be patient.
Lots of FC, the last persistent one was the launcher (ADW ipaidforthis version)
Powered off and on again after waiting way longer than 1 minute.
Second boot forever at "read forever" screen so far.
If it comes back to life I'll try the 1.4.0 version & let you know.
[Edited to add}
... time passes ...
Any way out of the "ADWLauncherEX" force-close loop? Does Android have a "safe mode" boot option like Windows? (sorry)
No, I haven't installed CWM recovery yet. Remind me to do that if this thing ever gets over its mental breakdown.

jichuan89 said:
OK. Looks like the framework.jar from 1.4.0 is different from 1.4.2; I've merged in the same changes. If you're feeling brave, the package I've made for 1.4.0 is here.
MD5: 99d2e7eff173fbdc77c79b4f4a6ff53c
Can you confirm whether this works?
Click to expand...
Click to collapse
Thanks can't test right now 'cause im finishing another project and then i have to test the tun.ko module for CM9 busy bee .
~ Veronica

cellhead said:
Stayed at the "read forever" screen almost forever, then finally started up. Fellow victims take note, it isn't dead so be patient.
...
Second boot forever at "read forever" screen so far.
Click to expand...
Click to collapse
Thanks for mentioning this. Will add to instructions.
cellhead said:
Any way out of the "ADWLauncherEX" force-close loop?
Click to expand...
Click to collapse
Getting FC's is normal - as the instructions state you probably have to reboot a number of times before all FC's disappear. Any luck so far? If not, please let me know and I will post a recovery SD card image that will allow you to undo this hack.
Also - as I said clearly in the instructions (Compatibility section), before you try this out on your 16GB, you should post your /system/framework/framework.jar so I can verify that this works on the 16GB. I don't have the 16GB tablet so I don't know if this works on it at all. Anyone?

Thanks. You may want to feature the version info prominently in the OP. I got my issue solved in a roundabout way when it finally went into a boot loop and triggered the factory reset. That got me back to 1.4.0 unrooted, and without the FC problems. Reran indirect's rooting script and I'm back to some semblance of normality.
Ain't complaining, I took on the risk of trying your copy/paste fix and went on an unplanned adventure. Such is life as a RL software tester ;-)
I'll wait and see how things shake out. You're onto something good here, so once it's a little safer for the normals to apply it, I'll give another go.
For the record, 16g Nook tablet, rooted via indirect, OTA blocked, v1.4.0

cellhead said:
You may want to feature the version info prominently in the OP.
Click to expand...
Click to collapse
You're right...really sorry about that.
On the other hand, did you try the files in the original post, or did you use the files for 1.4.0 I posted in the 3rd post?

The ones in the original post. Then I read the third post, but was unable to get it to boot far enough that I could replace the files and try again.
Sent from my BNTV250 using xda premium

cellhead said:
The ones in the original post. Then I read the third post, but was unable to get it to boot far enough that I could replace the files and try again.
Click to expand...
Click to collapse
The files in the original post are modified from 1.4.2 and would most certainly not have worked on 1.4.0...I should have made that clearer. Sorry.
The files in the 3rd post though are modified from 1.4.0 (thanks to lavero.burgos) and should work for you. Any chance you could test them out?
--- EDIT ---
Also - I've made a bootable SD card that will remove this hack and fix the tablet even if something goes wrong and you cannot boot into the system to remove the files directly. I can post it if someone needs it.

Cool hack, but why all these doubts and asks for 16gb's framework.jar ? What users have on devices comes from vendor firmware package(s), and you can see at http://www.barnesandnoble.com/u/Software-Updates-NOOK-Tablet/379003187/ that there's no separate versions for 8gb vs 16gb. That page (and pages for other releases) should be also the authoritative place for getting framework.jar .
On the related note, would you care to provide exact instructions how to make framework.jar with c&p functionality? That would help to keep it updated across vendor upgrades, and also for making sure that new framework.jar contains only changes related to c&p and nothing else ;-). Granted, such instructions would be long and boring, so writing them in the shell script language rather than English would be a good idea ;-).

pfalcon said:
Cool hack, but why all these doubts and asks for 16gb's framework.jar ? What users have on devices comes from vendor firmware package(s), and you can see at http://www.barnesandnoble.com/u/Software-Updates-NOOK-Tablet/379003187/ that there's no separate versions for 8gb vs 16gb. That page (and pages for other releases) should be also the authoritative place for getting framework.jar .
Click to expand...
Click to collapse
Thanks for the link! I went and downloaded the update archive and extracted it, and can confirm that the /system/framework/framework.jar in that archive (which I'd assume is the same as on the NT 16GB/1.4.2) is different from the same file on my NT 8GB/1.4.2., which confirms my hypothesis in posts #11 and #14 in http://forum.xda-developers.com/showthread.php?t=1517513&page=2. The bizarre thing is that if you unzip the files they produce the exact same content; it looks like they differ only in some sort of signature. But this means that my framework.jar will work on both the 8GB and 16GB on 1.4.2. So thanks again for the link!
pfalcon said:
On the related note, would you care to provide exact instructions how to make framework.jar with c&p functionality? That would help to keep it updated across vendor upgrades, and also for making sure that new framework.jar contains only changes related to c&p and nothing else ;-). Granted, such instructions would be long and boring, so writing them in the shell script language rather than English would be a good idea ;-).
Click to expand...
Click to collapse
What I did was this. You need zip, unzip and a tool called apktool. I'm assuming the framework.jar from the Nook is called ~/framework.jar.nook and the framework.jar from vanilla Android (AOSP) is ~/framework.jar.aosp.
1. Extract framework.jar into a directory z:
Code:
$ unzip framework.jar -d z
2. Use apktool to disassemble framework.jar.nook:
Code:
$ apktool d ~/framework.jar.nook
3. Disassemble framework.jar from AOSP.
Code:
$ apktool d ~/framework.jar.aosp
4. Compare and modify framework.jar.nook.out/smali/android/widget/{TextView,EditText}.smali against framework.jar.aosp.out/smali/android/widget/{TextView,EditText}.smali. My diff file can be downloaded here. Apply diff with
Code:
$ cd framework.jar.nook.out; patch -Np1 < jichuan89_nook_text_hack.diff; cd ..
5. Recompile Nook's framework.jar:
Code:
$ apktool b framework.jar.nook.out
6. Repackage modified Nook's framework.jar into ~/framework.jar.new
Code:
$ cp framework.jar.nook.out/build/apk/classes.dex z/classes.dex
$ cd z; zip -r ~/framework.jar.new META-INF classes.dex preloaded-classes; cd ..

framework.jar in that archive (which I'd assume is the same as on the NT 16GB/1.4.2) is different from the same file on my NT 8GB/1.4.2
Click to expand...
Click to collapse
I just tried to compare framework.jar I have on my device after 1.4.2 OTA update vs downloaded from B&N site - they turned out to be the same, md5sum is 795ae49e2b05b05c999a424a7d84b36b. Anyway, good news that contents were the same in your case too. It might be that 8Gb's initial in-flash 1.4.2 indeed was packaged differently than 16Gb's 1.4.2 update (that's idea somehow backed by the fact that 16Gb's initial in-flash 1.4.0 is not available on B&N site). Again, good to know that actual contents are the same, so 1.4.3 would be common either (which makes full sense, otherwise B&N just makes it harder on themselves).
What I did was this.
Click to expand...
Click to collapse
Thanks for the instructions and the diff! I with that all hacks posted on the forum came in such form ;-)

pfalcon said:
I just tried to compare framework.jar I have on my device after 1.4.2 OTA update vs downloaded from B&N site - they turned out to be the same, md5sum is 795ae49e2b05b05c999a424a7d84b36b.
Click to expand...
Click to collapse
Nice - thanks for confirming this. That's really helpful to know.
pfalcon said:
It might be that 8Gb's initial in-flash 1.4.2 indeed was packaged differently than 16Gb's 1.4.2 update (that's idea somehow backed by the fact that 16Gb's initial in-flash 1.4.0 is not available on B&N site). Again, good to know that actual contents are the same, so 1.4.3 would be common either (which makes full sense, otherwise B&N just makes it harder on themselves).
Click to expand...
Click to collapse
Right - it would make economic sense for B&N to make the software on the two tablet models to be as close as possible. I do hope they'll make their and our lives easier by just using the same version of the same damn files in the next update for the two models, as you said.
Sent from my Nook Tablet using XDA

I can make CWM flashable zip with original framework.jar for the ones having troubles until is fully tested. Tomorrow i'll jump back to stock 1.4.0 to test this hack and report back.
~ Veronica

A flashable zip would be cool if for no other reason than simplicity and reduced panic on the part of newcomers and when re-flashing the stock ROM.
I'm going to try this, so with me luck, but first: Do I need to boot into CWM to do this?

CRE said:
A flashable zip would be cool if for no other reason than simplicity and reduced panic on the part of newcomers and when re-flashing the stock ROM.
I'm going to try this, so with me luck, but first: Do I need to boot into CWM to do this?
Click to expand...
Click to collapse
No - this is for the stock firmware. CWM should have copy & paste already because it doesn't use B & N's framework.jar.

CWM as in ClockWorkMod not CM7 as in CyanogenMod v7.
EDIT:
To clarify, I didn't know if I could do this while the NT was booted normally or if I needed to boot with ClockWorkMod to ensure that the OS didn't try to access that file.

CRE said:
CWM as in ClockWorkMod not CM7 as in CyanogenMod v7.
EDIT:
To clarify, I didn't know if I could do this while the NT was booted normally or if I needed to boot with ClockWorkMod to ensure that the OS didn't try to access that file.
Click to expand...
Click to collapse
No. If there were requirements I would have put them in the instructions. It doesn't matter how you boot.
Sent from my Nook Tablet using XDA

Thank you. I guess I'll repartition first then get this out of the way too.

Related

[FIX] See ALL apps in Market (froyo only apps, and paid/protected apps) Automated!

laymil has posted a much better script for this. As such I will be discontinuing my work on this for now. Not for any hard feelings, but because it is now beyond me to help any further.
As always I am glad to have helped the community in some small way. Thank you all
CHEERS
Geniusdog254 Posted the exact lines in the build prop that needed to be changed. This is a pretty common fix for problems like this between versions of Android. There was some concern however that you may miss some of the newer apps released only for Froyo. I wrote some simple scripts that will fix this for us.
Simply: One puts the Froyo build.prop on your phone. The other puts the modded build.prop on your phone.
Prerequisites
YOU MUST HAVE GSCRIPT INSTALLED
YOU MUST HAVE BUSYBOX INSTALLED
(IF YOU ARE USING PAULS FROYO ROM FROM HERE
http://forum.xda-developers.com/showthread.php?t=686631
IT DOES NOT HAVE BUSYBOX INSTALLED
Also--
There are now 2 downloads.
One will reboot your phone automatically
One will not!
(I recommend this one for anyone that has problems, or doesn't know ADB well.)
Installation
Code:
Download the attached .zip file
Place the "buildprop" folder in the root of your sdcard
Place both "Normal_Froyo.sh" and "Modded_Froyo" files in the gscript folder on your sdcard
Code:
Open Gscript
Press menu and select Add Script
Press Load File button
Select Normal_Froyo file
Press Save button at bottom
Repeat for Modded_Froyo file
After that all you have to do is open gscript and select which one to run.
Normal_Froyo will give you stock froyo build.prop and let you see froyo only apps
Modded_Froyo will give you the market fix build.prop
You can also create shortcuts directly on your homescreen for each script if you wish
-----------------------------------------------
I've decided to skip the update.zip, I've found no way to copy the scripts to the gscript folder on the sdcard this way.
I'm going for an app instead.
P.S. I've never written an app before, java looks like russian to me lol. So if anyone has any tips, or knows any good tut's let PM me and let me know.
------------------------------------------------
fixed no buildprop folder
added NON-autoreboot download.
buildprop switcher v0.3.zip ORIGINAL
buildprop_switcher_no_rebootv0.3.zip NO REBOOT
buildprop swticher v0.3.1.zip DOWNLOAD THIS ONE
When the file is unzipped, there are 4 files - No Buildprop folder. Now I get the part about putting the two .sh files into Gscript folder.
Do I make another folder called buildprop and put build.2.1 and build.2.2 inside?
OR
Do I put build.2.1 and build.2.2 onto the root of the SDCARD?
Dayz xx
Dayzee said:
When the file is unzipped, there are 4 files - No Buildprop folder. Now I get the part about putting the two .sh files into Gscript folder.
Do I make another folder called buildprop and put build.2.1 and build.2.2 inside?
OR
Do I put build.2.1 and build.2.2 onto the root of the SDCARD?
Dayz xx
Click to expand...
Click to collapse
So sorry lol Didn't notice until I was making the update.zip that I didn't put the other files in a folder IN the zip. Just make a folder on your sdcard called buildprop. and put them in there.
BTW testing the flashable update.zip method right now
thx, seems to work
so no more *#*#etc.. afterwards?
watercool said:
thx, seems to work
so no more *#*#etc.. afterwards?
Click to expand...
Click to collapse
Right.. the checkin service runs on each reboot. So it is not needed.
Worked just fine, but I did have to do the checkin thing. Possibly had poor signal but checkin hadn't done on reboot. Worked fine after that...
Dayz xx
followinginsanity said:
Right.. the checkin service runs on each reboot. So it is not needed.
Click to expand...
Click to collapse
Can the checkin method be used, instead of rebooting? I'd much rather switch back and forth via checkin rather than having to reboot.
Thanks.
Namuna said:
Can the checkin method be used, instead of rebooting? I'd much rather switch back and forth via checkin rather than having to reboot.
Thanks.
Click to expand...
Click to collapse
The reboot is built into the script. On my phone, if I checkin, the apps still don't show till I reboot. But show if I only reboot. If checkin alone works for you though, you can remove the reboot command from the script.
I'm not sure what happened, but after following the instructions exactly, my phone crapped. It got as far as the first nexus logo (non-animated), then the buttons lit up and I got a black screen. And that's how it stayed.
Any ideas?
This worked great for me I also solved my (unrelated) prob with SlideIt by forcing the dictionary to save in the settings, so I'm no longer bothered about losing shortcuts stuff on a reboot.
Dandy!!
tested again with a second n1. works perfect! automated checkin works perfect.
Can you please post what changed in the .prop file.
Also you didn't add the video codecs in the "new" prop file
InGeNeTiCs said:
I'm not sure what happened, but after following the instructions exactly, my phone crapped. It got as far as the first nexus logo (non-animated), then the buttons lit up and I got a black screen. And that's how it stayed.
Any ideas?
Click to expand...
Click to collapse
Mine did this as well, though I am unsure why just yet. Been busy all day.
Mikey1022 said:
Can you please post what changed in the .prop file.
Also you didn't add the video codecs in the "new" prop file
Click to expand...
Click to collapse
The only thing I changed from the stock to the "modded" build.prop were these 2 lines
from this
ro.build.description=passion-user 2.2 FRF50 38042 release-keys
ro.build.fingerprint=google/passion/passion/mahimahi:2.2/FRF50/38042:user/release-keys
to this
ro.build.description=passion-user 2.1-update1 ERE27 24178 release-keys
ro.build.fingerprint=google/passion/passion/mahimahi:2.1-update1/ERE27/24178:user/release-keys
I didn't add anything else to these. If you would like other things added to the build.prop files. You are welcome to edit them yourselves, or let me know what things you want changed, and I can include them.
I can make it user friendly. With descriptions for each modded line, then you can simply un-comment the options that you want.
PS: I thought I had the flashable update ready, but the update-script is giving me problems. ANYONE that wants to help please let me know. I'd really like to get this out to everyone.
InGeNeTiCs said:
I'm not sure what happened, but after following the instructions exactly, my phone crapped. It got as far as the first nexus logo (non-animated), then the buttons lit up and I got a black screen. And that's how it stayed.
Any ideas?
Click to expand...
Click to collapse
same thing here....ANY IDEAS????????????
This is a great find, inductions were perfect and easy to follow. Not one issue getting all my paid apps back! Thank again!
JDMSirEK4 said:
same thing here....ANY IDEAS????????????
Click to expand...
Click to collapse
To anyone that can't get thier phone to boot all the way after doing this
Its not a big deal. Your phone booted. But the build.prop didn't get copied before the reboot.
If you did a nandroid before you tried it. Restore that!
If you didn't, OR you know how to use adb. Do this
Code:
adb remount
adb push [COLOR="red"]/path/to/build.2.1(or)build.2.2[/COLOR] /system/build.prop
adb reboot
I hope to have this fixed quickly.
ANYONE WHO'S PHONE WILL NOT BOOT AFTERWARDS!
Check and make sure you put the files in the right place.
build.2.2
&
build.2.1
go in
build.prop FOLDER ON YOUR SDCARD
that was the only reason I got the error, i deleted the files off my card when i was testing the flashable update.
If you still get an error. open both files in the gscript folder, and remove or comment out the reboot line. Then tell me what error you get in gscript.
So I did this and am able to see the new apps. When I reboot the phone I cannot see a bunch of old apps in my launcher. I revert to the normal script and reboot again and still cannot see a bunch of my apps. Appbrain says theyre installed and I can open them from there but no widgets or shortcuts for them Any Ideas?
r0adki111 said:
So I did this and am able to see the new apps. When I reboot the phone I cannot see a bunch of old apps in my launcher. I revert to the normal script and reboot again and still cannot see a bunch of my apps. Appbrain says theyre installed and I can open them from there but no widgets or shortcuts for them Any Ideas?
Click to expand...
Click to collapse
Are those apps moved to the SD by any chance? If so, best bet is to go to Settings>Applications>Manage Applications>Find your launcher, and force stop it. Should work after that.
dictionary said:
Are those apps moved to the SD by any chance? If so, best bet is to go to Settings>Applications>Manage Applications>Find your launcher, and force stop it. Should work after that.
Click to expand...
Click to collapse
Nope they're not on SD. I'll try the fc of launcher.
Ok it worked thank you! but my xiia widget still is not back and I'm assuming others. Anything I can do for the widgets?
Ok installed and reinstated the app. Works great thx again.
Update:
Ok after another reboot, apps don't show again. FC the launcher they come back but not the widgets.. Grrrrrr...

[Q] Cynogen problems

Having trouble booting into Cynogen. As far as I can tell, everything is flashedd correctly. I got the initramfs and zimage from here. They flashed fine and the system boots into the multi boot screen.
Then I copied the openaos-gingerbread-anoa-gen8_113301.img.gz from here to my device through the USB MSC renaming it to openaos-gingerbread.img.gz
I believe that the menu.lst file should update itself so there should be no need to edit the file. I had to edit the file anyway, not sure why. Tried editing it through np++ and got Ginger-Bread listed in the boot menu. Tried to boot into it but it just sat at the OpenAOS screen and did nothing. I left it on that screen for close to half an hour.
I then tried the menu.lst file that is linked to the post by gbohm but the same thing happened.
When I access recovery and start USB MSC again it shows a ~525MB file called openaos-gingerbread.img and it has a folder called openaos which has a subfolder called disabled. Nothing else.
I tried this off the back of a full wipe so there is nothing on the device at all. No archos FW or anything. Coming from UD 1.5
Any idea what might be going on?
Edit: one last note. This was all done on my Windows machine. Will try it on my ubuntu server tomorrow. That machine is just a little more awkwardly placed
Maybe be you edited the menu.let wrong
Lokk in my "OpenAOS Full Instructions Thread" for tips;-) here in general section
Lenn said:
Maybe be you edited the menu.let wrong
Lokk in my "OpenAOS Full Instructions Thread" for tips;-) here in general section
Click to expand...
Click to collapse
No. Like I already said lenn update your guide or mention that it is outdated and point to the wiki.
This is what I was afraid off, giving people wrong instructions and make it worse for them.
---------
d31b0y you did it correct. Just copy openaos-gingerbread-anoa-gen8_113301.img.gz and rename it to openaos-gingerbread.img.gz
The menu.lst should update itself and create an extra Gingerbread entry in the bootmenu.
Some things that could go wrong is that you didn't safely umount or remove the drive. So the image got corrupted.
Another thing is that you maybe didn't rename it correctly using capital letters perhaps.
However my best guess is that the image got corrupted during download or during copy renaming and not safely remove the drive.
This http://dev.openaos.org/wiki/AndroidInstall_CM7_Gingerbread is the guide to follow and no other.
We from openaos recommend using linux to do the procedure, it is also much easier for us to support when coming for questions on irc http://www.openaos.org/chat
Maurice
Sorry, but stil >> 90% of users have a windows maschine.
Maybee you should also think about your target audience.
fzelle said:
Sorry, but stil >> 90% of users have a windows maschine.
Maybee you should also think about your target audience.
Click to expand...
Click to collapse
Yes, I know. Windows shouldn't be a problem for the procedure. It is only easier for us when answering questions, because we are almost all on linux machines. That is why I said we recommend it, not that we say you must use it.
Some issues for windows users. It hides known file extensions by default which could be a problem when renaming files. Windows doesn't care about cap letters, Linux does. A file named foo.img.gz is different from Foo.img.gz .
Maurice
divx118 said:
No. Like I already said lenn update your guide or mention that it is outdated and point to the wiki.
Click to expand...
Click to collapse
Sorry divx i really respct your works, but i know it.
I work at the momet on a honeycomb theme, and i said he should look there because of the menu.lst (the most makd faults, ...) and this part isnt outdated.
I will update the tutorial when i have enough time
Greets
Lenn
I know all that, as my first Unix was Minix followed by SCO and Eurix and then Linux 0.14 yggdrasil.
But if i see the questions postet here and elsewhere in android forums,
most of the people barely get their TV switched on, and to tell them that Linux is prefered might set back a few so much that they don't do anything.
On the other side, might be a good idea ;-)
Thanks for getting back to me. For some reason when I copy the file to the archos and reboot, it doesn't show up in the menu.lst
I decided to gunzip first and moved the file openaos-gingerbread.img to the archos. This showed in the list but when I tried to boot from it, the same thing as before happened. Hopefully I am just doing something silly. I'll try jump on the irc channel tomorrow. My main "comfy" computer was taken up by the oh this evening.
A couple more points.
My external SD slot is broken so I have no external SD. Although it installs onto the internal right? So that shouldn't make a difference.
I don't have stock fw installed at all. Just the SDE.
Edit: oh by the way, when I tried to move the .img file I got the following error:
mv : failed to preserve ownership for '/media/A101IT/openaos-gingerbread.img': Operation not permitted
It was moved with root privelages in terminal.
Edit2: I even did a sync before my umount to make sure everything was hunky dorey.
Sent from my R800i using Tapatalk
You need the stock to be installed, as during boot they extract some things.
I could be wrong but none of the above post seem to have noticed you haven't extracted the .gz img file. If you put that on you device it will do nothing as its the wrong file format and still compressed. You need to extract it using winrar or similar then rename that file to openaos-gingerbread.img and that should do it. nothing to do with capital letter you just missed a small but crucial step in the instructions.
ben.cordy said:
I could be wrong but none of the above post seem to have noticed you haven't extracted the .gz img file. If you put that on you device it will do nothing as its the wrong file format and still compressed. You need to extract it using winrar or similar then rename that file to openaos-gingerbread.img and that should do it. nothing to do with capital letter you just missed a small but crucial step in the instructions.
Click to expand...
Click to collapse
I'm pretty sure you don't and I have tried that anyway as per my second post...
Sent from my R800i using Tapatalk
fzelle said:
You need the stock to be installed, as during boot they extract some things.
Click to expand...
Click to collapse
That'll do it I'm sure. Will try to tonight.
Sent from my R800i using Tapatalk
Like fzelle said you need stock firmware, that is why it hangs. It needs to copy some libs and drivers over from stock. We can't include them in the release, because of license issues.
I don't think we check in the script if the original firmware isn't there. Another todo ...
I will update the wiki about having original firmware installed is essential.
@ben.cordy: The initramfs will gunzip the image when it is not done already, so no need to gunzip or unrar it yourself.
Still strange why it wouldn't show up in menu.lst while gzipped... I will check the script in initramfs.
Maurice
---------- Post added at 09:05 PM ---------- Previous post was at 08:47 PM ----------
fzelle said:
I know all that, as my first Unix was Minix followed by SCO and Eurix and then Linux 0.14 yggdrasil.
But if i see the questions postet here and elsewhere in android forums,
most of the people barely get their TV switched on, and to tell them that Linux is prefered might set back a few so much that they don't do anything.
On the other side, might be a good idea ;-)
Click to expand...
Click to collapse
At the moment, our target is the more advanced user, so we can get some good bug reports. That is why we have that big red warning on the wiki. So might be a good idea --> It is one .
Maurice

[MOD][COG-4][UnNamed] Over-scroll Glow!

Discontinued. The latest versions of all previously supported ROMs have this functionality built in.
This gives you an over-scroll glow when you reach the end of a list.
I really hope you knew that before clicking on this thread.
Example if you don't know what I'm talking about
It's just a modified framework.jar with modified files allowing the over-scroll to work and the correct glow images assigned to it. Theming is very easy, just colorize the over-scroll glow pngs in framework-res.apk. The default is orange.
What I want to do with this thread is sort of have a place where you can find the over-scroll enabling mod for every popular ROM for our phones. If you think I should support a ROM that I currently don't, then please post in the forums because I read every post! Ask to put a ROM on the wishlist. Upload the ROM's framework-res.apk and framework.jar files and I'll work on it when I'm not busy with school.
Currently, the wish list is:
Stock KH7
[Update on 10/15/11] UnNamed v1.0.1 compatible files uploaded. Give them a try. Honorable mention to quarlow
Installation:
BACK UP YOUR OLD FRAMEWORK.JAR
Because I'll just laugh at you if you complain that your phone won't boot up.
>>>ADB:
Code:
Extract the CWM package to get the framework.jar
adb remount
adb shell
su
cd /system/framework/
cp framework.jar framework.jar.backup
exit
exit
adb push framework.jar /system/framework/
adb reboot
>>>ROOT EXPLORER:
Extract the CWM package to get the framework.jar
Okay, now you can theoretically do this, but why would you want to? You'll get lots of crashes and might mess something important up.
Go to: /system/framework/ and rename framework.jar to something else. Go back to where-ever you saved my modified framework.jar and copy it over to /system/framework/ and change the permissions of the new framework.jar to match the old one. I'm pretty sure it's rw-r--r--, but don't quote me on that. + Restart your phone.
Simba501 has a more indepth tutorial on how to install this mod through Root Explorer here
>>>RECOVERY (preferred):
Flash the one specific to the ROM you're running
Whatever method you choose, know that it will take a stupidly long time for your phone to boot-up. Don't worry though, it'll be worth the wait.
Yoderk created some cool themes for the over-scroll glow for Cognition Beta-4 which you can find HERE.
UnNamed 1.0.1 works with 1.0.2 and 1.0.3 as well.
Also, please remember to say THANKS if I helped you!
cwm please!!
<3
diabolicalangle said:
cwm please!!
<3
Click to expand...
Click to collapse
It's there if you REALLY need it. I haven't tested it and to be honest, it's been a very very long time since I made my last CWM compatible file. Maybe it works though, try it out. If not, then use one of the other methods.
Fine work sir! Works well on Cog Beta 4.
yoderk said:
Fine work sir! Works well on Cog Beta 4.
Click to expand...
Click to collapse
That's awesome! Someone test it on stock w/ root, because if it works there, I'll be amazed.
Confirming that the cwm flashable zip works on cog beta 3!
Working fine here. I'm technically on Beta 1, but I've manually added the components I wanted from each Beta update because there were things I didn't want.
I have a suggestion. I don't know why everyone repeats that method for using root explorer. That's a terrible way to do it. I always use root explorer to manually replace my files and have never experienced any issues. Here is the correct way to use root explorer for manually replacing modded files:
1. Navigate to the file that you plan to replace (in this case, system/framework/framework.jar).
2. Copy (not move) the file and paste it somewhere on your SD card (internal or external, doesn't matter - as long as you can locate it in case you need to put it back). Rename the file you just pasted, but very subtly. For example, when renaming framework.jar, I would only throw something in front of the file name, such as "Backup - framework.jar", so I can easily distinguish it from the new file if I put them in the same spot.
3. NANDROID BACKUP!
4. Download/put on your sd card (whatever you do) the new file that you want to replace the old one with.
5. Move the new file to /system (not in a subfolder yet). Here you will change the permissions, which is crucial to avoid FCs and problems. In root explorer, you would long press the file, press permissions, and set them to whatever the old file's permissions are. This may require going to verify what they are before starting this step. In this case, the permissions are RW-R-R, which in root explorer, means that the first two boxes on the first line are checked and only the first box on the next two lines are checked.
6. Ensure that your new file is correctly named to exactly what it is replacing (case actually matters) and that the permissions also match what it is replacing.
7. Move your new file to the folder, root explorer will ask if you want to replace the file. Confirm.
8. Back out of root explorer and immediately reboot.
No force closes, no problems .
Cwm file worked great on cog beta 4. Thnkz!!
Sent from my SAMSUNG-SGH-I777 Cognition
Simba501 said:
Working fine here. I'm technically on Beta 1, but I've manually added the components I wanted from each Beta update because there were things I didn't want.
I have a suggestion. I don't know why everyone repeats that method for using root explorer. That's a terrible way to do it. I always use root explorer to manually replace my files and have never experienced any issues. Here is the correct way to use root explorer for manually replacing modded files:
...
No force closes, no problems .
Click to expand...
Click to collapse
Thanks! I added your tutorial to the OP.
Well if your like me and hate orange! Then here are two framework-res.apk with a blue and green overscroll color. Just rename them to framework-res.apk and overwrite the original file in system/framework.
Do not forget to back up original file! I claim no responsibility to problems.
Very subtle but a very nice touch...kudos...came zip worked great!!!
Sent from my SAMSUNG-SGH-I777 using XDA App
stock with root, i've got nothing. tried root explorer method and cwm
Does this still have the problem of not changing the Contacts or other Samsung apps?
illathanyours said:
stock with root, i've got nothing. tried root explorer method and cwm
Click to expand...
Click to collapse
Alright this may be Cog4 only... if you want, upload your framework.jar and framework-res.apk and I'll mod it for you and let me know if that works.
MikeyMike01 said:
Does this still have the problem of not changing the Contacts or other Samsung apps?
Click to expand...
Click to collapse
Yes. Those need the tw-framework to be modified and I haven't taken a look at those yet since I'm trying out Perception for a couple of days and that already has it coded in? But it isn't a problem per-say, it's just how Samsung decided to code those specific apps and there isn't a way to implement them in 2.3.4 without breaking the slide left to call, slide right to message, feature. 2.3.5 Roms have that built in on Samsung apps.
Problem probably isn't the best word.
Thanks for answering though. I always wanted the overscroll but having mixed bothered me.
Sent from my SGH-i777
shishir95 said:
Alright this may be Cog4 only... if you want, upload your framework.jar and framework-res.apk and I'll mod it for you and let me know if that works.
Well it's not that pressing of an issue, but maybe I'll send it to you later but right now I'm Dealing with insane iPhone customers, makes me want to hang myself... If 2.3.5 is gonna be coming sometime soon I wouldn't care about the wait.
Anyone know about 2.3.5 ota eta?
Sent from illaphone.
Click to expand...
Click to collapse
illathanyours said:
shishir95 said:
Alright this may be Cog4 only... if you want, upload your framework.jar and framework-res.apk and I'll mod it for you and let me know if that works.
Well it's not that pressing of an issue, but maybe I'll send it to you later but right now I'm Dealing with insane iPhone customers, makes me want to hang myself... If 2.3.5 is gonna be coming sometime soon I wouldn't care about the wait.
Anyone know about 2.3.5 ota eta?
Sent from illaphone.
Click to expand...
Click to collapse
There's a leaked 2.3.5 ROM for the i777 but personally I'm using designgear's Perception which is a port of a i9100 ROM and it works perfectly. I'd recommend the latter since leaked ROMs tend to have problems.
Click to expand...
Click to collapse
could you modify the framework.jar for UnNamed v1.0.1 - First ever well documented and open source stock derived rom? It has the extended power menu and if I overwrite the framework.jar using this it will break that extended power menu. Much thanks for getting the overscroll glow!!
Skyler2Dope said:
could you modify the framework.jar for UnNamed v1.0.1 - First ever well documented and open source stock derived rom? It has the extended power menu and if I overwrite the framework.jar using this it will break that extended power menu. Much thanks for getting the overscroll glow!!
Click to expand...
Click to collapse
I'll give it a try if there's enough demand for it.
shishir95 said:
I'll give it a try if there's enough demand for it.
Click to expand...
Click to collapse
+1 here

[Dev]Files of interest in the system

Alright, just got my hands on a system dump courtesy of loglud so I will be posting files (text files will include content that peaked my interest) here so me and other devs can see what we are able to toy with.
systemdump download link: http://dl.dropbox.com/u/15069134/SystemDump.zip
Current list:
/system/media/bnapps_icons\ <-- we can mod the app icons that come with the device so we can make it less-sucky.
/system/etc/bluetooth/blacklist.conf <-- referencing the bluetooth chip meaning we just have to find a way to activate it
/system/app/settings.apk <-- anyone think they can actually replace this with another gingerbread apk or decompile and discover if there is a custom intent? Warning: It does NOT work at all. I suggest against swapping the apk's out as it causes a force close.
/system/bin/bootanimation *Was told where it searches for bootanimations first so goto this thread for a new bootanimation: http://forum.xda-developers.com/showthread.php?t=1361735
Indirect said:
Alright, just got my hands on a system dump courtesy of loglud so I will be posting files (text files will include content that peaked my interest) here so me and other devs can see what we are able to toy with.
Current list:
/system/media/bnapps_icons\ <-- we can mod the app icons that come with the device so we can make it less-sucky.
/system/etc/bluetooth/blacklist.conf <-- referencing the bluetooth chip meaning we just have to find a way to activate it
/system/app/settings.apk <-- anyone think they can actually replace this with another gingerbread apk or decompile and discover if there is a custom intent?
Click to expand...
Click to collapse
Nice finds. Bluetooth will be intesting to test (about to do it right now).
As you know the Nook has a heavily modified framework, so I don't know if the stock settings app will work (but I'm about to find out and probably fark up my tablet).
Let me know how it goes anlog.
Indirect said:
/system/app/settings.apk <-- anyone think they can actually replace this with another gingerbread apk or decompile and discover if there is a custom intent?
Click to expand...
Click to collapse
Hmm . . . let me get a hold of it and I'll look at it tomorrow, I've already taken the rest of the week off (Diablo III beta key came in tonight).
You may not need to change out the settings.apk but just add another one to it.
I decided to hold off on swapping the settings.apk. Losing access to the real settings app with all of the Nook options might not be a good idea.
The main reason I wanted a full settings menu was to be able to get into the accounts sync settings, but I found an app to launch it.
Warning: It does NOT work at all. I suggest against swapping the apk's out as it causes a force close.
Indirect said:
A
/system/bin/bootanimation <-- It's not a .zip or anything, just a file...anyone know how we can edit this?
Click to expand...
Click to collapse
It's a binary file. This app executes bootanimation resources.
Example: on T-Mobile MyTouch 4G resources are in /system/customize//resource/htc_bootanimation.zip
You should search for bootanimation.zip and you can edit this archive
Indirect said:
Warning: It does NOT work at all. I suggest against swapping the apk's out as it causes a force close.
Click to expand...
Click to collapse
I read note, if you want edit system apps like Settings.apk you should sign them by personal keys only...
I was looking through and couldnt find a bootanimation.zip in the system so I'm checking the data folders now.
edit: What the hell, still can't find it.
Indirect said:
I was looking through and couldnt find a bootanimation.zip in the system so I'm checking the data folders now.
edit: What the hell, still can't find it.
Click to expand...
Click to collapse
I was using Absolite system to see if I could replace the bootanimation because I couldn't find it either. I did manage to make it go away and just had the splash screen. I'll look into this further today as well. I'm starting to get ideas as to which files you can and can't replace right now. Some will force an immediate reboot and get stuck in a boot loop. I also am trying to find what triggers and handles the home button menu, I am sure it is in the framework. I have framework.jar and services.jar decompiled and going through those as well. Reviewing logcats to see what I can track down. I have some other interesting stuff going as well
romified said:
I was using Absolite system to see if I could replace the bootanimation because I couldn't find it either.
Click to expand...
Click to collapse
Hmmm... Usually bootanimation is in /data/local/ or /system/media. May be it has different name?
/system/bin/bootanimation is the program that actually displays the bootanimation.
Normally it plays the contents of /system/media/bootanimation.zip, but it can also be hardcoded to play a fixed animation or designed to play a completely different format. (Such as on Samsung devices, where it only plays Samsung's QMG format until you replace the program.)
conundrum768 said:
I've already taken the rest of the week off (Diablo III beta key came in tonight).
Click to expand...
Click to collapse
conundrum768
Don't take this the wrong way, but I really hate you right now!
I tried getting in on the Diablo III beta, no luck!
Here is a file of some interest, it it looks to be encrypted because it would be of interest.
/system/recovery-from-boot.p
.p files are encrypted .m files. Not sure if anything exists out there to crack into that one, but I am sure it would tell some very interesting information and possibly allow hi-jacking the factory restore process?
Anyone familiar with .p files (pcode files) ?
---------- Post added at 12:20 PM ---------- Previous post was at 12:08 PM ----------
Also of interest are some .xem3 files under /system/lib/ducati
base_image_app_m3.xem3 --- 57 mb
base_image_sys_m3.xem3 --- 1.5 mb
I think could be system image files possibly from the little bit of research I have done. Due to the size of one of these (57 mb) and the name of the file, I was thinking maybe this is where the restore was getting it's base image from, but until I dig further I am not sure of that. The size of the file is what got my attention, much larger than other files in lib. That's half the size of CM7 in just one file.
Edit: These now look to be possibly drivers/firmware/images for Ducati and/or Pandaboard ? That's a large driver file....
The .p file is very much of interest I would think.
conundrum768 said:
Hmm . . . let me get a hold of it and I'll look at it tomorrow, I've already taken the rest of the week off (Diablo III beta key came in tonight).
Click to expand...
Click to collapse
It looks like the normal XML files are not controlling the layout and it is done through the smali files to get the custom actions and layout. A separate app to access development may be best for now, as we have been doing.
Unless someone edits the smali files of course, that's possible but will prove tedious and time consuming unless you have a lot of experience with these.
If you review the logcats from going into settings, you will see which smali files are involved.
I have almost a full system dump on an ftp so ill see about letting it be accessed.
Sent by breaking the sound barrier
Please upload full system dump from Nook Tablet
Please upload full system dump from Nook Tablet
How-to
1. Get root
2. Run terminal (enter su if symbol $ -> it will be changed to #)
3. Execute command mount
4. From list of partitions search for /system
Code:
Example: /dev/block/mmcblk0p27 /system ext4 ro,relatime
5. Dump it to sdcard with command dd
Code:
Example: dd if=/dev/block/mmcblk0p27 of=/sdcard/system.img
It dumps only system image not personal data...
I'll just upload a .zip to dropbox.
Is there a sanim.zip anywhere? If so, that's the bootani. If not, ill sink back to silence lol
Sent from my Samsung Legendary 4G, a Universe UTES phone, running "two.three.five"
I looked through and there are only a few .zip files but none of them actually contained a bootanimation. It really is annoying lol. This device is such a bastardized version of android, I can't wait to get past the bootloader. lol.

[Q] APK Creation

Well as many of you know we're over most of the hurdles we needed to jump with the CM7 build for Nook tablet.
Updates for the internal version are simple via CWM, the SD version is not so simple of course.
I'm assuming that it should be possible to built an APK that gains superuser permissions then copies the new files to the system. Can anybody confirm this is possible please?
We need to know that we can tell our SD user that they can update their version just as easy as the internal user
Thanks in advance for your help again everyone!
Well presumably this is how ROM Manager and Metamorph both do their thing, just in a slightly more round about way (as they don't come with the files they need to copy). I'm almost 100% sure this is possible, but I've never tried it personally.
EDIT: Looks like this is how you'd do it: http://developer.android.com/reference/java/io/File.html. Specifically the renameTo() method.
CelticWebSolutions said:
Well as many of you know we're over most of the hurdles we needed to jump with the CM7 build for Nook tablet.
Updates for the internal version are simple via CWM, the SD version is not so simple of course.
I'm assuming that it should be possible to built an APK that gains superuser permissions then copies the new files to the system. Can anybody confirm this is possible please?
We need to know that we can tell our SD user that they can update their version just as easy as the internal user
Thanks in advance for your help again everyone!
Click to expand...
Click to collapse
Well there are about a dozen ways to do this. First of one of the hardest things is comming up with the commands/script. I can defiantly do this. If you want an apk, there are a few guys whom could port my script to an apk. I'm going to make a script here that will format, and create partitions and extract directly from the nook, no need to go through the fancy formatting and such, just go into terminal and run the script. Ill post a prototype for you to have the testers test!
Do you think something like BacksideUpdater inside custom ROM for LG Optimus V?
made by JerryScript
JerryScript i very nice guy, I bet if you ask him, he will let you play with his code
if is it what you looking for
Yes, this is possible. I wrote an app that flashes the recovery partition for my older Froyo phone in the very rudimentary Basic4Android. Copying files under root privileges was part of this process. Fairly easy if you find the right coding examples in whatever your development platform of choice.
xdajunkman said:
Yes, this is possible. I wrote an app that flashes the recovery partition for my older Froyo phone in the very rudimentary Basic4Android. Copying files under root privileges was part of this process. Fairly easy if you find the right coding examples in whatever your development platform of choice.
Click to expand...
Click to collapse
So one of the problems is its not really copying. Its more of an extraction from one place to another. We are required to use dd, and fdisk(for formatting).
GREAT! I was worried updates would be to complicated for people
Sent from my Nook Tablet using xda premium
... and I was worried that I might have to wipe my NT clean again to get the updates. After a week with this wonderful upgrade, I've got a LOT of customization I don't want to lose...
Whoops, wrong button with the thanks. Anyway, it occurs to me you could just have people run a script from a terminal emulator. That would probably be the simplest way to do it. Make an Update folder on the SD card, add it to the PATH by default, and users could just copy over the update files and run the script. Just a thought.
Sycobob said:
Whoops, wrong button with the thanks. Anyway, it occurs to me you could just have people run a script from a terminal emulator. That would probably be the simplest way to do it. Make an Update folder on the SD card, add it to the PATH by default, and users could just copy over the update files and run the script. Just a thought.
Click to expand...
Click to collapse
Has to be simple, something like copy an update.zip onto the SD card then run the apk which will automatically run the update in the zip But my knowledge of such things is limited so I need help there
Same process. With the above method, the user would only have to copy over the file, open a terminal, and type 'update'. With the apk idea you just have to add a little more time for someone to actually write the app (not that it would take too long).
Sycobob said:
Same process. With the above method, the user would only have to copy over the file, open a terminal, and type 'update'. With the apk idea you just have to add a little more time for someone to actually write the app (not that it would take too long).
Click to expand...
Click to collapse
Hmm.... that sounds good.
Anybody know how to actually implement it ?
Dammit, idk why I keep hitting the thanks button thinking it's reply >.>
Anyway, it's just a matter of setting the PATH variable to include /sdcard/Update/ or something similar. To make an actual update, make a folder called Update, fill it with all the files that need to be copied over (probably in a directory structure), and write a script that actually copies everything over. You'll need to make sure sh is in /system/bin (I think it is by default).
You could zip the the files as well, using gunzip (busybox?) to extract them before copying them, then deleting them when you're done, just to keep it cleaner for the user.
The only downside to all this is that I don't know how you would flash a kernel.
Sycobob said:
Dammit, idk why I keep hitting the thanks button thinking it's reply >.>
Click to expand...
Click to collapse
That makes two of us!
Sycobob said:
Anyway, it's just a matter of setting the PATH variable to include /sdcard/Update/ or something similar. To make an actual update, make a folder called Update, fill it with all the files that need to be copied over (probably in a directory structure), and write a script that actually copies everything over. You'll need to make sure sh is in /system/bin (I think it is by default).
You could zip the the files as well, using gunzip (busybox?) to extract them before copying them, then deleting them when you're done, just to keep it cleaner for the user.The only downside to all this is that I don't know how you would flash a kernel.
Click to expand...
Click to collapse
I'm guessing you'd just flash it as usual, surely that one is the easiest? Copying stuff to boot partition would hopefully be just as simple, I was mainly worried about updating system files. I could do with building one for the current update to test the theory!

Categories

Resources