From f3851c1670f3d16258d0f50e27a3ededdfa96d20 Mon Sep 17 00:00:00 2001 From: David Friedman Date: Wed, 20 Jul 2016 13:44:10 -0700 Subject: [PATCH] Docs: Migration of N docs to about/versions/ With the transition from N Preview to actual Nougat Release, this CL moves the high-level overview files from the preview directory into the about/versions/ directory, under which an archive of current and previous Android versions' changes resides. Change-Id: I42373b0302e953f8166c62e7c8422f2481322240 --- docs/html/_redirects.yaml | 17 + docs/html/about/_book.yaml | 16 +- .../{samples.jd => android-6.0-samples.jd} | 0 .../marshmallow/android-6.0-testing.jd | 183 ++ .../versions/nougat/android-7.0-changes.jd} | 78 +- .../versions/nougat/android-7.0-samples.jd} | 18 +- .../versions/nougat/android-7.0-testing.jd} | 4 +- .../versions/nougat/android-7.0.jd} | 168 +- .../versions/nougat}/index.jd | 12 +- .../android-7.0}/datasaver.png | Bin .../android-7.0}/doze-diagram-1.png | Bin .../android-7.0}/doze-diagram-2.png | Bin .../android-7.0}/m-preview-timeline-crop.png | Bin .../android-7.0}/m-preview-timeline.png | Bin .../android-7.0}/mw-portrait.png | Bin .../android-7.0}/mw-splitscreen.png | Bin .../android-7.0}/mw-splitscreen_2x.png | Bin .../android-7.0}/n-preview-setup.png | Bin .../android-7.0}/quicksettings.png | Bin .../sample-activenotifications.png | Bin .../android-7.0}/sample-directboot.png | Bin .../android-7.0}/sample-messagingservice.png | Bin .../android-7.0}/sample-multiwindow.png | Bin .../sample-scopeddirectoryaccess.png | Bin .../scoped-folder-access-dont-ask.png | Bin 0 -> 67327 bytes .../scoped-folder-access-dont-ask_2x.png | Bin 0 -> 226699 bytes .../scoped-folder-access-framed.png | Bin 0 -> 70150 bytes .../scoped-folder-access-framed_2x.png | Bin 0 -> 255217 bytes .../android-7.0}/screen-zoom-1.png | Bin .../android-7.0}/screen-zoom-2.png | Bin .../android-7.0}/studio-jdk-location.jpg | Bin docs/html/jd_extras_en.js | 11 +- docs/html/preview/download-ota.jd | 332 ---- docs/html/preview/download.jd | 562 ------ docs/html/preview/license.jd | 145 -- docs/html/preview/overview.jd | 450 ----- docs/html/preview/preview_toc.cs | 235 --- docs/html/preview/setup-sdk.jd | 175 -- docs/html/preview/support.jd | 1698 ----------------- docs/html/topic/performance/_book.yaml | 2 + .../performance}/background-optimization.jd | 4 +- docs/html/training/_book.yaml | 2 + .../basics/network-ops}/data-saver.jd | 59 +- .../training/basics/network-ops/managing.jd | 4 +- 44 files changed, 394 insertions(+), 3781 deletions(-) rename docs/html/about/versions/marshmallow/{samples.jd => android-6.0-samples.jd} (100%) create mode 100644 docs/html/about/versions/marshmallow/android-6.0-testing.jd rename docs/html/{preview/behavior-changes.jd => about/versions/nougat/android-7.0-changes.jd} (92%) rename docs/html/{preview/samples.jd => about/versions/nougat/android-7.0-samples.jd} (71%) rename docs/html/{preview/guide.jd => about/versions/nougat/android-7.0-testing.jd} (98%) rename docs/html/{preview/api-overview.jd => about/versions/nougat/android-7.0.jd} (89%) rename docs/html/{preview => about/versions/nougat}/index.jd (94%) rename docs/html/{preview/images => images/android-7.0}/datasaver.png (100%) rename docs/html/{preview/images => images/android-7.0}/doze-diagram-1.png (100%) rename docs/html/{preview/images => images/android-7.0}/doze-diagram-2.png (100%) rename docs/html/{preview/images => images/android-7.0}/m-preview-timeline-crop.png (100%) rename docs/html/{preview/images => images/android-7.0}/m-preview-timeline.png (100%) rename docs/html/{preview/images => images/android-7.0}/mw-portrait.png (100%) rename docs/html/{preview/images => images/android-7.0}/mw-splitscreen.png (100%) rename docs/html/{preview/images => images/android-7.0}/mw-splitscreen_2x.png (100%) rename docs/html/{preview/images => images/android-7.0}/n-preview-setup.png (100%) rename docs/html/{preview/images => images/android-7.0}/quicksettings.png (100%) rename docs/html/{preview/images => images/android-7.0}/sample-activenotifications.png (100%) rename docs/html/{preview/images => images/android-7.0}/sample-directboot.png (100%) rename docs/html/{preview/images => images/android-7.0}/sample-messagingservice.png (100%) rename docs/html/{preview/images => images/android-7.0}/sample-multiwindow.png (100%) rename docs/html/{preview/images => images/android-7.0}/sample-scopeddirectoryaccess.png (100%) create mode 100644 docs/html/images/android-7.0/scoped-folder-access-dont-ask.png create mode 100644 docs/html/images/android-7.0/scoped-folder-access-dont-ask_2x.png create mode 100644 docs/html/images/android-7.0/scoped-folder-access-framed.png create mode 100644 docs/html/images/android-7.0/scoped-folder-access-framed_2x.png rename docs/html/{preview/images => images/android-7.0}/screen-zoom-1.png (100%) rename docs/html/{preview/images => images/android-7.0}/screen-zoom-2.png (100%) rename docs/html/{preview/images => images/android-7.0}/studio-jdk-location.jpg (100%) delete mode 100644 docs/html/preview/download-ota.jd delete mode 100644 docs/html/preview/download.jd delete mode 100644 docs/html/preview/license.jd delete mode 100644 docs/html/preview/overview.jd delete mode 100644 docs/html/preview/preview_toc.cs delete mode 100644 docs/html/preview/setup-sdk.jd delete mode 100644 docs/html/preview/support.jd rename docs/html/{preview/features => topic/performance}/background-optimization.jd (98%) rename docs/html/{preview/features => training/basics/network-ops}/data-saver.jd (87%) diff --git a/docs/html/_redirects.yaml b/docs/html/_redirects.yaml index c12297437cd16..59e4e0f51b8e9 100644 --- a/docs/html/_redirects.yaml +++ b/docs/html/_redirects.yaml @@ -1231,3 +1231,20 @@ redirects: to: /guide/topics/resources/multilingual-support.html - from: /preview/j8-jack.html to: /guide/platform/j8-jack.html +- from: /about/versions/marshmallow/samples.html + to: /about/versions/marshmallow/android-6.0-samples.html +- from: /preview/behavior-changes.html + to: /about/versions/nougat/android-7.0-changes.html +- from: /preview/samples.html + to: /about/versions/nougat/android-7.0-samples.html +- from: /preview/guide.html + to: /about/versions/nougat/android-7.0-testing.html +- from: /preview/api-overview.html + to: /about/versions/nougat/android-7.0.html +- from: /preview/index.html + to: /about/versions/nougat/index.html +- from: /preview/features/background-optimization.html + to: /topic/performance/background-optimization.html +- from: /preview/features/data-saver.html + to: /training/basics/network-ops/data-saver.html + diff --git a/docs/html/about/_book.yaml b/docs/html/about/_book.yaml index fdbe53faeaae4..958435d5e894f 100644 --- a/docs/html/about/_book.yaml +++ b/docs/html/about/_book.yaml @@ -1,4 +1,16 @@ toc: +- title: Nougat + path: /about/versions/nougat/index.html + section: + - title: Android 7.0 APIs + path: /about/versions/nougat/android-7.0.html + - title: Android 7.0 Changes + path: /about/versions/nougat/android-7.0-changes.html + - title: Android 7.0 Samples + path: /about/versions/nougat/android-7.0-samples.html + - title: Android 7.0 Testing + path: /about/versions/nougat/android-7.0-testing.html + - title: Marshmallow path: /about/versions/marshmallow/index.html section: @@ -7,7 +19,9 @@ toc: - title: Android 6.0 Changes path: /about/versions/marshmallow/android-6.0-changes.html - title: Android 6.0 Samples - path: /about/versions/marshmallow/samples.html + path: /about/versions/marshmallow/android-6.0-samples.html + - title: Android 6.0 Testing + path: /about/versions/marshmallow/android-6.0-testing.html - title: Lollipop path: /about/versions/lollipop.html diff --git a/docs/html/about/versions/marshmallow/samples.jd b/docs/html/about/versions/marshmallow/android-6.0-samples.jd similarity index 100% rename from docs/html/about/versions/marshmallow/samples.jd rename to docs/html/about/versions/marshmallow/android-6.0-samples.jd diff --git a/docs/html/about/versions/marshmallow/android-6.0-testing.jd b/docs/html/about/versions/marshmallow/android-6.0-testing.jd new file mode 100644 index 0000000000000..f9d9265ad5493 --- /dev/null +++ b/docs/html/about/versions/marshmallow/android-6.0-testing.jd @@ -0,0 +1,183 @@ +page.title=Android 6.0 Testing Guide +page.image=images/cards/card-n-guide_2x.png +meta.tags="preview", "testing" +page.tags="preview", "developer preview" + +@jd:body + +
+ +
+ +

+ Android 6.0 gives you an opportunity to ensure your apps work with the next + version of the platform. This preview includes a number of APIs and behavior changes that can + impact your app, as described in the API + Overview and Behavior Changes. In testing + your app with the preview, there are some specific system changes that you should focus on to + ensure that users have a good experience. +

+ +

+ This guide describes the what and how to test preview features with your app. You should + prioritize testing of these specific preview features, due to their high potential impact on your + app's behavior: +

+ + + +

Testing Permissions

+ +

+ The new Permissions model + changes the way that permissions are allocated to your app by the user. Instead of granting all + permissions during the install procedure, your app must ask the user for individual permissions + at runtime. For users this behavior provides more granular control over each app’s activities, as + well as better context for understanding why the app is requesting a specific permission. Users + can grant or revoke the permissions granted to an app individually at any time. This feature of + the preview is most likely to have an impact on your app's behavior and may prevent some of your + app features from working, or they may work in a degraded state. +

+ +

+ This change affects all apps running on the new platform, even those not targeting the new + platform version. The platform provides a limited compatibility behavior for legacy apps, but you + should begin planning your app’s migration to the new permissions model now, with a goal of + publishing an updated version of your app at the official platform launch. +

+ + +

Test tips

+ +

+ Use the following test tips to help you plan and execute testing of your app with the new + permissions behavior. +

+ + + +

Test strategy

+ +

+ The permissions change affects the structure and design of your app, as well as + the user experience and flows you provide to users. You should assess your app’s current + permissions use and start planning for the new flows you want to offer. The official release of + the platform provides compatibility behavior, but you should plan on updating your app and not + rely on these behaviors. +

+ +

+ Identify the permissions that your app actually needs and uses, and then find the various code + paths that use the permission-protected services. You can do this through a combination of + testing on the new platform and code analysis. In testing, you should focus on opting in to + runtime permissions by changing the app’s {@code targetSdkVersion} to the preview version. For + more information, see Set up +the Android N SDK. +

+ +

+ Test with various combinations of permissions revoked and added, to highlight the user flows that + depend on permissions. Where a dependency is not obvious or logical you should consider + refactoring or compartmentalizing that flow to eliminate the dependency or make it clear why the + permission is needed. +

+ +

+ For more information on the behavior of runtime permissions, testing, and best practices, see the + Permissions developer + preview page. +

+ + +

Testing Doze and App Standby

+ +

+ The power saving features of Doze and App Standby limit the amount of background processing that + your app can perform when a device is in an idle state or while your app is not in focus. The + restrictions the system may impose on apps include limited or no network access, + suspended background tasks, suspended Notifications, ignored wake requests, and alarms. To ensure + that your app behaves properly with these power saving optimizations, you should test your app by + simulating these low power states. +

+ +

Testing your app with Doze

+ +

To test Doze with your app:

+ +
    +
  1. Configure a hardware device or virtual device with an Android N system image.
  2. +
  3. Connect the device to your development machine and install your app.
  4. +
  5. Run your app and leave it active.
  6. +
  7. Simulate the device going into Doze mode by running the following commands: + +
    +$ adb shell dumpsys battery unplug
    +$ adb shell dumpsys deviceidle step
    +$ adb shell dumpsys deviceidle -h
    +
    + +
  8. +
  9. Observe the behavior of your app when the device is re-activated. Make sure it + recovers gracefully when the device exits Doze.
  10. +
+ + +

Testing apps with App Standby

+ +

To test the App Standby mode with your app:

+ +
    +
  1. Configure a hardware device or virtual device with an Android N system image.
  2. +
  3. Connect the device to your development machine and install your app.
  4. +
  5. Run your app and leave it active.
  6. +
  7. Simulate the app going into standby mode by running the following commands: + +
    +$ adb shell am broadcast -a android.os.action.DISCHARGING
    +$ adb shell am set-idle <packageName> true
    +
    + +
  8. +
  9. Simulate waking your app using the following command: +
    $ adb shell am set-idle <packageName> false
    +
  10. +
  11. Observe the behavior of your app when it is woken. Make sure it recovers gracefully + from standby mode. In particular, you should check if your app's Notifications and background + jobs continue to function as expected.
  12. +
+ +

Auto Backup for Apps and Device-Specific Identifiers

+ +

If your app is persisting any device-specific identifiers, such as Google +Cloud Messaging registration ID, in internal storage, +make sure to follow best practices to exclude the storage +location from auto-backup, as described in Auto +Backup for Apps.

diff --git a/docs/html/preview/behavior-changes.jd b/docs/html/about/versions/nougat/android-7.0-changes.jd similarity index 92% rename from docs/html/preview/behavior-changes.jd rename to docs/html/about/versions/nougat/android-7.0-changes.jd index ba08d9b164110..4f9054c7d5266 100644 --- a/docs/html/preview/behavior-changes.jd +++ b/docs/html/about/versions/nougat/android-7.0-changes.jd @@ -1,7 +1,7 @@ -page.title=Behavior Changes +page.title=Android 7.0 Changes page.keywords=preview,sdk,compatibility -meta.tags="preview", "compatibility" -page.tags="preview", "developer preview" +meta.tags="Android 7.0", "Nougat", "android n", "compatibility" +page.tags="Android 7.0", "Nougat", "android n", "developer preview" page.image=images/cards/card-n-changes_2x.png @jd:body @@ -44,7 +44,7 @@ page.image=images/cards/card-n-changes_2x.png

See Also

  1. - Android N for Developers
  2. + Android 7.0 APIs
@@ -52,7 +52,7 @@ page.image=images/cards/card-n-changes_2x.png

- Along with new features and capabilities, Android N + Along with new features and capabilities, Android 7.0 includes a variety of system and API behavior changes. This document highlights some of the key changes that you should understand and account for in your apps. @@ -67,7 +67,7 @@ page.image=images/cards/card-n-changes_2x.png

Battery and Memory

-Android N includes system behavior changes aimed at improving the battery life +Android 7.0 includes system behavior changes aimed at improving the battery life of devices and reducing RAM usage. These changes can affect your app’s access to system resources, along with the way your app interacts with other apps via certain implicit intents. @@ -78,14 +78,14 @@ certain implicit intents.

Introduced in Android 6.0 (API level 23), Doze improves battery life by deferring CPU and network activities when a user leaves a device unplugged, - stationary, and with the screen turned off. Android N brings further + stationary, and with the screen turned off. Android 7.0 brings further enhancements to Doze by applying a subset of CPU and network restrictions while the device is unplugged with the screen turned off, but not necessarily stationary, for example, when a handset is traveling in a user’s pocket.

-

Figure 1. Illustration of how Doze applies a first level of @@ -105,7 +105,7 @@ certain implicit intents.

-

Figure 2. Illustration of how Doze applies a second level of @@ -128,7 +128,7 @@ certain implicit intents.

Project Svelte: Background Optimizations

- Android N removes three implicit broadcasts in order to help optimize both + Android 7.0 removes three implicit broadcasts in order to help optimize both memory use and power consumption. This change is necessary because implicit broadcasts frequently start apps that have registered to listen for them in the background. Removing these broadcasts can substantially benefit device @@ -154,12 +154,12 @@ certain implicit intents.

- To alleviate these issues, Android N applies the following + To alleviate these issues, Android 7.0 applies the following optimizations:

If your app uses any of these intents, you should remove dependencies - on them as soon as possible so that you can target Android N devices properly. + on them as soon as possible so that you can target Android 7.0 devices properly. The Android framework provides several solutions to mitigate the need for these implicit broadcasts. For example, the {@link android.app.job.JobScheduler} API provides a robust mechanism to schedule @@ -193,14 +193,14 @@ certain implicit intents.

Permissions Changes

- Android N includes changes to permissions that may affect your app. + Android 7.0 includes changes to permissions that may affect your app.

File system permission changes

In order to improve the security of private files, the private directory of - apps targeting Android N or higher has restricted access (0700). + apps targeting Android 7.0 or higher has restricted access (0700). This setting prevents leakage of metadata of private files, such as their size or existence. This permission change has multiple side effects:

@@ -232,7 +232,7 @@ certain implicit intents. stored files by filename. Legacy applications may end up with an unaccessible path when accessing {@link android.app.DownloadManager#COLUMN_LOCAL_FILENAME}. Apps targeting - Android N or higher trigger a {@link java.lang.SecurityException} when + Android 7.0 or higher trigger a {@link java.lang.SecurityException} when attempting to access {@link android.app.DownloadManager#COLUMN_LOCAL_FILENAME}. Legacy applications that set the download location to a public location by @@ -255,7 +255,7 @@ certain implicit intents.

Sharing Files Between Apps

-For apps targeting Android N, the Android framework enforces +For apps targeting Android 7.0, the Android framework enforces the {@link android.os.StrictMode} API policy that prohibits exposing {@code file://} URIs outside your app. If an intent containing a file URI leaves your app, the app fails with a {@code FileUriExposedException} exception. @@ -272,7 +272,7 @@ see Sharing FilesAccessibility Improvements

- Android N includes changes intended to improve the usability of the + Android 7.0 includes changes intended to improve the usability of the platform for users with low or impaired vision. These changes should generally not require code changes in your app, however you should review these feature and test them with your app to assess potential impacts to user @@ -283,7 +283,7 @@ see Sharing FilesScreen Zoom

- Android N enables users to set Display sizewhich magnifies + Android 7.0 enables users to set Display sizewhich magnifies or shrinks all elements on the screen, thereby improving device accessibility for users with low vision. Users cannot zoom the screen past a minimum screen width of Sharing Files

- +
- +

Figure 3. The screen on the right shows the effect of - increasing the Display size of a device running an Android N system image. + increasing the Display size of a device running an Android 7.0 system image.

@@ -323,7 +323,7 @@ see Sharing Files, just as if the device's orientation had changed. -
  • If an app targets Android N, all of its processes +
  • If an app targets Android 7.0, all of its processes (foreground and background) are notified of the configuration change as described in Handling @@ -365,7 +365,7 @@ see Sharing FilesVision Settings in Setup Wizard

    - Android N includes Vision Settings on the Welcome screen, where users can + Android 7.0 includes Vision Settings on the Welcome screen, where users can set up the following accessibility settings on a new device: Magnification gesture, Font size, Display size and TalkBack. This change @@ -378,13 +378,13 @@ see Sharing FilesNDK Apps Linking to Platform Libraries

    - Starting in Android N, the system prevents apps from dynamically linking + Starting in Android 7.0, the system prevents apps from dynamically linking against non-NDK libraries, which may cause your app to crash. This change in behavior aims to create a consistent app experience across platform updates and different devices. Even though your code might not be linking against private libraries, it's possible that a third-party static library in your app could be doing so. Therefore, all developers should check to make sure - that their apps do not crash on devices running Android N. If your app uses + that their apps do not crash on devices running Android 7.0. If your app uses native code, you should only be using public NDK APIs.

    @@ -595,7 +595,7 @@ see Sharing Files To help you identify issues loading private libraries, logcat may generate a warning or runtime error. For example, if your app targets API level 23 or - lower, and tries to access a private library on a device running Android N, + lower, and tries to access a private library on a device running Android 7.0, you may see a warning similar to the following:

    @@ -626,7 +626,7 @@ java.lang.UnsatisfiedLinkError: dlopen failed: library "libcutils.so"

    You may also see these logcat outputs if your app uses third-party libraries that dynamically link to private platform APIs. The readelf tool in the - Android NDK allows you to generate a list of all dynamically linked shared + Android 7.0DK allows you to generate a list of all dynamically linked shared libraries of a given .so file by running the following command:

    @@ -692,7 +692,7 @@ JavaVM::AttachCurrentThread from <jni.h>.

    Android for Work

    - Android N contains changes for apps that target Android for Work, including + Android 7.0 contains changes for apps that target Android for Work, including changes to certificate installation, password resetting, secondary user management, and access to device identifiers. If you are building apps for Android for Work environments, you should review these changes and modify @@ -749,7 +749,7 @@ JavaVM::AttachCurrentThread from <jni.h>. DER-encoded format under a .crt or .cer file extension.

  • -
  • Starting in Android N, fingerprint enrollment and storage are managed per user. +
  • Starting in Android 7.0, fingerprint enrollment and storage are managed per user. If a profile owner’s Device Policy Client (DPC) targets pre-N on an N device, the user is still able to set fingerprint on the device, but work applications cannot access device fingerprint. When the DPC targets N and @@ -765,7 +765,7 @@ JavaVM::AttachCurrentThread from <jni.h>. is returned, even if the encryption key is specific to the user or profile.
  • -
  • In Android N, several methods that would ordinarily affect the entire +
  • In Android 7.0, several methods that would ordinarily affect the entire device behave differently if the device has a work profile installed with a separate work challenge. Rather than affecting the entire device, these methods apply only to the work profile. (The complete list of such methods is @@ -785,14 +785,14 @@ JavaVM::AttachCurrentThread from <jni.h>.

    - For more information about changes to Android for Work in Android N, see + For more information about changes to Android for Work in Android 7.0, see Android for Work Updates.

    Annotations Retention

    -Android N fixes a bug where the visibility of annotations was being ignored. +Android 7.0 fixes a bug where the visibility of annotations was being ignored. This issue enabled the runtime to access annotations that it should not have been able to. These annotations included:

    @@ -811,7 +811,7 @@ be available at runtime. You do so by using {@code @Retention(RetentionPolicy.RU

    Other Important Points

    diff --git a/docs/html/training/_book.yaml b/docs/html/training/_book.yaml index 953a176554113..0523ec9e12b08 100644 --- a/docs/html/training/_book.yaml +++ b/docs/html/training/_book.yaml @@ -420,6 +420,8 @@ toc: path: /training/basics/network-ops/connecting.html - title: Managing Network Usage path: /training/basics/network-ops/managing.html + - title: Optimizing Network Data Usage + path: /training/basics/network-ops/data-saver.html - title: Parsing XML Data path: /training/basics/network-ops/xml.html - title: Transferring Data Without Draining the Battery diff --git a/docs/html/preview/features/data-saver.jd b/docs/html/training/basics/network-ops/data-saver.jd similarity index 87% rename from docs/html/preview/features/data-saver.jd rename to docs/html/training/basics/network-ops/data-saver.jd index abc47eaa3837e..75b72645282ad 100644 --- a/docs/html/preview/features/data-saver.jd +++ b/docs/html/training/basics/network-ops/data-saver.jd @@ -1,42 +1,39 @@ -page.title=Data Saver -metaDescription=User-enabled data usage optimization. -page.keywords="android N", "data usage", "metered network" -page.image=images/cards/card-nyc_2x.jpg +page.title=Optimizing Network Data Usage +parent.title=Performing Network Operations +parent.link=index.html + +trainingnavtop=true +next.title=Parsing XML Data +next.link=xml.html + @jd:body -
    -

    Over the life of a smartphone, the cost of a cellular data plan can easily - exceed the cost of the device itself. In the N Developer Preview, users can - enable Data Saver on a device-wide basis in order to use less data, whether - roaming, near the end of the billing cycle, or on a small prepaid data pack. + exceed the cost of the device itself. From Android 7.0 (API level 24), + users users can enable Data Saver on a device-wide basis in order + optimize their device's data usage, and use less data. This ability + is especially useful when roaming, near the end of the billing cycle, + or for a small prepaid data pack.

    @@ -253,4 +250,4 @@ if (connMgr.isActiveNetworkMetered()) { Sets wifi with the specified SSID as metered, allowing you to simulate a metered network on an unmetered network. - \ No newline at end of file + diff --git a/docs/html/training/basics/network-ops/managing.jd b/docs/html/training/basics/network-ops/managing.jd index 2609db5a0160b..a29e8745add97 100644 --- a/docs/html/training/basics/network-ops/managing.jd +++ b/docs/html/training/basics/network-ops/managing.jd @@ -6,8 +6,8 @@ trainingnavtop=true previous.title=Connecting to the Network previous.link=connecting.html -next.title=Parsing XML Data -next.link=xml.html +next.title=Optimizing Network Data Usage +next.link=data-saver.html @jd:body