Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4712c68f authored by David Friedman's avatar David Friedman Committed by Android Git Automerger
Browse files

am 18b763bb: am 076d4f40: am 7bd9b634: Merge "docs: Updated M Preview API...

am 18b763bb: am 076d4f40: am 7bd9b634: Merge "docs: Updated M Preview API Overview and Behavior Changes for Preview 2 release." into mnc-preview-docs

* commit '18b763bb':
  docs: Updated M Preview API Overview and Behavior Changes for Preview 2 release.
parents 766f3108 18b763bb
Loading
Loading
Loading
Loading
+29 −37
Original line number Diff line number Diff line
@@ -86,9 +86,11 @@ web link and skip prompting users to select an app. To learn how to implement th
<a href="{@docRoot}preview/features/app-linking.html">App Linking</a>.

<h2 id="backup">Auto Backup for Apps</h2>
<p>The system now performs automatic full data backup and restore for apps. This behavior is
enabled by default for apps targeting M Preview; you do not need to add any additional code. If
users delete their Google accounts, their backup data is deleted as well. To learn how this feature
<p>The system now performs automatic full data backup and restore for apps. For the
duration of the <a href="{@docRoot}preview/overview.html">M Developer Preview program</a>, all
apps are backed up, independent of which SDK version they target. After the final M SDK release,
your app must target M to enable this behavior; you do not need to add any additional code. If users
delete their Google accounts, their backup data is deleted as well. To learn how this feature
works and how to configure what to back up on the file system, see
<a href="{@docRoot}preview/backup/index.html">Auto Backup for Apps</a>.</p>

@@ -152,10 +154,9 @@ conjunction with a public or secret key implementation for user authentication.<

<p>To set the timeout duration for which the same key can be re-used after a user is successfully
authenticated, call the new
{@code android.security.keystore.KeyGenParameterSpec.setUserAuthenticationValidityDurationSeconds()}
{@code android.security.keystore.KeyGenParameterSpec.Builder.setUserAuthenticationValidityDurationSeconds()}
method when you set up a {@link javax.crypto.KeyGenerator} or
{@link java.security.KeyPairGenerator}. This feature currently works for symmetric cryptographic
operations.</p>
{@link java.security.KeyPairGenerator}.</p>

<p>Avoid showing the re-authentication dialog excessively -- your apps should try using the
cryptographic object first and if the the timeout expires, use the
@@ -236,7 +237,7 @@ can summon the assistant within any app, by long-pressing on the <strong>Home</s
<p>Your app can elect to not share the current context with the assistant by setting the
{@link android.view.WindowManager.LayoutParams#FLAG_SECURE} flag. In addition to the
standard set of information that the platform passes to the assistant, your app can share
additional information by using the new {@code android.app.Activity.AssistContent} class.</p>
additional information by using the new {@code android.app.assist.AssistContent} class.</p>

<p>To provide the assistant with additional context from your app, follow these steps:</p>

@@ -273,7 +274,7 @@ and connect a compatible Bluetooth stylus with their phone or tablet. While con
information from the touch screen is fused with pressure and button information from the stylus to
provide a greater range of expression than with the touch screen alone. Your app can listen for
stylus button presses and perform secondary actions, by registering the new
{@code View.onStylusButtonPressListener} and {@code GestureDetector.OnStylusButtonPressListener}
{@code View.onContextClickListener} and {@code GestureDetector.onContextClickListener}
callbacks in your activity.</p>

<p>Use the {@link android.view.MotionEvent} methods and constants to detect stylus button
@@ -284,11 +285,11 @@ interactions:</p>
{@link android.view.MotionEvent#TOOL_TYPE_STYLUS}.</li>
<li>For apps targeting M Preview, the
{@link android.view.MotionEvent#getButtonState() getButtonState()}
method returns {@code MotionEvent.STYLUS_BUTTON_PRIMARY} when the user
method returns {@code MotionEvent.BUTTON_STYLUS_PRIMARY} when the user
presses the primary stylus button. If the stylus has a second button, the same method returns
{@code MotionEvent.STYLUS_BUTTON_SECONDARY} when the user presses it. If the user presses
{@code MotionEvent.BUTTON_STYLUS_SECONDARY} when the user presses it. If the user presses
both buttons simultaneously, the method returns both values OR'ed together
({@code STYLUS_BUTTON_PRIMARY|STYLUS_BUTTON_SECONDARY}).</li>
({@code BUTTON_STYLUS_PRIMARY|BUTTON_STYLUS_SECONDARY}).</li>
<li>
For apps targeting a lower platform version, the
{@link android.view.MotionEvent#getButtonState() getButtonState()} method returns
@@ -314,7 +315,7 @@ provision Hotspot 2.0 credentials in your app, use the new methods of the
{@link android.net.wifi.WifiEnterpriseConfig} class, such as {@code setPlmn()} and
{@code setRealm()}. In the {@link android.net.wifi.WifiConfiguration} object, you can set the
{@link android.net.wifi.WifiConfiguration#FQDN} and the {@code providerFriendlyName} fields.
The new {@code ScanResult.PasspointNetwork} property indicates if a detected
The new {@code ScanResult.isPasspointNetwork()} method indicates if a detected
network represents a Hotspot 2.0 access point.
</p>

@@ -356,10 +357,10 @@ allows users to start a voice search from a game controller or remote control co
TV. The system invokes the new {@code android.app.Activity.onSearchRequested()} callback when the
user starts a search. To determine if the user's input device has a built-in microphone, retrieve
the {@link android.view.InputDevice} object from that callback, then call the new
{@code InputDevice.hasMic()} method.</li>
  <li>New {@code android.media.AudioDevicesManager} class which lets you retrieve a list of all
attached source and sink audio devices. You can also specify an
{@code android.media.OnAudioDeviceConnectionListener} object if you want your app to be notified
{@code InputDevice.hasMicrophone()} method.</li>
  <li>New {@code AudioManager.getDevices() method which lets you retrieve a list of all
    audio devices currently connected to the system. You can also register an
{@code android.media.AudioDeviceCallback} object if you want your app to be notified
when an audio device is connected or disconnected.</li>
</ul>

@@ -407,14 +408,15 @@ flash unit. If the torch mode is turned on or off successfully, the

<h3 id="reprocessing">Reprocessing API</h3>
<p>The {@link android.hardware.camera2 Camera2} API is extended to support YUV and private
opaque format image reprocessing. Your app determine if the reprocessing capabilities are available
via {@code CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES}. If a device supports reprocessing,
you can create a reprocessable camera capture session by calling
opaque format image reprocessing. To determine if these reprocessing capabilities are available,
call {@link android.hardware.camera2.CameraManager#getCameraCharacteristics(java.lang.String)
getCameraCharacteristics()} and check for the {@code REPROCESS_MAX_CAPTURE_STALL} key. If a
device supports reprocessing, you can create a reprocessable camera capture session by calling
{@code CameraDevice.createReprocessableCaptureSession()}, and create requests for input
buffer reprocessing.</p>

<p>Use the {@code ImageWriter} class to connect the input buffer flow to the camera reprocessing
input. To get an empty buffer, follow this programming model:</p>
<p>Use the {@code android.media.ImageWriter} class to connect the input buffer flow to the camera
reprocessing input. To get an empty buffer, follow this programming model:</p>

<ol>
<li>Call the {@code ImageWriter.dequeueInputImage()} method.</li>
@@ -428,10 +430,10 @@ data directly. Instead, pass the {@code ImageFormat.PRIVATE} image directly to t
{@code ImageWriter} by calling the {@code ImageWriter.queueInputImage()} method without any
buffer copy.</p>

<p>The {@code ImageReader} class now supports {@code android.graphics.ImageFormat.PRIVATE} format
image streams. This support allows your app to maintain a circular image queue of
{@code ImageReader} output images, select one or more images, and send them to the
{@code ImageWriter} for camera reprocessing.</p>
<p>The {@link android.media.ImageReader} class now supports
{@code android.graphics.ImageFormat.PRIVATE} format image streams. This support allows your app to
maintain a circular image queue of {@link android.media.ImageReader} output images, select one or
more images, and send them to the {@code ImageWriter} for camera reprocessing.</p>

<h2 id="afw">Android for Work Features</h2>
<p>This preview includes the following new APIs for Android for Work:</p>
@@ -441,10 +443,10 @@ can now control the following settings to improve management of
Corporate-Owned, Single-Use (COSU) devices:
  <ul>
    <li>Disable or re-enable the keyguard with the
{@code DevicePolicyManager.setKeyguardEnabledState()} method.</li>
{@code DevicePolicyManager.setKeyguardDisabled()} method.</li>
    <li>Disable or re-enable the status bar (including quick settings, notifications, and the
navigation swipe-up gesture that launches Google Now) with the
{@code DevicePolicyManager.setStatusBarEnabledState()} method.</li>
{@code DevicePolicyManager.setStatusBarDisabled()} method.</li>
    <li>Disable or re-enable safe boot with the {@link android.os.UserManager} constant
{@code DISALLOW_SAFE_BOOT}.</li>
    <li>Prevent the screen from turning off while plugged in with the
@@ -489,16 +491,6 @@ uninstallAllUserCaCerts()}</li>
installKeyPair()}</li>
</ul>
</li>
<li><strong>Enterprise factory reset protection:</strong> When provisioning a Device Owner, you can
now configure parameters to unlock Factory Reset Protection (FRP) by setting the
{@code DeviceManagerPolicy.EXTRA_PROVISIONING_RESET_PROTECTION_PARAMETERS} bundle. An NFC Programmer
app can provide these parameters after a device has been reset to unlock FRP and provision the device,
without requiring the previously configured Google account. If you don't modify these parameters,
FRP remains in-place and prevents the device from being activated without the previously activated
Google credentials.
<p>Additionally, by setting app restrictions on Google Play services, Device Owners can specify
alternative Google accounts for unlocking FRP to replace the ones activated on the device.</p>
</li>
<img src="{@docRoot}preview/images/work-profile-screen.png"
srcset="{@docRoot}preview/images/work-profile-screen.png 1x, {@docRoot}preview/images/work-profile-screen_2x.png 2x"
style="float:right; margin:0 0 10px 20px" width="282" height="476" />
+21 −12
Original line number Diff line number Diff line
@@ -23,8 +23,9 @@ sdk.platform.apiLevel=MNC
    <li><a href="#behavior-keystore">Android Keystore Changes</a></li>
    <li><a href="#behavior-network">Wi-Fi and Networking Changes</a></li>
    <li><a href="#behavior-camera">Camera Service Changes</a></li>
    <li><a href="#behavior-art-runtime">ART Runtime</a></li>
    <li><a href="#behavior-runtime">Runtime</a></li>
    <li><a href="#behavior-apk-validation">APK Validation</a></li>
    <li><a href="#behavior-usb">USB Connection</a></li>
    <li><a href="#behavior-afw">Android for Work Changes</a></li>
</ol>

@@ -46,8 +47,8 @@ sdk.platform.apiLevel=MNC
system changes and API behavior changes. This document highlights
some of the key changes that you should understand and account for in your apps.</p>

<p>If you have previously published an app for Android, be aware that your app
  might be affected by these changes in the platform.</p>
<p>If you have previously published an app for Android, be aware that these changes in the
platform affect your app.</p>

<h2 id="behavior-runtime-permissions">Runtime Permissions</h1>
<p>This preview introduces a new permissions model, where users can now directly manage
@@ -55,11 +56,11 @@ app permissions at runtime. This model gives users improved visibility and contr
permissions, while streamlining the installation and auto-update processes for app developers.
Users can grant or revoke permissions individually for installed apps. </p>

<p>On your apps that target the M Preview, make sure to check and request for permissions at
runtime. To determine if your app has been granted a permission, call the
new {@code Context.checkSelfPermission()} method. To request for a permission, call the new
{@code Activity.requestPermission()} method. Even if your app is not targeting M, you
should test your app under the new permissions model.</p>
<p>On your apps that target the M Preview release or higher, make sure to check for and request
permissions at runtime. To determine if your app has been granted a permission, call the
new {@code Context.checkSelfPermission()} method. To request a permission, call the new
{@code Activity.requestPermission()} method. Even if your app is not targeting the M Preview
release, you should test your app under the new permissions model.</p>

<p>For details on supporting the new permissions model in your app, see the
<a href="{@docRoot}preview/features/runtime-permissions.html">
@@ -329,7 +330,7 @@ processes that use the camera subsystem when the user has switched to a differen
</li>
</ul>

<h2 id="behavior-art-runtime">ART Runtime</h2>
<h2 id="behavior-runtime">Runtime</h2>
<p>The ART runtime now properly implements access rules for the
{@link java.lang.reflect.Constructor#newInstance(java.lang.Object...) newInstance()} method. This
change fixes a problem where Dalvik was checking access rules incorrectly in previous versions.
@@ -362,14 +363,22 @@ implemented. Apps which previously worked that have bad {@code DT_NEEDED} entrie
declared in the manifest but not present in the APK itself. An APK must be re-signed if any of the
contents are removed.</p>

<h2 id="behavior-usb">USB Connection</h2>
<p>Device connections through the USB port are now set to charge-only mode by default. To access
the device and its content over a USB connection, users must explicitly grant permission for such
interactions. If your app supports user interactions with the device over a USB port, take into
consideration that the interaction must be explicitly enabled.
</p>

<h2 id="behavior-afw">Android for Work Changes</h2>
<p>This preview includes the following behavior changes for Android for Work:</p>
<ul>
<li><strong>Work contacts in personal contexts.</strong> The Google Dialer
Call Log now displays work contacts when the user views past calls.
Setting {@code DevicePolicyManager.setCrossProfileCallerIdDisabled()} to {@code true} hides the
work profile contacts in the Google Dialer Call Log. Work contacts can be displayed along with
personal contacts to devices over Bluetooth only if
Setting
{@link android.app.admin.DevicePolicyManager#setCrossProfileCallerIdDisabled(android.content.ComponentName, boolean) setCrossProfileCallerIdDisabled()}
to {@code true} hides the work profile contacts in the Google Dialer Call Log. Work contacts can be
displayed along with personal contacts to devices over Bluetooth only if
you set {@code DevicePolicyManager.setBluetoothContactSharingDisabled()} to {@code false}. By
default, it is set to {@code true}.
</li>