From 67629b0ff719400dcc9d01fd680f08b9c7c69a61 Mon Sep 17 00:00:00 2001 From: "G. Blake Meike" Date: Sat, 15 Oct 2011 13:10:32 -0700 Subject: [PATCH 01/53] First setp to v2 repo --- {03/TestApp => AIDLDemo}/.gitignore | 0 {06/AIDLDemo => AIDLDemo}/AndroidManifest.xml | 0 {03/TestApp => AIDLDemo}/default.properties | 0 .../res/drawable-hdpi/icon.png | Bin .../res/drawable-ldpi/icon.png | Bin .../res/drawable-mdpi/icon.png | Bin {06/AIDLDemo => AIDLDemo}/res/layout/main.xml | 0 {06/AIDLDemo => AIDLDemo}/res/values/strings.xml | 0 .../demo/android/ch06/aidl/client/AIDLDemo.java | 0 .../ch06/aidl/parcelables/ParcelableList.java | 0 .../ch06/aidl/parcelables/SimpleParcelable.java | 0 .../demo/android/ch06/aidl/service/Path.aidl | 0 .../demo/android/ch06/aidl/service/Path.java | 0 .../demo/android/ch06/aidl/service/PathService.aidl | 0 .../demo/android/ch06/aidl/service/Point.java | 0 .../ch06/aidl/service/SimplePathService.java | 0 .../tools/ide/eclipse/classpath | 0 {06/AIDLDemo => AIDLDemo}/tools/ide/eclipse/project | 0 {06/AIDLDemo => AndroidUIDemo}/.gitignore | 0 .../AndroidManifest.xml | 0 .../default.properties | 0 .../res/drawable-hdpi/icon.png | Bin .../res/drawable-ldpi/icon.png | Bin .../res/drawable-mdpi/icon.png | Bin .../res/layout/main.xml | 0 .../res/values/colors.xml | 0 .../res/values/strings.xml | 0 .../src/com/oreilly/demo/android/ch07/TouchMe.java | 0 .../com/oreilly/demo/android/ch07/model/Dot.java | 0 .../com/oreilly/demo/android/ch07/model/Dots.java | 0 .../com/oreilly/demo/android/ch07/view/DotView.java | 0 .../tools/ide/eclipse/classpath | 0 .../tools/ide/eclipse/project | 0 .../.gitignore | 1 + .../AndroidManifest.xml | 0 .../default.properties | 0 .../res/drawable-hdpi/icon.png | Bin .../res/drawable-ldpi/icon.png | Bin .../res/drawable-mdpi/icon.png | Bin .../res/drawable/cb.png | Bin .../res/drawable/throbber.xml | 0 .../res/drawable/to.png | Bin .../res/layout/main.xml | 0 .../res/values/colors.xml | 0 .../res/values/strings.xml | 0 .../android/apis/graphics/GLSurfaceView.java | 0 .../com/oreilly/demo/android/ch09/TransformIt.java | 0 .../ch09/drawable/HelloAndroidTextDrawable.java | 0 .../ch09/efx/RotationTransitionAnimation.java | 0 .../demo/android/ch09/widget/EffectsWidget.java | 0 .../demo/android/ch09/widget/GLDemoWidget.java | 0 .../android/ch09/widget/TransformedViewWidget.java | 0 .../tools/ide/eclipse/classpath | 0 .../tools/ide/eclipse/project | 0 {06/AsyncTaskDemo => AsyncTaskDemo}/.gitignore | 0 .../AndroidManifest.xml | 0 {06/AIDLDemo => AsyncTaskDemo}/default.properties | 0 .../res/anim/dots.xml | 0 .../res/drawable-hdpi/icon.png | Bin .../res/drawable-ldpi/icon.png | Bin .../res/drawable-mdpi/icon.png | Bin .../res/drawable/dots_f0.png | Bin .../res/drawable/dots_f1.png | Bin .../res/drawable/dots_f2.png | Bin .../res/drawable/dots_f3.png | Bin .../res/drawable/dots_f4.png | Bin .../res/layout/asyncdemo.xml | 0 .../res/layout/asyncdemoprogress.xml | 0 .../res/values/strings.xml | 0 .../oreilly/demo/android/ch06/AsyncTaskDemo.java | 0 .../android/ch06/AsyncTaskDemoWithProgress.java | 0 .../oreilly/demo/android/ch06/AsyncTaskSample.java | 0 .../com/oreilly/demo/android/ch06/game/Game.java | 0 .../oreilly/demo/android/ch06/game/MockGame.java | 0 .../demo/android/ch06/game/PersistentModel.java | 0 .../tools/ide/eclipse/classpath | 0 .../tools/ide/eclipse/project | 0 {06/JSerializable => AudioPlayer}/.gitignore | 0 {14/AudioPlayer => AudioPlayer}/AndroidManifest.xml | 0 {14/AudioPlayer => AudioPlayer}/README.txt | 0 .../default.properties | 0 .../res/drawable-hdpi/icon.png | Bin .../res/drawable-ldpi/icon.png | Bin .../res/drawable-mdpi/icon.png | Bin .../res/drawable-mdpi/pause.png | Bin .../res/drawable-mdpi/play.png | Bin .../res/drawable-mdpi/record.png | Bin .../res/drawable-mdpi/stop.png | Bin .../res/layout/audioplayer.xml | 0 .../res/layout/audioplayerwmediacontrol.xml | 0 .../res/layout/audiorecorder.xml | 0 {14/AudioPlayer => AudioPlayer}/res/layout/main.xml | 0 .../res/layout/videoplayer.xml | 0 .../res/layout/videorecorder.xml | 0 {14/AudioPlayer => AudioPlayer}/res/raw/example.mp3 | Bin .../res/values/strings.xml | 0 .../src/com/oreilly/demo/pa/ch14/AudioPlayer.java | 0 .../demo/pa/ch14/AudioPlayerWAudioTrack.java | 0 .../demo/pa/ch14/AudioPlayerWMediaController.java | 0 .../src/com/oreilly/demo/pa/ch14/AudioRecorder.java | 0 .../demo/pa/ch14/AudioRecorderViaIntent.java | 0 .../demo/pa/ch14/AudioRecorderWAudioRecord.java | 0 .../src/com/oreilly/demo/pa/ch14/MultiMedia.java | 0 .../src/com/oreilly/demo/pa/ch14/VideoPlayer.java | 0 .../src/com/oreilly/demo/pa/ch14/VideoRecorder.java | 0 .../demo/pa/ch14/VideoRecorderViaIntent.java | 0 .../tools/ide/eclipse/README.txt | 0 .../tools/ide/eclipse/classpath | 0 .../tools/ide/eclipse/project | 0 .../ide/eclipse/settings/org.eclipse.jdt.core.prefs | 0 13/README => CH13_README | 0 .../ClientDemo}/.gitignore | 0 .../ClientDemo/AndroidManifest.xml | 0 .../ClientDemo/default.properties | 0 .../ClientDemo}/proguard.cfg | 0 .../ClientDemo}/res/drawable-hdpi/icon.png | Bin .../ClientDemo}/res/drawable-ldpi/icon.png | Bin .../ClientDemo/res/drawable-mdpi}/icon.png | Bin .../ClientDemo/res/layout/account.xml | 0 .../ClientDemo/res/layout/accountadd.xml | 0 .../ClientDemo/res/layout/contact.xml | 0 .../ClientDemo/res/layout/login.xml | 0 .../ClientDemo/res/layout/settings.xml | 0 .../ClientDemo/res/values/strings.xml | 0 .../ClientDemo/res/xml/authenticator.xml | 0 .../ClientDemo/res/xml/contacts.xml | 0 .../ClientDemo/res/xml/syncadapter.xml | 0 .../demo/pa/ch17/account/AccountActivity.java | 0 .../demo/pa/ch17/account/AccountAddActivity.java | 0 .../oreilly/demo/pa/ch17/sync/LoginActivity.java | 0 .../com/oreilly/demo/pa/ch17/sync/NetworkUtil.java | 0 .../src/com/oreilly/demo/pa/ch17/sync/Settings.java | 0 .../ch17/sync/authsync/AuthenticationService.java | 0 .../demo/pa/ch17/sync/authsync/Authenticator.java | 0 .../demo/pa/ch17/sync/authsync/SyncAdapter.java | 0 .../demo/pa/ch17/sync/authsync/SyncService.java | 0 .../demo/pa/ch17/sync/dataobjects/Change.java | 0 .../demo/pa/ch17/sync/dataobjects/ListFriends.java | 0 .../oreilly/demo/pa/ch17/sync/dataobjects/User.java | 0 .../ClientDemo}/tools/ide/eclipse/README.txt | 0 .../ClientDemo}/tools/ide/eclipse/classpath | 0 .../ClientDemo/tools/ide/eclipse/project | 0 .../DemoServer}/.gitignore | 0 {17 => ClientServerDemo}/DemoServer/README.txt | 0 .../DemoServer/config/Config.json | 0 .../DemoServer/config/UsersDB.json | 0 .../DemoServer/config/UsersDB_orig.json | 0 .../DemoServer/lib/commons-codec-1.2.jar | Bin .../DemoServer/lib/commons-httpclient-3.1.jar | Bin .../DemoServer/lib/commons-logging-1.0.4.jar | Bin .../lib/jetty-continuation-7.0.2.v20100331.jar | Bin .../DemoServer/lib/jetty-http-7.0.2.v20100331.jar | Bin .../DemoServer/lib/jetty-io-7.0.2.v20100331.jar | Bin .../lib/jetty-security-7.0.2.v20100331.jar | Bin .../DemoServer/lib/jetty-server-7.0.2.v20100331.jar | Bin .../lib/jetty-servlet-7.0.2.v20100331.jar | Bin .../DemoServer/lib/jetty-util-7.0.2.v20100331.jar | Bin .../DemoServer/lib/json-1.0.0.jar | Bin .../DemoServer/lib/servlet-api-2.5.jar | Bin .../oreilly/demo/pa/ch17/dataobjects/Change.java | 0 .../demo/pa/ch17/dataobjects/ListFriends.java | 0 .../com/oreilly/demo/pa/ch17/dataobjects/User.java | 0 .../src/com/oreilly/demo/pa/ch17/server/Config.java | 0 .../com/oreilly/demo/pa/ch17/server/MainServer.java | 0 .../oreilly/demo/pa/ch17/server/ServerStatic.java | 0 .../oreilly/demo/pa/ch17/server/ServletUtil.java | 0 .../oreilly/demo/pa/ch17/server/data/UsersData.java | 0 .../pa/ch17/server/servlet/AddFriendServlet.java | 0 .../demo/pa/ch17/server/servlet/AddUserServlet.java | 0 .../demo/pa/ch17/server/servlet/BaseServlet.java | 0 .../pa/ch17/server/servlet/DeleteFriendServlet.java | 0 .../pa/ch17/server/servlet/GetFriendsServlet.java | 0 .../pa/ch17/server/servlet/ISHttpServletType.java | 0 .../demo/pa/ch17/server/servlet/LoginServlet.java | 0 .../DemoServer}/tools/ide/eclipse/README.txt | 0 .../DemoServer/tools/ide/eclipse/classpath | 0 .../DemoServer/tools/ide/eclipse/project | 0 .../DemoServer/tools/runserver.sh | 0 {02/FillListTask => FillListTask}/.gitignore | 0 .../default.properties | 0 .../android/ch02/filllisttask/FillListTask.java | 0 .../tools/ide/eclipse/classpath | 0 .../tools/ide/eclipse/project | 0 .../FinchFramework}/.gitignore | 0 .../FinchFramework/AndroidManifest.xml | 0 .../FinchFramework/default.properties | 0 .../lib-src/com/finchframework/finch/Finch.java | 0 .../com/finchframework/finch/FinchApplication.java | 0 .../com/finchframework/finch/rest/FileHandler.java | 0 .../finch/rest/FileHandlerFactory.java | 0 .../finch/rest/RESTfulContentProvider.java | 0 .../com/finchframework/finch/rest/RawResponse.java | 0 .../finchframework/finch/rest/ResponseHandler.java | 0 .../finchframework/finch/rest/UriRequestTask.java | 0 .../finchframework/finch/views/MesgEditText.java | 0 .../FinchFramework/res/anim/flip.xml | 0 .../res/drawable-hdpi/ic_menu_preferences.png | Bin .../FinchFramework}/res/drawable-hdpi/icon.png | Bin .../FinchFramework}/res/drawable-ldpi/icon.png | Bin .../res/drawable-mdpi/ic_menu_preferences.png | Bin .../FinchFramework}/res/drawable-mdpi/icon.png | Bin .../FinchFramework/res/drawable/pine_grosbeak.png | Bin .../FinchFramework/res/layout/animate_activity.xml | 0 .../FinchFramework/res/layout/bt_console.xml | 0 .../FinchFramework/res/layout/checkbox_example.xml | 0 .../FinchFramework/res/layout/custom_title.xml | 0 .../FinchFramework/res/layout/device_list.xml | 0 .../FinchFramework/res/layout/device_name.xml | 0 .../FinchFramework/res/layout/example_layout.xml | 0 .../FinchFramework}/res/layout/main.xml | 0 .../FinchFramework/res/layout/message.xml | 0 .../FinchFramework/res/layout/video_list_item.xml | 0 .../res/layout/video_query_activity.xml | 0 .../res/menu/bt_console_option_menu.xml | 0 .../FinchFramework/res/menu/finch_option_menu.xml | 0 .../FinchFramework/res/menu/finchwelcomemenu.xml | 0 .../FinchFramework/res/raw/yt_query_json.json | 0 .../FinchFramework/res/raw/yt_query_rss.xml | 0 .../FinchFramework/res/values/colors.xml | 0 .../FinchFramework/res/values/dimens.xml | 0 .../FinchFramework/res/values/strings.xml | 0 .../FinchFramework/src/animate/AnimateActivity.java | 0 .../finchframework/bluetooth/BtConsoleActivity.java | 0 .../finchframework/bluetooth/BtHelperHandler.java | 0 .../com/finchframework/bluetooth/BtSPPHelper.java | 0 .../bluetooth/DeviceListActivity.java | 0 .../src/com/finchframework/finch/FinchWelcome.java | 0 .../FinchFramework/tools/ant/build.xml | 0 .../FinchFramework/tools/ide/eclipse/classpath | 0 .../FinchFramework/tools/ide/eclipse/project | 0 .../FinchFrameworkTest}/.gitignore | 0 .../FinchFrameworkTest/AndroidManifest.xml | 0 .../FinchFrameworkTest}/default.properties | 0 .../FinchFrameworkTest}/res/drawable-hdpi/icon.png | Bin .../FinchFrameworkTest}/res/drawable-ldpi/icon.png | Bin .../FinchFrameworkTest}/res/drawable-mdpi/icon.png | Bin .../FinchFrameworkTest}/res/layout/main.xml | 0 .../FinchFrameworkTest/res/values/strings.xml | 0 .../FinchFrameworkTest}/tools/ide/eclipse/classpath | 0 .../FinchFrameworkTest/tools/ide/eclipse/project | 0 {11/FinchLifecycle => FinchLifecycle}/.gitignore | 0 .../AndroidManifest.xml | 0 .../default.properties | 0 {08/SimpleFragment => FinchLifecycle}/proguard.cfg | 0 .../res/drawable-hdpi/icon.png | Bin .../res/drawable-ldpi/icon.png | Bin .../res/drawable-mdpi/icon.png | Bin .../res/layout/fragment_content.xml | 0 .../res/layout/main.xml | 0 .../res/values/strings.xml | 0 .../pa/ch10/finchlifecycle/FinchApplication.java | 0 .../demo/pa/ch10/finchlifecycle/FinchLifecycle.java | 0 .../demo/pa/ch10/finchlifecycle/TestFragment.java | 0 .../tools/ide/eclipse/classpath | 0 .../tools/ide/eclipse/project | 0 .../.gitignore | 0 .../AndroidManifest.xml | 0 .../default.properties | 0 .../libs/android-support-v4.jar | Bin .../proguard.cfg | 0 .../res/drawable-hdpi/icon.png | Bin .../res/drawable-ldpi/icon.png | Bin .../res/drawable-mdpi/icon.png | Bin .../res/layout/fragment_content.xml | 0 .../res/layout/main.xml | 0 .../res/values/strings.xml | 0 .../finchlifecyclebackport/FinchApplication.java | 0 .../ch10/finchlifecyclebackport/FinchLifecycle.java | 0 .../ch10/finchlifecyclebackport/TestFragment.java | 0 .../tools/ide/eclipse/classpath | 0 .../tools/ide/eclipse/project | 0 {12/FinchVideo => FinchVideo}/.gitignore | 0 {12/FinchVideo => FinchVideo}/AndroidManifest.xml | 0 {12/FinchVideo => FinchVideo}/README.txt | 0 {12/FinchVideo => FinchVideo}/default.properties | 0 {12/FinchVideo => FinchVideo}/local.properties | 0 .../res/drawable-hdpi/icon.png | Bin .../res/drawable-ldpi/icon.png | Bin .../res/drawable-mdpi/icon.png | Bin .../res/drawable-mdpi/video_reload.png | Bin {03/TestApp => FinchVideo}/res/drawable/icon.png | Bin .../res/layout/simple_video_activity.xml | 0 .../res/layout/simple_video_list_item.xml | 0 .../res/layout/video_list_item.xml | 0 .../res/layout/video_query_activity.xml | 0 {12/FinchVideo => FinchVideo}/res/values/colors.xml | 0 {12/FinchVideo => FinchVideo}/res/values/dimens.xml | 0 .../res/values/strings.xml | 0 .../src/com/oreilly/demo/pa/finchvideo/Ch12.java | 0 .../demo/pa/finchvideo/FinchVideoActivity.java | 0 .../pa/finchvideo/SimpleFinchVideoActivity.java | 0 .../demo/pa/finchvideo/provider/FinchVideo.java | 0 .../provider/FinchVideoContentProvider.java | 0 .../provider/SimpleFinchVideoContentProvider.java | 0 .../demo/pa/finchvideo/provider/YouTubeHandler.java | 0 {12/FinchVideo => FinchVideo}/tools/ant/build.xml | 0 .../tools/ide/eclipse/classpath | 0 .../tools/ide/eclipse/project | 0 {14/AudioPlayer => JSerializable}/.gitignore | 0 .../AndroidManifest.xml | 0 .../default.properties | 0 .../res/drawable-hdpi/icon.png | Bin .../res/drawable-ldpi}/icon.png | Bin .../res/drawable-mdpi/icon.png | Bin .../res/layout/main.xml | 0 .../res/values/strings.xml | 0 .../com/oreilly/demo/android/ch06/JSerialize.java | 0 .../tools/ide/eclipse/classpath | 0 .../tools/ide/eclipse/project | 0 {16/SensorDemos => MicroJobs}/.gitignore | 0 {10/MicroJobs => MicroJobs}/AndroidManifest.xml | 0 {10/MicroJobs => MicroJobs}/default.properties | 0 .../res/drawable-hdpi/android_tiny_image.png | Bin .../res/drawable-hdpi/browser.png | Bin .../res/drawable-hdpi/icon.png | Bin .../res/drawable-hdpi/icon2.png | Bin .../res/drawable-hdpi/phone.png | Bin .../res/drawable-ldpi/android_tiny_image.png | Bin .../res/drawable-ldpi/browser.png | Bin .../res/drawable-ldpi/icon.png | Bin .../res/drawable-ldpi/icon2.png | Bin .../res/drawable-ldpi/phone.png | Bin .../res/drawable-mdpi/android_tiny_image.png | Bin .../res/drawable-mdpi/browser.png | Bin .../res/drawable-mdpi/icon.png | Bin .../res/drawable-mdpi/icon2.png | Bin .../res/drawable-mdpi/phone.png | Bin {10/MicroJobs => MicroJobs}/res/layout/addjob.xml | 0 {10/MicroJobs => MicroJobs}/res/layout/editjob.xml | 0 {10/MicroJobs => MicroJobs}/res/layout/main.xml | 0 .../res/layout/microjobs_row.xml | 0 .../res/layout/microjobsdetail.xml | 0 .../res/layout/microjobsempdetail.xml | 0 .../res/layout/microjobslist.xml | 0 .../res/raw/media_cmd_line.sql | 0 {10/MicroJobs => MicroJobs}/res/values/strings.xml | 0 .../src/com/oreilly/demo/pa/ch10/AddJob.java | 0 .../src/com/oreilly/demo/pa/ch10/EditJob.java | 0 .../src/com/oreilly/demo/pa/ch10/MicroJobs.java | 0 .../com/oreilly/demo/pa/ch10/MicroJobsDatabase.java | 0 .../com/oreilly/demo/pa/ch10/MicroJobsDetail.java | 0 .../oreilly/demo/pa/ch10/MicroJobsEmpDetail.java | 0 .../src/com/oreilly/demo/pa/ch10/MicroJobsList.java | 0 {10/MicroJobs => MicroJobs}/tools/ant/build.xml | 0 .../tools/ide/eclipse/classpath | 0 .../tools/ide/eclipse/project | 0 .../tools/ide/idea/MicroJobs.iml | 0 .../tools/ide/idea/idea/.name | 0 .../tools/ide/idea/idea/compiler.xml | 0 .../ide/idea/idea/copyright/profiles_settings.xml | 0 .../tools/ide/idea/idea/encodings.xml | 0 .../tools/ide/idea/idea/misc.xml | 0 .../tools/ide/idea/idea/modules.xml | 0 .../tools/ide/idea/idea/uiDesigner.xml | 0 .../tools/ide/idea/idea/vcs.xml | 0 .../tools/ide/idea/idea/workspace.xml | 0 {17/ClientDemo => NDKDemo}/.gitignore | 0 {18/NDKDemo => NDKDemo}/AndroidManifest.xml | 0 {18/NDKDemo => NDKDemo}/README.txt | 0 {18/NDKDemo => NDKDemo}/default.properties | 0 {18/NDKDemo => NDKDemo}/jni/Android.mk | 0 {18/NDKDemo => NDKDemo}/jni/Application.mk | 0 {18/NDKDemo => NDKDemo}/jni/sample.c | 0 {18/NDKDemo => NDKDemo}/jni/sample_nativeactivity.c | 0 .../jni/sample_nativeactivity_opengl.c | 0 {18/NDKDemo => NDKDemo}/jni/samplelib/sample_lib.c | 0 {18/NDKDemo => NDKDemo}/jni/samplelib/sample_lib.h | 0 {17/ClientDemo => NDKDemo}/proguard.cfg | 0 {18/NDKDemo => NDKDemo}/res/drawable-hdpi/icon.png | Bin .../res/drawable-ldpi}/icon.png | Bin .../res/drawable-mdpi}/icon.png | Bin {18/NDKDemo => NDKDemo}/res/layout/main.xml | 0 {18/NDKDemo => NDKDemo}/res/layout/sample.xml | 0 {18/NDKDemo => NDKDemo}/res/values/strings.xml | 0 .../src/com/oreilly/demo/pa/ch18/NDKApp.java | 0 .../pa/ch18/SampleActivityWithNativeMethods.java | 0 .../tools/ide/eclipse/README.txt | 0 .../tools/ide/eclipse/classpath | 0 {18/NDKDemo => NDKDemo}/tools/ide/eclipse/project | 0 {17/DemoServer => SensorDemos}/.gitignore | 0 {16/SensorDemos => SensorDemos}/AndroidManifest.xml | 0 {16/SensorDemos => SensorDemos}/README.txt | 0 {16/SensorDemos => SensorDemos}/default.properties | 0 {18/NDKDemo => SensorDemos}/proguard.cfg | 0 .../res/drawable-hdpi/icon.png | Bin .../res/drawable-ldpi}/icon.png | Bin .../res/drawable-mdpi}/icon.png | Bin .../res/layout/gesture.xml | 0 .../res/layout/gestureadd.xml | 0 {16/SensorDemos => SensorDemos}/res/layout/main.xml | 0 {16/SensorDemos => SensorDemos}/res/layout/nfc.xml | 0 .../res/layout/nfc233.xml | 0 .../res/layout/sensoraccel.xml | 0 .../res/layout/sensorgravity.xml | 0 .../res/layout/sensorgyro.xml | 0 .../res/layout/sensorlight.xml | 0 .../res/layout/sensorlinearacel.xml | 0 .../res/layout/sensormagnetic.xml | 0 .../res/layout/sensorpressure.xml | 0 .../res/layout/sensorproximity.xml | 0 .../res/layout/sensorrotationvector.xml | 0 .../res/layout/sensortemp.xml | 0 .../res/values/strings.xml | 0 .../res/xml/nfcfilter.xml | 0 .../src/com/oreilly/demo/pa/ch16/Accessibility.java | 0 .../src/com/oreilly/demo/pa/ch16/GestureAdd.java | 0 .../src/com/oreilly/demo/pa/ch16/GestureView.java | 0 .../src/com/oreilly/demo/pa/ch16/MainActivity.java | 0 .../src/com/oreilly/demo/pa/ch16/NFC.java | 0 .../src/com/oreilly/demo/pa/ch16/NFC233.java | 0 .../src/com/oreilly/demo/pa/ch16/SensorAccel.java | 0 .../src/com/oreilly/demo/pa/ch16/SensorGravity.java | 0 .../src/com/oreilly/demo/pa/ch16/SensorGyro.java | 0 .../src/com/oreilly/demo/pa/ch16/SensorLight.java | 0 .../demo/pa/ch16/SensorLinearAcceleration.java | 0 .../com/oreilly/demo/pa/ch16/SensorMagnetic.java | 0 .../com/oreilly/demo/pa/ch16/SensorPressure.java | 0 .../com/oreilly/demo/pa/ch16/SensorProximity.java | 0 .../oreilly/demo/pa/ch16/SensorRotationVector.java | 0 .../src/com/oreilly/demo/pa/ch16/SensorTemp.java | 0 .../tools/ide/eclipse/README.txt | 0 .../tools/ide/eclipse/classpath | 0 .../tools/ide/eclipse/project | 0 {02/SharedListTask => SharedListTask}/.gitignore | 0 .../default.properties | 0 .../android/ch02/sharedlisttask/SharedListTask.java | 0 .../tools/ide/eclipse/classpath | 0 .../tools/ide/eclipse/project | 0 {18/NDKDemo => SimpleFragment}/.gitignore | 0 .../AndroidManifest.xml | 0 .../default.properties | 0 .../proguard.cfg | 0 .../res/drawable-hdpi/icon.png | Bin .../res/drawable-ldpi/icon.png | Bin .../res/drawable-mdpi/icon.png | Bin .../res/layout/date_time.xml | 0 .../res/layout/main.xml | 0 .../res/values/colors.xml | 0 .../res/values/strings.xml | 0 .../demo/android/ch08/simplefragment/DateTime.java | 0 .../android/ch08/simplefragment/SimpleFragment.java | 0 .../tools/ide/eclipse/classpath | 0 .../tools/ide/eclipse/project | 0 {framework/FinchFramework => TestApp}/.gitignore | 0 {03/TestApp => TestApp}/AndroidManifest.xml | 0 {14/AudioPlayer => TestApp}/default.properties | 0 {12/FinchVideo => TestApp}/res/drawable/icon.png | Bin {03/TestApp => TestApp}/res/layout/main.xml | 0 {03/TestApp => TestApp}/res/values/strings.xml | 0 .../oreilly/demo/pa/ch03/testapp/TestActivity.java | 0 .../demo/pa/ch03/testapp/TestBroadcastReceiver.java | 0 .../oreilly/demo/pa/ch03/testapp/TestProvider.java | 0 .../oreilly/demo/pa/ch03/testapp/TestService.java | 0 .../tools/ide/eclipse/classpath | 0 {03/TestApp => TestApp}/tools/ide/eclipse/project | 0 455 files changed, 1 insertion(+) rename {03/TestApp => AIDLDemo}/.gitignore (100%) rename {06/AIDLDemo => AIDLDemo}/AndroidManifest.xml (100%) rename {03/TestApp => AIDLDemo}/default.properties (100%) rename {06/AIDLDemo => AIDLDemo}/res/drawable-hdpi/icon.png (100%) rename {06/AIDLDemo => AIDLDemo}/res/drawable-ldpi/icon.png (100%) rename {06/AIDLDemo => AIDLDemo}/res/drawable-mdpi/icon.png (100%) rename {06/AIDLDemo => AIDLDemo}/res/layout/main.xml (100%) rename {06/AIDLDemo => AIDLDemo}/res/values/strings.xml (100%) rename {06/AIDLDemo => AIDLDemo}/src/com/oreilly/demo/android/ch06/aidl/client/AIDLDemo.java (100%) rename {06/AIDLDemo => AIDLDemo}/src/com/oreilly/demo/android/ch06/aidl/parcelables/ParcelableList.java (100%) rename {06/AIDLDemo => AIDLDemo}/src/com/oreilly/demo/android/ch06/aidl/parcelables/SimpleParcelable.java (100%) rename {06/AIDLDemo => AIDLDemo}/src/com/oreilly/demo/android/ch06/aidl/service/Path.aidl (100%) rename {06/AIDLDemo => AIDLDemo}/src/com/oreilly/demo/android/ch06/aidl/service/Path.java (100%) rename {06/AIDLDemo => AIDLDemo}/src/com/oreilly/demo/android/ch06/aidl/service/PathService.aidl (100%) rename {06/AIDLDemo => AIDLDemo}/src/com/oreilly/demo/android/ch06/aidl/service/Point.java (100%) rename {06/AIDLDemo => AIDLDemo}/src/com/oreilly/demo/android/ch06/aidl/service/SimplePathService.java (100%) rename {06/AIDLDemo => AIDLDemo}/tools/ide/eclipse/classpath (100%) rename {06/AIDLDemo => AIDLDemo}/tools/ide/eclipse/project (100%) rename {06/AIDLDemo => AndroidUIDemo}/.gitignore (100%) rename {07/AndroidUIDemo => AndroidUIDemo}/AndroidManifest.xml (100%) rename {07/AndroidUIDemo => AndroidUIDemo}/default.properties (100%) rename {06/AsyncTaskDemo => AndroidUIDemo}/res/drawable-hdpi/icon.png (100%) rename {06/AsyncTaskDemo => AndroidUIDemo}/res/drawable-ldpi/icon.png (100%) rename {06/AsyncTaskDemo => AndroidUIDemo}/res/drawable-mdpi/icon.png (100%) rename {07/AndroidUIDemo => AndroidUIDemo}/res/layout/main.xml (100%) rename {07/AndroidUIDemo => AndroidUIDemo}/res/values/colors.xml (100%) rename {07/AndroidUIDemo => AndroidUIDemo}/res/values/strings.xml (100%) rename {07/AndroidUIDemo => AndroidUIDemo}/src/com/oreilly/demo/android/ch07/TouchMe.java (100%) rename {07/AndroidUIDemo => AndroidUIDemo}/src/com/oreilly/demo/android/ch07/model/Dot.java (100%) rename {07/AndroidUIDemo => AndroidUIDemo}/src/com/oreilly/demo/android/ch07/model/Dots.java (100%) rename {07/AndroidUIDemo => AndroidUIDemo}/src/com/oreilly/demo/android/ch07/view/DotView.java (100%) rename {07/AndroidUIDemo => AndroidUIDemo}/tools/ide/eclipse/classpath (100%) rename {07/AndroidUIDemo => AndroidUIDemo}/tools/ide/eclipse/project (100%) rename {framework/FinchFrameworkTest => AndroidViewDemo}/.gitignore (78%) rename {09/AndroidViewDemo => AndroidViewDemo}/AndroidManifest.xml (100%) rename {09/AndroidViewDemo => AndroidViewDemo}/default.properties (100%) rename {06/JSerializable => AndroidViewDemo}/res/drawable-hdpi/icon.png (100%) rename {06/JSerializable => AndroidViewDemo}/res/drawable-ldpi/icon.png (100%) rename {06/JSerializable => AndroidViewDemo}/res/drawable-mdpi/icon.png (100%) rename {09/AndroidViewDemo => AndroidViewDemo}/res/drawable/cb.png (100%) rename {09/AndroidViewDemo => AndroidViewDemo}/res/drawable/throbber.xml (100%) rename {09/AndroidViewDemo => AndroidViewDemo}/res/drawable/to.png (100%) rename {09/AndroidViewDemo => AndroidViewDemo}/res/layout/main.xml (100%) rename {09/AndroidViewDemo => AndroidViewDemo}/res/values/colors.xml (100%) rename {09/AndroidViewDemo => AndroidViewDemo}/res/values/strings.xml (100%) rename {09/AndroidViewDemo => AndroidViewDemo}/src/com/example/android/apis/graphics/GLSurfaceView.java (100%) rename {09/AndroidViewDemo => AndroidViewDemo}/src/com/oreilly/demo/android/ch09/TransformIt.java (100%) rename {09/AndroidViewDemo => AndroidViewDemo}/src/com/oreilly/demo/android/ch09/drawable/HelloAndroidTextDrawable.java (100%) rename {09/AndroidViewDemo => AndroidViewDemo}/src/com/oreilly/demo/android/ch09/efx/RotationTransitionAnimation.java (100%) rename {09/AndroidViewDemo => AndroidViewDemo}/src/com/oreilly/demo/android/ch09/widget/EffectsWidget.java (100%) rename {09/AndroidViewDemo => AndroidViewDemo}/src/com/oreilly/demo/android/ch09/widget/GLDemoWidget.java (100%) rename {09/AndroidViewDemo => AndroidViewDemo}/src/com/oreilly/demo/android/ch09/widget/TransformedViewWidget.java (100%) rename {09/AndroidViewDemo => AndroidViewDemo}/tools/ide/eclipse/classpath (100%) rename {09/AndroidViewDemo => AndroidViewDemo}/tools/ide/eclipse/project (100%) rename {06/AsyncTaskDemo => AsyncTaskDemo}/.gitignore (100%) rename {06/AsyncTaskDemo => AsyncTaskDemo}/AndroidManifest.xml (100%) rename {06/AIDLDemo => AsyncTaskDemo}/default.properties (100%) rename {06/AsyncTaskDemo => AsyncTaskDemo}/res/anim/dots.xml (100%) rename {07/AndroidUIDemo => AsyncTaskDemo}/res/drawable-hdpi/icon.png (100%) rename {07/AndroidUIDemo => AsyncTaskDemo}/res/drawable-ldpi/icon.png (100%) rename {07/AndroidUIDemo => AsyncTaskDemo}/res/drawable-mdpi/icon.png (100%) rename {06/AsyncTaskDemo => AsyncTaskDemo}/res/drawable/dots_f0.png (100%) rename {06/AsyncTaskDemo => AsyncTaskDemo}/res/drawable/dots_f1.png (100%) rename {06/AsyncTaskDemo => AsyncTaskDemo}/res/drawable/dots_f2.png (100%) rename {06/AsyncTaskDemo => AsyncTaskDemo}/res/drawable/dots_f3.png (100%) rename {06/AsyncTaskDemo => AsyncTaskDemo}/res/drawable/dots_f4.png (100%) rename {06/AsyncTaskDemo => AsyncTaskDemo}/res/layout/asyncdemo.xml (100%) rename {06/AsyncTaskDemo => AsyncTaskDemo}/res/layout/asyncdemoprogress.xml (100%) rename {06/AsyncTaskDemo => AsyncTaskDemo}/res/values/strings.xml (100%) rename {06/AsyncTaskDemo => AsyncTaskDemo}/src/com/oreilly/demo/android/ch06/AsyncTaskDemo.java (100%) rename {06/AsyncTaskDemo => AsyncTaskDemo}/src/com/oreilly/demo/android/ch06/AsyncTaskDemoWithProgress.java (100%) rename {06/AsyncTaskDemo => AsyncTaskDemo}/src/com/oreilly/demo/android/ch06/AsyncTaskSample.java (100%) rename {06/AsyncTaskDemo => AsyncTaskDemo}/src/com/oreilly/demo/android/ch06/game/Game.java (100%) rename {06/AsyncTaskDemo => AsyncTaskDemo}/src/com/oreilly/demo/android/ch06/game/MockGame.java (100%) rename {06/AsyncTaskDemo => AsyncTaskDemo}/src/com/oreilly/demo/android/ch06/game/PersistentModel.java (100%) rename {03/TestApp => AsyncTaskDemo}/tools/ide/eclipse/classpath (100%) rename {06/AsyncTaskDemo => AsyncTaskDemo}/tools/ide/eclipse/project (100%) rename {06/JSerializable => AudioPlayer}/.gitignore (100%) rename {14/AudioPlayer => AudioPlayer}/AndroidManifest.xml (100%) rename {14/AudioPlayer => AudioPlayer}/README.txt (100%) rename {06/AsyncTaskDemo => AudioPlayer}/default.properties (100%) rename {08/SimpleFragment => AudioPlayer}/res/drawable-hdpi/icon.png (100%) rename {08/SimpleFragment => AudioPlayer}/res/drawable-ldpi/icon.png (100%) rename {08/SimpleFragment => AudioPlayer}/res/drawable-mdpi/icon.png (100%) rename {14/AudioPlayer => AudioPlayer}/res/drawable-mdpi/pause.png (100%) rename {14/AudioPlayer => AudioPlayer}/res/drawable-mdpi/play.png (100%) rename {14/AudioPlayer => AudioPlayer}/res/drawable-mdpi/record.png (100%) rename {14/AudioPlayer => AudioPlayer}/res/drawable-mdpi/stop.png (100%) rename {14/AudioPlayer => AudioPlayer}/res/layout/audioplayer.xml (100%) rename {14/AudioPlayer => AudioPlayer}/res/layout/audioplayerwmediacontrol.xml (100%) rename {14/AudioPlayer => AudioPlayer}/res/layout/audiorecorder.xml (100%) rename {14/AudioPlayer => AudioPlayer}/res/layout/main.xml (100%) rename {14/AudioPlayer => AudioPlayer}/res/layout/videoplayer.xml (100%) rename {14/AudioPlayer => AudioPlayer}/res/layout/videorecorder.xml (100%) rename {14/AudioPlayer => AudioPlayer}/res/raw/example.mp3 (100%) rename {14/AudioPlayer => AudioPlayer}/res/values/strings.xml (100%) rename {14/AudioPlayer => AudioPlayer}/src/com/oreilly/demo/pa/ch14/AudioPlayer.java (100%) rename {14/AudioPlayer => AudioPlayer}/src/com/oreilly/demo/pa/ch14/AudioPlayerWAudioTrack.java (100%) rename {14/AudioPlayer => AudioPlayer}/src/com/oreilly/demo/pa/ch14/AudioPlayerWMediaController.java (100%) rename {14/AudioPlayer => AudioPlayer}/src/com/oreilly/demo/pa/ch14/AudioRecorder.java (100%) rename {14/AudioPlayer => AudioPlayer}/src/com/oreilly/demo/pa/ch14/AudioRecorderViaIntent.java (100%) rename {14/AudioPlayer => AudioPlayer}/src/com/oreilly/demo/pa/ch14/AudioRecorderWAudioRecord.java (100%) rename {14/AudioPlayer => AudioPlayer}/src/com/oreilly/demo/pa/ch14/MultiMedia.java (100%) rename {14/AudioPlayer => AudioPlayer}/src/com/oreilly/demo/pa/ch14/VideoPlayer.java (100%) rename {14/AudioPlayer => AudioPlayer}/src/com/oreilly/demo/pa/ch14/VideoRecorder.java (100%) rename {14/AudioPlayer => AudioPlayer}/src/com/oreilly/demo/pa/ch14/VideoRecorderViaIntent.java (100%) rename {14/AudioPlayer => AudioPlayer}/tools/ide/eclipse/README.txt (100%) rename {06/JSerializable => AudioPlayer}/tools/ide/eclipse/classpath (100%) rename {14/AudioPlayer => AudioPlayer}/tools/ide/eclipse/project (100%) rename {14/AudioPlayer => AudioPlayer}/tools/ide/eclipse/settings/org.eclipse.jdt.core.prefs (100%) rename 13/README => CH13_README (100%) rename {07/AndroidUIDemo => ClientServerDemo/ClientDemo}/.gitignore (100%) rename {17 => ClientServerDemo}/ClientDemo/AndroidManifest.xml (100%) rename {17 => ClientServerDemo}/ClientDemo/default.properties (100%) rename {16/SensorDemos => ClientServerDemo/ClientDemo}/proguard.cfg (100%) rename {09/AndroidViewDemo => ClientServerDemo/ClientDemo}/res/drawable-hdpi/icon.png (100%) rename {09/AndroidViewDemo => ClientServerDemo/ClientDemo}/res/drawable-ldpi/icon.png (100%) rename {10/MicroJobs/res/drawable-ldpi => ClientServerDemo/ClientDemo/res/drawable-mdpi}/icon.png (100%) rename {17 => ClientServerDemo}/ClientDemo/res/layout/account.xml (100%) rename {17 => ClientServerDemo}/ClientDemo/res/layout/accountadd.xml (100%) rename {17 => ClientServerDemo}/ClientDemo/res/layout/contact.xml (100%) rename {17 => ClientServerDemo}/ClientDemo/res/layout/login.xml (100%) rename {17 => ClientServerDemo}/ClientDemo/res/layout/settings.xml (100%) rename {17 => ClientServerDemo}/ClientDemo/res/values/strings.xml (100%) rename {17 => ClientServerDemo}/ClientDemo/res/xml/authenticator.xml (100%) rename {17 => ClientServerDemo}/ClientDemo/res/xml/contacts.xml (100%) rename {17 => ClientServerDemo}/ClientDemo/res/xml/syncadapter.xml (100%) rename {17 => ClientServerDemo}/ClientDemo/src/com/oreilly/demo/pa/ch17/account/AccountActivity.java (100%) rename {17 => ClientServerDemo}/ClientDemo/src/com/oreilly/demo/pa/ch17/account/AccountAddActivity.java (100%) rename {17 => ClientServerDemo}/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/LoginActivity.java (100%) rename {17 => ClientServerDemo}/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/NetworkUtil.java (100%) rename {17 => ClientServerDemo}/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/Settings.java (100%) rename {17 => ClientServerDemo}/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/authsync/AuthenticationService.java (100%) rename {17 => ClientServerDemo}/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/authsync/Authenticator.java (100%) rename {17 => ClientServerDemo}/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/authsync/SyncAdapter.java (100%) rename {17 => ClientServerDemo}/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/authsync/SyncService.java (100%) rename {17 => ClientServerDemo}/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/dataobjects/Change.java (100%) rename {17 => ClientServerDemo}/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/dataobjects/ListFriends.java (100%) rename {17 => ClientServerDemo}/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/dataobjects/User.java (100%) rename {16/SensorDemos => ClientServerDemo/ClientDemo}/tools/ide/eclipse/README.txt (100%) rename {08/SimpleFragment => ClientServerDemo/ClientDemo}/tools/ide/eclipse/classpath (100%) rename {17 => ClientServerDemo}/ClientDemo/tools/ide/eclipse/project (100%) rename {08/SimpleFragment => ClientServerDemo/DemoServer}/.gitignore (100%) rename {17 => ClientServerDemo}/DemoServer/README.txt (100%) rename {17 => ClientServerDemo}/DemoServer/config/Config.json (100%) rename {17 => ClientServerDemo}/DemoServer/config/UsersDB.json (100%) rename {17 => ClientServerDemo}/DemoServer/config/UsersDB_orig.json (100%) rename {17 => ClientServerDemo}/DemoServer/lib/commons-codec-1.2.jar (100%) rename {17 => ClientServerDemo}/DemoServer/lib/commons-httpclient-3.1.jar (100%) rename {17 => ClientServerDemo}/DemoServer/lib/commons-logging-1.0.4.jar (100%) rename {17 => ClientServerDemo}/DemoServer/lib/jetty-continuation-7.0.2.v20100331.jar (100%) rename {17 => ClientServerDemo}/DemoServer/lib/jetty-http-7.0.2.v20100331.jar (100%) rename {17 => ClientServerDemo}/DemoServer/lib/jetty-io-7.0.2.v20100331.jar (100%) rename {17 => ClientServerDemo}/DemoServer/lib/jetty-security-7.0.2.v20100331.jar (100%) rename {17 => ClientServerDemo}/DemoServer/lib/jetty-server-7.0.2.v20100331.jar (100%) rename {17 => ClientServerDemo}/DemoServer/lib/jetty-servlet-7.0.2.v20100331.jar (100%) rename {17 => ClientServerDemo}/DemoServer/lib/jetty-util-7.0.2.v20100331.jar (100%) rename {17 => ClientServerDemo}/DemoServer/lib/json-1.0.0.jar (100%) rename {17 => ClientServerDemo}/DemoServer/lib/servlet-api-2.5.jar (100%) rename {17 => ClientServerDemo}/DemoServer/src/com/oreilly/demo/pa/ch17/dataobjects/Change.java (100%) rename {17 => ClientServerDemo}/DemoServer/src/com/oreilly/demo/pa/ch17/dataobjects/ListFriends.java (100%) rename {17 => ClientServerDemo}/DemoServer/src/com/oreilly/demo/pa/ch17/dataobjects/User.java (100%) rename {17 => ClientServerDemo}/DemoServer/src/com/oreilly/demo/pa/ch17/server/Config.java (100%) rename {17 => ClientServerDemo}/DemoServer/src/com/oreilly/demo/pa/ch17/server/MainServer.java (100%) rename {17 => ClientServerDemo}/DemoServer/src/com/oreilly/demo/pa/ch17/server/ServerStatic.java (100%) rename {17 => ClientServerDemo}/DemoServer/src/com/oreilly/demo/pa/ch17/server/ServletUtil.java (100%) rename {17 => ClientServerDemo}/DemoServer/src/com/oreilly/demo/pa/ch17/server/data/UsersData.java (100%) rename {17 => ClientServerDemo}/DemoServer/src/com/oreilly/demo/pa/ch17/server/servlet/AddFriendServlet.java (100%) rename {17 => ClientServerDemo}/DemoServer/src/com/oreilly/demo/pa/ch17/server/servlet/AddUserServlet.java (100%) rename {17 => ClientServerDemo}/DemoServer/src/com/oreilly/demo/pa/ch17/server/servlet/BaseServlet.java (100%) rename {17 => ClientServerDemo}/DemoServer/src/com/oreilly/demo/pa/ch17/server/servlet/DeleteFriendServlet.java (100%) rename {17 => ClientServerDemo}/DemoServer/src/com/oreilly/demo/pa/ch17/server/servlet/GetFriendsServlet.java (100%) rename {17 => ClientServerDemo}/DemoServer/src/com/oreilly/demo/pa/ch17/server/servlet/ISHttpServletType.java (100%) rename {17 => ClientServerDemo}/DemoServer/src/com/oreilly/demo/pa/ch17/server/servlet/LoginServlet.java (100%) rename {17/ClientDemo => ClientServerDemo/DemoServer}/tools/ide/eclipse/README.txt (100%) rename {17 => ClientServerDemo}/DemoServer/tools/ide/eclipse/classpath (100%) rename {17 => ClientServerDemo}/DemoServer/tools/ide/eclipse/project (100%) rename {17 => ClientServerDemo}/DemoServer/tools/runserver.sh (100%) rename {02/FillListTask => FillListTask}/.gitignore (100%) rename {02/FillListTask => FillListTask}/default.properties (100%) rename {02/FillListTask => FillListTask}/src/com/oreilly/demo/android/ch02/filllisttask/FillListTask.java (100%) rename {02/FillListTask => FillListTask}/tools/ide/eclipse/classpath (100%) rename {02/FillListTask => FillListTask}/tools/ide/eclipse/project (100%) rename {09/AndroidViewDemo => FinchFramework/FinchFramework}/.gitignore (100%) rename {framework => FinchFramework}/FinchFramework/AndroidManifest.xml (100%) rename {framework => FinchFramework}/FinchFramework/default.properties (100%) rename {framework => FinchFramework}/FinchFramework/lib-src/com/finchframework/finch/Finch.java (100%) rename {framework => FinchFramework}/FinchFramework/lib-src/com/finchframework/finch/FinchApplication.java (100%) rename {framework => FinchFramework}/FinchFramework/lib-src/com/finchframework/finch/rest/FileHandler.java (100%) rename {framework => FinchFramework}/FinchFramework/lib-src/com/finchframework/finch/rest/FileHandlerFactory.java (100%) rename {framework => FinchFramework}/FinchFramework/lib-src/com/finchframework/finch/rest/RESTfulContentProvider.java (100%) rename {framework => FinchFramework}/FinchFramework/lib-src/com/finchframework/finch/rest/RawResponse.java (100%) rename {framework => FinchFramework}/FinchFramework/lib-src/com/finchframework/finch/rest/ResponseHandler.java (100%) rename {framework => FinchFramework}/FinchFramework/lib-src/com/finchframework/finch/rest/UriRequestTask.java (100%) rename {framework => FinchFramework}/FinchFramework/lib-src/com/finchframework/finch/views/MesgEditText.java (100%) rename {framework => FinchFramework}/FinchFramework/res/anim/flip.xml (100%) rename {framework => FinchFramework}/FinchFramework/res/drawable-hdpi/ic_menu_preferences.png (100%) rename {10/MicroJobs => FinchFramework/FinchFramework}/res/drawable-hdpi/icon.png (100%) rename {11/FinchLifecycle => FinchFramework/FinchFramework}/res/drawable-ldpi/icon.png (100%) rename {framework => FinchFramework}/FinchFramework/res/drawable-mdpi/ic_menu_preferences.png (100%) rename {09/AndroidViewDemo => FinchFramework/FinchFramework}/res/drawable-mdpi/icon.png (100%) rename {framework => FinchFramework}/FinchFramework/res/drawable/pine_grosbeak.png (100%) rename {framework => FinchFramework}/FinchFramework/res/layout/animate_activity.xml (100%) rename {framework => FinchFramework}/FinchFramework/res/layout/bt_console.xml (100%) rename {framework => FinchFramework}/FinchFramework/res/layout/checkbox_example.xml (100%) rename {framework => FinchFramework}/FinchFramework/res/layout/custom_title.xml (100%) rename {framework => FinchFramework}/FinchFramework/res/layout/device_list.xml (100%) rename {framework => FinchFramework}/FinchFramework/res/layout/device_name.xml (100%) rename {framework => FinchFramework}/FinchFramework/res/layout/example_layout.xml (100%) rename {06/JSerializable => FinchFramework/FinchFramework}/res/layout/main.xml (100%) rename {framework => FinchFramework}/FinchFramework/res/layout/message.xml (100%) rename {framework => FinchFramework}/FinchFramework/res/layout/video_list_item.xml (100%) rename {framework => FinchFramework}/FinchFramework/res/layout/video_query_activity.xml (100%) rename {framework => FinchFramework}/FinchFramework/res/menu/bt_console_option_menu.xml (100%) rename {framework => FinchFramework}/FinchFramework/res/menu/finch_option_menu.xml (100%) rename {framework => FinchFramework}/FinchFramework/res/menu/finchwelcomemenu.xml (100%) rename {framework => FinchFramework}/FinchFramework/res/raw/yt_query_json.json (100%) rename {framework => FinchFramework}/FinchFramework/res/raw/yt_query_rss.xml (100%) rename {framework => FinchFramework}/FinchFramework/res/values/colors.xml (100%) rename {framework => FinchFramework}/FinchFramework/res/values/dimens.xml (100%) rename {framework => FinchFramework}/FinchFramework/res/values/strings.xml (100%) rename {framework => FinchFramework}/FinchFramework/src/animate/AnimateActivity.java (100%) rename {framework => FinchFramework}/FinchFramework/src/com/finchframework/bluetooth/BtConsoleActivity.java (100%) rename {framework => FinchFramework}/FinchFramework/src/com/finchframework/bluetooth/BtHelperHandler.java (100%) rename {framework => FinchFramework}/FinchFramework/src/com/finchframework/bluetooth/BtSPPHelper.java (100%) rename {framework => FinchFramework}/FinchFramework/src/com/finchframework/bluetooth/DeviceListActivity.java (100%) rename {framework => FinchFramework}/FinchFramework/src/com/finchframework/finch/FinchWelcome.java (100%) rename {framework => FinchFramework}/FinchFramework/tools/ant/build.xml (100%) rename {framework => FinchFramework}/FinchFramework/tools/ide/eclipse/classpath (100%) rename {framework => FinchFramework}/FinchFramework/tools/ide/eclipse/project (100%) rename {10/MicroJobs => FinchFramework/FinchFrameworkTest}/.gitignore (100%) rename {framework => FinchFramework}/FinchFrameworkTest/AndroidManifest.xml (100%) rename {02/SharedListTask => FinchFramework/FinchFrameworkTest}/default.properties (100%) rename {11/FinchLifecycle => FinchFramework/FinchFrameworkTest}/res/drawable-hdpi/icon.png (100%) rename {11/FinchLifecycleBackport => FinchFramework/FinchFrameworkTest}/res/drawable-ldpi/icon.png (100%) rename {10/MicroJobs => FinchFramework/FinchFrameworkTest}/res/drawable-mdpi/icon.png (100%) rename {framework/FinchFramework => FinchFramework/FinchFrameworkTest}/res/layout/main.xml (100%) rename {framework => FinchFramework}/FinchFrameworkTest/res/values/strings.xml (100%) rename {10/MicroJobs => FinchFramework/FinchFrameworkTest}/tools/ide/eclipse/classpath (100%) rename {framework => FinchFramework}/FinchFrameworkTest/tools/ide/eclipse/project (100%) rename {11/FinchLifecycle => FinchLifecycle}/.gitignore (100%) rename {11/FinchLifecycle => FinchLifecycle}/AndroidManifest.xml (100%) rename {11/FinchLifecycle => FinchLifecycle}/default.properties (100%) rename {08/SimpleFragment => FinchLifecycle}/proguard.cfg (100%) rename {11/FinchLifecycleBackport => FinchLifecycle}/res/drawable-hdpi/icon.png (100%) rename {12/FinchVideo => FinchLifecycle}/res/drawable-ldpi/icon.png (100%) rename {11/FinchLifecycle => FinchLifecycle}/res/drawable-mdpi/icon.png (100%) rename {11/FinchLifecycle => FinchLifecycle}/res/layout/fragment_content.xml (100%) rename {11/FinchLifecycle => FinchLifecycle}/res/layout/main.xml (100%) rename {11/FinchLifecycle => FinchLifecycle}/res/values/strings.xml (100%) rename {11/FinchLifecycle => FinchLifecycle}/src/com/oreilly/demo/pa/ch10/finchlifecycle/FinchApplication.java (100%) rename {11/FinchLifecycle => FinchLifecycle}/src/com/oreilly/demo/pa/ch10/finchlifecycle/FinchLifecycle.java (100%) rename {11/FinchLifecycle => FinchLifecycle}/src/com/oreilly/demo/pa/ch10/finchlifecycle/TestFragment.java (100%) rename {11/FinchLifecycle => FinchLifecycle}/tools/ide/eclipse/classpath (100%) rename {11/FinchLifecycle => FinchLifecycle}/tools/ide/eclipse/project (100%) rename {11/FinchLifecycleBackport => FinchLifecycleBackport}/.gitignore (100%) rename {11/FinchLifecycleBackport => FinchLifecycleBackport}/AndroidManifest.xml (100%) rename {11/FinchLifecycleBackport => FinchLifecycleBackport}/default.properties (100%) rename {11/FinchLifecycleBackport => FinchLifecycleBackport}/libs/android-support-v4.jar (100%) rename {11/FinchLifecycle => FinchLifecycleBackport}/proguard.cfg (100%) rename {12/FinchVideo => FinchLifecycleBackport}/res/drawable-hdpi/icon.png (100%) rename {14/AudioPlayer => FinchLifecycleBackport}/res/drawable-ldpi/icon.png (100%) rename {11/FinchLifecycleBackport => FinchLifecycleBackport}/res/drawable-mdpi/icon.png (100%) rename {11/FinchLifecycleBackport => FinchLifecycleBackport}/res/layout/fragment_content.xml (100%) rename {11/FinchLifecycleBackport => FinchLifecycleBackport}/res/layout/main.xml (100%) rename {11/FinchLifecycleBackport => FinchLifecycleBackport}/res/values/strings.xml (100%) rename {11/FinchLifecycleBackport => FinchLifecycleBackport}/src/com/oreilly/demo/pa/ch10/finchlifecyclebackport/FinchApplication.java (100%) rename {11/FinchLifecycleBackport => FinchLifecycleBackport}/src/com/oreilly/demo/pa/ch10/finchlifecyclebackport/FinchLifecycle.java (100%) rename {11/FinchLifecycleBackport => FinchLifecycleBackport}/src/com/oreilly/demo/pa/ch10/finchlifecyclebackport/TestFragment.java (100%) rename {11/FinchLifecycleBackport => FinchLifecycleBackport}/tools/ide/eclipse/classpath (100%) rename {11/FinchLifecycleBackport => FinchLifecycleBackport}/tools/ide/eclipse/project (100%) rename {12/FinchVideo => FinchVideo}/.gitignore (100%) rename {12/FinchVideo => FinchVideo}/AndroidManifest.xml (100%) rename {12/FinchVideo => FinchVideo}/README.txt (100%) rename {12/FinchVideo => FinchVideo}/default.properties (100%) rename {12/FinchVideo => FinchVideo}/local.properties (100%) rename {14/AudioPlayer => FinchVideo}/res/drawable-hdpi/icon.png (100%) rename {16/SensorDemos => FinchVideo}/res/drawable-ldpi/icon.png (100%) rename {12/FinchVideo => FinchVideo}/res/drawable-mdpi/icon.png (100%) rename {12/FinchVideo => FinchVideo}/res/drawable-mdpi/video_reload.png (100%) rename {03/TestApp => FinchVideo}/res/drawable/icon.png (100%) rename {12/FinchVideo => FinchVideo}/res/layout/simple_video_activity.xml (100%) rename {12/FinchVideo => FinchVideo}/res/layout/simple_video_list_item.xml (100%) rename {12/FinchVideo => FinchVideo}/res/layout/video_list_item.xml (100%) rename {12/FinchVideo => FinchVideo}/res/layout/video_query_activity.xml (100%) rename {12/FinchVideo => FinchVideo}/res/values/colors.xml (100%) rename {12/FinchVideo => FinchVideo}/res/values/dimens.xml (100%) rename {12/FinchVideo => FinchVideo}/res/values/strings.xml (100%) rename {12/FinchVideo => FinchVideo}/src/com/oreilly/demo/pa/finchvideo/Ch12.java (100%) rename {12/FinchVideo => FinchVideo}/src/com/oreilly/demo/pa/finchvideo/FinchVideoActivity.java (100%) rename {12/FinchVideo => FinchVideo}/src/com/oreilly/demo/pa/finchvideo/SimpleFinchVideoActivity.java (100%) rename {12/FinchVideo => FinchVideo}/src/com/oreilly/demo/pa/finchvideo/provider/FinchVideo.java (100%) rename {12/FinchVideo => FinchVideo}/src/com/oreilly/demo/pa/finchvideo/provider/FinchVideoContentProvider.java (100%) rename {12/FinchVideo => FinchVideo}/src/com/oreilly/demo/pa/finchvideo/provider/SimpleFinchVideoContentProvider.java (100%) rename {12/FinchVideo => FinchVideo}/src/com/oreilly/demo/pa/finchvideo/provider/YouTubeHandler.java (100%) rename {12/FinchVideo => FinchVideo}/tools/ant/build.xml (100%) rename {12/FinchVideo => FinchVideo}/tools/ide/eclipse/classpath (100%) rename {12/FinchVideo => FinchVideo}/tools/ide/eclipse/project (100%) rename {14/AudioPlayer => JSerializable}/.gitignore (100%) rename {06/JSerializable => JSerializable}/AndroidManifest.xml (100%) rename {06/JSerializable => JSerializable}/default.properties (100%) rename {16/SensorDemos => JSerializable}/res/drawable-hdpi/icon.png (100%) rename {16/SensorDemos/res/drawable-mdpi => JSerializable/res/drawable-ldpi}/icon.png (100%) rename {14/AudioPlayer => JSerializable}/res/drawable-mdpi/icon.png (100%) rename {framework/FinchFrameworkTest => JSerializable}/res/layout/main.xml (100%) rename {06/JSerializable => JSerializable}/res/values/strings.xml (100%) rename {06/JSerializable => JSerializable}/src/com/oreilly/demo/android/ch06/JSerialize.java (100%) rename {14/AudioPlayer => JSerializable}/tools/ide/eclipse/classpath (100%) rename {06/JSerializable => JSerializable}/tools/ide/eclipse/project (100%) rename {16/SensorDemos => MicroJobs}/.gitignore (100%) rename {10/MicroJobs => MicroJobs}/AndroidManifest.xml (100%) rename {10/MicroJobs => MicroJobs}/default.properties (100%) rename {10/MicroJobs => MicroJobs}/res/drawable-hdpi/android_tiny_image.png (100%) rename {10/MicroJobs => MicroJobs}/res/drawable-hdpi/browser.png (100%) rename {17/ClientDemo => MicroJobs}/res/drawable-hdpi/icon.png (100%) rename {10/MicroJobs => MicroJobs}/res/drawable-hdpi/icon2.png (100%) rename {10/MicroJobs => MicroJobs}/res/drawable-hdpi/phone.png (100%) rename {10/MicroJobs => MicroJobs}/res/drawable-ldpi/android_tiny_image.png (100%) rename {10/MicroJobs => MicroJobs}/res/drawable-ldpi/browser.png (100%) rename {17/ClientDemo => MicroJobs}/res/drawable-ldpi/icon.png (100%) rename {10/MicroJobs => MicroJobs}/res/drawable-ldpi/icon2.png (100%) rename {10/MicroJobs => MicroJobs}/res/drawable-ldpi/phone.png (100%) rename {10/MicroJobs => MicroJobs}/res/drawable-mdpi/android_tiny_image.png (100%) rename {10/MicroJobs => MicroJobs}/res/drawable-mdpi/browser.png (100%) rename {framework/FinchFramework => MicroJobs}/res/drawable-mdpi/icon.png (100%) rename {10/MicroJobs => MicroJobs}/res/drawable-mdpi/icon2.png (100%) rename {10/MicroJobs => MicroJobs}/res/drawable-mdpi/phone.png (100%) rename {10/MicroJobs => MicroJobs}/res/layout/addjob.xml (100%) rename {10/MicroJobs => MicroJobs}/res/layout/editjob.xml (100%) rename {10/MicroJobs => MicroJobs}/res/layout/main.xml (100%) rename {10/MicroJobs => MicroJobs}/res/layout/microjobs_row.xml (100%) rename {10/MicroJobs => MicroJobs}/res/layout/microjobsdetail.xml (100%) rename {10/MicroJobs => MicroJobs}/res/layout/microjobsempdetail.xml (100%) rename {10/MicroJobs => MicroJobs}/res/layout/microjobslist.xml (100%) rename {10/MicroJobs => MicroJobs}/res/raw/media_cmd_line.sql (100%) rename {10/MicroJobs => MicroJobs}/res/values/strings.xml (100%) rename {10/MicroJobs => MicroJobs}/src/com/oreilly/demo/pa/ch10/AddJob.java (100%) rename {10/MicroJobs => MicroJobs}/src/com/oreilly/demo/pa/ch10/EditJob.java (100%) rename {10/MicroJobs => MicroJobs}/src/com/oreilly/demo/pa/ch10/MicroJobs.java (100%) rename {10/MicroJobs => MicroJobs}/src/com/oreilly/demo/pa/ch10/MicroJobsDatabase.java (100%) rename {10/MicroJobs => MicroJobs}/src/com/oreilly/demo/pa/ch10/MicroJobsDetail.java (100%) rename {10/MicroJobs => MicroJobs}/src/com/oreilly/demo/pa/ch10/MicroJobsEmpDetail.java (100%) rename {10/MicroJobs => MicroJobs}/src/com/oreilly/demo/pa/ch10/MicroJobsList.java (100%) rename {10/MicroJobs => MicroJobs}/tools/ant/build.xml (100%) rename {16/SensorDemos => MicroJobs}/tools/ide/eclipse/classpath (100%) rename {10/MicroJobs => MicroJobs}/tools/ide/eclipse/project (100%) rename {10/MicroJobs => MicroJobs}/tools/ide/idea/MicroJobs.iml (100%) rename {10/MicroJobs => MicroJobs}/tools/ide/idea/idea/.name (100%) rename {10/MicroJobs => MicroJobs}/tools/ide/idea/idea/compiler.xml (100%) rename {10/MicroJobs => MicroJobs}/tools/ide/idea/idea/copyright/profiles_settings.xml (100%) rename {10/MicroJobs => MicroJobs}/tools/ide/idea/idea/encodings.xml (100%) rename {10/MicroJobs => MicroJobs}/tools/ide/idea/idea/misc.xml (100%) rename {10/MicroJobs => MicroJobs}/tools/ide/idea/idea/modules.xml (100%) rename {10/MicroJobs => MicroJobs}/tools/ide/idea/idea/uiDesigner.xml (100%) rename {10/MicroJobs => MicroJobs}/tools/ide/idea/idea/vcs.xml (100%) rename {10/MicroJobs => MicroJobs}/tools/ide/idea/idea/workspace.xml (100%) rename {17/ClientDemo => NDKDemo}/.gitignore (100%) rename {18/NDKDemo => NDKDemo}/AndroidManifest.xml (100%) rename {18/NDKDemo => NDKDemo}/README.txt (100%) rename {18/NDKDemo => NDKDemo}/default.properties (100%) rename {18/NDKDemo => NDKDemo}/jni/Android.mk (100%) rename {18/NDKDemo => NDKDemo}/jni/Application.mk (100%) rename {18/NDKDemo => NDKDemo}/jni/sample.c (100%) rename {18/NDKDemo => NDKDemo}/jni/sample_nativeactivity.c (100%) rename {18/NDKDemo => NDKDemo}/jni/sample_nativeactivity_opengl.c (100%) rename {18/NDKDemo => NDKDemo}/jni/samplelib/sample_lib.c (100%) rename {18/NDKDemo => NDKDemo}/jni/samplelib/sample_lib.h (100%) rename {17/ClientDemo => NDKDemo}/proguard.cfg (100%) rename {18/NDKDemo => NDKDemo}/res/drawable-hdpi/icon.png (100%) rename {17/ClientDemo/res/drawable-mdpi => NDKDemo/res/drawable-ldpi}/icon.png (100%) rename {18/NDKDemo/res/drawable-ldpi => NDKDemo/res/drawable-mdpi}/icon.png (100%) rename {18/NDKDemo => NDKDemo}/res/layout/main.xml (100%) rename {18/NDKDemo => NDKDemo}/res/layout/sample.xml (100%) rename {18/NDKDemo => NDKDemo}/res/values/strings.xml (100%) rename {18/NDKDemo => NDKDemo}/src/com/oreilly/demo/pa/ch18/NDKApp.java (100%) rename {18/NDKDemo => NDKDemo}/src/com/oreilly/demo/pa/ch18/SampleActivityWithNativeMethods.java (100%) rename {17/DemoServer => NDKDemo}/tools/ide/eclipse/README.txt (100%) rename {17/ClientDemo => NDKDemo}/tools/ide/eclipse/classpath (100%) rename {18/NDKDemo => NDKDemo}/tools/ide/eclipse/project (100%) rename {17/DemoServer => SensorDemos}/.gitignore (100%) rename {16/SensorDemos => SensorDemos}/AndroidManifest.xml (100%) rename {16/SensorDemos => SensorDemos}/README.txt (100%) rename {16/SensorDemos => SensorDemos}/default.properties (100%) rename {18/NDKDemo => SensorDemos}/proguard.cfg (100%) rename {framework/FinchFramework => SensorDemos}/res/drawable-hdpi/icon.png (100%) rename {18/NDKDemo/res/drawable-mdpi => SensorDemos/res/drawable-ldpi}/icon.png (100%) rename {framework/FinchFramework/res/drawable-ldpi => SensorDemos/res/drawable-mdpi}/icon.png (100%) rename {16/SensorDemos => SensorDemos}/res/layout/gesture.xml (100%) rename {16/SensorDemos => SensorDemos}/res/layout/gestureadd.xml (100%) rename {16/SensorDemos => SensorDemos}/res/layout/main.xml (100%) rename {16/SensorDemos => SensorDemos}/res/layout/nfc.xml (100%) rename {16/SensorDemos => SensorDemos}/res/layout/nfc233.xml (100%) rename {16/SensorDemos => SensorDemos}/res/layout/sensoraccel.xml (100%) rename {16/SensorDemos => SensorDemos}/res/layout/sensorgravity.xml (100%) rename {16/SensorDemos => SensorDemos}/res/layout/sensorgyro.xml (100%) rename {16/SensorDemos => SensorDemos}/res/layout/sensorlight.xml (100%) rename {16/SensorDemos => SensorDemos}/res/layout/sensorlinearacel.xml (100%) rename {16/SensorDemos => SensorDemos}/res/layout/sensormagnetic.xml (100%) rename {16/SensorDemos => SensorDemos}/res/layout/sensorpressure.xml (100%) rename {16/SensorDemos => SensorDemos}/res/layout/sensorproximity.xml (100%) rename {16/SensorDemos => SensorDemos}/res/layout/sensorrotationvector.xml (100%) rename {16/SensorDemos => SensorDemos}/res/layout/sensortemp.xml (100%) rename {16/SensorDemos => SensorDemos}/res/values/strings.xml (100%) rename {16/SensorDemos => SensorDemos}/res/xml/nfcfilter.xml (100%) rename {16/SensorDemos => SensorDemos}/src/com/oreilly/demo/pa/ch16/Accessibility.java (100%) rename {16/SensorDemos => SensorDemos}/src/com/oreilly/demo/pa/ch16/GestureAdd.java (100%) rename {16/SensorDemos => SensorDemos}/src/com/oreilly/demo/pa/ch16/GestureView.java (100%) rename {16/SensorDemos => SensorDemos}/src/com/oreilly/demo/pa/ch16/MainActivity.java (100%) rename {16/SensorDemos => SensorDemos}/src/com/oreilly/demo/pa/ch16/NFC.java (100%) rename {16/SensorDemos => SensorDemos}/src/com/oreilly/demo/pa/ch16/NFC233.java (100%) rename {16/SensorDemos => SensorDemos}/src/com/oreilly/demo/pa/ch16/SensorAccel.java (100%) rename {16/SensorDemos => SensorDemos}/src/com/oreilly/demo/pa/ch16/SensorGravity.java (100%) rename {16/SensorDemos => SensorDemos}/src/com/oreilly/demo/pa/ch16/SensorGyro.java (100%) rename {16/SensorDemos => SensorDemos}/src/com/oreilly/demo/pa/ch16/SensorLight.java (100%) rename {16/SensorDemos => SensorDemos}/src/com/oreilly/demo/pa/ch16/SensorLinearAcceleration.java (100%) rename {16/SensorDemos => SensorDemos}/src/com/oreilly/demo/pa/ch16/SensorMagnetic.java (100%) rename {16/SensorDemos => SensorDemos}/src/com/oreilly/demo/pa/ch16/SensorPressure.java (100%) rename {16/SensorDemos => SensorDemos}/src/com/oreilly/demo/pa/ch16/SensorProximity.java (100%) rename {16/SensorDemos => SensorDemos}/src/com/oreilly/demo/pa/ch16/SensorRotationVector.java (100%) rename {16/SensorDemos => SensorDemos}/src/com/oreilly/demo/pa/ch16/SensorTemp.java (100%) rename {18/NDKDemo => SensorDemos}/tools/ide/eclipse/README.txt (100%) rename {18/NDKDemo => SensorDemos}/tools/ide/eclipse/classpath (100%) rename {16/SensorDemos => SensorDemos}/tools/ide/eclipse/project (100%) rename {02/SharedListTask => SharedListTask}/.gitignore (100%) rename {framework/FinchFrameworkTest => SharedListTask}/default.properties (100%) rename {02/SharedListTask => SharedListTask}/src/com/oreilly/demo/android/ch02/sharedlisttask/SharedListTask.java (100%) rename {02/SharedListTask => SharedListTask}/tools/ide/eclipse/classpath (100%) rename {02/SharedListTask => SharedListTask}/tools/ide/eclipse/project (100%) rename {18/NDKDemo => SimpleFragment}/.gitignore (100%) rename {08/SimpleFragment => SimpleFragment}/AndroidManifest.xml (100%) rename {08/SimpleFragment => SimpleFragment}/default.properties (100%) rename {11/FinchLifecycleBackport => SimpleFragment}/proguard.cfg (100%) rename {framework/FinchFrameworkTest => SimpleFragment}/res/drawable-hdpi/icon.png (100%) rename {framework/FinchFrameworkTest => SimpleFragment}/res/drawable-ldpi/icon.png (100%) rename {framework/FinchFrameworkTest => SimpleFragment}/res/drawable-mdpi/icon.png (100%) rename {08/SimpleFragment => SimpleFragment}/res/layout/date_time.xml (100%) rename {08/SimpleFragment => SimpleFragment}/res/layout/main.xml (100%) rename {08/SimpleFragment => SimpleFragment}/res/values/colors.xml (100%) rename {08/SimpleFragment => SimpleFragment}/res/values/strings.xml (100%) rename {08/SimpleFragment => SimpleFragment}/src/com/oreilly/demo/android/ch08/simplefragment/DateTime.java (100%) rename {08/SimpleFragment => SimpleFragment}/src/com/oreilly/demo/android/ch08/simplefragment/SimpleFragment.java (100%) rename {framework/FinchFrameworkTest => SimpleFragment}/tools/ide/eclipse/classpath (100%) rename {08/SimpleFragment => SimpleFragment}/tools/ide/eclipse/project (100%) rename {framework/FinchFramework => TestApp}/.gitignore (100%) rename {03/TestApp => TestApp}/AndroidManifest.xml (100%) rename {14/AudioPlayer => TestApp}/default.properties (100%) rename {12/FinchVideo => TestApp}/res/drawable/icon.png (100%) rename {03/TestApp => TestApp}/res/layout/main.xml (100%) rename {03/TestApp => TestApp}/res/values/strings.xml (100%) rename {03/TestApp => TestApp}/src/com/oreilly/demo/pa/ch03/testapp/TestActivity.java (100%) rename {03/TestApp => TestApp}/src/com/oreilly/demo/pa/ch03/testapp/TestBroadcastReceiver.java (100%) rename {03/TestApp => TestApp}/src/com/oreilly/demo/pa/ch03/testapp/TestProvider.java (100%) rename {03/TestApp => TestApp}/src/com/oreilly/demo/pa/ch03/testapp/TestService.java (100%) rename {06/AsyncTaskDemo => TestApp}/tools/ide/eclipse/classpath (100%) rename {03/TestApp => TestApp}/tools/ide/eclipse/project (100%) diff --git a/03/TestApp/.gitignore b/AIDLDemo/.gitignore similarity index 100% rename from 03/TestApp/.gitignore rename to AIDLDemo/.gitignore diff --git a/06/AIDLDemo/AndroidManifest.xml b/AIDLDemo/AndroidManifest.xml similarity index 100% rename from 06/AIDLDemo/AndroidManifest.xml rename to AIDLDemo/AndroidManifest.xml diff --git a/03/TestApp/default.properties b/AIDLDemo/default.properties similarity index 100% rename from 03/TestApp/default.properties rename to AIDLDemo/default.properties diff --git a/06/AIDLDemo/res/drawable-hdpi/icon.png b/AIDLDemo/res/drawable-hdpi/icon.png similarity index 100% rename from 06/AIDLDemo/res/drawable-hdpi/icon.png rename to AIDLDemo/res/drawable-hdpi/icon.png diff --git a/06/AIDLDemo/res/drawable-ldpi/icon.png b/AIDLDemo/res/drawable-ldpi/icon.png similarity index 100% rename from 06/AIDLDemo/res/drawable-ldpi/icon.png rename to AIDLDemo/res/drawable-ldpi/icon.png diff --git a/06/AIDLDemo/res/drawable-mdpi/icon.png b/AIDLDemo/res/drawable-mdpi/icon.png similarity index 100% rename from 06/AIDLDemo/res/drawable-mdpi/icon.png rename to AIDLDemo/res/drawable-mdpi/icon.png diff --git a/06/AIDLDemo/res/layout/main.xml b/AIDLDemo/res/layout/main.xml similarity index 100% rename from 06/AIDLDemo/res/layout/main.xml rename to AIDLDemo/res/layout/main.xml diff --git a/06/AIDLDemo/res/values/strings.xml b/AIDLDemo/res/values/strings.xml similarity index 100% rename from 06/AIDLDemo/res/values/strings.xml rename to AIDLDemo/res/values/strings.xml diff --git a/06/AIDLDemo/src/com/oreilly/demo/android/ch06/aidl/client/AIDLDemo.java b/AIDLDemo/src/com/oreilly/demo/android/ch06/aidl/client/AIDLDemo.java similarity index 100% rename from 06/AIDLDemo/src/com/oreilly/demo/android/ch06/aidl/client/AIDLDemo.java rename to AIDLDemo/src/com/oreilly/demo/android/ch06/aidl/client/AIDLDemo.java diff --git a/06/AIDLDemo/src/com/oreilly/demo/android/ch06/aidl/parcelables/ParcelableList.java b/AIDLDemo/src/com/oreilly/demo/android/ch06/aidl/parcelables/ParcelableList.java similarity index 100% rename from 06/AIDLDemo/src/com/oreilly/demo/android/ch06/aidl/parcelables/ParcelableList.java rename to AIDLDemo/src/com/oreilly/demo/android/ch06/aidl/parcelables/ParcelableList.java diff --git a/06/AIDLDemo/src/com/oreilly/demo/android/ch06/aidl/parcelables/SimpleParcelable.java b/AIDLDemo/src/com/oreilly/demo/android/ch06/aidl/parcelables/SimpleParcelable.java similarity index 100% rename from 06/AIDLDemo/src/com/oreilly/demo/android/ch06/aidl/parcelables/SimpleParcelable.java rename to AIDLDemo/src/com/oreilly/demo/android/ch06/aidl/parcelables/SimpleParcelable.java diff --git a/06/AIDLDemo/src/com/oreilly/demo/android/ch06/aidl/service/Path.aidl b/AIDLDemo/src/com/oreilly/demo/android/ch06/aidl/service/Path.aidl similarity index 100% rename from 06/AIDLDemo/src/com/oreilly/demo/android/ch06/aidl/service/Path.aidl rename to AIDLDemo/src/com/oreilly/demo/android/ch06/aidl/service/Path.aidl diff --git a/06/AIDLDemo/src/com/oreilly/demo/android/ch06/aidl/service/Path.java b/AIDLDemo/src/com/oreilly/demo/android/ch06/aidl/service/Path.java similarity index 100% rename from 06/AIDLDemo/src/com/oreilly/demo/android/ch06/aidl/service/Path.java rename to AIDLDemo/src/com/oreilly/demo/android/ch06/aidl/service/Path.java diff --git a/06/AIDLDemo/src/com/oreilly/demo/android/ch06/aidl/service/PathService.aidl b/AIDLDemo/src/com/oreilly/demo/android/ch06/aidl/service/PathService.aidl similarity index 100% rename from 06/AIDLDemo/src/com/oreilly/demo/android/ch06/aidl/service/PathService.aidl rename to AIDLDemo/src/com/oreilly/demo/android/ch06/aidl/service/PathService.aidl diff --git a/06/AIDLDemo/src/com/oreilly/demo/android/ch06/aidl/service/Point.java b/AIDLDemo/src/com/oreilly/demo/android/ch06/aidl/service/Point.java similarity index 100% rename from 06/AIDLDemo/src/com/oreilly/demo/android/ch06/aidl/service/Point.java rename to AIDLDemo/src/com/oreilly/demo/android/ch06/aidl/service/Point.java diff --git a/06/AIDLDemo/src/com/oreilly/demo/android/ch06/aidl/service/SimplePathService.java b/AIDLDemo/src/com/oreilly/demo/android/ch06/aidl/service/SimplePathService.java similarity index 100% rename from 06/AIDLDemo/src/com/oreilly/demo/android/ch06/aidl/service/SimplePathService.java rename to AIDLDemo/src/com/oreilly/demo/android/ch06/aidl/service/SimplePathService.java diff --git a/06/AIDLDemo/tools/ide/eclipse/classpath b/AIDLDemo/tools/ide/eclipse/classpath similarity index 100% rename from 06/AIDLDemo/tools/ide/eclipse/classpath rename to AIDLDemo/tools/ide/eclipse/classpath diff --git a/06/AIDLDemo/tools/ide/eclipse/project b/AIDLDemo/tools/ide/eclipse/project similarity index 100% rename from 06/AIDLDemo/tools/ide/eclipse/project rename to AIDLDemo/tools/ide/eclipse/project diff --git a/06/AIDLDemo/.gitignore b/AndroidUIDemo/.gitignore similarity index 100% rename from 06/AIDLDemo/.gitignore rename to AndroidUIDemo/.gitignore diff --git a/07/AndroidUIDemo/AndroidManifest.xml b/AndroidUIDemo/AndroidManifest.xml similarity index 100% rename from 07/AndroidUIDemo/AndroidManifest.xml rename to AndroidUIDemo/AndroidManifest.xml diff --git a/07/AndroidUIDemo/default.properties b/AndroidUIDemo/default.properties similarity index 100% rename from 07/AndroidUIDemo/default.properties rename to AndroidUIDemo/default.properties diff --git a/06/AsyncTaskDemo/res/drawable-hdpi/icon.png b/AndroidUIDemo/res/drawable-hdpi/icon.png similarity index 100% rename from 06/AsyncTaskDemo/res/drawable-hdpi/icon.png rename to AndroidUIDemo/res/drawable-hdpi/icon.png diff --git a/06/AsyncTaskDemo/res/drawable-ldpi/icon.png b/AndroidUIDemo/res/drawable-ldpi/icon.png similarity index 100% rename from 06/AsyncTaskDemo/res/drawable-ldpi/icon.png rename to AndroidUIDemo/res/drawable-ldpi/icon.png diff --git a/06/AsyncTaskDemo/res/drawable-mdpi/icon.png b/AndroidUIDemo/res/drawable-mdpi/icon.png similarity index 100% rename from 06/AsyncTaskDemo/res/drawable-mdpi/icon.png rename to AndroidUIDemo/res/drawable-mdpi/icon.png diff --git a/07/AndroidUIDemo/res/layout/main.xml b/AndroidUIDemo/res/layout/main.xml similarity index 100% rename from 07/AndroidUIDemo/res/layout/main.xml rename to AndroidUIDemo/res/layout/main.xml diff --git a/07/AndroidUIDemo/res/values/colors.xml b/AndroidUIDemo/res/values/colors.xml similarity index 100% rename from 07/AndroidUIDemo/res/values/colors.xml rename to AndroidUIDemo/res/values/colors.xml diff --git a/07/AndroidUIDemo/res/values/strings.xml b/AndroidUIDemo/res/values/strings.xml similarity index 100% rename from 07/AndroidUIDemo/res/values/strings.xml rename to AndroidUIDemo/res/values/strings.xml diff --git a/07/AndroidUIDemo/src/com/oreilly/demo/android/ch07/TouchMe.java b/AndroidUIDemo/src/com/oreilly/demo/android/ch07/TouchMe.java similarity index 100% rename from 07/AndroidUIDemo/src/com/oreilly/demo/android/ch07/TouchMe.java rename to AndroidUIDemo/src/com/oreilly/demo/android/ch07/TouchMe.java diff --git a/07/AndroidUIDemo/src/com/oreilly/demo/android/ch07/model/Dot.java b/AndroidUIDemo/src/com/oreilly/demo/android/ch07/model/Dot.java similarity index 100% rename from 07/AndroidUIDemo/src/com/oreilly/demo/android/ch07/model/Dot.java rename to AndroidUIDemo/src/com/oreilly/demo/android/ch07/model/Dot.java diff --git a/07/AndroidUIDemo/src/com/oreilly/demo/android/ch07/model/Dots.java b/AndroidUIDemo/src/com/oreilly/demo/android/ch07/model/Dots.java similarity index 100% rename from 07/AndroidUIDemo/src/com/oreilly/demo/android/ch07/model/Dots.java rename to AndroidUIDemo/src/com/oreilly/demo/android/ch07/model/Dots.java diff --git a/07/AndroidUIDemo/src/com/oreilly/demo/android/ch07/view/DotView.java b/AndroidUIDemo/src/com/oreilly/demo/android/ch07/view/DotView.java similarity index 100% rename from 07/AndroidUIDemo/src/com/oreilly/demo/android/ch07/view/DotView.java rename to AndroidUIDemo/src/com/oreilly/demo/android/ch07/view/DotView.java diff --git a/07/AndroidUIDemo/tools/ide/eclipse/classpath b/AndroidUIDemo/tools/ide/eclipse/classpath similarity index 100% rename from 07/AndroidUIDemo/tools/ide/eclipse/classpath rename to AndroidUIDemo/tools/ide/eclipse/classpath diff --git a/07/AndroidUIDemo/tools/ide/eclipse/project b/AndroidUIDemo/tools/ide/eclipse/project similarity index 100% rename from 07/AndroidUIDemo/tools/ide/eclipse/project rename to AndroidUIDemo/tools/ide/eclipse/project diff --git a/framework/FinchFrameworkTest/.gitignore b/AndroidViewDemo/.gitignore similarity index 78% rename from framework/FinchFrameworkTest/.gitignore rename to AndroidViewDemo/.gitignore index 8b15079..50ac2a6 100644 --- a/framework/FinchFrameworkTest/.gitignore +++ b/AndroidViewDemo/.gitignore @@ -2,4 +2,5 @@ /assets /.project /.classpath +/.settings /bin diff --git a/09/AndroidViewDemo/AndroidManifest.xml b/AndroidViewDemo/AndroidManifest.xml similarity index 100% rename from 09/AndroidViewDemo/AndroidManifest.xml rename to AndroidViewDemo/AndroidManifest.xml diff --git a/09/AndroidViewDemo/default.properties b/AndroidViewDemo/default.properties similarity index 100% rename from 09/AndroidViewDemo/default.properties rename to AndroidViewDemo/default.properties diff --git a/06/JSerializable/res/drawable-hdpi/icon.png b/AndroidViewDemo/res/drawable-hdpi/icon.png similarity index 100% rename from 06/JSerializable/res/drawable-hdpi/icon.png rename to AndroidViewDemo/res/drawable-hdpi/icon.png diff --git a/06/JSerializable/res/drawable-ldpi/icon.png b/AndroidViewDemo/res/drawable-ldpi/icon.png similarity index 100% rename from 06/JSerializable/res/drawable-ldpi/icon.png rename to AndroidViewDemo/res/drawable-ldpi/icon.png diff --git a/06/JSerializable/res/drawable-mdpi/icon.png b/AndroidViewDemo/res/drawable-mdpi/icon.png similarity index 100% rename from 06/JSerializable/res/drawable-mdpi/icon.png rename to AndroidViewDemo/res/drawable-mdpi/icon.png diff --git a/09/AndroidViewDemo/res/drawable/cb.png b/AndroidViewDemo/res/drawable/cb.png similarity index 100% rename from 09/AndroidViewDemo/res/drawable/cb.png rename to AndroidViewDemo/res/drawable/cb.png diff --git a/09/AndroidViewDemo/res/drawable/throbber.xml b/AndroidViewDemo/res/drawable/throbber.xml similarity index 100% rename from 09/AndroidViewDemo/res/drawable/throbber.xml rename to AndroidViewDemo/res/drawable/throbber.xml diff --git a/09/AndroidViewDemo/res/drawable/to.png b/AndroidViewDemo/res/drawable/to.png similarity index 100% rename from 09/AndroidViewDemo/res/drawable/to.png rename to AndroidViewDemo/res/drawable/to.png diff --git a/09/AndroidViewDemo/res/layout/main.xml b/AndroidViewDemo/res/layout/main.xml similarity index 100% rename from 09/AndroidViewDemo/res/layout/main.xml rename to AndroidViewDemo/res/layout/main.xml diff --git a/09/AndroidViewDemo/res/values/colors.xml b/AndroidViewDemo/res/values/colors.xml similarity index 100% rename from 09/AndroidViewDemo/res/values/colors.xml rename to AndroidViewDemo/res/values/colors.xml diff --git a/09/AndroidViewDemo/res/values/strings.xml b/AndroidViewDemo/res/values/strings.xml similarity index 100% rename from 09/AndroidViewDemo/res/values/strings.xml rename to AndroidViewDemo/res/values/strings.xml diff --git a/09/AndroidViewDemo/src/com/example/android/apis/graphics/GLSurfaceView.java b/AndroidViewDemo/src/com/example/android/apis/graphics/GLSurfaceView.java similarity index 100% rename from 09/AndroidViewDemo/src/com/example/android/apis/graphics/GLSurfaceView.java rename to AndroidViewDemo/src/com/example/android/apis/graphics/GLSurfaceView.java diff --git a/09/AndroidViewDemo/src/com/oreilly/demo/android/ch09/TransformIt.java b/AndroidViewDemo/src/com/oreilly/demo/android/ch09/TransformIt.java similarity index 100% rename from 09/AndroidViewDemo/src/com/oreilly/demo/android/ch09/TransformIt.java rename to AndroidViewDemo/src/com/oreilly/demo/android/ch09/TransformIt.java diff --git a/09/AndroidViewDemo/src/com/oreilly/demo/android/ch09/drawable/HelloAndroidTextDrawable.java b/AndroidViewDemo/src/com/oreilly/demo/android/ch09/drawable/HelloAndroidTextDrawable.java similarity index 100% rename from 09/AndroidViewDemo/src/com/oreilly/demo/android/ch09/drawable/HelloAndroidTextDrawable.java rename to AndroidViewDemo/src/com/oreilly/demo/android/ch09/drawable/HelloAndroidTextDrawable.java diff --git a/09/AndroidViewDemo/src/com/oreilly/demo/android/ch09/efx/RotationTransitionAnimation.java b/AndroidViewDemo/src/com/oreilly/demo/android/ch09/efx/RotationTransitionAnimation.java similarity index 100% rename from 09/AndroidViewDemo/src/com/oreilly/demo/android/ch09/efx/RotationTransitionAnimation.java rename to AndroidViewDemo/src/com/oreilly/demo/android/ch09/efx/RotationTransitionAnimation.java diff --git a/09/AndroidViewDemo/src/com/oreilly/demo/android/ch09/widget/EffectsWidget.java b/AndroidViewDemo/src/com/oreilly/demo/android/ch09/widget/EffectsWidget.java similarity index 100% rename from 09/AndroidViewDemo/src/com/oreilly/demo/android/ch09/widget/EffectsWidget.java rename to AndroidViewDemo/src/com/oreilly/demo/android/ch09/widget/EffectsWidget.java diff --git a/09/AndroidViewDemo/src/com/oreilly/demo/android/ch09/widget/GLDemoWidget.java b/AndroidViewDemo/src/com/oreilly/demo/android/ch09/widget/GLDemoWidget.java similarity index 100% rename from 09/AndroidViewDemo/src/com/oreilly/demo/android/ch09/widget/GLDemoWidget.java rename to AndroidViewDemo/src/com/oreilly/demo/android/ch09/widget/GLDemoWidget.java diff --git a/09/AndroidViewDemo/src/com/oreilly/demo/android/ch09/widget/TransformedViewWidget.java b/AndroidViewDemo/src/com/oreilly/demo/android/ch09/widget/TransformedViewWidget.java similarity index 100% rename from 09/AndroidViewDemo/src/com/oreilly/demo/android/ch09/widget/TransformedViewWidget.java rename to AndroidViewDemo/src/com/oreilly/demo/android/ch09/widget/TransformedViewWidget.java diff --git a/09/AndroidViewDemo/tools/ide/eclipse/classpath b/AndroidViewDemo/tools/ide/eclipse/classpath similarity index 100% rename from 09/AndroidViewDemo/tools/ide/eclipse/classpath rename to AndroidViewDemo/tools/ide/eclipse/classpath diff --git a/09/AndroidViewDemo/tools/ide/eclipse/project b/AndroidViewDemo/tools/ide/eclipse/project similarity index 100% rename from 09/AndroidViewDemo/tools/ide/eclipse/project rename to AndroidViewDemo/tools/ide/eclipse/project diff --git a/06/AsyncTaskDemo/.gitignore b/AsyncTaskDemo/.gitignore similarity index 100% rename from 06/AsyncTaskDemo/.gitignore rename to AsyncTaskDemo/.gitignore diff --git a/06/AsyncTaskDemo/AndroidManifest.xml b/AsyncTaskDemo/AndroidManifest.xml similarity index 100% rename from 06/AsyncTaskDemo/AndroidManifest.xml rename to AsyncTaskDemo/AndroidManifest.xml diff --git a/06/AIDLDemo/default.properties b/AsyncTaskDemo/default.properties similarity index 100% rename from 06/AIDLDemo/default.properties rename to AsyncTaskDemo/default.properties diff --git a/06/AsyncTaskDemo/res/anim/dots.xml b/AsyncTaskDemo/res/anim/dots.xml similarity index 100% rename from 06/AsyncTaskDemo/res/anim/dots.xml rename to AsyncTaskDemo/res/anim/dots.xml diff --git a/07/AndroidUIDemo/res/drawable-hdpi/icon.png b/AsyncTaskDemo/res/drawable-hdpi/icon.png similarity index 100% rename from 07/AndroidUIDemo/res/drawable-hdpi/icon.png rename to AsyncTaskDemo/res/drawable-hdpi/icon.png diff --git a/07/AndroidUIDemo/res/drawable-ldpi/icon.png b/AsyncTaskDemo/res/drawable-ldpi/icon.png similarity index 100% rename from 07/AndroidUIDemo/res/drawable-ldpi/icon.png rename to AsyncTaskDemo/res/drawable-ldpi/icon.png diff --git a/07/AndroidUIDemo/res/drawable-mdpi/icon.png b/AsyncTaskDemo/res/drawable-mdpi/icon.png similarity index 100% rename from 07/AndroidUIDemo/res/drawable-mdpi/icon.png rename to AsyncTaskDemo/res/drawable-mdpi/icon.png diff --git a/06/AsyncTaskDemo/res/drawable/dots_f0.png b/AsyncTaskDemo/res/drawable/dots_f0.png similarity index 100% rename from 06/AsyncTaskDemo/res/drawable/dots_f0.png rename to AsyncTaskDemo/res/drawable/dots_f0.png diff --git a/06/AsyncTaskDemo/res/drawable/dots_f1.png b/AsyncTaskDemo/res/drawable/dots_f1.png similarity index 100% rename from 06/AsyncTaskDemo/res/drawable/dots_f1.png rename to AsyncTaskDemo/res/drawable/dots_f1.png diff --git a/06/AsyncTaskDemo/res/drawable/dots_f2.png b/AsyncTaskDemo/res/drawable/dots_f2.png similarity index 100% rename from 06/AsyncTaskDemo/res/drawable/dots_f2.png rename to AsyncTaskDemo/res/drawable/dots_f2.png diff --git a/06/AsyncTaskDemo/res/drawable/dots_f3.png b/AsyncTaskDemo/res/drawable/dots_f3.png similarity index 100% rename from 06/AsyncTaskDemo/res/drawable/dots_f3.png rename to AsyncTaskDemo/res/drawable/dots_f3.png diff --git a/06/AsyncTaskDemo/res/drawable/dots_f4.png b/AsyncTaskDemo/res/drawable/dots_f4.png similarity index 100% rename from 06/AsyncTaskDemo/res/drawable/dots_f4.png rename to AsyncTaskDemo/res/drawable/dots_f4.png diff --git a/06/AsyncTaskDemo/res/layout/asyncdemo.xml b/AsyncTaskDemo/res/layout/asyncdemo.xml similarity index 100% rename from 06/AsyncTaskDemo/res/layout/asyncdemo.xml rename to AsyncTaskDemo/res/layout/asyncdemo.xml diff --git a/06/AsyncTaskDemo/res/layout/asyncdemoprogress.xml b/AsyncTaskDemo/res/layout/asyncdemoprogress.xml similarity index 100% rename from 06/AsyncTaskDemo/res/layout/asyncdemoprogress.xml rename to AsyncTaskDemo/res/layout/asyncdemoprogress.xml diff --git a/06/AsyncTaskDemo/res/values/strings.xml b/AsyncTaskDemo/res/values/strings.xml similarity index 100% rename from 06/AsyncTaskDemo/res/values/strings.xml rename to AsyncTaskDemo/res/values/strings.xml diff --git a/06/AsyncTaskDemo/src/com/oreilly/demo/android/ch06/AsyncTaskDemo.java b/AsyncTaskDemo/src/com/oreilly/demo/android/ch06/AsyncTaskDemo.java similarity index 100% rename from 06/AsyncTaskDemo/src/com/oreilly/demo/android/ch06/AsyncTaskDemo.java rename to AsyncTaskDemo/src/com/oreilly/demo/android/ch06/AsyncTaskDemo.java diff --git a/06/AsyncTaskDemo/src/com/oreilly/demo/android/ch06/AsyncTaskDemoWithProgress.java b/AsyncTaskDemo/src/com/oreilly/demo/android/ch06/AsyncTaskDemoWithProgress.java similarity index 100% rename from 06/AsyncTaskDemo/src/com/oreilly/demo/android/ch06/AsyncTaskDemoWithProgress.java rename to AsyncTaskDemo/src/com/oreilly/demo/android/ch06/AsyncTaskDemoWithProgress.java diff --git a/06/AsyncTaskDemo/src/com/oreilly/demo/android/ch06/AsyncTaskSample.java b/AsyncTaskDemo/src/com/oreilly/demo/android/ch06/AsyncTaskSample.java similarity index 100% rename from 06/AsyncTaskDemo/src/com/oreilly/demo/android/ch06/AsyncTaskSample.java rename to AsyncTaskDemo/src/com/oreilly/demo/android/ch06/AsyncTaskSample.java diff --git a/06/AsyncTaskDemo/src/com/oreilly/demo/android/ch06/game/Game.java b/AsyncTaskDemo/src/com/oreilly/demo/android/ch06/game/Game.java similarity index 100% rename from 06/AsyncTaskDemo/src/com/oreilly/demo/android/ch06/game/Game.java rename to AsyncTaskDemo/src/com/oreilly/demo/android/ch06/game/Game.java diff --git a/06/AsyncTaskDemo/src/com/oreilly/demo/android/ch06/game/MockGame.java b/AsyncTaskDemo/src/com/oreilly/demo/android/ch06/game/MockGame.java similarity index 100% rename from 06/AsyncTaskDemo/src/com/oreilly/demo/android/ch06/game/MockGame.java rename to AsyncTaskDemo/src/com/oreilly/demo/android/ch06/game/MockGame.java diff --git a/06/AsyncTaskDemo/src/com/oreilly/demo/android/ch06/game/PersistentModel.java b/AsyncTaskDemo/src/com/oreilly/demo/android/ch06/game/PersistentModel.java similarity index 100% rename from 06/AsyncTaskDemo/src/com/oreilly/demo/android/ch06/game/PersistentModel.java rename to AsyncTaskDemo/src/com/oreilly/demo/android/ch06/game/PersistentModel.java diff --git a/03/TestApp/tools/ide/eclipse/classpath b/AsyncTaskDemo/tools/ide/eclipse/classpath similarity index 100% rename from 03/TestApp/tools/ide/eclipse/classpath rename to AsyncTaskDemo/tools/ide/eclipse/classpath diff --git a/06/AsyncTaskDemo/tools/ide/eclipse/project b/AsyncTaskDemo/tools/ide/eclipse/project similarity index 100% rename from 06/AsyncTaskDemo/tools/ide/eclipse/project rename to AsyncTaskDemo/tools/ide/eclipse/project diff --git a/06/JSerializable/.gitignore b/AudioPlayer/.gitignore similarity index 100% rename from 06/JSerializable/.gitignore rename to AudioPlayer/.gitignore diff --git a/14/AudioPlayer/AndroidManifest.xml b/AudioPlayer/AndroidManifest.xml similarity index 100% rename from 14/AudioPlayer/AndroidManifest.xml rename to AudioPlayer/AndroidManifest.xml diff --git a/14/AudioPlayer/README.txt b/AudioPlayer/README.txt similarity index 100% rename from 14/AudioPlayer/README.txt rename to AudioPlayer/README.txt diff --git a/06/AsyncTaskDemo/default.properties b/AudioPlayer/default.properties similarity index 100% rename from 06/AsyncTaskDemo/default.properties rename to AudioPlayer/default.properties diff --git a/08/SimpleFragment/res/drawable-hdpi/icon.png b/AudioPlayer/res/drawable-hdpi/icon.png similarity index 100% rename from 08/SimpleFragment/res/drawable-hdpi/icon.png rename to AudioPlayer/res/drawable-hdpi/icon.png diff --git a/08/SimpleFragment/res/drawable-ldpi/icon.png b/AudioPlayer/res/drawable-ldpi/icon.png similarity index 100% rename from 08/SimpleFragment/res/drawable-ldpi/icon.png rename to AudioPlayer/res/drawable-ldpi/icon.png diff --git a/08/SimpleFragment/res/drawable-mdpi/icon.png b/AudioPlayer/res/drawable-mdpi/icon.png similarity index 100% rename from 08/SimpleFragment/res/drawable-mdpi/icon.png rename to AudioPlayer/res/drawable-mdpi/icon.png diff --git a/14/AudioPlayer/res/drawable-mdpi/pause.png b/AudioPlayer/res/drawable-mdpi/pause.png similarity index 100% rename from 14/AudioPlayer/res/drawable-mdpi/pause.png rename to AudioPlayer/res/drawable-mdpi/pause.png diff --git a/14/AudioPlayer/res/drawable-mdpi/play.png b/AudioPlayer/res/drawable-mdpi/play.png similarity index 100% rename from 14/AudioPlayer/res/drawable-mdpi/play.png rename to AudioPlayer/res/drawable-mdpi/play.png diff --git a/14/AudioPlayer/res/drawable-mdpi/record.png b/AudioPlayer/res/drawable-mdpi/record.png similarity index 100% rename from 14/AudioPlayer/res/drawable-mdpi/record.png rename to AudioPlayer/res/drawable-mdpi/record.png diff --git a/14/AudioPlayer/res/drawable-mdpi/stop.png b/AudioPlayer/res/drawable-mdpi/stop.png similarity index 100% rename from 14/AudioPlayer/res/drawable-mdpi/stop.png rename to AudioPlayer/res/drawable-mdpi/stop.png diff --git a/14/AudioPlayer/res/layout/audioplayer.xml b/AudioPlayer/res/layout/audioplayer.xml similarity index 100% rename from 14/AudioPlayer/res/layout/audioplayer.xml rename to AudioPlayer/res/layout/audioplayer.xml diff --git a/14/AudioPlayer/res/layout/audioplayerwmediacontrol.xml b/AudioPlayer/res/layout/audioplayerwmediacontrol.xml similarity index 100% rename from 14/AudioPlayer/res/layout/audioplayerwmediacontrol.xml rename to AudioPlayer/res/layout/audioplayerwmediacontrol.xml diff --git a/14/AudioPlayer/res/layout/audiorecorder.xml b/AudioPlayer/res/layout/audiorecorder.xml similarity index 100% rename from 14/AudioPlayer/res/layout/audiorecorder.xml rename to AudioPlayer/res/layout/audiorecorder.xml diff --git a/14/AudioPlayer/res/layout/main.xml b/AudioPlayer/res/layout/main.xml similarity index 100% rename from 14/AudioPlayer/res/layout/main.xml rename to AudioPlayer/res/layout/main.xml diff --git a/14/AudioPlayer/res/layout/videoplayer.xml b/AudioPlayer/res/layout/videoplayer.xml similarity index 100% rename from 14/AudioPlayer/res/layout/videoplayer.xml rename to AudioPlayer/res/layout/videoplayer.xml diff --git a/14/AudioPlayer/res/layout/videorecorder.xml b/AudioPlayer/res/layout/videorecorder.xml similarity index 100% rename from 14/AudioPlayer/res/layout/videorecorder.xml rename to AudioPlayer/res/layout/videorecorder.xml diff --git a/14/AudioPlayer/res/raw/example.mp3 b/AudioPlayer/res/raw/example.mp3 similarity index 100% rename from 14/AudioPlayer/res/raw/example.mp3 rename to AudioPlayer/res/raw/example.mp3 diff --git a/14/AudioPlayer/res/values/strings.xml b/AudioPlayer/res/values/strings.xml similarity index 100% rename from 14/AudioPlayer/res/values/strings.xml rename to AudioPlayer/res/values/strings.xml diff --git a/14/AudioPlayer/src/com/oreilly/demo/pa/ch14/AudioPlayer.java b/AudioPlayer/src/com/oreilly/demo/pa/ch14/AudioPlayer.java similarity index 100% rename from 14/AudioPlayer/src/com/oreilly/demo/pa/ch14/AudioPlayer.java rename to AudioPlayer/src/com/oreilly/demo/pa/ch14/AudioPlayer.java diff --git a/14/AudioPlayer/src/com/oreilly/demo/pa/ch14/AudioPlayerWAudioTrack.java b/AudioPlayer/src/com/oreilly/demo/pa/ch14/AudioPlayerWAudioTrack.java similarity index 100% rename from 14/AudioPlayer/src/com/oreilly/demo/pa/ch14/AudioPlayerWAudioTrack.java rename to AudioPlayer/src/com/oreilly/demo/pa/ch14/AudioPlayerWAudioTrack.java diff --git a/14/AudioPlayer/src/com/oreilly/demo/pa/ch14/AudioPlayerWMediaController.java b/AudioPlayer/src/com/oreilly/demo/pa/ch14/AudioPlayerWMediaController.java similarity index 100% rename from 14/AudioPlayer/src/com/oreilly/demo/pa/ch14/AudioPlayerWMediaController.java rename to AudioPlayer/src/com/oreilly/demo/pa/ch14/AudioPlayerWMediaController.java diff --git a/14/AudioPlayer/src/com/oreilly/demo/pa/ch14/AudioRecorder.java b/AudioPlayer/src/com/oreilly/demo/pa/ch14/AudioRecorder.java similarity index 100% rename from 14/AudioPlayer/src/com/oreilly/demo/pa/ch14/AudioRecorder.java rename to AudioPlayer/src/com/oreilly/demo/pa/ch14/AudioRecorder.java diff --git a/14/AudioPlayer/src/com/oreilly/demo/pa/ch14/AudioRecorderViaIntent.java b/AudioPlayer/src/com/oreilly/demo/pa/ch14/AudioRecorderViaIntent.java similarity index 100% rename from 14/AudioPlayer/src/com/oreilly/demo/pa/ch14/AudioRecorderViaIntent.java rename to AudioPlayer/src/com/oreilly/demo/pa/ch14/AudioRecorderViaIntent.java diff --git a/14/AudioPlayer/src/com/oreilly/demo/pa/ch14/AudioRecorderWAudioRecord.java b/AudioPlayer/src/com/oreilly/demo/pa/ch14/AudioRecorderWAudioRecord.java similarity index 100% rename from 14/AudioPlayer/src/com/oreilly/demo/pa/ch14/AudioRecorderWAudioRecord.java rename to AudioPlayer/src/com/oreilly/demo/pa/ch14/AudioRecorderWAudioRecord.java diff --git a/14/AudioPlayer/src/com/oreilly/demo/pa/ch14/MultiMedia.java b/AudioPlayer/src/com/oreilly/demo/pa/ch14/MultiMedia.java similarity index 100% rename from 14/AudioPlayer/src/com/oreilly/demo/pa/ch14/MultiMedia.java rename to AudioPlayer/src/com/oreilly/demo/pa/ch14/MultiMedia.java diff --git a/14/AudioPlayer/src/com/oreilly/demo/pa/ch14/VideoPlayer.java b/AudioPlayer/src/com/oreilly/demo/pa/ch14/VideoPlayer.java similarity index 100% rename from 14/AudioPlayer/src/com/oreilly/demo/pa/ch14/VideoPlayer.java rename to AudioPlayer/src/com/oreilly/demo/pa/ch14/VideoPlayer.java diff --git a/14/AudioPlayer/src/com/oreilly/demo/pa/ch14/VideoRecorder.java b/AudioPlayer/src/com/oreilly/demo/pa/ch14/VideoRecorder.java similarity index 100% rename from 14/AudioPlayer/src/com/oreilly/demo/pa/ch14/VideoRecorder.java rename to AudioPlayer/src/com/oreilly/demo/pa/ch14/VideoRecorder.java diff --git a/14/AudioPlayer/src/com/oreilly/demo/pa/ch14/VideoRecorderViaIntent.java b/AudioPlayer/src/com/oreilly/demo/pa/ch14/VideoRecorderViaIntent.java similarity index 100% rename from 14/AudioPlayer/src/com/oreilly/demo/pa/ch14/VideoRecorderViaIntent.java rename to AudioPlayer/src/com/oreilly/demo/pa/ch14/VideoRecorderViaIntent.java diff --git a/14/AudioPlayer/tools/ide/eclipse/README.txt b/AudioPlayer/tools/ide/eclipse/README.txt similarity index 100% rename from 14/AudioPlayer/tools/ide/eclipse/README.txt rename to AudioPlayer/tools/ide/eclipse/README.txt diff --git a/06/JSerializable/tools/ide/eclipse/classpath b/AudioPlayer/tools/ide/eclipse/classpath similarity index 100% rename from 06/JSerializable/tools/ide/eclipse/classpath rename to AudioPlayer/tools/ide/eclipse/classpath diff --git a/14/AudioPlayer/tools/ide/eclipse/project b/AudioPlayer/tools/ide/eclipse/project similarity index 100% rename from 14/AudioPlayer/tools/ide/eclipse/project rename to AudioPlayer/tools/ide/eclipse/project diff --git a/14/AudioPlayer/tools/ide/eclipse/settings/org.eclipse.jdt.core.prefs b/AudioPlayer/tools/ide/eclipse/settings/org.eclipse.jdt.core.prefs similarity index 100% rename from 14/AudioPlayer/tools/ide/eclipse/settings/org.eclipse.jdt.core.prefs rename to AudioPlayer/tools/ide/eclipse/settings/org.eclipse.jdt.core.prefs diff --git a/13/README b/CH13_README similarity index 100% rename from 13/README rename to CH13_README diff --git a/07/AndroidUIDemo/.gitignore b/ClientServerDemo/ClientDemo/.gitignore similarity index 100% rename from 07/AndroidUIDemo/.gitignore rename to ClientServerDemo/ClientDemo/.gitignore diff --git a/17/ClientDemo/AndroidManifest.xml b/ClientServerDemo/ClientDemo/AndroidManifest.xml similarity index 100% rename from 17/ClientDemo/AndroidManifest.xml rename to ClientServerDemo/ClientDemo/AndroidManifest.xml diff --git a/17/ClientDemo/default.properties b/ClientServerDemo/ClientDemo/default.properties similarity index 100% rename from 17/ClientDemo/default.properties rename to ClientServerDemo/ClientDemo/default.properties diff --git a/16/SensorDemos/proguard.cfg b/ClientServerDemo/ClientDemo/proguard.cfg similarity index 100% rename from 16/SensorDemos/proguard.cfg rename to ClientServerDemo/ClientDemo/proguard.cfg diff --git a/09/AndroidViewDemo/res/drawable-hdpi/icon.png b/ClientServerDemo/ClientDemo/res/drawable-hdpi/icon.png similarity index 100% rename from 09/AndroidViewDemo/res/drawable-hdpi/icon.png rename to ClientServerDemo/ClientDemo/res/drawable-hdpi/icon.png diff --git a/09/AndroidViewDemo/res/drawable-ldpi/icon.png b/ClientServerDemo/ClientDemo/res/drawable-ldpi/icon.png similarity index 100% rename from 09/AndroidViewDemo/res/drawable-ldpi/icon.png rename to ClientServerDemo/ClientDemo/res/drawable-ldpi/icon.png diff --git a/10/MicroJobs/res/drawable-ldpi/icon.png b/ClientServerDemo/ClientDemo/res/drawable-mdpi/icon.png similarity index 100% rename from 10/MicroJobs/res/drawable-ldpi/icon.png rename to ClientServerDemo/ClientDemo/res/drawable-mdpi/icon.png diff --git a/17/ClientDemo/res/layout/account.xml b/ClientServerDemo/ClientDemo/res/layout/account.xml similarity index 100% rename from 17/ClientDemo/res/layout/account.xml rename to ClientServerDemo/ClientDemo/res/layout/account.xml diff --git a/17/ClientDemo/res/layout/accountadd.xml b/ClientServerDemo/ClientDemo/res/layout/accountadd.xml similarity index 100% rename from 17/ClientDemo/res/layout/accountadd.xml rename to ClientServerDemo/ClientDemo/res/layout/accountadd.xml diff --git a/17/ClientDemo/res/layout/contact.xml b/ClientServerDemo/ClientDemo/res/layout/contact.xml similarity index 100% rename from 17/ClientDemo/res/layout/contact.xml rename to ClientServerDemo/ClientDemo/res/layout/contact.xml diff --git a/17/ClientDemo/res/layout/login.xml b/ClientServerDemo/ClientDemo/res/layout/login.xml similarity index 100% rename from 17/ClientDemo/res/layout/login.xml rename to ClientServerDemo/ClientDemo/res/layout/login.xml diff --git a/17/ClientDemo/res/layout/settings.xml b/ClientServerDemo/ClientDemo/res/layout/settings.xml similarity index 100% rename from 17/ClientDemo/res/layout/settings.xml rename to ClientServerDemo/ClientDemo/res/layout/settings.xml diff --git a/17/ClientDemo/res/values/strings.xml b/ClientServerDemo/ClientDemo/res/values/strings.xml similarity index 100% rename from 17/ClientDemo/res/values/strings.xml rename to ClientServerDemo/ClientDemo/res/values/strings.xml diff --git a/17/ClientDemo/res/xml/authenticator.xml b/ClientServerDemo/ClientDemo/res/xml/authenticator.xml similarity index 100% rename from 17/ClientDemo/res/xml/authenticator.xml rename to ClientServerDemo/ClientDemo/res/xml/authenticator.xml diff --git a/17/ClientDemo/res/xml/contacts.xml b/ClientServerDemo/ClientDemo/res/xml/contacts.xml similarity index 100% rename from 17/ClientDemo/res/xml/contacts.xml rename to ClientServerDemo/ClientDemo/res/xml/contacts.xml diff --git a/17/ClientDemo/res/xml/syncadapter.xml b/ClientServerDemo/ClientDemo/res/xml/syncadapter.xml similarity index 100% rename from 17/ClientDemo/res/xml/syncadapter.xml rename to ClientServerDemo/ClientDemo/res/xml/syncadapter.xml diff --git a/17/ClientDemo/src/com/oreilly/demo/pa/ch17/account/AccountActivity.java b/ClientServerDemo/ClientDemo/src/com/oreilly/demo/pa/ch17/account/AccountActivity.java similarity index 100% rename from 17/ClientDemo/src/com/oreilly/demo/pa/ch17/account/AccountActivity.java rename to ClientServerDemo/ClientDemo/src/com/oreilly/demo/pa/ch17/account/AccountActivity.java diff --git a/17/ClientDemo/src/com/oreilly/demo/pa/ch17/account/AccountAddActivity.java b/ClientServerDemo/ClientDemo/src/com/oreilly/demo/pa/ch17/account/AccountAddActivity.java similarity index 100% rename from 17/ClientDemo/src/com/oreilly/demo/pa/ch17/account/AccountAddActivity.java rename to ClientServerDemo/ClientDemo/src/com/oreilly/demo/pa/ch17/account/AccountAddActivity.java diff --git a/17/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/LoginActivity.java b/ClientServerDemo/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/LoginActivity.java similarity index 100% rename from 17/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/LoginActivity.java rename to ClientServerDemo/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/LoginActivity.java diff --git a/17/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/NetworkUtil.java b/ClientServerDemo/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/NetworkUtil.java similarity index 100% rename from 17/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/NetworkUtil.java rename to ClientServerDemo/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/NetworkUtil.java diff --git a/17/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/Settings.java b/ClientServerDemo/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/Settings.java similarity index 100% rename from 17/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/Settings.java rename to ClientServerDemo/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/Settings.java diff --git a/17/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/authsync/AuthenticationService.java b/ClientServerDemo/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/authsync/AuthenticationService.java similarity index 100% rename from 17/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/authsync/AuthenticationService.java rename to ClientServerDemo/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/authsync/AuthenticationService.java diff --git a/17/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/authsync/Authenticator.java b/ClientServerDemo/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/authsync/Authenticator.java similarity index 100% rename from 17/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/authsync/Authenticator.java rename to ClientServerDemo/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/authsync/Authenticator.java diff --git a/17/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/authsync/SyncAdapter.java b/ClientServerDemo/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/authsync/SyncAdapter.java similarity index 100% rename from 17/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/authsync/SyncAdapter.java rename to ClientServerDemo/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/authsync/SyncAdapter.java diff --git a/17/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/authsync/SyncService.java b/ClientServerDemo/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/authsync/SyncService.java similarity index 100% rename from 17/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/authsync/SyncService.java rename to ClientServerDemo/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/authsync/SyncService.java diff --git a/17/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/dataobjects/Change.java b/ClientServerDemo/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/dataobjects/Change.java similarity index 100% rename from 17/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/dataobjects/Change.java rename to ClientServerDemo/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/dataobjects/Change.java diff --git a/17/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/dataobjects/ListFriends.java b/ClientServerDemo/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/dataobjects/ListFriends.java similarity index 100% rename from 17/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/dataobjects/ListFriends.java rename to ClientServerDemo/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/dataobjects/ListFriends.java diff --git a/17/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/dataobjects/User.java b/ClientServerDemo/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/dataobjects/User.java similarity index 100% rename from 17/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/dataobjects/User.java rename to ClientServerDemo/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/dataobjects/User.java diff --git a/16/SensorDemos/tools/ide/eclipse/README.txt b/ClientServerDemo/ClientDemo/tools/ide/eclipse/README.txt similarity index 100% rename from 16/SensorDemos/tools/ide/eclipse/README.txt rename to ClientServerDemo/ClientDemo/tools/ide/eclipse/README.txt diff --git a/08/SimpleFragment/tools/ide/eclipse/classpath b/ClientServerDemo/ClientDemo/tools/ide/eclipse/classpath similarity index 100% rename from 08/SimpleFragment/tools/ide/eclipse/classpath rename to ClientServerDemo/ClientDemo/tools/ide/eclipse/classpath diff --git a/17/ClientDemo/tools/ide/eclipse/project b/ClientServerDemo/ClientDemo/tools/ide/eclipse/project similarity index 100% rename from 17/ClientDemo/tools/ide/eclipse/project rename to ClientServerDemo/ClientDemo/tools/ide/eclipse/project diff --git a/08/SimpleFragment/.gitignore b/ClientServerDemo/DemoServer/.gitignore similarity index 100% rename from 08/SimpleFragment/.gitignore rename to ClientServerDemo/DemoServer/.gitignore diff --git a/17/DemoServer/README.txt b/ClientServerDemo/DemoServer/README.txt similarity index 100% rename from 17/DemoServer/README.txt rename to ClientServerDemo/DemoServer/README.txt diff --git a/17/DemoServer/config/Config.json b/ClientServerDemo/DemoServer/config/Config.json similarity index 100% rename from 17/DemoServer/config/Config.json rename to ClientServerDemo/DemoServer/config/Config.json diff --git a/17/DemoServer/config/UsersDB.json b/ClientServerDemo/DemoServer/config/UsersDB.json similarity index 100% rename from 17/DemoServer/config/UsersDB.json rename to ClientServerDemo/DemoServer/config/UsersDB.json diff --git a/17/DemoServer/config/UsersDB_orig.json b/ClientServerDemo/DemoServer/config/UsersDB_orig.json similarity index 100% rename from 17/DemoServer/config/UsersDB_orig.json rename to ClientServerDemo/DemoServer/config/UsersDB_orig.json diff --git a/17/DemoServer/lib/commons-codec-1.2.jar b/ClientServerDemo/DemoServer/lib/commons-codec-1.2.jar similarity index 100% rename from 17/DemoServer/lib/commons-codec-1.2.jar rename to ClientServerDemo/DemoServer/lib/commons-codec-1.2.jar diff --git a/17/DemoServer/lib/commons-httpclient-3.1.jar b/ClientServerDemo/DemoServer/lib/commons-httpclient-3.1.jar similarity index 100% rename from 17/DemoServer/lib/commons-httpclient-3.1.jar rename to ClientServerDemo/DemoServer/lib/commons-httpclient-3.1.jar diff --git a/17/DemoServer/lib/commons-logging-1.0.4.jar b/ClientServerDemo/DemoServer/lib/commons-logging-1.0.4.jar similarity index 100% rename from 17/DemoServer/lib/commons-logging-1.0.4.jar rename to ClientServerDemo/DemoServer/lib/commons-logging-1.0.4.jar diff --git a/17/DemoServer/lib/jetty-continuation-7.0.2.v20100331.jar b/ClientServerDemo/DemoServer/lib/jetty-continuation-7.0.2.v20100331.jar similarity index 100% rename from 17/DemoServer/lib/jetty-continuation-7.0.2.v20100331.jar rename to ClientServerDemo/DemoServer/lib/jetty-continuation-7.0.2.v20100331.jar diff --git a/17/DemoServer/lib/jetty-http-7.0.2.v20100331.jar b/ClientServerDemo/DemoServer/lib/jetty-http-7.0.2.v20100331.jar similarity index 100% rename from 17/DemoServer/lib/jetty-http-7.0.2.v20100331.jar rename to ClientServerDemo/DemoServer/lib/jetty-http-7.0.2.v20100331.jar diff --git a/17/DemoServer/lib/jetty-io-7.0.2.v20100331.jar b/ClientServerDemo/DemoServer/lib/jetty-io-7.0.2.v20100331.jar similarity index 100% rename from 17/DemoServer/lib/jetty-io-7.0.2.v20100331.jar rename to ClientServerDemo/DemoServer/lib/jetty-io-7.0.2.v20100331.jar diff --git a/17/DemoServer/lib/jetty-security-7.0.2.v20100331.jar b/ClientServerDemo/DemoServer/lib/jetty-security-7.0.2.v20100331.jar similarity index 100% rename from 17/DemoServer/lib/jetty-security-7.0.2.v20100331.jar rename to ClientServerDemo/DemoServer/lib/jetty-security-7.0.2.v20100331.jar diff --git a/17/DemoServer/lib/jetty-server-7.0.2.v20100331.jar b/ClientServerDemo/DemoServer/lib/jetty-server-7.0.2.v20100331.jar similarity index 100% rename from 17/DemoServer/lib/jetty-server-7.0.2.v20100331.jar rename to ClientServerDemo/DemoServer/lib/jetty-server-7.0.2.v20100331.jar diff --git a/17/DemoServer/lib/jetty-servlet-7.0.2.v20100331.jar b/ClientServerDemo/DemoServer/lib/jetty-servlet-7.0.2.v20100331.jar similarity index 100% rename from 17/DemoServer/lib/jetty-servlet-7.0.2.v20100331.jar rename to ClientServerDemo/DemoServer/lib/jetty-servlet-7.0.2.v20100331.jar diff --git a/17/DemoServer/lib/jetty-util-7.0.2.v20100331.jar b/ClientServerDemo/DemoServer/lib/jetty-util-7.0.2.v20100331.jar similarity index 100% rename from 17/DemoServer/lib/jetty-util-7.0.2.v20100331.jar rename to ClientServerDemo/DemoServer/lib/jetty-util-7.0.2.v20100331.jar diff --git a/17/DemoServer/lib/json-1.0.0.jar b/ClientServerDemo/DemoServer/lib/json-1.0.0.jar similarity index 100% rename from 17/DemoServer/lib/json-1.0.0.jar rename to ClientServerDemo/DemoServer/lib/json-1.0.0.jar diff --git a/17/DemoServer/lib/servlet-api-2.5.jar b/ClientServerDemo/DemoServer/lib/servlet-api-2.5.jar similarity index 100% rename from 17/DemoServer/lib/servlet-api-2.5.jar rename to ClientServerDemo/DemoServer/lib/servlet-api-2.5.jar diff --git a/17/DemoServer/src/com/oreilly/demo/pa/ch17/dataobjects/Change.java b/ClientServerDemo/DemoServer/src/com/oreilly/demo/pa/ch17/dataobjects/Change.java similarity index 100% rename from 17/DemoServer/src/com/oreilly/demo/pa/ch17/dataobjects/Change.java rename to ClientServerDemo/DemoServer/src/com/oreilly/demo/pa/ch17/dataobjects/Change.java diff --git a/17/DemoServer/src/com/oreilly/demo/pa/ch17/dataobjects/ListFriends.java b/ClientServerDemo/DemoServer/src/com/oreilly/demo/pa/ch17/dataobjects/ListFriends.java similarity index 100% rename from 17/DemoServer/src/com/oreilly/demo/pa/ch17/dataobjects/ListFriends.java rename to ClientServerDemo/DemoServer/src/com/oreilly/demo/pa/ch17/dataobjects/ListFriends.java diff --git a/17/DemoServer/src/com/oreilly/demo/pa/ch17/dataobjects/User.java b/ClientServerDemo/DemoServer/src/com/oreilly/demo/pa/ch17/dataobjects/User.java similarity index 100% rename from 17/DemoServer/src/com/oreilly/demo/pa/ch17/dataobjects/User.java rename to ClientServerDemo/DemoServer/src/com/oreilly/demo/pa/ch17/dataobjects/User.java diff --git a/17/DemoServer/src/com/oreilly/demo/pa/ch17/server/Config.java b/ClientServerDemo/DemoServer/src/com/oreilly/demo/pa/ch17/server/Config.java similarity index 100% rename from 17/DemoServer/src/com/oreilly/demo/pa/ch17/server/Config.java rename to ClientServerDemo/DemoServer/src/com/oreilly/demo/pa/ch17/server/Config.java diff --git a/17/DemoServer/src/com/oreilly/demo/pa/ch17/server/MainServer.java b/ClientServerDemo/DemoServer/src/com/oreilly/demo/pa/ch17/server/MainServer.java similarity index 100% rename from 17/DemoServer/src/com/oreilly/demo/pa/ch17/server/MainServer.java rename to ClientServerDemo/DemoServer/src/com/oreilly/demo/pa/ch17/server/MainServer.java diff --git a/17/DemoServer/src/com/oreilly/demo/pa/ch17/server/ServerStatic.java b/ClientServerDemo/DemoServer/src/com/oreilly/demo/pa/ch17/server/ServerStatic.java similarity index 100% rename from 17/DemoServer/src/com/oreilly/demo/pa/ch17/server/ServerStatic.java rename to ClientServerDemo/DemoServer/src/com/oreilly/demo/pa/ch17/server/ServerStatic.java diff --git a/17/DemoServer/src/com/oreilly/demo/pa/ch17/server/ServletUtil.java b/ClientServerDemo/DemoServer/src/com/oreilly/demo/pa/ch17/server/ServletUtil.java similarity index 100% rename from 17/DemoServer/src/com/oreilly/demo/pa/ch17/server/ServletUtil.java rename to ClientServerDemo/DemoServer/src/com/oreilly/demo/pa/ch17/server/ServletUtil.java diff --git a/17/DemoServer/src/com/oreilly/demo/pa/ch17/server/data/UsersData.java b/ClientServerDemo/DemoServer/src/com/oreilly/demo/pa/ch17/server/data/UsersData.java similarity index 100% rename from 17/DemoServer/src/com/oreilly/demo/pa/ch17/server/data/UsersData.java rename to ClientServerDemo/DemoServer/src/com/oreilly/demo/pa/ch17/server/data/UsersData.java diff --git a/17/DemoServer/src/com/oreilly/demo/pa/ch17/server/servlet/AddFriendServlet.java b/ClientServerDemo/DemoServer/src/com/oreilly/demo/pa/ch17/server/servlet/AddFriendServlet.java similarity index 100% rename from 17/DemoServer/src/com/oreilly/demo/pa/ch17/server/servlet/AddFriendServlet.java rename to ClientServerDemo/DemoServer/src/com/oreilly/demo/pa/ch17/server/servlet/AddFriendServlet.java diff --git a/17/DemoServer/src/com/oreilly/demo/pa/ch17/server/servlet/AddUserServlet.java b/ClientServerDemo/DemoServer/src/com/oreilly/demo/pa/ch17/server/servlet/AddUserServlet.java similarity index 100% rename from 17/DemoServer/src/com/oreilly/demo/pa/ch17/server/servlet/AddUserServlet.java rename to ClientServerDemo/DemoServer/src/com/oreilly/demo/pa/ch17/server/servlet/AddUserServlet.java diff --git a/17/DemoServer/src/com/oreilly/demo/pa/ch17/server/servlet/BaseServlet.java b/ClientServerDemo/DemoServer/src/com/oreilly/demo/pa/ch17/server/servlet/BaseServlet.java similarity index 100% rename from 17/DemoServer/src/com/oreilly/demo/pa/ch17/server/servlet/BaseServlet.java rename to ClientServerDemo/DemoServer/src/com/oreilly/demo/pa/ch17/server/servlet/BaseServlet.java diff --git a/17/DemoServer/src/com/oreilly/demo/pa/ch17/server/servlet/DeleteFriendServlet.java b/ClientServerDemo/DemoServer/src/com/oreilly/demo/pa/ch17/server/servlet/DeleteFriendServlet.java similarity index 100% rename from 17/DemoServer/src/com/oreilly/demo/pa/ch17/server/servlet/DeleteFriendServlet.java rename to ClientServerDemo/DemoServer/src/com/oreilly/demo/pa/ch17/server/servlet/DeleteFriendServlet.java diff --git a/17/DemoServer/src/com/oreilly/demo/pa/ch17/server/servlet/GetFriendsServlet.java b/ClientServerDemo/DemoServer/src/com/oreilly/demo/pa/ch17/server/servlet/GetFriendsServlet.java similarity index 100% rename from 17/DemoServer/src/com/oreilly/demo/pa/ch17/server/servlet/GetFriendsServlet.java rename to ClientServerDemo/DemoServer/src/com/oreilly/demo/pa/ch17/server/servlet/GetFriendsServlet.java diff --git a/17/DemoServer/src/com/oreilly/demo/pa/ch17/server/servlet/ISHttpServletType.java b/ClientServerDemo/DemoServer/src/com/oreilly/demo/pa/ch17/server/servlet/ISHttpServletType.java similarity index 100% rename from 17/DemoServer/src/com/oreilly/demo/pa/ch17/server/servlet/ISHttpServletType.java rename to ClientServerDemo/DemoServer/src/com/oreilly/demo/pa/ch17/server/servlet/ISHttpServletType.java diff --git a/17/DemoServer/src/com/oreilly/demo/pa/ch17/server/servlet/LoginServlet.java b/ClientServerDemo/DemoServer/src/com/oreilly/demo/pa/ch17/server/servlet/LoginServlet.java similarity index 100% rename from 17/DemoServer/src/com/oreilly/demo/pa/ch17/server/servlet/LoginServlet.java rename to ClientServerDemo/DemoServer/src/com/oreilly/demo/pa/ch17/server/servlet/LoginServlet.java diff --git a/17/ClientDemo/tools/ide/eclipse/README.txt b/ClientServerDemo/DemoServer/tools/ide/eclipse/README.txt similarity index 100% rename from 17/ClientDemo/tools/ide/eclipse/README.txt rename to ClientServerDemo/DemoServer/tools/ide/eclipse/README.txt diff --git a/17/DemoServer/tools/ide/eclipse/classpath b/ClientServerDemo/DemoServer/tools/ide/eclipse/classpath similarity index 100% rename from 17/DemoServer/tools/ide/eclipse/classpath rename to ClientServerDemo/DemoServer/tools/ide/eclipse/classpath diff --git a/17/DemoServer/tools/ide/eclipse/project b/ClientServerDemo/DemoServer/tools/ide/eclipse/project similarity index 100% rename from 17/DemoServer/tools/ide/eclipse/project rename to ClientServerDemo/DemoServer/tools/ide/eclipse/project diff --git a/17/DemoServer/tools/runserver.sh b/ClientServerDemo/DemoServer/tools/runserver.sh similarity index 100% rename from 17/DemoServer/tools/runserver.sh rename to ClientServerDemo/DemoServer/tools/runserver.sh diff --git a/02/FillListTask/.gitignore b/FillListTask/.gitignore similarity index 100% rename from 02/FillListTask/.gitignore rename to FillListTask/.gitignore diff --git a/02/FillListTask/default.properties b/FillListTask/default.properties similarity index 100% rename from 02/FillListTask/default.properties rename to FillListTask/default.properties diff --git a/02/FillListTask/src/com/oreilly/demo/android/ch02/filllisttask/FillListTask.java b/FillListTask/src/com/oreilly/demo/android/ch02/filllisttask/FillListTask.java similarity index 100% rename from 02/FillListTask/src/com/oreilly/demo/android/ch02/filllisttask/FillListTask.java rename to FillListTask/src/com/oreilly/demo/android/ch02/filllisttask/FillListTask.java diff --git a/02/FillListTask/tools/ide/eclipse/classpath b/FillListTask/tools/ide/eclipse/classpath similarity index 100% rename from 02/FillListTask/tools/ide/eclipse/classpath rename to FillListTask/tools/ide/eclipse/classpath diff --git a/02/FillListTask/tools/ide/eclipse/project b/FillListTask/tools/ide/eclipse/project similarity index 100% rename from 02/FillListTask/tools/ide/eclipse/project rename to FillListTask/tools/ide/eclipse/project diff --git a/09/AndroidViewDemo/.gitignore b/FinchFramework/FinchFramework/.gitignore similarity index 100% rename from 09/AndroidViewDemo/.gitignore rename to FinchFramework/FinchFramework/.gitignore diff --git a/framework/FinchFramework/AndroidManifest.xml b/FinchFramework/FinchFramework/AndroidManifest.xml similarity index 100% rename from framework/FinchFramework/AndroidManifest.xml rename to FinchFramework/FinchFramework/AndroidManifest.xml diff --git a/framework/FinchFramework/default.properties b/FinchFramework/FinchFramework/default.properties similarity index 100% rename from framework/FinchFramework/default.properties rename to FinchFramework/FinchFramework/default.properties diff --git a/framework/FinchFramework/lib-src/com/finchframework/finch/Finch.java b/FinchFramework/FinchFramework/lib-src/com/finchframework/finch/Finch.java similarity index 100% rename from framework/FinchFramework/lib-src/com/finchframework/finch/Finch.java rename to FinchFramework/FinchFramework/lib-src/com/finchframework/finch/Finch.java diff --git a/framework/FinchFramework/lib-src/com/finchframework/finch/FinchApplication.java b/FinchFramework/FinchFramework/lib-src/com/finchframework/finch/FinchApplication.java similarity index 100% rename from framework/FinchFramework/lib-src/com/finchframework/finch/FinchApplication.java rename to FinchFramework/FinchFramework/lib-src/com/finchframework/finch/FinchApplication.java diff --git a/framework/FinchFramework/lib-src/com/finchframework/finch/rest/FileHandler.java b/FinchFramework/FinchFramework/lib-src/com/finchframework/finch/rest/FileHandler.java similarity index 100% rename from framework/FinchFramework/lib-src/com/finchframework/finch/rest/FileHandler.java rename to FinchFramework/FinchFramework/lib-src/com/finchframework/finch/rest/FileHandler.java diff --git a/framework/FinchFramework/lib-src/com/finchframework/finch/rest/FileHandlerFactory.java b/FinchFramework/FinchFramework/lib-src/com/finchframework/finch/rest/FileHandlerFactory.java similarity index 100% rename from framework/FinchFramework/lib-src/com/finchframework/finch/rest/FileHandlerFactory.java rename to FinchFramework/FinchFramework/lib-src/com/finchframework/finch/rest/FileHandlerFactory.java diff --git a/framework/FinchFramework/lib-src/com/finchframework/finch/rest/RESTfulContentProvider.java b/FinchFramework/FinchFramework/lib-src/com/finchframework/finch/rest/RESTfulContentProvider.java similarity index 100% rename from framework/FinchFramework/lib-src/com/finchframework/finch/rest/RESTfulContentProvider.java rename to FinchFramework/FinchFramework/lib-src/com/finchframework/finch/rest/RESTfulContentProvider.java diff --git a/framework/FinchFramework/lib-src/com/finchframework/finch/rest/RawResponse.java b/FinchFramework/FinchFramework/lib-src/com/finchframework/finch/rest/RawResponse.java similarity index 100% rename from framework/FinchFramework/lib-src/com/finchframework/finch/rest/RawResponse.java rename to FinchFramework/FinchFramework/lib-src/com/finchframework/finch/rest/RawResponse.java diff --git a/framework/FinchFramework/lib-src/com/finchframework/finch/rest/ResponseHandler.java b/FinchFramework/FinchFramework/lib-src/com/finchframework/finch/rest/ResponseHandler.java similarity index 100% rename from framework/FinchFramework/lib-src/com/finchframework/finch/rest/ResponseHandler.java rename to FinchFramework/FinchFramework/lib-src/com/finchframework/finch/rest/ResponseHandler.java diff --git a/framework/FinchFramework/lib-src/com/finchframework/finch/rest/UriRequestTask.java b/FinchFramework/FinchFramework/lib-src/com/finchframework/finch/rest/UriRequestTask.java similarity index 100% rename from framework/FinchFramework/lib-src/com/finchframework/finch/rest/UriRequestTask.java rename to FinchFramework/FinchFramework/lib-src/com/finchframework/finch/rest/UriRequestTask.java diff --git a/framework/FinchFramework/lib-src/com/finchframework/finch/views/MesgEditText.java b/FinchFramework/FinchFramework/lib-src/com/finchframework/finch/views/MesgEditText.java similarity index 100% rename from framework/FinchFramework/lib-src/com/finchframework/finch/views/MesgEditText.java rename to FinchFramework/FinchFramework/lib-src/com/finchframework/finch/views/MesgEditText.java diff --git a/framework/FinchFramework/res/anim/flip.xml b/FinchFramework/FinchFramework/res/anim/flip.xml similarity index 100% rename from framework/FinchFramework/res/anim/flip.xml rename to FinchFramework/FinchFramework/res/anim/flip.xml diff --git a/framework/FinchFramework/res/drawable-hdpi/ic_menu_preferences.png b/FinchFramework/FinchFramework/res/drawable-hdpi/ic_menu_preferences.png similarity index 100% rename from framework/FinchFramework/res/drawable-hdpi/ic_menu_preferences.png rename to FinchFramework/FinchFramework/res/drawable-hdpi/ic_menu_preferences.png diff --git a/10/MicroJobs/res/drawable-hdpi/icon.png b/FinchFramework/FinchFramework/res/drawable-hdpi/icon.png similarity index 100% rename from 10/MicroJobs/res/drawable-hdpi/icon.png rename to FinchFramework/FinchFramework/res/drawable-hdpi/icon.png diff --git a/11/FinchLifecycle/res/drawable-ldpi/icon.png b/FinchFramework/FinchFramework/res/drawable-ldpi/icon.png similarity index 100% rename from 11/FinchLifecycle/res/drawable-ldpi/icon.png rename to FinchFramework/FinchFramework/res/drawable-ldpi/icon.png diff --git a/framework/FinchFramework/res/drawable-mdpi/ic_menu_preferences.png b/FinchFramework/FinchFramework/res/drawable-mdpi/ic_menu_preferences.png similarity index 100% rename from framework/FinchFramework/res/drawable-mdpi/ic_menu_preferences.png rename to FinchFramework/FinchFramework/res/drawable-mdpi/ic_menu_preferences.png diff --git a/09/AndroidViewDemo/res/drawable-mdpi/icon.png b/FinchFramework/FinchFramework/res/drawable-mdpi/icon.png similarity index 100% rename from 09/AndroidViewDemo/res/drawable-mdpi/icon.png rename to FinchFramework/FinchFramework/res/drawable-mdpi/icon.png diff --git a/framework/FinchFramework/res/drawable/pine_grosbeak.png b/FinchFramework/FinchFramework/res/drawable/pine_grosbeak.png similarity index 100% rename from framework/FinchFramework/res/drawable/pine_grosbeak.png rename to FinchFramework/FinchFramework/res/drawable/pine_grosbeak.png diff --git a/framework/FinchFramework/res/layout/animate_activity.xml b/FinchFramework/FinchFramework/res/layout/animate_activity.xml similarity index 100% rename from framework/FinchFramework/res/layout/animate_activity.xml rename to FinchFramework/FinchFramework/res/layout/animate_activity.xml diff --git a/framework/FinchFramework/res/layout/bt_console.xml b/FinchFramework/FinchFramework/res/layout/bt_console.xml similarity index 100% rename from framework/FinchFramework/res/layout/bt_console.xml rename to FinchFramework/FinchFramework/res/layout/bt_console.xml diff --git a/framework/FinchFramework/res/layout/checkbox_example.xml b/FinchFramework/FinchFramework/res/layout/checkbox_example.xml similarity index 100% rename from framework/FinchFramework/res/layout/checkbox_example.xml rename to FinchFramework/FinchFramework/res/layout/checkbox_example.xml diff --git a/framework/FinchFramework/res/layout/custom_title.xml b/FinchFramework/FinchFramework/res/layout/custom_title.xml similarity index 100% rename from framework/FinchFramework/res/layout/custom_title.xml rename to FinchFramework/FinchFramework/res/layout/custom_title.xml diff --git a/framework/FinchFramework/res/layout/device_list.xml b/FinchFramework/FinchFramework/res/layout/device_list.xml similarity index 100% rename from framework/FinchFramework/res/layout/device_list.xml rename to FinchFramework/FinchFramework/res/layout/device_list.xml diff --git a/framework/FinchFramework/res/layout/device_name.xml b/FinchFramework/FinchFramework/res/layout/device_name.xml similarity index 100% rename from framework/FinchFramework/res/layout/device_name.xml rename to FinchFramework/FinchFramework/res/layout/device_name.xml diff --git a/framework/FinchFramework/res/layout/example_layout.xml b/FinchFramework/FinchFramework/res/layout/example_layout.xml similarity index 100% rename from framework/FinchFramework/res/layout/example_layout.xml rename to FinchFramework/FinchFramework/res/layout/example_layout.xml diff --git a/06/JSerializable/res/layout/main.xml b/FinchFramework/FinchFramework/res/layout/main.xml similarity index 100% rename from 06/JSerializable/res/layout/main.xml rename to FinchFramework/FinchFramework/res/layout/main.xml diff --git a/framework/FinchFramework/res/layout/message.xml b/FinchFramework/FinchFramework/res/layout/message.xml similarity index 100% rename from framework/FinchFramework/res/layout/message.xml rename to FinchFramework/FinchFramework/res/layout/message.xml diff --git a/framework/FinchFramework/res/layout/video_list_item.xml b/FinchFramework/FinchFramework/res/layout/video_list_item.xml similarity index 100% rename from framework/FinchFramework/res/layout/video_list_item.xml rename to FinchFramework/FinchFramework/res/layout/video_list_item.xml diff --git a/framework/FinchFramework/res/layout/video_query_activity.xml b/FinchFramework/FinchFramework/res/layout/video_query_activity.xml similarity index 100% rename from framework/FinchFramework/res/layout/video_query_activity.xml rename to FinchFramework/FinchFramework/res/layout/video_query_activity.xml diff --git a/framework/FinchFramework/res/menu/bt_console_option_menu.xml b/FinchFramework/FinchFramework/res/menu/bt_console_option_menu.xml similarity index 100% rename from framework/FinchFramework/res/menu/bt_console_option_menu.xml rename to FinchFramework/FinchFramework/res/menu/bt_console_option_menu.xml diff --git a/framework/FinchFramework/res/menu/finch_option_menu.xml b/FinchFramework/FinchFramework/res/menu/finch_option_menu.xml similarity index 100% rename from framework/FinchFramework/res/menu/finch_option_menu.xml rename to FinchFramework/FinchFramework/res/menu/finch_option_menu.xml diff --git a/framework/FinchFramework/res/menu/finchwelcomemenu.xml b/FinchFramework/FinchFramework/res/menu/finchwelcomemenu.xml similarity index 100% rename from framework/FinchFramework/res/menu/finchwelcomemenu.xml rename to FinchFramework/FinchFramework/res/menu/finchwelcomemenu.xml diff --git a/framework/FinchFramework/res/raw/yt_query_json.json b/FinchFramework/FinchFramework/res/raw/yt_query_json.json similarity index 100% rename from framework/FinchFramework/res/raw/yt_query_json.json rename to FinchFramework/FinchFramework/res/raw/yt_query_json.json diff --git a/framework/FinchFramework/res/raw/yt_query_rss.xml b/FinchFramework/FinchFramework/res/raw/yt_query_rss.xml similarity index 100% rename from framework/FinchFramework/res/raw/yt_query_rss.xml rename to FinchFramework/FinchFramework/res/raw/yt_query_rss.xml diff --git a/framework/FinchFramework/res/values/colors.xml b/FinchFramework/FinchFramework/res/values/colors.xml similarity index 100% rename from framework/FinchFramework/res/values/colors.xml rename to FinchFramework/FinchFramework/res/values/colors.xml diff --git a/framework/FinchFramework/res/values/dimens.xml b/FinchFramework/FinchFramework/res/values/dimens.xml similarity index 100% rename from framework/FinchFramework/res/values/dimens.xml rename to FinchFramework/FinchFramework/res/values/dimens.xml diff --git a/framework/FinchFramework/res/values/strings.xml b/FinchFramework/FinchFramework/res/values/strings.xml similarity index 100% rename from framework/FinchFramework/res/values/strings.xml rename to FinchFramework/FinchFramework/res/values/strings.xml diff --git a/framework/FinchFramework/src/animate/AnimateActivity.java b/FinchFramework/FinchFramework/src/animate/AnimateActivity.java similarity index 100% rename from framework/FinchFramework/src/animate/AnimateActivity.java rename to FinchFramework/FinchFramework/src/animate/AnimateActivity.java diff --git a/framework/FinchFramework/src/com/finchframework/bluetooth/BtConsoleActivity.java b/FinchFramework/FinchFramework/src/com/finchframework/bluetooth/BtConsoleActivity.java similarity index 100% rename from framework/FinchFramework/src/com/finchframework/bluetooth/BtConsoleActivity.java rename to FinchFramework/FinchFramework/src/com/finchframework/bluetooth/BtConsoleActivity.java diff --git a/framework/FinchFramework/src/com/finchframework/bluetooth/BtHelperHandler.java b/FinchFramework/FinchFramework/src/com/finchframework/bluetooth/BtHelperHandler.java similarity index 100% rename from framework/FinchFramework/src/com/finchframework/bluetooth/BtHelperHandler.java rename to FinchFramework/FinchFramework/src/com/finchframework/bluetooth/BtHelperHandler.java diff --git a/framework/FinchFramework/src/com/finchframework/bluetooth/BtSPPHelper.java b/FinchFramework/FinchFramework/src/com/finchframework/bluetooth/BtSPPHelper.java similarity index 100% rename from framework/FinchFramework/src/com/finchframework/bluetooth/BtSPPHelper.java rename to FinchFramework/FinchFramework/src/com/finchframework/bluetooth/BtSPPHelper.java diff --git a/framework/FinchFramework/src/com/finchframework/bluetooth/DeviceListActivity.java b/FinchFramework/FinchFramework/src/com/finchframework/bluetooth/DeviceListActivity.java similarity index 100% rename from framework/FinchFramework/src/com/finchframework/bluetooth/DeviceListActivity.java rename to FinchFramework/FinchFramework/src/com/finchframework/bluetooth/DeviceListActivity.java diff --git a/framework/FinchFramework/src/com/finchframework/finch/FinchWelcome.java b/FinchFramework/FinchFramework/src/com/finchframework/finch/FinchWelcome.java similarity index 100% rename from framework/FinchFramework/src/com/finchframework/finch/FinchWelcome.java rename to FinchFramework/FinchFramework/src/com/finchframework/finch/FinchWelcome.java diff --git a/framework/FinchFramework/tools/ant/build.xml b/FinchFramework/FinchFramework/tools/ant/build.xml similarity index 100% rename from framework/FinchFramework/tools/ant/build.xml rename to FinchFramework/FinchFramework/tools/ant/build.xml diff --git a/framework/FinchFramework/tools/ide/eclipse/classpath b/FinchFramework/FinchFramework/tools/ide/eclipse/classpath similarity index 100% rename from framework/FinchFramework/tools/ide/eclipse/classpath rename to FinchFramework/FinchFramework/tools/ide/eclipse/classpath diff --git a/framework/FinchFramework/tools/ide/eclipse/project b/FinchFramework/FinchFramework/tools/ide/eclipse/project similarity index 100% rename from framework/FinchFramework/tools/ide/eclipse/project rename to FinchFramework/FinchFramework/tools/ide/eclipse/project diff --git a/10/MicroJobs/.gitignore b/FinchFramework/FinchFrameworkTest/.gitignore similarity index 100% rename from 10/MicroJobs/.gitignore rename to FinchFramework/FinchFrameworkTest/.gitignore diff --git a/framework/FinchFrameworkTest/AndroidManifest.xml b/FinchFramework/FinchFrameworkTest/AndroidManifest.xml similarity index 100% rename from framework/FinchFrameworkTest/AndroidManifest.xml rename to FinchFramework/FinchFrameworkTest/AndroidManifest.xml diff --git a/02/SharedListTask/default.properties b/FinchFramework/FinchFrameworkTest/default.properties similarity index 100% rename from 02/SharedListTask/default.properties rename to FinchFramework/FinchFrameworkTest/default.properties diff --git a/11/FinchLifecycle/res/drawable-hdpi/icon.png b/FinchFramework/FinchFrameworkTest/res/drawable-hdpi/icon.png similarity index 100% rename from 11/FinchLifecycle/res/drawable-hdpi/icon.png rename to FinchFramework/FinchFrameworkTest/res/drawable-hdpi/icon.png diff --git a/11/FinchLifecycleBackport/res/drawable-ldpi/icon.png b/FinchFramework/FinchFrameworkTest/res/drawable-ldpi/icon.png similarity index 100% rename from 11/FinchLifecycleBackport/res/drawable-ldpi/icon.png rename to FinchFramework/FinchFrameworkTest/res/drawable-ldpi/icon.png diff --git a/10/MicroJobs/res/drawable-mdpi/icon.png b/FinchFramework/FinchFrameworkTest/res/drawable-mdpi/icon.png similarity index 100% rename from 10/MicroJobs/res/drawable-mdpi/icon.png rename to FinchFramework/FinchFrameworkTest/res/drawable-mdpi/icon.png diff --git a/framework/FinchFramework/res/layout/main.xml b/FinchFramework/FinchFrameworkTest/res/layout/main.xml similarity index 100% rename from framework/FinchFramework/res/layout/main.xml rename to FinchFramework/FinchFrameworkTest/res/layout/main.xml diff --git a/framework/FinchFrameworkTest/res/values/strings.xml b/FinchFramework/FinchFrameworkTest/res/values/strings.xml similarity index 100% rename from framework/FinchFrameworkTest/res/values/strings.xml rename to FinchFramework/FinchFrameworkTest/res/values/strings.xml diff --git a/10/MicroJobs/tools/ide/eclipse/classpath b/FinchFramework/FinchFrameworkTest/tools/ide/eclipse/classpath similarity index 100% rename from 10/MicroJobs/tools/ide/eclipse/classpath rename to FinchFramework/FinchFrameworkTest/tools/ide/eclipse/classpath diff --git a/framework/FinchFrameworkTest/tools/ide/eclipse/project b/FinchFramework/FinchFrameworkTest/tools/ide/eclipse/project similarity index 100% rename from framework/FinchFrameworkTest/tools/ide/eclipse/project rename to FinchFramework/FinchFrameworkTest/tools/ide/eclipse/project diff --git a/11/FinchLifecycle/.gitignore b/FinchLifecycle/.gitignore similarity index 100% rename from 11/FinchLifecycle/.gitignore rename to FinchLifecycle/.gitignore diff --git a/11/FinchLifecycle/AndroidManifest.xml b/FinchLifecycle/AndroidManifest.xml similarity index 100% rename from 11/FinchLifecycle/AndroidManifest.xml rename to FinchLifecycle/AndroidManifest.xml diff --git a/11/FinchLifecycle/default.properties b/FinchLifecycle/default.properties similarity index 100% rename from 11/FinchLifecycle/default.properties rename to FinchLifecycle/default.properties diff --git a/08/SimpleFragment/proguard.cfg b/FinchLifecycle/proguard.cfg similarity index 100% rename from 08/SimpleFragment/proguard.cfg rename to FinchLifecycle/proguard.cfg diff --git a/11/FinchLifecycleBackport/res/drawable-hdpi/icon.png b/FinchLifecycle/res/drawable-hdpi/icon.png similarity index 100% rename from 11/FinchLifecycleBackport/res/drawable-hdpi/icon.png rename to FinchLifecycle/res/drawable-hdpi/icon.png diff --git a/12/FinchVideo/res/drawable-ldpi/icon.png b/FinchLifecycle/res/drawable-ldpi/icon.png similarity index 100% rename from 12/FinchVideo/res/drawable-ldpi/icon.png rename to FinchLifecycle/res/drawable-ldpi/icon.png diff --git a/11/FinchLifecycle/res/drawable-mdpi/icon.png b/FinchLifecycle/res/drawable-mdpi/icon.png similarity index 100% rename from 11/FinchLifecycle/res/drawable-mdpi/icon.png rename to FinchLifecycle/res/drawable-mdpi/icon.png diff --git a/11/FinchLifecycle/res/layout/fragment_content.xml b/FinchLifecycle/res/layout/fragment_content.xml similarity index 100% rename from 11/FinchLifecycle/res/layout/fragment_content.xml rename to FinchLifecycle/res/layout/fragment_content.xml diff --git a/11/FinchLifecycle/res/layout/main.xml b/FinchLifecycle/res/layout/main.xml similarity index 100% rename from 11/FinchLifecycle/res/layout/main.xml rename to FinchLifecycle/res/layout/main.xml diff --git a/11/FinchLifecycle/res/values/strings.xml b/FinchLifecycle/res/values/strings.xml similarity index 100% rename from 11/FinchLifecycle/res/values/strings.xml rename to FinchLifecycle/res/values/strings.xml diff --git a/11/FinchLifecycle/src/com/oreilly/demo/pa/ch10/finchlifecycle/FinchApplication.java b/FinchLifecycle/src/com/oreilly/demo/pa/ch10/finchlifecycle/FinchApplication.java similarity index 100% rename from 11/FinchLifecycle/src/com/oreilly/demo/pa/ch10/finchlifecycle/FinchApplication.java rename to FinchLifecycle/src/com/oreilly/demo/pa/ch10/finchlifecycle/FinchApplication.java diff --git a/11/FinchLifecycle/src/com/oreilly/demo/pa/ch10/finchlifecycle/FinchLifecycle.java b/FinchLifecycle/src/com/oreilly/demo/pa/ch10/finchlifecycle/FinchLifecycle.java similarity index 100% rename from 11/FinchLifecycle/src/com/oreilly/demo/pa/ch10/finchlifecycle/FinchLifecycle.java rename to FinchLifecycle/src/com/oreilly/demo/pa/ch10/finchlifecycle/FinchLifecycle.java diff --git a/11/FinchLifecycle/src/com/oreilly/demo/pa/ch10/finchlifecycle/TestFragment.java b/FinchLifecycle/src/com/oreilly/demo/pa/ch10/finchlifecycle/TestFragment.java similarity index 100% rename from 11/FinchLifecycle/src/com/oreilly/demo/pa/ch10/finchlifecycle/TestFragment.java rename to FinchLifecycle/src/com/oreilly/demo/pa/ch10/finchlifecycle/TestFragment.java diff --git a/11/FinchLifecycle/tools/ide/eclipse/classpath b/FinchLifecycle/tools/ide/eclipse/classpath similarity index 100% rename from 11/FinchLifecycle/tools/ide/eclipse/classpath rename to FinchLifecycle/tools/ide/eclipse/classpath diff --git a/11/FinchLifecycle/tools/ide/eclipse/project b/FinchLifecycle/tools/ide/eclipse/project similarity index 100% rename from 11/FinchLifecycle/tools/ide/eclipse/project rename to FinchLifecycle/tools/ide/eclipse/project diff --git a/11/FinchLifecycleBackport/.gitignore b/FinchLifecycleBackport/.gitignore similarity index 100% rename from 11/FinchLifecycleBackport/.gitignore rename to FinchLifecycleBackport/.gitignore diff --git a/11/FinchLifecycleBackport/AndroidManifest.xml b/FinchLifecycleBackport/AndroidManifest.xml similarity index 100% rename from 11/FinchLifecycleBackport/AndroidManifest.xml rename to FinchLifecycleBackport/AndroidManifest.xml diff --git a/11/FinchLifecycleBackport/default.properties b/FinchLifecycleBackport/default.properties similarity index 100% rename from 11/FinchLifecycleBackport/default.properties rename to FinchLifecycleBackport/default.properties diff --git a/11/FinchLifecycleBackport/libs/android-support-v4.jar b/FinchLifecycleBackport/libs/android-support-v4.jar similarity index 100% rename from 11/FinchLifecycleBackport/libs/android-support-v4.jar rename to FinchLifecycleBackport/libs/android-support-v4.jar diff --git a/11/FinchLifecycle/proguard.cfg b/FinchLifecycleBackport/proguard.cfg similarity index 100% rename from 11/FinchLifecycle/proguard.cfg rename to FinchLifecycleBackport/proguard.cfg diff --git a/12/FinchVideo/res/drawable-hdpi/icon.png b/FinchLifecycleBackport/res/drawable-hdpi/icon.png similarity index 100% rename from 12/FinchVideo/res/drawable-hdpi/icon.png rename to FinchLifecycleBackport/res/drawable-hdpi/icon.png diff --git a/14/AudioPlayer/res/drawable-ldpi/icon.png b/FinchLifecycleBackport/res/drawable-ldpi/icon.png similarity index 100% rename from 14/AudioPlayer/res/drawable-ldpi/icon.png rename to FinchLifecycleBackport/res/drawable-ldpi/icon.png diff --git a/11/FinchLifecycleBackport/res/drawable-mdpi/icon.png b/FinchLifecycleBackport/res/drawable-mdpi/icon.png similarity index 100% rename from 11/FinchLifecycleBackport/res/drawable-mdpi/icon.png rename to FinchLifecycleBackport/res/drawable-mdpi/icon.png diff --git a/11/FinchLifecycleBackport/res/layout/fragment_content.xml b/FinchLifecycleBackport/res/layout/fragment_content.xml similarity index 100% rename from 11/FinchLifecycleBackport/res/layout/fragment_content.xml rename to FinchLifecycleBackport/res/layout/fragment_content.xml diff --git a/11/FinchLifecycleBackport/res/layout/main.xml b/FinchLifecycleBackport/res/layout/main.xml similarity index 100% rename from 11/FinchLifecycleBackport/res/layout/main.xml rename to FinchLifecycleBackport/res/layout/main.xml diff --git a/11/FinchLifecycleBackport/res/values/strings.xml b/FinchLifecycleBackport/res/values/strings.xml similarity index 100% rename from 11/FinchLifecycleBackport/res/values/strings.xml rename to FinchLifecycleBackport/res/values/strings.xml diff --git a/11/FinchLifecycleBackport/src/com/oreilly/demo/pa/ch10/finchlifecyclebackport/FinchApplication.java b/FinchLifecycleBackport/src/com/oreilly/demo/pa/ch10/finchlifecyclebackport/FinchApplication.java similarity index 100% rename from 11/FinchLifecycleBackport/src/com/oreilly/demo/pa/ch10/finchlifecyclebackport/FinchApplication.java rename to FinchLifecycleBackport/src/com/oreilly/demo/pa/ch10/finchlifecyclebackport/FinchApplication.java diff --git a/11/FinchLifecycleBackport/src/com/oreilly/demo/pa/ch10/finchlifecyclebackport/FinchLifecycle.java b/FinchLifecycleBackport/src/com/oreilly/demo/pa/ch10/finchlifecyclebackport/FinchLifecycle.java similarity index 100% rename from 11/FinchLifecycleBackport/src/com/oreilly/demo/pa/ch10/finchlifecyclebackport/FinchLifecycle.java rename to FinchLifecycleBackport/src/com/oreilly/demo/pa/ch10/finchlifecyclebackport/FinchLifecycle.java diff --git a/11/FinchLifecycleBackport/src/com/oreilly/demo/pa/ch10/finchlifecyclebackport/TestFragment.java b/FinchLifecycleBackport/src/com/oreilly/demo/pa/ch10/finchlifecyclebackport/TestFragment.java similarity index 100% rename from 11/FinchLifecycleBackport/src/com/oreilly/demo/pa/ch10/finchlifecyclebackport/TestFragment.java rename to FinchLifecycleBackport/src/com/oreilly/demo/pa/ch10/finchlifecyclebackport/TestFragment.java diff --git a/11/FinchLifecycleBackport/tools/ide/eclipse/classpath b/FinchLifecycleBackport/tools/ide/eclipse/classpath similarity index 100% rename from 11/FinchLifecycleBackport/tools/ide/eclipse/classpath rename to FinchLifecycleBackport/tools/ide/eclipse/classpath diff --git a/11/FinchLifecycleBackport/tools/ide/eclipse/project b/FinchLifecycleBackport/tools/ide/eclipse/project similarity index 100% rename from 11/FinchLifecycleBackport/tools/ide/eclipse/project rename to FinchLifecycleBackport/tools/ide/eclipse/project diff --git a/12/FinchVideo/.gitignore b/FinchVideo/.gitignore similarity index 100% rename from 12/FinchVideo/.gitignore rename to FinchVideo/.gitignore diff --git a/12/FinchVideo/AndroidManifest.xml b/FinchVideo/AndroidManifest.xml similarity index 100% rename from 12/FinchVideo/AndroidManifest.xml rename to FinchVideo/AndroidManifest.xml diff --git a/12/FinchVideo/README.txt b/FinchVideo/README.txt similarity index 100% rename from 12/FinchVideo/README.txt rename to FinchVideo/README.txt diff --git a/12/FinchVideo/default.properties b/FinchVideo/default.properties similarity index 100% rename from 12/FinchVideo/default.properties rename to FinchVideo/default.properties diff --git a/12/FinchVideo/local.properties b/FinchVideo/local.properties similarity index 100% rename from 12/FinchVideo/local.properties rename to FinchVideo/local.properties diff --git a/14/AudioPlayer/res/drawable-hdpi/icon.png b/FinchVideo/res/drawable-hdpi/icon.png similarity index 100% rename from 14/AudioPlayer/res/drawable-hdpi/icon.png rename to FinchVideo/res/drawable-hdpi/icon.png diff --git a/16/SensorDemos/res/drawable-ldpi/icon.png b/FinchVideo/res/drawable-ldpi/icon.png similarity index 100% rename from 16/SensorDemos/res/drawable-ldpi/icon.png rename to FinchVideo/res/drawable-ldpi/icon.png diff --git a/12/FinchVideo/res/drawable-mdpi/icon.png b/FinchVideo/res/drawable-mdpi/icon.png similarity index 100% rename from 12/FinchVideo/res/drawable-mdpi/icon.png rename to FinchVideo/res/drawable-mdpi/icon.png diff --git a/12/FinchVideo/res/drawable-mdpi/video_reload.png b/FinchVideo/res/drawable-mdpi/video_reload.png similarity index 100% rename from 12/FinchVideo/res/drawable-mdpi/video_reload.png rename to FinchVideo/res/drawable-mdpi/video_reload.png diff --git a/03/TestApp/res/drawable/icon.png b/FinchVideo/res/drawable/icon.png similarity index 100% rename from 03/TestApp/res/drawable/icon.png rename to FinchVideo/res/drawable/icon.png diff --git a/12/FinchVideo/res/layout/simple_video_activity.xml b/FinchVideo/res/layout/simple_video_activity.xml similarity index 100% rename from 12/FinchVideo/res/layout/simple_video_activity.xml rename to FinchVideo/res/layout/simple_video_activity.xml diff --git a/12/FinchVideo/res/layout/simple_video_list_item.xml b/FinchVideo/res/layout/simple_video_list_item.xml similarity index 100% rename from 12/FinchVideo/res/layout/simple_video_list_item.xml rename to FinchVideo/res/layout/simple_video_list_item.xml diff --git a/12/FinchVideo/res/layout/video_list_item.xml b/FinchVideo/res/layout/video_list_item.xml similarity index 100% rename from 12/FinchVideo/res/layout/video_list_item.xml rename to FinchVideo/res/layout/video_list_item.xml diff --git a/12/FinchVideo/res/layout/video_query_activity.xml b/FinchVideo/res/layout/video_query_activity.xml similarity index 100% rename from 12/FinchVideo/res/layout/video_query_activity.xml rename to FinchVideo/res/layout/video_query_activity.xml diff --git a/12/FinchVideo/res/values/colors.xml b/FinchVideo/res/values/colors.xml similarity index 100% rename from 12/FinchVideo/res/values/colors.xml rename to FinchVideo/res/values/colors.xml diff --git a/12/FinchVideo/res/values/dimens.xml b/FinchVideo/res/values/dimens.xml similarity index 100% rename from 12/FinchVideo/res/values/dimens.xml rename to FinchVideo/res/values/dimens.xml diff --git a/12/FinchVideo/res/values/strings.xml b/FinchVideo/res/values/strings.xml similarity index 100% rename from 12/FinchVideo/res/values/strings.xml rename to FinchVideo/res/values/strings.xml diff --git a/12/FinchVideo/src/com/oreilly/demo/pa/finchvideo/Ch12.java b/FinchVideo/src/com/oreilly/demo/pa/finchvideo/Ch12.java similarity index 100% rename from 12/FinchVideo/src/com/oreilly/demo/pa/finchvideo/Ch12.java rename to FinchVideo/src/com/oreilly/demo/pa/finchvideo/Ch12.java diff --git a/12/FinchVideo/src/com/oreilly/demo/pa/finchvideo/FinchVideoActivity.java b/FinchVideo/src/com/oreilly/demo/pa/finchvideo/FinchVideoActivity.java similarity index 100% rename from 12/FinchVideo/src/com/oreilly/demo/pa/finchvideo/FinchVideoActivity.java rename to FinchVideo/src/com/oreilly/demo/pa/finchvideo/FinchVideoActivity.java diff --git a/12/FinchVideo/src/com/oreilly/demo/pa/finchvideo/SimpleFinchVideoActivity.java b/FinchVideo/src/com/oreilly/demo/pa/finchvideo/SimpleFinchVideoActivity.java similarity index 100% rename from 12/FinchVideo/src/com/oreilly/demo/pa/finchvideo/SimpleFinchVideoActivity.java rename to FinchVideo/src/com/oreilly/demo/pa/finchvideo/SimpleFinchVideoActivity.java diff --git a/12/FinchVideo/src/com/oreilly/demo/pa/finchvideo/provider/FinchVideo.java b/FinchVideo/src/com/oreilly/demo/pa/finchvideo/provider/FinchVideo.java similarity index 100% rename from 12/FinchVideo/src/com/oreilly/demo/pa/finchvideo/provider/FinchVideo.java rename to FinchVideo/src/com/oreilly/demo/pa/finchvideo/provider/FinchVideo.java diff --git a/12/FinchVideo/src/com/oreilly/demo/pa/finchvideo/provider/FinchVideoContentProvider.java b/FinchVideo/src/com/oreilly/demo/pa/finchvideo/provider/FinchVideoContentProvider.java similarity index 100% rename from 12/FinchVideo/src/com/oreilly/demo/pa/finchvideo/provider/FinchVideoContentProvider.java rename to FinchVideo/src/com/oreilly/demo/pa/finchvideo/provider/FinchVideoContentProvider.java diff --git a/12/FinchVideo/src/com/oreilly/demo/pa/finchvideo/provider/SimpleFinchVideoContentProvider.java b/FinchVideo/src/com/oreilly/demo/pa/finchvideo/provider/SimpleFinchVideoContentProvider.java similarity index 100% rename from 12/FinchVideo/src/com/oreilly/demo/pa/finchvideo/provider/SimpleFinchVideoContentProvider.java rename to FinchVideo/src/com/oreilly/demo/pa/finchvideo/provider/SimpleFinchVideoContentProvider.java diff --git a/12/FinchVideo/src/com/oreilly/demo/pa/finchvideo/provider/YouTubeHandler.java b/FinchVideo/src/com/oreilly/demo/pa/finchvideo/provider/YouTubeHandler.java similarity index 100% rename from 12/FinchVideo/src/com/oreilly/demo/pa/finchvideo/provider/YouTubeHandler.java rename to FinchVideo/src/com/oreilly/demo/pa/finchvideo/provider/YouTubeHandler.java diff --git a/12/FinchVideo/tools/ant/build.xml b/FinchVideo/tools/ant/build.xml similarity index 100% rename from 12/FinchVideo/tools/ant/build.xml rename to FinchVideo/tools/ant/build.xml diff --git a/12/FinchVideo/tools/ide/eclipse/classpath b/FinchVideo/tools/ide/eclipse/classpath similarity index 100% rename from 12/FinchVideo/tools/ide/eclipse/classpath rename to FinchVideo/tools/ide/eclipse/classpath diff --git a/12/FinchVideo/tools/ide/eclipse/project b/FinchVideo/tools/ide/eclipse/project similarity index 100% rename from 12/FinchVideo/tools/ide/eclipse/project rename to FinchVideo/tools/ide/eclipse/project diff --git a/14/AudioPlayer/.gitignore b/JSerializable/.gitignore similarity index 100% rename from 14/AudioPlayer/.gitignore rename to JSerializable/.gitignore diff --git a/06/JSerializable/AndroidManifest.xml b/JSerializable/AndroidManifest.xml similarity index 100% rename from 06/JSerializable/AndroidManifest.xml rename to JSerializable/AndroidManifest.xml diff --git a/06/JSerializable/default.properties b/JSerializable/default.properties similarity index 100% rename from 06/JSerializable/default.properties rename to JSerializable/default.properties diff --git a/16/SensorDemos/res/drawable-hdpi/icon.png b/JSerializable/res/drawable-hdpi/icon.png similarity index 100% rename from 16/SensorDemos/res/drawable-hdpi/icon.png rename to JSerializable/res/drawable-hdpi/icon.png diff --git a/16/SensorDemos/res/drawable-mdpi/icon.png b/JSerializable/res/drawable-ldpi/icon.png similarity index 100% rename from 16/SensorDemos/res/drawable-mdpi/icon.png rename to JSerializable/res/drawable-ldpi/icon.png diff --git a/14/AudioPlayer/res/drawable-mdpi/icon.png b/JSerializable/res/drawable-mdpi/icon.png similarity index 100% rename from 14/AudioPlayer/res/drawable-mdpi/icon.png rename to JSerializable/res/drawable-mdpi/icon.png diff --git a/framework/FinchFrameworkTest/res/layout/main.xml b/JSerializable/res/layout/main.xml similarity index 100% rename from framework/FinchFrameworkTest/res/layout/main.xml rename to JSerializable/res/layout/main.xml diff --git a/06/JSerializable/res/values/strings.xml b/JSerializable/res/values/strings.xml similarity index 100% rename from 06/JSerializable/res/values/strings.xml rename to JSerializable/res/values/strings.xml diff --git a/06/JSerializable/src/com/oreilly/demo/android/ch06/JSerialize.java b/JSerializable/src/com/oreilly/demo/android/ch06/JSerialize.java similarity index 100% rename from 06/JSerializable/src/com/oreilly/demo/android/ch06/JSerialize.java rename to JSerializable/src/com/oreilly/demo/android/ch06/JSerialize.java diff --git a/14/AudioPlayer/tools/ide/eclipse/classpath b/JSerializable/tools/ide/eclipse/classpath similarity index 100% rename from 14/AudioPlayer/tools/ide/eclipse/classpath rename to JSerializable/tools/ide/eclipse/classpath diff --git a/06/JSerializable/tools/ide/eclipse/project b/JSerializable/tools/ide/eclipse/project similarity index 100% rename from 06/JSerializable/tools/ide/eclipse/project rename to JSerializable/tools/ide/eclipse/project diff --git a/16/SensorDemos/.gitignore b/MicroJobs/.gitignore similarity index 100% rename from 16/SensorDemos/.gitignore rename to MicroJobs/.gitignore diff --git a/10/MicroJobs/AndroidManifest.xml b/MicroJobs/AndroidManifest.xml similarity index 100% rename from 10/MicroJobs/AndroidManifest.xml rename to MicroJobs/AndroidManifest.xml diff --git a/10/MicroJobs/default.properties b/MicroJobs/default.properties similarity index 100% rename from 10/MicroJobs/default.properties rename to MicroJobs/default.properties diff --git a/10/MicroJobs/res/drawable-hdpi/android_tiny_image.png b/MicroJobs/res/drawable-hdpi/android_tiny_image.png similarity index 100% rename from 10/MicroJobs/res/drawable-hdpi/android_tiny_image.png rename to MicroJobs/res/drawable-hdpi/android_tiny_image.png diff --git a/10/MicroJobs/res/drawable-hdpi/browser.png b/MicroJobs/res/drawable-hdpi/browser.png similarity index 100% rename from 10/MicroJobs/res/drawable-hdpi/browser.png rename to MicroJobs/res/drawable-hdpi/browser.png diff --git a/17/ClientDemo/res/drawable-hdpi/icon.png b/MicroJobs/res/drawable-hdpi/icon.png similarity index 100% rename from 17/ClientDemo/res/drawable-hdpi/icon.png rename to MicroJobs/res/drawable-hdpi/icon.png diff --git a/10/MicroJobs/res/drawable-hdpi/icon2.png b/MicroJobs/res/drawable-hdpi/icon2.png similarity index 100% rename from 10/MicroJobs/res/drawable-hdpi/icon2.png rename to MicroJobs/res/drawable-hdpi/icon2.png diff --git a/10/MicroJobs/res/drawable-hdpi/phone.png b/MicroJobs/res/drawable-hdpi/phone.png similarity index 100% rename from 10/MicroJobs/res/drawable-hdpi/phone.png rename to MicroJobs/res/drawable-hdpi/phone.png diff --git a/10/MicroJobs/res/drawable-ldpi/android_tiny_image.png b/MicroJobs/res/drawable-ldpi/android_tiny_image.png similarity index 100% rename from 10/MicroJobs/res/drawable-ldpi/android_tiny_image.png rename to MicroJobs/res/drawable-ldpi/android_tiny_image.png diff --git a/10/MicroJobs/res/drawable-ldpi/browser.png b/MicroJobs/res/drawable-ldpi/browser.png similarity index 100% rename from 10/MicroJobs/res/drawable-ldpi/browser.png rename to MicroJobs/res/drawable-ldpi/browser.png diff --git a/17/ClientDemo/res/drawable-ldpi/icon.png b/MicroJobs/res/drawable-ldpi/icon.png similarity index 100% rename from 17/ClientDemo/res/drawable-ldpi/icon.png rename to MicroJobs/res/drawable-ldpi/icon.png diff --git a/10/MicroJobs/res/drawable-ldpi/icon2.png b/MicroJobs/res/drawable-ldpi/icon2.png similarity index 100% rename from 10/MicroJobs/res/drawable-ldpi/icon2.png rename to MicroJobs/res/drawable-ldpi/icon2.png diff --git a/10/MicroJobs/res/drawable-ldpi/phone.png b/MicroJobs/res/drawable-ldpi/phone.png similarity index 100% rename from 10/MicroJobs/res/drawable-ldpi/phone.png rename to MicroJobs/res/drawable-ldpi/phone.png diff --git a/10/MicroJobs/res/drawable-mdpi/android_tiny_image.png b/MicroJobs/res/drawable-mdpi/android_tiny_image.png similarity index 100% rename from 10/MicroJobs/res/drawable-mdpi/android_tiny_image.png rename to MicroJobs/res/drawable-mdpi/android_tiny_image.png diff --git a/10/MicroJobs/res/drawable-mdpi/browser.png b/MicroJobs/res/drawable-mdpi/browser.png similarity index 100% rename from 10/MicroJobs/res/drawable-mdpi/browser.png rename to MicroJobs/res/drawable-mdpi/browser.png diff --git a/framework/FinchFramework/res/drawable-mdpi/icon.png b/MicroJobs/res/drawable-mdpi/icon.png similarity index 100% rename from framework/FinchFramework/res/drawable-mdpi/icon.png rename to MicroJobs/res/drawable-mdpi/icon.png diff --git a/10/MicroJobs/res/drawable-mdpi/icon2.png b/MicroJobs/res/drawable-mdpi/icon2.png similarity index 100% rename from 10/MicroJobs/res/drawable-mdpi/icon2.png rename to MicroJobs/res/drawable-mdpi/icon2.png diff --git a/10/MicroJobs/res/drawable-mdpi/phone.png b/MicroJobs/res/drawable-mdpi/phone.png similarity index 100% rename from 10/MicroJobs/res/drawable-mdpi/phone.png rename to MicroJobs/res/drawable-mdpi/phone.png diff --git a/10/MicroJobs/res/layout/addjob.xml b/MicroJobs/res/layout/addjob.xml similarity index 100% rename from 10/MicroJobs/res/layout/addjob.xml rename to MicroJobs/res/layout/addjob.xml diff --git a/10/MicroJobs/res/layout/editjob.xml b/MicroJobs/res/layout/editjob.xml similarity index 100% rename from 10/MicroJobs/res/layout/editjob.xml rename to MicroJobs/res/layout/editjob.xml diff --git a/10/MicroJobs/res/layout/main.xml b/MicroJobs/res/layout/main.xml similarity index 100% rename from 10/MicroJobs/res/layout/main.xml rename to MicroJobs/res/layout/main.xml diff --git a/10/MicroJobs/res/layout/microjobs_row.xml b/MicroJobs/res/layout/microjobs_row.xml similarity index 100% rename from 10/MicroJobs/res/layout/microjobs_row.xml rename to MicroJobs/res/layout/microjobs_row.xml diff --git a/10/MicroJobs/res/layout/microjobsdetail.xml b/MicroJobs/res/layout/microjobsdetail.xml similarity index 100% rename from 10/MicroJobs/res/layout/microjobsdetail.xml rename to MicroJobs/res/layout/microjobsdetail.xml diff --git a/10/MicroJobs/res/layout/microjobsempdetail.xml b/MicroJobs/res/layout/microjobsempdetail.xml similarity index 100% rename from 10/MicroJobs/res/layout/microjobsempdetail.xml rename to MicroJobs/res/layout/microjobsempdetail.xml diff --git a/10/MicroJobs/res/layout/microjobslist.xml b/MicroJobs/res/layout/microjobslist.xml similarity index 100% rename from 10/MicroJobs/res/layout/microjobslist.xml rename to MicroJobs/res/layout/microjobslist.xml diff --git a/10/MicroJobs/res/raw/media_cmd_line.sql b/MicroJobs/res/raw/media_cmd_line.sql similarity index 100% rename from 10/MicroJobs/res/raw/media_cmd_line.sql rename to MicroJobs/res/raw/media_cmd_line.sql diff --git a/10/MicroJobs/res/values/strings.xml b/MicroJobs/res/values/strings.xml similarity index 100% rename from 10/MicroJobs/res/values/strings.xml rename to MicroJobs/res/values/strings.xml diff --git a/10/MicroJobs/src/com/oreilly/demo/pa/ch10/AddJob.java b/MicroJobs/src/com/oreilly/demo/pa/ch10/AddJob.java similarity index 100% rename from 10/MicroJobs/src/com/oreilly/demo/pa/ch10/AddJob.java rename to MicroJobs/src/com/oreilly/demo/pa/ch10/AddJob.java diff --git a/10/MicroJobs/src/com/oreilly/demo/pa/ch10/EditJob.java b/MicroJobs/src/com/oreilly/demo/pa/ch10/EditJob.java similarity index 100% rename from 10/MicroJobs/src/com/oreilly/demo/pa/ch10/EditJob.java rename to MicroJobs/src/com/oreilly/demo/pa/ch10/EditJob.java diff --git a/10/MicroJobs/src/com/oreilly/demo/pa/ch10/MicroJobs.java b/MicroJobs/src/com/oreilly/demo/pa/ch10/MicroJobs.java similarity index 100% rename from 10/MicroJobs/src/com/oreilly/demo/pa/ch10/MicroJobs.java rename to MicroJobs/src/com/oreilly/demo/pa/ch10/MicroJobs.java diff --git a/10/MicroJobs/src/com/oreilly/demo/pa/ch10/MicroJobsDatabase.java b/MicroJobs/src/com/oreilly/demo/pa/ch10/MicroJobsDatabase.java similarity index 100% rename from 10/MicroJobs/src/com/oreilly/demo/pa/ch10/MicroJobsDatabase.java rename to MicroJobs/src/com/oreilly/demo/pa/ch10/MicroJobsDatabase.java diff --git a/10/MicroJobs/src/com/oreilly/demo/pa/ch10/MicroJobsDetail.java b/MicroJobs/src/com/oreilly/demo/pa/ch10/MicroJobsDetail.java similarity index 100% rename from 10/MicroJobs/src/com/oreilly/demo/pa/ch10/MicroJobsDetail.java rename to MicroJobs/src/com/oreilly/demo/pa/ch10/MicroJobsDetail.java diff --git a/10/MicroJobs/src/com/oreilly/demo/pa/ch10/MicroJobsEmpDetail.java b/MicroJobs/src/com/oreilly/demo/pa/ch10/MicroJobsEmpDetail.java similarity index 100% rename from 10/MicroJobs/src/com/oreilly/demo/pa/ch10/MicroJobsEmpDetail.java rename to MicroJobs/src/com/oreilly/demo/pa/ch10/MicroJobsEmpDetail.java diff --git a/10/MicroJobs/src/com/oreilly/demo/pa/ch10/MicroJobsList.java b/MicroJobs/src/com/oreilly/demo/pa/ch10/MicroJobsList.java similarity index 100% rename from 10/MicroJobs/src/com/oreilly/demo/pa/ch10/MicroJobsList.java rename to MicroJobs/src/com/oreilly/demo/pa/ch10/MicroJobsList.java diff --git a/10/MicroJobs/tools/ant/build.xml b/MicroJobs/tools/ant/build.xml similarity index 100% rename from 10/MicroJobs/tools/ant/build.xml rename to MicroJobs/tools/ant/build.xml diff --git a/16/SensorDemos/tools/ide/eclipse/classpath b/MicroJobs/tools/ide/eclipse/classpath similarity index 100% rename from 16/SensorDemos/tools/ide/eclipse/classpath rename to MicroJobs/tools/ide/eclipse/classpath diff --git a/10/MicroJobs/tools/ide/eclipse/project b/MicroJobs/tools/ide/eclipse/project similarity index 100% rename from 10/MicroJobs/tools/ide/eclipse/project rename to MicroJobs/tools/ide/eclipse/project diff --git a/10/MicroJobs/tools/ide/idea/MicroJobs.iml b/MicroJobs/tools/ide/idea/MicroJobs.iml similarity index 100% rename from 10/MicroJobs/tools/ide/idea/MicroJobs.iml rename to MicroJobs/tools/ide/idea/MicroJobs.iml diff --git a/10/MicroJobs/tools/ide/idea/idea/.name b/MicroJobs/tools/ide/idea/idea/.name similarity index 100% rename from 10/MicroJobs/tools/ide/idea/idea/.name rename to MicroJobs/tools/ide/idea/idea/.name diff --git a/10/MicroJobs/tools/ide/idea/idea/compiler.xml b/MicroJobs/tools/ide/idea/idea/compiler.xml similarity index 100% rename from 10/MicroJobs/tools/ide/idea/idea/compiler.xml rename to MicroJobs/tools/ide/idea/idea/compiler.xml diff --git a/10/MicroJobs/tools/ide/idea/idea/copyright/profiles_settings.xml b/MicroJobs/tools/ide/idea/idea/copyright/profiles_settings.xml similarity index 100% rename from 10/MicroJobs/tools/ide/idea/idea/copyright/profiles_settings.xml rename to MicroJobs/tools/ide/idea/idea/copyright/profiles_settings.xml diff --git a/10/MicroJobs/tools/ide/idea/idea/encodings.xml b/MicroJobs/tools/ide/idea/idea/encodings.xml similarity index 100% rename from 10/MicroJobs/tools/ide/idea/idea/encodings.xml rename to MicroJobs/tools/ide/idea/idea/encodings.xml diff --git a/10/MicroJobs/tools/ide/idea/idea/misc.xml b/MicroJobs/tools/ide/idea/idea/misc.xml similarity index 100% rename from 10/MicroJobs/tools/ide/idea/idea/misc.xml rename to MicroJobs/tools/ide/idea/idea/misc.xml diff --git a/10/MicroJobs/tools/ide/idea/idea/modules.xml b/MicroJobs/tools/ide/idea/idea/modules.xml similarity index 100% rename from 10/MicroJobs/tools/ide/idea/idea/modules.xml rename to MicroJobs/tools/ide/idea/idea/modules.xml diff --git a/10/MicroJobs/tools/ide/idea/idea/uiDesigner.xml b/MicroJobs/tools/ide/idea/idea/uiDesigner.xml similarity index 100% rename from 10/MicroJobs/tools/ide/idea/idea/uiDesigner.xml rename to MicroJobs/tools/ide/idea/idea/uiDesigner.xml diff --git a/10/MicroJobs/tools/ide/idea/idea/vcs.xml b/MicroJobs/tools/ide/idea/idea/vcs.xml similarity index 100% rename from 10/MicroJobs/tools/ide/idea/idea/vcs.xml rename to MicroJobs/tools/ide/idea/idea/vcs.xml diff --git a/10/MicroJobs/tools/ide/idea/idea/workspace.xml b/MicroJobs/tools/ide/idea/idea/workspace.xml similarity index 100% rename from 10/MicroJobs/tools/ide/idea/idea/workspace.xml rename to MicroJobs/tools/ide/idea/idea/workspace.xml diff --git a/17/ClientDemo/.gitignore b/NDKDemo/.gitignore similarity index 100% rename from 17/ClientDemo/.gitignore rename to NDKDemo/.gitignore diff --git a/18/NDKDemo/AndroidManifest.xml b/NDKDemo/AndroidManifest.xml similarity index 100% rename from 18/NDKDemo/AndroidManifest.xml rename to NDKDemo/AndroidManifest.xml diff --git a/18/NDKDemo/README.txt b/NDKDemo/README.txt similarity index 100% rename from 18/NDKDemo/README.txt rename to NDKDemo/README.txt diff --git a/18/NDKDemo/default.properties b/NDKDemo/default.properties similarity index 100% rename from 18/NDKDemo/default.properties rename to NDKDemo/default.properties diff --git a/18/NDKDemo/jni/Android.mk b/NDKDemo/jni/Android.mk similarity index 100% rename from 18/NDKDemo/jni/Android.mk rename to NDKDemo/jni/Android.mk diff --git a/18/NDKDemo/jni/Application.mk b/NDKDemo/jni/Application.mk similarity index 100% rename from 18/NDKDemo/jni/Application.mk rename to NDKDemo/jni/Application.mk diff --git a/18/NDKDemo/jni/sample.c b/NDKDemo/jni/sample.c similarity index 100% rename from 18/NDKDemo/jni/sample.c rename to NDKDemo/jni/sample.c diff --git a/18/NDKDemo/jni/sample_nativeactivity.c b/NDKDemo/jni/sample_nativeactivity.c similarity index 100% rename from 18/NDKDemo/jni/sample_nativeactivity.c rename to NDKDemo/jni/sample_nativeactivity.c diff --git a/18/NDKDemo/jni/sample_nativeactivity_opengl.c b/NDKDemo/jni/sample_nativeactivity_opengl.c similarity index 100% rename from 18/NDKDemo/jni/sample_nativeactivity_opengl.c rename to NDKDemo/jni/sample_nativeactivity_opengl.c diff --git a/18/NDKDemo/jni/samplelib/sample_lib.c b/NDKDemo/jni/samplelib/sample_lib.c similarity index 100% rename from 18/NDKDemo/jni/samplelib/sample_lib.c rename to NDKDemo/jni/samplelib/sample_lib.c diff --git a/18/NDKDemo/jni/samplelib/sample_lib.h b/NDKDemo/jni/samplelib/sample_lib.h similarity index 100% rename from 18/NDKDemo/jni/samplelib/sample_lib.h rename to NDKDemo/jni/samplelib/sample_lib.h diff --git a/17/ClientDemo/proguard.cfg b/NDKDemo/proguard.cfg similarity index 100% rename from 17/ClientDemo/proguard.cfg rename to NDKDemo/proguard.cfg diff --git a/18/NDKDemo/res/drawable-hdpi/icon.png b/NDKDemo/res/drawable-hdpi/icon.png similarity index 100% rename from 18/NDKDemo/res/drawable-hdpi/icon.png rename to NDKDemo/res/drawable-hdpi/icon.png diff --git a/17/ClientDemo/res/drawable-mdpi/icon.png b/NDKDemo/res/drawable-ldpi/icon.png similarity index 100% rename from 17/ClientDemo/res/drawable-mdpi/icon.png rename to NDKDemo/res/drawable-ldpi/icon.png diff --git a/18/NDKDemo/res/drawable-ldpi/icon.png b/NDKDemo/res/drawable-mdpi/icon.png similarity index 100% rename from 18/NDKDemo/res/drawable-ldpi/icon.png rename to NDKDemo/res/drawable-mdpi/icon.png diff --git a/18/NDKDemo/res/layout/main.xml b/NDKDemo/res/layout/main.xml similarity index 100% rename from 18/NDKDemo/res/layout/main.xml rename to NDKDemo/res/layout/main.xml diff --git a/18/NDKDemo/res/layout/sample.xml b/NDKDemo/res/layout/sample.xml similarity index 100% rename from 18/NDKDemo/res/layout/sample.xml rename to NDKDemo/res/layout/sample.xml diff --git a/18/NDKDemo/res/values/strings.xml b/NDKDemo/res/values/strings.xml similarity index 100% rename from 18/NDKDemo/res/values/strings.xml rename to NDKDemo/res/values/strings.xml diff --git a/18/NDKDemo/src/com/oreilly/demo/pa/ch18/NDKApp.java b/NDKDemo/src/com/oreilly/demo/pa/ch18/NDKApp.java similarity index 100% rename from 18/NDKDemo/src/com/oreilly/demo/pa/ch18/NDKApp.java rename to NDKDemo/src/com/oreilly/demo/pa/ch18/NDKApp.java diff --git a/18/NDKDemo/src/com/oreilly/demo/pa/ch18/SampleActivityWithNativeMethods.java b/NDKDemo/src/com/oreilly/demo/pa/ch18/SampleActivityWithNativeMethods.java similarity index 100% rename from 18/NDKDemo/src/com/oreilly/demo/pa/ch18/SampleActivityWithNativeMethods.java rename to NDKDemo/src/com/oreilly/demo/pa/ch18/SampleActivityWithNativeMethods.java diff --git a/17/DemoServer/tools/ide/eclipse/README.txt b/NDKDemo/tools/ide/eclipse/README.txt similarity index 100% rename from 17/DemoServer/tools/ide/eclipse/README.txt rename to NDKDemo/tools/ide/eclipse/README.txt diff --git a/17/ClientDemo/tools/ide/eclipse/classpath b/NDKDemo/tools/ide/eclipse/classpath similarity index 100% rename from 17/ClientDemo/tools/ide/eclipse/classpath rename to NDKDemo/tools/ide/eclipse/classpath diff --git a/18/NDKDemo/tools/ide/eclipse/project b/NDKDemo/tools/ide/eclipse/project similarity index 100% rename from 18/NDKDemo/tools/ide/eclipse/project rename to NDKDemo/tools/ide/eclipse/project diff --git a/17/DemoServer/.gitignore b/SensorDemos/.gitignore similarity index 100% rename from 17/DemoServer/.gitignore rename to SensorDemos/.gitignore diff --git a/16/SensorDemos/AndroidManifest.xml b/SensorDemos/AndroidManifest.xml similarity index 100% rename from 16/SensorDemos/AndroidManifest.xml rename to SensorDemos/AndroidManifest.xml diff --git a/16/SensorDemos/README.txt b/SensorDemos/README.txt similarity index 100% rename from 16/SensorDemos/README.txt rename to SensorDemos/README.txt diff --git a/16/SensorDemos/default.properties b/SensorDemos/default.properties similarity index 100% rename from 16/SensorDemos/default.properties rename to SensorDemos/default.properties diff --git a/18/NDKDemo/proguard.cfg b/SensorDemos/proguard.cfg similarity index 100% rename from 18/NDKDemo/proguard.cfg rename to SensorDemos/proguard.cfg diff --git a/framework/FinchFramework/res/drawable-hdpi/icon.png b/SensorDemos/res/drawable-hdpi/icon.png similarity index 100% rename from framework/FinchFramework/res/drawable-hdpi/icon.png rename to SensorDemos/res/drawable-hdpi/icon.png diff --git a/18/NDKDemo/res/drawable-mdpi/icon.png b/SensorDemos/res/drawable-ldpi/icon.png similarity index 100% rename from 18/NDKDemo/res/drawable-mdpi/icon.png rename to SensorDemos/res/drawable-ldpi/icon.png diff --git a/framework/FinchFramework/res/drawable-ldpi/icon.png b/SensorDemos/res/drawable-mdpi/icon.png similarity index 100% rename from framework/FinchFramework/res/drawable-ldpi/icon.png rename to SensorDemos/res/drawable-mdpi/icon.png diff --git a/16/SensorDemos/res/layout/gesture.xml b/SensorDemos/res/layout/gesture.xml similarity index 100% rename from 16/SensorDemos/res/layout/gesture.xml rename to SensorDemos/res/layout/gesture.xml diff --git a/16/SensorDemos/res/layout/gestureadd.xml b/SensorDemos/res/layout/gestureadd.xml similarity index 100% rename from 16/SensorDemos/res/layout/gestureadd.xml rename to SensorDemos/res/layout/gestureadd.xml diff --git a/16/SensorDemos/res/layout/main.xml b/SensorDemos/res/layout/main.xml similarity index 100% rename from 16/SensorDemos/res/layout/main.xml rename to SensorDemos/res/layout/main.xml diff --git a/16/SensorDemos/res/layout/nfc.xml b/SensorDemos/res/layout/nfc.xml similarity index 100% rename from 16/SensorDemos/res/layout/nfc.xml rename to SensorDemos/res/layout/nfc.xml diff --git a/16/SensorDemos/res/layout/nfc233.xml b/SensorDemos/res/layout/nfc233.xml similarity index 100% rename from 16/SensorDemos/res/layout/nfc233.xml rename to SensorDemos/res/layout/nfc233.xml diff --git a/16/SensorDemos/res/layout/sensoraccel.xml b/SensorDemos/res/layout/sensoraccel.xml similarity index 100% rename from 16/SensorDemos/res/layout/sensoraccel.xml rename to SensorDemos/res/layout/sensoraccel.xml diff --git a/16/SensorDemos/res/layout/sensorgravity.xml b/SensorDemos/res/layout/sensorgravity.xml similarity index 100% rename from 16/SensorDemos/res/layout/sensorgravity.xml rename to SensorDemos/res/layout/sensorgravity.xml diff --git a/16/SensorDemos/res/layout/sensorgyro.xml b/SensorDemos/res/layout/sensorgyro.xml similarity index 100% rename from 16/SensorDemos/res/layout/sensorgyro.xml rename to SensorDemos/res/layout/sensorgyro.xml diff --git a/16/SensorDemos/res/layout/sensorlight.xml b/SensorDemos/res/layout/sensorlight.xml similarity index 100% rename from 16/SensorDemos/res/layout/sensorlight.xml rename to SensorDemos/res/layout/sensorlight.xml diff --git a/16/SensorDemos/res/layout/sensorlinearacel.xml b/SensorDemos/res/layout/sensorlinearacel.xml similarity index 100% rename from 16/SensorDemos/res/layout/sensorlinearacel.xml rename to SensorDemos/res/layout/sensorlinearacel.xml diff --git a/16/SensorDemos/res/layout/sensormagnetic.xml b/SensorDemos/res/layout/sensormagnetic.xml similarity index 100% rename from 16/SensorDemos/res/layout/sensormagnetic.xml rename to SensorDemos/res/layout/sensormagnetic.xml diff --git a/16/SensorDemos/res/layout/sensorpressure.xml b/SensorDemos/res/layout/sensorpressure.xml similarity index 100% rename from 16/SensorDemos/res/layout/sensorpressure.xml rename to SensorDemos/res/layout/sensorpressure.xml diff --git a/16/SensorDemos/res/layout/sensorproximity.xml b/SensorDemos/res/layout/sensorproximity.xml similarity index 100% rename from 16/SensorDemos/res/layout/sensorproximity.xml rename to SensorDemos/res/layout/sensorproximity.xml diff --git a/16/SensorDemos/res/layout/sensorrotationvector.xml b/SensorDemos/res/layout/sensorrotationvector.xml similarity index 100% rename from 16/SensorDemos/res/layout/sensorrotationvector.xml rename to SensorDemos/res/layout/sensorrotationvector.xml diff --git a/16/SensorDemos/res/layout/sensortemp.xml b/SensorDemos/res/layout/sensortemp.xml similarity index 100% rename from 16/SensorDemos/res/layout/sensortemp.xml rename to SensorDemos/res/layout/sensortemp.xml diff --git a/16/SensorDemos/res/values/strings.xml b/SensorDemos/res/values/strings.xml similarity index 100% rename from 16/SensorDemos/res/values/strings.xml rename to SensorDemos/res/values/strings.xml diff --git a/16/SensorDemos/res/xml/nfcfilter.xml b/SensorDemos/res/xml/nfcfilter.xml similarity index 100% rename from 16/SensorDemos/res/xml/nfcfilter.xml rename to SensorDemos/res/xml/nfcfilter.xml diff --git a/16/SensorDemos/src/com/oreilly/demo/pa/ch16/Accessibility.java b/SensorDemos/src/com/oreilly/demo/pa/ch16/Accessibility.java similarity index 100% rename from 16/SensorDemos/src/com/oreilly/demo/pa/ch16/Accessibility.java rename to SensorDemos/src/com/oreilly/demo/pa/ch16/Accessibility.java diff --git a/16/SensorDemos/src/com/oreilly/demo/pa/ch16/GestureAdd.java b/SensorDemos/src/com/oreilly/demo/pa/ch16/GestureAdd.java similarity index 100% rename from 16/SensorDemos/src/com/oreilly/demo/pa/ch16/GestureAdd.java rename to SensorDemos/src/com/oreilly/demo/pa/ch16/GestureAdd.java diff --git a/16/SensorDemos/src/com/oreilly/demo/pa/ch16/GestureView.java b/SensorDemos/src/com/oreilly/demo/pa/ch16/GestureView.java similarity index 100% rename from 16/SensorDemos/src/com/oreilly/demo/pa/ch16/GestureView.java rename to SensorDemos/src/com/oreilly/demo/pa/ch16/GestureView.java diff --git a/16/SensorDemos/src/com/oreilly/demo/pa/ch16/MainActivity.java b/SensorDemos/src/com/oreilly/demo/pa/ch16/MainActivity.java similarity index 100% rename from 16/SensorDemos/src/com/oreilly/demo/pa/ch16/MainActivity.java rename to SensorDemos/src/com/oreilly/demo/pa/ch16/MainActivity.java diff --git a/16/SensorDemos/src/com/oreilly/demo/pa/ch16/NFC.java b/SensorDemos/src/com/oreilly/demo/pa/ch16/NFC.java similarity index 100% rename from 16/SensorDemos/src/com/oreilly/demo/pa/ch16/NFC.java rename to SensorDemos/src/com/oreilly/demo/pa/ch16/NFC.java diff --git a/16/SensorDemos/src/com/oreilly/demo/pa/ch16/NFC233.java b/SensorDemos/src/com/oreilly/demo/pa/ch16/NFC233.java similarity index 100% rename from 16/SensorDemos/src/com/oreilly/demo/pa/ch16/NFC233.java rename to SensorDemos/src/com/oreilly/demo/pa/ch16/NFC233.java diff --git a/16/SensorDemos/src/com/oreilly/demo/pa/ch16/SensorAccel.java b/SensorDemos/src/com/oreilly/demo/pa/ch16/SensorAccel.java similarity index 100% rename from 16/SensorDemos/src/com/oreilly/demo/pa/ch16/SensorAccel.java rename to SensorDemos/src/com/oreilly/demo/pa/ch16/SensorAccel.java diff --git a/16/SensorDemos/src/com/oreilly/demo/pa/ch16/SensorGravity.java b/SensorDemos/src/com/oreilly/demo/pa/ch16/SensorGravity.java similarity index 100% rename from 16/SensorDemos/src/com/oreilly/demo/pa/ch16/SensorGravity.java rename to SensorDemos/src/com/oreilly/demo/pa/ch16/SensorGravity.java diff --git a/16/SensorDemos/src/com/oreilly/demo/pa/ch16/SensorGyro.java b/SensorDemos/src/com/oreilly/demo/pa/ch16/SensorGyro.java similarity index 100% rename from 16/SensorDemos/src/com/oreilly/demo/pa/ch16/SensorGyro.java rename to SensorDemos/src/com/oreilly/demo/pa/ch16/SensorGyro.java diff --git a/16/SensorDemos/src/com/oreilly/demo/pa/ch16/SensorLight.java b/SensorDemos/src/com/oreilly/demo/pa/ch16/SensorLight.java similarity index 100% rename from 16/SensorDemos/src/com/oreilly/demo/pa/ch16/SensorLight.java rename to SensorDemos/src/com/oreilly/demo/pa/ch16/SensorLight.java diff --git a/16/SensorDemos/src/com/oreilly/demo/pa/ch16/SensorLinearAcceleration.java b/SensorDemos/src/com/oreilly/demo/pa/ch16/SensorLinearAcceleration.java similarity index 100% rename from 16/SensorDemos/src/com/oreilly/demo/pa/ch16/SensorLinearAcceleration.java rename to SensorDemos/src/com/oreilly/demo/pa/ch16/SensorLinearAcceleration.java diff --git a/16/SensorDemos/src/com/oreilly/demo/pa/ch16/SensorMagnetic.java b/SensorDemos/src/com/oreilly/demo/pa/ch16/SensorMagnetic.java similarity index 100% rename from 16/SensorDemos/src/com/oreilly/demo/pa/ch16/SensorMagnetic.java rename to SensorDemos/src/com/oreilly/demo/pa/ch16/SensorMagnetic.java diff --git a/16/SensorDemos/src/com/oreilly/demo/pa/ch16/SensorPressure.java b/SensorDemos/src/com/oreilly/demo/pa/ch16/SensorPressure.java similarity index 100% rename from 16/SensorDemos/src/com/oreilly/demo/pa/ch16/SensorPressure.java rename to SensorDemos/src/com/oreilly/demo/pa/ch16/SensorPressure.java diff --git a/16/SensorDemos/src/com/oreilly/demo/pa/ch16/SensorProximity.java b/SensorDemos/src/com/oreilly/demo/pa/ch16/SensorProximity.java similarity index 100% rename from 16/SensorDemos/src/com/oreilly/demo/pa/ch16/SensorProximity.java rename to SensorDemos/src/com/oreilly/demo/pa/ch16/SensorProximity.java diff --git a/16/SensorDemos/src/com/oreilly/demo/pa/ch16/SensorRotationVector.java b/SensorDemos/src/com/oreilly/demo/pa/ch16/SensorRotationVector.java similarity index 100% rename from 16/SensorDemos/src/com/oreilly/demo/pa/ch16/SensorRotationVector.java rename to SensorDemos/src/com/oreilly/demo/pa/ch16/SensorRotationVector.java diff --git a/16/SensorDemos/src/com/oreilly/demo/pa/ch16/SensorTemp.java b/SensorDemos/src/com/oreilly/demo/pa/ch16/SensorTemp.java similarity index 100% rename from 16/SensorDemos/src/com/oreilly/demo/pa/ch16/SensorTemp.java rename to SensorDemos/src/com/oreilly/demo/pa/ch16/SensorTemp.java diff --git a/18/NDKDemo/tools/ide/eclipse/README.txt b/SensorDemos/tools/ide/eclipse/README.txt similarity index 100% rename from 18/NDKDemo/tools/ide/eclipse/README.txt rename to SensorDemos/tools/ide/eclipse/README.txt diff --git a/18/NDKDemo/tools/ide/eclipse/classpath b/SensorDemos/tools/ide/eclipse/classpath similarity index 100% rename from 18/NDKDemo/tools/ide/eclipse/classpath rename to SensorDemos/tools/ide/eclipse/classpath diff --git a/16/SensorDemos/tools/ide/eclipse/project b/SensorDemos/tools/ide/eclipse/project similarity index 100% rename from 16/SensorDemos/tools/ide/eclipse/project rename to SensorDemos/tools/ide/eclipse/project diff --git a/02/SharedListTask/.gitignore b/SharedListTask/.gitignore similarity index 100% rename from 02/SharedListTask/.gitignore rename to SharedListTask/.gitignore diff --git a/framework/FinchFrameworkTest/default.properties b/SharedListTask/default.properties similarity index 100% rename from framework/FinchFrameworkTest/default.properties rename to SharedListTask/default.properties diff --git a/02/SharedListTask/src/com/oreilly/demo/android/ch02/sharedlisttask/SharedListTask.java b/SharedListTask/src/com/oreilly/demo/android/ch02/sharedlisttask/SharedListTask.java similarity index 100% rename from 02/SharedListTask/src/com/oreilly/demo/android/ch02/sharedlisttask/SharedListTask.java rename to SharedListTask/src/com/oreilly/demo/android/ch02/sharedlisttask/SharedListTask.java diff --git a/02/SharedListTask/tools/ide/eclipse/classpath b/SharedListTask/tools/ide/eclipse/classpath similarity index 100% rename from 02/SharedListTask/tools/ide/eclipse/classpath rename to SharedListTask/tools/ide/eclipse/classpath diff --git a/02/SharedListTask/tools/ide/eclipse/project b/SharedListTask/tools/ide/eclipse/project similarity index 100% rename from 02/SharedListTask/tools/ide/eclipse/project rename to SharedListTask/tools/ide/eclipse/project diff --git a/18/NDKDemo/.gitignore b/SimpleFragment/.gitignore similarity index 100% rename from 18/NDKDemo/.gitignore rename to SimpleFragment/.gitignore diff --git a/08/SimpleFragment/AndroidManifest.xml b/SimpleFragment/AndroidManifest.xml similarity index 100% rename from 08/SimpleFragment/AndroidManifest.xml rename to SimpleFragment/AndroidManifest.xml diff --git a/08/SimpleFragment/default.properties b/SimpleFragment/default.properties similarity index 100% rename from 08/SimpleFragment/default.properties rename to SimpleFragment/default.properties diff --git a/11/FinchLifecycleBackport/proguard.cfg b/SimpleFragment/proguard.cfg similarity index 100% rename from 11/FinchLifecycleBackport/proguard.cfg rename to SimpleFragment/proguard.cfg diff --git a/framework/FinchFrameworkTest/res/drawable-hdpi/icon.png b/SimpleFragment/res/drawable-hdpi/icon.png similarity index 100% rename from framework/FinchFrameworkTest/res/drawable-hdpi/icon.png rename to SimpleFragment/res/drawable-hdpi/icon.png diff --git a/framework/FinchFrameworkTest/res/drawable-ldpi/icon.png b/SimpleFragment/res/drawable-ldpi/icon.png similarity index 100% rename from framework/FinchFrameworkTest/res/drawable-ldpi/icon.png rename to SimpleFragment/res/drawable-ldpi/icon.png diff --git a/framework/FinchFrameworkTest/res/drawable-mdpi/icon.png b/SimpleFragment/res/drawable-mdpi/icon.png similarity index 100% rename from framework/FinchFrameworkTest/res/drawable-mdpi/icon.png rename to SimpleFragment/res/drawable-mdpi/icon.png diff --git a/08/SimpleFragment/res/layout/date_time.xml b/SimpleFragment/res/layout/date_time.xml similarity index 100% rename from 08/SimpleFragment/res/layout/date_time.xml rename to SimpleFragment/res/layout/date_time.xml diff --git a/08/SimpleFragment/res/layout/main.xml b/SimpleFragment/res/layout/main.xml similarity index 100% rename from 08/SimpleFragment/res/layout/main.xml rename to SimpleFragment/res/layout/main.xml diff --git a/08/SimpleFragment/res/values/colors.xml b/SimpleFragment/res/values/colors.xml similarity index 100% rename from 08/SimpleFragment/res/values/colors.xml rename to SimpleFragment/res/values/colors.xml diff --git a/08/SimpleFragment/res/values/strings.xml b/SimpleFragment/res/values/strings.xml similarity index 100% rename from 08/SimpleFragment/res/values/strings.xml rename to SimpleFragment/res/values/strings.xml diff --git a/08/SimpleFragment/src/com/oreilly/demo/android/ch08/simplefragment/DateTime.java b/SimpleFragment/src/com/oreilly/demo/android/ch08/simplefragment/DateTime.java similarity index 100% rename from 08/SimpleFragment/src/com/oreilly/demo/android/ch08/simplefragment/DateTime.java rename to SimpleFragment/src/com/oreilly/demo/android/ch08/simplefragment/DateTime.java diff --git a/08/SimpleFragment/src/com/oreilly/demo/android/ch08/simplefragment/SimpleFragment.java b/SimpleFragment/src/com/oreilly/demo/android/ch08/simplefragment/SimpleFragment.java similarity index 100% rename from 08/SimpleFragment/src/com/oreilly/demo/android/ch08/simplefragment/SimpleFragment.java rename to SimpleFragment/src/com/oreilly/demo/android/ch08/simplefragment/SimpleFragment.java diff --git a/framework/FinchFrameworkTest/tools/ide/eclipse/classpath b/SimpleFragment/tools/ide/eclipse/classpath similarity index 100% rename from framework/FinchFrameworkTest/tools/ide/eclipse/classpath rename to SimpleFragment/tools/ide/eclipse/classpath diff --git a/08/SimpleFragment/tools/ide/eclipse/project b/SimpleFragment/tools/ide/eclipse/project similarity index 100% rename from 08/SimpleFragment/tools/ide/eclipse/project rename to SimpleFragment/tools/ide/eclipse/project diff --git a/framework/FinchFramework/.gitignore b/TestApp/.gitignore similarity index 100% rename from framework/FinchFramework/.gitignore rename to TestApp/.gitignore diff --git a/03/TestApp/AndroidManifest.xml b/TestApp/AndroidManifest.xml similarity index 100% rename from 03/TestApp/AndroidManifest.xml rename to TestApp/AndroidManifest.xml diff --git a/14/AudioPlayer/default.properties b/TestApp/default.properties similarity index 100% rename from 14/AudioPlayer/default.properties rename to TestApp/default.properties diff --git a/12/FinchVideo/res/drawable/icon.png b/TestApp/res/drawable/icon.png similarity index 100% rename from 12/FinchVideo/res/drawable/icon.png rename to TestApp/res/drawable/icon.png diff --git a/03/TestApp/res/layout/main.xml b/TestApp/res/layout/main.xml similarity index 100% rename from 03/TestApp/res/layout/main.xml rename to TestApp/res/layout/main.xml diff --git a/03/TestApp/res/values/strings.xml b/TestApp/res/values/strings.xml similarity index 100% rename from 03/TestApp/res/values/strings.xml rename to TestApp/res/values/strings.xml diff --git a/03/TestApp/src/com/oreilly/demo/pa/ch03/testapp/TestActivity.java b/TestApp/src/com/oreilly/demo/pa/ch03/testapp/TestActivity.java similarity index 100% rename from 03/TestApp/src/com/oreilly/demo/pa/ch03/testapp/TestActivity.java rename to TestApp/src/com/oreilly/demo/pa/ch03/testapp/TestActivity.java diff --git a/03/TestApp/src/com/oreilly/demo/pa/ch03/testapp/TestBroadcastReceiver.java b/TestApp/src/com/oreilly/demo/pa/ch03/testapp/TestBroadcastReceiver.java similarity index 100% rename from 03/TestApp/src/com/oreilly/demo/pa/ch03/testapp/TestBroadcastReceiver.java rename to TestApp/src/com/oreilly/demo/pa/ch03/testapp/TestBroadcastReceiver.java diff --git a/03/TestApp/src/com/oreilly/demo/pa/ch03/testapp/TestProvider.java b/TestApp/src/com/oreilly/demo/pa/ch03/testapp/TestProvider.java similarity index 100% rename from 03/TestApp/src/com/oreilly/demo/pa/ch03/testapp/TestProvider.java rename to TestApp/src/com/oreilly/demo/pa/ch03/testapp/TestProvider.java diff --git a/03/TestApp/src/com/oreilly/demo/pa/ch03/testapp/TestService.java b/TestApp/src/com/oreilly/demo/pa/ch03/testapp/TestService.java similarity index 100% rename from 03/TestApp/src/com/oreilly/demo/pa/ch03/testapp/TestService.java rename to TestApp/src/com/oreilly/demo/pa/ch03/testapp/TestService.java diff --git a/06/AsyncTaskDemo/tools/ide/eclipse/classpath b/TestApp/tools/ide/eclipse/classpath similarity index 100% rename from 06/AsyncTaskDemo/tools/ide/eclipse/classpath rename to TestApp/tools/ide/eclipse/classpath diff --git a/03/TestApp/tools/ide/eclipse/project b/TestApp/tools/ide/eclipse/project similarity index 100% rename from 03/TestApp/tools/ide/eclipse/project rename to TestApp/tools/ide/eclipse/project From a28065dddfbcaac3cff9990cf2179d012d28425d Mon Sep 17 00:00:00 2001 From: "G. Blake Meike" Date: Thu, 5 Jan 2012 22:10:42 -0800 Subject: [PATCH 02/53] Add the ContactViewer project --- ContactViewer/.gitignore | 5 + ContactViewer/AndroidManifest.xml | 21 +++ ContactViewer/libs/android-support-v4.jar | Bin 0 -> 224868 bytes ContactViewer/local.properties | 10 ++ ContactViewer/proguard.cfg | 40 +++++ ContactViewer/project.properties | 11 ++ ContactViewer/res/drawable-hdpi/icon.png | Bin 0 -> 4147 bytes ContactViewer/res/drawable-ldpi/icon.png | Bin 0 -> 1723 bytes ContactViewer/res/drawable-mdpi/icon.png | Bin 0 -> 2574 bytes ContactViewer/res/drawable-xhdpi/icon.png | Bin 0 -> 4147 bytes ContactViewer/res/drawable/absent.png | Bin 0 -> 245 bytes ContactViewer/res/drawable/present.png | Bin 0 -> 242 bytes .../res/layout-port/contact_detail.xml | 85 +++++++++++ ContactViewer/res/layout-port/main.xml | 25 +++ .../res/layout-small/contact_detail.xml | 85 +++++++++++ ContactViewer/res/layout-small/main.xml | 16 ++ ContactViewer/res/layout-xlarge-port/main.xml | 25 +++ .../res/layout-xlarge/contact_detail.xml | 85 +++++++++++ ContactViewer/res/layout-xlarge/main.xml | 25 +++ ContactViewer/res/layout/contact_detail.xml | 85 +++++++++++ ContactViewer/res/layout/contacts_item.xml | 23 +++ ContactViewer/res/layout/main.xml | 25 +++ ContactViewer/res/values/colors.xml | 5 + ContactViewer/res/values/strings.xml | 8 + .../contactviewer/ContactDetailActivity.java | 40 +++++ .../contactviewer/ContactDetailFragment.java | 95 ++++++++++++ .../android/contactviewer/ContactDetails.java | 143 ++++++++++++++++++ .../contactviewer/ContactDetailsLoader.java | 75 +++++++++ .../android/contactviewer/ContactViewer.java | 78 ++++++++++ .../contactviewer/ContactsCursorAdapter.java | 48 ++++++ .../contactviewer/ContactsFragment.java | 84 ++++++++++ ContactViewer/tools/ide/eclipse/classpath | 9 ++ ContactViewer/tools/ide/eclipse/project | 33 ++++ .../settings/edu.umd.cs.findbugs.core.prefs | 131 ++++++++++++++++ 34 files changed, 1315 insertions(+) create mode 100644 ContactViewer/.gitignore create mode 100755 ContactViewer/AndroidManifest.xml create mode 100644 ContactViewer/libs/android-support-v4.jar create mode 100644 ContactViewer/local.properties create mode 100644 ContactViewer/proguard.cfg create mode 100644 ContactViewer/project.properties create mode 100755 ContactViewer/res/drawable-hdpi/icon.png create mode 100755 ContactViewer/res/drawable-ldpi/icon.png create mode 100755 ContactViewer/res/drawable-mdpi/icon.png create mode 100755 ContactViewer/res/drawable-xhdpi/icon.png create mode 100755 ContactViewer/res/drawable/absent.png create mode 100755 ContactViewer/res/drawable/present.png create mode 100755 ContactViewer/res/layout-port/contact_detail.xml create mode 100755 ContactViewer/res/layout-port/main.xml create mode 100755 ContactViewer/res/layout-small/contact_detail.xml create mode 100755 ContactViewer/res/layout-small/main.xml create mode 100755 ContactViewer/res/layout-xlarge-port/main.xml create mode 100755 ContactViewer/res/layout-xlarge/contact_detail.xml create mode 100755 ContactViewer/res/layout-xlarge/main.xml create mode 100755 ContactViewer/res/layout/contact_detail.xml create mode 100755 ContactViewer/res/layout/contacts_item.xml create mode 100755 ContactViewer/res/layout/main.xml create mode 100755 ContactViewer/res/values/colors.xml create mode 100755 ContactViewer/res/values/strings.xml create mode 100755 ContactViewer/src/com/oreilly/demo/android/contactviewer/ContactDetailActivity.java create mode 100755 ContactViewer/src/com/oreilly/demo/android/contactviewer/ContactDetailFragment.java create mode 100755 ContactViewer/src/com/oreilly/demo/android/contactviewer/ContactDetails.java create mode 100755 ContactViewer/src/com/oreilly/demo/android/contactviewer/ContactDetailsLoader.java create mode 100755 ContactViewer/src/com/oreilly/demo/android/contactviewer/ContactViewer.java create mode 100755 ContactViewer/src/com/oreilly/demo/android/contactviewer/ContactsCursorAdapter.java create mode 100644 ContactViewer/src/com/oreilly/demo/android/contactviewer/ContactsFragment.java create mode 100755 ContactViewer/tools/ide/eclipse/classpath create mode 100755 ContactViewer/tools/ide/eclipse/project create mode 100644 ContactViewer/tools/ide/eclipse/settings/edu.umd.cs.findbugs.core.prefs diff --git a/ContactViewer/.gitignore b/ContactViewer/.gitignore new file mode 100644 index 0000000..8b15079 --- /dev/null +++ b/ContactViewer/.gitignore @@ -0,0 +1,5 @@ +/gen +/assets +/.project +/.classpath +/bin diff --git a/ContactViewer/AndroidManifest.xml b/ContactViewer/AndroidManifest.xml new file mode 100755 index 0000000..08edc96 --- /dev/null +++ b/ContactViewer/AndroidManifest.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + diff --git a/ContactViewer/libs/android-support-v4.jar b/ContactViewer/libs/android-support-v4.jar new file mode 100644 index 0000000000000000000000000000000000000000..59c8e66eb260aa13e68e22d301abc9883e75fe38 GIT binary patch literal 224868 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 +} + +-keepclasseswithmembers class * { + public (android.content.Context, android.util.AttributeSet); +} + +-keepclasseswithmembers class * { + public (android.content.Context, android.util.AttributeSet, int); +} + +-keepclassmembers class * extends android.app.Activity { + public void *(android.view.View); +} + +-keepclassmembers enum * { + public static **[] values(); + public static ** valueOf(java.lang.String); +} + +-keep class * implements android.os.Parcelable { + public static final android.os.Parcelable$Creator *; +} diff --git a/ContactViewer/project.properties b/ContactViewer/project.properties new file mode 100644 index 0000000..3615f13 --- /dev/null +++ b/ContactViewer/project.properties @@ -0,0 +1,11 @@ +# This file is automatically generated by Android Tools. +# Do not modify this file -- YOUR CHANGES WILL BE ERASED! +# +# This file must be checked in Version Control Systems. +# +# To customize properties used by the Ant build system use, +# "ant.properties", and override values to adapt the script to your +# project structure. + +# Project target. +target=Google Inc.:Google APIs:6 diff --git a/ContactViewer/res/drawable-hdpi/icon.png b/ContactViewer/res/drawable-hdpi/icon.png new file mode 100755 index 0000000000000000000000000000000000000000..8074c4c571b8cd19e27f4ee5545df367420686d7 GIT binary patch literal 4147 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 literal 0 HcmV?d00001 diff --git a/ContactViewer/res/drawable-ldpi/icon.png b/ContactViewer/res/drawable-ldpi/icon.png new file mode 100755 index 0000000000000000000000000000000000000000..1095584ec21f71cd0afc9e0993aa2209671b590c GIT binary patch literal 1723 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 literal 0 HcmV?d00001 diff --git a/ContactViewer/res/drawable/absent.png b/ContactViewer/res/drawable/absent.png new file mode 100755 index 0000000000000000000000000000000000000000..d04f29b2a3e14bc669a55ed057e90ee770a18362 GIT binary patch literal 245 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf$2vt;vYW;_*Kb2OQwO#4P(>+Bq%>n>-s>p#VFoH=o( zhijI}gekg9-n%k+ZaJWh^^bNgOzI~m#x7gQtr{nznpUqI&#wq{H-o3EpUXO@geCyZ5Lhn& literal 0 HcmV?d00001 diff --git a/ContactViewer/res/drawable/present.png b/ContactViewer/res/drawable/present.png new file mode 100755 index 0000000000000000000000000000000000000000..c58e706a2d6cfe089e4322effa31192c680f3e37 GIT binary patch literal 242 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#VfX zW&UYtCQH28Cv~-c*(<2fsac@UFv-nBT>i(WHRq?ZvpYBW)aeS(tyE!PSnXx$TEnzq zW%*{#1KUJ@m@`&vVQLS1z$6p9*T5oTNyE%S=5L}$rq8e0x8+glq$5HR%+?A2=FM*~ nF7Q1S-{9`0sTcgtNmu`{we`caJUttrqZvG1{an^LB{Ts5co0?o literal 0 HcmV?d00001 diff --git a/ContactViewer/res/layout-port/contact_detail.xml b/ContactViewer/res/layout-port/contact_detail.xml new file mode 100755 index 0000000..dcd7c70 --- /dev/null +++ b/ContactViewer/res/layout-port/contact_detail.xml @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + diff --git a/ContactViewer/res/layout-port/main.xml b/ContactViewer/res/layout-port/main.xml new file mode 100755 index 0000000..412c769 --- /dev/null +++ b/ContactViewer/res/layout-port/main.xml @@ -0,0 +1,25 @@ + + + + + + + + diff --git a/ContactViewer/res/layout-small/contact_detail.xml b/ContactViewer/res/layout-small/contact_detail.xml new file mode 100755 index 0000000..dcd7c70 --- /dev/null +++ b/ContactViewer/res/layout-small/contact_detail.xml @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + diff --git a/ContactViewer/res/layout-small/main.xml b/ContactViewer/res/layout-small/main.xml new file mode 100755 index 0000000..6648257 --- /dev/null +++ b/ContactViewer/res/layout-small/main.xml @@ -0,0 +1,16 @@ + + + + + + diff --git a/ContactViewer/res/layout-xlarge-port/main.xml b/ContactViewer/res/layout-xlarge-port/main.xml new file mode 100755 index 0000000..412c769 --- /dev/null +++ b/ContactViewer/res/layout-xlarge-port/main.xml @@ -0,0 +1,25 @@ + + + + + + + + diff --git a/ContactViewer/res/layout-xlarge/contact_detail.xml b/ContactViewer/res/layout-xlarge/contact_detail.xml new file mode 100755 index 0000000..8c5ee99 --- /dev/null +++ b/ContactViewer/res/layout-xlarge/contact_detail.xml @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + diff --git a/ContactViewer/res/layout-xlarge/main.xml b/ContactViewer/res/layout-xlarge/main.xml new file mode 100755 index 0000000..7646aa4 --- /dev/null +++ b/ContactViewer/res/layout-xlarge/main.xml @@ -0,0 +1,25 @@ + + + + + + + + diff --git a/ContactViewer/res/layout/contact_detail.xml b/ContactViewer/res/layout/contact_detail.xml new file mode 100755 index 0000000..8c5ee99 --- /dev/null +++ b/ContactViewer/res/layout/contact_detail.xml @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + diff --git a/ContactViewer/res/layout/contacts_item.xml b/ContactViewer/res/layout/contacts_item.xml new file mode 100755 index 0000000..bfa172c --- /dev/null +++ b/ContactViewer/res/layout/contacts_item.xml @@ -0,0 +1,23 @@ + + + + + + + + diff --git a/ContactViewer/res/layout/main.xml b/ContactViewer/res/layout/main.xml new file mode 100755 index 0000000..1938cc3 --- /dev/null +++ b/ContactViewer/res/layout/main.xml @@ -0,0 +1,25 @@ + + + + + + + + diff --git a/ContactViewer/res/values/colors.xml b/ContactViewer/res/values/colors.xml new file mode 100755 index 0000000..61c6c24 --- /dev/null +++ b/ContactViewer/res/values/colors.xml @@ -0,0 +1,5 @@ + + + #ff7777ff + #ff000000 + diff --git a/ContactViewer/res/values/strings.xml b/ContactViewer/res/values/strings.xml new file mode 100755 index 0000000..fd81559 --- /dev/null +++ b/ContactViewer/res/values/strings.xml @@ -0,0 +1,8 @@ + + + ContactViewer + ...... + Contact: + Phone: + Email: + diff --git a/ContactViewer/src/com/oreilly/demo/android/contactviewer/ContactDetailActivity.java b/ContactViewer/src/com/oreilly/demo/android/contactviewer/ContactDetailActivity.java new file mode 100755 index 0000000..0fbaae4 --- /dev/null +++ b/ContactViewer/src/com/oreilly/demo/android/contactviewer/ContactDetailActivity.java @@ -0,0 +1,40 @@ +/* $Id: $ + */ +package com.oreilly.demo.android.contactviewer; + +import android.os.Bundle; +import android.support.v4.app.FragmentActivity; + + +/** + * ContactDetailActivity + */ +public class ContactDetailActivity extends FragmentActivity { + private ContactDetails details; + + + /** @see android.support.v4.app.Fragment#onCreate(android.os.Bundle) */ + @Override + public void onCreate(Bundle state) { + super.onCreate(state); + + setContentView(R.layout.contact_detail); + + details = new ContactDetails( + (null != state) ? state : getIntent().getExtras()); + + details.setView(findViewById(R.id.contacts_detail_content)); + + details.populateContact(); + + details.createLoaders(this); + details.initLoaders(getSupportLoaderManager()); + } + + /** @see android.support.v4.app.FragmentActivity#onSaveInstanceState(android.os.Bundle) */ + @Override + public void onSaveInstanceState(Bundle state) { + super.onSaveInstanceState(state); + if (null != details) { details.saveToBundle(state); } + } +} diff --git a/ContactViewer/src/com/oreilly/demo/android/contactviewer/ContactDetailFragment.java b/ContactViewer/src/com/oreilly/demo/android/contactviewer/ContactDetailFragment.java new file mode 100755 index 0000000..843b7ff --- /dev/null +++ b/ContactViewer/src/com/oreilly/demo/android/contactviewer/ContactDetailFragment.java @@ -0,0 +1,95 @@ +/* $Id: $ + */ +package com.oreilly.demo.android.contactviewer; + +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + + +/** + * ContactDetailFragment + */ +public class ContactDetailFragment extends Fragment { + /** + * @return a new ContactDetailFragment + */ + public static final ContactDetailFragment newInstance() { + return newInstance(null, null); + } + + /** + * @param contactId + * @param contact + * @return a new ContactDetailFragment + */ + public static final ContactDetailFragment newInstance( + String contactId, + String contact) + { + Bundle init = new Bundle(); + init.putString(ContactDetails.TAG_ID, contactId); + init.putString(ContactDetails.TAG_CONTACT, contact); + + return newInstance(init); + } + + /** + * @param init + * @return a new ContactDetailFragment + */ + public static final ContactDetailFragment newInstance(Bundle init) { + ContactDetailFragment frag = new ContactDetailFragment(); + frag.setArguments(init); + return frag; + } + + + private ContactDetails details; + + /** @see android.support.v4.app.Fragment#onCreate(android.os.Bundle) */ + @Override + public void onCreate(Bundle state) { + super.onCreate(state); + + if (null == state) { state = getArguments(); } + + details = new ContactDetails(state); + + details.createLoaders(getActivity()); + } + + /** @see android.support.v4.app.Fragment#onCreateView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle) */ + @Override + public View onCreateView( + LayoutInflater inflater, + ViewGroup container, + Bundle b) + { + View view = inflater.inflate( + R.layout.contact_detail, + container, + false); //!!! this is important + + details.setView(view); + + details.populateContact(); + + for (ContactDetailsLoader loader + : details.initLoaders(getLoaderManager()).values()) + { + loader.populateFields(); + } + + return view; + } + + /** @see android.support.v4.app.Fragment#onSaveInstanceState(android.os.Bundle) */ + @Override + public void onSaveInstanceState(Bundle state) { + super.onSaveInstanceState(state); + details.saveToBundle(state); + } +} diff --git a/ContactViewer/src/com/oreilly/demo/android/contactviewer/ContactDetails.java b/ContactViewer/src/com/oreilly/demo/android/contactviewer/ContactDetails.java new file mode 100755 index 0000000..ddc8871 --- /dev/null +++ b/ContactViewer/src/com/oreilly/demo/android/contactviewer/ContactDetails.java @@ -0,0 +1,143 @@ +/* $Id: $ + */ +package com.oreilly.demo.android.contactviewer; + +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + +import android.app.Activity; +import android.database.Cursor; +import android.os.Bundle; +import android.provider.ContactsContract; +import android.support.v4.app.LoaderManager; +import android.view.View; +import android.widget.TextView; + + +/** + * ContactDetails + */ +public class ContactDetails { + /** Bundle tag for Id */ + public static final String TAG_ID = "contactId"; + + /** Bundle tag for Contact */ + public static final String TAG_CONTACT = "contact"; + + /** Loader Id for Email loader */ + public static final int LOADER_EMAIL = 0; + + /** Loader Id for Phone loader */ + public static final int LOADER_PHONE = 1; + + private final String contactId; + private final String contact; + + private final Map loaders + = new HashMap(); + + private View view; + + /** + * @param state null or parameters + */ + public ContactDetails(Bundle state) { + this((null == state) ? null : state.getString(TAG_ID), + (null == state) ? null : state.getString(TAG_CONTACT)); + } + + /** + * @param contactId the contact for details + * @param contact contact's display name + */ + public ContactDetails(String contactId, String contact) { + this.contactId = contactId; + this.contact = contact; + } + + /** @param view the view */ + public void setView(View view) { this.view = view; } + + /** @param state saved state */ + public void saveToBundle(Bundle state) { + state.putString(TAG_ID, contactId); + state.putString(TAG_CONTACT, contact); + } + + /** Populate the contact name */ + public void populateContact() { + if ((null == view) || (null == contact)) { return; } + + ((TextView) view.findViewById(R.id.contact_detail_name)) + .setText(contact); + } + + /** + * Populate text views from the cursor. + * + * @param cursor the cursor with the data + * @param from the data columns containing details + * @param to the view text edit field for displaying data + */ + public void populateFields( + Cursor cursor, + String[] from, + int[] to) + { + if (null == view) { return; } + + for (int i = 0; i < from.length; i++ ) { + ((TextView) view.findViewById(to[i])).setText(cursor + .getString(cursor.getColumnIndex(from[i]))); + } + } + + /** @param act the Activity context */ + public void createLoaders(Activity act) { + if (null == contactId) { return; } + + loaders.put( + Integer.valueOf(LOADER_PHONE), + new ContactDetailsLoader( + this, + act, + ContactsContract.CommonDataKinds.Phone.CONTENT_URI, + ContactsContract.CommonDataKinds.Phone.CONTACT_ID, + contactId, + new String[] { + ContactsContract.CommonDataKinds.Phone.NUMBER }, + new int[] { R.id.contact_detail_phone })); + + loaders.put( + Integer.valueOf(LOADER_EMAIL), + new ContactDetailsLoader( + this, + act, + ContactsContract.CommonDataKinds.Email.CONTENT_URI, + ContactsContract.CommonDataKinds.Email.CONTACT_ID, + contactId, + new String[] { + ContactsContract.CommonDataKinds.Email.DATA }, + new int[] { R.id.contact_detail_email })); + } + + /** + * @param loadMgr the loadMgr with which to init the loaders + * @return unmodifiable map of tags to loaders + */ + public Map initLoaders( + LoaderManager loadMgr) + { + for (Map.Entry loader: + loaders.entrySet()) + { + loadMgr.initLoader( + loader.getKey().intValue(), + null, + loader.getValue()); + } + + return Collections.unmodifiableMap(loaders); + } +} diff --git a/ContactViewer/src/com/oreilly/demo/android/contactviewer/ContactDetailsLoader.java b/ContactViewer/src/com/oreilly/demo/android/contactviewer/ContactDetailsLoader.java new file mode 100755 index 0000000..58c6365 --- /dev/null +++ b/ContactViewer/src/com/oreilly/demo/android/contactviewer/ContactDetailsLoader.java @@ -0,0 +1,75 @@ +/* $Id: $ + */ +package com.oreilly.demo.android.contactviewer; + +import android.app.Activity; +import android.database.Cursor; +import android.net.Uri; +import android.os.Bundle; +import android.support.v4.app.LoaderManager; +import android.support.v4.content.CursorLoader; +import android.support.v4.content.Loader; + + +/** + * ContactDetailsLoader + * Load contact details from a cursor + */ +class ContactDetailsLoader implements LoaderManager.LoaderCallbacks { + private final ContactDetails details; + private final Activity act; + private final Uri uri; + private final String sel; + private final String rec; + private final String[] from; + private final int[] to; + + private Cursor cursor; + + public ContactDetailsLoader( + ContactDetails details, + Activity act, + Uri uri, + String sel, + String rec, + String[] from, + int[] to) + { + this.details = details; + this.act = act; + this.uri = uri; + this.sel = sel; + this.rec = rec; + this.from = from; + this.to = to; + } + + @Override + public Loader onCreateLoader(int id, Bundle args) { + return new CursorLoader( + act, + uri, + from, + sel + " = ?", + new String[] { rec }, + null); + } + + @Override + public void onLoadFinished(Loader loader, Cursor data) { + if (0 >= data.getCount()) { return; } + cursor = data; + populateFields(); + } + + @Override + public void onLoaderReset(Loader loader) { + cursor = null; + } + + public void populateFields() { + if (null == cursor) { return; } + cursor.moveToFirst(); + details.populateFields(cursor, from, to); + } +} diff --git a/ContactViewer/src/com/oreilly/demo/android/contactviewer/ContactViewer.java b/ContactViewer/src/com/oreilly/demo/android/contactviewer/ContactViewer.java new file mode 100755 index 0000000..1838235 --- /dev/null +++ b/ContactViewer/src/com/oreilly/demo/android/contactviewer/ContactViewer.java @@ -0,0 +1,78 @@ +/* $Id: $ + */ +package com.oreilly.demo.android.contactviewer; + +import android.content.Intent; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentActivity; +import android.support.v4.app.FragmentManager; +import android.support.v4.app.FragmentTransaction; +import android.util.Log; + + +/** + * ContactViewer + */ +public class ContactViewer extends FragmentActivity { + private static final String FRAG_TAG + = ContactViewer.class.getCanonicalName() + ".fragment"; + + private boolean useFrag; + + /** @see android.support.v4.app.FragmentActivity#onCreate(android.os.Bundle) */ + @Override + public void onCreate(Bundle state) { + super.onCreate(state); + + setContentView(R.layout.main); + + useFrag = null != findViewById(R.id.contact_detail); + + if (useFrag) { installDetailsFragment(); } + } + + /** + * @see android.support.v4.app.FragmentActivity#startActivityFromFragment(android.support.v4.app.Fragment, android.content.Intent, int) + */ + @Override + public void startActivityFromFragment( + Fragment fragment, + Intent intent, + int requestCode) + { + Log.d("####", "Fragment started activity: " + useFrag); + if (!useFrag) { startActivity(intent); } + else if (fragment instanceof ContactsFragment) { + launchDetailFragment(intent.getExtras()); + } + } + + private void installDetailsFragment() { + FragmentManager fragMgr = getSupportFragmentManager(); + + if (null != fragMgr.findFragmentByTag(FRAG_TAG)) { return; } + + FragmentTransaction xact = fragMgr.beginTransaction(); + xact.add( + R.id.contact_detail, + ContactDetailFragment.newInstance(), + FRAG_TAG); + xact.commit(); + } + + private void launchDetailFragment(Bundle xtra) { + FragmentTransaction xact + = getSupportFragmentManager().beginTransaction(); + + xact.replace( + R.id.contact_detail, + ContactDetailFragment.newInstance(xtra), + FRAG_TAG); + + xact.addToBackStack(null); + xact.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); + + xact.commit(); + } +} diff --git a/ContactViewer/src/com/oreilly/demo/android/contactviewer/ContactsCursorAdapter.java b/ContactViewer/src/com/oreilly/demo/android/contactviewer/ContactsCursorAdapter.java new file mode 100755 index 0000000..80b7d98 --- /dev/null +++ b/ContactViewer/src/com/oreilly/demo/android/contactviewer/ContactsCursorAdapter.java @@ -0,0 +1,48 @@ +/* $Id: $ + */ +package com.oreilly.demo.android.contactviewer; + +import android.content.Context; +import android.database.Cursor; +import android.provider.ContactsContract.Contacts; +import android.support.v4.widget.SimpleCursorAdapter; +import android.widget.ImageView; + + +/** + * ContactsCursorAdapter + * Map the presence status to the correct icon + */ +public class ContactsCursorAdapter extends SimpleCursorAdapter { + private static final String[] CONTACTS_FROM = new String[] { + Contacts.CONTACT_PRESENCE, + Contacts.DISPLAY_NAME }; + + private static final int[] CONTACTS_TO + = new int[] { R.id.presence, R.id.name }; + + /** + * Ctor: complete + * + * @param ctxt the context + * @param cursor a cursor + */ + public ContactsCursorAdapter(Context ctxt, Cursor cursor) { + super( + ctxt, + R.layout.contacts_item, + cursor, + CONTACTS_FROM, + CONTACTS_TO, + 0); + } + + /** @see android.widget.SimpleCursorAdapter#setViewImage(android.widget.ImageView, java.lang.String) */ + @Override + public void setViewImage(ImageView v, String val) { + v.setImageResource( + ((null != val) && (0 < val.length())) + ? R.drawable.present + : R.drawable.absent); + } +} diff --git a/ContactViewer/src/com/oreilly/demo/android/contactviewer/ContactsFragment.java b/ContactViewer/src/com/oreilly/demo/android/contactviewer/ContactsFragment.java new file mode 100644 index 0000000..13e8768 --- /dev/null +++ b/ContactViewer/src/com/oreilly/demo/android/contactviewer/ContactsFragment.java @@ -0,0 +1,84 @@ +/* $Id: $ + */ +package com.oreilly.demo.android.contactviewer; + +import android.app.Activity; +import android.content.Intent; +import android.database.Cursor; +import android.os.Bundle; +import android.provider.BaseColumns; +import android.provider.ContactsContract.Contacts; +import android.support.v4.app.ListFragment; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ListView; + + +/** + * + * @version $Revision: $ + * @author Blake Meike + */ +public class ContactsFragment extends ListFragment { + private static final String[] CONTACTS_PROJECTION = new String[] { + BaseColumns._ID, + Contacts.CONTACT_PRESENCE, + Contacts.DISPLAY_NAME + }; + + private static final String CONTACTS_FILTER + = "((" + Contacts.DISPLAY_NAME + " NOT NULL)" + + " AND (" + Contacts.DISPLAY_NAME + " != ''))"; + + private static final String CONTACTS_SORT + = Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC"; + + + /** @see android.support.v4.app.Fragment#onCreateView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle) */ + @Override + public View onCreateView( + LayoutInflater inflater, + ViewGroup container, + Bundle b) + { + View view = super.onCreateView(inflater, container, b); + + installListAdapter(getActivity()); + + return view; + } + + /** + * @see android.support.v4.app.ListFragment#onListItemClick(android.widget.ListView, android.view.View, int, long) + */ + @Override + public void onListItemClick(ListView l, View v, int pos, long row){ + Cursor cursor = (Cursor) getListAdapter().getItem(pos); + Log.d("####", "Got click at: " + pos); + + String id = cursor.getString( + cursor.getColumnIndex(BaseColumns._ID)); + String name = cursor.getString( + cursor.getColumnIndex(Contacts.DISPLAY_NAME)); + + Intent intent = new Intent(); + intent.setClass(getActivity(), ContactDetailActivity.class); + intent.putExtra(ContactDetails.TAG_ID, id); + intent.putExtra(ContactDetails.TAG_CONTACT, name); + startActivity(intent); + } + + private void installListAdapter(Activity activity) { + setListAdapter( + new ContactsCursorAdapter( + activity, + activity.managedQuery( + Contacts.CONTENT_URI, + CONTACTS_PROJECTION, + CONTACTS_FILTER, + null, + CONTACTS_SORT))); + } +} diff --git a/ContactViewer/tools/ide/eclipse/classpath b/ContactViewer/tools/ide/eclipse/classpath new file mode 100755 index 0000000..8301ab0 --- /dev/null +++ b/ContactViewer/tools/ide/eclipse/classpath @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/ContactViewer/tools/ide/eclipse/project b/ContactViewer/tools/ide/eclipse/project new file mode 100755 index 0000000..485dc5e --- /dev/null +++ b/ContactViewer/tools/ide/eclipse/project @@ -0,0 +1,33 @@ + + + ContactViewer + + + + + + com.android.ide.eclipse.adt.ResourceManagerBuilder + + + + + com.android.ide.eclipse.adt.PreCompilerBuilder + + + + + org.eclipse.jdt.core.javabuilder + + + + + com.android.ide.eclipse.adt.ApkBuilder + + + + + + com.android.ide.eclipse.adt.AndroidNature + org.eclipse.jdt.core.javanature + + diff --git a/ContactViewer/tools/ide/eclipse/settings/edu.umd.cs.findbugs.core.prefs b/ContactViewer/tools/ide/eclipse/settings/edu.umd.cs.findbugs.core.prefs new file mode 100644 index 0000000..6bb8620 --- /dev/null +++ b/ContactViewer/tools/ide/eclipse/settings/edu.umd.cs.findbugs.core.prefs @@ -0,0 +1,131 @@ +#FindBugs User Preferences +#Thu Jan 05 08:52:17 PST 2012 +cloud_id=edu.umd.cs.findbugs.cloud.doNothingCloud +detectorAppendingToAnObjectOutputStream=AppendingToAnObjectOutputStream|true +detectorAtomicityProblem=AtomicityProblem|true +detectorBadAppletConstructor=BadAppletConstructor|false +detectorBadResultSetAccess=BadResultSetAccess|true +detectorBadSyntaxForRegularExpression=BadSyntaxForRegularExpression|true +detectorBadUseOfReturnValue=BadUseOfReturnValue|true +detectorBadlyOverriddenAdapter=BadlyOverriddenAdapter|true +detectorBooleanReturnNull=BooleanReturnNull|true +detectorCallToUnsupportedMethod=CallToUnsupportedMethod|false +detectorCheckExpectedWarnings=CheckExpectedWarnings|false +detectorCheckImmutableAnnotation=CheckImmutableAnnotation|true +detectorCheckTypeQualifiers=CheckTypeQualifiers|true +detectorCloneIdiom=CloneIdiom|true +detectorComparatorIdiom=ComparatorIdiom|true +detectorConfusedInheritance=ConfusedInheritance|true +detectorConfusionBetweenInheritedAndOuterMethod=ConfusionBetweenInheritedAndOuterMethod|true +detectorCrossSiteScripting=CrossSiteScripting|true +detectorDefaultEncodingDetector=DefaultEncodingDetector|true +detectorDoInsideDoPrivileged=DoInsideDoPrivileged|true +detectorDontCatchIllegalMonitorStateException=DontCatchIllegalMonitorStateException|true +detectorDontIgnoreResultOfPutIfAbsent=DontIgnoreResultOfPutIfAbsent|true +detectorDontUseEnum=DontUseEnum|true +detectorDroppedException=DroppedException|true +detectorDumbMethodInvocations=DumbMethodInvocations|true +detectorDumbMethods=DumbMethods|true +detectorDuplicateBranches=DuplicateBranches|true +detectorEmptyZipFileEntry=EmptyZipFileEntry|true +detectorEqualsOperandShouldHaveClassCompatibleWithThis=EqualsOperandShouldHaveClassCompatibleWithThis|true +detectorExplicitSerialization=ExplicitSerialization|true +detectorFinalizerNullsFields=FinalizerNullsFields|true +detectorFindBadCast2=FindBadCast2|true +detectorFindBadForLoop=FindBadForLoop|true +detectorFindCircularDependencies=FindCircularDependencies|false +detectorFindDeadLocalStores=FindDeadLocalStores|true +detectorFindDoubleCheck=FindDoubleCheck|true +detectorFindEmptySynchronizedBlock=FindEmptySynchronizedBlock|true +detectorFindFieldSelfAssignment=FindFieldSelfAssignment|true +detectorFindFinalizeInvocations=FindFinalizeInvocations|true +detectorFindFloatEquality=FindFloatEquality|true +detectorFindHEmismatch=FindHEmismatch|true +detectorFindInconsistentSync2=FindInconsistentSync2|true +detectorFindJSR166LockMonitorenter=FindJSR166LockMonitorenter|true +detectorFindLocalSelfAssignment2=FindLocalSelfAssignment2|true +detectorFindMaskedFields=FindMaskedFields|true +detectorFindMismatchedWaitOrNotify=FindMismatchedWaitOrNotify|true +detectorFindNakedNotify=FindNakedNotify|true +detectorFindNonShortCircuit=FindNonShortCircuit|true +detectorFindNullDeref=FindNullDeref|true +detectorFindNullDerefsInvolvingNonShortCircuitEvaluation=FindNullDerefsInvolvingNonShortCircuitEvaluation|true +detectorFindOpenStream=FindOpenStream|true +detectorFindPuzzlers=FindPuzzlers|true +detectorFindRefComparison=FindRefComparison|true +detectorFindReturnRef=FindReturnRef|true +detectorFindRunInvocations=FindRunInvocations|true +detectorFindSelfComparison=FindSelfComparison|true +detectorFindSelfComparison2=FindSelfComparison2|true +detectorFindSleepWithLockHeld=FindSleepWithLockHeld|true +detectorFindSpinLoop=FindSpinLoop|true +detectorFindSqlInjection=FindSqlInjection|true +detectorFindTwoLockWait=FindTwoLockWait|true +detectorFindUncalledPrivateMethods=FindUncalledPrivateMethods|true +detectorFindUnconditionalWait=FindUnconditionalWait|true +detectorFindUninitializedGet=FindUninitializedGet|true +detectorFindUnrelatedTypesInGenericContainer=FindUnrelatedTypesInGenericContainer|true +detectorFindUnreleasedLock=FindUnreleasedLock|true +detectorFindUnsatisfiedObligation=FindUnsatisfiedObligation|true +detectorFindUnsyncGet=FindUnsyncGet|true +detectorFindUseOfNonSerializableValue=FindUseOfNonSerializableValue|true +detectorFindUselessControlFlow=FindUselessControlFlow|true +detectorFormatStringChecker=FormatStringChecker|true +detectorHugeSharedStringConstants=HugeSharedStringConstants|true +detectorIDivResultCastToDouble=IDivResultCastToDouble|true +detectorIncompatMask=IncompatMask|true +detectorInconsistentAnnotations=InconsistentAnnotations|true +detectorInefficientMemberAccess=InefficientMemberAccess|false +detectorInefficientToArray=InefficientToArray|true +detectorInfiniteLoop=InfiniteLoop|true +detectorInfiniteRecursiveLoop=InfiniteRecursiveLoop|true +detectorInheritanceUnsafeGetResource=InheritanceUnsafeGetResource|true +detectorInitializationChain=InitializationChain|true +detectorInstantiateStaticClass=InstantiateStaticClass|true +detectorIntCast2LongAsInstant=IntCast2LongAsInstant|true +detectorInvalidJUnitTest=InvalidJUnitTest|true +detectorIteratorIdioms=IteratorIdioms|true +detectorLazyInit=LazyInit|true +detectorLoadOfKnownNullValue=LoadOfKnownNullValue|true +detectorLostLoggerDueToWeakReference=LostLoggerDueToWeakReference|true +detectorMethodReturnCheck=MethodReturnCheck|true +detectorMultithreadedInstanceAccess=MultithreadedInstanceAccess|true +detectorMutableLock=MutableLock|true +detectorMutableStaticFields=MutableStaticFields|true +detectorNaming=Naming|true +detectorNoteUnconditionalParamDerefs=NoteUnconditionalParamDerefs|true +detectorNumberConstructor=NumberConstructor|true +detectorOverridingEqualsNotSymmetrical=OverridingEqualsNotSymmetrical|true +detectorPreferZeroLengthArrays=PreferZeroLengthArrays|true +detectorPublicSemaphores=PublicSemaphores|false +detectorQuestionableBooleanAssignment=QuestionableBooleanAssignment|true +detectorReadOfInstanceFieldInMethodInvokedByConstructorInSuperclass=ReadOfInstanceFieldInMethodInvokedByConstructorInSuperclass|true +detectorReadReturnShouldBeChecked=ReadReturnShouldBeChecked|true +detectorRedundantInterfaces=RedundantInterfaces|true +detectorRepeatedConditionals=RepeatedConditionals|true +detectorRuntimeExceptionCapture=RuntimeExceptionCapture|true +detectorSerializableIdiom=SerializableIdiom|true +detectorStartInConstructor=StartInConstructor|true +detectorStaticCalendarDetector=StaticCalendarDetector|true +detectorStringConcatenation=StringConcatenation|true +detectorSuperfluousInstanceOf=SuperfluousInstanceOf|true +detectorSuspiciousThreadInterrupted=SuspiciousThreadInterrupted|true +detectorSwitchFallthrough=SwitchFallthrough|true +detectorSynchronizeAndNullCheckField=SynchronizeAndNullCheckField|true +detectorSynchronizeOnClassLiteralNotGetClass=SynchronizeOnClassLiteralNotGetClass|true +detectorSynchronizingOnContentsOfFieldToProtectField=SynchronizingOnContentsOfFieldToProtectField|true +detectorURLProblems=URLProblems|true +detectorUncallableMethodOfAnonymousClass=UncallableMethodOfAnonymousClass|true +detectorUnnecessaryMath=UnnecessaryMath|true +detectorUnreadFields=UnreadFields|true +detectorUselessSubclassMethod=UselessSubclassMethod|false +detectorVarArgsProblems=VarArgsProblems|true +detectorVolatileUsage=VolatileUsage|true +detectorWaitInLoop=WaitInLoop|true +detectorWrongMapIterator=WrongMapIterator|true +detectorXMLFactoryBypass=XMLFactoryBypass|true +detector_threshold=2 +effort=default +filter_settings=Medium|BAD_PRACTICE,CORRECTNESS,MT_CORRECTNESS,PERFORMANCE,STYLE|false|15 +filter_settings_neg=MALICIOUS_CODE,NOISE,I18N,SECURITY,EXPERIMENTAL| +run_at_full_build=false From d07340e95c0d48c23bdfdd3f993f7a553c5e3342 Mon Sep 17 00:00:00 2001 From: "G. Blake Meike" Date: Sat, 7 Jan 2012 22:08:25 -0800 Subject: [PATCH 03/53] Move all projects to the top level --- AIDLDemo/build.xml | 79 ++++++++++++++++++ AIDLDemo/default.properties | 11 --- .../ClientDemo => AIDLDemo}/proguard.cfg | 10 ++- .../project.properties | 4 +- AIDLDemo/tools/ide/classpath | 7 ++ AIDLDemo/tools/ide/project | 33 ++++++++ AndroidUIDemo/.gitignore | 1 + AndroidUIDemo/build.xml | 79 ++++++++++++++++++ AndroidUIDemo/default.properties | 22 ----- AndroidUIDemo/proguard.cfg | 40 +++++++++ .../project.properties | 4 +- AndroidUIDemo/tools/ide/classpath | 7 ++ AndroidUIDemo/tools/ide/project | 33 ++++++++ AndroidViewDemo/build.xml | 79 ++++++++++++++++++ AndroidViewDemo/default.properties | 22 ----- AndroidViewDemo/proguard.cfg | 40 +++++++++ .../project.properties | 4 +- AndroidViewDemo/tools/ide/classpath | 7 ++ AndroidViewDemo/tools/ide/project | 33 ++++++++ AsyncTaskDemo/build.xml | 79 ++++++++++++++++++ AsyncTaskDemo/default.properties | 11 --- AsyncTaskDemo/proguard.cfg | 40 +++++++++ AsyncTaskDemo/project.properties | 11 +++ AsyncTaskDemo/tools/ide/classpath | 7 ++ AsyncTaskDemo/tools/ide/project | 33 ++++++++ AudioPlayer/build.xml | 79 ++++++++++++++++++ AudioPlayer/default.properties | 11 --- AudioPlayer/proguard.cfg | 40 +++++++++ AudioPlayer/project.properties | 11 +++ AudioPlayer/tools/ide/classpath | 7 ++ AudioPlayer/tools/ide/project | 33 ++++++++ .../ClientDemo => ClientDemo}/.gitignore | 0 .../AndroidManifest.xml | 0 ClientDemo/build.xml | 79 ++++++++++++++++++ ClientDemo/proguard.cfg | 40 +++++++++ ClientDemo/project.properties | 11 +++ .../res/drawable-hdpi/icon.png | Bin .../res/drawable-ldpi/icon.png | Bin .../res/drawable-mdpi/icon.png | Bin .../res/layout/account.xml | 0 .../res/layout/accountadd.xml | 0 .../res/layout/contact.xml | 0 .../res/layout/login.xml | 0 .../res/layout/settings.xml | 0 .../res/values/strings.xml | 0 .../res/xml/authenticator.xml | 0 .../res/xml/contacts.xml | 0 .../res/xml/syncadapter.xml | 0 .../demo/pa/ch17/account/AccountActivity.java | 0 .../pa/ch17/account/AccountAddActivity.java | 0 .../demo/pa/ch17/sync/LoginActivity.java | 0 .../demo/pa/ch17/sync/NetworkUtil.java | 0 .../oreilly/demo/pa/ch17/sync/Settings.java | 0 .../sync/authsync/AuthenticationService.java | 0 .../pa/ch17/sync/authsync/Authenticator.java | 0 .../pa/ch17/sync/authsync/SyncAdapter.java | 0 .../pa/ch17/sync/authsync/SyncService.java | 0 .../demo/pa/ch17/sync/dataobjects/Change.java | 0 .../pa/ch17/sync/dataobjects/ListFriends.java | 0 .../demo/pa/ch17/sync/dataobjects/User.java | 0 ClientDemo/tools/ide/classpath | 7 ++ .../tools/ide/eclipse/README.txt | 0 .../tools/ide/eclipse/classpath | 0 .../tools/ide/eclipse/project | 0 ClientDemo/tools/ide/project | 33 ++++++++ ContactViewer/build.xml | 79 ++++++++++++++++++ .../default.properties | 2 +- ContactViewer/local.properties | 10 --- ContactViewer/project.properties | 2 +- ContactViewer/tools/ide/classpath | 9 ++ ContactViewer/tools/ide/project | 33 ++++++++ .../DemoServer => DemoServer}/.gitignore | 0 .../DemoServer => DemoServer}/README.txt | 0 .../config/Config.json | 0 .../config/UsersDB.json | 0 .../config/UsersDB_orig.json | 0 .../lib/commons-codec-1.2.jar | Bin .../lib/commons-httpclient-3.1.jar | Bin .../lib/commons-logging-1.0.4.jar | Bin .../jetty-continuation-7.0.2.v20100331.jar | Bin .../lib/jetty-http-7.0.2.v20100331.jar | Bin .../lib/jetty-io-7.0.2.v20100331.jar | Bin .../lib/jetty-security-7.0.2.v20100331.jar | Bin .../lib/jetty-server-7.0.2.v20100331.jar | Bin .../lib/jetty-servlet-7.0.2.v20100331.jar | Bin .../lib/jetty-util-7.0.2.v20100331.jar | Bin .../lib/json-1.0.0.jar | Bin .../lib/servlet-api-2.5.jar | Bin .../demo/pa/ch17/dataobjects/Change.java | 0 .../demo/pa/ch17/dataobjects/ListFriends.java | 0 .../demo/pa/ch17/dataobjects/User.java | 0 .../oreilly/demo/pa/ch17/server/Config.java | 0 .../demo/pa/ch17/server/MainServer.java | 0 .../demo/pa/ch17/server/ServerStatic.java | 0 .../demo/pa/ch17/server/ServletUtil.java | 0 .../demo/pa/ch17/server/data/UsersData.java | 0 .../ch17/server/servlet/AddFriendServlet.java | 0 .../ch17/server/servlet/AddUserServlet.java | 0 .../pa/ch17/server/servlet/BaseServlet.java | 0 .../server/servlet/DeleteFriendServlet.java | 0 .../server/servlet/GetFriendsServlet.java | 0 .../server/servlet/ISHttpServletType.java | 0 .../pa/ch17/server/servlet/LoginServlet.java | 0 .../tools/ide}/classpath | 0 .../tools/ide/eclipse/README.txt | 0 DemoServer/tools/ide/eclipse/classpath | 18 ++++ .../tools/ide/eclipse/project | 0 DemoServer/tools/ide/project | 17 ++++ .../tools/runserver.sh | 0 FillListTask/tools/ide/classpath | 6 ++ FillListTask/tools/ide/project | 17 ++++ .../{FinchFramework => }/.gitignore | 0 .../{FinchFramework => }/AndroidManifest.xml | 0 .../FinchFramework/default.properties | 12 --- .../FinchFrameworkTest/AndroidManifest.xml | 12 --- .../FinchFrameworkTest/default.properties | 11 --- FinchFramework/build.xml | 79 ++++++++++++++++++ .../com/finchframework/finch/Finch.java | 0 .../finch/FinchApplication.java | 0 .../finch/rest/FileHandler.java | 0 .../finch/rest/FileHandlerFactory.java | 0 .../finch/rest/RESTfulContentProvider.java | 0 .../finch/rest/RawResponse.java | 0 .../finch/rest/ResponseHandler.java | 0 .../finch/rest/UriRequestTask.java | 0 .../finch/views/MesgEditText.java | 0 FinchFramework/proguard.cfg | 40 +++++++++ FinchFramework/project.properties | 11 +++ .../{FinchFramework => }/res/anim/flip.xml | 0 .../res/drawable-hdpi/ic_menu_preferences.png | Bin .../res/drawable-hdpi/icon.png | Bin .../res/drawable-ldpi/icon.png | Bin .../res/drawable-mdpi/ic_menu_preferences.png | Bin .../res/drawable-mdpi/icon.png | Bin .../res/drawable/pine_grosbeak.png | Bin .../res/layout/animate_activity.xml | 0 .../res/layout/bt_console.xml | 0 .../res/layout/checkbox_example.xml | 0 .../res/layout/custom_title.xml | 0 .../res/layout/device_list.xml | 0 .../res/layout/device_name.xml | 0 .../res/layout/example_layout.xml | 0 .../{FinchFramework => }/res/layout/main.xml | 0 .../res/layout/message.xml | 0 .../res/layout/video_list_item.xml | 0 .../res/layout/video_query_activity.xml | 0 .../res/menu/bt_console_option_menu.xml | 0 .../res/menu/finch_option_menu.xml | 0 .../res/menu/finchwelcomemenu.xml | 0 .../res/raw/yt_query_json.json | 0 .../res/raw/yt_query_rss.xml | 0 .../res/values/colors.xml | 0 .../res/values/dimens.xml | 0 .../res/values/strings.xml | 0 .../src/animate/AnimateActivity.java | 0 .../bluetooth/BtConsoleActivity.java | 0 .../bluetooth/BtHelperHandler.java | 0 .../finchframework/bluetooth/BtSPPHelper.java | 0 .../bluetooth/DeviceListActivity.java | 0 .../finchframework/finch/FinchWelcome.java | 0 .../{FinchFramework => }/tools/ant/build.xml | 0 FinchFramework/tools/ide/classpath | 8 ++ .../tools/ide/eclipse/classpath | 0 .../tools/ide/eclipse/project | 0 FinchFramework/tools/ide/project | 33 ++++++++ .../.gitignore | 0 FinchFrameworkTest/AndroidManifest.xml | 20 +++++ FinchFrameworkTest/proguard.cfg | 40 +++++++++ FinchFrameworkTest/project.properties | 11 +++ .../res/drawable-hdpi/icon.png | Bin .../res/drawable-ldpi/icon.png | Bin .../res/drawable-mdpi/icon.png | Bin .../res/layout/main.xml | 0 .../res/values/strings.xml | 0 FinchFrameworkTest/tools/ide/classpath | 9 ++ .../tools/ide/eclipse/classpath | 0 .../tools/ide/eclipse/project | 0 FinchFrameworkTest/tools/ide/project | 34 ++++++++ FinchLifecycle/build.xml | 79 ++++++++++++++++++ FinchLifecycle/proguard.cfg | 8 +- FinchLifecycle/project.properties | 11 +++ FinchLifecycle/tools/ide/classpath | 8 ++ FinchLifecycle/tools/ide/project | 33 ++++++++ FinchLifecycleBackport/build.xml | 79 ++++++++++++++++++ FinchLifecycleBackport/proguard.cfg | 8 +- FinchLifecycleBackport/project.properties | 11 +++ FinchLifecycleBackport/tools/ide/classpath | 8 ++ FinchLifecycleBackport/tools/ide/project | 33 ++++++++ FinchVideo/build.xml | 79 ++++++++++++++++++ FinchVideo/default.properties | 13 --- FinchVideo/local.properties | 10 --- FinchVideo/proguard.cfg | 40 +++++++++ FinchVideo/project.properties | 11 +++ FinchVideo/tools/ide/classpath | 10 +++ FinchVideo/tools/ide/project | 45 ++++++++++ JSerializable/build.xml | 79 ++++++++++++++++++ JSerializable/default.properties | 11 --- JSerializable/proguard.cfg | 40 +++++++++ JSerializable/project.properties | 11 +++ JSerializable/tools/ide/classpath | 7 ++ JSerializable/tools/ide/project | 33 ++++++++ MicroJobs/build.xml | 79 ++++++++++++++++++ MicroJobs/default.properties | 11 --- MicroJobs/proguard.cfg | 40 +++++++++ MicroJobs/project.properties | 11 +++ MicroJobs/tools/ide/classpath | 7 ++ MicroJobs/tools/ide/project | 33 ++++++++ NDKDemo/build.xml | 79 ++++++++++++++++++ NDKDemo/proguard.cfg | 10 ++- NDKDemo/project.properties | 11 +++ NDKDemo/tools/ide/classpath | 7 ++ NDKDemo/tools/ide/project | 33 ++++++++ README.txt | 3 - SensorDemos/build.xml | 79 ++++++++++++++++++ SensorDemos/default.properties | 11 --- SensorDemos/proguard.cfg | 10 ++- SensorDemos/project.properties | 11 +++ SensorDemos/tools/ide/classpath | 7 ++ SensorDemos/tools/ide/project | 33 ++++++++ SharedListTask/default.properties | 11 --- SharedListTask/tools/ide/classpath | 6 ++ SharedListTask/tools/ide/project | 17 ++++ SimpleFragment/build.xml | 79 ++++++++++++++++++ SimpleFragment/default.properties | 11 --- SimpleFragment/proguard.cfg | 8 +- SimpleFragment/project.properties | 11 +++ SimpleFragment/tools/ide/classpath | 7 ++ SimpleFragment/tools/ide/project | 33 ++++++++ TestApp/build.xml | 79 ++++++++++++++++++ TestApp/default.properties | 11 --- TestApp/proguard.cfg | 40 +++++++++ TestApp/project.properties | 11 +++ TestApp/tools/ide/classpath | 7 ++ TestApp/tools/ide/project | 33 ++++++++ 234 files changed, 2832 insertions(+), 234 deletions(-) create mode 100644 AIDLDemo/build.xml delete mode 100644 AIDLDemo/default.properties rename {ClientServerDemo/ClientDemo => AIDLDemo}/proguard.cfg (76%) rename FinchLifecycle/default.properties => AIDLDemo/project.properties (75%) create mode 100644 AIDLDemo/tools/ide/classpath create mode 100644 AIDLDemo/tools/ide/project create mode 100644 AndroidUIDemo/build.xml delete mode 100755 AndroidUIDemo/default.properties create mode 100644 AndroidUIDemo/proguard.cfg rename ClientServerDemo/ClientDemo/default.properties => AndroidUIDemo/project.properties (72%) create mode 100644 AndroidUIDemo/tools/ide/classpath create mode 100644 AndroidUIDemo/tools/ide/project create mode 100644 AndroidViewDemo/build.xml delete mode 100644 AndroidViewDemo/default.properties create mode 100644 AndroidViewDemo/proguard.cfg rename NDKDemo/default.properties => AndroidViewDemo/project.properties (72%) create mode 100644 AndroidViewDemo/tools/ide/classpath create mode 100644 AndroidViewDemo/tools/ide/project create mode 100644 AsyncTaskDemo/build.xml delete mode 100644 AsyncTaskDemo/default.properties create mode 100644 AsyncTaskDemo/proguard.cfg create mode 100644 AsyncTaskDemo/project.properties create mode 100644 AsyncTaskDemo/tools/ide/classpath create mode 100644 AsyncTaskDemo/tools/ide/project create mode 100644 AudioPlayer/build.xml delete mode 100644 AudioPlayer/default.properties create mode 100644 AudioPlayer/proguard.cfg create mode 100644 AudioPlayer/project.properties create mode 100644 AudioPlayer/tools/ide/classpath create mode 100644 AudioPlayer/tools/ide/project rename {ClientServerDemo/ClientDemo => ClientDemo}/.gitignore (100%) rename {ClientServerDemo/ClientDemo => ClientDemo}/AndroidManifest.xml (100%) create mode 100644 ClientDemo/build.xml create mode 100644 ClientDemo/proguard.cfg create mode 100644 ClientDemo/project.properties rename {ClientServerDemo/ClientDemo => ClientDemo}/res/drawable-hdpi/icon.png (100%) rename {ClientServerDemo/ClientDemo => ClientDemo}/res/drawable-ldpi/icon.png (100%) rename {ClientServerDemo/ClientDemo => ClientDemo}/res/drawable-mdpi/icon.png (100%) rename {ClientServerDemo/ClientDemo => ClientDemo}/res/layout/account.xml (100%) rename {ClientServerDemo/ClientDemo => ClientDemo}/res/layout/accountadd.xml (100%) rename {ClientServerDemo/ClientDemo => ClientDemo}/res/layout/contact.xml (100%) rename {ClientServerDemo/ClientDemo => ClientDemo}/res/layout/login.xml (100%) rename {ClientServerDemo/ClientDemo => ClientDemo}/res/layout/settings.xml (100%) rename {ClientServerDemo/ClientDemo => ClientDemo}/res/values/strings.xml (100%) rename {ClientServerDemo/ClientDemo => ClientDemo}/res/xml/authenticator.xml (100%) rename {ClientServerDemo/ClientDemo => ClientDemo}/res/xml/contacts.xml (100%) rename {ClientServerDemo/ClientDemo => ClientDemo}/res/xml/syncadapter.xml (100%) rename {ClientServerDemo/ClientDemo => ClientDemo}/src/com/oreilly/demo/pa/ch17/account/AccountActivity.java (100%) rename {ClientServerDemo/ClientDemo => ClientDemo}/src/com/oreilly/demo/pa/ch17/account/AccountAddActivity.java (100%) rename {ClientServerDemo/ClientDemo => ClientDemo}/src/com/oreilly/demo/pa/ch17/sync/LoginActivity.java (100%) rename {ClientServerDemo/ClientDemo => ClientDemo}/src/com/oreilly/demo/pa/ch17/sync/NetworkUtil.java (100%) rename {ClientServerDemo/ClientDemo => ClientDemo}/src/com/oreilly/demo/pa/ch17/sync/Settings.java (100%) rename {ClientServerDemo/ClientDemo => ClientDemo}/src/com/oreilly/demo/pa/ch17/sync/authsync/AuthenticationService.java (100%) rename {ClientServerDemo/ClientDemo => ClientDemo}/src/com/oreilly/demo/pa/ch17/sync/authsync/Authenticator.java (100%) rename {ClientServerDemo/ClientDemo => ClientDemo}/src/com/oreilly/demo/pa/ch17/sync/authsync/SyncAdapter.java (100%) rename {ClientServerDemo/ClientDemo => ClientDemo}/src/com/oreilly/demo/pa/ch17/sync/authsync/SyncService.java (100%) rename {ClientServerDemo/ClientDemo => ClientDemo}/src/com/oreilly/demo/pa/ch17/sync/dataobjects/Change.java (100%) rename {ClientServerDemo/ClientDemo => ClientDemo}/src/com/oreilly/demo/pa/ch17/sync/dataobjects/ListFriends.java (100%) rename {ClientServerDemo/ClientDemo => ClientDemo}/src/com/oreilly/demo/pa/ch17/sync/dataobjects/User.java (100%) create mode 100644 ClientDemo/tools/ide/classpath rename {ClientServerDemo/ClientDemo => ClientDemo}/tools/ide/eclipse/README.txt (100%) rename {ClientServerDemo/ClientDemo => ClientDemo}/tools/ide/eclipse/classpath (100%) rename {ClientServerDemo/ClientDemo => ClientDemo}/tools/ide/eclipse/project (100%) create mode 100644 ClientDemo/tools/ide/project create mode 100644 ContactViewer/build.xml rename {FinchLifecycleBackport => ContactViewer}/default.properties (95%) delete mode 100644 ContactViewer/local.properties create mode 100755 ContactViewer/tools/ide/classpath create mode 100755 ContactViewer/tools/ide/project rename {ClientServerDemo/DemoServer => DemoServer}/.gitignore (100%) rename {ClientServerDemo/DemoServer => DemoServer}/README.txt (100%) rename {ClientServerDemo/DemoServer => DemoServer}/config/Config.json (100%) rename {ClientServerDemo/DemoServer => DemoServer}/config/UsersDB.json (100%) rename {ClientServerDemo/DemoServer => DemoServer}/config/UsersDB_orig.json (100%) rename {ClientServerDemo/DemoServer => DemoServer}/lib/commons-codec-1.2.jar (100%) rename {ClientServerDemo/DemoServer => DemoServer}/lib/commons-httpclient-3.1.jar (100%) rename {ClientServerDemo/DemoServer => DemoServer}/lib/commons-logging-1.0.4.jar (100%) rename {ClientServerDemo/DemoServer => DemoServer}/lib/jetty-continuation-7.0.2.v20100331.jar (100%) rename {ClientServerDemo/DemoServer => DemoServer}/lib/jetty-http-7.0.2.v20100331.jar (100%) rename {ClientServerDemo/DemoServer => DemoServer}/lib/jetty-io-7.0.2.v20100331.jar (100%) rename {ClientServerDemo/DemoServer => DemoServer}/lib/jetty-security-7.0.2.v20100331.jar (100%) rename {ClientServerDemo/DemoServer => DemoServer}/lib/jetty-server-7.0.2.v20100331.jar (100%) rename {ClientServerDemo/DemoServer => DemoServer}/lib/jetty-servlet-7.0.2.v20100331.jar (100%) rename {ClientServerDemo/DemoServer => DemoServer}/lib/jetty-util-7.0.2.v20100331.jar (100%) rename {ClientServerDemo/DemoServer => DemoServer}/lib/json-1.0.0.jar (100%) rename {ClientServerDemo/DemoServer => DemoServer}/lib/servlet-api-2.5.jar (100%) rename {ClientServerDemo/DemoServer => DemoServer}/src/com/oreilly/demo/pa/ch17/dataobjects/Change.java (100%) rename {ClientServerDemo/DemoServer => DemoServer}/src/com/oreilly/demo/pa/ch17/dataobjects/ListFriends.java (100%) rename {ClientServerDemo/DemoServer => DemoServer}/src/com/oreilly/demo/pa/ch17/dataobjects/User.java (100%) rename {ClientServerDemo/DemoServer => DemoServer}/src/com/oreilly/demo/pa/ch17/server/Config.java (100%) rename {ClientServerDemo/DemoServer => DemoServer}/src/com/oreilly/demo/pa/ch17/server/MainServer.java (100%) rename {ClientServerDemo/DemoServer => DemoServer}/src/com/oreilly/demo/pa/ch17/server/ServerStatic.java (100%) rename {ClientServerDemo/DemoServer => DemoServer}/src/com/oreilly/demo/pa/ch17/server/ServletUtil.java (100%) rename {ClientServerDemo/DemoServer => DemoServer}/src/com/oreilly/demo/pa/ch17/server/data/UsersData.java (100%) rename {ClientServerDemo/DemoServer => DemoServer}/src/com/oreilly/demo/pa/ch17/server/servlet/AddFriendServlet.java (100%) rename {ClientServerDemo/DemoServer => DemoServer}/src/com/oreilly/demo/pa/ch17/server/servlet/AddUserServlet.java (100%) rename {ClientServerDemo/DemoServer => DemoServer}/src/com/oreilly/demo/pa/ch17/server/servlet/BaseServlet.java (100%) rename {ClientServerDemo/DemoServer => DemoServer}/src/com/oreilly/demo/pa/ch17/server/servlet/DeleteFriendServlet.java (100%) rename {ClientServerDemo/DemoServer => DemoServer}/src/com/oreilly/demo/pa/ch17/server/servlet/GetFriendsServlet.java (100%) rename {ClientServerDemo/DemoServer => DemoServer}/src/com/oreilly/demo/pa/ch17/server/servlet/ISHttpServletType.java (100%) rename {ClientServerDemo/DemoServer => DemoServer}/src/com/oreilly/demo/pa/ch17/server/servlet/LoginServlet.java (100%) rename {ClientServerDemo/DemoServer/tools/ide/eclipse => DemoServer/tools/ide}/classpath (100%) rename {ClientServerDemo/DemoServer => DemoServer}/tools/ide/eclipse/README.txt (100%) create mode 100644 DemoServer/tools/ide/eclipse/classpath rename {ClientServerDemo/DemoServer => DemoServer}/tools/ide/eclipse/project (100%) create mode 100644 DemoServer/tools/ide/project rename {ClientServerDemo/DemoServer => DemoServer}/tools/runserver.sh (100%) create mode 100644 FillListTask/tools/ide/classpath create mode 100644 FillListTask/tools/ide/project rename FinchFramework/{FinchFramework => }/.gitignore (100%) rename FinchFramework/{FinchFramework => }/AndroidManifest.xml (100%) delete mode 100644 FinchFramework/FinchFramework/default.properties delete mode 100644 FinchFramework/FinchFrameworkTest/AndroidManifest.xml delete mode 100644 FinchFramework/FinchFrameworkTest/default.properties create mode 100644 FinchFramework/build.xml rename FinchFramework/{FinchFramework => }/lib-src/com/finchframework/finch/Finch.java (100%) rename FinchFramework/{FinchFramework => }/lib-src/com/finchframework/finch/FinchApplication.java (100%) rename FinchFramework/{FinchFramework => }/lib-src/com/finchframework/finch/rest/FileHandler.java (100%) rename FinchFramework/{FinchFramework => }/lib-src/com/finchframework/finch/rest/FileHandlerFactory.java (100%) rename FinchFramework/{FinchFramework => }/lib-src/com/finchframework/finch/rest/RESTfulContentProvider.java (100%) rename FinchFramework/{FinchFramework => }/lib-src/com/finchframework/finch/rest/RawResponse.java (100%) rename FinchFramework/{FinchFramework => }/lib-src/com/finchframework/finch/rest/ResponseHandler.java (100%) rename FinchFramework/{FinchFramework => }/lib-src/com/finchframework/finch/rest/UriRequestTask.java (100%) rename FinchFramework/{FinchFramework => }/lib-src/com/finchframework/finch/views/MesgEditText.java (100%) create mode 100644 FinchFramework/proguard.cfg create mode 100644 FinchFramework/project.properties rename FinchFramework/{FinchFramework => }/res/anim/flip.xml (100%) rename FinchFramework/{FinchFramework => }/res/drawable-hdpi/ic_menu_preferences.png (100%) rename FinchFramework/{FinchFramework => }/res/drawable-hdpi/icon.png (100%) rename FinchFramework/{FinchFramework => }/res/drawable-ldpi/icon.png (100%) rename FinchFramework/{FinchFramework => }/res/drawable-mdpi/ic_menu_preferences.png (100%) rename FinchFramework/{FinchFramework => }/res/drawable-mdpi/icon.png (100%) rename FinchFramework/{FinchFramework => }/res/drawable/pine_grosbeak.png (100%) rename FinchFramework/{FinchFramework => }/res/layout/animate_activity.xml (100%) rename FinchFramework/{FinchFramework => }/res/layout/bt_console.xml (100%) rename FinchFramework/{FinchFramework => }/res/layout/checkbox_example.xml (100%) rename FinchFramework/{FinchFramework => }/res/layout/custom_title.xml (100%) rename FinchFramework/{FinchFramework => }/res/layout/device_list.xml (100%) rename FinchFramework/{FinchFramework => }/res/layout/device_name.xml (100%) rename FinchFramework/{FinchFramework => }/res/layout/example_layout.xml (100%) rename FinchFramework/{FinchFramework => }/res/layout/main.xml (100%) rename FinchFramework/{FinchFramework => }/res/layout/message.xml (100%) rename FinchFramework/{FinchFramework => }/res/layout/video_list_item.xml (100%) rename FinchFramework/{FinchFramework => }/res/layout/video_query_activity.xml (100%) rename FinchFramework/{FinchFramework => }/res/menu/bt_console_option_menu.xml (100%) rename FinchFramework/{FinchFramework => }/res/menu/finch_option_menu.xml (100%) rename FinchFramework/{FinchFramework => }/res/menu/finchwelcomemenu.xml (100%) rename FinchFramework/{FinchFramework => }/res/raw/yt_query_json.json (100%) rename FinchFramework/{FinchFramework => }/res/raw/yt_query_rss.xml (100%) rename FinchFramework/{FinchFramework => }/res/values/colors.xml (100%) rename FinchFramework/{FinchFramework => }/res/values/dimens.xml (100%) rename FinchFramework/{FinchFramework => }/res/values/strings.xml (100%) rename FinchFramework/{FinchFramework => }/src/animate/AnimateActivity.java (100%) rename FinchFramework/{FinchFramework => }/src/com/finchframework/bluetooth/BtConsoleActivity.java (100%) rename FinchFramework/{FinchFramework => }/src/com/finchframework/bluetooth/BtHelperHandler.java (100%) rename FinchFramework/{FinchFramework => }/src/com/finchframework/bluetooth/BtSPPHelper.java (100%) rename FinchFramework/{FinchFramework => }/src/com/finchframework/bluetooth/DeviceListActivity.java (100%) rename FinchFramework/{FinchFramework => }/src/com/finchframework/finch/FinchWelcome.java (100%) rename FinchFramework/{FinchFramework => }/tools/ant/build.xml (100%) create mode 100644 FinchFramework/tools/ide/classpath rename FinchFramework/{FinchFramework => }/tools/ide/eclipse/classpath (100%) rename FinchFramework/{FinchFramework => }/tools/ide/eclipse/project (100%) create mode 100644 FinchFramework/tools/ide/project rename {FinchFramework/FinchFrameworkTest => FinchFrameworkTest}/.gitignore (100%) create mode 100644 FinchFrameworkTest/AndroidManifest.xml create mode 100644 FinchFrameworkTest/proguard.cfg create mode 100644 FinchFrameworkTest/project.properties rename {FinchFramework/FinchFrameworkTest => FinchFrameworkTest}/res/drawable-hdpi/icon.png (100%) rename {FinchFramework/FinchFrameworkTest => FinchFrameworkTest}/res/drawable-ldpi/icon.png (100%) rename {FinchFramework/FinchFrameworkTest => FinchFrameworkTest}/res/drawable-mdpi/icon.png (100%) rename {FinchFramework/FinchFrameworkTest => FinchFrameworkTest}/res/layout/main.xml (100%) rename {FinchFramework/FinchFrameworkTest => FinchFrameworkTest}/res/values/strings.xml (100%) create mode 100644 FinchFrameworkTest/tools/ide/classpath rename {FinchFramework/FinchFrameworkTest => FinchFrameworkTest}/tools/ide/eclipse/classpath (100%) rename {FinchFramework/FinchFrameworkTest => FinchFrameworkTest}/tools/ide/eclipse/project (100%) create mode 100644 FinchFrameworkTest/tools/ide/project create mode 100644 FinchLifecycle/build.xml create mode 100644 FinchLifecycle/project.properties create mode 100644 FinchLifecycle/tools/ide/classpath create mode 100644 FinchLifecycle/tools/ide/project create mode 100644 FinchLifecycleBackport/build.xml create mode 100644 FinchLifecycleBackport/project.properties create mode 100644 FinchLifecycleBackport/tools/ide/classpath create mode 100644 FinchLifecycleBackport/tools/ide/project create mode 100644 FinchVideo/build.xml delete mode 100644 FinchVideo/default.properties delete mode 100644 FinchVideo/local.properties create mode 100644 FinchVideo/proguard.cfg create mode 100644 FinchVideo/project.properties create mode 100644 FinchVideo/tools/ide/classpath create mode 100644 FinchVideo/tools/ide/project create mode 100644 JSerializable/build.xml delete mode 100644 JSerializable/default.properties create mode 100644 JSerializable/proguard.cfg create mode 100644 JSerializable/project.properties create mode 100644 JSerializable/tools/ide/classpath create mode 100644 JSerializable/tools/ide/project create mode 100644 MicroJobs/build.xml delete mode 100644 MicroJobs/default.properties create mode 100644 MicroJobs/proguard.cfg create mode 100644 MicroJobs/project.properties create mode 100644 MicroJobs/tools/ide/classpath create mode 100644 MicroJobs/tools/ide/project create mode 100644 NDKDemo/build.xml create mode 100644 NDKDemo/project.properties create mode 100644 NDKDemo/tools/ide/classpath create mode 100644 NDKDemo/tools/ide/project create mode 100644 SensorDemos/build.xml delete mode 100644 SensorDemos/default.properties create mode 100644 SensorDemos/project.properties create mode 100644 SensorDemos/tools/ide/classpath create mode 100644 SensorDemos/tools/ide/project delete mode 100644 SharedListTask/default.properties create mode 100644 SharedListTask/tools/ide/classpath create mode 100644 SharedListTask/tools/ide/project create mode 100644 SimpleFragment/build.xml delete mode 100644 SimpleFragment/default.properties create mode 100644 SimpleFragment/project.properties create mode 100644 SimpleFragment/tools/ide/classpath create mode 100644 SimpleFragment/tools/ide/project create mode 100644 TestApp/build.xml delete mode 100644 TestApp/default.properties create mode 100644 TestApp/proguard.cfg create mode 100644 TestApp/project.properties create mode 100644 TestApp/tools/ide/classpath create mode 100644 TestApp/tools/ide/project diff --git a/AIDLDemo/build.xml b/AIDLDemo/build.xml new file mode 100644 index 0000000..ba8b742 --- /dev/null +++ b/AIDLDemo/build.xml @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/AIDLDemo/default.properties b/AIDLDemo/default.properties deleted file mode 100644 index 088c703..0000000 --- a/AIDLDemo/default.properties +++ /dev/null @@ -1,11 +0,0 @@ -# This file is automatically generated by Android Tools. -# Do not modify this file -- YOUR CHANGES WILL BE ERASED! -# -# This file must be checked in Version Control Systems. -# -# To customize properties used by the Ant build system use, -# "build.properties", and override values to adapt the script to your -# project structure. - -# Project target. -target=Google Inc.:Google APIs:9 diff --git a/ClientServerDemo/ClientDemo/proguard.cfg b/AIDLDemo/proguard.cfg similarity index 76% rename from ClientServerDemo/ClientDemo/proguard.cfg rename to AIDLDemo/proguard.cfg index 8ad7d33..b1cdf17 100644 --- a/ClientServerDemo/ClientDemo/proguard.cfg +++ b/AIDLDemo/proguard.cfg @@ -10,20 +10,26 @@ -keep public class * extends android.app.Service -keep public class * extends android.content.BroadcastReceiver -keep public class * extends android.content.ContentProvider +-keep public class * extends android.app.backup.BackupAgentHelper +-keep public class * extends android.preference.Preference -keep public class com.android.vending.licensing.ILicensingService -keepclasseswithmembernames class * { native ; } --keepclasseswithmembernames class * { +-keepclasseswithmembers class * { public (android.content.Context, android.util.AttributeSet); } --keepclasseswithmembernames class * { +-keepclasseswithmembers class * { public (android.content.Context, android.util.AttributeSet, int); } +-keepclassmembers class * extends android.app.Activity { + public void *(android.view.View); +} + -keepclassmembers enum * { public static **[] values(); public static ** valueOf(java.lang.String); diff --git a/FinchLifecycle/default.properties b/AIDLDemo/project.properties similarity index 75% rename from FinchLifecycle/default.properties rename to AIDLDemo/project.properties index d1cacf1..730e911 100644 --- a/FinchLifecycle/default.properties +++ b/AIDLDemo/project.properties @@ -4,8 +4,8 @@ # This file must be checked in Version Control Systems. # # To customize properties used by the Ant build system use, -# "build.properties", and override values to adapt the script to your +# "ant.properties", and override values to adapt the script to your # project structure. # Project target. -target=android-11 +target=android-14 diff --git a/AIDLDemo/tools/ide/classpath b/AIDLDemo/tools/ide/classpath new file mode 100644 index 0000000..abba6f2 --- /dev/null +++ b/AIDLDemo/tools/ide/classpath @@ -0,0 +1,7 @@ + + + + + + + diff --git a/AIDLDemo/tools/ide/project b/AIDLDemo/tools/ide/project new file mode 100644 index 0000000..1f53e9b --- /dev/null +++ b/AIDLDemo/tools/ide/project @@ -0,0 +1,33 @@ + + + AIDLDemo + + + + + + com.android.ide.eclipse.adt.ResourceManagerBuilder + + + + + com.android.ide.eclipse.adt.PreCompilerBuilder + + + + + org.eclipse.jdt.core.javabuilder + + + + + com.android.ide.eclipse.adt.ApkBuilder + + + + + + com.android.ide.eclipse.adt.AndroidNature + org.eclipse.jdt.core.javanature + + diff --git a/AndroidUIDemo/.gitignore b/AndroidUIDemo/.gitignore index 8b15079..50ac2a6 100644 --- a/AndroidUIDemo/.gitignore +++ b/AndroidUIDemo/.gitignore @@ -2,4 +2,5 @@ /assets /.project /.classpath +/.settings /bin diff --git a/AndroidUIDemo/build.xml b/AndroidUIDemo/build.xml new file mode 100644 index 0000000..ea1d22b --- /dev/null +++ b/AndroidUIDemo/build.xml @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/AndroidUIDemo/default.properties b/AndroidUIDemo/default.properties deleted file mode 100755 index ca9c762..0000000 --- a/AndroidUIDemo/default.properties +++ /dev/null @@ -1,22 +0,0 @@ -# This file is automatically generated by Android Tools. -# Do not modify this file -- YOUR CHANGES WILL BE ERASED! -# -# This file must be checked in Version Control Systems. -# -# To customize properties used by the Ant build system use, -# "build.properties", and override values to adapt the script to your -# project structure. - -# apk configurations. This property allows creation of APK files with limited -# resources. For example, if your application contains many locales and -# you wish to release multiple smaller apks instead of a large one, you can -# define configuration to create apks with limited language sets. -# Format is a comma separated list of configuration names. For each -# configuration, a property will declare the resource configurations to -# include. Example: -# apk-configurations=european,northamerica -# apk-config-european=en,fr,it,de,es -# apk-config-northamerica=en,es -apk-configurations= -# Project target. -target=Google Inc.:Google APIs:9 diff --git a/AndroidUIDemo/proguard.cfg b/AndroidUIDemo/proguard.cfg new file mode 100644 index 0000000..b1cdf17 --- /dev/null +++ b/AndroidUIDemo/proguard.cfg @@ -0,0 +1,40 @@ +-optimizationpasses 5 +-dontusemixedcaseclassnames +-dontskipnonpubliclibraryclasses +-dontpreverify +-verbose +-optimizations !code/simplification/arithmetic,!field/*,!class/merging/* + +-keep public class * extends android.app.Activity +-keep public class * extends android.app.Application +-keep public class * extends android.app.Service +-keep public class * extends android.content.BroadcastReceiver +-keep public class * extends android.content.ContentProvider +-keep public class * extends android.app.backup.BackupAgentHelper +-keep public class * extends android.preference.Preference +-keep public class com.android.vending.licensing.ILicensingService + +-keepclasseswithmembernames class * { + native ; +} + +-keepclasseswithmembers class * { + public (android.content.Context, android.util.AttributeSet); +} + +-keepclasseswithmembers class * { + public (android.content.Context, android.util.AttributeSet, int); +} + +-keepclassmembers class * extends android.app.Activity { + public void *(android.view.View); +} + +-keepclassmembers enum * { + public static **[] values(); + public static ** valueOf(java.lang.String); +} + +-keep class * implements android.os.Parcelable { + public static final android.os.Parcelable$Creator *; +} diff --git a/ClientServerDemo/ClientDemo/default.properties b/AndroidUIDemo/project.properties similarity index 72% rename from ClientServerDemo/ClientDemo/default.properties rename to AndroidUIDemo/project.properties index 77f7ad7..730e911 100644 --- a/ClientServerDemo/ClientDemo/default.properties +++ b/AndroidUIDemo/project.properties @@ -4,8 +4,8 @@ # This file must be checked in Version Control Systems. # # To customize properties used by the Ant build system use, -# "build.properties", and override values to adapt the script to your +# "ant.properties", and override values to adapt the script to your # project structure. # Project target. -target=Google Inc.:Google APIs:9 +target=android-14 diff --git a/AndroidUIDemo/tools/ide/classpath b/AndroidUIDemo/tools/ide/classpath new file mode 100644 index 0000000..054238e --- /dev/null +++ b/AndroidUIDemo/tools/ide/classpath @@ -0,0 +1,7 @@ + + + + + + + diff --git a/AndroidUIDemo/tools/ide/project b/AndroidUIDemo/tools/ide/project new file mode 100644 index 0000000..9949dd7 --- /dev/null +++ b/AndroidUIDemo/tools/ide/project @@ -0,0 +1,33 @@ + + + AndroidUIDemo + + + + + + com.android.ide.eclipse.adt.ResourceManagerBuilder + + + + + com.android.ide.eclipse.adt.PreCompilerBuilder + + + + + org.eclipse.jdt.core.javabuilder + + + + + com.android.ide.eclipse.adt.ApkBuilder + + + + + + com.android.ide.eclipse.adt.AndroidNature + org.eclipse.jdt.core.javanature + + diff --git a/AndroidViewDemo/build.xml b/AndroidViewDemo/build.xml new file mode 100644 index 0000000..978bc62 --- /dev/null +++ b/AndroidViewDemo/build.xml @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/AndroidViewDemo/default.properties b/AndroidViewDemo/default.properties deleted file mode 100644 index ca9c762..0000000 --- a/AndroidViewDemo/default.properties +++ /dev/null @@ -1,22 +0,0 @@ -# This file is automatically generated by Android Tools. -# Do not modify this file -- YOUR CHANGES WILL BE ERASED! -# -# This file must be checked in Version Control Systems. -# -# To customize properties used by the Ant build system use, -# "build.properties", and override values to adapt the script to your -# project structure. - -# apk configurations. This property allows creation of APK files with limited -# resources. For example, if your application contains many locales and -# you wish to release multiple smaller apks instead of a large one, you can -# define configuration to create apks with limited language sets. -# Format is a comma separated list of configuration names. For each -# configuration, a property will declare the resource configurations to -# include. Example: -# apk-configurations=european,northamerica -# apk-config-european=en,fr,it,de,es -# apk-config-northamerica=en,es -apk-configurations= -# Project target. -target=Google Inc.:Google APIs:9 diff --git a/AndroidViewDemo/proguard.cfg b/AndroidViewDemo/proguard.cfg new file mode 100644 index 0000000..b1cdf17 --- /dev/null +++ b/AndroidViewDemo/proguard.cfg @@ -0,0 +1,40 @@ +-optimizationpasses 5 +-dontusemixedcaseclassnames +-dontskipnonpubliclibraryclasses +-dontpreverify +-verbose +-optimizations !code/simplification/arithmetic,!field/*,!class/merging/* + +-keep public class * extends android.app.Activity +-keep public class * extends android.app.Application +-keep public class * extends android.app.Service +-keep public class * extends android.content.BroadcastReceiver +-keep public class * extends android.content.ContentProvider +-keep public class * extends android.app.backup.BackupAgentHelper +-keep public class * extends android.preference.Preference +-keep public class com.android.vending.licensing.ILicensingService + +-keepclasseswithmembernames class * { + native ; +} + +-keepclasseswithmembers class * { + public (android.content.Context, android.util.AttributeSet); +} + +-keepclasseswithmembers class * { + public (android.content.Context, android.util.AttributeSet, int); +} + +-keepclassmembers class * extends android.app.Activity { + public void *(android.view.View); +} + +-keepclassmembers enum * { + public static **[] values(); + public static ** valueOf(java.lang.String); +} + +-keep class * implements android.os.Parcelable { + public static final android.os.Parcelable$Creator *; +} diff --git a/NDKDemo/default.properties b/AndroidViewDemo/project.properties similarity index 72% rename from NDKDemo/default.properties rename to AndroidViewDemo/project.properties index 77f7ad7..730e911 100644 --- a/NDKDemo/default.properties +++ b/AndroidViewDemo/project.properties @@ -4,8 +4,8 @@ # This file must be checked in Version Control Systems. # # To customize properties used by the Ant build system use, -# "build.properties", and override values to adapt the script to your +# "ant.properties", and override values to adapt the script to your # project structure. # Project target. -target=Google Inc.:Google APIs:9 +target=android-14 diff --git a/AndroidViewDemo/tools/ide/classpath b/AndroidViewDemo/tools/ide/classpath new file mode 100644 index 0000000..628be2b --- /dev/null +++ b/AndroidViewDemo/tools/ide/classpath @@ -0,0 +1,7 @@ + + + + + + + diff --git a/AndroidViewDemo/tools/ide/project b/AndroidViewDemo/tools/ide/project new file mode 100644 index 0000000..965986a --- /dev/null +++ b/AndroidViewDemo/tools/ide/project @@ -0,0 +1,33 @@ + + + AndroidViewDemo + + + + + + com.android.ide.eclipse.adt.ResourceManagerBuilder + + + + + com.android.ide.eclipse.adt.PreCompilerBuilder + + + + + org.eclipse.jdt.core.javabuilder + + + + + com.android.ide.eclipse.adt.ApkBuilder + + + + + + com.android.ide.eclipse.adt.AndroidNature + org.eclipse.jdt.core.javanature + + diff --git a/AsyncTaskDemo/build.xml b/AsyncTaskDemo/build.xml new file mode 100644 index 0000000..ae992f6 --- /dev/null +++ b/AsyncTaskDemo/build.xml @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/AsyncTaskDemo/default.properties b/AsyncTaskDemo/default.properties deleted file mode 100644 index 088c703..0000000 --- a/AsyncTaskDemo/default.properties +++ /dev/null @@ -1,11 +0,0 @@ -# This file is automatically generated by Android Tools. -# Do not modify this file -- YOUR CHANGES WILL BE ERASED! -# -# This file must be checked in Version Control Systems. -# -# To customize properties used by the Ant build system use, -# "build.properties", and override values to adapt the script to your -# project structure. - -# Project target. -target=Google Inc.:Google APIs:9 diff --git a/AsyncTaskDemo/proguard.cfg b/AsyncTaskDemo/proguard.cfg new file mode 100644 index 0000000..b1cdf17 --- /dev/null +++ b/AsyncTaskDemo/proguard.cfg @@ -0,0 +1,40 @@ +-optimizationpasses 5 +-dontusemixedcaseclassnames +-dontskipnonpubliclibraryclasses +-dontpreverify +-verbose +-optimizations !code/simplification/arithmetic,!field/*,!class/merging/* + +-keep public class * extends android.app.Activity +-keep public class * extends android.app.Application +-keep public class * extends android.app.Service +-keep public class * extends android.content.BroadcastReceiver +-keep public class * extends android.content.ContentProvider +-keep public class * extends android.app.backup.BackupAgentHelper +-keep public class * extends android.preference.Preference +-keep public class com.android.vending.licensing.ILicensingService + +-keepclasseswithmembernames class * { + native ; +} + +-keepclasseswithmembers class * { + public (android.content.Context, android.util.AttributeSet); +} + +-keepclasseswithmembers class * { + public (android.content.Context, android.util.AttributeSet, int); +} + +-keepclassmembers class * extends android.app.Activity { + public void *(android.view.View); +} + +-keepclassmembers enum * { + public static **[] values(); + public static ** valueOf(java.lang.String); +} + +-keep class * implements android.os.Parcelable { + public static final android.os.Parcelable$Creator *; +} diff --git a/AsyncTaskDemo/project.properties b/AsyncTaskDemo/project.properties new file mode 100644 index 0000000..730e911 --- /dev/null +++ b/AsyncTaskDemo/project.properties @@ -0,0 +1,11 @@ +# This file is automatically generated by Android Tools. +# Do not modify this file -- YOUR CHANGES WILL BE ERASED! +# +# This file must be checked in Version Control Systems. +# +# To customize properties used by the Ant build system use, +# "ant.properties", and override values to adapt the script to your +# project structure. + +# Project target. +target=android-14 diff --git a/AsyncTaskDemo/tools/ide/classpath b/AsyncTaskDemo/tools/ide/classpath new file mode 100644 index 0000000..1b4b1ee --- /dev/null +++ b/AsyncTaskDemo/tools/ide/classpath @@ -0,0 +1,7 @@ + + + + + + + diff --git a/AsyncTaskDemo/tools/ide/project b/AsyncTaskDemo/tools/ide/project new file mode 100644 index 0000000..a678185 --- /dev/null +++ b/AsyncTaskDemo/tools/ide/project @@ -0,0 +1,33 @@ + + + AsyncTaskDemo + + + + + + com.android.ide.eclipse.adt.ResourceManagerBuilder + + + + + com.android.ide.eclipse.adt.PreCompilerBuilder + + + + + org.eclipse.jdt.core.javabuilder + + + + + com.android.ide.eclipse.adt.ApkBuilder + + + + + + com.android.ide.eclipse.adt.AndroidNature + org.eclipse.jdt.core.javanature + + diff --git a/AudioPlayer/build.xml b/AudioPlayer/build.xml new file mode 100644 index 0000000..6b29ea8 --- /dev/null +++ b/AudioPlayer/build.xml @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/AudioPlayer/default.properties b/AudioPlayer/default.properties deleted file mode 100644 index 088c703..0000000 --- a/AudioPlayer/default.properties +++ /dev/null @@ -1,11 +0,0 @@ -# This file is automatically generated by Android Tools. -# Do not modify this file -- YOUR CHANGES WILL BE ERASED! -# -# This file must be checked in Version Control Systems. -# -# To customize properties used by the Ant build system use, -# "build.properties", and override values to adapt the script to your -# project structure. - -# Project target. -target=Google Inc.:Google APIs:9 diff --git a/AudioPlayer/proguard.cfg b/AudioPlayer/proguard.cfg new file mode 100644 index 0000000..b1cdf17 --- /dev/null +++ b/AudioPlayer/proguard.cfg @@ -0,0 +1,40 @@ +-optimizationpasses 5 +-dontusemixedcaseclassnames +-dontskipnonpubliclibraryclasses +-dontpreverify +-verbose +-optimizations !code/simplification/arithmetic,!field/*,!class/merging/* + +-keep public class * extends android.app.Activity +-keep public class * extends android.app.Application +-keep public class * extends android.app.Service +-keep public class * extends android.content.BroadcastReceiver +-keep public class * extends android.content.ContentProvider +-keep public class * extends android.app.backup.BackupAgentHelper +-keep public class * extends android.preference.Preference +-keep public class com.android.vending.licensing.ILicensingService + +-keepclasseswithmembernames class * { + native ; +} + +-keepclasseswithmembers class * { + public (android.content.Context, android.util.AttributeSet); +} + +-keepclasseswithmembers class * { + public (android.content.Context, android.util.AttributeSet, int); +} + +-keepclassmembers class * extends android.app.Activity { + public void *(android.view.View); +} + +-keepclassmembers enum * { + public static **[] values(); + public static ** valueOf(java.lang.String); +} + +-keep class * implements android.os.Parcelable { + public static final android.os.Parcelable$Creator *; +} diff --git a/AudioPlayer/project.properties b/AudioPlayer/project.properties new file mode 100644 index 0000000..730e911 --- /dev/null +++ b/AudioPlayer/project.properties @@ -0,0 +1,11 @@ +# This file is automatically generated by Android Tools. +# Do not modify this file -- YOUR CHANGES WILL BE ERASED! +# +# This file must be checked in Version Control Systems. +# +# To customize properties used by the Ant build system use, +# "ant.properties", and override values to adapt the script to your +# project structure. + +# Project target. +target=android-14 diff --git a/AudioPlayer/tools/ide/classpath b/AudioPlayer/tools/ide/classpath new file mode 100644 index 0000000..6c635c0 --- /dev/null +++ b/AudioPlayer/tools/ide/classpath @@ -0,0 +1,7 @@ + + + + + + + diff --git a/AudioPlayer/tools/ide/project b/AudioPlayer/tools/ide/project new file mode 100644 index 0000000..802c5fc --- /dev/null +++ b/AudioPlayer/tools/ide/project @@ -0,0 +1,33 @@ + + + AudioPlayer + + + + + + com.android.ide.eclipse.adt.ResourceManagerBuilder + + + + + com.android.ide.eclipse.adt.PreCompilerBuilder + + + + + org.eclipse.jdt.core.javabuilder + + + + + com.android.ide.eclipse.adt.ApkBuilder + + + + + + com.android.ide.eclipse.adt.AndroidNature + org.eclipse.jdt.core.javanature + + diff --git a/ClientServerDemo/ClientDemo/.gitignore b/ClientDemo/.gitignore similarity index 100% rename from ClientServerDemo/ClientDemo/.gitignore rename to ClientDemo/.gitignore diff --git a/ClientServerDemo/ClientDemo/AndroidManifest.xml b/ClientDemo/AndroidManifest.xml similarity index 100% rename from ClientServerDemo/ClientDemo/AndroidManifest.xml rename to ClientDemo/AndroidManifest.xml diff --git a/ClientDemo/build.xml b/ClientDemo/build.xml new file mode 100644 index 0000000..b7eb179 --- /dev/null +++ b/ClientDemo/build.xml @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ClientDemo/proguard.cfg b/ClientDemo/proguard.cfg new file mode 100644 index 0000000..b1cdf17 --- /dev/null +++ b/ClientDemo/proguard.cfg @@ -0,0 +1,40 @@ +-optimizationpasses 5 +-dontusemixedcaseclassnames +-dontskipnonpubliclibraryclasses +-dontpreverify +-verbose +-optimizations !code/simplification/arithmetic,!field/*,!class/merging/* + +-keep public class * extends android.app.Activity +-keep public class * extends android.app.Application +-keep public class * extends android.app.Service +-keep public class * extends android.content.BroadcastReceiver +-keep public class * extends android.content.ContentProvider +-keep public class * extends android.app.backup.BackupAgentHelper +-keep public class * extends android.preference.Preference +-keep public class com.android.vending.licensing.ILicensingService + +-keepclasseswithmembernames class * { + native ; +} + +-keepclasseswithmembers class * { + public (android.content.Context, android.util.AttributeSet); +} + +-keepclasseswithmembers class * { + public (android.content.Context, android.util.AttributeSet, int); +} + +-keepclassmembers class * extends android.app.Activity { + public void *(android.view.View); +} + +-keepclassmembers enum * { + public static **[] values(); + public static ** valueOf(java.lang.String); +} + +-keep class * implements android.os.Parcelable { + public static final android.os.Parcelable$Creator *; +} diff --git a/ClientDemo/project.properties b/ClientDemo/project.properties new file mode 100644 index 0000000..730e911 --- /dev/null +++ b/ClientDemo/project.properties @@ -0,0 +1,11 @@ +# This file is automatically generated by Android Tools. +# Do not modify this file -- YOUR CHANGES WILL BE ERASED! +# +# This file must be checked in Version Control Systems. +# +# To customize properties used by the Ant build system use, +# "ant.properties", and override values to adapt the script to your +# project structure. + +# Project target. +target=android-14 diff --git a/ClientServerDemo/ClientDemo/res/drawable-hdpi/icon.png b/ClientDemo/res/drawable-hdpi/icon.png similarity index 100% rename from ClientServerDemo/ClientDemo/res/drawable-hdpi/icon.png rename to ClientDemo/res/drawable-hdpi/icon.png diff --git a/ClientServerDemo/ClientDemo/res/drawable-ldpi/icon.png b/ClientDemo/res/drawable-ldpi/icon.png similarity index 100% rename from ClientServerDemo/ClientDemo/res/drawable-ldpi/icon.png rename to ClientDemo/res/drawable-ldpi/icon.png diff --git a/ClientServerDemo/ClientDemo/res/drawable-mdpi/icon.png b/ClientDemo/res/drawable-mdpi/icon.png similarity index 100% rename from ClientServerDemo/ClientDemo/res/drawable-mdpi/icon.png rename to ClientDemo/res/drawable-mdpi/icon.png diff --git a/ClientServerDemo/ClientDemo/res/layout/account.xml b/ClientDemo/res/layout/account.xml similarity index 100% rename from ClientServerDemo/ClientDemo/res/layout/account.xml rename to ClientDemo/res/layout/account.xml diff --git a/ClientServerDemo/ClientDemo/res/layout/accountadd.xml b/ClientDemo/res/layout/accountadd.xml similarity index 100% rename from ClientServerDemo/ClientDemo/res/layout/accountadd.xml rename to ClientDemo/res/layout/accountadd.xml diff --git a/ClientServerDemo/ClientDemo/res/layout/contact.xml b/ClientDemo/res/layout/contact.xml similarity index 100% rename from ClientServerDemo/ClientDemo/res/layout/contact.xml rename to ClientDemo/res/layout/contact.xml diff --git a/ClientServerDemo/ClientDemo/res/layout/login.xml b/ClientDemo/res/layout/login.xml similarity index 100% rename from ClientServerDemo/ClientDemo/res/layout/login.xml rename to ClientDemo/res/layout/login.xml diff --git a/ClientServerDemo/ClientDemo/res/layout/settings.xml b/ClientDemo/res/layout/settings.xml similarity index 100% rename from ClientServerDemo/ClientDemo/res/layout/settings.xml rename to ClientDemo/res/layout/settings.xml diff --git a/ClientServerDemo/ClientDemo/res/values/strings.xml b/ClientDemo/res/values/strings.xml similarity index 100% rename from ClientServerDemo/ClientDemo/res/values/strings.xml rename to ClientDemo/res/values/strings.xml diff --git a/ClientServerDemo/ClientDemo/res/xml/authenticator.xml b/ClientDemo/res/xml/authenticator.xml similarity index 100% rename from ClientServerDemo/ClientDemo/res/xml/authenticator.xml rename to ClientDemo/res/xml/authenticator.xml diff --git a/ClientServerDemo/ClientDemo/res/xml/contacts.xml b/ClientDemo/res/xml/contacts.xml similarity index 100% rename from ClientServerDemo/ClientDemo/res/xml/contacts.xml rename to ClientDemo/res/xml/contacts.xml diff --git a/ClientServerDemo/ClientDemo/res/xml/syncadapter.xml b/ClientDemo/res/xml/syncadapter.xml similarity index 100% rename from ClientServerDemo/ClientDemo/res/xml/syncadapter.xml rename to ClientDemo/res/xml/syncadapter.xml diff --git a/ClientServerDemo/ClientDemo/src/com/oreilly/demo/pa/ch17/account/AccountActivity.java b/ClientDemo/src/com/oreilly/demo/pa/ch17/account/AccountActivity.java similarity index 100% rename from ClientServerDemo/ClientDemo/src/com/oreilly/demo/pa/ch17/account/AccountActivity.java rename to ClientDemo/src/com/oreilly/demo/pa/ch17/account/AccountActivity.java diff --git a/ClientServerDemo/ClientDemo/src/com/oreilly/demo/pa/ch17/account/AccountAddActivity.java b/ClientDemo/src/com/oreilly/demo/pa/ch17/account/AccountAddActivity.java similarity index 100% rename from ClientServerDemo/ClientDemo/src/com/oreilly/demo/pa/ch17/account/AccountAddActivity.java rename to ClientDemo/src/com/oreilly/demo/pa/ch17/account/AccountAddActivity.java diff --git a/ClientServerDemo/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/LoginActivity.java b/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/LoginActivity.java similarity index 100% rename from ClientServerDemo/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/LoginActivity.java rename to ClientDemo/src/com/oreilly/demo/pa/ch17/sync/LoginActivity.java diff --git a/ClientServerDemo/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/NetworkUtil.java b/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/NetworkUtil.java similarity index 100% rename from ClientServerDemo/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/NetworkUtil.java rename to ClientDemo/src/com/oreilly/demo/pa/ch17/sync/NetworkUtil.java diff --git a/ClientServerDemo/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/Settings.java b/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/Settings.java similarity index 100% rename from ClientServerDemo/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/Settings.java rename to ClientDemo/src/com/oreilly/demo/pa/ch17/sync/Settings.java diff --git a/ClientServerDemo/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/authsync/AuthenticationService.java b/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/authsync/AuthenticationService.java similarity index 100% rename from ClientServerDemo/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/authsync/AuthenticationService.java rename to ClientDemo/src/com/oreilly/demo/pa/ch17/sync/authsync/AuthenticationService.java diff --git a/ClientServerDemo/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/authsync/Authenticator.java b/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/authsync/Authenticator.java similarity index 100% rename from ClientServerDemo/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/authsync/Authenticator.java rename to ClientDemo/src/com/oreilly/demo/pa/ch17/sync/authsync/Authenticator.java diff --git a/ClientServerDemo/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/authsync/SyncAdapter.java b/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/authsync/SyncAdapter.java similarity index 100% rename from ClientServerDemo/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/authsync/SyncAdapter.java rename to ClientDemo/src/com/oreilly/demo/pa/ch17/sync/authsync/SyncAdapter.java diff --git a/ClientServerDemo/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/authsync/SyncService.java b/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/authsync/SyncService.java similarity index 100% rename from ClientServerDemo/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/authsync/SyncService.java rename to ClientDemo/src/com/oreilly/demo/pa/ch17/sync/authsync/SyncService.java diff --git a/ClientServerDemo/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/dataobjects/Change.java b/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/dataobjects/Change.java similarity index 100% rename from ClientServerDemo/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/dataobjects/Change.java rename to ClientDemo/src/com/oreilly/demo/pa/ch17/sync/dataobjects/Change.java diff --git a/ClientServerDemo/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/dataobjects/ListFriends.java b/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/dataobjects/ListFriends.java similarity index 100% rename from ClientServerDemo/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/dataobjects/ListFriends.java rename to ClientDemo/src/com/oreilly/demo/pa/ch17/sync/dataobjects/ListFriends.java diff --git a/ClientServerDemo/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/dataobjects/User.java b/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/dataobjects/User.java similarity index 100% rename from ClientServerDemo/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/dataobjects/User.java rename to ClientDemo/src/com/oreilly/demo/pa/ch17/sync/dataobjects/User.java diff --git a/ClientDemo/tools/ide/classpath b/ClientDemo/tools/ide/classpath new file mode 100644 index 0000000..6c635c0 --- /dev/null +++ b/ClientDemo/tools/ide/classpath @@ -0,0 +1,7 @@ + + + + + + + diff --git a/ClientServerDemo/ClientDemo/tools/ide/eclipse/README.txt b/ClientDemo/tools/ide/eclipse/README.txt similarity index 100% rename from ClientServerDemo/ClientDemo/tools/ide/eclipse/README.txt rename to ClientDemo/tools/ide/eclipse/README.txt diff --git a/ClientServerDemo/ClientDemo/tools/ide/eclipse/classpath b/ClientDemo/tools/ide/eclipse/classpath similarity index 100% rename from ClientServerDemo/ClientDemo/tools/ide/eclipse/classpath rename to ClientDemo/tools/ide/eclipse/classpath diff --git a/ClientServerDemo/ClientDemo/tools/ide/eclipse/project b/ClientDemo/tools/ide/eclipse/project similarity index 100% rename from ClientServerDemo/ClientDemo/tools/ide/eclipse/project rename to ClientDemo/tools/ide/eclipse/project diff --git a/ClientDemo/tools/ide/project b/ClientDemo/tools/ide/project new file mode 100644 index 0000000..ac6366c --- /dev/null +++ b/ClientDemo/tools/ide/project @@ -0,0 +1,33 @@ + + + ClientDemo + + + + + + com.android.ide.eclipse.adt.ResourceManagerBuilder + + + + + com.android.ide.eclipse.adt.PreCompilerBuilder + + + + + org.eclipse.jdt.core.javabuilder + + + + + com.android.ide.eclipse.adt.ApkBuilder + + + + + + com.android.ide.eclipse.adt.AndroidNature + org.eclipse.jdt.core.javanature + + diff --git a/ContactViewer/build.xml b/ContactViewer/build.xml new file mode 100644 index 0000000..7a4d14a --- /dev/null +++ b/ContactViewer/build.xml @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/FinchLifecycleBackport/default.properties b/ContactViewer/default.properties similarity index 95% rename from FinchLifecycleBackport/default.properties rename to ContactViewer/default.properties index b74c488..4686f7f 100644 --- a/FinchLifecycleBackport/default.properties +++ b/ContactViewer/default.properties @@ -8,4 +8,4 @@ # project structure. # Project target. -target=android-4 +target=android-9 diff --git a/ContactViewer/local.properties b/ContactViewer/local.properties deleted file mode 100644 index a710320..0000000 --- a/ContactViewer/local.properties +++ /dev/null @@ -1,10 +0,0 @@ -# This file is automatically generated by Android Tools. -# Do not modify this file -- YOUR CHANGES WILL BE ERASED! -# -# This file must *NOT* be checked in Version Control Systems, -# as it contains information specific to your local configuration. - -# location of the SDK. This is only used by Ant -# For customization when using a Version Control System, please read the -# header note. -sdk.dir=/Users/blake/android/sdk diff --git a/ContactViewer/project.properties b/ContactViewer/project.properties index 3615f13..730e911 100644 --- a/ContactViewer/project.properties +++ b/ContactViewer/project.properties @@ -8,4 +8,4 @@ # project structure. # Project target. -target=Google Inc.:Google APIs:6 +target=android-14 diff --git a/ContactViewer/tools/ide/classpath b/ContactViewer/tools/ide/classpath new file mode 100755 index 0000000..8301ab0 --- /dev/null +++ b/ContactViewer/tools/ide/classpath @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/ContactViewer/tools/ide/project b/ContactViewer/tools/ide/project new file mode 100755 index 0000000..485dc5e --- /dev/null +++ b/ContactViewer/tools/ide/project @@ -0,0 +1,33 @@ + + + ContactViewer + + + + + + com.android.ide.eclipse.adt.ResourceManagerBuilder + + + + + com.android.ide.eclipse.adt.PreCompilerBuilder + + + + + org.eclipse.jdt.core.javabuilder + + + + + com.android.ide.eclipse.adt.ApkBuilder + + + + + + com.android.ide.eclipse.adt.AndroidNature + org.eclipse.jdt.core.javanature + + diff --git a/ClientServerDemo/DemoServer/.gitignore b/DemoServer/.gitignore similarity index 100% rename from ClientServerDemo/DemoServer/.gitignore rename to DemoServer/.gitignore diff --git a/ClientServerDemo/DemoServer/README.txt b/DemoServer/README.txt similarity index 100% rename from ClientServerDemo/DemoServer/README.txt rename to DemoServer/README.txt diff --git a/ClientServerDemo/DemoServer/config/Config.json b/DemoServer/config/Config.json similarity index 100% rename from ClientServerDemo/DemoServer/config/Config.json rename to DemoServer/config/Config.json diff --git a/ClientServerDemo/DemoServer/config/UsersDB.json b/DemoServer/config/UsersDB.json similarity index 100% rename from ClientServerDemo/DemoServer/config/UsersDB.json rename to DemoServer/config/UsersDB.json diff --git a/ClientServerDemo/DemoServer/config/UsersDB_orig.json b/DemoServer/config/UsersDB_orig.json similarity index 100% rename from ClientServerDemo/DemoServer/config/UsersDB_orig.json rename to DemoServer/config/UsersDB_orig.json diff --git a/ClientServerDemo/DemoServer/lib/commons-codec-1.2.jar b/DemoServer/lib/commons-codec-1.2.jar similarity index 100% rename from ClientServerDemo/DemoServer/lib/commons-codec-1.2.jar rename to DemoServer/lib/commons-codec-1.2.jar diff --git a/ClientServerDemo/DemoServer/lib/commons-httpclient-3.1.jar b/DemoServer/lib/commons-httpclient-3.1.jar similarity index 100% rename from ClientServerDemo/DemoServer/lib/commons-httpclient-3.1.jar rename to DemoServer/lib/commons-httpclient-3.1.jar diff --git a/ClientServerDemo/DemoServer/lib/commons-logging-1.0.4.jar b/DemoServer/lib/commons-logging-1.0.4.jar similarity index 100% rename from ClientServerDemo/DemoServer/lib/commons-logging-1.0.4.jar rename to DemoServer/lib/commons-logging-1.0.4.jar diff --git a/ClientServerDemo/DemoServer/lib/jetty-continuation-7.0.2.v20100331.jar b/DemoServer/lib/jetty-continuation-7.0.2.v20100331.jar similarity index 100% rename from ClientServerDemo/DemoServer/lib/jetty-continuation-7.0.2.v20100331.jar rename to DemoServer/lib/jetty-continuation-7.0.2.v20100331.jar diff --git a/ClientServerDemo/DemoServer/lib/jetty-http-7.0.2.v20100331.jar b/DemoServer/lib/jetty-http-7.0.2.v20100331.jar similarity index 100% rename from ClientServerDemo/DemoServer/lib/jetty-http-7.0.2.v20100331.jar rename to DemoServer/lib/jetty-http-7.0.2.v20100331.jar diff --git a/ClientServerDemo/DemoServer/lib/jetty-io-7.0.2.v20100331.jar b/DemoServer/lib/jetty-io-7.0.2.v20100331.jar similarity index 100% rename from ClientServerDemo/DemoServer/lib/jetty-io-7.0.2.v20100331.jar rename to DemoServer/lib/jetty-io-7.0.2.v20100331.jar diff --git a/ClientServerDemo/DemoServer/lib/jetty-security-7.0.2.v20100331.jar b/DemoServer/lib/jetty-security-7.0.2.v20100331.jar similarity index 100% rename from ClientServerDemo/DemoServer/lib/jetty-security-7.0.2.v20100331.jar rename to DemoServer/lib/jetty-security-7.0.2.v20100331.jar diff --git a/ClientServerDemo/DemoServer/lib/jetty-server-7.0.2.v20100331.jar b/DemoServer/lib/jetty-server-7.0.2.v20100331.jar similarity index 100% rename from ClientServerDemo/DemoServer/lib/jetty-server-7.0.2.v20100331.jar rename to DemoServer/lib/jetty-server-7.0.2.v20100331.jar diff --git a/ClientServerDemo/DemoServer/lib/jetty-servlet-7.0.2.v20100331.jar b/DemoServer/lib/jetty-servlet-7.0.2.v20100331.jar similarity index 100% rename from ClientServerDemo/DemoServer/lib/jetty-servlet-7.0.2.v20100331.jar rename to DemoServer/lib/jetty-servlet-7.0.2.v20100331.jar diff --git a/ClientServerDemo/DemoServer/lib/jetty-util-7.0.2.v20100331.jar b/DemoServer/lib/jetty-util-7.0.2.v20100331.jar similarity index 100% rename from ClientServerDemo/DemoServer/lib/jetty-util-7.0.2.v20100331.jar rename to DemoServer/lib/jetty-util-7.0.2.v20100331.jar diff --git a/ClientServerDemo/DemoServer/lib/json-1.0.0.jar b/DemoServer/lib/json-1.0.0.jar similarity index 100% rename from ClientServerDemo/DemoServer/lib/json-1.0.0.jar rename to DemoServer/lib/json-1.0.0.jar diff --git a/ClientServerDemo/DemoServer/lib/servlet-api-2.5.jar b/DemoServer/lib/servlet-api-2.5.jar similarity index 100% rename from ClientServerDemo/DemoServer/lib/servlet-api-2.5.jar rename to DemoServer/lib/servlet-api-2.5.jar diff --git a/ClientServerDemo/DemoServer/src/com/oreilly/demo/pa/ch17/dataobjects/Change.java b/DemoServer/src/com/oreilly/demo/pa/ch17/dataobjects/Change.java similarity index 100% rename from ClientServerDemo/DemoServer/src/com/oreilly/demo/pa/ch17/dataobjects/Change.java rename to DemoServer/src/com/oreilly/demo/pa/ch17/dataobjects/Change.java diff --git a/ClientServerDemo/DemoServer/src/com/oreilly/demo/pa/ch17/dataobjects/ListFriends.java b/DemoServer/src/com/oreilly/demo/pa/ch17/dataobjects/ListFriends.java similarity index 100% rename from ClientServerDemo/DemoServer/src/com/oreilly/demo/pa/ch17/dataobjects/ListFriends.java rename to DemoServer/src/com/oreilly/demo/pa/ch17/dataobjects/ListFriends.java diff --git a/ClientServerDemo/DemoServer/src/com/oreilly/demo/pa/ch17/dataobjects/User.java b/DemoServer/src/com/oreilly/demo/pa/ch17/dataobjects/User.java similarity index 100% rename from ClientServerDemo/DemoServer/src/com/oreilly/demo/pa/ch17/dataobjects/User.java rename to DemoServer/src/com/oreilly/demo/pa/ch17/dataobjects/User.java diff --git a/ClientServerDemo/DemoServer/src/com/oreilly/demo/pa/ch17/server/Config.java b/DemoServer/src/com/oreilly/demo/pa/ch17/server/Config.java similarity index 100% rename from ClientServerDemo/DemoServer/src/com/oreilly/demo/pa/ch17/server/Config.java rename to DemoServer/src/com/oreilly/demo/pa/ch17/server/Config.java diff --git a/ClientServerDemo/DemoServer/src/com/oreilly/demo/pa/ch17/server/MainServer.java b/DemoServer/src/com/oreilly/demo/pa/ch17/server/MainServer.java similarity index 100% rename from ClientServerDemo/DemoServer/src/com/oreilly/demo/pa/ch17/server/MainServer.java rename to DemoServer/src/com/oreilly/demo/pa/ch17/server/MainServer.java diff --git a/ClientServerDemo/DemoServer/src/com/oreilly/demo/pa/ch17/server/ServerStatic.java b/DemoServer/src/com/oreilly/demo/pa/ch17/server/ServerStatic.java similarity index 100% rename from ClientServerDemo/DemoServer/src/com/oreilly/demo/pa/ch17/server/ServerStatic.java rename to DemoServer/src/com/oreilly/demo/pa/ch17/server/ServerStatic.java diff --git a/ClientServerDemo/DemoServer/src/com/oreilly/demo/pa/ch17/server/ServletUtil.java b/DemoServer/src/com/oreilly/demo/pa/ch17/server/ServletUtil.java similarity index 100% rename from ClientServerDemo/DemoServer/src/com/oreilly/demo/pa/ch17/server/ServletUtil.java rename to DemoServer/src/com/oreilly/demo/pa/ch17/server/ServletUtil.java diff --git a/ClientServerDemo/DemoServer/src/com/oreilly/demo/pa/ch17/server/data/UsersData.java b/DemoServer/src/com/oreilly/demo/pa/ch17/server/data/UsersData.java similarity index 100% rename from ClientServerDemo/DemoServer/src/com/oreilly/demo/pa/ch17/server/data/UsersData.java rename to DemoServer/src/com/oreilly/demo/pa/ch17/server/data/UsersData.java diff --git a/ClientServerDemo/DemoServer/src/com/oreilly/demo/pa/ch17/server/servlet/AddFriendServlet.java b/DemoServer/src/com/oreilly/demo/pa/ch17/server/servlet/AddFriendServlet.java similarity index 100% rename from ClientServerDemo/DemoServer/src/com/oreilly/demo/pa/ch17/server/servlet/AddFriendServlet.java rename to DemoServer/src/com/oreilly/demo/pa/ch17/server/servlet/AddFriendServlet.java diff --git a/ClientServerDemo/DemoServer/src/com/oreilly/demo/pa/ch17/server/servlet/AddUserServlet.java b/DemoServer/src/com/oreilly/demo/pa/ch17/server/servlet/AddUserServlet.java similarity index 100% rename from ClientServerDemo/DemoServer/src/com/oreilly/demo/pa/ch17/server/servlet/AddUserServlet.java rename to DemoServer/src/com/oreilly/demo/pa/ch17/server/servlet/AddUserServlet.java diff --git a/ClientServerDemo/DemoServer/src/com/oreilly/demo/pa/ch17/server/servlet/BaseServlet.java b/DemoServer/src/com/oreilly/demo/pa/ch17/server/servlet/BaseServlet.java similarity index 100% rename from ClientServerDemo/DemoServer/src/com/oreilly/demo/pa/ch17/server/servlet/BaseServlet.java rename to DemoServer/src/com/oreilly/demo/pa/ch17/server/servlet/BaseServlet.java diff --git a/ClientServerDemo/DemoServer/src/com/oreilly/demo/pa/ch17/server/servlet/DeleteFriendServlet.java b/DemoServer/src/com/oreilly/demo/pa/ch17/server/servlet/DeleteFriendServlet.java similarity index 100% rename from ClientServerDemo/DemoServer/src/com/oreilly/demo/pa/ch17/server/servlet/DeleteFriendServlet.java rename to DemoServer/src/com/oreilly/demo/pa/ch17/server/servlet/DeleteFriendServlet.java diff --git a/ClientServerDemo/DemoServer/src/com/oreilly/demo/pa/ch17/server/servlet/GetFriendsServlet.java b/DemoServer/src/com/oreilly/demo/pa/ch17/server/servlet/GetFriendsServlet.java similarity index 100% rename from ClientServerDemo/DemoServer/src/com/oreilly/demo/pa/ch17/server/servlet/GetFriendsServlet.java rename to DemoServer/src/com/oreilly/demo/pa/ch17/server/servlet/GetFriendsServlet.java diff --git a/ClientServerDemo/DemoServer/src/com/oreilly/demo/pa/ch17/server/servlet/ISHttpServletType.java b/DemoServer/src/com/oreilly/demo/pa/ch17/server/servlet/ISHttpServletType.java similarity index 100% rename from ClientServerDemo/DemoServer/src/com/oreilly/demo/pa/ch17/server/servlet/ISHttpServletType.java rename to DemoServer/src/com/oreilly/demo/pa/ch17/server/servlet/ISHttpServletType.java diff --git a/ClientServerDemo/DemoServer/src/com/oreilly/demo/pa/ch17/server/servlet/LoginServlet.java b/DemoServer/src/com/oreilly/demo/pa/ch17/server/servlet/LoginServlet.java similarity index 100% rename from ClientServerDemo/DemoServer/src/com/oreilly/demo/pa/ch17/server/servlet/LoginServlet.java rename to DemoServer/src/com/oreilly/demo/pa/ch17/server/servlet/LoginServlet.java diff --git a/ClientServerDemo/DemoServer/tools/ide/eclipse/classpath b/DemoServer/tools/ide/classpath similarity index 100% rename from ClientServerDemo/DemoServer/tools/ide/eclipse/classpath rename to DemoServer/tools/ide/classpath diff --git a/ClientServerDemo/DemoServer/tools/ide/eclipse/README.txt b/DemoServer/tools/ide/eclipse/README.txt similarity index 100% rename from ClientServerDemo/DemoServer/tools/ide/eclipse/README.txt rename to DemoServer/tools/ide/eclipse/README.txt diff --git a/DemoServer/tools/ide/eclipse/classpath b/DemoServer/tools/ide/eclipse/classpath new file mode 100644 index 0000000..677fef4 --- /dev/null +++ b/DemoServer/tools/ide/eclipse/classpath @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/ClientServerDemo/DemoServer/tools/ide/eclipse/project b/DemoServer/tools/ide/eclipse/project similarity index 100% rename from ClientServerDemo/DemoServer/tools/ide/eclipse/project rename to DemoServer/tools/ide/eclipse/project diff --git a/DemoServer/tools/ide/project b/DemoServer/tools/ide/project new file mode 100644 index 0000000..5d1f6ce --- /dev/null +++ b/DemoServer/tools/ide/project @@ -0,0 +1,17 @@ + + + DemoServer + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/ClientServerDemo/DemoServer/tools/runserver.sh b/DemoServer/tools/runserver.sh similarity index 100% rename from ClientServerDemo/DemoServer/tools/runserver.sh rename to DemoServer/tools/runserver.sh diff --git a/FillListTask/tools/ide/classpath b/FillListTask/tools/ide/classpath new file mode 100644 index 0000000..a8dfb7a --- /dev/null +++ b/FillListTask/tools/ide/classpath @@ -0,0 +1,6 @@ + + + + + + diff --git a/FillListTask/tools/ide/project b/FillListTask/tools/ide/project new file mode 100644 index 0000000..a5f7ffb --- /dev/null +++ b/FillListTask/tools/ide/project @@ -0,0 +1,17 @@ + + + FillListTask + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/FinchFramework/FinchFramework/.gitignore b/FinchFramework/.gitignore similarity index 100% rename from FinchFramework/FinchFramework/.gitignore rename to FinchFramework/.gitignore diff --git a/FinchFramework/FinchFramework/AndroidManifest.xml b/FinchFramework/AndroidManifest.xml similarity index 100% rename from FinchFramework/FinchFramework/AndroidManifest.xml rename to FinchFramework/AndroidManifest.xml diff --git a/FinchFramework/FinchFramework/default.properties b/FinchFramework/FinchFramework/default.properties deleted file mode 100644 index b3b4c29..0000000 --- a/FinchFramework/FinchFramework/default.properties +++ /dev/null @@ -1,12 +0,0 @@ -# This file is automatically generated by Android Tools. -# Do not modify this file -- YOUR CHANGES WILL BE ERASED! -# -# This file must be checked in Version Control Systems. -# -# To customize properties used by the Ant build system use, -# "build.properties", and override values to adapt the script to your -# project structure. - -# Project target. -target=android-9 -android.library=false diff --git a/FinchFramework/FinchFrameworkTest/AndroidManifest.xml b/FinchFramework/FinchFrameworkTest/AndroidManifest.xml deleted file mode 100644 index bf03cd7..0000000 --- a/FinchFramework/FinchFrameworkTest/AndroidManifest.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/FinchFramework/FinchFrameworkTest/default.properties b/FinchFramework/FinchFrameworkTest/default.properties deleted file mode 100644 index bf5e7c2..0000000 --- a/FinchFramework/FinchFrameworkTest/default.properties +++ /dev/null @@ -1,11 +0,0 @@ -# This file is automatically generated by Android Tools. -# Do not modify this file -- YOUR CHANGES WILL BE ERASED! -# -# This file must be checked in Version Control Systems. -# -# To customize properties used by the Ant build system use, -# "build.properties", and override values to adapt the script to your -# project structure. - -# Project target. -target=Google Inc.:Google APIs:8 diff --git a/FinchFramework/build.xml b/FinchFramework/build.xml new file mode 100644 index 0000000..db29411 --- /dev/null +++ b/FinchFramework/build.xml @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/FinchFramework/FinchFramework/lib-src/com/finchframework/finch/Finch.java b/FinchFramework/lib-src/com/finchframework/finch/Finch.java similarity index 100% rename from FinchFramework/FinchFramework/lib-src/com/finchframework/finch/Finch.java rename to FinchFramework/lib-src/com/finchframework/finch/Finch.java diff --git a/FinchFramework/FinchFramework/lib-src/com/finchframework/finch/FinchApplication.java b/FinchFramework/lib-src/com/finchframework/finch/FinchApplication.java similarity index 100% rename from FinchFramework/FinchFramework/lib-src/com/finchframework/finch/FinchApplication.java rename to FinchFramework/lib-src/com/finchframework/finch/FinchApplication.java diff --git a/FinchFramework/FinchFramework/lib-src/com/finchframework/finch/rest/FileHandler.java b/FinchFramework/lib-src/com/finchframework/finch/rest/FileHandler.java similarity index 100% rename from FinchFramework/FinchFramework/lib-src/com/finchframework/finch/rest/FileHandler.java rename to FinchFramework/lib-src/com/finchframework/finch/rest/FileHandler.java diff --git a/FinchFramework/FinchFramework/lib-src/com/finchframework/finch/rest/FileHandlerFactory.java b/FinchFramework/lib-src/com/finchframework/finch/rest/FileHandlerFactory.java similarity index 100% rename from FinchFramework/FinchFramework/lib-src/com/finchframework/finch/rest/FileHandlerFactory.java rename to FinchFramework/lib-src/com/finchframework/finch/rest/FileHandlerFactory.java diff --git a/FinchFramework/FinchFramework/lib-src/com/finchframework/finch/rest/RESTfulContentProvider.java b/FinchFramework/lib-src/com/finchframework/finch/rest/RESTfulContentProvider.java similarity index 100% rename from FinchFramework/FinchFramework/lib-src/com/finchframework/finch/rest/RESTfulContentProvider.java rename to FinchFramework/lib-src/com/finchframework/finch/rest/RESTfulContentProvider.java diff --git a/FinchFramework/FinchFramework/lib-src/com/finchframework/finch/rest/RawResponse.java b/FinchFramework/lib-src/com/finchframework/finch/rest/RawResponse.java similarity index 100% rename from FinchFramework/FinchFramework/lib-src/com/finchframework/finch/rest/RawResponse.java rename to FinchFramework/lib-src/com/finchframework/finch/rest/RawResponse.java diff --git a/FinchFramework/FinchFramework/lib-src/com/finchframework/finch/rest/ResponseHandler.java b/FinchFramework/lib-src/com/finchframework/finch/rest/ResponseHandler.java similarity index 100% rename from FinchFramework/FinchFramework/lib-src/com/finchframework/finch/rest/ResponseHandler.java rename to FinchFramework/lib-src/com/finchframework/finch/rest/ResponseHandler.java diff --git a/FinchFramework/FinchFramework/lib-src/com/finchframework/finch/rest/UriRequestTask.java b/FinchFramework/lib-src/com/finchframework/finch/rest/UriRequestTask.java similarity index 100% rename from FinchFramework/FinchFramework/lib-src/com/finchframework/finch/rest/UriRequestTask.java rename to FinchFramework/lib-src/com/finchframework/finch/rest/UriRequestTask.java diff --git a/FinchFramework/FinchFramework/lib-src/com/finchframework/finch/views/MesgEditText.java b/FinchFramework/lib-src/com/finchframework/finch/views/MesgEditText.java similarity index 100% rename from FinchFramework/FinchFramework/lib-src/com/finchframework/finch/views/MesgEditText.java rename to FinchFramework/lib-src/com/finchframework/finch/views/MesgEditText.java diff --git a/FinchFramework/proguard.cfg b/FinchFramework/proguard.cfg new file mode 100644 index 0000000..b1cdf17 --- /dev/null +++ b/FinchFramework/proguard.cfg @@ -0,0 +1,40 @@ +-optimizationpasses 5 +-dontusemixedcaseclassnames +-dontskipnonpubliclibraryclasses +-dontpreverify +-verbose +-optimizations !code/simplification/arithmetic,!field/*,!class/merging/* + +-keep public class * extends android.app.Activity +-keep public class * extends android.app.Application +-keep public class * extends android.app.Service +-keep public class * extends android.content.BroadcastReceiver +-keep public class * extends android.content.ContentProvider +-keep public class * extends android.app.backup.BackupAgentHelper +-keep public class * extends android.preference.Preference +-keep public class com.android.vending.licensing.ILicensingService + +-keepclasseswithmembernames class * { + native ; +} + +-keepclasseswithmembers class * { + public (android.content.Context, android.util.AttributeSet); +} + +-keepclasseswithmembers class * { + public (android.content.Context, android.util.AttributeSet, int); +} + +-keepclassmembers class * extends android.app.Activity { + public void *(android.view.View); +} + +-keepclassmembers enum * { + public static **[] values(); + public static ** valueOf(java.lang.String); +} + +-keep class * implements android.os.Parcelable { + public static final android.os.Parcelable$Creator *; +} diff --git a/FinchFramework/project.properties b/FinchFramework/project.properties new file mode 100644 index 0000000..730e911 --- /dev/null +++ b/FinchFramework/project.properties @@ -0,0 +1,11 @@ +# This file is automatically generated by Android Tools. +# Do not modify this file -- YOUR CHANGES WILL BE ERASED! +# +# This file must be checked in Version Control Systems. +# +# To customize properties used by the Ant build system use, +# "ant.properties", and override values to adapt the script to your +# project structure. + +# Project target. +target=android-14 diff --git a/FinchFramework/FinchFramework/res/anim/flip.xml b/FinchFramework/res/anim/flip.xml similarity index 100% rename from FinchFramework/FinchFramework/res/anim/flip.xml rename to FinchFramework/res/anim/flip.xml diff --git a/FinchFramework/FinchFramework/res/drawable-hdpi/ic_menu_preferences.png b/FinchFramework/res/drawable-hdpi/ic_menu_preferences.png similarity index 100% rename from FinchFramework/FinchFramework/res/drawable-hdpi/ic_menu_preferences.png rename to FinchFramework/res/drawable-hdpi/ic_menu_preferences.png diff --git a/FinchFramework/FinchFramework/res/drawable-hdpi/icon.png b/FinchFramework/res/drawable-hdpi/icon.png similarity index 100% rename from FinchFramework/FinchFramework/res/drawable-hdpi/icon.png rename to FinchFramework/res/drawable-hdpi/icon.png diff --git a/FinchFramework/FinchFramework/res/drawable-ldpi/icon.png b/FinchFramework/res/drawable-ldpi/icon.png similarity index 100% rename from FinchFramework/FinchFramework/res/drawable-ldpi/icon.png rename to FinchFramework/res/drawable-ldpi/icon.png diff --git a/FinchFramework/FinchFramework/res/drawable-mdpi/ic_menu_preferences.png b/FinchFramework/res/drawable-mdpi/ic_menu_preferences.png similarity index 100% rename from FinchFramework/FinchFramework/res/drawable-mdpi/ic_menu_preferences.png rename to FinchFramework/res/drawable-mdpi/ic_menu_preferences.png diff --git a/FinchFramework/FinchFramework/res/drawable-mdpi/icon.png b/FinchFramework/res/drawable-mdpi/icon.png similarity index 100% rename from FinchFramework/FinchFramework/res/drawable-mdpi/icon.png rename to FinchFramework/res/drawable-mdpi/icon.png diff --git a/FinchFramework/FinchFramework/res/drawable/pine_grosbeak.png b/FinchFramework/res/drawable/pine_grosbeak.png similarity index 100% rename from FinchFramework/FinchFramework/res/drawable/pine_grosbeak.png rename to FinchFramework/res/drawable/pine_grosbeak.png diff --git a/FinchFramework/FinchFramework/res/layout/animate_activity.xml b/FinchFramework/res/layout/animate_activity.xml similarity index 100% rename from FinchFramework/FinchFramework/res/layout/animate_activity.xml rename to FinchFramework/res/layout/animate_activity.xml diff --git a/FinchFramework/FinchFramework/res/layout/bt_console.xml b/FinchFramework/res/layout/bt_console.xml similarity index 100% rename from FinchFramework/FinchFramework/res/layout/bt_console.xml rename to FinchFramework/res/layout/bt_console.xml diff --git a/FinchFramework/FinchFramework/res/layout/checkbox_example.xml b/FinchFramework/res/layout/checkbox_example.xml similarity index 100% rename from FinchFramework/FinchFramework/res/layout/checkbox_example.xml rename to FinchFramework/res/layout/checkbox_example.xml diff --git a/FinchFramework/FinchFramework/res/layout/custom_title.xml b/FinchFramework/res/layout/custom_title.xml similarity index 100% rename from FinchFramework/FinchFramework/res/layout/custom_title.xml rename to FinchFramework/res/layout/custom_title.xml diff --git a/FinchFramework/FinchFramework/res/layout/device_list.xml b/FinchFramework/res/layout/device_list.xml similarity index 100% rename from FinchFramework/FinchFramework/res/layout/device_list.xml rename to FinchFramework/res/layout/device_list.xml diff --git a/FinchFramework/FinchFramework/res/layout/device_name.xml b/FinchFramework/res/layout/device_name.xml similarity index 100% rename from FinchFramework/FinchFramework/res/layout/device_name.xml rename to FinchFramework/res/layout/device_name.xml diff --git a/FinchFramework/FinchFramework/res/layout/example_layout.xml b/FinchFramework/res/layout/example_layout.xml similarity index 100% rename from FinchFramework/FinchFramework/res/layout/example_layout.xml rename to FinchFramework/res/layout/example_layout.xml diff --git a/FinchFramework/FinchFramework/res/layout/main.xml b/FinchFramework/res/layout/main.xml similarity index 100% rename from FinchFramework/FinchFramework/res/layout/main.xml rename to FinchFramework/res/layout/main.xml diff --git a/FinchFramework/FinchFramework/res/layout/message.xml b/FinchFramework/res/layout/message.xml similarity index 100% rename from FinchFramework/FinchFramework/res/layout/message.xml rename to FinchFramework/res/layout/message.xml diff --git a/FinchFramework/FinchFramework/res/layout/video_list_item.xml b/FinchFramework/res/layout/video_list_item.xml similarity index 100% rename from FinchFramework/FinchFramework/res/layout/video_list_item.xml rename to FinchFramework/res/layout/video_list_item.xml diff --git a/FinchFramework/FinchFramework/res/layout/video_query_activity.xml b/FinchFramework/res/layout/video_query_activity.xml similarity index 100% rename from FinchFramework/FinchFramework/res/layout/video_query_activity.xml rename to FinchFramework/res/layout/video_query_activity.xml diff --git a/FinchFramework/FinchFramework/res/menu/bt_console_option_menu.xml b/FinchFramework/res/menu/bt_console_option_menu.xml similarity index 100% rename from FinchFramework/FinchFramework/res/menu/bt_console_option_menu.xml rename to FinchFramework/res/menu/bt_console_option_menu.xml diff --git a/FinchFramework/FinchFramework/res/menu/finch_option_menu.xml b/FinchFramework/res/menu/finch_option_menu.xml similarity index 100% rename from FinchFramework/FinchFramework/res/menu/finch_option_menu.xml rename to FinchFramework/res/menu/finch_option_menu.xml diff --git a/FinchFramework/FinchFramework/res/menu/finchwelcomemenu.xml b/FinchFramework/res/menu/finchwelcomemenu.xml similarity index 100% rename from FinchFramework/FinchFramework/res/menu/finchwelcomemenu.xml rename to FinchFramework/res/menu/finchwelcomemenu.xml diff --git a/FinchFramework/FinchFramework/res/raw/yt_query_json.json b/FinchFramework/res/raw/yt_query_json.json similarity index 100% rename from FinchFramework/FinchFramework/res/raw/yt_query_json.json rename to FinchFramework/res/raw/yt_query_json.json diff --git a/FinchFramework/FinchFramework/res/raw/yt_query_rss.xml b/FinchFramework/res/raw/yt_query_rss.xml similarity index 100% rename from FinchFramework/FinchFramework/res/raw/yt_query_rss.xml rename to FinchFramework/res/raw/yt_query_rss.xml diff --git a/FinchFramework/FinchFramework/res/values/colors.xml b/FinchFramework/res/values/colors.xml similarity index 100% rename from FinchFramework/FinchFramework/res/values/colors.xml rename to FinchFramework/res/values/colors.xml diff --git a/FinchFramework/FinchFramework/res/values/dimens.xml b/FinchFramework/res/values/dimens.xml similarity index 100% rename from FinchFramework/FinchFramework/res/values/dimens.xml rename to FinchFramework/res/values/dimens.xml diff --git a/FinchFramework/FinchFramework/res/values/strings.xml b/FinchFramework/res/values/strings.xml similarity index 100% rename from FinchFramework/FinchFramework/res/values/strings.xml rename to FinchFramework/res/values/strings.xml diff --git a/FinchFramework/FinchFramework/src/animate/AnimateActivity.java b/FinchFramework/src/animate/AnimateActivity.java similarity index 100% rename from FinchFramework/FinchFramework/src/animate/AnimateActivity.java rename to FinchFramework/src/animate/AnimateActivity.java diff --git a/FinchFramework/FinchFramework/src/com/finchframework/bluetooth/BtConsoleActivity.java b/FinchFramework/src/com/finchframework/bluetooth/BtConsoleActivity.java similarity index 100% rename from FinchFramework/FinchFramework/src/com/finchframework/bluetooth/BtConsoleActivity.java rename to FinchFramework/src/com/finchframework/bluetooth/BtConsoleActivity.java diff --git a/FinchFramework/FinchFramework/src/com/finchframework/bluetooth/BtHelperHandler.java b/FinchFramework/src/com/finchframework/bluetooth/BtHelperHandler.java similarity index 100% rename from FinchFramework/FinchFramework/src/com/finchframework/bluetooth/BtHelperHandler.java rename to FinchFramework/src/com/finchframework/bluetooth/BtHelperHandler.java diff --git a/FinchFramework/FinchFramework/src/com/finchframework/bluetooth/BtSPPHelper.java b/FinchFramework/src/com/finchframework/bluetooth/BtSPPHelper.java similarity index 100% rename from FinchFramework/FinchFramework/src/com/finchframework/bluetooth/BtSPPHelper.java rename to FinchFramework/src/com/finchframework/bluetooth/BtSPPHelper.java diff --git a/FinchFramework/FinchFramework/src/com/finchframework/bluetooth/DeviceListActivity.java b/FinchFramework/src/com/finchframework/bluetooth/DeviceListActivity.java similarity index 100% rename from FinchFramework/FinchFramework/src/com/finchframework/bluetooth/DeviceListActivity.java rename to FinchFramework/src/com/finchframework/bluetooth/DeviceListActivity.java diff --git a/FinchFramework/FinchFramework/src/com/finchframework/finch/FinchWelcome.java b/FinchFramework/src/com/finchframework/finch/FinchWelcome.java similarity index 100% rename from FinchFramework/FinchFramework/src/com/finchframework/finch/FinchWelcome.java rename to FinchFramework/src/com/finchframework/finch/FinchWelcome.java diff --git a/FinchFramework/FinchFramework/tools/ant/build.xml b/FinchFramework/tools/ant/build.xml similarity index 100% rename from FinchFramework/FinchFramework/tools/ant/build.xml rename to FinchFramework/tools/ant/build.xml diff --git a/FinchFramework/tools/ide/classpath b/FinchFramework/tools/ide/classpath new file mode 100644 index 0000000..cad5902 --- /dev/null +++ b/FinchFramework/tools/ide/classpath @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/FinchFramework/FinchFramework/tools/ide/eclipse/classpath b/FinchFramework/tools/ide/eclipse/classpath similarity index 100% rename from FinchFramework/FinchFramework/tools/ide/eclipse/classpath rename to FinchFramework/tools/ide/eclipse/classpath diff --git a/FinchFramework/FinchFramework/tools/ide/eclipse/project b/FinchFramework/tools/ide/eclipse/project similarity index 100% rename from FinchFramework/FinchFramework/tools/ide/eclipse/project rename to FinchFramework/tools/ide/eclipse/project diff --git a/FinchFramework/tools/ide/project b/FinchFramework/tools/ide/project new file mode 100644 index 0000000..c3a0869 --- /dev/null +++ b/FinchFramework/tools/ide/project @@ -0,0 +1,33 @@ + + + FinchFramework + + + + + + com.android.ide.eclipse.adt.ResourceManagerBuilder + + + + + com.android.ide.eclipse.adt.PreCompilerBuilder + + + + + org.eclipse.jdt.core.javabuilder + + + + + com.android.ide.eclipse.adt.ApkBuilder + + + + + + com.android.ide.eclipse.adt.AndroidNature + org.eclipse.jdt.core.javanature + + diff --git a/FinchFramework/FinchFrameworkTest/.gitignore b/FinchFrameworkTest/.gitignore similarity index 100% rename from FinchFramework/FinchFrameworkTest/.gitignore rename to FinchFrameworkTest/.gitignore diff --git a/FinchFrameworkTest/AndroidManifest.xml b/FinchFrameworkTest/AndroidManifest.xml new file mode 100644 index 0000000..fb56f27 --- /dev/null +++ b/FinchFrameworkTest/AndroidManifest.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + diff --git a/FinchFrameworkTest/proguard.cfg b/FinchFrameworkTest/proguard.cfg new file mode 100644 index 0000000..b1cdf17 --- /dev/null +++ b/FinchFrameworkTest/proguard.cfg @@ -0,0 +1,40 @@ +-optimizationpasses 5 +-dontusemixedcaseclassnames +-dontskipnonpubliclibraryclasses +-dontpreverify +-verbose +-optimizations !code/simplification/arithmetic,!field/*,!class/merging/* + +-keep public class * extends android.app.Activity +-keep public class * extends android.app.Application +-keep public class * extends android.app.Service +-keep public class * extends android.content.BroadcastReceiver +-keep public class * extends android.content.ContentProvider +-keep public class * extends android.app.backup.BackupAgentHelper +-keep public class * extends android.preference.Preference +-keep public class com.android.vending.licensing.ILicensingService + +-keepclasseswithmembernames class * { + native ; +} + +-keepclasseswithmembers class * { + public (android.content.Context, android.util.AttributeSet); +} + +-keepclasseswithmembers class * { + public (android.content.Context, android.util.AttributeSet, int); +} + +-keepclassmembers class * extends android.app.Activity { + public void *(android.view.View); +} + +-keepclassmembers enum * { + public static **[] values(); + public static ** valueOf(java.lang.String); +} + +-keep class * implements android.os.Parcelable { + public static final android.os.Parcelable$Creator *; +} diff --git a/FinchFrameworkTest/project.properties b/FinchFrameworkTest/project.properties new file mode 100644 index 0000000..730e911 --- /dev/null +++ b/FinchFrameworkTest/project.properties @@ -0,0 +1,11 @@ +# This file is automatically generated by Android Tools. +# Do not modify this file -- YOUR CHANGES WILL BE ERASED! +# +# This file must be checked in Version Control Systems. +# +# To customize properties used by the Ant build system use, +# "ant.properties", and override values to adapt the script to your +# project structure. + +# Project target. +target=android-14 diff --git a/FinchFramework/FinchFrameworkTest/res/drawable-hdpi/icon.png b/FinchFrameworkTest/res/drawable-hdpi/icon.png similarity index 100% rename from FinchFramework/FinchFrameworkTest/res/drawable-hdpi/icon.png rename to FinchFrameworkTest/res/drawable-hdpi/icon.png diff --git a/FinchFramework/FinchFrameworkTest/res/drawable-ldpi/icon.png b/FinchFrameworkTest/res/drawable-ldpi/icon.png similarity index 100% rename from FinchFramework/FinchFrameworkTest/res/drawable-ldpi/icon.png rename to FinchFrameworkTest/res/drawable-ldpi/icon.png diff --git a/FinchFramework/FinchFrameworkTest/res/drawable-mdpi/icon.png b/FinchFrameworkTest/res/drawable-mdpi/icon.png similarity index 100% rename from FinchFramework/FinchFrameworkTest/res/drawable-mdpi/icon.png rename to FinchFrameworkTest/res/drawable-mdpi/icon.png diff --git a/FinchFramework/FinchFrameworkTest/res/layout/main.xml b/FinchFrameworkTest/res/layout/main.xml similarity index 100% rename from FinchFramework/FinchFrameworkTest/res/layout/main.xml rename to FinchFrameworkTest/res/layout/main.xml diff --git a/FinchFramework/FinchFrameworkTest/res/values/strings.xml b/FinchFrameworkTest/res/values/strings.xml similarity index 100% rename from FinchFramework/FinchFrameworkTest/res/values/strings.xml rename to FinchFrameworkTest/res/values/strings.xml diff --git a/FinchFrameworkTest/tools/ide/classpath b/FinchFrameworkTest/tools/ide/classpath new file mode 100644 index 0000000..6c67f84 --- /dev/null +++ b/FinchFrameworkTest/tools/ide/classpath @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/FinchFramework/FinchFrameworkTest/tools/ide/eclipse/classpath b/FinchFrameworkTest/tools/ide/eclipse/classpath similarity index 100% rename from FinchFramework/FinchFrameworkTest/tools/ide/eclipse/classpath rename to FinchFrameworkTest/tools/ide/eclipse/classpath diff --git a/FinchFramework/FinchFrameworkTest/tools/ide/eclipse/project b/FinchFrameworkTest/tools/ide/eclipse/project similarity index 100% rename from FinchFramework/FinchFrameworkTest/tools/ide/eclipse/project rename to FinchFrameworkTest/tools/ide/eclipse/project diff --git a/FinchFrameworkTest/tools/ide/project b/FinchFrameworkTest/tools/ide/project new file mode 100644 index 0000000..5eb54f1 --- /dev/null +++ b/FinchFrameworkTest/tools/ide/project @@ -0,0 +1,34 @@ + + + FinchFrameworkTest + + + FinchFramework + + + + com.android.ide.eclipse.adt.ResourceManagerBuilder + + + + + com.android.ide.eclipse.adt.PreCompilerBuilder + + + + + org.eclipse.jdt.core.javabuilder + + + + + com.android.ide.eclipse.adt.ApkBuilder + + + + + + com.android.ide.eclipse.adt.AndroidNature + org.eclipse.jdt.core.javanature + + diff --git a/FinchLifecycle/build.xml b/FinchLifecycle/build.xml new file mode 100644 index 0000000..3b4fd74 --- /dev/null +++ b/FinchLifecycle/build.xml @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/FinchLifecycle/proguard.cfg b/FinchLifecycle/proguard.cfg index 12dd039..b1cdf17 100644 --- a/FinchLifecycle/proguard.cfg +++ b/FinchLifecycle/proguard.cfg @@ -18,14 +18,18 @@ native ; } --keepclasseswithmembernames class * { +-keepclasseswithmembers class * { public (android.content.Context, android.util.AttributeSet); } --keepclasseswithmembernames class * { +-keepclasseswithmembers class * { public (android.content.Context, android.util.AttributeSet, int); } +-keepclassmembers class * extends android.app.Activity { + public void *(android.view.View); +} + -keepclassmembers enum * { public static **[] values(); public static ** valueOf(java.lang.String); diff --git a/FinchLifecycle/project.properties b/FinchLifecycle/project.properties new file mode 100644 index 0000000..730e911 --- /dev/null +++ b/FinchLifecycle/project.properties @@ -0,0 +1,11 @@ +# This file is automatically generated by Android Tools. +# Do not modify this file -- YOUR CHANGES WILL BE ERASED! +# +# This file must be checked in Version Control Systems. +# +# To customize properties used by the Ant build system use, +# "ant.properties", and override values to adapt the script to your +# project structure. + +# Project target. +target=android-14 diff --git a/FinchLifecycle/tools/ide/classpath b/FinchLifecycle/tools/ide/classpath new file mode 100644 index 0000000..a4763d1 --- /dev/null +++ b/FinchLifecycle/tools/ide/classpath @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/FinchLifecycle/tools/ide/project b/FinchLifecycle/tools/ide/project new file mode 100644 index 0000000..18cc170 --- /dev/null +++ b/FinchLifecycle/tools/ide/project @@ -0,0 +1,33 @@ + + + FinchLifecycle + + + + + + com.android.ide.eclipse.adt.ResourceManagerBuilder + + + + + com.android.ide.eclipse.adt.PreCompilerBuilder + + + + + org.eclipse.jdt.core.javabuilder + + + + + com.android.ide.eclipse.adt.ApkBuilder + + + + + + com.android.ide.eclipse.adt.AndroidNature + org.eclipse.jdt.core.javanature + + diff --git a/FinchLifecycleBackport/build.xml b/FinchLifecycleBackport/build.xml new file mode 100644 index 0000000..3b4fd74 --- /dev/null +++ b/FinchLifecycleBackport/build.xml @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/FinchLifecycleBackport/proguard.cfg b/FinchLifecycleBackport/proguard.cfg index 12dd039..b1cdf17 100644 --- a/FinchLifecycleBackport/proguard.cfg +++ b/FinchLifecycleBackport/proguard.cfg @@ -18,14 +18,18 @@ native ; } --keepclasseswithmembernames class * { +-keepclasseswithmembers class * { public (android.content.Context, android.util.AttributeSet); } --keepclasseswithmembernames class * { +-keepclasseswithmembers class * { public (android.content.Context, android.util.AttributeSet, int); } +-keepclassmembers class * extends android.app.Activity { + public void *(android.view.View); +} + -keepclassmembers enum * { public static **[] values(); public static ** valueOf(java.lang.String); diff --git a/FinchLifecycleBackport/project.properties b/FinchLifecycleBackport/project.properties new file mode 100644 index 0000000..730e911 --- /dev/null +++ b/FinchLifecycleBackport/project.properties @@ -0,0 +1,11 @@ +# This file is automatically generated by Android Tools. +# Do not modify this file -- YOUR CHANGES WILL BE ERASED! +# +# This file must be checked in Version Control Systems. +# +# To customize properties used by the Ant build system use, +# "ant.properties", and override values to adapt the script to your +# project structure. + +# Project target. +target=android-14 diff --git a/FinchLifecycleBackport/tools/ide/classpath b/FinchLifecycleBackport/tools/ide/classpath new file mode 100644 index 0000000..fa18e9d --- /dev/null +++ b/FinchLifecycleBackport/tools/ide/classpath @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/FinchLifecycleBackport/tools/ide/project b/FinchLifecycleBackport/tools/ide/project new file mode 100644 index 0000000..16707f2 --- /dev/null +++ b/FinchLifecycleBackport/tools/ide/project @@ -0,0 +1,33 @@ + + + FinchLifecycleBackport + + + + + + com.android.ide.eclipse.adt.ResourceManagerBuilder + + + + + com.android.ide.eclipse.adt.PreCompilerBuilder + + + + + org.eclipse.jdt.core.javabuilder + + + + + com.android.ide.eclipse.adt.ApkBuilder + + + + + + com.android.ide.eclipse.adt.AndroidNature + org.eclipse.jdt.core.javanature + + diff --git a/FinchVideo/build.xml b/FinchVideo/build.xml new file mode 100644 index 0000000..68008a9 --- /dev/null +++ b/FinchVideo/build.xml @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/FinchVideo/default.properties b/FinchVideo/default.properties deleted file mode 100644 index 154b673..0000000 --- a/FinchVideo/default.properties +++ /dev/null @@ -1,13 +0,0 @@ -# This file is automatically generated by Android Tools. -# Do not modify this file -- YOUR CHANGES WILL BE ERASED! -# -# This file must be checked in Version Control Systems. -# -# To customize properties used by the Ant build system use, -# "build.properties", and override values to adapt the script to your -# project structure. - -# Project target. -target=Google Inc.:Google APIs:9 -android.library.reference.1=../../framework/FinchFramework -android.library=false diff --git a/FinchVideo/local.properties b/FinchVideo/local.properties deleted file mode 100644 index 9370052..0000000 --- a/FinchVideo/local.properties +++ /dev/null @@ -1,10 +0,0 @@ -# This file is automatically generated by Android Tools. -# Do not modify this file -- YOUR CHANGES WILL BE ERASED! -# -# This file must *NOT* be checked in Version Control Systems, -# as it contains information specific to your local configuration. - -# location of the SDK. This is only used by Ant -# For customization when using a Version Control System, please read the -# header note. -sdk.dir=/Applications/Android/android-sdk-mac diff --git a/FinchVideo/proguard.cfg b/FinchVideo/proguard.cfg new file mode 100644 index 0000000..b1cdf17 --- /dev/null +++ b/FinchVideo/proguard.cfg @@ -0,0 +1,40 @@ +-optimizationpasses 5 +-dontusemixedcaseclassnames +-dontskipnonpubliclibraryclasses +-dontpreverify +-verbose +-optimizations !code/simplification/arithmetic,!field/*,!class/merging/* + +-keep public class * extends android.app.Activity +-keep public class * extends android.app.Application +-keep public class * extends android.app.Service +-keep public class * extends android.content.BroadcastReceiver +-keep public class * extends android.content.ContentProvider +-keep public class * extends android.app.backup.BackupAgentHelper +-keep public class * extends android.preference.Preference +-keep public class com.android.vending.licensing.ILicensingService + +-keepclasseswithmembernames class * { + native ; +} + +-keepclasseswithmembers class * { + public (android.content.Context, android.util.AttributeSet); +} + +-keepclasseswithmembers class * { + public (android.content.Context, android.util.AttributeSet, int); +} + +-keepclassmembers class * extends android.app.Activity { + public void *(android.view.View); +} + +-keepclassmembers enum * { + public static **[] values(); + public static ** valueOf(java.lang.String); +} + +-keep class * implements android.os.Parcelable { + public static final android.os.Parcelable$Creator *; +} diff --git a/FinchVideo/project.properties b/FinchVideo/project.properties new file mode 100644 index 0000000..730e911 --- /dev/null +++ b/FinchVideo/project.properties @@ -0,0 +1,11 @@ +# This file is automatically generated by Android Tools. +# Do not modify this file -- YOUR CHANGES WILL BE ERASED! +# +# This file must be checked in Version Control Systems. +# +# To customize properties used by the Ant build system use, +# "ant.properties", and override values to adapt the script to your +# project structure. + +# Project target. +target=android-14 diff --git a/FinchVideo/tools/ide/classpath b/FinchVideo/tools/ide/classpath new file mode 100644 index 0000000..4a94a28 --- /dev/null +++ b/FinchVideo/tools/ide/classpath @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/FinchVideo/tools/ide/project b/FinchVideo/tools/ide/project new file mode 100644 index 0000000..8c82c0d --- /dev/null +++ b/FinchVideo/tools/ide/project @@ -0,0 +1,45 @@ + + + FinchVideo + + + + + + com.android.ide.eclipse.adt.ResourceManagerBuilder + + + + + com.android.ide.eclipse.adt.PreCompilerBuilder + + + + + org.eclipse.jdt.core.javabuilder + + + + + com.android.ide.eclipse.adt.ApkBuilder + + + + + + com.android.ide.eclipse.adt.AndroidNature + org.eclipse.jdt.core.javanature + + + + FinchWelcome_lib-src + 2 + _android_FinchWelcome_5a987fb2/lib-src + + + FinchWelcome_src + 2 + _android_FinchWelcome_5a987fb2/src + + + diff --git a/JSerializable/build.xml b/JSerializable/build.xml new file mode 100644 index 0000000..1d0935e --- /dev/null +++ b/JSerializable/build.xml @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/JSerializable/default.properties b/JSerializable/default.properties deleted file mode 100644 index 088c703..0000000 --- a/JSerializable/default.properties +++ /dev/null @@ -1,11 +0,0 @@ -# This file is automatically generated by Android Tools. -# Do not modify this file -- YOUR CHANGES WILL BE ERASED! -# -# This file must be checked in Version Control Systems. -# -# To customize properties used by the Ant build system use, -# "build.properties", and override values to adapt the script to your -# project structure. - -# Project target. -target=Google Inc.:Google APIs:9 diff --git a/JSerializable/proguard.cfg b/JSerializable/proguard.cfg new file mode 100644 index 0000000..b1cdf17 --- /dev/null +++ b/JSerializable/proguard.cfg @@ -0,0 +1,40 @@ +-optimizationpasses 5 +-dontusemixedcaseclassnames +-dontskipnonpubliclibraryclasses +-dontpreverify +-verbose +-optimizations !code/simplification/arithmetic,!field/*,!class/merging/* + +-keep public class * extends android.app.Activity +-keep public class * extends android.app.Application +-keep public class * extends android.app.Service +-keep public class * extends android.content.BroadcastReceiver +-keep public class * extends android.content.ContentProvider +-keep public class * extends android.app.backup.BackupAgentHelper +-keep public class * extends android.preference.Preference +-keep public class com.android.vending.licensing.ILicensingService + +-keepclasseswithmembernames class * { + native ; +} + +-keepclasseswithmembers class * { + public (android.content.Context, android.util.AttributeSet); +} + +-keepclasseswithmembers class * { + public (android.content.Context, android.util.AttributeSet, int); +} + +-keepclassmembers class * extends android.app.Activity { + public void *(android.view.View); +} + +-keepclassmembers enum * { + public static **[] values(); + public static ** valueOf(java.lang.String); +} + +-keep class * implements android.os.Parcelable { + public static final android.os.Parcelable$Creator *; +} diff --git a/JSerializable/project.properties b/JSerializable/project.properties new file mode 100644 index 0000000..730e911 --- /dev/null +++ b/JSerializable/project.properties @@ -0,0 +1,11 @@ +# This file is automatically generated by Android Tools. +# Do not modify this file -- YOUR CHANGES WILL BE ERASED! +# +# This file must be checked in Version Control Systems. +# +# To customize properties used by the Ant build system use, +# "ant.properties", and override values to adapt the script to your +# project structure. + +# Project target. +target=android-14 diff --git a/JSerializable/tools/ide/classpath b/JSerializable/tools/ide/classpath new file mode 100644 index 0000000..6c635c0 --- /dev/null +++ b/JSerializable/tools/ide/classpath @@ -0,0 +1,7 @@ + + + + + + + diff --git a/JSerializable/tools/ide/project b/JSerializable/tools/ide/project new file mode 100644 index 0000000..924d110 --- /dev/null +++ b/JSerializable/tools/ide/project @@ -0,0 +1,33 @@ + + + JSerializable + + + + + + com.android.ide.eclipse.adt.ResourceManagerBuilder + + + + + com.android.ide.eclipse.adt.PreCompilerBuilder + + + + + org.eclipse.jdt.core.javabuilder + + + + + com.android.ide.eclipse.adt.ApkBuilder + + + + + + com.android.ide.eclipse.adt.AndroidNature + org.eclipse.jdt.core.javanature + + diff --git a/MicroJobs/build.xml b/MicroJobs/build.xml new file mode 100644 index 0000000..865bec1 --- /dev/null +++ b/MicroJobs/build.xml @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/MicroJobs/default.properties b/MicroJobs/default.properties deleted file mode 100644 index 088c703..0000000 --- a/MicroJobs/default.properties +++ /dev/null @@ -1,11 +0,0 @@ -# This file is automatically generated by Android Tools. -# Do not modify this file -- YOUR CHANGES WILL BE ERASED! -# -# This file must be checked in Version Control Systems. -# -# To customize properties used by the Ant build system use, -# "build.properties", and override values to adapt the script to your -# project structure. - -# Project target. -target=Google Inc.:Google APIs:9 diff --git a/MicroJobs/proguard.cfg b/MicroJobs/proguard.cfg new file mode 100644 index 0000000..b1cdf17 --- /dev/null +++ b/MicroJobs/proguard.cfg @@ -0,0 +1,40 @@ +-optimizationpasses 5 +-dontusemixedcaseclassnames +-dontskipnonpubliclibraryclasses +-dontpreverify +-verbose +-optimizations !code/simplification/arithmetic,!field/*,!class/merging/* + +-keep public class * extends android.app.Activity +-keep public class * extends android.app.Application +-keep public class * extends android.app.Service +-keep public class * extends android.content.BroadcastReceiver +-keep public class * extends android.content.ContentProvider +-keep public class * extends android.app.backup.BackupAgentHelper +-keep public class * extends android.preference.Preference +-keep public class com.android.vending.licensing.ILicensingService + +-keepclasseswithmembernames class * { + native ; +} + +-keepclasseswithmembers class * { + public (android.content.Context, android.util.AttributeSet); +} + +-keepclasseswithmembers class * { + public (android.content.Context, android.util.AttributeSet, int); +} + +-keepclassmembers class * extends android.app.Activity { + public void *(android.view.View); +} + +-keepclassmembers enum * { + public static **[] values(); + public static ** valueOf(java.lang.String); +} + +-keep class * implements android.os.Parcelable { + public static final android.os.Parcelable$Creator *; +} diff --git a/MicroJobs/project.properties b/MicroJobs/project.properties new file mode 100644 index 0000000..4bcb2f5 --- /dev/null +++ b/MicroJobs/project.properties @@ -0,0 +1,11 @@ +# This file is automatically generated by Android Tools. +# Do not modify this file -- YOUR CHANGES WILL BE ERASED! +# +# This file must be checked in Version Control Systems. +# +# To customize properties used by the Ant build system use, +# "ant.properties", and override values to adapt the script to your +# project structure. + +# Project target. +target=Google Inc.:Google APIs:14 diff --git a/MicroJobs/tools/ide/classpath b/MicroJobs/tools/ide/classpath new file mode 100644 index 0000000..6c635c0 --- /dev/null +++ b/MicroJobs/tools/ide/classpath @@ -0,0 +1,7 @@ + + + + + + + diff --git a/MicroJobs/tools/ide/project b/MicroJobs/tools/ide/project new file mode 100644 index 0000000..dfb5725 --- /dev/null +++ b/MicroJobs/tools/ide/project @@ -0,0 +1,33 @@ + + + MicroJobs + + + + + + com.android.ide.eclipse.adt.ResourceManagerBuilder + + + + + com.android.ide.eclipse.adt.PreCompilerBuilder + + + + + org.eclipse.jdt.core.javabuilder + + + + + com.android.ide.eclipse.adt.ApkBuilder + + + + + + com.android.ide.eclipse.adt.AndroidNature + org.eclipse.jdt.core.javanature + + diff --git a/NDKDemo/build.xml b/NDKDemo/build.xml new file mode 100644 index 0000000..e07f116 --- /dev/null +++ b/NDKDemo/build.xml @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/NDKDemo/proguard.cfg b/NDKDemo/proguard.cfg index 8ad7d33..b1cdf17 100644 --- a/NDKDemo/proguard.cfg +++ b/NDKDemo/proguard.cfg @@ -10,20 +10,26 @@ -keep public class * extends android.app.Service -keep public class * extends android.content.BroadcastReceiver -keep public class * extends android.content.ContentProvider +-keep public class * extends android.app.backup.BackupAgentHelper +-keep public class * extends android.preference.Preference -keep public class com.android.vending.licensing.ILicensingService -keepclasseswithmembernames class * { native ; } --keepclasseswithmembernames class * { +-keepclasseswithmembers class * { public (android.content.Context, android.util.AttributeSet); } --keepclasseswithmembernames class * { +-keepclasseswithmembers class * { public (android.content.Context, android.util.AttributeSet, int); } +-keepclassmembers class * extends android.app.Activity { + public void *(android.view.View); +} + -keepclassmembers enum * { public static **[] values(); public static ** valueOf(java.lang.String); diff --git a/NDKDemo/project.properties b/NDKDemo/project.properties new file mode 100644 index 0000000..730e911 --- /dev/null +++ b/NDKDemo/project.properties @@ -0,0 +1,11 @@ +# This file is automatically generated by Android Tools. +# Do not modify this file -- YOUR CHANGES WILL BE ERASED! +# +# This file must be checked in Version Control Systems. +# +# To customize properties used by the Ant build system use, +# "ant.properties", and override values to adapt the script to your +# project structure. + +# Project target. +target=android-14 diff --git a/NDKDemo/tools/ide/classpath b/NDKDemo/tools/ide/classpath new file mode 100644 index 0000000..6c635c0 --- /dev/null +++ b/NDKDemo/tools/ide/classpath @@ -0,0 +1,7 @@ + + + + + + + diff --git a/NDKDemo/tools/ide/project b/NDKDemo/tools/ide/project new file mode 100644 index 0000000..4498239 --- /dev/null +++ b/NDKDemo/tools/ide/project @@ -0,0 +1,33 @@ + + + NDKDemo + + + + + + com.android.ide.eclipse.adt.ResourceManagerBuilder + + + + + com.android.ide.eclipse.adt.PreCompilerBuilder + + + + + org.eclipse.jdt.core.javabuilder + + + + + com.android.ide.eclipse.adt.ApkBuilder + + + + + + com.android.ide.eclipse.adt.AndroidNature + org.eclipse.jdt.core.javanature + + diff --git a/README.txt b/README.txt index 4b4846e..082ab48 100644 --- a/README.txt +++ b/README.txt @@ -22,6 +22,3 @@ Start eclipse and use File > Import > "Existing project into workspace" Comments are welcome! Send problems and comments to programmingandroidexamples at callmeike dot net. -OpenMobile (http://openmobileww.com/) is hiring! - - diff --git a/SensorDemos/build.xml b/SensorDemos/build.xml new file mode 100644 index 0000000..c11fcf0 --- /dev/null +++ b/SensorDemos/build.xml @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SensorDemos/default.properties b/SensorDemos/default.properties deleted file mode 100644 index fd1cedd..0000000 --- a/SensorDemos/default.properties +++ /dev/null @@ -1,11 +0,0 @@ -# This file is automatically generated by Android Tools. -# Do not modify this file -- YOUR CHANGES WILL BE ERASED! -# -# This file must be checked in Version Control Systems. -# -# To customize properties used by the Ant build system use, -# "build.properties", and override values to adapt the script to your -# project structure. - -# Project target. -target=Google Inc.:Google APIs:10 diff --git a/SensorDemos/proguard.cfg b/SensorDemos/proguard.cfg index 8ad7d33..b1cdf17 100644 --- a/SensorDemos/proguard.cfg +++ b/SensorDemos/proguard.cfg @@ -10,20 +10,26 @@ -keep public class * extends android.app.Service -keep public class * extends android.content.BroadcastReceiver -keep public class * extends android.content.ContentProvider +-keep public class * extends android.app.backup.BackupAgentHelper +-keep public class * extends android.preference.Preference -keep public class com.android.vending.licensing.ILicensingService -keepclasseswithmembernames class * { native ; } --keepclasseswithmembernames class * { +-keepclasseswithmembers class * { public (android.content.Context, android.util.AttributeSet); } --keepclasseswithmembernames class * { +-keepclasseswithmembers class * { public (android.content.Context, android.util.AttributeSet, int); } +-keepclassmembers class * extends android.app.Activity { + public void *(android.view.View); +} + -keepclassmembers enum * { public static **[] values(); public static ** valueOf(java.lang.String); diff --git a/SensorDemos/project.properties b/SensorDemos/project.properties new file mode 100644 index 0000000..730e911 --- /dev/null +++ b/SensorDemos/project.properties @@ -0,0 +1,11 @@ +# This file is automatically generated by Android Tools. +# Do not modify this file -- YOUR CHANGES WILL BE ERASED! +# +# This file must be checked in Version Control Systems. +# +# To customize properties used by the Ant build system use, +# "ant.properties", and override values to adapt the script to your +# project structure. + +# Project target. +target=android-14 diff --git a/SensorDemos/tools/ide/classpath b/SensorDemos/tools/ide/classpath new file mode 100644 index 0000000..6c635c0 --- /dev/null +++ b/SensorDemos/tools/ide/classpath @@ -0,0 +1,7 @@ + + + + + + + diff --git a/SensorDemos/tools/ide/project b/SensorDemos/tools/ide/project new file mode 100644 index 0000000..7e6e3a3 --- /dev/null +++ b/SensorDemos/tools/ide/project @@ -0,0 +1,33 @@ + + + SensorDemos + + + + + + com.android.ide.eclipse.adt.ResourceManagerBuilder + + + + + com.android.ide.eclipse.adt.PreCompilerBuilder + + + + + org.eclipse.jdt.core.javabuilder + + + + + com.android.ide.eclipse.adt.ApkBuilder + + + + + + com.android.ide.eclipse.adt.AndroidNature + org.eclipse.jdt.core.javanature + + diff --git a/SharedListTask/default.properties b/SharedListTask/default.properties deleted file mode 100644 index bf5e7c2..0000000 --- a/SharedListTask/default.properties +++ /dev/null @@ -1,11 +0,0 @@ -# This file is automatically generated by Android Tools. -# Do not modify this file -- YOUR CHANGES WILL BE ERASED! -# -# This file must be checked in Version Control Systems. -# -# To customize properties used by the Ant build system use, -# "build.properties", and override values to adapt the script to your -# project structure. - -# Project target. -target=Google Inc.:Google APIs:8 diff --git a/SharedListTask/tools/ide/classpath b/SharedListTask/tools/ide/classpath new file mode 100644 index 0000000..a8dfb7a --- /dev/null +++ b/SharedListTask/tools/ide/classpath @@ -0,0 +1,6 @@ + + + + + + diff --git a/SharedListTask/tools/ide/project b/SharedListTask/tools/ide/project new file mode 100644 index 0000000..92c64f0 --- /dev/null +++ b/SharedListTask/tools/ide/project @@ -0,0 +1,17 @@ + + + SharedListTask + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/SimpleFragment/build.xml b/SimpleFragment/build.xml new file mode 100644 index 0000000..9963fdb --- /dev/null +++ b/SimpleFragment/build.xml @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SimpleFragment/default.properties b/SimpleFragment/default.properties deleted file mode 100644 index 728f51f..0000000 --- a/SimpleFragment/default.properties +++ /dev/null @@ -1,11 +0,0 @@ -# This file is automatically generated by Android Tools. -# Do not modify this file -- YOUR CHANGES WILL BE ERASED! -# -# This file must be checked in Version Control Systems. -# -# To customize properties used by the Ant build system use, -# "build.properties", and override values to adapt the script to your -# project structure. - -# Project target. -target=Google Inc.:Google APIs:11 diff --git a/SimpleFragment/proguard.cfg b/SimpleFragment/proguard.cfg index 12dd039..b1cdf17 100644 --- a/SimpleFragment/proguard.cfg +++ b/SimpleFragment/proguard.cfg @@ -18,14 +18,18 @@ native ; } --keepclasseswithmembernames class * { +-keepclasseswithmembers class * { public (android.content.Context, android.util.AttributeSet); } --keepclasseswithmembernames class * { +-keepclasseswithmembers class * { public (android.content.Context, android.util.AttributeSet, int); } +-keepclassmembers class * extends android.app.Activity { + public void *(android.view.View); +} + -keepclassmembers enum * { public static **[] values(); public static ** valueOf(java.lang.String); diff --git a/SimpleFragment/project.properties b/SimpleFragment/project.properties new file mode 100644 index 0000000..730e911 --- /dev/null +++ b/SimpleFragment/project.properties @@ -0,0 +1,11 @@ +# This file is automatically generated by Android Tools. +# Do not modify this file -- YOUR CHANGES WILL BE ERASED! +# +# This file must be checked in Version Control Systems. +# +# To customize properties used by the Ant build system use, +# "ant.properties", and override values to adapt the script to your +# project structure. + +# Project target. +target=android-14 diff --git a/SimpleFragment/tools/ide/classpath b/SimpleFragment/tools/ide/classpath new file mode 100644 index 0000000..6c635c0 --- /dev/null +++ b/SimpleFragment/tools/ide/classpath @@ -0,0 +1,7 @@ + + + + + + + diff --git a/SimpleFragment/tools/ide/project b/SimpleFragment/tools/ide/project new file mode 100644 index 0000000..cd3c3e2 --- /dev/null +++ b/SimpleFragment/tools/ide/project @@ -0,0 +1,33 @@ + + + SimpleFragment + + + + + + com.android.ide.eclipse.adt.ResourceManagerBuilder + + + + + com.android.ide.eclipse.adt.PreCompilerBuilder + + + + + org.eclipse.jdt.core.javabuilder + + + + + com.android.ide.eclipse.adt.ApkBuilder + + + + + + com.android.ide.eclipse.adt.AndroidNature + org.eclipse.jdt.core.javanature + + diff --git a/TestApp/build.xml b/TestApp/build.xml new file mode 100644 index 0000000..9eb6a34 --- /dev/null +++ b/TestApp/build.xml @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/TestApp/default.properties b/TestApp/default.properties deleted file mode 100644 index 088c703..0000000 --- a/TestApp/default.properties +++ /dev/null @@ -1,11 +0,0 @@ -# This file is automatically generated by Android Tools. -# Do not modify this file -- YOUR CHANGES WILL BE ERASED! -# -# This file must be checked in Version Control Systems. -# -# To customize properties used by the Ant build system use, -# "build.properties", and override values to adapt the script to your -# project structure. - -# Project target. -target=Google Inc.:Google APIs:9 diff --git a/TestApp/proguard.cfg b/TestApp/proguard.cfg new file mode 100644 index 0000000..b1cdf17 --- /dev/null +++ b/TestApp/proguard.cfg @@ -0,0 +1,40 @@ +-optimizationpasses 5 +-dontusemixedcaseclassnames +-dontskipnonpubliclibraryclasses +-dontpreverify +-verbose +-optimizations !code/simplification/arithmetic,!field/*,!class/merging/* + +-keep public class * extends android.app.Activity +-keep public class * extends android.app.Application +-keep public class * extends android.app.Service +-keep public class * extends android.content.BroadcastReceiver +-keep public class * extends android.content.ContentProvider +-keep public class * extends android.app.backup.BackupAgentHelper +-keep public class * extends android.preference.Preference +-keep public class com.android.vending.licensing.ILicensingService + +-keepclasseswithmembernames class * { + native ; +} + +-keepclasseswithmembers class * { + public (android.content.Context, android.util.AttributeSet); +} + +-keepclasseswithmembers class * { + public (android.content.Context, android.util.AttributeSet, int); +} + +-keepclassmembers class * extends android.app.Activity { + public void *(android.view.View); +} + +-keepclassmembers enum * { + public static **[] values(); + public static ** valueOf(java.lang.String); +} + +-keep class * implements android.os.Parcelable { + public static final android.os.Parcelable$Creator *; +} diff --git a/TestApp/project.properties b/TestApp/project.properties new file mode 100644 index 0000000..730e911 --- /dev/null +++ b/TestApp/project.properties @@ -0,0 +1,11 @@ +# This file is automatically generated by Android Tools. +# Do not modify this file -- YOUR CHANGES WILL BE ERASED! +# +# This file must be checked in Version Control Systems. +# +# To customize properties used by the Ant build system use, +# "ant.properties", and override values to adapt the script to your +# project structure. + +# Project target. +target=android-14 diff --git a/TestApp/tools/ide/classpath b/TestApp/tools/ide/classpath new file mode 100644 index 0000000..1b4b1ee --- /dev/null +++ b/TestApp/tools/ide/classpath @@ -0,0 +1,7 @@ + + + + + + + diff --git a/TestApp/tools/ide/project b/TestApp/tools/ide/project new file mode 100644 index 0000000..5e489d2 --- /dev/null +++ b/TestApp/tools/ide/project @@ -0,0 +1,33 @@ + + + TestActivity + + + + + + com.android.ide.eclipse.adt.ResourceManagerBuilder + + + + + com.android.ide.eclipse.adt.PreCompilerBuilder + + + + + org.eclipse.jdt.core.javabuilder + + + + + com.android.ide.eclipse.adt.ApkBuilder + + + + + + com.android.ide.eclipse.adt.AndroidNature + org.eclipse.jdt.core.javanature + + From 2d6d00dbb277db1dc79d750ff03c5682f5638393 Mon Sep 17 00:00:00 2001 From: "G. Blake Meike" Date: Sat, 7 Jan 2012 23:59:46 -0800 Subject: [PATCH 04/53] Rename complete. No testing. --- AIDLDemo/AndroidManifest.xml | 8 +- .../demo/android/ch06/aidl/service/Path.aidl | 3 - .../{ch06 => pa}/aidl/client/AIDLDemo.java | 8 +- .../aidl/parcelables/ParcelableList.java | 2 +- .../aidl/parcelables/SimpleParcelable.java | 2 +- .../demo/android/pa/aidl/service/Path.aidl | 3 + .../{ch06 => pa}/aidl/service/Path.java | 2 +- .../aidl/service/PathService.aidl | 2 +- .../{ch06 => pa}/aidl/service/Point.java | 2 +- .../aidl/service/SimplePathService.java | 4 +- AIDLDemo/{ => tools/ant}/build.xml | 0 AndroidUIDemo/AndroidManifest.xml | 4 +- .../android/{ch07 => pa/uidemo}/TouchMe.java | 8 +- .../{ch07 => pa/uidemo}/model/Dot.java | 2 +- .../{ch07 => pa/uidemo}/model/Dots.java | 2 +- .../{ch07 => pa/uidemo}/view/DotView.java | 6 +- AndroidUIDemo/{ => tools/ant}/build.xml | 0 AndroidViewDemo/AndroidManifest.xml | 4 +- .../{ch09 => pa/viewdemo}/TransformIt.java | 14 ++-- .../drawable/HelloAndroidTextDrawable.java | 2 +- .../efx/RotationTransitionAnimation.java | 2 +- .../viewdemo}/widget/EffectsWidget.java | 4 +- .../viewdemo}/widget/GLDemoWidget.java | 4 +- .../widget/TransformedViewWidget.java | 2 +- AndroidViewDemo/{ => tools/ant}/build.xml | 0 AsyncTaskDemo/AndroidManifest.xml | 4 +- .../{ch06 => pa/asynctask}/AsyncTaskDemo.java | 11 ++- .../asynctask}/AsyncTaskDemoWithProgress.java | 6 +- .../asynctask}/AsyncTaskSample.java | 2 +- .../{ch06 => pa/asynctask}/game/Game.java | 2 +- .../{ch06 => pa/asynctask}/game/MockGame.java | 2 +- .../asynctask}/game/PersistentModel.java | 2 +- AsyncTaskDemo/{ => tools/ant}/build.xml | 0 AudioPlayer/AndroidManifest.xml | 10 +-- .../pa/audioplayer}/AudioPlayer.java | 73 ++++++++--------- .../audioplayer}/AudioPlayerWAudioTrack.java | 56 ++++++------- .../AudioPlayerWMediaController.java | 34 ++++---- .../pa/audioplayer}/AudioRecorder.java | 44 +++++------ .../audioplayer}/AudioRecorderViaIntent.java | 2 +- .../AudioRecorderWAudioRecord.java | 56 ++++++------- .../pa/audioplayer}/MultiMedia.java | 54 ++++++------- .../pa/audioplayer}/VideoPlayer.java | 16 ++-- .../pa/audioplayer}/VideoRecorder.java | 42 +++++----- .../audioplayer}/VideoRecorderViaIntent.java | 2 +- AudioPlayer/{ => tools/ant}/build.xml | 0 ClientDemo/AndroidManifest.xml | 6 +- ClientDemo/res/xml/authenticator.xml | 2 +- ClientDemo/res/xml/contacts.xml | 2 +- ClientDemo/res/xml/syncadapter.xml | 2 +- .../client}/account/AccountActivity.java | 37 ++++----- .../client}/account/AccountAddActivity.java | 38 ++++----- .../client}/sync/LoginActivity.java | 39 +++++---- .../client}/sync/NetworkUtil.java | 2 +- .../clientserver/client}/sync/Settings.java | 20 ++--- .../sync/authsync/AuthenticationService.java | 2 +- .../client}/sync/authsync/Authenticator.java | 14 ++-- .../client}/sync/authsync/SyncAdapter.java | 54 ++++++------- .../client}/sync/authsync/SyncService.java | 2 +- .../client}/sync/dataobjects/Change.java | 2 +- .../client}/sync/dataobjects/ListFriends.java | 2 +- .../client}/sync/dataobjects/User.java | 2 +- ClientDemo/{ => tools/ant}/build.xml | 0 ContactViewer/AndroidManifest.xml | 5 +- ContactViewer/project.properties | 2 +- ContactViewer/res/layout-port/main.xml | 2 +- ContactViewer/res/layout-small/main.xml | 2 +- ContactViewer/res/layout-xlarge-port/main.xml | 2 +- ContactViewer/res/layout-xlarge/main.xml | 2 +- ContactViewer/res/layout/main.xml | 2 +- .../contactviewer/ContactDetailActivity.java | 2 +- .../contactviewer/ContactDetailFragment.java | 2 +- .../contactviewer/ContactDetails.java | 2 +- .../contactviewer/ContactDetailsLoader.java | 2 +- .../{ => pa}/contactviewer/ContactViewer.java | 2 +- .../contactviewer/ContactsCursorAdapter.java | 2 +- .../contactviewer/ContactsFragment.java | 2 +- ContactViewer/{ => tools/ant}/build.xml | 0 .../pa/clientserver}/server/Config.java | 4 +- .../pa/clientserver}/server/MainServer.java | 2 +- .../pa/clientserver}/server/ServerStatic.java | 2 +- .../pa/clientserver}/server/ServletUtil.java | 4 +- .../clientserver}/server/data/UsersData.java | 4 +- .../server}/dataobjects/Change.java | 2 +- .../server}/dataobjects/ListFriends.java | 4 +- .../server}/dataobjects/User.java | 2 +- .../server/servlet/AddFriendServlet.java | 6 +- .../server/servlet/AddUserServlet.java | 6 +- .../server/servlet/BaseServlet.java | 4 +- .../server/servlet/DeleteFriendServlet.java | 6 +- .../server/servlet/GetFriendsServlet.java | 8 +- .../server/servlet/ISHttpServletType.java | 2 +- .../server/servlet/LoginServlet.java | 6 +- DemoServer/tools/runserver.sh | 2 +- FillListTask/default.properties | 11 --- .../filllisttask/FillListTask.java | 2 +- FinchFramework/{build.xml => tools/ant} | 0 FinchFramework/tools/ant/build.xml | 33 -------- FinchFrameworkTest/AndroidManifest.xml | 2 +- FinchLifecycle/AndroidManifest.xml | 4 +- .../pa}/finchlifecycle/FinchApplication.java | 2 +- .../pa}/finchlifecycle/FinchLifecycle.java | 7 +- .../pa}/finchlifecycle/TestFragment.java | 16 ++-- FinchLifecycle/{ => tools/ant}/build.xml | 0 FinchLifecycleBackport/AndroidManifest.xml | 4 +- FinchLifecycleBackport/project.properties | 2 +- FinchLifecycleBackport/res/layout/main.xml | 2 +- .../FinchApplication.java | 2 +- .../FinchLifecycle.java | 4 +- .../finchlifecyclebackport/TestFragment.java | 16 ++-- .../{ => tools/ant}/build.xml | 0 FinchVideo/AndroidManifest.xml | 6 +- FinchVideo/build.xml | 79 ------------------- .../pa/finchvideo/FinchVideoActivity.java | 4 +- .../android/pa/finchvideo/FinchVideoDemo.java | 5 ++ .../finchvideo/SimpleFinchVideoActivity.java | 4 +- .../pa/finchvideo/provider/FinchVideo.java | 2 +- .../provider/FinchVideoContentProvider.java | 2 +- .../SimpleFinchVideoContentProvider.java | 2 +- .../finchvideo/provider/YouTubeHandler.java | 9 ++- .../com/oreilly/demo/pa/finchvideo/Ch12.java | 5 -- FinchVideo/tools/ant/build.xml | 25 +++--- JSerializable/AndroidManifest.xml | 4 +- .../{ch06 => pa/serialize}/JSerialize.java | 4 +- JSerializable/{ => tools/ant}/build.xml | 0 MicroJobs/AndroidManifest.xml | 14 ++-- MicroJobs/build.xml | 79 ------------------- .../ch10 => android/pa/microjobs}/AddJob.java | 4 +- .../pa/microjobs}/EditJob.java | 4 +- .../pa/microjobs}/MicroJobs.java | 3 +- .../pa/microjobs}/MicroJobsDatabase.java | 4 +- .../pa/microjobs}/MicroJobsDetail.java | 5 +- .../pa/microjobs}/MicroJobsEmpDetail.java | 5 +- .../pa/microjobs}/MicroJobsList.java | 5 +- MicroJobs/tools/ant/build.xml | 25 +++--- NDKDemo/AndroidManifest.xml | 2 +- NDKDemo/jni/sample.c | 4 +- .../ch18 => android/pa/ndkdemo}/NDKApp.java | 14 ++-- .../SampleActivityWithNativeMethods.java | 32 ++++---- NDKDemo/{ => tools/ant}/build.xml | 0 SensorDemos/AndroidManifest.xml | 2 +- .../pa/sensordemo}/Accessibility.java | 2 +- .../pa/sensordemo}/GestureAdd.java | 18 ++--- .../pa/sensordemo}/GestureView.java | 14 ++-- .../pa/sensordemo}/MainActivity.java | 70 ++++++++-------- .../ch16 => android/pa/sensordemo}/NFC.java | 6 +- .../pa/sensordemo}/NFC233.java | 28 +++---- .../pa/sensordemo}/SensorAccel.java | 24 +++--- .../pa/sensordemo}/SensorGravity.java | 26 +++--- .../pa/sensordemo}/SensorGyro.java | 34 ++++---- .../pa/sensordemo}/SensorLight.java | 20 ++--- .../sensordemo}/SensorLinearAcceleration.java | 26 +++--- .../pa/sensordemo}/SensorMagnetic.java | 26 +++--- .../pa/sensordemo}/SensorPressure.java | 22 +++--- .../pa/sensordemo}/SensorProximity.java | 22 +++--- .../pa/sensordemo}/SensorRotationVector.java | 26 +++--- .../pa/sensordemo}/SensorTemp.java | 22 +++--- SensorDemos/{ => tools/ant}/build.xml | 0 .../sharedlisttask/SharedListTask.java | 2 +- SimpleFragment/AndroidManifest.xml | 4 +- SimpleFragment/res/layout/main.xml | 2 +- .../{ch08 => pa}/simplefragment/DateTime.java | 16 ++-- .../simplefragment/SimpleFragment.java | 6 +- SimpleFragment/{ => tools/ant}/build.xml | 0 TestApp/AndroidManifest.xml | 13 ++- .../pa}/testapp/TestActivity.java | 3 +- .../pa}/testapp/TestBroadcastReceiver.java | 2 +- .../pa}/testapp/TestProvider.java | 2 +- .../pa}/testapp/TestService.java | 2 +- TestApp/{ => tools/ant}/build.xml | 0 169 files changed, 747 insertions(+), 980 deletions(-) delete mode 100644 AIDLDemo/src/com/oreilly/demo/android/ch06/aidl/service/Path.aidl rename AIDLDemo/src/com/oreilly/demo/android/{ch06 => pa}/aidl/client/AIDLDemo.java (92%) rename AIDLDemo/src/com/oreilly/demo/android/{ch06 => pa}/aidl/parcelables/ParcelableList.java (96%) rename AIDLDemo/src/com/oreilly/demo/android/{ch06 => pa}/aidl/parcelables/SimpleParcelable.java (97%) create mode 100644 AIDLDemo/src/com/oreilly/demo/android/pa/aidl/service/Path.aidl rename AIDLDemo/src/com/oreilly/demo/android/{ch06 => pa}/aidl/service/Path.java (97%) rename AIDLDemo/src/com/oreilly/demo/android/{ch06 => pa}/aidl/service/PathService.aidl (74%) rename AIDLDemo/src/com/oreilly/demo/android/{ch06 => pa}/aidl/service/Point.java (94%) rename AIDLDemo/src/com/oreilly/demo/android/{ch06 => pa}/aidl/service/SimplePathService.java (93%) rename AIDLDemo/{ => tools/ant}/build.xml (100%) rename AndroidUIDemo/src/com/oreilly/demo/android/{ch07 => pa/uidemo}/TouchMe.java (97%) rename AndroidUIDemo/src/com/oreilly/demo/android/{ch07 => pa/uidemo}/model/Dot.java (94%) rename AndroidUIDemo/src/com/oreilly/demo/android/{ch07 => pa/uidemo}/model/Dots.java (96%) rename AndroidUIDemo/src/com/oreilly/demo/android/{ch07 => pa/uidemo}/view/DotView.java (91%) rename AndroidUIDemo/{ => tools/ant}/build.xml (100%) rename AndroidViewDemo/src/com/oreilly/demo/android/{ch09 => pa/viewdemo}/TransformIt.java (93%) rename AndroidViewDemo/src/com/oreilly/demo/android/{ch09 => pa/viewdemo}/drawable/HelloAndroidTextDrawable.java (96%) rename AndroidViewDemo/src/com/oreilly/demo/android/{ch09 => pa/viewdemo}/efx/RotationTransitionAnimation.java (98%) rename AndroidViewDemo/src/com/oreilly/demo/android/{ch09 => pa/viewdemo}/widget/EffectsWidget.java (94%) rename AndroidViewDemo/src/com/oreilly/demo/android/{ch09 => pa/viewdemo}/widget/GLDemoWidget.java (98%) rename AndroidViewDemo/src/com/oreilly/demo/android/{ch09 => pa/viewdemo}/widget/TransformedViewWidget.java (97%) rename AndroidViewDemo/{ => tools/ant}/build.xml (100%) rename AsyncTaskDemo/src/com/oreilly/demo/android/{ch06 => pa/asynctask}/AsyncTaskDemo.java (95%) rename AsyncTaskDemo/src/com/oreilly/demo/android/{ch06 => pa/asynctask}/AsyncTaskDemoWithProgress.java (95%) rename AsyncTaskDemo/src/com/oreilly/demo/android/{ch06 => pa/asynctask}/AsyncTaskSample.java (98%) rename AsyncTaskDemo/src/com/oreilly/demo/android/{ch06 => pa/asynctask}/game/Game.java (96%) rename AsyncTaskDemo/src/com/oreilly/demo/android/{ch06 => pa/asynctask}/game/MockGame.java (94%) rename AsyncTaskDemo/src/com/oreilly/demo/android/{ch06 => pa/asynctask}/game/PersistentModel.java (91%) rename AsyncTaskDemo/{ => tools/ant}/build.xml (100%) rename AudioPlayer/src/com/oreilly/demo/{pa/ch14 => android/pa/audioplayer}/AudioPlayer.java (94%) rename AudioPlayer/src/com/oreilly/demo/{pa/ch14 => android/pa/audioplayer}/AudioPlayerWAudioTrack.java (94%) rename AudioPlayer/src/com/oreilly/demo/{pa/ch14 => android/pa/audioplayer}/AudioPlayerWMediaController.java (96%) rename AudioPlayer/src/com/oreilly/demo/{pa/ch14 => android/pa/audioplayer}/AudioRecorder.java (97%) rename AudioPlayer/src/com/oreilly/demo/{pa/ch14 => android/pa/audioplayer}/AudioRecorderViaIntent.java (95%) rename AudioPlayer/src/com/oreilly/demo/{pa/ch14 => android/pa/audioplayer}/AudioRecorderWAudioRecord.java (95%) rename AudioPlayer/src/com/oreilly/demo/{pa/ch14 => android/pa/audioplayer}/MultiMedia.java (95%) rename AudioPlayer/src/com/oreilly/demo/{pa/ch14 => android/pa/audioplayer}/VideoPlayer.java (97%) rename AudioPlayer/src/com/oreilly/demo/{pa/ch14 => android/pa/audioplayer}/VideoRecorder.java (97%) rename AudioPlayer/src/com/oreilly/demo/{pa/ch14 => android/pa/audioplayer}/VideoRecorderViaIntent.java (94%) rename AudioPlayer/{ => tools/ant}/build.xml (100%) rename ClientDemo/src/com/oreilly/demo/{pa/ch17 => android/pa/clientserver/client}/account/AccountActivity.java (93%) rename ClientDemo/src/com/oreilly/demo/{pa/ch17 => android/pa/clientserver/client}/account/AccountAddActivity.java (94%) rename ClientDemo/src/com/oreilly/demo/{pa/ch17 => android/pa/clientserver/client}/sync/LoginActivity.java (94%) rename ClientDemo/src/com/oreilly/demo/{pa/ch17 => android/pa/clientserver/client}/sync/NetworkUtil.java (98%) rename ClientDemo/src/com/oreilly/demo/{pa/ch17 => android/pa/clientserver/client}/sync/Settings.java (90%) rename ClientDemo/src/com/oreilly/demo/{pa/ch17 => android/pa/clientserver/client}/sync/authsync/AuthenticationService.java (87%) rename ClientDemo/src/com/oreilly/demo/{pa/ch17 => android/pa/clientserver/client}/sync/authsync/Authenticator.java (93%) rename ClientDemo/src/com/oreilly/demo/{pa/ch17 => android/pa/clientserver/client}/sync/authsync/SyncAdapter.java (88%) rename ClientDemo/src/com/oreilly/demo/{pa/ch17 => android/pa/clientserver/client}/sync/authsync/SyncService.java (89%) rename ClientDemo/src/com/oreilly/demo/{pa/ch17 => android/pa/clientserver/client}/sync/dataobjects/Change.java (94%) rename ClientDemo/src/com/oreilly/demo/{pa/ch17 => android/pa/clientserver/client}/sync/dataobjects/ListFriends.java (96%) rename ClientDemo/src/com/oreilly/demo/{pa/ch17 => android/pa/clientserver/client}/sync/dataobjects/User.java (97%) rename ClientDemo/{ => tools/ant}/build.xml (100%) rename ContactViewer/src/com/oreilly/demo/android/{ => pa}/contactviewer/ContactDetailActivity.java (95%) rename ContactViewer/src/com/oreilly/demo/android/{ => pa}/contactviewer/ContactDetailFragment.java (97%) rename ContactViewer/src/com/oreilly/demo/android/{ => pa}/contactviewer/ContactDetails.java (98%) rename ContactViewer/src/com/oreilly/demo/android/{ => pa}/contactviewer/ContactDetailsLoader.java (97%) rename ContactViewer/src/com/oreilly/demo/android/{ => pa}/contactviewer/ContactViewer.java (97%) rename ContactViewer/src/com/oreilly/demo/android/{ => pa}/contactviewer/ContactsCursorAdapter.java (96%) rename ContactViewer/src/com/oreilly/demo/android/{ => pa}/contactviewer/ContactsFragment.java (98%) rename ContactViewer/{ => tools/ant}/build.xml (100%) rename DemoServer/src/com/oreilly/demo/{pa/ch17 => android/pa/clientserver}/server/Config.java (92%) rename DemoServer/src/com/oreilly/demo/{pa/ch17 => android/pa/clientserver}/server/MainServer.java (92%) rename DemoServer/src/com/oreilly/demo/{pa/ch17 => android/pa/clientserver}/server/ServerStatic.java (97%) rename DemoServer/src/com/oreilly/demo/{pa/ch17 => android/pa/clientserver}/server/ServletUtil.java (93%) rename DemoServer/src/com/oreilly/demo/{pa/ch17 => android/pa/clientserver}/server/data/UsersData.java (95%) rename DemoServer/src/com/oreilly/demo/{pa/ch17 => android/pa/clientserver/server}/dataobjects/Change.java (94%) rename DemoServer/src/com/oreilly/demo/{pa/ch17 => android/pa/clientserver/server}/dataobjects/ListFriends.java (94%) rename DemoServer/src/com/oreilly/demo/{pa/ch17 => android/pa/clientserver/server}/dataobjects/User.java (97%) rename DemoServer/src/com/oreilly/demo/{pa/ch17 => android/pa/clientserver}/server/servlet/AddFriendServlet.java (92%) rename DemoServer/src/com/oreilly/demo/{pa/ch17 => android/pa/clientserver}/server/servlet/AddUserServlet.java (88%) rename DemoServer/src/com/oreilly/demo/{pa/ch17 => android/pa/clientserver}/server/servlet/BaseServlet.java (90%) rename DemoServer/src/com/oreilly/demo/{pa/ch17 => android/pa/clientserver}/server/servlet/DeleteFriendServlet.java (88%) rename DemoServer/src/com/oreilly/demo/{pa/ch17 => android/pa/clientserver}/server/servlet/GetFriendsServlet.java (81%) rename DemoServer/src/com/oreilly/demo/{pa/ch17 => android/pa/clientserver}/server/servlet/ISHttpServletType.java (50%) rename DemoServer/src/com/oreilly/demo/{pa/ch17 => android/pa/clientserver}/server/servlet/LoginServlet.java (91%) delete mode 100644 FillListTask/default.properties rename FillListTask/src/com/oreilly/demo/android/{ch02 => pa}/filllisttask/FillListTask.java (97%) rename FinchFramework/{build.xml => tools/ant} (100%) delete mode 100644 FinchFramework/tools/ant/build.xml rename FinchLifecycle/src/com/oreilly/demo/{pa/ch10 => android/pa}/finchlifecycle/FinchApplication.java (95%) rename FinchLifecycle/src/com/oreilly/demo/{pa/ch10 => android/pa}/finchlifecycle/FinchLifecycle.java (97%) rename FinchLifecycle/src/com/oreilly/demo/{pa/ch10 => android/pa}/finchlifecycle/TestFragment.java (96%) rename FinchLifecycle/{ => tools/ant}/build.xml (100%) rename FinchLifecycleBackport/src/com/oreilly/demo/{pa/ch10 => android/pa}/finchlifecyclebackport/FinchApplication.java (95%) rename FinchLifecycleBackport/src/com/oreilly/demo/{pa/ch10 => android/pa}/finchlifecyclebackport/FinchLifecycle.java (98%) rename FinchLifecycleBackport/src/com/oreilly/demo/{pa/ch10 => android/pa}/finchlifecyclebackport/TestFragment.java (96%) rename FinchLifecycleBackport/{ => tools/ant}/build.xml (100%) delete mode 100644 FinchVideo/build.xml rename FinchVideo/src/com/oreilly/demo/{ => android}/pa/finchvideo/FinchVideoActivity.java (97%) create mode 100644 FinchVideo/src/com/oreilly/demo/android/pa/finchvideo/FinchVideoDemo.java rename FinchVideo/src/com/oreilly/demo/{ => android}/pa/finchvideo/SimpleFinchVideoActivity.java (97%) rename FinchVideo/src/com/oreilly/demo/{ => android}/pa/finchvideo/provider/FinchVideo.java (99%) rename FinchVideo/src/com/oreilly/demo/{ => android}/pa/finchvideo/provider/FinchVideoContentProvider.java (99%) rename FinchVideo/src/com/oreilly/demo/{ => android}/pa/finchvideo/provider/SimpleFinchVideoContentProvider.java (99%) rename FinchVideo/src/com/oreilly/demo/{ => android}/pa/finchvideo/provider/YouTubeHandler.java (98%) delete mode 100644 FinchVideo/src/com/oreilly/demo/pa/finchvideo/Ch12.java rename JSerializable/src/com/oreilly/demo/android/{ch06 => pa/serialize}/JSerialize.java (93%) rename JSerializable/{ => tools/ant}/build.xml (100%) delete mode 100644 MicroJobs/build.xml rename MicroJobs/src/com/oreilly/demo/{pa/ch10 => android/pa/microjobs}/AddJob.java (94%) rename MicroJobs/src/com/oreilly/demo/{pa/ch10 => android/pa/microjobs}/EditJob.java (95%) rename MicroJobs/src/com/oreilly/demo/{pa/ch10 => android/pa/microjobs}/MicroJobs.java (99%) rename MicroJobs/src/com/oreilly/demo/{pa/ch10 => android/pa/microjobs}/MicroJobsDatabase.java (96%) rename MicroJobs/src/com/oreilly/demo/{pa/ch10 => android/pa/microjobs}/MicroJobsDetail.java (95%) rename MicroJobs/src/com/oreilly/demo/{pa/ch10 => android/pa/microjobs}/MicroJobsEmpDetail.java (94%) rename MicroJobs/src/com/oreilly/demo/{pa/ch10 => android/pa/microjobs}/MicroJobsList.java (95%) rename NDKDemo/src/com/oreilly/demo/{pa/ch18 => android/pa/ndkdemo}/NDKApp.java (88%) rename NDKDemo/src/com/oreilly/demo/{pa/ch18 => android/pa/ndkdemo}/SampleActivityWithNativeMethods.java (92%) rename NDKDemo/{ => tools/ant}/build.xml (100%) rename SensorDemos/src/com/oreilly/demo/{pa/ch16 => android/pa/sensordemo}/Accessibility.java (98%) rename SensorDemos/src/com/oreilly/demo/{pa/ch16 => android/pa/sensordemo}/GestureAdd.java (96%) rename SensorDemos/src/com/oreilly/demo/{pa/ch16 => android/pa/sensordemo}/GestureView.java (96%) rename SensorDemos/src/com/oreilly/demo/{pa/ch16 => android/pa/sensordemo}/MainActivity.java (93%) rename SensorDemos/src/com/oreilly/demo/{pa/ch16 => android/pa/sensordemo}/NFC.java (98%) rename SensorDemos/src/com/oreilly/demo/{pa/ch16 => android/pa/sensordemo}/NFC233.java (97%) rename SensorDemos/src/com/oreilly/demo/{pa/ch16 => android/pa/sensordemo}/SensorAccel.java (93%) rename SensorDemos/src/com/oreilly/demo/{pa/ch16 => android/pa/sensordemo}/SensorGravity.java (93%) rename SensorDemos/src/com/oreilly/demo/{pa/ch16 => android/pa/sensordemo}/SensorGyro.java (94%) rename SensorDemos/src/com/oreilly/demo/{pa/ch16 => android/pa/sensordemo}/SensorLight.java (97%) rename SensorDemos/src/com/oreilly/demo/{pa/ch16 => android/pa/sensordemo}/SensorLinearAcceleration.java (93%) rename SensorDemos/src/com/oreilly/demo/{pa/ch16 => android/pa/sensordemo}/SensorMagnetic.java (93%) rename SensorDemos/src/com/oreilly/demo/{pa/ch16 => android/pa/sensordemo}/SensorPressure.java (96%) rename SensorDemos/src/com/oreilly/demo/{pa/ch16 => android/pa/sensordemo}/SensorProximity.java (96%) rename SensorDemos/src/com/oreilly/demo/{pa/ch16 => android/pa/sensordemo}/SensorRotationVector.java (93%) rename SensorDemos/src/com/oreilly/demo/{pa/ch16 => android/pa/sensordemo}/SensorTemp.java (96%) rename SensorDemos/{ => tools/ant}/build.xml (100%) rename SharedListTask/src/com/oreilly/demo/android/{ch02 => pa}/sharedlisttask/SharedListTask.java (95%) rename SimpleFragment/src/com/oreilly/demo/android/{ch08 => pa}/simplefragment/DateTime.java (91%) rename SimpleFragment/src/com/oreilly/demo/android/{ch08 => pa}/simplefragment/SimpleFragment.java (94%) rename SimpleFragment/{ => tools/ant}/build.xml (100%) rename TestApp/src/com/oreilly/demo/{pa/ch03 => android/pa}/testapp/TestActivity.java (78%) rename TestApp/src/com/oreilly/demo/{pa/ch03 => android/pa}/testapp/TestBroadcastReceiver.java (84%) rename TestApp/src/com/oreilly/demo/{pa/ch03 => android/pa}/testapp/TestProvider.java (95%) rename TestApp/src/com/oreilly/demo/{pa/ch03 => android/pa}/testapp/TestService.java (82%) rename TestApp/{ => tools/ant}/build.xml (100%) diff --git a/AIDLDemo/AndroidManifest.xml b/AIDLDemo/AndroidManifest.xml index 6a1ca0d..fbbc444 100644 --- a/AIDLDemo/AndroidManifest.xml +++ b/AIDLDemo/AndroidManifest.xml @@ -1,8 +1,8 @@ - + android:versionName="1.0" package="com.oreilly.demo.android.pa.aidl"> + @@ -10,9 +10,9 @@ - + - + diff --git a/AIDLDemo/src/com/oreilly/demo/android/ch06/aidl/service/Path.aidl b/AIDLDemo/src/com/oreilly/demo/android/ch06/aidl/service/Path.aidl deleted file mode 100644 index 934e604..0000000 --- a/AIDLDemo/src/com/oreilly/demo/android/ch06/aidl/service/Path.aidl +++ /dev/null @@ -1,3 +0,0 @@ -package com.oreilly.demo.android.ch06.aidl.service; - -parcelable Path; diff --git a/AIDLDemo/src/com/oreilly/demo/android/ch06/aidl/client/AIDLDemo.java b/AIDLDemo/src/com/oreilly/demo/android/pa/aidl/client/AIDLDemo.java similarity index 92% rename from AIDLDemo/src/com/oreilly/demo/android/ch06/aidl/client/AIDLDemo.java rename to AIDLDemo/src/com/oreilly/demo/android/pa/aidl/client/AIDLDemo.java index fe0f55b..c6265f7 100644 --- a/AIDLDemo/src/com/oreilly/demo/android/ch06/aidl/client/AIDLDemo.java +++ b/AIDLDemo/src/com/oreilly/demo/android/pa/aidl/client/AIDLDemo.java @@ -1,4 +1,4 @@ -package com.oreilly.demo.android.ch06.aidl.client; +package com.oreilly.demo.android.pa.aidl.client; import java.util.ArrayList; import java.util.List; @@ -16,9 +16,9 @@ import android.view.View.OnClickListener; import android.widget.Button; -import com.oreilly.demo.android.ch06.aidl.R; -import com.oreilly.demo.android.ch06.aidl.parcelables.ParcelableList; -import com.oreilly.demo.android.ch06.aidl.service.PathService; +import com.oreilly.demo.android.pa.aidl.R; +import com.oreilly.demo.android.pa.aidl.service.PathService; +import com.oreilly.demo.android.pa.aidl.parcelables.ParcelableList; /** diff --git a/AIDLDemo/src/com/oreilly/demo/android/ch06/aidl/parcelables/ParcelableList.java b/AIDLDemo/src/com/oreilly/demo/android/pa/aidl/parcelables/ParcelableList.java similarity index 96% rename from AIDLDemo/src/com/oreilly/demo/android/ch06/aidl/parcelables/ParcelableList.java rename to AIDLDemo/src/com/oreilly/demo/android/pa/aidl/parcelables/ParcelableList.java index 9d6a8ce..93e2967 100644 --- a/AIDLDemo/src/com/oreilly/demo/android/ch06/aidl/parcelables/ParcelableList.java +++ b/AIDLDemo/src/com/oreilly/demo/android/pa/aidl/parcelables/ParcelableList.java @@ -1,6 +1,6 @@ /* $Id: $ */ -package com.oreilly.demo.android.ch06.aidl.parcelables; +package com.oreilly.demo.android.pa.aidl.parcelables; import java.util.ArrayList; import java.util.List; diff --git a/AIDLDemo/src/com/oreilly/demo/android/ch06/aidl/parcelables/SimpleParcelable.java b/AIDLDemo/src/com/oreilly/demo/android/pa/aidl/parcelables/SimpleParcelable.java similarity index 97% rename from AIDLDemo/src/com/oreilly/demo/android/ch06/aidl/parcelables/SimpleParcelable.java rename to AIDLDemo/src/com/oreilly/demo/android/pa/aidl/parcelables/SimpleParcelable.java index e05cd24..caf01fd 100644 --- a/AIDLDemo/src/com/oreilly/demo/android/ch06/aidl/parcelables/SimpleParcelable.java +++ b/AIDLDemo/src/com/oreilly/demo/android/pa/aidl/parcelables/SimpleParcelable.java @@ -1,6 +1,6 @@ /* $Id: $ */ -package com.oreilly.demo.android.ch06.aidl.parcelables; +package com.oreilly.demo.android.pa.aidl.parcelables; import java.util.Collections; import java.util.Date; diff --git a/AIDLDemo/src/com/oreilly/demo/android/pa/aidl/service/Path.aidl b/AIDLDemo/src/com/oreilly/demo/android/pa/aidl/service/Path.aidl new file mode 100644 index 0000000..e9712f4 --- /dev/null +++ b/AIDLDemo/src/com/oreilly/demo/android/pa/aidl/service/Path.aidl @@ -0,0 +1,3 @@ +package com.oreilly.demo.android.pa.aidl.service; + +parcelable Path; diff --git a/AIDLDemo/src/com/oreilly/demo/android/ch06/aidl/service/Path.java b/AIDLDemo/src/com/oreilly/demo/android/pa/aidl/service/Path.java similarity index 97% rename from AIDLDemo/src/com/oreilly/demo/android/ch06/aidl/service/Path.java rename to AIDLDemo/src/com/oreilly/demo/android/pa/aidl/service/Path.java index fa7cff5..ca48ae6 100644 --- a/AIDLDemo/src/com/oreilly/demo/android/ch06/aidl/service/Path.java +++ b/AIDLDemo/src/com/oreilly/demo/android/pa/aidl/service/Path.java @@ -1,4 +1,4 @@ -package com.oreilly.demo.android.ch06.aidl.service; +package com.oreilly.demo.android.pa.aidl.service; import java.util.Collections; import java.util.LinkedList; diff --git a/AIDLDemo/src/com/oreilly/demo/android/ch06/aidl/service/PathService.aidl b/AIDLDemo/src/com/oreilly/demo/android/pa/aidl/service/PathService.aidl similarity index 74% rename from AIDLDemo/src/com/oreilly/demo/android/ch06/aidl/service/PathService.aidl rename to AIDLDemo/src/com/oreilly/demo/android/pa/aidl/service/PathService.aidl index 109fa4e..53f4a68 100644 --- a/AIDLDemo/src/com/oreilly/demo/android/ch06/aidl/service/PathService.aidl +++ b/AIDLDemo/src/com/oreilly/demo/android/pa/aidl/service/PathService.aidl @@ -1,5 +1,5 @@ -package com.oreilly.demo.android.ch06.aidl.service; +package com.oreilly.demo.android.pa.aidl.service; interface PathService { void setPoint(in String name, in String path); diff --git a/AIDLDemo/src/com/oreilly/demo/android/ch06/aidl/service/Point.java b/AIDLDemo/src/com/oreilly/demo/android/pa/aidl/service/Point.java similarity index 94% rename from AIDLDemo/src/com/oreilly/demo/android/ch06/aidl/service/Point.java rename to AIDLDemo/src/com/oreilly/demo/android/pa/aidl/service/Point.java index 4ab777c..589560a 100644 --- a/AIDLDemo/src/com/oreilly/demo/android/ch06/aidl/service/Point.java +++ b/AIDLDemo/src/com/oreilly/demo/android/pa/aidl/service/Point.java @@ -1,4 +1,4 @@ -package com.oreilly.demo.android.ch06.aidl.service; +package com.oreilly.demo.android.pa.aidl.service; /** A dot: the coordinates, color and size. */ diff --git a/AIDLDemo/src/com/oreilly/demo/android/ch06/aidl/service/SimplePathService.java b/AIDLDemo/src/com/oreilly/demo/android/pa/aidl/service/SimplePathService.java similarity index 93% rename from AIDLDemo/src/com/oreilly/demo/android/ch06/aidl/service/SimplePathService.java rename to AIDLDemo/src/com/oreilly/demo/android/pa/aidl/service/SimplePathService.java index 69013d5..80d8237 100644 --- a/AIDLDemo/src/com/oreilly/demo/android/ch06/aidl/service/SimplePathService.java +++ b/AIDLDemo/src/com/oreilly/demo/android/pa/aidl/service/SimplePathService.java @@ -1,6 +1,6 @@ /* $Id: $ */ -package com.oreilly.demo.android.ch06.aidl.service; +package com.oreilly.demo.android.pa.aidl.service; import android.app.Service; import android.content.Intent; @@ -8,7 +8,7 @@ import android.os.RemoteException; import android.util.Log; -import com.oreilly.demo.android.ch06.aidl.service.PathService; +import com.oreilly.demo.android.pa.aidl.service.PathService; /** diff --git a/AIDLDemo/build.xml b/AIDLDemo/tools/ant/build.xml similarity index 100% rename from AIDLDemo/build.xml rename to AIDLDemo/tools/ant/build.xml diff --git a/AndroidUIDemo/AndroidManifest.xml b/AndroidUIDemo/AndroidManifest.xml index f9e8dbc..542d677 100755 --- a/AndroidUIDemo/AndroidManifest.xml +++ b/AndroidUIDemo/AndroidManifest.xml @@ -1,8 +1,8 @@ - + android:versionName="1.0.0" package="com.oreilly.demo.android.pa.uidemo"> + diff --git a/AndroidUIDemo/src/com/oreilly/demo/android/ch07/TouchMe.java b/AndroidUIDemo/src/com/oreilly/demo/android/pa/uidemo/TouchMe.java similarity index 97% rename from AndroidUIDemo/src/com/oreilly/demo/android/ch07/TouchMe.java rename to AndroidUIDemo/src/com/oreilly/demo/android/pa/uidemo/TouchMe.java index 32ef22e..5d3abc8 100644 --- a/AndroidUIDemo/src/com/oreilly/demo/android/ch07/TouchMe.java +++ b/AndroidUIDemo/src/com/oreilly/demo/android/pa/uidemo/TouchMe.java @@ -1,4 +1,4 @@ -package com.oreilly.demo.android.ch07; +package com.oreilly.demo.android.pa.uidemo; import java.util.Random; @@ -19,9 +19,9 @@ import android.widget.EditText; import android.widget.LinearLayout; -import com.oreilly.demo.android.ch07.model.Dot; -import com.oreilly.demo.android.ch07.model.Dots; -import com.oreilly.demo.android.ch07.view.DotView; +import com.oreilly.demo.android.pa.uidemo.model.Dot; +import com.oreilly.demo.android.pa.uidemo.model.Dots; +import com.oreilly.demo.android.pa.uidemo.view.DotView; /** diff --git a/AndroidUIDemo/src/com/oreilly/demo/android/ch07/model/Dot.java b/AndroidUIDemo/src/com/oreilly/demo/android/pa/uidemo/model/Dot.java similarity index 94% rename from AndroidUIDemo/src/com/oreilly/demo/android/ch07/model/Dot.java rename to AndroidUIDemo/src/com/oreilly/demo/android/pa/uidemo/model/Dot.java index 96da2be..88e18e1 100644 --- a/AndroidUIDemo/src/com/oreilly/demo/android/ch07/model/Dot.java +++ b/AndroidUIDemo/src/com/oreilly/demo/android/pa/uidemo/model/Dot.java @@ -1,4 +1,4 @@ -package com.oreilly.demo.android.ch07.model; +package com.oreilly.demo.android.pa.uidemo.model; /** A dot: the coordinates, color and size. */ diff --git a/AndroidUIDemo/src/com/oreilly/demo/android/ch07/model/Dots.java b/AndroidUIDemo/src/com/oreilly/demo/android/pa/uidemo/model/Dots.java similarity index 96% rename from AndroidUIDemo/src/com/oreilly/demo/android/ch07/model/Dots.java rename to AndroidUIDemo/src/com/oreilly/demo/android/pa/uidemo/model/Dots.java index 654f9e8..12d5cac 100644 --- a/AndroidUIDemo/src/com/oreilly/demo/android/ch07/model/Dots.java +++ b/AndroidUIDemo/src/com/oreilly/demo/android/pa/uidemo/model/Dots.java @@ -1,4 +1,4 @@ -package com.oreilly.demo.android.ch07.model; +package com.oreilly.demo.android.pa.uidemo.model; import java.util.Collections; import java.util.LinkedList; diff --git a/AndroidUIDemo/src/com/oreilly/demo/android/ch07/view/DotView.java b/AndroidUIDemo/src/com/oreilly/demo/android/pa/uidemo/view/DotView.java similarity index 91% rename from AndroidUIDemo/src/com/oreilly/demo/android/ch07/view/DotView.java rename to AndroidUIDemo/src/com/oreilly/demo/android/pa/uidemo/view/DotView.java index b842e81..fc5d183 100644 --- a/AndroidUIDemo/src/com/oreilly/demo/android/ch07/view/DotView.java +++ b/AndroidUIDemo/src/com/oreilly/demo/android/pa/uidemo/view/DotView.java @@ -1,4 +1,4 @@ -package com.oreilly.demo.android.ch07.view; +package com.oreilly.demo.android.pa.uidemo.view; import android.content.Context; @@ -9,8 +9,8 @@ import android.view.View; -import com.oreilly.demo.android.ch07.model.Dot; -import com.oreilly.demo.android.ch07.model.Dots; +import com.oreilly.demo.android.pa.uidemo.model.Dot; +import com.oreilly.demo.android.pa.uidemo.model.Dots; /** diff --git a/AndroidUIDemo/build.xml b/AndroidUIDemo/tools/ant/build.xml similarity index 100% rename from AndroidUIDemo/build.xml rename to AndroidUIDemo/tools/ant/build.xml diff --git a/AndroidViewDemo/AndroidManifest.xml b/AndroidViewDemo/AndroidManifest.xml index 348b20e..5d4ffca 100644 --- a/AndroidViewDemo/AndroidManifest.xml +++ b/AndroidViewDemo/AndroidManifest.xml @@ -1,8 +1,8 @@ - + android:versionName="1.0.0" package="com.oreilly.demo.android.pa.viewdemo"> + diff --git a/AndroidViewDemo/src/com/oreilly/demo/android/ch09/TransformIt.java b/AndroidViewDemo/src/com/oreilly/demo/android/pa/viewdemo/TransformIt.java similarity index 93% rename from AndroidViewDemo/src/com/oreilly/demo/android/ch09/TransformIt.java rename to AndroidViewDemo/src/com/oreilly/demo/android/pa/viewdemo/TransformIt.java index 8b10e9d..2bca2fd 100644 --- a/AndroidViewDemo/src/com/oreilly/demo/android/ch09/TransformIt.java +++ b/AndroidViewDemo/src/com/oreilly/demo/android/pa/viewdemo/TransformIt.java @@ -1,7 +1,7 @@ /* $Id: $ * */ -package com.oreilly.demo.android.ch09; +package com.oreilly.demo.android.pa.viewdemo; import android.app.Activity; import android.graphics.BlurMaskFilter; @@ -17,12 +17,12 @@ import android.view.View.OnClickListener; import android.widget.LinearLayout; -import com.oreilly.demo.android.ch09.drawable.HelloAndroidTextDrawable; -import com.oreilly.demo.android.ch09.efx.RotationTransitionAnimation; -import com.oreilly.demo.android.ch09.widget.EffectsWidget; -import com.oreilly.demo.android.ch09.widget.GLDemoWidget; -import com.oreilly.demo.android.ch09.widget.TransformedViewWidget; -import com.oreilly.demo.android.ch09.widget.TransformedViewWidget.Transformation; +import com.oreilly.demo.android.pa.viewdemo.drawable.HelloAndroidTextDrawable; +import com.oreilly.demo.android.pa.viewdemo.efx.RotationTransitionAnimation; +import com.oreilly.demo.android.pa.viewdemo.widget.EffectsWidget; +import com.oreilly.demo.android.pa.viewdemo.widget.GLDemoWidget; +import com.oreilly.demo.android.pa.viewdemo.widget.TransformedViewWidget; +import com.oreilly.demo.android.pa.viewdemo.widget.TransformedViewWidget.Transformation; /** diff --git a/AndroidViewDemo/src/com/oreilly/demo/android/ch09/drawable/HelloAndroidTextDrawable.java b/AndroidViewDemo/src/com/oreilly/demo/android/pa/viewdemo/drawable/HelloAndroidTextDrawable.java similarity index 96% rename from AndroidViewDemo/src/com/oreilly/demo/android/ch09/drawable/HelloAndroidTextDrawable.java rename to AndroidViewDemo/src/com/oreilly/demo/android/pa/viewdemo/drawable/HelloAndroidTextDrawable.java index 836ca9d..52e17d8 100644 --- a/AndroidViewDemo/src/com/oreilly/demo/android/ch09/drawable/HelloAndroidTextDrawable.java +++ b/AndroidViewDemo/src/com/oreilly/demo/android/pa/viewdemo/drawable/HelloAndroidTextDrawable.java @@ -1,4 +1,4 @@ -package com.oreilly.demo.android.ch09.drawable; +package com.oreilly.demo.android.pa.viewdemo.drawable; import android.graphics.Canvas; import android.graphics.Color; diff --git a/AndroidViewDemo/src/com/oreilly/demo/android/ch09/efx/RotationTransitionAnimation.java b/AndroidViewDemo/src/com/oreilly/demo/android/pa/viewdemo/efx/RotationTransitionAnimation.java similarity index 98% rename from AndroidViewDemo/src/com/oreilly/demo/android/ch09/efx/RotationTransitionAnimation.java rename to AndroidViewDemo/src/com/oreilly/demo/android/pa/viewdemo/efx/RotationTransitionAnimation.java index 120fdc8..cd093f8 100644 --- a/AndroidViewDemo/src/com/oreilly/demo/android/ch09/efx/RotationTransitionAnimation.java +++ b/AndroidViewDemo/src/com/oreilly/demo/android/pa/viewdemo/efx/RotationTransitionAnimation.java @@ -1,7 +1,7 @@ /* $Id: $ * */ -package com.oreilly.demo.android.ch09.efx; +package com.oreilly.demo.android.pa.viewdemo.efx; import android.graphics.Camera; import android.graphics.Matrix; diff --git a/AndroidViewDemo/src/com/oreilly/demo/android/ch09/widget/EffectsWidget.java b/AndroidViewDemo/src/com/oreilly/demo/android/pa/viewdemo/widget/EffectsWidget.java similarity index 94% rename from AndroidViewDemo/src/com/oreilly/demo/android/ch09/widget/EffectsWidget.java rename to AndroidViewDemo/src/com/oreilly/demo/android/pa/viewdemo/widget/EffectsWidget.java index f2e4d52..f36ec63 100644 --- a/AndroidViewDemo/src/com/oreilly/demo/android/ch09/widget/EffectsWidget.java +++ b/AndroidViewDemo/src/com/oreilly/demo/android/pa/viewdemo/widget/EffectsWidget.java @@ -1,7 +1,7 @@ /* $Id: $ * */ -package com.oreilly.demo.android.ch09.widget; +package com.oreilly.demo.android.pa.viewdemo.widget; import android.content.Context; import android.graphics.Canvas; @@ -9,7 +9,7 @@ import android.graphics.Paint; import android.view.View; -import com.oreilly.demo.android.ch09.R; +import com.oreilly.demo.android.pa.viewdemo.R; /** diff --git a/AndroidViewDemo/src/com/oreilly/demo/android/ch09/widget/GLDemoWidget.java b/AndroidViewDemo/src/com/oreilly/demo/android/pa/viewdemo/widget/GLDemoWidget.java similarity index 98% rename from AndroidViewDemo/src/com/oreilly/demo/android/ch09/widget/GLDemoWidget.java rename to AndroidViewDemo/src/com/oreilly/demo/android/pa/viewdemo/widget/GLDemoWidget.java index 201585f..79334c3 100644 --- a/AndroidViewDemo/src/com/oreilly/demo/android/ch09/widget/GLDemoWidget.java +++ b/AndroidViewDemo/src/com/oreilly/demo/android/pa/viewdemo/widget/GLDemoWidget.java @@ -1,5 +1,5 @@ /* $Id: $ */ -package com.oreilly.demo.android.ch09.widget; +package com.oreilly.demo.android.pa.viewdemo.widget; import java.io.IOException; import java.io.InputStream; @@ -19,7 +19,7 @@ import android.os.SystemClock; import com.example.android.apis.graphics.GLSurfaceView; -import com.oreilly.demo.android.ch09.R; +import com.oreilly.demo.android.pa.viewdemo.R; /** diff --git a/AndroidViewDemo/src/com/oreilly/demo/android/ch09/widget/TransformedViewWidget.java b/AndroidViewDemo/src/com/oreilly/demo/android/pa/viewdemo/widget/TransformedViewWidget.java similarity index 97% rename from AndroidViewDemo/src/com/oreilly/demo/android/ch09/widget/TransformedViewWidget.java rename to AndroidViewDemo/src/com/oreilly/demo/android/pa/viewdemo/widget/TransformedViewWidget.java index fa7b78c..99b90ba 100644 --- a/AndroidViewDemo/src/com/oreilly/demo/android/ch09/widget/TransformedViewWidget.java +++ b/AndroidViewDemo/src/com/oreilly/demo/android/pa/viewdemo/widget/TransformedViewWidget.java @@ -1,5 +1,5 @@ /* $Id: $ */ -package com.oreilly.demo.android.ch09.widget; +package com.oreilly.demo.android.pa.viewdemo.widget; import android.content.Context; import android.graphics.Canvas; diff --git a/AndroidViewDemo/build.xml b/AndroidViewDemo/tools/ant/build.xml similarity index 100% rename from AndroidViewDemo/build.xml rename to AndroidViewDemo/tools/ant/build.xml diff --git a/AsyncTaskDemo/AndroidManifest.xml b/AsyncTaskDemo/AndroidManifest.xml index 406a960..20df03e 100644 --- a/AsyncTaskDemo/AndroidManifest.xml +++ b/AsyncTaskDemo/AndroidManifest.xml @@ -1,8 +1,8 @@ - + android:versionName="1.0" package="com.oreilly.demo.android.pa.asynctask"> + diff --git a/AsyncTaskDemo/src/com/oreilly/demo/android/ch06/AsyncTaskDemo.java b/AsyncTaskDemo/src/com/oreilly/demo/android/pa/asynctask/AsyncTaskDemo.java similarity index 95% rename from AsyncTaskDemo/src/com/oreilly/demo/android/ch06/AsyncTaskDemo.java rename to AsyncTaskDemo/src/com/oreilly/demo/android/pa/asynctask/AsyncTaskDemo.java index 05ae1f7..41261dc 100644 --- a/AsyncTaskDemo/src/com/oreilly/demo/android/ch06/AsyncTaskDemo.java +++ b/AsyncTaskDemo/src/com/oreilly/demo/android/pa/asynctask/AsyncTaskDemo.java @@ -1,7 +1,6 @@ -package com.oreilly.demo.android.ch06; +package com.oreilly.demo.android.pa.asynctask; import android.app.Activity; -import android.graphics.Color; import android.graphics.drawable.AnimationDrawable; import android.graphics.drawable.Drawable; import android.os.AsyncTask; @@ -10,8 +9,8 @@ import android.widget.Button; import android.widget.TextView; -import com.oreilly.demo.android.ch06.R; -import com.oreilly.demo.android.ch06.game.Game; +import com.oreilly.demo.android.pa.asynctask.R; +import com.oreilly.demo.android.pa.asynctask.game.Game; /** AsyncTaskDemo */ @@ -71,14 +70,14 @@ public void onCreate(Bundle state) { super.onCreate(state); setContentView(R.layout.asyncdemo); - + final View dots = findViewById(R.id.dots); final Drawable bg = dots.getBackground(); final TextView msg = ((TextView) findViewById(R.id.msg)); final Game game = Game.newGame(); - + ((Button) findViewById(R.id.start)).setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { diff --git a/AsyncTaskDemo/src/com/oreilly/demo/android/ch06/AsyncTaskDemoWithProgress.java b/AsyncTaskDemo/src/com/oreilly/demo/android/pa/asynctask/AsyncTaskDemoWithProgress.java similarity index 95% rename from AsyncTaskDemo/src/com/oreilly/demo/android/ch06/AsyncTaskDemoWithProgress.java rename to AsyncTaskDemo/src/com/oreilly/demo/android/pa/asynctask/AsyncTaskDemoWithProgress.java index 6fb3f33..3dced2e 100644 --- a/AsyncTaskDemo/src/com/oreilly/demo/android/ch06/AsyncTaskDemoWithProgress.java +++ b/AsyncTaskDemo/src/com/oreilly/demo/android/pa/asynctask/AsyncTaskDemoWithProgress.java @@ -1,4 +1,4 @@ -package com.oreilly.demo.android.ch06; +package com.oreilly.demo.android.pa.asynctask; import android.app.Activity; import android.graphics.drawable.AnimationDrawable; @@ -10,8 +10,8 @@ import android.widget.ProgressBar; import android.widget.TextView; -import com.oreilly.demo.android.ch06.R; -import com.oreilly.demo.android.ch06.game.Game; +import com.oreilly.demo.android.pa.asynctask.R; +import com.oreilly.demo.android.pa.asynctask.game.Game; /** AsyncTaskDemo */ diff --git a/AsyncTaskDemo/src/com/oreilly/demo/android/ch06/AsyncTaskSample.java b/AsyncTaskDemo/src/com/oreilly/demo/android/pa/asynctask/AsyncTaskSample.java similarity index 98% rename from AsyncTaskDemo/src/com/oreilly/demo/android/ch06/AsyncTaskSample.java rename to AsyncTaskDemo/src/com/oreilly/demo/android/pa/asynctask/AsyncTaskSample.java index e738913..cc56dbe 100644 --- a/AsyncTaskDemo/src/com/oreilly/demo/android/ch06/AsyncTaskSample.java +++ b/AsyncTaskDemo/src/com/oreilly/demo/android/pa/asynctask/AsyncTaskSample.java @@ -1,6 +1,6 @@ /* $Id: $ */ -package com.oreilly.demo.android.ch06; +package com.oreilly.demo.android.pa.asynctask; import java.net.URI; import java.sql.PreparedStatement; diff --git a/AsyncTaskDemo/src/com/oreilly/demo/android/ch06/game/Game.java b/AsyncTaskDemo/src/com/oreilly/demo/android/pa/asynctask/game/Game.java similarity index 96% rename from AsyncTaskDemo/src/com/oreilly/demo/android/ch06/game/Game.java rename to AsyncTaskDemo/src/com/oreilly/demo/android/pa/asynctask/game/Game.java index cfd35fc..3df45e1 100644 --- a/AsyncTaskDemo/src/com/oreilly/demo/android/ch06/game/Game.java +++ b/AsyncTaskDemo/src/com/oreilly/demo/android/pa/asynctask/game/Game.java @@ -1,6 +1,6 @@ /* $Id: $ */ -package com.oreilly.demo.android.ch06.game; +package com.oreilly.demo.android.pa.asynctask.game; /** diff --git a/AsyncTaskDemo/src/com/oreilly/demo/android/ch06/game/MockGame.java b/AsyncTaskDemo/src/com/oreilly/demo/android/pa/asynctask/game/MockGame.java similarity index 94% rename from AsyncTaskDemo/src/com/oreilly/demo/android/ch06/game/MockGame.java rename to AsyncTaskDemo/src/com/oreilly/demo/android/pa/asynctask/game/MockGame.java index f782067..54e1bae 100644 --- a/AsyncTaskDemo/src/com/oreilly/demo/android/ch06/game/MockGame.java +++ b/AsyncTaskDemo/src/com/oreilly/demo/android/pa/asynctask/game/MockGame.java @@ -1,6 +1,6 @@ /* $Id: $ */ -package com.oreilly.demo.android.ch06.game; +package com.oreilly.demo.android.pa.asynctask.game; /** diff --git a/AsyncTaskDemo/src/com/oreilly/demo/android/ch06/game/PersistentModel.java b/AsyncTaskDemo/src/com/oreilly/demo/android/pa/asynctask/game/PersistentModel.java similarity index 91% rename from AsyncTaskDemo/src/com/oreilly/demo/android/ch06/game/PersistentModel.java rename to AsyncTaskDemo/src/com/oreilly/demo/android/pa/asynctask/game/PersistentModel.java index d15a3c4..12049c4 100644 --- a/AsyncTaskDemo/src/com/oreilly/demo/android/ch06/game/PersistentModel.java +++ b/AsyncTaskDemo/src/com/oreilly/demo/android/pa/asynctask/game/PersistentModel.java @@ -1,6 +1,6 @@ /* $Id: $ */ -package com.oreilly.demo.android.ch06.game; +package com.oreilly.demo.android.pa.asynctask.game; import android.os.Handler; import android.os.Looper; diff --git a/AsyncTaskDemo/build.xml b/AsyncTaskDemo/tools/ant/build.xml similarity index 100% rename from AsyncTaskDemo/build.xml rename to AsyncTaskDemo/tools/ant/build.xml diff --git a/AudioPlayer/AndroidManifest.xml b/AudioPlayer/AndroidManifest.xml index 5433530..037c6dd 100644 --- a/AudioPlayer/AndroidManifest.xml +++ b/AudioPlayer/AndroidManifest.xml @@ -1,6 +1,6 @@ @@ -19,14 +19,14 @@ - + - + - - + + diff --git a/AudioPlayer/src/com/oreilly/demo/pa/ch14/AudioPlayer.java b/AudioPlayer/src/com/oreilly/demo/android/pa/audioplayer/AudioPlayer.java similarity index 94% rename from AudioPlayer/src/com/oreilly/demo/pa/ch14/AudioPlayer.java rename to AudioPlayer/src/com/oreilly/demo/android/pa/audioplayer/AudioPlayer.java index 2f43dbe..f135a4b 100644 --- a/AudioPlayer/src/com/oreilly/demo/pa/ch14/AudioPlayer.java +++ b/AudioPlayer/src/com/oreilly/demo/android/pa/audioplayer/AudioPlayer.java @@ -1,4 +1,4 @@ -package com.oreilly.demo.pa.ch14; +package com.oreilly.demo.android.pa.audioplayer; import android.app.Activity; import android.media.MediaPlayer; @@ -13,10 +13,11 @@ import android.widget.SeekBar; import android.widget.SeekBar.OnSeekBarChangeListener; + public class AudioPlayer extends Activity implements OnSeekBarChangeListener, Runnable, OnCompletionListener { public static final String AUDIOFILEURI = "AudioFileUri"; public static final String AUDIOFILEPATH = "AudioFilePath"; - + private int state = 3; // 0 - stop, 1 - play, 2 - pause, 3 - pre state private MediaPlayer mediaplayer; private Uri mediaReference; @@ -25,19 +26,19 @@ public class AudioPlayer extends Activity implements OnSeekBarChangeListener, Ru @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - + if(getIntent() != null) { if(getIntent().hasExtra(AUDIOFILEURI)) mediaReference = getIntent().getParcelableExtra(AUDIOFILEURI); - else if(getIntent().hasExtra(AUDIOFILEPATH)) + else if(getIntent().hasExtra(AUDIOFILEPATH)) mediaFilePath = getIntent().getStringExtra(AUDIOFILEPATH); } - + setUpView(); - + initializeMediaPlayer(); } - + @Override public void onDestroy() { super.onDestroy(); @@ -45,15 +46,15 @@ public void onDestroy() { stopPlayer(); mediaplayer.release(); } - + ///////////////////// // Set up the view // ///////////////////// private void setUpView() { setContentView(R.layout.audioplayer); - + findViewById(R.id.seek).setVisibility(View.VISIBLE); - + ImageButton playpauseButton = (ImageButton) findViewById(R.id.playpause); playpauseButton.setOnClickListener(new OnClickListener() { @@ -66,9 +67,9 @@ public void onClick(View v) { case 2: setState(1); break; // is paused, set to play } } - + }); - + ImageButton stopButton = (ImageButton) findViewById(R.id.stop); stopButton.setOnClickListener(new OnClickListener() { @@ -76,42 +77,42 @@ public void onClick(View v) { public void onClick(View v) { setState(0); } - + }); - + SeekBar seek = (SeekBar) findViewById(R.id.seek); seek.setOnSeekBarChangeListener(this); seek.setProgress(0); } - + private void setState(int state) { int previousState = this.state; this.state = state; - + ImageButton playpauseButton = (ImageButton) findViewById(R.id.playpause); - + switch(state) { case 0: playpauseButton.setImageResource(R.drawable.play); stopPlayer(); break; - case 1: + case 1: playpauseButton.setImageResource(R.drawable.pause); playPlayer(previousState); break; - case 2: + case 2: playpauseButton.setImageResource(R.drawable.play); pausePlayer(); break; default: break; } } - + ////////////////////////////// // SeekBar Listener methods // ////////////////////////////// private int seekbarprogress = 0; - + @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { if(fromUser) { @@ -131,14 +132,14 @@ public void onStopTrackingTouch(SeekBar seekBar) { if(state == 1) playPlayer(2); seekbarprogress = 0; } - + private void resetSeekBar() { int duration = mediaplayer.getDuration(); SeekBar seek = (SeekBar) findViewById(R.id.seek); - seek.setMax(duration/100); + seek.setMax(duration/100); seek.setProgress(0); } - + private final Handler seekbarHandler = new Handler() { @Override public void handleMessage(Message msg) { @@ -146,17 +147,17 @@ public void handleMessage(Message msg) { seek.setProgress(msg.what); } }; - + @Override public void run() { try { while(state > 0) { - Thread.sleep(100); // 10th of a second + Thread.sleep(100); // 10th of a second if(seekbarprogress == 0) seekbarHandler.sendEmptyMessage(mediaplayer.getCurrentPosition()/100); } } catch (Exception e) {} } - + ///////////////////////////////// // MediaPlayer related methods // ///////////////////////////////// @@ -171,22 +172,22 @@ private void initializeMediaPlayer() { else mediaplayer.setDataSource(mediaFilePath); mediaplayer.prepare(); } - + setState(3); - + resetSeekBar(); - + (new Thread(this)).start(); } catch (Exception e) { e.printStackTrace(); } } - + @Override public void onCompletion(MediaPlayer mp) { setState(0); } - + private void playPlayer(int previousState) { if(previousState == 0) { try { @@ -195,18 +196,18 @@ private void playPlayer(int previousState) { e.printStackTrace(); } resetSeekBar(); - + (new Thread(this)).start(); - } + } mediaplayer.start(); } - + private void stopPlayer() { mediaplayer.stop(); mediaplayer.reset(); initializeMediaPlayer(); } - + private void pausePlayer() { mediaplayer.pause(); } diff --git a/AudioPlayer/src/com/oreilly/demo/pa/ch14/AudioPlayerWAudioTrack.java b/AudioPlayer/src/com/oreilly/demo/android/pa/audioplayer/AudioPlayerWAudioTrack.java similarity index 94% rename from AudioPlayer/src/com/oreilly/demo/pa/ch14/AudioPlayerWAudioTrack.java rename to AudioPlayer/src/com/oreilly/demo/android/pa/audioplayer/AudioPlayerWAudioTrack.java index c7140da..73d6f07 100644 --- a/AudioPlayer/src/com/oreilly/demo/pa/ch14/AudioPlayerWAudioTrack.java +++ b/AudioPlayer/src/com/oreilly/demo/android/pa/audioplayer/AudioPlayerWAudioTrack.java @@ -1,4 +1,4 @@ -package com.oreilly.demo.pa.ch14; +package com.oreilly.demo.android.pa.audioplayer; import java.io.BufferedInputStream; import java.io.DataInputStream; @@ -18,7 +18,7 @@ public class AudioPlayerWAudioTrack extends Activity { private static final String MEDIAFILE = "/sdcard/audiorecordwaudiorecordexample.pcm"; public static final String AUDIOFILEPATH = "AudioFilePath"; - + private int state = 3; // 0 - stop, 1 - play, 2 - pause, 3 - pre state private AudioTrack audiotrack; private short[] audio; @@ -27,37 +27,37 @@ public class AudioPlayerWAudioTrack extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - + if(getIntent() != null && getIntent().hasExtra(AUDIOFILEPATH)) { mediaFilePath = getIntent().getStringExtra(AUDIOFILEPATH); } else { mediaFilePath = MEDIAFILE; } - + if(!(new File(mediaFilePath).exists())) { Toast.makeText(this, "Please run the AudioRecorder W AudioRecord example first and record an audio file", Toast.LENGTH_SHORT).show(); finish(); return; } - + setUpView(); - + initializeAudioTrack(); } - + @Override public void onDestroy() { super.onDestroy(); state = 0; stopPlayer(false); } - + ///////////////////// // Set up the view // ///////////////////// private void setUpView() { setContentView(R.layout.audioplayer); - + ImageButton playpauseButton = (ImageButton) findViewById(R.id.playpause); playpauseButton.setOnClickListener(new OnClickListener() { @@ -70,9 +70,9 @@ public void onClick(View v) { case 2: setState(1); break; // is paused, set to play } } - + }); - + ImageButton stopButton = (ImageButton) findViewById(R.id.stop); stopButton.setOnClickListener(new OnClickListener() { @@ -80,33 +80,33 @@ public void onClick(View v) { public void onClick(View v) { setState(0); } - + }); } - + private void setState(int state) { int previousState = this.state; this.state = state; - + ImageButton playpauseButton = (ImageButton) findViewById(R.id.playpause); - + switch(state) { case 0: playpauseButton.setImageResource(R.drawable.play); stopPlayer(true); break; - case 1: + case 1: playpauseButton.setImageResource(R.drawable.pause); playPlayer(previousState); break; - case 2: + case 2: playpauseButton.setImageResource(R.drawable.play); pausePlayer(); break; default: break; } } - + ///////////////////////////////// // AudioTrack related methods // ///////////////////////////////// @@ -116,20 +116,20 @@ private void initializeAudioTrack() { if(!mediafile.exists()) { throw new Exception(mediaFilePath+" does not exist"); } - + audio = new short[(int) (mediafile.length()/2)]; - + // read in file DataInputStream dis = new DataInputStream(new BufferedInputStream(new FileInputStream(mediafile))); - + int i = 0; while(dis.available() > 0) { audio[i] = dis.readShort(); i++; } - + dis.close(); - + // create AudioTrack audiotrack = new AudioTrack( AudioManager.STREAM_MUSIC, // stream type @@ -139,17 +139,17 @@ private void initializeAudioTrack() { audio.length, // length AudioTrack.MODE_STREAM // mode ); - + setState(3); } catch (Exception e) { e.printStackTrace(); } } - + public void onCompletion() { setState(0); } - + private void playPlayer(int previousState) { (new Thread() { @Override @@ -159,7 +159,7 @@ public void run() { } }).start(); } - + private void stopPlayer(boolean reinit) { if(audiotrack != null) { try { audiotrack.stop(); } catch(Exception e) { e.printStackTrace(); } @@ -171,7 +171,7 @@ private void stopPlayer(boolean reinit) { initializeAudioTrack(); } } - + private void pausePlayer() { if(audiotrack != null) { audiotrack.pause(); diff --git a/AudioPlayer/src/com/oreilly/demo/pa/ch14/AudioPlayerWMediaController.java b/AudioPlayer/src/com/oreilly/demo/android/pa/audioplayer/AudioPlayerWMediaController.java similarity index 96% rename from AudioPlayer/src/com/oreilly/demo/pa/ch14/AudioPlayerWMediaController.java rename to AudioPlayer/src/com/oreilly/demo/android/pa/audioplayer/AudioPlayerWMediaController.java index cb2d3dd..0fa0ca3 100644 --- a/AudioPlayer/src/com/oreilly/demo/pa/ch14/AudioPlayerWMediaController.java +++ b/AudioPlayer/src/com/oreilly/demo/android/pa/audioplayer/AudioPlayerWMediaController.java @@ -1,4 +1,4 @@ -package com.oreilly.demo.pa.ch14; +package com.oreilly.demo.android.pa.audioplayer; import android.app.Activity; import android.media.MediaPlayer; @@ -9,7 +9,7 @@ public class AudioPlayerWMediaController extends Activity { public static final String AUDIOFILEURI = "AudioFileUri"; - + private MediaPlayer mediaplayer; private Uri mediaReference; private MediaController controller; @@ -18,15 +18,15 @@ public class AudioPlayerWMediaController extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - + if(getIntent() != null && getIntent().hasExtra(AUDIOFILEURI)) mediaReference = getIntent().getParcelableExtra(AUDIOFILEURI); - + setUpView(); - + initializeMediaPlayer(); } - + @Override public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); @@ -36,26 +36,26 @@ public void onWindowFocusChanged(boolean hasFocus) { mediaplayer.start(); } } - + @Override public void onDestroy() { super.onDestroy(); mediaplayer.release(); } - + ///////////////////// // Set up the view // ///////////////////// private void setUpView() { setContentView(R.layout.audioplayerwmediacontrol); } - + @Override public boolean onTouchEvent(MotionEvent event) { controller.show(0); return super.onTouchEvent(event); } - + ///////////////////////////////// // MediaPlayer related methods // ///////////////////////////////// @@ -73,20 +73,20 @@ private void initializeMediaPlayer() { controller.setMediaPlayer(new AudioController(mediaplayer)); controller.setEnabled(true); controller.setAnchorView(findViewById(R.id.mainlayout)); - - + + } catch (Exception e) { e.printStackTrace(); } } - + public static class AudioController implements MediaController.MediaPlayerControl { - private MediaPlayer media; - + private MediaPlayer media; + public AudioController(MediaPlayer md) { media = md; } - + @Override public boolean canPause() { return true; @@ -136,6 +136,6 @@ public void seekTo(int pos) { public void start() { media.start(); } - + } } diff --git a/AudioPlayer/src/com/oreilly/demo/pa/ch14/AudioRecorder.java b/AudioPlayer/src/com/oreilly/demo/android/pa/audioplayer/AudioRecorder.java similarity index 97% rename from AudioPlayer/src/com/oreilly/demo/pa/ch14/AudioRecorder.java rename to AudioPlayer/src/com/oreilly/demo/android/pa/audioplayer/AudioRecorder.java index c67e936..e4736aa 100644 --- a/AudioPlayer/src/com/oreilly/demo/pa/ch14/AudioRecorder.java +++ b/AudioPlayer/src/com/oreilly/demo/android/pa/audioplayer/AudioRecorder.java @@ -1,4 +1,4 @@ -package com.oreilly.demo.pa.ch14; +package com.oreilly.demo.android.pa.audioplayer; import java.io.File; @@ -29,49 +29,49 @@ public class AudioRecorder extends Activity implements Runnable { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - + setupView(); } - + @Override public void onDestroy() { super.onDestroy(); recordablestate = false; if(mediarecorder != null) mediarecorder.release(); } - + private void setupView() { setContentView(R.layout.audiorecorder); - + findViewById(R.id.recordstop).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { recordOrStop(); } - + }); - + findViewById(R.id.play).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { playAudio(); } - + }); - + findViewById(R.id.register).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { registerAudioFile(); } - + }); - + } - + private void recordOrStop() { if(!recordablestate) { try { @@ -80,13 +80,13 @@ private void recordOrStop() { mediafile.delete(); } mediafile = null; - + recordablestate = true; ImageButton button = (ImageButton) findViewById(R.id.recordstop); button.setImageResource(R.drawable.stop); findViewById(R.id.play).setVisibility(View.GONE); findViewById(R.id.register).setVisibility(View.GONE); - + if(mediarecorder == null) mediarecorder = new MediaRecorder(); mediarecorder.setAudioSource(MediaRecorder.AudioSource.MIC); mediarecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); @@ -94,7 +94,7 @@ private void recordOrStop() { mediarecorder.setOutputFile(MEDIAFILE); mediarecorder.prepare(); mediarecorder.start(); - + (new Thread(this)).start(); } catch (Exception e) { e.printStackTrace(); @@ -109,7 +109,7 @@ private void recordOrStop() { findViewById(R.id.register).setVisibility(View.VISIBLE); } } - + private final Handler timeupdater = new Handler() { @Override public void handleMessage(Message msg) { @@ -117,7 +117,7 @@ public void handleMessage(Message msg) { ((TextView) findViewById(R.id.time)).setText(""+time+" secs"); } }; - + @Override public void run() { try { @@ -129,15 +129,15 @@ public void run() { } } catch (Exception t) { } } - + private void playAudio() { finish(); - + Intent intent = new Intent(this, AudioPlayer.class); intent.putExtra(AudioPlayer.AUDIOFILEPATH, MEDIAFILE); startActivity(intent); } - + private void registerAudioFile() { ContentValues content = new ContentValues(); content.put(MediaStore.MediaColumns.DATA, MEDIAFILE); @@ -148,9 +148,9 @@ private void registerAudioFile() { ContentResolver resolve = getContentResolver(); Uri uri = resolve.insert(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, content); sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, uri)); - + Toast.makeText(getBaseContext(), "AudioRecordExample registered with system.", Toast.LENGTH_SHORT).show(); - + finish(); } } diff --git a/AudioPlayer/src/com/oreilly/demo/pa/ch14/AudioRecorderViaIntent.java b/AudioPlayer/src/com/oreilly/demo/android/pa/audioplayer/AudioRecorderViaIntent.java similarity index 95% rename from AudioPlayer/src/com/oreilly/demo/pa/ch14/AudioRecorderViaIntent.java rename to AudioPlayer/src/com/oreilly/demo/android/pa/audioplayer/AudioRecorderViaIntent.java index 88c9fd4..51c8dff 100644 --- a/AudioPlayer/src/com/oreilly/demo/pa/ch14/AudioRecorderViaIntent.java +++ b/AudioPlayer/src/com/oreilly/demo/android/pa/audioplayer/AudioRecorderViaIntent.java @@ -1,4 +1,4 @@ -package com.oreilly.demo.pa.ch14; +package com.oreilly.demo.android.pa.audioplayer; import android.app.Activity; import android.content.Intent; diff --git a/AudioPlayer/src/com/oreilly/demo/pa/ch14/AudioRecorderWAudioRecord.java b/AudioPlayer/src/com/oreilly/demo/android/pa/audioplayer/AudioRecorderWAudioRecord.java similarity index 95% rename from AudioPlayer/src/com/oreilly/demo/pa/ch14/AudioRecorderWAudioRecord.java rename to AudioPlayer/src/com/oreilly/demo/android/pa/audioplayer/AudioRecorderWAudioRecord.java index aed4c5c..4d5f1fc 100644 --- a/AudioPlayer/src/com/oreilly/demo/pa/ch14/AudioRecorderWAudioRecord.java +++ b/AudioPlayer/src/com/oreilly/demo/android/pa/audioplayer/AudioRecorderWAudioRecord.java @@ -1,4 +1,4 @@ -package com.oreilly.demo.pa.ch14; +package com.oreilly.demo.android.pa.audioplayer; import java.io.BufferedOutputStream; import java.io.DataOutputStream; @@ -22,47 +22,47 @@ public class AudioRecorderWAudioRecord extends Activity implements Runnable { private static final String MEDIAFILE= "/sdcard/audiorecordwaudiorecordexample.pcm"; - + private AudioRecord recorder; private DataOutputStream dos; private boolean recordablestate = false; private int time = 0; - + @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - + setupView(); } - + @Override public void onDestroy() { super.onDestroy(); stopRecord(); } - + private void setupView() { setContentView(R.layout.audiorecorder); - + findViewById(R.id.recordstop).setOnClickListener(new OnClickListener() { - + @Override public void onClick(View v) { recordOrStop(); } - + }); - + findViewById(R.id.play).setOnClickListener(new OnClickListener() { - + @Override public void onClick(View v) { playAudio(); } - + }); } - + private void recordOrStop() { if(!recordablestate) { try { @@ -70,28 +70,28 @@ private void recordOrStop() { ImageButton button = (ImageButton) findViewById(R.id.recordstop); button.setImageResource(R.drawable.stop); findViewById(R.id.play).setVisibility(View.GONE); - + File mediafile = new File(MEDIAFILE); if(mediafile.exists()) { // delete mediafile if it already exists mediafile.delete(); } - + // create mediafile mediafile.createNewFile(); - + // setup DataOutputStream to write to file dos = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(mediafile))); - + // setup AudioRecord final short[] buffer = new short[10000]; - + recorder = new AudioRecord(MediaRecorder.AudioSource.MIC, // source to record from 44100,// frequency AudioFormat.CHANNEL_CONFIGURATION_MONO,// channel config.. mono, stereo, etc AudioFormat.ENCODING_PCM_16BIT,// audio encoding buffer.length// buffer size ); - + // start recording in a separate thread (new Thread() { @Override @@ -119,7 +119,7 @@ public void run() { } } }).start(); - + (new Thread(this)).start(); } catch (Exception e) { e.printStackTrace(); @@ -131,7 +131,7 @@ public void run() { findViewById(R.id.play).setVisibility(View.VISIBLE); } } - + private void stopRecord() { recordablestate = false; if(recorder != null) { @@ -145,7 +145,7 @@ private void stopRecord() { dos = null; } } - + private final Handler timeupdater = new Handler() { @Override public void handleMessage(Message msg) { @@ -153,7 +153,7 @@ public void handleMessage(Message msg) { ((TextView) findViewById(R.id.time)).setText(""+time+" secs"); } }; - + @Override public void run() { try { @@ -165,17 +165,17 @@ public void run() { } } catch (Exception t) { } } - + private void playAudio() { finish(); - + Intent intent = new Intent(this, AudioPlayerWAudioTrack.class); intent.putExtra(AudioPlayer.AUDIOFILEPATH, MEDIAFILE); startActivity(intent); } - - private final Handler notifyHandler = new Handler() { - public void handleMessage(Message msg) { + + private final Handler notifyHandler = new Handler() { + public void handleMessage(Message msg) { if(msg.obj != null && msg.obj instanceof String) notifyMsg((String) msg.obj); } }; diff --git a/AudioPlayer/src/com/oreilly/demo/pa/ch14/MultiMedia.java b/AudioPlayer/src/com/oreilly/demo/android/pa/audioplayer/MultiMedia.java similarity index 95% rename from AudioPlayer/src/com/oreilly/demo/pa/ch14/MultiMedia.java rename to AudioPlayer/src/com/oreilly/demo/android/pa/audioplayer/MultiMedia.java index 71d999f..efe11b2 100644 --- a/AudioPlayer/src/com/oreilly/demo/pa/ch14/MultiMedia.java +++ b/AudioPlayer/src/com/oreilly/demo/android/pa/audioplayer/MultiMedia.java @@ -1,4 +1,4 @@ -package com.oreilly.demo.pa.ch14; +package com.oreilly.demo.android.pa.audioplayer; import android.app.Activity; import android.content.Intent; @@ -11,86 +11,86 @@ public class MultiMedia extends Activity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); - + findViewById(R.id.audioplayer).setOnClickListener(new View.OnClickListener() { - + @Override public void onClick(View v) { startActivity(new Intent(getBaseContext(), AudioPlayer.class)); // Launch the AudioPlayer Example } - + }); findViewById(R.id.audioplayerwmediacontroller).setOnClickListener(new View.OnClickListener() { - + @Override public void onClick(View v) { startActivity(new Intent(getBaseContext(), AudioPlayerWMediaController.class)); // Launch the AudioPlayer W Media ControllerExample } - + }); - + findViewById(R.id.audioplayerwaudiotrack).setOnClickListener(new View.OnClickListener() { - + @Override public void onClick(View v) { startActivity(new Intent(getBaseContext(), AudioPlayerWAudioTrack.class)); // Launch the AudioPlayer W AudioTrack Example } - + }); - + findViewById(R.id.audiorecorder).setOnClickListener(new View.OnClickListener() { - + @Override public void onClick(View v) { startActivity(new Intent(getBaseContext(), AudioRecorder.class)); // Launch the AudioRecorder Example } - + }); - + findViewById(R.id.audiorecorderwaudiorecord).setOnClickListener(new View.OnClickListener() { - + @Override public void onClick(View v) { startActivity(new Intent(getBaseContext(), AudioRecorderWAudioRecord.class)); // Launch the AudioRecorder W AudioRecord Example } - + }); - + findViewById(R.id.audiorecorderintent).setOnClickListener(new View.OnClickListener() { - + @Override public void onClick(View v) { startActivity(new Intent(getBaseContext(), AudioRecorderViaIntent.class)); // Launch the AudioRecorder By Intent Example } - + }); - + findViewById(R.id.videoplayer).setOnClickListener(new View.OnClickListener() { - + @Override public void onClick(View v) { startActivity(new Intent(getBaseContext(), VideoPlayer.class)); // Launch the VideoPlayer Example } - + }); - + findViewById(R.id.videorecorder).setOnClickListener(new View.OnClickListener() { - + @Override public void onClick(View v) { startActivity(new Intent(getBaseContext(), VideoRecorder.class)); // Launch the VideoRecorder Example } - + }); - + findViewById(R.id.videorecorderintent).setOnClickListener(new View.OnClickListener() { - + @Override public void onClick(View v) { startActivity(new Intent(getBaseContext(), VideoRecorderViaIntent.class)); // Launch the VideoRecorder By Intent Example } - + }); } } diff --git a/AudioPlayer/src/com/oreilly/demo/pa/ch14/VideoPlayer.java b/AudioPlayer/src/com/oreilly/demo/android/pa/audioplayer/VideoPlayer.java similarity index 97% rename from AudioPlayer/src/com/oreilly/demo/pa/ch14/VideoPlayer.java rename to AudioPlayer/src/com/oreilly/demo/android/pa/audioplayer/VideoPlayer.java index b65bc6d..044a93b 100644 --- a/AudioPlayer/src/com/oreilly/demo/pa/ch14/VideoPlayer.java +++ b/AudioPlayer/src/com/oreilly/demo/android/pa/audioplayer/VideoPlayer.java @@ -1,4 +1,4 @@ -package com.oreilly.demo.pa.ch14; +package com.oreilly.demo.android.pa.audioplayer; import java.io.File; @@ -15,7 +15,7 @@ public class VideoPlayer extends Activity { public static final String VIDEOFILEPATH = "VideoFilePath"; private static final String MEDIAFILE = "/sdcard/videorecordexample.mp4"; private static final String SAMPLEURI = null; - + private Uri videouri; private String videopath; private MediaController mediacontroller; @@ -23,7 +23,7 @@ public class VideoPlayer extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - + if(getIntent() != null) { if(getIntent().hasExtra(VIDEOURI)) { videouri = getIntent().getParcelableExtra(VIDEOURI); @@ -31,7 +31,7 @@ public void onCreate(Bundle savedInstanceState) { videopath = getIntent().getStringExtra(VIDEOFILEPATH); } } - + if(videouri == null && videopath == null) { if(SAMPLEURI != null) videouri = Uri.parse(SAMPLEURI); else { @@ -43,18 +43,18 @@ public void onCreate(Bundle savedInstanceState) { } } } - + setContentView(R.layout.videoplayer); - + setupVideoView(); } - + @Override public boolean onTouchEvent(MotionEvent event) { if(mediacontroller != null) mediacontroller.show(0); return super.onTouchEvent(event); } - + private void setupVideoView() { VideoView videoview = (VideoView) findViewById(R.id.videoview); videoview.setKeepScreenOn(true); diff --git a/AudioPlayer/src/com/oreilly/demo/pa/ch14/VideoRecorder.java b/AudioPlayer/src/com/oreilly/demo/android/pa/audioplayer/VideoRecorder.java similarity index 97% rename from AudioPlayer/src/com/oreilly/demo/pa/ch14/VideoRecorder.java rename to AudioPlayer/src/com/oreilly/demo/android/pa/audioplayer/VideoRecorder.java index 58fc1de..8f77d10 100644 --- a/AudioPlayer/src/com/oreilly/demo/pa/ch14/VideoRecorder.java +++ b/AudioPlayer/src/com/oreilly/demo/android/pa/audioplayer/VideoRecorder.java @@ -1,4 +1,4 @@ -package com.oreilly.demo.pa.ch14; +package com.oreilly.demo.android.pa.audioplayer; import java.io.File; @@ -26,47 +26,47 @@ public class VideoRecorder extends Activity implements Runnable, SurfaceHolder.C @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - + setupView(); } - + @Override public void onDestroy() { super.onDestroy(); recordablestate = false; if(mediarecorder != null) mediarecorder.release(); } - + private void setupView() { setContentView(R.layout.videorecorder); findViewById(R.id.recordstop).setEnabled(false); - - + + videoview = (VideoView) findViewById(R.id.videosurface); final SurfaceHolder holder = videoview.getHolder(); holder.addCallback(this); holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); - + findViewById(R.id.recordstop).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { recordOrStop(holder); } - + }); - + findViewById(R.id.play).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { playVideo(); } - + }); - + } - + private void recordOrStop(SurfaceHolder holder) { if(!recordablestate) { try { @@ -75,12 +75,12 @@ private void recordOrStop(SurfaceHolder holder) { mediafile.delete(); } mediafile = null; - + recordablestate = true; ImageButton button = (ImageButton) findViewById(R.id.recordstop); button.setImageResource(R.drawable.stop); findViewById(R.id.play).setVisibility(View.GONE); - + if(mediarecorder == null) mediarecorder = new MediaRecorder(); mediarecorder.setAudioSource(MediaRecorder.AudioSource.MIC); mediarecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); @@ -91,7 +91,7 @@ private void recordOrStop(SurfaceHolder holder) { mediarecorder.setPreviewDisplay(holder.getSurface()); mediarecorder.prepare(); mediarecorder.start(); - + (new Thread(this)).start(); } catch (Exception e) { e.printStackTrace(); @@ -105,7 +105,7 @@ private void recordOrStop(SurfaceHolder holder) { findViewById(R.id.play).setVisibility(View.VISIBLE); } } - + private final Handler timeupdater = new Handler() { @Override public void handleMessage(Message msg) { @@ -113,7 +113,7 @@ public void handleMessage(Message msg) { ((TextView) findViewById(R.id.time)).setText(""+time+" secs"); } }; - + @Override public void run() { try { @@ -125,10 +125,10 @@ public void run() { } } catch (Exception t) { } } - + private void playVideo() { finish(); - + Intent intent = new Intent(this, VideoPlayer.class); intent.putExtra(VideoPlayer.VIDEOFILEPATH, MEDIAFILE); startActivity(intent); @@ -136,7 +136,7 @@ private void playVideo() { @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { - + } @Override @@ -146,6 +146,6 @@ public void surfaceCreated(SurfaceHolder holder) { @Override public void surfaceDestroyed(SurfaceHolder holder) { - + } } diff --git a/AudioPlayer/src/com/oreilly/demo/pa/ch14/VideoRecorderViaIntent.java b/AudioPlayer/src/com/oreilly/demo/android/pa/audioplayer/VideoRecorderViaIntent.java similarity index 94% rename from AudioPlayer/src/com/oreilly/demo/pa/ch14/VideoRecorderViaIntent.java rename to AudioPlayer/src/com/oreilly/demo/android/pa/audioplayer/VideoRecorderViaIntent.java index 65e1494..aca0f1a 100644 --- a/AudioPlayer/src/com/oreilly/demo/pa/ch14/VideoRecorderViaIntent.java +++ b/AudioPlayer/src/com/oreilly/demo/android/pa/audioplayer/VideoRecorderViaIntent.java @@ -1,4 +1,4 @@ -package com.oreilly.demo.pa.ch14; +package com.oreilly.demo.android.pa.audioplayer; import android.app.Activity; import android.content.Intent; diff --git a/AudioPlayer/build.xml b/AudioPlayer/tools/ant/build.xml similarity index 100% rename from AudioPlayer/build.xml rename to AudioPlayer/tools/ant/build.xml diff --git a/ClientDemo/AndroidManifest.xml b/ClientDemo/AndroidManifest.xml index 878d317..3d69929 100644 --- a/ClientDemo/AndroidManifest.xml +++ b/ClientDemo/AndroidManifest.xml @@ -1,6 +1,6 @@ @@ -31,10 +31,10 @@ - + - + diff --git a/ClientDemo/res/xml/authenticator.xml b/ClientDemo/res/xml/authenticator.xml index b5c5534..009a540 100644 --- a/ClientDemo/res/xml/authenticator.xml +++ b/ClientDemo/res/xml/authenticator.xml @@ -6,7 +6,7 @@ --> - diff --git a/ClientDemo/src/com/oreilly/demo/pa/ch17/account/AccountActivity.java b/ClientDemo/src/com/oreilly/demo/android/pa/clientserver/client/account/AccountActivity.java similarity index 93% rename from ClientDemo/src/com/oreilly/demo/pa/ch17/account/AccountActivity.java rename to ClientDemo/src/com/oreilly/demo/android/pa/clientserver/client/account/AccountActivity.java index 5b4ec4f..2e3002b 100644 --- a/ClientDemo/src/com/oreilly/demo/pa/ch17/account/AccountActivity.java +++ b/ClientDemo/src/com/oreilly/demo/android/pa/clientserver/client/account/AccountActivity.java @@ -1,6 +1,5 @@ -package com.oreilly.demo.pa.ch17.account; +package com.oreilly.demo.android.pa.clientserver.client.account; -import com.oreilly.demo.pa.ch17.R; import android.app.Activity; import android.app.AlertDialog; import android.content.ContentResolver; @@ -17,15 +16,17 @@ import android.widget.SimpleCursorAdapter; import android.widget.AdapterView.OnItemClickListener; +import com.oreilly.demo.android.pa.clientserver.client.R; + public class AccountActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.account); - + setupView(); } - + private void setupView() { findViewById(R.id.add).setOnClickListener(new OnClickListener() { @Override @@ -33,11 +34,11 @@ public void onClick(View v) { startActivity(new Intent(getBaseContext(), AccountAddActivity.class)); } }); - + ListView contactlist = (ListView) findViewById(R.id.contactlist); - + final Cursor cursor = getContacts(); - + contactlist.setOnItemClickListener(new OnItemClickListener() { @Override @@ -63,43 +64,43 @@ public void onClick(DialogInterface dialog, int which) { }); builder.create().show(); } - + }); - - + + String[] fields = new String[] { ContactsContract.Data.DISPLAY_NAME }; - SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, - R.layout.contact, + SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, + R.layout.contact, cursor, - fields, + fields, new int[] {R.id.name}); contactlist.setAdapter(adapter); } - + private Cursor getContacts() { Uri uri = ContactsContract.Contacts.CONTENT_URI; - + String[] projection = new String[] { ContactsContract.Contacts._ID, ContactsContract.Contacts.LOOKUP_KEY, ContactsContract.Contacts.DISPLAY_NAME }; - + String selection = null; String[] selectionArgs = null; String sortOrder = ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC"; return managedQuery(uri, projection, selection, selectionArgs, sortOrder); } - + private void deleteContact(Cursor cursor, int position) { cursor.moveToPosition(position); long id = cursor.getLong(0); String lookupkey = cursor.getString(1); Uri uri = ContactsContract.Contacts.getLookupUri(id, lookupkey); - + String[] selectionArgs = null; String where = null; ContentResolver cr = getContentResolver(); diff --git a/ClientDemo/src/com/oreilly/demo/pa/ch17/account/AccountAddActivity.java b/ClientDemo/src/com/oreilly/demo/android/pa/clientserver/client/account/AccountAddActivity.java similarity index 94% rename from ClientDemo/src/com/oreilly/demo/pa/ch17/account/AccountAddActivity.java rename to ClientDemo/src/com/oreilly/demo/android/pa/clientserver/client/account/AccountAddActivity.java index c36bfe7..e7afd88 100644 --- a/ClientDemo/src/com/oreilly/demo/pa/ch17/account/AccountAddActivity.java +++ b/ClientDemo/src/com/oreilly/demo/android/pa/clientserver/client/account/AccountAddActivity.java @@ -1,9 +1,7 @@ -package com.oreilly.demo.pa.ch17.account; +package com.oreilly.demo.android.pa.clientserver.client.account; import java.util.ArrayList; -import com.oreilly.demo.pa.ch17.R; - import android.app.Activity; import android.content.ContentProviderOperation; import android.os.Bundle; @@ -13,15 +11,17 @@ import android.widget.EditText; import android.widget.Toast; +import com.oreilly.demo.android.pa.clientserver.client.R; + public class AccountAddActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.accountadd); - + setUpView(); - } - + } + private void setUpView() { findViewById(R.id.add).setOnClickListener(new OnClickListener() { @Override @@ -29,7 +29,7 @@ public void onClick(View v) { add(); } }); - + findViewById(R.id.cancel).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { @@ -37,20 +37,20 @@ public void onClick(View v) { } }); } - + private void add() { EditText name = (EditText) findViewById(R.id.name); EditText phone = (EditText) findViewById(R.id.phone); - + if(name.getText() == null || name.getText().toString().trim().length() < 1) { Toast.makeText(this, "Contacts must have a name", Toast.LENGTH_SHORT); return; } - + String accountname = null; String accounttype = null; - - + + // we are not assigning to any particular account but if we wish to we would // get the accounts this way /* @@ -58,22 +58,22 @@ private void add() { accountname = accounts[0].name; accounttype = accounts[0].type; */ - + ArrayList ops = new ArrayList(); - + ops.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI) .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, accountname) .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, accounttype) .build()); - + ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI) .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0) .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE) .withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, name.getText().toString().trim()) .build()); - + // if there is a phone num we add it - if(phone.getText() != null && phone.getText().toString().trim().length() > 0) { + if(phone.getText() != null && phone.getText().toString().trim().length() > 0) { ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI) .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0) .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE) @@ -81,7 +81,7 @@ private void add() { .withValue(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_HOME) .build()); } - + try { getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops); } catch (Exception e) { @@ -89,7 +89,7 @@ private void add() { Toast.makeText(this, "Something bad happened! "+e.getMessage(), Toast.LENGTH_SHORT); return; } - + finish(); } } \ No newline at end of file diff --git a/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/LoginActivity.java b/ClientDemo/src/com/oreilly/demo/android/pa/clientserver/client/sync/LoginActivity.java similarity index 94% rename from ClientDemo/src/com/oreilly/demo/pa/ch17/sync/LoginActivity.java rename to ClientDemo/src/com/oreilly/demo/android/pa/clientserver/client/sync/LoginActivity.java index 0dc0cd2..ba434d4 100644 --- a/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/LoginActivity.java +++ b/ClientDemo/src/com/oreilly/demo/android/pa/clientserver/client/sync/LoginActivity.java @@ -1,10 +1,9 @@ -package com.oreilly.demo.pa.ch17.sync; +package com.oreilly.demo.android.pa.clientserver.client.sync; import org.json.JSONObject; - -import com.oreilly.demo.pa.ch17.R; -import com.oreilly.demo.pa.ch17.sync.authsync.Authenticator; +import com.oreilly.demo.android.pa.clientserver.client.R; +import com.oreilly.demo.android.pa.clientserver.client.sync.authsync.Authenticator; import android.accounts.Account; import android.accounts.AccountAuthenticatorActivity; @@ -26,17 +25,17 @@ public class LoginActivity extends AccountAuthenticatorActivity { public static final String PARAM_AUTHTOKEN_TYPE = "authtokenType"; public static final String PARAM_USERNAME = "username"; public static final String PARAM_PASSWORD = "password"; - + private String username; private String password; - + @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getVars(); setupView(); } - + @Override protected Dialog onCreateDialog(int id) { final ProgressDialog dialog = new ProgressDialog(this); @@ -45,33 +44,33 @@ protected Dialog onCreateDialog(int id) { dialog.setCancelable(false); return dialog; } - + private void getVars() { username = getIntent().getStringExtra(PARAM_USERNAME); } - + private void setupView() { setContentView(R.layout.login); - + findViewById(R.id.login).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { login(); } }); - + findViewById(R.id.settings).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { startActivity(new Intent(getBaseContext(), Settings.class)); } }); - + if(username != null) { ((EditText) findViewById(R.id.username)).setText(username); } } - + private void login() { if(((EditText) findViewById(R.id.username)).getText() == null || ((EditText) findViewById(R.id.username)).getText().toString().trim().length() < 1) { @@ -83,12 +82,12 @@ private void login() { Toast.makeText(this, "Please enter a Password", Toast.LENGTH_SHORT).show(); return; } - + username = ((EditText) findViewById(R.id.username)).getText().toString(); password = ((EditText) findViewById(R.id.password)).getText().toString(); - + showDialog(0); - + Handler loginHandler = new Handler() { @Override public void handleMessage(Message msg) { @@ -100,13 +99,13 @@ public void handleMessage(Message msg) { } } }; - + NetworkUtil.login(NetworkUtil.hosturl != null ? NetworkUtil.hosturl : getString(R.string.baseurl), username, password, loginHandler); } - + private void handleLoginResponse(JSONObject resp) { dismissDialog(0); - + final Account account = new Account(username, Authenticator.ACCOUNT_TYPE); if (getIntent().getStringExtra(PARAM_USERNAME) == null) { @@ -115,7 +114,7 @@ private void handleLoginResponse(JSONObject resp) { } else { AccountManager.get(this).setPassword(account, password); } - + Intent intent = new Intent(); intent.putExtra(AccountManager.KEY_ACCOUNT_NAME, username); intent.putExtra(AccountManager.KEY_ACCOUNT_TYPE, Authenticator.ACCOUNT_TYPE); diff --git a/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/NetworkUtil.java b/ClientDemo/src/com/oreilly/demo/android/pa/clientserver/client/sync/NetworkUtil.java similarity index 98% rename from ClientDemo/src/com/oreilly/demo/pa/ch17/sync/NetworkUtil.java rename to ClientDemo/src/com/oreilly/demo/android/pa/clientserver/client/sync/NetworkUtil.java index 20440de..e5e13d9 100644 --- a/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/NetworkUtil.java +++ b/ClientDemo/src/com/oreilly/demo/android/pa/clientserver/client/sync/NetworkUtil.java @@ -1,4 +1,4 @@ -package com.oreilly.demo.pa.ch17.sync; +package com.oreilly.demo.android.pa.clientserver.client.sync; import java.io.BufferedReader; import java.io.InputStream; diff --git a/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/Settings.java b/ClientDemo/src/com/oreilly/demo/android/pa/clientserver/client/sync/Settings.java similarity index 90% rename from ClientDemo/src/com/oreilly/demo/pa/ch17/sync/Settings.java rename to ClientDemo/src/com/oreilly/demo/android/pa/clientserver/client/sync/Settings.java index e249bab..4574cf0 100644 --- a/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/Settings.java +++ b/ClientDemo/src/com/oreilly/demo/android/pa/clientserver/client/sync/Settings.java @@ -1,6 +1,4 @@ -package com.oreilly.demo.pa.ch17.sync; - -import com.oreilly.demo.pa.ch17.R; +package com.oreilly.demo.android.pa.clientserver.client.sync; import android.app.Activity; import android.os.Bundle; @@ -12,34 +10,36 @@ import android.widget.EditText; import android.widget.TextView; +import com.oreilly.demo.android.pa.clientserver.client.R; + public class Settings extends Activity { private final Handler saveHandler = new Handler() { public void handleMessage(Message msg) { save(); }}; - + public final Button.OnClickListener save = new Button.OnClickListener() { public void onClick(View v) { saveHandler.sendEmptyMessage(0); } }; - + @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.settings); - + setup(); } - + private void setup() { ((TextView) findViewById(R.id.host)).setText(NetworkUtil.hosturl != null ? NetworkUtil.hosturl : getString(R.string.baseurl)); - + findViewById(R.id.save).setOnClickListener(save); } - + private void save() { Editable e = ((EditText) findViewById(R.id.host)).getText(); if(e == null || e.toString() == null || e.toString().trim().length() == 0) NetworkUtil.hosturl = null; else NetworkUtil.hosturl = e.toString().trim(); - + finish(); } } diff --git a/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/authsync/AuthenticationService.java b/ClientDemo/src/com/oreilly/demo/android/pa/clientserver/client/sync/authsync/AuthenticationService.java similarity index 87% rename from ClientDemo/src/com/oreilly/demo/pa/ch17/sync/authsync/AuthenticationService.java rename to ClientDemo/src/com/oreilly/demo/android/pa/clientserver/client/sync/authsync/AuthenticationService.java index ac5e6dd..7301354 100644 --- a/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/authsync/AuthenticationService.java +++ b/ClientDemo/src/com/oreilly/demo/android/pa/clientserver/client/sync/authsync/AuthenticationService.java @@ -1,4 +1,4 @@ -package com.oreilly.demo.pa.ch17.sync.authsync; +package com.oreilly.demo.android.pa.clientserver.client.sync.authsync; import android.app.Service; import android.content.Intent; diff --git a/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/authsync/Authenticator.java b/ClientDemo/src/com/oreilly/demo/android/pa/clientserver/client/sync/authsync/Authenticator.java similarity index 93% rename from ClientDemo/src/com/oreilly/demo/pa/ch17/sync/authsync/Authenticator.java rename to ClientDemo/src/com/oreilly/demo/android/pa/clientserver/client/sync/authsync/Authenticator.java index 4a93e53..afd8f66 100644 --- a/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/authsync/Authenticator.java +++ b/ClientDemo/src/com/oreilly/demo/android/pa/clientserver/client/sync/authsync/Authenticator.java @@ -1,11 +1,11 @@ -package com.oreilly.demo.pa.ch17.sync.authsync; +package com.oreilly.demo.android.pa.clientserver.client.sync.authsync; import org.json.JSONObject; -import com.oreilly.demo.pa.ch17.R; -import com.oreilly.demo.pa.ch17.sync.LoginActivity; -import com.oreilly.demo.pa.ch17.sync.NetworkUtil; +import com.oreilly.demo.android.pa.clientserver.client.R; +import com.oreilly.demo.android.pa.clientserver.client.sync.LoginActivity; +import com.oreilly.demo.android.pa.clientserver.client.sync.NetworkUtil; import android.accounts.AbstractAccountAuthenticator; import android.accounts.Account; @@ -16,9 +16,9 @@ import android.os.Bundle; public class Authenticator extends AbstractAccountAuthenticator { - public static final String AUTHTOKEN_TYPE = "com.oreilly.demo.pa.ch17.sync"; - public static final String ACCOUNT_TYPE = "com.oreilly.demo.pa.ch17.sync"; - + public static final String AUTHTOKEN_TYPE = "com.oreilly.demo.android.pa.clientserver.sync"; + public static final String ACCOUNT_TYPE = "com.oreilly.demo.android.pa.clientserver.sync"; + private final Context context; public Authenticator(Context context) { diff --git a/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/authsync/SyncAdapter.java b/ClientDemo/src/com/oreilly/demo/android/pa/clientserver/client/sync/authsync/SyncAdapter.java similarity index 88% rename from ClientDemo/src/com/oreilly/demo/pa/ch17/sync/authsync/SyncAdapter.java rename to ClientDemo/src/com/oreilly/demo/android/pa/clientserver/client/sync/authsync/SyncAdapter.java index 8393892..c68960f 100644 --- a/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/authsync/SyncAdapter.java +++ b/ClientDemo/src/com/oreilly/demo/android/pa/clientserver/client/sync/authsync/SyncAdapter.java @@ -1,4 +1,4 @@ -package com.oreilly.demo.pa.ch17.sync.authsync; +package com.oreilly.demo.android.pa.clientserver.client.sync.authsync; import java.util.ArrayList; @@ -16,11 +16,11 @@ import android.provider.ContactsContract; import android.provider.ContactsContract.RawContacts; -import com.oreilly.demo.pa.ch17.R; -import com.oreilly.demo.pa.ch17.sync.NetworkUtil; -import com.oreilly.demo.pa.ch17.sync.dataobjects.Change; -import com.oreilly.demo.pa.ch17.sync.dataobjects.ListFriends; -import com.oreilly.demo.pa.ch17.sync.dataobjects.User; +import com.oreilly.demo.android.pa.clientserver.client.R; +import com.oreilly.demo.android.pa.clientserver.client.sync.NetworkUtil; +import com.oreilly.demo.android.pa.clientserver.client.sync.dataobjects.Change; +import com.oreilly.demo.android.pa.clientserver.client.sync.dataobjects.ListFriends; +import com.oreilly.demo.android.pa.clientserver.client.sync.dataobjects.User; public class SyncAdapter extends AbstractThreadedSyncAdapter { private final Context context; @@ -37,39 +37,39 @@ public void onPerformSync(Account account, Bundle extras, String authority, Cont String authtoken = null; try { authtoken = AccountManager.get(context).blockingGetAuthToken(account, Authenticator.AUTHTOKEN_TYPE, true); - + ListFriends friendsdata = ListFriends.fromJSON(NetworkUtil.getFriends(NetworkUtil.hosturl != null ? NetworkUtil.hosturl : context.getString(R.string.baseurl), authtoken, lastsynctime, null)); - + lastsynctime = friendsdata.time; - + sync(account, friendsdata); } catch (Exception e) { e.printStackTrace(); - } + } } - + private void sync(Account account, ListFriends data) { User self = new User(); self.username = account.name; - + ArrayList ops = new ArrayList(); - - if(data.history != null && !data.history.isEmpty()) { + + if(data.history != null && !data.history.isEmpty()) { for(Change change : data.history) { if(change.type == Change.ChangeType.DELETE) { ContentProviderOperation op = delete(account, change.who); if(op != null) ops.add(op); - } + } } } - + if(data.friends != null && !data.friends.isEmpty()) { for(User f : data.friends) { ArrayList op = add(account, f); if(op != null) ops.addAll(op); } } - + if(!ops.isEmpty()) { try { context.getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops); @@ -78,19 +78,19 @@ private void sync(Account account, ListFriends data) { } } } - + private ArrayList add(Account account, User f) { long rawid = lookupRawContact(f.id); - + if(rawid != 0) return null; ArrayList ops = new ArrayList(); ops.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI) .withValue(RawContacts.SOURCE_ID, 0) - .withValue(RawContacts.SYNC1, f.id) + .withValue(RawContacts.SYNC1, f.id) .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, Authenticator.ACCOUNT_TYPE) .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, account.name) .build()); - + if(f.name != null && f.name.trim().length() > 0) { ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI) .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0) @@ -98,7 +98,7 @@ private ArrayList add(Account account, User f) { .withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, f.name) .build()); } - + if(f.phone != null && f.phone.trim().length() > 0) { ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI) .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0) @@ -107,17 +107,17 @@ private ArrayList add(Account account, User f) { .withValue(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_HOME) .build()); } - + ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI) .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0) - .withValue(ContactsContract.Data.MIMETYPE, "vnd.android.cursor.item/vnd.com.oreilly.demo.pa.ch17.sync.profile") + .withValue(ContactsContract.Data.MIMETYPE, "vnd.android.cursor.item/vnd.com.oreilly.demo.android.pa.clientserver.sync.profile") .withValue(ContactsContract.Data.DATA2, "Ch15 Profile") .withValue(ContactsContract.Data.DATA3, "View profile") .build() ); return ops; } - + private ContentProviderOperation delete(Account account, long id) { long rawid = lookupRawContact(id); if(rawid == 0) return null; @@ -125,11 +125,11 @@ private ContentProviderOperation delete(Account account, long id) { ContentUris.withAppendedId(ContactsContract.RawContacts.CONTENT_URI, rawid)) .build(); } - + private long lookupRawContact(long id) { long rawid = 0; Cursor c = context.getContentResolver().query(RawContacts.CONTENT_URI, new String[] {RawContacts._ID}, - RawContacts.ACCOUNT_TYPE + "='" + Authenticator.ACCOUNT_TYPE + "' AND "+ RawContacts.SYNC1 + "=?", + RawContacts.ACCOUNT_TYPE + "='" + Authenticator.ACCOUNT_TYPE + "' AND "+ RawContacts.SYNC1 + "=?", new String[] {String.valueOf(id)}, null); try { diff --git a/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/authsync/SyncService.java b/ClientDemo/src/com/oreilly/demo/android/pa/clientserver/client/sync/authsync/SyncService.java similarity index 89% rename from ClientDemo/src/com/oreilly/demo/pa/ch17/sync/authsync/SyncService.java rename to ClientDemo/src/com/oreilly/demo/android/pa/clientserver/client/sync/authsync/SyncService.java index f358577..13d750e 100644 --- a/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/authsync/SyncService.java +++ b/ClientDemo/src/com/oreilly/demo/android/pa/clientserver/client/sync/authsync/SyncService.java @@ -1,4 +1,4 @@ -package com.oreilly.demo.pa.ch17.sync.authsync; +package com.oreilly.demo.android.pa.clientserver.client.sync.authsync; import android.app.Service; import android.content.Intent; diff --git a/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/dataobjects/Change.java b/ClientDemo/src/com/oreilly/demo/android/pa/clientserver/client/sync/dataobjects/Change.java similarity index 94% rename from ClientDemo/src/com/oreilly/demo/pa/ch17/sync/dataobjects/Change.java rename to ClientDemo/src/com/oreilly/demo/android/pa/clientserver/client/sync/dataobjects/Change.java index de4bde7..9b4c104 100644 --- a/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/dataobjects/Change.java +++ b/ClientDemo/src/com/oreilly/demo/android/pa/clientserver/client/sync/dataobjects/Change.java @@ -1,4 +1,4 @@ -package com.oreilly.demo.pa.ch17.sync.dataobjects; +package com.oreilly.demo.android.pa.clientserver.client.sync.dataobjects; import org.json.JSONObject; diff --git a/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/dataobjects/ListFriends.java b/ClientDemo/src/com/oreilly/demo/android/pa/clientserver/client/sync/dataobjects/ListFriends.java similarity index 96% rename from ClientDemo/src/com/oreilly/demo/pa/ch17/sync/dataobjects/ListFriends.java rename to ClientDemo/src/com/oreilly/demo/android/pa/clientserver/client/sync/dataobjects/ListFriends.java index 74c799e..46d196a 100644 --- a/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/dataobjects/ListFriends.java +++ b/ClientDemo/src/com/oreilly/demo/android/pa/clientserver/client/sync/dataobjects/ListFriends.java @@ -1,4 +1,4 @@ -package com.oreilly.demo.pa.ch17.sync.dataobjects; +package com.oreilly.demo.android.pa.clientserver.client.sync.dataobjects; import java.util.ArrayList; import java.util.Collections; diff --git a/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/dataobjects/User.java b/ClientDemo/src/com/oreilly/demo/android/pa/clientserver/client/sync/dataobjects/User.java similarity index 97% rename from ClientDemo/src/com/oreilly/demo/pa/ch17/sync/dataobjects/User.java rename to ClientDemo/src/com/oreilly/demo/android/pa/clientserver/client/sync/dataobjects/User.java index ea233f7..bbe59f8 100644 --- a/ClientDemo/src/com/oreilly/demo/pa/ch17/sync/dataobjects/User.java +++ b/ClientDemo/src/com/oreilly/demo/android/pa/clientserver/client/sync/dataobjects/User.java @@ -1,4 +1,4 @@ -package com.oreilly.demo.pa.ch17.sync.dataobjects; +package com.oreilly.demo.android.pa.clientserver.client.sync.dataobjects; import java.util.ArrayList; import java.util.Collections; diff --git a/ClientDemo/build.xml b/ClientDemo/tools/ant/build.xml similarity index 100% rename from ClientDemo/build.xml rename to ClientDemo/tools/ant/build.xml diff --git a/ContactViewer/AndroidManifest.xml b/ContactViewer/AndroidManifest.xml index 08edc96..d53ac4e 100755 --- a/ContactViewer/AndroidManifest.xml +++ b/ContactViewer/AndroidManifest.xml @@ -1,6 +1,6 @@ @@ -15,7 +15,6 @@ - + diff --git a/ContactViewer/project.properties b/ContactViewer/project.properties index 730e911..9598580 100644 --- a/ContactViewer/project.properties +++ b/ContactViewer/project.properties @@ -8,4 +8,4 @@ # project structure. # Project target. -target=android-14 +target=android-6 diff --git a/ContactViewer/res/layout-port/main.xml b/ContactViewer/res/layout-port/main.xml index 412c769..7960852 100755 --- a/ContactViewer/res/layout-port/main.xml +++ b/ContactViewer/res/layout-port/main.xml @@ -7,7 +7,7 @@ > - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/FinchFrameworkTest/AndroidManifest.xml b/FinchFrameworkTest/AndroidManifest.xml index fb56f27..93a6f16 100644 --- a/FinchFrameworkTest/AndroidManifest.xml +++ b/FinchFrameworkTest/AndroidManifest.xml @@ -11,7 +11,7 @@ android:targetPackage="com.finchframework.finch" /> diff --git a/FinchLifecycle/AndroidManifest.xml b/FinchLifecycle/AndroidManifest.xml index a0b69cb..12576d4 100644 --- a/FinchLifecycle/AndroidManifest.xml +++ b/FinchLifecycle/AndroidManifest.xml @@ -1,11 +1,11 @@ - + diff --git a/FinchLifecycle/src/com/oreilly/demo/pa/ch10/finchlifecycle/FinchApplication.java b/FinchLifecycle/src/com/oreilly/demo/android/pa/finchlifecycle/FinchApplication.java similarity index 95% rename from FinchLifecycle/src/com/oreilly/demo/pa/ch10/finchlifecycle/FinchApplication.java rename to FinchLifecycle/src/com/oreilly/demo/android/pa/finchlifecycle/FinchApplication.java index 58f65ca..dcb4cd6 100644 --- a/FinchLifecycle/src/com/oreilly/demo/pa/ch10/finchlifecycle/FinchApplication.java +++ b/FinchLifecycle/src/com/oreilly/demo/android/pa/finchlifecycle/FinchApplication.java @@ -1,4 +1,4 @@ -package com.oreilly.demo.pa.ch10.finchlifecycle; +package com.oreilly.demo.android.pa.finchlifecycle; import android.app.Application; import android.content.res.Configuration; diff --git a/FinchLifecycle/src/com/oreilly/demo/pa/ch10/finchlifecycle/FinchLifecycle.java b/FinchLifecycle/src/com/oreilly/demo/android/pa/finchlifecycle/FinchLifecycle.java similarity index 97% rename from FinchLifecycle/src/com/oreilly/demo/pa/ch10/finchlifecycle/FinchLifecycle.java rename to FinchLifecycle/src/com/oreilly/demo/android/pa/finchlifecycle/FinchLifecycle.java index 14a52c6..8b6abdf 100644 --- a/FinchLifecycle/src/com/oreilly/demo/pa/ch10/finchlifecycle/FinchLifecycle.java +++ b/FinchLifecycle/src/com/oreilly/demo/android/pa/finchlifecycle/FinchLifecycle.java @@ -1,10 +1,9 @@ -package com.oreilly.demo.pa.ch10.finchlifecycle; +package com.oreilly.demo.android.pa.finchlifecycle; import android.app.Activity; import android.os.Bundle; import android.util.Log; -import android.view.Menu; -import android.view.MenuItem; + public class FinchLifecycle extends Activity { @@ -71,7 +70,7 @@ protected void onDestroy() { // Log which, if any, configuration changed + Integer.toString(getChangingConfigurations(), 16)); } - + // //////////////////////////////////////////////////////////////////////////// // Called during the lifecycle, when instance state should be saved/restored // //////////////////////////////////////////////////////////////////////////// diff --git a/FinchLifecycle/src/com/oreilly/demo/pa/ch10/finchlifecycle/TestFragment.java b/FinchLifecycle/src/com/oreilly/demo/android/pa/finchlifecycle/TestFragment.java similarity index 96% rename from FinchLifecycle/src/com/oreilly/demo/pa/ch10/finchlifecycle/TestFragment.java rename to FinchLifecycle/src/com/oreilly/demo/android/pa/finchlifecycle/TestFragment.java index e0e3aca..6c52efc 100644 --- a/FinchLifecycle/src/com/oreilly/demo/pa/ch10/finchlifecycle/TestFragment.java +++ b/FinchLifecycle/src/com/oreilly/demo/android/pa/finchlifecycle/TestFragment.java @@ -1,4 +1,4 @@ -package com.oreilly.demo.pa.ch10.finchlifecycle; +package com.oreilly.demo.android.pa.finchlifecycle; import android.app.Activity; import android.app.Fragment; @@ -9,7 +9,7 @@ import android.view.ViewGroup; public class TestFragment extends Fragment { - + // get a label for our log entries private final String TAG = this.getClass().getSimpleName(); @@ -39,37 +39,37 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Log.i(TAG, "onCreateView"); return v; } - + @Override public void onActivityCreated(Bundle saved) { super.onActivityCreated(saved); Log.i(TAG, "onActivityCreated"); } - + @Override public void onStart() { super.onStart(); Log.i(TAG, "onStart"); } - + @Override public void onResume() { super.onResume(); Log.i(TAG, "onResume"); } - + @Override public void onPause() { super.onPause(); Log.i(TAG, "onPause"); } - + @Override public void onStop() { super.onStop(); Log.i(TAG, "onStop"); } - + // //////////////////////////////////////////////////////////////////////////// // Called during the lifecycle, when instance state should be saved/restored // //////////////////////////////////////////////////////////////////////////// diff --git a/FinchLifecycle/build.xml b/FinchLifecycle/tools/ant/build.xml similarity index 100% rename from FinchLifecycle/build.xml rename to FinchLifecycle/tools/ant/build.xml diff --git a/FinchLifecycleBackport/AndroidManifest.xml b/FinchLifecycleBackport/AndroidManifest.xml index 8cbb29b..94dc749 100644 --- a/FinchLifecycleBackport/AndroidManifest.xml +++ b/FinchLifecycleBackport/AndroidManifest.xml @@ -1,11 +1,11 @@ - + diff --git a/FinchLifecycleBackport/project.properties b/FinchLifecycleBackport/project.properties index 730e911..9598580 100644 --- a/FinchLifecycleBackport/project.properties +++ b/FinchLifecycleBackport/project.properties @@ -8,4 +8,4 @@ # project structure. # Project target. -target=android-14 +target=android-6 diff --git a/FinchLifecycleBackport/res/layout/main.xml b/FinchLifecycleBackport/res/layout/main.xml index ce20a91..b0fe673 100644 --- a/FinchLifecycleBackport/res/layout/main.xml +++ b/FinchLifecycleBackport/res/layout/main.xml @@ -9,7 +9,7 @@ android:layout_height="wrap_content" android:text="@string/hello" /> - diff --git a/FinchVideo/build.xml b/FinchVideo/build.xml deleted file mode 100644 index 68008a9..0000000 --- a/FinchVideo/build.xml +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/FinchVideo/src/com/oreilly/demo/pa/finchvideo/FinchVideoActivity.java b/FinchVideo/src/com/oreilly/demo/android/pa/finchvideo/FinchVideoActivity.java similarity index 97% rename from FinchVideo/src/com/oreilly/demo/pa/finchvideo/FinchVideoActivity.java rename to FinchVideo/src/com/oreilly/demo/android/pa/finchvideo/FinchVideoActivity.java index a051c3d..80a8107 100644 --- a/FinchVideo/src/com/oreilly/demo/pa/finchvideo/FinchVideoActivity.java +++ b/FinchVideo/src/com/oreilly/demo/android/pa/finchvideo/FinchVideoActivity.java @@ -1,4 +1,4 @@ -package com.oreilly.demo.pa.finchvideo; +package com.oreilly.demo.android.pa.finchvideo; import android.app.Activity; import android.content.ContentUris; @@ -19,7 +19,7 @@ import android.widget.TextView; import com.finchframework.finch.Finch; import com.finchframework.finch.views.MesgEditText; -import com.oreilly.demo.pa.finchvideo.provider.FinchVideo; +import com.oreilly.demo.android.pa.finchvideo.provider.FinchVideo; import java.io.FileNotFoundException; import java.io.InputStream; diff --git a/FinchVideo/src/com/oreilly/demo/android/pa/finchvideo/FinchVideoDemo.java b/FinchVideo/src/com/oreilly/demo/android/pa/finchvideo/FinchVideoDemo.java new file mode 100644 index 0000000..003773e --- /dev/null +++ b/FinchVideo/src/com/oreilly/demo/android/pa/finchvideo/FinchVideoDemo.java @@ -0,0 +1,5 @@ +package com.oreilly.demo.android.pa.finchvideo; + +public class FinchVideoDemo { + public static final String LOG_TAG = "finch.finchvideo"; +} diff --git a/FinchVideo/src/com/oreilly/demo/pa/finchvideo/SimpleFinchVideoActivity.java b/FinchVideo/src/com/oreilly/demo/android/pa/finchvideo/SimpleFinchVideoActivity.java similarity index 97% rename from FinchVideo/src/com/oreilly/demo/pa/finchvideo/SimpleFinchVideoActivity.java rename to FinchVideo/src/com/oreilly/demo/android/pa/finchvideo/SimpleFinchVideoActivity.java index 7bbcb4d..c85f27c 100644 --- a/FinchVideo/src/com/oreilly/demo/pa/finchvideo/SimpleFinchVideoActivity.java +++ b/FinchVideo/src/com/oreilly/demo/android/pa/finchvideo/SimpleFinchVideoActivity.java @@ -1,4 +1,4 @@ -package com.oreilly.demo.pa.finchvideo; +package com.oreilly.demo.android.pa.finchvideo; import android.app.Activity; import android.content.ContentValues; @@ -11,7 +11,7 @@ import android.widget.SimpleCursorAdapter; import android.widget.TextView; import com.finchframework.finch.rest.RESTfulContentProvider; -import com.oreilly.demo.pa.finchvideo.provider.FinchVideo; +import com.oreilly.demo.android.pa.finchvideo.provider.FinchVideo; /** * Simple FinchVideo search application that merely displays a list of video diff --git a/FinchVideo/src/com/oreilly/demo/pa/finchvideo/provider/FinchVideo.java b/FinchVideo/src/com/oreilly/demo/android/pa/finchvideo/provider/FinchVideo.java similarity index 99% rename from FinchVideo/src/com/oreilly/demo/pa/finchvideo/provider/FinchVideo.java rename to FinchVideo/src/com/oreilly/demo/android/pa/finchvideo/provider/FinchVideo.java index afcf1f7..c6d1b7f 100644 --- a/FinchVideo/src/com/oreilly/demo/pa/finchvideo/provider/FinchVideo.java +++ b/FinchVideo/src/com/oreilly/demo/android/pa/finchvideo/provider/FinchVideo.java @@ -1,4 +1,4 @@ -package com.oreilly.demo.pa.finchvideo.provider; +package com.oreilly.demo.android.pa.finchvideo.provider; import android.net.Uri; import android.provider.BaseColumns; diff --git a/FinchVideo/src/com/oreilly/demo/pa/finchvideo/provider/FinchVideoContentProvider.java b/FinchVideo/src/com/oreilly/demo/android/pa/finchvideo/provider/FinchVideoContentProvider.java similarity index 99% rename from FinchVideo/src/com/oreilly/demo/pa/finchvideo/provider/FinchVideoContentProvider.java rename to FinchVideo/src/com/oreilly/demo/android/pa/finchvideo/provider/FinchVideoContentProvider.java index 3f10f35..e7b9b4a 100644 --- a/FinchVideo/src/com/oreilly/demo/pa/finchvideo/provider/FinchVideoContentProvider.java +++ b/FinchVideo/src/com/oreilly/demo/android/pa/finchvideo/provider/FinchVideoContentProvider.java @@ -1,4 +1,4 @@ -package com.oreilly.demo.pa.finchvideo.provider; +package com.oreilly.demo.android.pa.finchvideo.provider; import android.content.ContentUris; import android.content.ContentValues; diff --git a/FinchVideo/src/com/oreilly/demo/pa/finchvideo/provider/SimpleFinchVideoContentProvider.java b/FinchVideo/src/com/oreilly/demo/android/pa/finchvideo/provider/SimpleFinchVideoContentProvider.java similarity index 99% rename from FinchVideo/src/com/oreilly/demo/pa/finchvideo/provider/SimpleFinchVideoContentProvider.java rename to FinchVideo/src/com/oreilly/demo/android/pa/finchvideo/provider/SimpleFinchVideoContentProvider.java index 7346858..f33221b 100644 --- a/FinchVideo/src/com/oreilly/demo/pa/finchvideo/provider/SimpleFinchVideoContentProvider.java +++ b/FinchVideo/src/com/oreilly/demo/android/pa/finchvideo/provider/SimpleFinchVideoContentProvider.java @@ -1,4 +1,4 @@ -package com.oreilly.demo.pa.finchvideo.provider; +package com.oreilly.demo.android.pa.finchvideo.provider; import android.content.ContentProvider; import android.content.ContentUris; diff --git a/FinchVideo/src/com/oreilly/demo/pa/finchvideo/provider/YouTubeHandler.java b/FinchVideo/src/com/oreilly/demo/android/pa/finchvideo/provider/YouTubeHandler.java similarity index 98% rename from FinchVideo/src/com/oreilly/demo/pa/finchvideo/provider/YouTubeHandler.java rename to FinchVideo/src/com/oreilly/demo/android/pa/finchvideo/provider/YouTubeHandler.java index b28b18f..7019ce8 100644 --- a/FinchVideo/src/com/oreilly/demo/pa/finchvideo/provider/YouTubeHandler.java +++ b/FinchVideo/src/com/oreilly/demo/android/pa/finchvideo/provider/YouTubeHandler.java @@ -1,4 +1,4 @@ -package com.oreilly.demo.pa.finchvideo.provider; +package com.oreilly.demo.android.pa.finchvideo.provider; import android.content.ContentValues; import android.database.Cursor; @@ -9,7 +9,8 @@ import com.finchframework.finch.Finch; import com.finchframework.finch.rest.RESTfulContentProvider; import com.finchframework.finch.rest.ResponseHandler; -import com.oreilly.demo.pa.finchvideo.Ch12; +import com.oreilly.demo.android.pa.finchvideo.FinchVideoDemo; + import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.xmlpull.v1.XmlPullParser; @@ -306,10 +307,10 @@ private int parseYoutubeEntity(HttpEntity entity) throws IOException { // all entries have been inserted. } catch (XmlPullParserException e) { - Log.d(Ch12.LOG_TAG, + Log.d(FinchVideoDemo.LOG_TAG, "could not parse video feed", e); } catch (IOException e) { - Log.d(Ch12.LOG_TAG, + Log.d(FinchVideoDemo.LOG_TAG, "could not process video stream", e); } diff --git a/FinchVideo/src/com/oreilly/demo/pa/finchvideo/Ch12.java b/FinchVideo/src/com/oreilly/demo/pa/finchvideo/Ch12.java deleted file mode 100644 index 9a1b98b..0000000 --- a/FinchVideo/src/com/oreilly/demo/pa/finchvideo/Ch12.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.oreilly.demo.pa.finchvideo; - -public class Ch12 { - public static final String LOG_TAG = "finch.finchvideo"; -} diff --git a/FinchVideo/tools/ant/build.xml b/FinchVideo/tools/ant/build.xml index 03a242a..68008a9 100644 --- a/FinchVideo/tools/ant/build.xml +++ b/FinchVideo/tools/ant/build.xml @@ -1,5 +1,5 @@ - + - - - - - - - + + + @@ -60,12 +52,15 @@ --> - diff --git a/JSerializable/AndroidManifest.xml b/JSerializable/AndroidManifest.xml index ed6e1ff..4021662 100644 --- a/JSerializable/AndroidManifest.xml +++ b/JSerializable/AndroidManifest.xml @@ -1,11 +1,11 @@ - diff --git a/JSerializable/src/com/oreilly/demo/android/ch06/JSerialize.java b/JSerializable/src/com/oreilly/demo/android/pa/serialize/JSerialize.java similarity index 93% rename from JSerializable/src/com/oreilly/demo/android/ch06/JSerialize.java rename to JSerializable/src/com/oreilly/demo/android/pa/serialize/JSerialize.java index 49a3bda..8cddfab 100644 --- a/JSerializable/src/com/oreilly/demo/android/ch06/JSerialize.java +++ b/JSerializable/src/com/oreilly/demo/android/pa/serialize/JSerialize.java @@ -1,6 +1,6 @@ /* $Id: $ */ -package com.oreilly.demo.android.ch06; +package com.oreilly.demo.android.pa.serialize; import java.io.Serializable; @@ -8,7 +8,7 @@ import android.os.Bundle; import android.os.Parcel; -import com.oreilly.android.demo.R; +import com.oreilly.android.demo.pa.serialize.R; /** diff --git a/JSerializable/build.xml b/JSerializable/tools/ant/build.xml similarity index 100% rename from JSerializable/build.xml rename to JSerializable/tools/ant/build.xml diff --git a/MicroJobs/AndroidManifest.xml b/MicroJobs/AndroidManifest.xml index dce0dc9..6c9d17e 100644 --- a/MicroJobs/AndroidManifest.xml +++ b/MicroJobs/AndroidManifest.xml @@ -1,6 +1,6 @@ + android:versionCode="1" android:versionName="1.0" package="com.oreilly.demo.android.pa.microjobs"> @@ -10,13 +10,13 @@ - + - + @@ -31,7 +31,7 @@ - + @@ -45,7 +45,7 @@ - + @@ -59,7 +59,7 @@ - + @@ -73,7 +73,7 @@ - + diff --git a/MicroJobs/build.xml b/MicroJobs/build.xml deleted file mode 100644 index 865bec1..0000000 --- a/MicroJobs/build.xml +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/MicroJobs/src/com/oreilly/demo/pa/ch10/AddJob.java b/MicroJobs/src/com/oreilly/demo/android/pa/microjobs/AddJob.java similarity index 94% rename from MicroJobs/src/com/oreilly/demo/pa/ch10/AddJob.java rename to MicroJobs/src/com/oreilly/demo/android/pa/microjobs/AddJob.java index bf60f64..f86f98f 100644 --- a/MicroJobs/src/com/oreilly/demo/pa/ch10/AddJob.java +++ b/MicroJobs/src/com/oreilly/demo/android/pa/microjobs/AddJob.java @@ -1,4 +1,4 @@ -package com.oreilly.demo.pa.ch10; +package com.oreilly.demo.android.pa.microjobs; import java.util.ArrayList; import java.util.List; @@ -12,8 +12,6 @@ import android.widget.TextView; import android.widget.Toast; -import com.oreilly.demo.pa.ch10.microJobs.R; - /** * AddJob diff --git a/MicroJobs/src/com/oreilly/demo/pa/ch10/EditJob.java b/MicroJobs/src/com/oreilly/demo/android/pa/microjobs/EditJob.java similarity index 95% rename from MicroJobs/src/com/oreilly/demo/pa/ch10/EditJob.java rename to MicroJobs/src/com/oreilly/demo/android/pa/microjobs/EditJob.java index 13605e9..4a356b8 100644 --- a/MicroJobs/src/com/oreilly/demo/pa/ch10/EditJob.java +++ b/MicroJobs/src/com/oreilly/demo/android/pa/microjobs/EditJob.java @@ -1,4 +1,4 @@ -package com.oreilly.demo.pa.ch10; +package com.oreilly.demo.android.pa.microjobs; import java.util.ArrayList; import java.util.List; @@ -12,8 +12,6 @@ import android.widget.TextView; import android.widget.Toast; -import com.oreilly.demo.pa.ch10.microJobs.R; - /** * EditJob diff --git a/MicroJobs/src/com/oreilly/demo/pa/ch10/MicroJobs.java b/MicroJobs/src/com/oreilly/demo/android/pa/microjobs/MicroJobs.java similarity index 99% rename from MicroJobs/src/com/oreilly/demo/pa/ch10/MicroJobs.java rename to MicroJobs/src/com/oreilly/demo/android/pa/microjobs/MicroJobs.java index 4b15163..c964772 100644 --- a/MicroJobs/src/com/oreilly/demo/pa/ch10/MicroJobs.java +++ b/MicroJobs/src/com/oreilly/demo/android/pa/microjobs/MicroJobs.java @@ -1,4 +1,4 @@ -package com.oreilly.demo.pa.ch10; +package com.oreilly.demo.android.pa.microjobs; import java.util.ArrayList; import java.util.HashMap; @@ -29,7 +29,6 @@ import com.google.android.maps.MapView; import com.google.android.maps.MyLocationOverlay; import com.google.android.maps.OverlayItem; -import com.oreilly.demo.pa.ch10.microJobs.R; /** diff --git a/MicroJobs/src/com/oreilly/demo/pa/ch10/MicroJobsDatabase.java b/MicroJobs/src/com/oreilly/demo/android/pa/microjobs/MicroJobsDatabase.java similarity index 96% rename from MicroJobs/src/com/oreilly/demo/pa/ch10/MicroJobsDatabase.java rename to MicroJobs/src/com/oreilly/demo/android/pa/microjobs/MicroJobsDatabase.java index a3b2f90..af3450c 100644 --- a/MicroJobs/src/com/oreilly/demo/pa/ch10/MicroJobsDatabase.java +++ b/MicroJobs/src/com/oreilly/demo/android/pa/microjobs/MicroJobsDatabase.java @@ -1,4 +1,4 @@ -package com.oreilly.demo.pa.ch10; +package com.oreilly.demo.android.pa.microjobs; import android.content.ContentValues; import android.content.Context; @@ -11,8 +11,6 @@ import android.database.sqlite.SQLiteQuery; import android.util.Log; -import com.oreilly.demo.pa.ch10.microJobs.R; - /** * Provides access to the MicroJobs database. Since this is not a Content diff --git a/MicroJobs/src/com/oreilly/demo/pa/ch10/MicroJobsDetail.java b/MicroJobs/src/com/oreilly/demo/android/pa/microjobs/MicroJobsDetail.java similarity index 95% rename from MicroJobs/src/com/oreilly/demo/pa/ch10/MicroJobsDetail.java rename to MicroJobs/src/com/oreilly/demo/android/pa/microjobs/MicroJobsDetail.java index 3deae43..83f5588 100644 --- a/MicroJobs/src/com/oreilly/demo/pa/ch10/MicroJobsDetail.java +++ b/MicroJobs/src/com/oreilly/demo/android/pa/microjobs/MicroJobsDetail.java @@ -1,4 +1,4 @@ -package com.oreilly.demo.pa.ch10; +package com.oreilly.demo.android.pa.microjobs; import android.app.Activity; import android.app.AlertDialog; @@ -14,8 +14,7 @@ import android.widget.ImageButton; import android.widget.TextView; -import com.oreilly.demo.pa.ch10.MicroJobsDatabase.JobDetailCursor; -import com.oreilly.demo.pa.ch10.microJobs.R; +import com.oreilly.demo.android.pa.microjobs.MicroJobsDatabase.JobDetailCursor; /** diff --git a/MicroJobs/src/com/oreilly/demo/pa/ch10/MicroJobsEmpDetail.java b/MicroJobs/src/com/oreilly/demo/android/pa/microjobs/MicroJobsEmpDetail.java similarity index 94% rename from MicroJobs/src/com/oreilly/demo/pa/ch10/MicroJobsEmpDetail.java rename to MicroJobs/src/com/oreilly/demo/android/pa/microjobs/MicroJobsEmpDetail.java index fd8f799..3249296 100644 --- a/MicroJobs/src/com/oreilly/demo/pa/ch10/MicroJobsEmpDetail.java +++ b/MicroJobs/src/com/oreilly/demo/android/pa/microjobs/MicroJobsEmpDetail.java @@ -1,4 +1,4 @@ -package com.oreilly.demo.pa.ch10; +package com.oreilly.demo.android.pa.microjobs; import android.app.Activity; import android.content.Intent; @@ -10,8 +10,7 @@ import android.widget.ImageButton; import android.widget.TextView; -import com.oreilly.demo.pa.ch10.MicroJobsDatabase.JobDetailCursor; -import com.oreilly.demo.pa.ch10.microJobs.R; +import com.oreilly.demo.android.pa.microjobs.MicroJobsDatabase.JobDetailCursor; /** diff --git a/MicroJobs/src/com/oreilly/demo/pa/ch10/MicroJobsList.java b/MicroJobs/src/com/oreilly/demo/android/pa/microjobs/MicroJobsList.java similarity index 95% rename from MicroJobs/src/com/oreilly/demo/pa/ch10/MicroJobsList.java rename to MicroJobs/src/com/oreilly/demo/android/pa/microjobs/MicroJobsList.java index d2c3d3b..f84385e 100644 --- a/MicroJobs/src/com/oreilly/demo/pa/ch10/MicroJobsList.java +++ b/MicroJobs/src/com/oreilly/demo/android/pa/microjobs/MicroJobsList.java @@ -1,4 +1,4 @@ -package com.oreilly.demo.pa.ch10; +package com.oreilly.demo.android.pa.microjobs; import java.util.ArrayList; @@ -15,8 +15,7 @@ import android.widget.TableLayout.LayoutParams; import android.widget.TableRow; -import com.oreilly.demo.pa.ch10.MicroJobsDatabase.JobsCursor; -import com.oreilly.demo.pa.ch10.microJobs.R; +import com.oreilly.demo.android.pa.microjobs.MicroJobsDatabase.JobsCursor; /** diff --git a/MicroJobs/tools/ant/build.xml b/MicroJobs/tools/ant/build.xml index d16869e..865bec1 100644 --- a/MicroJobs/tools/ant/build.xml +++ b/MicroJobs/tools/ant/build.xml @@ -1,5 +1,5 @@ - + - - - - - - - + + + @@ -60,12 +52,15 @@ --> - diff --git a/NDKDemo/AndroidManifest.xml b/NDKDemo/AndroidManifest.xml index 05a99a2..fc9214d 100644 --- a/NDKDemo/AndroidManifest.xml +++ b/NDKDemo/AndroidManifest.xml @@ -1,6 +1,6 @@ diff --git a/NDKDemo/jni/sample.c b/NDKDemo/jni/sample.c index 1639025..e563e18 100644 --- a/NDKDemo/jni/sample.c +++ b/NDKDemo/jni/sample.c @@ -7,7 +7,7 @@ #define LOGINFO(x...) __android_log_print(ANDROID_LOG_INFO,"SampleJNI",x) -jdouble Java_com_oreilly_demo_pa_ch18_SampleActivityWithNativeMethods_calculatePower( JNIEnv* env, jobject thisobject, jdouble x, jdouble y) { +jdouble Java_com_oreilly_demo_android_pa_ndkdemo_SampleActivityWithNativeMethods_calculatePower( JNIEnv* env, jobject thisobject, jdouble x, jdouble y) { LOGINFO("Sample Debug Log Output"); @@ -15,7 +15,7 @@ jdouble Java_com_oreilly_demo_pa_ch18_SampleActivityWithNativeMethods_calculateP return calculatePower(x, y); } -jstring Java_com_oreilly_demo_pa_ch18_SampleActivityWithNativeMethods_whatAmI(JNIEnv* env, jobject thisobject) { +jstring Java_com_oreilly_demo_android_pa_ndkdemo_SampleActivityWithNativeMethods_whatAmI(JNIEnv* env, jobject thisobject) { __android_log_print(ANDROID_LOG_WARN,"SampleJNI","Sample Warning Log Output"); uint64_t cpu_features; diff --git a/NDKDemo/src/com/oreilly/demo/pa/ch18/NDKApp.java b/NDKDemo/src/com/oreilly/demo/android/pa/ndkdemo/NDKApp.java similarity index 88% rename from NDKDemo/src/com/oreilly/demo/pa/ch18/NDKApp.java rename to NDKDemo/src/com/oreilly/demo/android/pa/ndkdemo/NDKApp.java index 5be81c9..12ca05f 100644 --- a/NDKDemo/src/com/oreilly/demo/pa/ch18/NDKApp.java +++ b/NDKDemo/src/com/oreilly/demo/android/pa/ndkdemo/NDKApp.java @@ -1,6 +1,4 @@ -package com.oreilly.demo.pa.ch18; - -import com.oreilly.demo.pa.ch18.R; +package com.oreilly.demo.android.pa.ndkdemo; import android.app.Activity; import android.content.Intent; @@ -12,21 +10,21 @@ public class NDKApp extends Activity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); - + findViewById(R.id.sample).setOnClickListener(new View.OnClickListener() { - + public void onClick(View v) { startActivity(new Intent(getBaseContext(), SampleActivityWithNativeMethods.class)); } - + }); findViewById(R.id.nativeactivity).setOnClickListener(new View.OnClickListener() { - + public void onClick(View v) { startActivity(new Intent(getBaseContext(), android.app.NativeActivity.class)); } - + }); } } \ No newline at end of file diff --git a/NDKDemo/src/com/oreilly/demo/pa/ch18/SampleActivityWithNativeMethods.java b/NDKDemo/src/com/oreilly/demo/android/pa/ndkdemo/SampleActivityWithNativeMethods.java similarity index 92% rename from NDKDemo/src/com/oreilly/demo/pa/ch18/SampleActivityWithNativeMethods.java rename to NDKDemo/src/com/oreilly/demo/android/pa/ndkdemo/SampleActivityWithNativeMethods.java index cd7f679..3f82da2 100644 --- a/NDKDemo/src/com/oreilly/demo/pa/ch18/SampleActivityWithNativeMethods.java +++ b/NDKDemo/src/com/oreilly/demo/android/pa/ndkdemo/SampleActivityWithNativeMethods.java @@ -1,6 +1,4 @@ -package com.oreilly.demo.pa.ch18; - -import com.oreilly.demo.pa.ch18.R; +package com.oreilly.demo.android.pa.ndkdemo; import android.app.Activity; import android.os.Bundle; @@ -12,38 +10,38 @@ public class SampleActivityWithNativeMethods extends Activity { static { System.loadLibrary("sample"); } - + @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.sample); - + setupview(); } - + public native String whatAmI(); - + public native double calculatePower(double x, double y); - + private void setupview() { findViewById(R.id.whatami).setOnClickListener(new View.OnClickListener() { - + public void onClick(View v) { String whatami = whatAmI(); Toast.makeText(SampleActivityWithNativeMethods.this, "CPU: "+whatami, Toast.LENGTH_SHORT).show(); } }); - + findViewById(R.id.calculate).setOnClickListener(new View.OnClickListener() { - + public void onClick(View v) { String answer = ""; double x = 2; double y = 2; - + String sx = ((EditText) findViewById(R.id.x)).getText().toString(); String sy = ((EditText) findViewById(R.id.y)).getText().toString(); - + if(sx == null) { answer = "X defaults to 2\n"; } else { @@ -54,7 +52,7 @@ public void onClick(View v) { x = 2; } } - + if(sy == null) { answer += "Y defaults to 2\n"; } else { @@ -65,11 +63,11 @@ public void onClick(View v) { y = 2; } } - + double z = calculatePower(x, y); - + answer += x+"^"+y+" = "+z; - + Toast.makeText(SampleActivityWithNativeMethods.this, answer, Toast.LENGTH_SHORT).show(); } }); diff --git a/NDKDemo/build.xml b/NDKDemo/tools/ant/build.xml similarity index 100% rename from NDKDemo/build.xml rename to NDKDemo/tools/ant/build.xml diff --git a/SensorDemos/AndroidManifest.xml b/SensorDemos/AndroidManifest.xml index 888913b..a5a583b 100644 --- a/SensorDemos/AndroidManifest.xml +++ b/SensorDemos/AndroidManifest.xml @@ -1,6 +1,6 @@ diff --git a/SensorDemos/src/com/oreilly/demo/pa/ch16/Accessibility.java b/SensorDemos/src/com/oreilly/demo/android/pa/sensordemo/Accessibility.java similarity index 98% rename from SensorDemos/src/com/oreilly/demo/pa/ch16/Accessibility.java rename to SensorDemos/src/com/oreilly/demo/android/pa/sensordemo/Accessibility.java index df49562..a6cd1e6 100644 --- a/SensorDemos/src/com/oreilly/demo/pa/ch16/Accessibility.java +++ b/SensorDemos/src/com/oreilly/demo/android/pa/sensordemo/Accessibility.java @@ -1,4 +1,4 @@ -package com.oreilly.demo.pa.ch16; +package com.oreilly.demo.android.pa.sensordemo; import android.accessibilityservice.AccessibilityService; import android.accessibilityservice.AccessibilityServiceInfo; diff --git a/SensorDemos/src/com/oreilly/demo/pa/ch16/GestureAdd.java b/SensorDemos/src/com/oreilly/demo/android/pa/sensordemo/GestureAdd.java similarity index 96% rename from SensorDemos/src/com/oreilly/demo/pa/ch16/GestureAdd.java rename to SensorDemos/src/com/oreilly/demo/android/pa/sensordemo/GestureAdd.java index 21c42e6..29adcc5 100644 --- a/SensorDemos/src/com/oreilly/demo/pa/ch16/GestureAdd.java +++ b/SensorDemos/src/com/oreilly/demo/android/pa/sensordemo/GestureAdd.java @@ -1,4 +1,4 @@ -package com.oreilly.demo.pa.ch16; +package com.oreilly.demo.android.pa.sensordemo; import android.app.Activity; import android.gesture.Gesture; @@ -19,16 +19,16 @@ public class GestureAdd extends Activity implements GestureOverlayView.OnGesture public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.gestureadd); - + setTitle("Add Gesture"); - + findViewById(R.id.save).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if(storeGesture()) finish(); } }); - + findViewById(R.id.cancel).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { @@ -36,27 +36,27 @@ public void onClick(View v) { } }); } - + @Override protected void onResume() { super.onResume(); updateGestureLibrary(); - + GestureOverlayView gestures = (GestureOverlayView) findViewById(R.id.gestures); gestures.setFadeEnabled(false); gestures.addOnGesturePerformedListener(this); } - + @Override public void onGesturePerformed(GestureOverlayView overlay, Gesture gesture) { this.gesture = gesture; } - + private void updateGestureLibrary() { library = GestureLibraries.fromFile("/sdcard/gestureexample"); library.load(); } - + private boolean storeGesture() { if(gesture != null) { String name = null; diff --git a/SensorDemos/src/com/oreilly/demo/pa/ch16/GestureView.java b/SensorDemos/src/com/oreilly/demo/android/pa/sensordemo/GestureView.java similarity index 96% rename from SensorDemos/src/com/oreilly/demo/pa/ch16/GestureView.java rename to SensorDemos/src/com/oreilly/demo/android/pa/sensordemo/GestureView.java index ca1d916..97a9fc3 100644 --- a/SensorDemos/src/com/oreilly/demo/pa/ch16/GestureView.java +++ b/SensorDemos/src/com/oreilly/demo/android/pa/sensordemo/GestureView.java @@ -1,4 +1,4 @@ -package com.oreilly.demo.pa.ch16; +package com.oreilly.demo.android.pa.sensordemo; import java.util.ArrayList; @@ -16,14 +16,14 @@ public class GestureView extends Activity implements GestureOverlayView.OnGesturePerformedListener { private GestureLibrary library; - + @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.gesture); - + setTitle("Gesture"); - + findViewById(R.id.add).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { @@ -31,12 +31,12 @@ public void onClick(View v) { } }); } - + @Override protected void onResume() { super.onResume(); updateGestureLibrary(); - + GestureOverlayView gestures = (GestureOverlayView) findViewById(R.id.gestures); gestures.addOnGesturePerformedListener(this); } @@ -51,7 +51,7 @@ public void onGesturePerformed(GestureOverlayView overlay, Gesture gesture) { } } } - + private void updateGestureLibrary() { library = GestureLibraries.fromFile("/sdcard/gestureexample"); library.load(); diff --git a/SensorDemos/src/com/oreilly/demo/pa/ch16/MainActivity.java b/SensorDemos/src/com/oreilly/demo/android/pa/sensordemo/MainActivity.java similarity index 93% rename from SensorDemos/src/com/oreilly/demo/pa/ch16/MainActivity.java rename to SensorDemos/src/com/oreilly/demo/android/pa/sensordemo/MainActivity.java index 2092f99..f1c4133 100644 --- a/SensorDemos/src/com/oreilly/demo/pa/ch16/MainActivity.java +++ b/SensorDemos/src/com/oreilly/demo/android/pa/sensordemo/MainActivity.java @@ -1,4 +1,4 @@ -package com.oreilly.demo.pa.ch16; +package com.oreilly.demo.android.pa.sensordemo; import android.app.Activity; import android.content.Intent; @@ -10,101 +10,101 @@ public class MainActivity extends Activity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); - + findViewById(R.id.sensorsaccel).setOnClickListener(new View.OnClickListener() { - + public void onClick(View v) { startActivity(new Intent(getBaseContext(), SensorAccel.class)); // Launch the Sensor Accelerometer Example } - + }); - + findViewById(R.id.sensorgyroscope).setOnClickListener(new View.OnClickListener() { - + public void onClick(View v) { startActivity(new Intent(getBaseContext(), SensorGyro.class)); // Launch the Sensor Gyroscope Example } - + }); - + findViewById(R.id.sensorrotate).setOnClickListener(new View.OnClickListener() { - + public void onClick(View v) { startActivity(new Intent(getBaseContext(), SensorRotationVector.class)); // Launch the Sensor Rotational Vector Example } - + }); findViewById(R.id.sensorlinear).setOnClickListener(new View.OnClickListener() { - + public void onClick(View v) { startActivity(new Intent(getBaseContext(), SensorRotationVector.class)); // Launch the Sensor Linear Acceleration Example } - + }); findViewById(R.id.sensorgravity).setOnClickListener(new View.OnClickListener() { - + public void onClick(View v) { startActivity(new Intent(getBaseContext(), SensorGravity.class)); // Launch the Sensor Gravity Example } - + }); - + findViewById(R.id.sensorlight).setOnClickListener(new View.OnClickListener() { - + public void onClick(View v) { startActivity(new Intent(getBaseContext(), SensorLight.class)); // Launch the Sensor Light Example } - + }); - + findViewById(R.id.sensormagnetic).setOnClickListener(new View.OnClickListener() { - + public void onClick(View v) { startActivity(new Intent(getBaseContext(), SensorMagnetic.class)); // Launch the Sensor Magnetic Example } - + }); - + findViewById(R.id.sensorpressure).setOnClickListener(new View.OnClickListener() { - + public void onClick(View v) { startActivity(new Intent(getBaseContext(), SensorPressure.class)); // Launch the Sensor Pressure Example } - + }); - + findViewById(R.id.sensorproximity).setOnClickListener(new View.OnClickListener() { - + public void onClick(View v) { startActivity(new Intent(getBaseContext(), SensorProximity.class)); // Launch the Sensor Proximity Example } - + }); - + findViewById(R.id.sensortemp).setOnClickListener(new View.OnClickListener() { - + public void onClick(View v) { startActivity(new Intent(getBaseContext(), SensorTemp.class)); // Launch the Sensor Temperature Example } - + }); - + findViewById(R.id.gesture).setOnClickListener(new View.OnClickListener() { - + public void onClick(View v) { startActivity(new Intent(getBaseContext(), GestureView.class)); // Launch the Gesture Input Example } - + }); - + findViewById(R.id.nfc233).setOnClickListener(new View.OnClickListener() { - + public void onClick(View v) { startActivity(new Intent(getBaseContext(), NFC233.class)); // Launch the NFC 2.3.3 (SDK 10) Example } - + }); } } \ No newline at end of file diff --git a/SensorDemos/src/com/oreilly/demo/pa/ch16/NFC.java b/SensorDemos/src/com/oreilly/demo/android/pa/sensordemo/NFC.java similarity index 98% rename from SensorDemos/src/com/oreilly/demo/pa/ch16/NFC.java rename to SensorDemos/src/com/oreilly/demo/android/pa/sensordemo/NFC.java index 2baf7f6..1e59a14 100644 --- a/SensorDemos/src/com/oreilly/demo/pa/ch16/NFC.java +++ b/SensorDemos/src/com/oreilly/demo/android/pa/sensordemo/NFC.java @@ -1,4 +1,4 @@ -package com.oreilly.demo.pa.ch16; +package com.oreilly.demo.android.pa.sensordemo; import java.nio.charset.Charset; import java.util.Arrays; @@ -133,7 +133,7 @@ private NFCType getTagType(final NdefMessage msg) { private String getTagData(final NdefMessage msg) { if(msg == null) return null; - // we are only grabbing the first recognizable item + // we are only grabbing the first recognizable item for(NdefRecord record : msg.getRecords()) { if(record.getTnf() == NdefRecord.TNF_WELL_KNOWN) { @@ -182,7 +182,7 @@ private String getSubRecordData(final NdefRecord[] records) { private byte[] getTagRawData(final NdefMessage msg) { if(msg == null || msg.getRecords().length < 1) return null; - // we are only grabbing the first item + // we are only grabbing the first item return msg.getRecords()[0].getPayload(); } diff --git a/SensorDemos/src/com/oreilly/demo/pa/ch16/NFC233.java b/SensorDemos/src/com/oreilly/demo/android/pa/sensordemo/NFC233.java similarity index 97% rename from SensorDemos/src/com/oreilly/demo/pa/ch16/NFC233.java rename to SensorDemos/src/com/oreilly/demo/android/pa/sensordemo/NFC233.java index 25631e7..8af9085 100644 --- a/SensorDemos/src/com/oreilly/demo/pa/ch16/NFC233.java +++ b/SensorDemos/src/com/oreilly/demo/android/pa/sensordemo/NFC233.java @@ -1,4 +1,4 @@ -package com.oreilly.demo.pa.ch16; +package com.oreilly.demo.android.pa.sensordemo; import java.io.IOException; import java.nio.charset.Charset; @@ -85,7 +85,7 @@ public void onClick(View v) { } }); - // if what launched this was caused by ACTION_NDEF_DISCOVERED or + // if what launched this was caused by ACTION_NDEF_DISCOVERED or // ACTION_TECH_DISCOVERED then get rid of the buttons and analyze the // intent. try { @@ -117,7 +117,7 @@ public void onClick(View v) { findViewById(R.id.tagdata).setVisibility(View.GONE); findViewById(R.id.enablefdispatch).setVisibility(View.VISIBLE); - findViewById(R.id.enablefdispatch).setOnClickListener(new OnClickListener() { + findViewById(R.id.enablefdispatch).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { enableForegroundDispatchHandler.sendEmptyMessage(0); @@ -125,7 +125,7 @@ public void onClick(View v) { }); findViewById(R.id.enablefpush).setVisibility(View.VISIBLE); - findViewById(R.id.enablefpush).setOnClickListener(new OnClickListener() { + findViewById(R.id.enablefpush).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { enableForegroundPushHandler.sendEmptyMessage(0); @@ -136,7 +136,7 @@ public void onClick(View v) { findViewById(R.id.tagwrite).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { - writeTagHandler.sendEmptyMessage(0); + writeTagHandler.sendEmptyMessage(0); } }); } catch (Exception t) { @@ -149,7 +149,7 @@ private void enableForegroundDispatch() { Toast.makeText(getBaseContext(), "Foreground Dispatch Enabled! Please scan a tag", Toast.LENGTH_SHORT).show(); PendingIntent intent = PendingIntent.getActivity(this, 0, - new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), + new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0); // we are going set up to receive as a ACTION_TAG_DISCOVERED intent @@ -174,7 +174,7 @@ private void enableForegroundPush() { NdefRecord[] rec = new NdefRecord[1]; rec[0] = newTextRecord("NFC Foreground Push Message"); - NdefMessage msg = new NdefMessage(rec); + NdefMessage msg = new NdefMessage(rec); NfcAdapter.getDefaultAdapter(this).enableForegroundNdefPush(this, msg); } @@ -207,7 +207,7 @@ private void writeTag() { NdefRecord[] rec = new NdefRecord[1]; rec[0] = newTextRecord(msgstr); - final NdefMessage msg = new NdefMessage(rec); + final NdefMessage msg = new NdefMessage(rec); (new Thread() { public void run() { @@ -223,7 +223,7 @@ public void run() { throw new Exception("Unable to connect to tag"); } count++; - sleep(10); + sleep(10); } ndefref.writeNdefMessage(msg); @@ -248,7 +248,7 @@ private NdefRecord newTextRecord(String text) { char status = (char) (langBytes.length); - byte[] data = new byte[1 + langBytes.length + textBytes.length]; + byte[] data = new byte[1 + langBytes.length + textBytes.length]; data[0] = (byte) status; System.arraycopy(langBytes, 0, data, 1, langBytes.length); System.arraycopy(textBytes, 0, data, 1 + langBytes.length, textBytes.length); @@ -275,7 +275,7 @@ private void toastMessage(Object ob) { Toast.makeText(this, msg, Toast.LENGTH_SHORT).show(); } - // From here on down is the same code as in com.oreilly.demo.pa.ch16.NFC + // From here on down is the same code as in com.oreilly.demo.android.pa.sensordemo.NFC private void analyzeIntent(final Intent intent) { if(intent == null) return; @@ -285,7 +285,7 @@ private void analyzeIntent(final Intent intent) { byte[] data = null; NdefMessage tag = getTagData(intent); - if(tag != null) { + if(tag != null) { type = getTagType(tag); if(type != NFCType.UNKNOWN) { datastr = getTagData(tag); @@ -373,7 +373,7 @@ private NFCType getTagType(final NdefMessage msg) { private String getTagData(final NdefMessage msg) { if(msg == null) return null; - // we are only grabbing the first recognizable item + // we are only grabbing the first recognizable item for(NdefRecord record : msg.getRecords()) { if(record.getTnf() == NdefRecord.TNF_WELL_KNOWN) { @@ -422,7 +422,7 @@ private String getSubRecordData(final NdefRecord[] records) { private byte[] getTagRawData(final NdefMessage msg) { if(msg == null || msg.getRecords().length < 1) return null; - // we are only grabbing the first item + // we are only grabbing the first item return msg.getRecords()[0].getPayload(); } diff --git a/SensorDemos/src/com/oreilly/demo/pa/ch16/SensorAccel.java b/SensorDemos/src/com/oreilly/demo/android/pa/sensordemo/SensorAccel.java similarity index 93% rename from SensorDemos/src/com/oreilly/demo/pa/ch16/SensorAccel.java rename to SensorDemos/src/com/oreilly/demo/android/pa/sensordemo/SensorAccel.java index 471e28c..b16aa54 100644 --- a/SensorDemos/src/com/oreilly/demo/pa/ch16/SensorAccel.java +++ b/SensorDemos/src/com/oreilly/demo/android/pa/sensordemo/SensorAccel.java @@ -1,4 +1,4 @@ -package com.oreilly.demo.pa.ch16; +package com.oreilly.demo.android.pa.sensordemo; import java.util.List; @@ -15,9 +15,9 @@ import android.widget.Toast; public class SensorAccel extends Activity implements SensorEventListener { - + private boolean hassensor; - + private final Handler accelEventHandler = new Handler() { @Override public void handleMessage(Message msg) { @@ -38,30 +38,30 @@ public void onCreate(Bundle savedInstanceState) { finish(); return; } - + hassensor = true; setContentView(R.layout.sensoraccel); setTitle("Accelerometer"); } - + @Override protected void onResume() { super.onResume(); if(hassensor) registerListener(); } - + @Override protected void onPause() { super.onPause(); unregisterListener(); } - + private List getAccelorometer() { SensorManager mngr = (SensorManager) getSystemService(Context.SENSOR_SERVICE); List list = mngr.getSensorList(Sensor.TYPE_ACCELEROMETER); return list != null && !list.isEmpty() ? list : null; } - + private void registerListener() { SensorManager mngr = (SensorManager) getSystemService(Context.SENSOR_SERVICE); List list = getAccelorometer(); @@ -71,7 +71,7 @@ private void registerListener() { } } } - + private void unregisterListener() { if(hassensor) { SensorManager mngr = (SensorManager) getSystemService(Context.SENSOR_SERVICE); @@ -85,9 +85,9 @@ public void onAccuracyChanged(Sensor sensor, int accuracy) { } @Override public void onSensorChanged(SensorEvent event) { float ax = event.values[0]; - float ay = event.values.length > 1 ? event.values[1] : 0; - float az = event.values.length > 2 ? event.values[2] : 0; - + float ay = event.values.length > 1 ? event.values[1] : 0; + float az = event.values.length > 2 ? event.values[2] : 0; + Bundle data = new Bundle(); data.putString("x", "X: "+ax+" m/s^2"); data.putString("y", "Y: "+ay+" m/s^2"); diff --git a/SensorDemos/src/com/oreilly/demo/pa/ch16/SensorGravity.java b/SensorDemos/src/com/oreilly/demo/android/pa/sensordemo/SensorGravity.java similarity index 93% rename from SensorDemos/src/com/oreilly/demo/pa/ch16/SensorGravity.java rename to SensorDemos/src/com/oreilly/demo/android/pa/sensordemo/SensorGravity.java index 1708b8d..fdd012f 100644 --- a/SensorDemos/src/com/oreilly/demo/pa/ch16/SensorGravity.java +++ b/SensorDemos/src/com/oreilly/demo/android/pa/sensordemo/SensorGravity.java @@ -1,4 +1,4 @@ -package com.oreilly.demo.pa.ch16; +package com.oreilly.demo.android.pa.sensordemo; import java.util.List; @@ -15,9 +15,9 @@ import android.widget.Toast; public class SensorGravity extends Activity implements SensorEventListener { - + private boolean hassensor; - + private final Handler gravityEventHandler = new Handler() { @Override public void handleMessage(Message msg) { @@ -38,31 +38,31 @@ public void onCreate(Bundle savedInstanceState) { finish(); return; } - + hassensor = true; setContentView(R.layout.sensorgravity); - + setTitle("Gravity"); } - + @Override protected void onResume() { super.onResume(); if(hassensor) registerListener(); } - + @Override protected void onPause() { super.onPause(); unregisterListener(); } - + private List getGravitySensors() { SensorManager mngr = (SensorManager) getSystemService(Context.SENSOR_SERVICE); List list = mngr.getSensorList(Sensor.TYPE_GRAVITY); return list != null && !list.isEmpty() ? list : null; } - + private void registerListener() { SensorManager mngr = (SensorManager) getSystemService(Context.SENSOR_SERVICE); List list = getGravitySensors(); @@ -72,7 +72,7 @@ private void registerListener() { } } } - + private void unregisterListener() { if(hassensor) { SensorManager mngr = (SensorManager) getSystemService(Context.SENSOR_SERVICE); @@ -86,9 +86,9 @@ public void onAccuracyChanged(Sensor sensor, int accuracy) { } @Override public void onSensorChanged(SensorEvent event) { float gx = event.values[0]; - float gy = event.values.length > 1 ? event.values[1] : 0; - float gz = event.values.length > 2 ? event.values[2] : 0; - + float gy = event.values.length > 1 ? event.values[1] : 0; + float gz = event.values.length > 2 ? event.values[2] : 0; + Bundle data = new Bundle(); data.putString("x", "Gravity X: "+gx+" m/s^2"); data.putString("y", "Gravity Y: "+gy+" m/s^2"); diff --git a/SensorDemos/src/com/oreilly/demo/pa/ch16/SensorGyro.java b/SensorDemos/src/com/oreilly/demo/android/pa/sensordemo/SensorGyro.java similarity index 94% rename from SensorDemos/src/com/oreilly/demo/pa/ch16/SensorGyro.java rename to SensorDemos/src/com/oreilly/demo/android/pa/sensordemo/SensorGyro.java index 44011fb..904b75b 100644 --- a/SensorDemos/src/com/oreilly/demo/pa/ch16/SensorGyro.java +++ b/SensorDemos/src/com/oreilly/demo/android/pa/sensordemo/SensorGyro.java @@ -1,4 +1,4 @@ -package com.oreilly.demo.pa.ch16; +package com.oreilly.demo.android.pa.sensordemo; import java.util.List; @@ -15,13 +15,13 @@ import android.widget.Toast; public class SensorGyro extends Activity implements SensorEventListener { - + private static final float NS2S = 1.0f / 1000000000.0f; private float timestamp; private float[] angle; - + private boolean hassensor; - + private final Handler gyroEventHandler = new Handler() { @Override public void handleMessage(Message msg) { @@ -32,7 +32,7 @@ public void handleMessage(Message msg) { ((TextView) findViewById(R.id.gyrodxtext)).setText(data.getString("dx")); ((TextView) findViewById(R.id.gyrodytext)).setText(data.getString("dy")); ((TextView) findViewById(R.id.gyrodztext)).setText(data.getString("dz")); - + } }; @@ -46,31 +46,31 @@ public void onCreate(Bundle savedInstanceState) { finish(); return; } - + hassensor = true; setContentView(R.layout.sensorgyro); - + setTitle("Gyroscope"); } - + @Override protected void onResume() { super.onResume(); if(hassensor) registerListener(); } - + @Override protected void onPause() { super.onPause(); unregisterListener(); } - + private List getGyroSensors() { SensorManager mngr = (SensorManager) getSystemService(Context.SENSOR_SERVICE); List list = mngr.getSensorList(Sensor.TYPE_GYROSCOPE); return list != null && !list.isEmpty() ? list : null; } - + private void registerListener() { SensorManager mngr = (SensorManager) getSystemService(Context.SENSOR_SERVICE); List list = getGyroSensors(); @@ -82,7 +82,7 @@ private void registerListener() { } } } - + private void unregisterListener() { if(hassensor) { SensorManager mngr = (SensorManager) getSystemService(Context.SENSOR_SERVICE); @@ -96,18 +96,18 @@ public void onAccuracyChanged(Sensor sensor, int accuracy) { } @Override public void onSensorChanged(SensorEvent event) { float gyrox = event.values[0]; - float gyroy = event.values.length > 1 ? event.values[1] : 0; - float gyroz = event.values.length > 2 ? event.values[2] : 0; - + float gyroy = event.values.length > 1 ? event.values[1] : 0; + float gyroz = event.values.length > 2 ? event.values[2] : 0; + if (timestamp != 0) { final float dT = (event.timestamp - timestamp) * NS2S; angle[0] += gyrox * dT; angle[1] += gyroy * dT; angle[2] += gyroz * dT; } - + timestamp = event.timestamp; - + Bundle data = new Bundle(); data.putString("dx", "Speed Around X axis: "+gyrox+" rad/sec"); data.putString("dy", "Speed Around Y axis: "+gyroy+" rad/sec"); diff --git a/SensorDemos/src/com/oreilly/demo/pa/ch16/SensorLight.java b/SensorDemos/src/com/oreilly/demo/android/pa/sensordemo/SensorLight.java similarity index 97% rename from SensorDemos/src/com/oreilly/demo/pa/ch16/SensorLight.java rename to SensorDemos/src/com/oreilly/demo/android/pa/sensordemo/SensorLight.java index 2708c59..31d62e2 100644 --- a/SensorDemos/src/com/oreilly/demo/pa/ch16/SensorLight.java +++ b/SensorDemos/src/com/oreilly/demo/android/pa/sensordemo/SensorLight.java @@ -1,4 +1,4 @@ -package com.oreilly.demo.pa.ch16; +package com.oreilly.demo.android.pa.sensordemo; import java.util.List; @@ -15,9 +15,9 @@ import android.widget.Toast; public class SensorLight extends Activity implements SensorEventListener { - + private boolean hassensor; - + private final Handler lightEventHandler = new Handler() { @Override public void handleMessage(Message msg) { @@ -36,31 +36,31 @@ public void onCreate(Bundle savedInstanceState) { finish(); return; } - + hassensor = true; setContentView(R.layout.sensorlight); - + setTitle("Light"); } - + @Override protected void onResume() { super.onResume(); if(hassensor) registerListener(); } - + @Override protected void onPause() { super.onPause(); unregisterListener(); } - + private List getLightSensors() { SensorManager mngr = (SensorManager) getSystemService(Context.SENSOR_SERVICE); List list = mngr.getSensorList(Sensor.TYPE_LIGHT); return list != null && !list.isEmpty() ? list : null; } - + private void registerListener() { SensorManager mngr = (SensorManager) getSystemService(Context.SENSOR_SERVICE); List list = getLightSensors(); @@ -70,7 +70,7 @@ private void registerListener() { } } } - + private void unregisterListener() { if(hassensor) { SensorManager mngr = (SensorManager) getSystemService(Context.SENSOR_SERVICE); diff --git a/SensorDemos/src/com/oreilly/demo/pa/ch16/SensorLinearAcceleration.java b/SensorDemos/src/com/oreilly/demo/android/pa/sensordemo/SensorLinearAcceleration.java similarity index 93% rename from SensorDemos/src/com/oreilly/demo/pa/ch16/SensorLinearAcceleration.java rename to SensorDemos/src/com/oreilly/demo/android/pa/sensordemo/SensorLinearAcceleration.java index 053dc0f..35a0019 100644 --- a/SensorDemos/src/com/oreilly/demo/pa/ch16/SensorLinearAcceleration.java +++ b/SensorDemos/src/com/oreilly/demo/android/pa/sensordemo/SensorLinearAcceleration.java @@ -1,4 +1,4 @@ -package com.oreilly.demo.pa.ch16; +package com.oreilly.demo.android.pa.sensordemo; import java.util.List; @@ -15,9 +15,9 @@ import android.widget.Toast; public class SensorLinearAcceleration extends Activity implements SensorEventListener { - + private boolean hassensor; - + private final Handler linearEventHandler = new Handler() { @Override public void handleMessage(Message msg) { @@ -38,31 +38,31 @@ public void onCreate(Bundle savedInstanceState) { finish(); return; } - + hassensor = true; setContentView(R.layout.sensorlinearacel); - + setTitle("Linear Acceleration"); } - + @Override protected void onResume() { super.onResume(); if(hassensor) registerListener(); } - + @Override protected void onPause() { super.onPause(); unregisterListener(); } - + private List getLinearAcelSensors() { SensorManager mngr = (SensorManager) getSystemService(Context.SENSOR_SERVICE); List list = mngr.getSensorList(Sensor.TYPE_LINEAR_ACCELERATION); return list != null && !list.isEmpty() ? list : null; } - + private void registerListener() { SensorManager mngr = (SensorManager) getSystemService(Context.SENSOR_SERVICE); List list = getLinearAcelSensors(); @@ -72,7 +72,7 @@ private void registerListener() { } } } - + private void unregisterListener() { if(hassensor) { SensorManager mngr = (SensorManager) getSystemService(Context.SENSOR_SERVICE); @@ -86,9 +86,9 @@ public void onAccuracyChanged(Sensor sensor, int accuracy) { } @Override public void onSensorChanged(SensorEvent event) { float lax = event.values[0]; - float lay = event.values.length > 1 ? event.values[1] : 0; - float laz = event.values.length > 2 ? event.values[2] : 0; - + float lay = event.values.length > 1 ? event.values[1] : 0; + float laz = event.values.length > 2 ? event.values[2] : 0; + Bundle data = new Bundle(); data.putString("x", "Linear Accel X: "+lax+" m/s^2"); data.putString("y", "Linear Accel Y: "+lay+" m/s^2"); diff --git a/SensorDemos/src/com/oreilly/demo/pa/ch16/SensorMagnetic.java b/SensorDemos/src/com/oreilly/demo/android/pa/sensordemo/SensorMagnetic.java similarity index 93% rename from SensorDemos/src/com/oreilly/demo/pa/ch16/SensorMagnetic.java rename to SensorDemos/src/com/oreilly/demo/android/pa/sensordemo/SensorMagnetic.java index bff4f55..c5a78de 100644 --- a/SensorDemos/src/com/oreilly/demo/pa/ch16/SensorMagnetic.java +++ b/SensorDemos/src/com/oreilly/demo/android/pa/sensordemo/SensorMagnetic.java @@ -1,4 +1,4 @@ -package com.oreilly.demo.pa.ch16; +package com.oreilly.demo.android.pa.sensordemo; import java.util.List; @@ -15,9 +15,9 @@ import android.widget.Toast; public class SensorMagnetic extends Activity implements SensorEventListener { - + private boolean hassensor; - + private final Handler magneticEventHandler = new Handler() { @Override public void handleMessage(Message msg) { @@ -38,31 +38,31 @@ public void onCreate(Bundle savedInstanceState) { finish(); return; } - + hassensor = true; setContentView(R.layout.sensormagnetic); - + setTitle("Magnetic"); } - + @Override protected void onResume() { super.onResume(); if(hassensor) registerListener(); } - + @Override protected void onPause() { super.onPause(); unregisterListener(); } - + private List getMagneticSensors() { SensorManager mngr = (SensorManager) getSystemService(Context.SENSOR_SERVICE); List list = mngr.getSensorList(Sensor.TYPE_MAGNETIC_FIELD); return list != null && !list.isEmpty() ? list : null; } - + private void registerListener() { SensorManager mngr = (SensorManager) getSystemService(Context.SENSOR_SERVICE); List list = getMagneticSensors(); @@ -72,7 +72,7 @@ private void registerListener() { } } } - + private void unregisterListener() { if(hassensor) { SensorManager mngr = (SensorManager) getSystemService(Context.SENSOR_SERVICE); @@ -86,9 +86,9 @@ public void onAccuracyChanged(Sensor sensor, int accuracy) { } @Override public void onSensorChanged(SensorEvent event) { float magx = event.values[0]; - float magy = event.values.length > 1 ? event.values[1] : 0; - float magz = event.values.length > 2 ? event.values[2] : 0; - + float magy = event.values.length > 1 ? event.values[1] : 0; + float magz = event.values.length > 2 ? event.values[2] : 0; + Bundle data = new Bundle(); data.putString("x", "Mag X: "+magx+" uT"); data.putString("y", "Mag Y: "+magy+" uT"); diff --git a/SensorDemos/src/com/oreilly/demo/pa/ch16/SensorPressure.java b/SensorDemos/src/com/oreilly/demo/android/pa/sensordemo/SensorPressure.java similarity index 96% rename from SensorDemos/src/com/oreilly/demo/pa/ch16/SensorPressure.java rename to SensorDemos/src/com/oreilly/demo/android/pa/sensordemo/SensorPressure.java index d80254a..2508a04 100644 --- a/SensorDemos/src/com/oreilly/demo/pa/ch16/SensorPressure.java +++ b/SensorDemos/src/com/oreilly/demo/android/pa/sensordemo/SensorPressure.java @@ -1,4 +1,4 @@ -package com.oreilly.demo.pa.ch16; +package com.oreilly.demo.android.pa.sensordemo; import java.util.List; @@ -15,9 +15,9 @@ import android.widget.Toast; public class SensorPressure extends Activity implements SensorEventListener { - + private boolean hassensor; - + private final Handler pressureEventHandler = new Handler() { @Override public void handleMessage(Message msg) { @@ -36,31 +36,31 @@ public void onCreate(Bundle savedInstanceState) { finish(); return; } - + hassensor = true; setContentView(R.layout.sensorpressure); - + setTitle("Pressure"); } - + @Override protected void onResume() { super.onResume(); if(hassensor) registerListener(); } - + @Override protected void onPause() { super.onPause(); unregisterListener(); } - + private List getTempSensors() { SensorManager mngr = (SensorManager) getSystemService(Context.SENSOR_SERVICE); List list = mngr.getSensorList(Sensor.TYPE_TEMPERATURE); return list != null && !list.isEmpty() ? list : null; } - + private void registerListener() { SensorManager mngr = (SensorManager) getSystemService(Context.SENSOR_SERVICE); List list = getTempSensors(); @@ -70,7 +70,7 @@ private void registerListener() { } } } - + private void unregisterListener() { if(hassensor) { SensorManager mngr = (SensorManager) getSystemService(Context.SENSOR_SERVICE); @@ -83,7 +83,7 @@ public void onAccuracyChanged(Sensor sensor, int accuracy) { } @Override public void onSensorChanged(SensorEvent event) { - float pres = event.values[0]; + float pres = event.values[0]; Message msg = Message.obtain(); msg.obj = "Pressure: "+pres+" kPa"; pressureEventHandler.sendMessage(msg); diff --git a/SensorDemos/src/com/oreilly/demo/pa/ch16/SensorProximity.java b/SensorDemos/src/com/oreilly/demo/android/pa/sensordemo/SensorProximity.java similarity index 96% rename from SensorDemos/src/com/oreilly/demo/pa/ch16/SensorProximity.java rename to SensorDemos/src/com/oreilly/demo/android/pa/sensordemo/SensorProximity.java index a0276bd..9457eba 100644 --- a/SensorDemos/src/com/oreilly/demo/pa/ch16/SensorProximity.java +++ b/SensorDemos/src/com/oreilly/demo/android/pa/sensordemo/SensorProximity.java @@ -1,4 +1,4 @@ -package com.oreilly.demo.pa.ch16; +package com.oreilly.demo.android.pa.sensordemo; import java.util.List; @@ -15,9 +15,9 @@ import android.widget.Toast; public class SensorProximity extends Activity implements SensorEventListener { - + private boolean hassensor; - + private final Handler proxEventHandler = new Handler() { @Override public void handleMessage(Message msg) { @@ -36,31 +36,31 @@ public void onCreate(Bundle savedInstanceState) { finish(); return; } - + hassensor = true; setContentView(R.layout.sensorproximity); - + setTitle("Proximity"); } - + @Override protected void onResume() { super.onResume(); if(hassensor) registerListener(); } - + @Override protected void onPause() { super.onPause(); unregisterListener(); } - + private List getProximitySensors() { SensorManager mngr = (SensorManager) getSystemService(Context.SENSOR_SERVICE); List list = mngr.getSensorList(Sensor.TYPE_PROXIMITY); return list != null && !list.isEmpty() ? list : null; } - + private void registerListener() { SensorManager mngr = (SensorManager) getSystemService(Context.SENSOR_SERVICE); List list = getProximitySensors(); @@ -70,7 +70,7 @@ private void registerListener() { } } } - + private void unregisterListener() { if(hassensor) { SensorManager mngr = (SensorManager) getSystemService(Context.SENSOR_SERVICE); @@ -83,7 +83,7 @@ public void onAccuracyChanged(Sensor sensor, int accuracy) { } @Override public void onSensorChanged(SensorEvent event) { - float prox = event.values[0]; + float prox = event.values[0]; Message msg = Message.obtain(); msg.obj = "Proximity: "+prox+" cm"; proxEventHandler.sendMessage(msg); diff --git a/SensorDemos/src/com/oreilly/demo/pa/ch16/SensorRotationVector.java b/SensorDemos/src/com/oreilly/demo/android/pa/sensordemo/SensorRotationVector.java similarity index 93% rename from SensorDemos/src/com/oreilly/demo/pa/ch16/SensorRotationVector.java rename to SensorDemos/src/com/oreilly/demo/android/pa/sensordemo/SensorRotationVector.java index cbb9c34..7d218cf 100644 --- a/SensorDemos/src/com/oreilly/demo/pa/ch16/SensorRotationVector.java +++ b/SensorDemos/src/com/oreilly/demo/android/pa/sensordemo/SensorRotationVector.java @@ -1,4 +1,4 @@ -package com.oreilly.demo.pa.ch16; +package com.oreilly.demo.android.pa.sensordemo; import java.util.List; @@ -15,9 +15,9 @@ import android.widget.Toast; public class SensorRotationVector extends Activity implements SensorEventListener { - + private boolean hassensor; - + private final Handler rotvectEventHandler = new Handler() { @Override public void handleMessage(Message msg) { @@ -38,31 +38,31 @@ public void onCreate(Bundle savedInstanceState) { finish(); return; } - + hassensor = true; setContentView(R.layout.sensorrotationvector); - + setTitle("Rotational Vector"); } - + @Override protected void onResume() { super.onResume(); if(hassensor) registerListener(); } - + @Override protected void onPause() { super.onPause(); unregisterListener(); } - + private List getRotVectorSensors() { SensorManager mngr = (SensorManager) getSystemService(Context.SENSOR_SERVICE); List list = mngr.getSensorList(Sensor.TYPE_ROTATION_VECTOR); return list != null && !list.isEmpty() ? list : null; } - + private void registerListener() { SensorManager mngr = (SensorManager) getSystemService(Context.SENSOR_SERVICE); List list = getRotVectorSensors(); @@ -72,7 +72,7 @@ private void registerListener() { } } } - + private void unregisterListener() { if(hassensor) { SensorManager mngr = (SensorManager) getSystemService(Context.SENSOR_SERVICE); @@ -86,9 +86,9 @@ public void onAccuracyChanged(Sensor sensor, int accuracy) { } @Override public void onSensorChanged(SensorEvent event) { float rvx = event.values[0]; - float rvy = event.values.length > 1 ? event.values[1] : 0; - float rvz = event.values.length > 2 ? event.values[2] : 0; - + float rvy = event.values.length > 1 ? event.values[1] : 0; + float rvz = event.values.length > 2 ? event.values[2] : 0; + Bundle data = new Bundle(); data.putString("x", "Rotational Vector X: "+rvx); data.putString("y", "Rotational Vector Y: "+rvy); diff --git a/SensorDemos/src/com/oreilly/demo/pa/ch16/SensorTemp.java b/SensorDemos/src/com/oreilly/demo/android/pa/sensordemo/SensorTemp.java similarity index 96% rename from SensorDemos/src/com/oreilly/demo/pa/ch16/SensorTemp.java rename to SensorDemos/src/com/oreilly/demo/android/pa/sensordemo/SensorTemp.java index e1755b3..96a3c7e 100644 --- a/SensorDemos/src/com/oreilly/demo/pa/ch16/SensorTemp.java +++ b/SensorDemos/src/com/oreilly/demo/android/pa/sensordemo/SensorTemp.java @@ -1,4 +1,4 @@ -package com.oreilly.demo.pa.ch16; +package com.oreilly.demo.android.pa.sensordemo; import java.util.List; @@ -15,9 +15,9 @@ import android.widget.Toast; public class SensorTemp extends Activity implements SensorEventListener { - + private boolean hassensor; - + private final Handler tempEventHandler = new Handler() { @Override public void handleMessage(Message msg) { @@ -36,31 +36,31 @@ public void onCreate(Bundle savedInstanceState) { finish(); return; } - + hassensor = true; setContentView(R.layout.sensortemp); - + setTitle("Temperature"); } - + @Override protected void onResume() { super.onResume(); if(hassensor) registerListener(); } - + @Override protected void onPause() { super.onPause(); unregisterListener(); } - + private List getTempSensors() { SensorManager mngr = (SensorManager) getSystemService(Context.SENSOR_SERVICE); List list = mngr.getSensorList(Sensor.TYPE_TEMPERATURE); return list != null && !list.isEmpty() ? list : null; } - + private void registerListener() { SensorManager mngr = (SensorManager) getSystemService(Context.SENSOR_SERVICE); List list = getTempSensors(); @@ -70,7 +70,7 @@ private void registerListener() { } } } - + private void unregisterListener() { if(hassensor) { SensorManager mngr = (SensorManager) getSystemService(Context.SENSOR_SERVICE); @@ -83,7 +83,7 @@ public void onAccuracyChanged(Sensor sensor, int accuracy) { } @Override public void onSensorChanged(SensorEvent event) { - float temp = event.values[0]; + float temp = event.values[0]; Message msg = Message.obtain(); msg.obj = "Temp: "+temp+" C"; tempEventHandler.sendMessage(msg); diff --git a/SensorDemos/build.xml b/SensorDemos/tools/ant/build.xml similarity index 100% rename from SensorDemos/build.xml rename to SensorDemos/tools/ant/build.xml diff --git a/SharedListTask/src/com/oreilly/demo/android/ch02/sharedlisttask/SharedListTask.java b/SharedListTask/src/com/oreilly/demo/android/pa/sharedlisttask/SharedListTask.java similarity index 95% rename from SharedListTask/src/com/oreilly/demo/android/ch02/sharedlisttask/SharedListTask.java rename to SharedListTask/src/com/oreilly/demo/android/pa/sharedlisttask/SharedListTask.java index 51d2bba..dde39aa 100644 --- a/SharedListTask/src/com/oreilly/demo/android/ch02/sharedlisttask/SharedListTask.java +++ b/SharedListTask/src/com/oreilly/demo/android/pa/sharedlisttask/SharedListTask.java @@ -1,6 +1,6 @@ /* $Id: $ */ -package com.oreilly.demo.android.ch02.sharedlisttask; +package com.oreilly.demo.android.pa.sharedlisttask; import java.util.Vector; diff --git a/SimpleFragment/AndroidManifest.xml b/SimpleFragment/AndroidManifest.xml index 23829bd..7b2943e 100644 --- a/SimpleFragment/AndroidManifest.xml +++ b/SimpleFragment/AndroidManifest.xml @@ -1,13 +1,13 @@ - diff --git a/SimpleFragment/res/layout/main.xml b/SimpleFragment/res/layout/main.xml index a5c5399..e8691c7 100644 --- a/SimpleFragment/res/layout/main.xml +++ b/SimpleFragment/res/layout/main.xml @@ -8,7 +8,7 @@ - + + Date: Mon, 16 Jan 2012 16:37:05 -0800 Subject: [PATCH 12/53] Convert new apps to use match_parent instead of fill_parent --- AIDLDemo/res/layout/main.xml | 6 +- AndroidUIDemo/res/layout/main.xml | 6 +- AndroidViewDemo/res/layout/main.xml | 12 +- AsyncTaskDemo/res/layout/asyncdemo.xml | 10 +- .../res/layout/asyncdemoprogress.xml | 12 +- AudioPlayer/README.txt | 7 +- AudioPlayer/res/layout/audioplayer.xml | 10 +- .../res/layout/audioplayerwmediacontrol.xml | 4 +- AudioPlayer/res/layout/audiorecorder.xml | 12 +- AudioPlayer/res/layout/main.xml | 22 +-- AudioPlayer/res/layout/videoplayer.xml | 12 +- AudioPlayer/res/layout/videorecorder.xml | 8 +- ClientDemo/res/layout/account.xml | 10 +- ClientDemo/res/layout/accountadd.xml | 60 ++++---- ClientDemo/res/layout/contact.xml | 2 +- ClientDemo/res/layout/login.xml | 14 +- ClientDemo/res/layout/settings.xml | 50 +++---- FinchFramework/res/layout/example_layout.xml | 4 +- FinchFramework/res/layout/main.xml | 6 +- FinchFramework/res/layout/video_list_item.xml | 8 +- .../res/layout/video_query_activity.xml | 12 +- FinchFramework/tools/ide/eclipse/project | 2 +- FinchFrameworkTest/res/layout/main.xml | 6 +- .../res/layout/simple_video_activity.xml | 22 +-- .../res/layout/simple_video_list_item.xml | 10 +- FinchVideo/res/layout/video_list_item.xml | 8 +- .../res/layout/video_query_activity.xml | 12 +- JSerializable/res/layout/main.xml | 6 +- LifecycleDemos/res/layout/main.xml | 4 +- MicroJobs/res/layout/addjob.xml | 134 +++++++++--------- MicroJobs/res/layout/editjob.xml | 4 +- MicroJobs/res/layout/main.xml | 68 ++++----- MicroJobs/res/layout/microjobs_row.xml | 2 +- MicroJobs/res/layout/microjobsdetail.xml | 8 +- MicroJobs/res/layout/microjobsempdetail.xml | 16 +-- MicroJobs/res/layout/microjobslist.xml | 10 +- NDKDemo/README.txt | 7 +- NDKDemo/res/layout/main.xml | 8 +- NDKDemo/res/layout/sample.xml | 12 +- SensorDemos/res/layout/gesture.xml | 10 +- SensorDemos/res/layout/gestureadd.xml | 82 +++++------ SensorDemos/res/layout/main.xml | 36 ++--- SensorDemos/res/layout/nfc.xml | 12 +- SensorDemos/res/layout/nfc233.xml | 120 ++++++++-------- SensorDemos/res/layout/sensoraccel.xml | 46 +++--- SensorDemos/res/layout/sensorgravity.xml | 46 +++--- SensorDemos/res/layout/sensorgyro.xml | 88 ++++++------ SensorDemos/res/layout/sensorlight.xml | 18 +-- SensorDemos/res/layout/sensorlinearacel.xml | 46 +++--- SensorDemos/res/layout/sensormagnetic.xml | 46 +++--- SensorDemos/res/layout/sensorpressure.xml | 18 +-- SensorDemos/res/layout/sensorproximity.xml | 18 +-- .../res/layout/sensorrotationvector.xml | 46 +++--- SensorDemos/res/layout/sensortemp.xml | 20 +-- SimpleFragment/res/layout/date_time.xml | 6 +- SimpleFragment/res/layout/main.xml | 16 +-- 56 files changed, 651 insertions(+), 649 deletions(-) diff --git a/AIDLDemo/res/layout/main.xml b/AIDLDemo/res/layout/main.xml index dcddcd7..3117038 100644 --- a/AIDLDemo/res/layout/main.xml +++ b/AIDLDemo/res/layout/main.xml @@ -1,12 +1,12 @@ + + + + - + + + + + + + + + + + + + + + + + + diff --git a/MicroJobs/res/layout/editjob.xml b/MicroJobs/res/layout/editjob.xml index 9811400..dbf8fc7 100644 --- a/MicroJobs/res/layout/editjob.xml +++ b/MicroJobs/res/layout/editjob.xml @@ -1,8 +1,8 @@ - + - - + + + + - + + + + + + + + + + + + + + + + + + diff --git a/10/MicroJobs/res/layout/editjob.xml b/MicroJobs/res/layout/editjob.xml similarity index 92% rename from 10/MicroJobs/res/layout/editjob.xml rename to MicroJobs/res/layout/editjob.xml index 9811400..dbf8fc7 100644 --- a/10/MicroJobs/res/layout/editjob.xml +++ b/MicroJobs/res/layout/editjob.xml @@ -1,8 +1,8 @@ - + - -