. └── org └── torproject └── android ├── AppManager.java //this is what helps us track the app-by-app torification //and gets the app name, icon, etc for display - we have some problems here //in normalizing the icon on the list label //some of this code came originally from DroidWall project (yay open source) ├── boot │ └── OnbootBroadcastReceiver.java //i think this is a dup now and should be removed ├── HiddenServiceManager.java //empty! but at some point i thought it would be good to aggregate HS functions here ├── OnBootReceiver.java //this is the class registered in AndroidManifest.xml to handle Onboot events //to start Orbot/Tor when the device boots if the user has elected to do so - what kind of permissions does this require? // // BTW, this shows up as a fairly unintrusive type perm request now in Android / in older versions (1.6 and earlier) // it was reported "as read / monitor phone state" and paranoid Tor-types didn't like the idea of it // in 1.6+ it has a much better UX in terms of having a more granular permisions around boot since it is a very // common request - ah , that's awesome, i think i remember seeing sth of this sorts when i was going through the guardianproject mailing list. iirc this is something ioerror wanted ├── OrbotMainActivity.java //our wonderful main activity! ├── ProcessSettingsAsyncTask.java //this was just added in 1.0.5.x, but it was meant to help stop the UI blocking while processing settings and prefs //it uses the AsyncTask feature of Android, which seems to work pretty well //for this type of non-time critical function you just want to happen in the background at some point soon-ish ├── SettingsPreferences.java // Settings activity that loads the res/xml/preferences.xml resource up // has some custom event handlng, onActivityResult callback result code's as well // basically meant to tell Orbot activity if critical settings have been modified and whether // those new settings should be applied (like iptables/transproxy changes) ├── TorConstants.java // globals! well, constants! but yeah, just a place to put values we use a lot ├── TorifiedApp.java // object to store a single app's metadata for display in UI and for transproxy process ├── Utils.java // random methods that can be useful, a.k.a. another place to put stuff ├── WizardActivity.java // our original attempt at wizard activity that didn't get far └── WizardHelper.java // the helper class that manages the dialog based wizard ├── service //okay the Service subpackage! │ ├── Api.java //this is more code taken from DroidWall, that needs to be cleaned up and paired down to just what we need it for //this is related to 1.0.5.x changes with how we bundle and install our C binaries (tor, privoxy and iptables) │ ├── ITorService.aidl // the android remote interface definition file; // this is the remote interface which the Orbot activity gets a reference to // and that in the TorService is instantiated as the "binder" │ ├── ITorServiceCallback.aidl // this is the callback interface that the Orbot activity instantiates, and passes // to the ITorService; reverse of ITorService in a sense │ ├── TorBinaryInstaller.java // this handles installation of binaries; uses Api.java; // tied into Wizard as well │ ├── TorServiceConstants.java // reusable constants for just the Service package │ ├── TorService.java // the main might powerful service class; Orbot and TorService are the front and backends of this whole app // should run as a remote service, but the manifest doesn't seem to indicate that at the moment │ ├── TorServiceUtils.java //utility methods for the service; specificaly check for root and tools for finding processID of background binaries │ └── TorTransProxy.java // all the code for iptables transproxying management