Merge "Fix recents button on large devices (5490265)" into ics-mr1
diff --git a/Android.mk b/Android.mk
index 07380bc..4c0c43a 100644
--- a/Android.mk
+++ b/Android.mk
@@ -435,7 +435,9 @@
-samplecode $(sample_dir)/NotePad \
resources/samples/NotePad "Note Pad" \
-samplecode $(sample_dir)/SpellChecker/SampleSpellCheckerService \
- resources/samples/SpellChecker/SampleSpellCheckerService "Spell Checker" \
+ resources/samples/SpellChecker/SampleSpellCheckerService "Spell Checker service" \
+ -samplecode $(sample_dir)/SpellChecker/HelloSpellChecker \
+ resources/samples/SpellChecker/HelloSpellCheckerService "Spell Checker client" \
-samplecode $(sample_dir)/SampleSyncAdapter \
resources/samples/SampleSyncAdapter "Sample Sync Adapter" \
-samplecode $(sample_dir)/RandomMusicPlayer \
diff --git a/api/current.txt b/api/current.txt
index 0e32d88..c94d485 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -10537,6 +10537,7 @@
field public static final int QUALITY_HIGH = 1; // 0x1
field public static final int QUALITY_LOW = 0; // 0x0
field public static final int QUALITY_QCIF = 2; // 0x2
+ field public static final int QUALITY_QVGA = 7; // 0x7
field public static final int QUALITY_TIME_LAPSE_1080P = 1006; // 0x3ee
field public static final int QUALITY_TIME_LAPSE_480P = 1004; // 0x3ec
field public static final int QUALITY_TIME_LAPSE_720P = 1005; // 0x3ed
@@ -10544,6 +10545,7 @@
field public static final int QUALITY_TIME_LAPSE_HIGH = 1001; // 0x3e9
field public static final int QUALITY_TIME_LAPSE_LOW = 1000; // 0x3e8
field public static final int QUALITY_TIME_LAPSE_QCIF = 1002; // 0x3ea
+ field public static final int QUALITY_TIME_LAPSE_QVGA = 1007; // 0x3ef
field public int audioBitRate;
field public int audioChannels;
field public int audioCodec;
@@ -15728,6 +15730,7 @@
field public static final int TYPE_NONE = 0; // 0x0
field public static final int TYPE_OPTIONAL = 2; // 0x2
field public static final int TYPE_REQUIRED = 1; // 0x1
+ field public static final int TYPE_RESOURCE = 3; // 0x3
}
public static final class CalendarContract.CalendarAlerts implements android.provider.BaseColumns android.provider.CalendarContract.CalendarAlertsColumns android.provider.CalendarContract.CalendarColumns android.provider.CalendarContract.EventsColumns {
@@ -15766,9 +15769,12 @@
}
protected static abstract interface CalendarContract.CalendarColumns {
+ field public static final java.lang.String ALLOWED_ATTENDEE_TYPES = "allowedAttendeeTypes";
+ field public static final java.lang.String ALLOWED_AVAILABILITY = "allowedAvailability";
field public static final java.lang.String ALLOWED_REMINDERS = "allowedReminders";
field public static final java.lang.String CALENDAR_ACCESS_LEVEL = "calendar_access_level";
field public static final java.lang.String CALENDAR_COLOR = "calendar_color";
+ field public static final java.lang.String CALENDAR_COLOR_KEY = "calendar_color_index";
field public static final java.lang.String CALENDAR_DISPLAY_NAME = "calendar_displayName";
field public static final java.lang.String CALENDAR_TIME_ZONE = "calendar_timezone";
field public static final int CAL_ACCESS_CONTRIBUTOR = 500; // 0x1f4
@@ -15813,6 +15819,18 @@
field public static final java.lang.String NAME = "name";
}
+ public static final class CalendarContract.Colors implements android.provider.CalendarContract.ColorsColumns {
+ field public static final android.net.Uri CONTENT_URI;
+ }
+
+ protected static abstract interface CalendarContract.ColorsColumns implements android.provider.SyncStateContract.Columns {
+ field public static final java.lang.String COLOR = "color";
+ field public static final java.lang.String COLOR_KEY = "color_index";
+ field public static final java.lang.String COLOR_TYPE = "color_type";
+ field public static final int TYPE_CALENDAR = 0; // 0x0
+ field public static final int TYPE_EVENT = 1; // 0x1
+ }
+
public static final class CalendarContract.EventDays implements android.provider.CalendarContract.EventDaysColumns {
method public static final android.database.Cursor query(android.content.ContentResolver, int, int, java.lang.String[]);
field public static final android.net.Uri CONTENT_URI;
@@ -15838,6 +15856,7 @@
field public static final java.lang.String AVAILABILITY = "availability";
field public static final int AVAILABILITY_BUSY = 0; // 0x0
field public static final int AVAILABILITY_FREE = 1; // 0x1
+ field public static final int AVAILABILITY_TENTATIVE = 2; // 0x2
field public static final java.lang.String CALENDAR_ID = "calendar_id";
field public static final java.lang.String CAN_INVITE_OTHERS = "canInviteOthers";
field public static final java.lang.String DESCRIPTION = "description";
@@ -15845,6 +15864,7 @@
field public static final java.lang.String DTSTART = "dtstart";
field public static final java.lang.String DURATION = "duration";
field public static final java.lang.String EVENT_COLOR = "eventColor";
+ field public static final java.lang.String EVENT_COLOR_KEY = "eventColor_index";
field public static final java.lang.String EVENT_END_TIMEZONE = "eventEndTimezone";
field public static final java.lang.String EVENT_LOCATION = "eventLocation";
field public static final java.lang.String EVENT_TIMEZONE = "eventTimezone";
diff --git a/core/java/android/provider/CalendarContract.java b/core/java/android/provider/CalendarContract.java
index b14ca2b0..413150b 100644
--- a/core/java/android/provider/CalendarContract.java
+++ b/core/java/android/provider/CalendarContract.java
@@ -300,20 +300,17 @@
public static final String CALENDAR_COLOR = "calendar_color";
/**
- * An index for looking up a color from the {@link Colors} table. NULL
- * or an empty string are reserved for indicating that the calendar does
- * not use an index for looking up the color. The provider will update
- * {@link #CALENDAR_COLOR} automatically when a valid index is written
- * to this column. The index must reference an existing row of the
+ * A key for looking up a color from the {@link Colors} table. NULL or
+ * an empty string are reserved for indicating that the calendar does
+ * not use a key for looking up the color. The provider will update
+ * {@link #CALENDAR_COLOR} automatically when a valid key is written to
+ * this column. The key must reference an existing row of the
* {@link Colors} table. @see Colors
* <P>
* Type: TEXT
* </P>
- * TODO UNHIDE
- *
- * @hide
*/
- public static final String CALENDAR_COLOR_INDEX = "calendar_color_index";
+ public static final String CALENDAR_COLOR_KEY = "calendar_color_index";
/**
* The display name of the calendar. Column name.
@@ -419,9 +416,6 @@
* {@link Events#AVAILABILITY_BUSY} should be used to indicate that
* changing the availability is not supported.
*
- * TODO UNHIDE, Update Calendars doc
- *
- * @hide
*/
public static final String ALLOWED_AVAILABILITY = "allowedAvailability";
@@ -433,9 +427,6 @@
* {@link Attendees#TYPE_NONE} should be used to indicate that changing
* the attendee type is not supported.
*
- * TODO UNHIDE, Update Calendars doc
- *
- * @hide
*/
public static final String ALLOWED_ATTENDEE_TYPES = "allowedAttendeeTypes";
}
@@ -573,6 +564,8 @@
* <li>{@link #SYNC_EVENTS} set to 1</li>
* <li>{@link #CALENDAR_TIME_ZONE}</li>
* <li>{@link #ALLOWED_REMINDERS}</li>
+ * <li>{@link #ALLOWED_AVAILABILITY}</li>
+ * <li>{@link #ALLOWED_ATTENDEE_TYPES}</li>
* </ul>
* <dt><b>Update</b></dt>
* <dd>To perform an update on a calendar the {@link #_ID} of the calendar
@@ -612,6 +605,8 @@
* <li>{@link #OWNER_ACCOUNT}</li>
* <li>{@link #MAX_REMINDERS}</li>
* <li>{@link #ALLOWED_REMINDERS}</li>
+ * <li>{@link #ALLOWED_AVAILABILITY}</li>
+ * <li>{@link #ALLOWED_ATTENDEE_TYPES}</li>
* <li>{@link #CAN_MODIFY_TIME_ZONE}</li>
* <li>{@link #CAN_ORGANIZER_RESPOND}</li>
* <li>{@link #CAN_PARTIALLY_UPDATE}</li>
@@ -735,7 +730,8 @@
/**
* The type of attendee. Column name.
* <P>
- * Type: Integer (one of {@link #TYPE_REQUIRED}, {@link #TYPE_OPTIONAL}
+ * Type: Integer (one of {@link #TYPE_NONE}, {@link #TYPE_REQUIRED},
+ * {@link #TYPE_OPTIONAL}, {@link #TYPE_RESOURCE})
* </P>
*/
public static final String ATTENDEE_TYPE = "attendeeType";
@@ -744,10 +740,8 @@
public static final int TYPE_REQUIRED = 1;
public static final int TYPE_OPTIONAL = 2;
/**
- * This specifies that an attendee is a resource, such as a room, and
- * not an actual person. TODO UNHIDE and add to ATTENDEE_TYPE comment
- *
- * @hide
+ * This specifies that an attendee is a resource, like a room, a
+ * cabbage, or something and not an actual person.
*/
public static final int TYPE_RESOURCE = 3;
@@ -849,20 +843,17 @@
public static final String EVENT_COLOR = "eventColor";
/**
- * A secondary color index for the individual event. NULL or an empty
- * string are reserved for indicating that the event does not use an
- * index for looking up the color. The provider will update
- * {@link #EVENT_COLOR} automatically when a valid index is written to
- * this column. The index must reference an existing row of the
+ * A secondary color key for the individual event. NULL or an empty
+ * string are reserved for indicating that the event does not use a key
+ * for looking up the color. The provider will update
+ * {@link #EVENT_COLOR} automatically when a valid key is written to
+ * this column. The key must reference an existing row of the
* {@link Colors} table. @see Colors
* <P>
* Type: TEXT
* </P>
- * TODO UNHIDE
- *
- * @hide
*/
- public static final String EVENT_COLOR_INDEX = "eventColor_index";
+ public static final String EVENT_COLOR_KEY = "eventColor_index";
/**
* The event status. Column name.
@@ -1020,8 +1011,10 @@
/**
* If this event counts as busy time or is still free time that can be
* scheduled over. Column name.
- * <P>Type: INTEGER (One of {@link #AVAILABILITY_BUSY},
- * {@link #AVAILABILITY_FREE})</P>
+ * <P>
+ * Type: INTEGER (One of {@link #AVAILABILITY_BUSY},
+ * {@link #AVAILABILITY_FREE}, {@link #AVAILABILITY_TENTATIVE})
+ * </P>
*/
public static final String AVAILABILITY = "availability";
@@ -1038,10 +1031,6 @@
/**
* Indicates that the owner's availability may change, but should be
* considered busy time that will conflict.
- *
- * TODO UNHIDE
- *
- * @hide
*/
public static final int AVAILABILITY_TENTATIVE = 2;
@@ -1418,6 +1407,7 @@
* <li>dtend if the event is non-recurring</li>
* <li>duration if the event is recurring</li>
* <li>rrule or rdate if the event is recurring</li>
+ * <li>eventTimezone</li>
* <li>a calendar_id</li>
* </ul>
* There are also further requirements when inserting or updating an event.
@@ -1555,6 +1545,8 @@
CAL_SYNC9,
CAL_SYNC10,
ALLOWED_REMINDERS,
+ ALLOWED_ATTENDEE_TYPES,
+ ALLOWED_AVAILABILITY,
CALENDAR_ACCESS_LEVEL,
CALENDAR_COLOR,
CALENDAR_TIME_ZONE,
@@ -2306,10 +2298,6 @@
}
}
- /**
- * @hide
- * TODO UNHIDE
- */
protected interface ColorsColumns extends SyncStateContract.Columns {
/**
@@ -2331,14 +2319,14 @@
public static final int TYPE_EVENT = 1;
/**
- * The index used to reference this color. This can be any non-empty
+ * The key used to reference this color. This can be any non-empty
* string, but must be unique for a given {@link #ACCOUNT_TYPE} and
* {@link #ACCOUNT_NAME}. Column name.
* <P>
* Type: TEXT
* </P>
*/
- public static final String COLOR_INDEX = "color_index";
+ public static final String COLOR_KEY = "color_index";
/**
* The color as an 8-bit ARGB integer value. Colors should specify alpha
@@ -2356,14 +2344,11 @@
/**
* Fields for accessing colors available for a given account. Colors are
- * referenced by {@link #COLOR_INDEX} which must be unique for a given
+ * referenced by {@link #COLOR_KEY} which must be unique for a given
* account name/type. These values can only be updated by the sync
* adapter. Only {@link #COLOR} may be updated after the initial insert. In
* addition, a row can only be deleted once all references to that color
* have been removed from the {@link Calendars} or {@link Events} tables.
- * TODO UNHIDE
- *
- * @hide
*/
public static final class Colors implements ColorsColumns {
/**
diff --git a/core/java/android/service/textservice/package.html b/core/java/android/service/textservice/package.html
index b498719..0b5113b 100644
--- a/core/java/android/service/textservice/package.html
+++ b/core/java/android/service/textservice/package.html
@@ -31,8 +31,10 @@
</service>
</pre>
-<p>For example code, see the <a
+<p>For example code, see the sample <a
href="{@docRoot}resources/samples/SpellChecker/SampleSpellCheckerService/index.html">Spell
-Checker</a> sample app.</p>
+Checker service</a> app, and the sample <a
+href="{@docRoot}resources/samples/SpellChecker/HelloSpellChecker/index.html">Spell
+Checker client</a> app.</p>
</BODY>
</HTML>
diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java
index 3731097..58b63fe 100644
--- a/core/java/android/webkit/WebView.java
+++ b/core/java/android/webkit/WebView.java
@@ -641,6 +641,7 @@
private boolean mAccessibilityScriptInjected;
static final boolean USE_JAVA_TEXT_SELECTION = true;
+ static final boolean DEBUG_TEXT_HANDLES = false;
private Region mTextSelectionRegion = new Region();
private Paint mTextSelectionPaint;
private Drawable mSelectHandleLeft;
@@ -4537,7 +4538,7 @@
int extras = DRAW_EXTRAS_NONE;
if (mFindIsUp) {
extras = DRAW_EXTRAS_FIND;
- } else if (mSelectingText && !USE_JAVA_TEXT_SELECTION) {
+ } else if (mSelectingText && (!USE_JAVA_TEXT_SELECTION || DEBUG_TEXT_HANDLES)) {
extras = DRAW_EXTRAS_SELECTION;
nativeSetSelectionPointer(mNativeClass,
mDrawSelectionPointer,
@@ -4609,33 +4610,29 @@
mTextSelectionPaint.setColor(HIGHLIGHT_COLOR);
}
mTextSelectionRegion.setEmpty();
- nativeGetTextSelectionRegion(mTextSelectionRegion);
+ nativeGetTextSelectionRegion(mNativeClass, mTextSelectionRegion);
Rect r = new Rect();
RegionIterator iter = new RegionIterator(mTextSelectionRegion);
- int start_x = -1;
- int start_y = -1;
- int end_x = -1;
- int end_y = -1;
+ Rect clip = canvas.getClipBounds();
while (iter.next(r)) {
- r = new Rect(
- contentToViewDimension(r.left),
+ r.set(contentToViewDimension(r.left),
contentToViewDimension(r.top),
contentToViewDimension(r.right),
contentToViewDimension(r.bottom));
- // Regions are in order. First one is where selection starts,
- // last one is where it ends
- if (start_x < 0 || start_y < 0) {
- start_x = r.left;
- start_y = r.bottom;
+ if (r.intersect(clip)) {
+ canvas.drawRect(r, mTextSelectionPaint);
}
- end_x = r.right;
- end_y = r.bottom;
- canvas.drawRect(r, mTextSelectionPaint);
}
if (mSelectHandleLeft == null) {
mSelectHandleLeft = mContext.getResources().getDrawable(
com.android.internal.R.drawable.text_select_handle_left);
}
+ int[] handles = new int[4];
+ nativeGetSelectionHandles(mNativeClass, handles);
+ int start_x = contentToViewDimension(handles[0]);
+ int start_y = contentToViewDimension(handles[1]);
+ int end_x = contentToViewDimension(handles[2]);
+ int end_y = contentToViewDimension(handles[3]);
// Magic formula copied from TextView
start_x -= (mSelectHandleLeft.getIntrinsicWidth() * 3) / 4;
mSelectHandleLeft.setBounds(start_x, start_y,
@@ -4649,6 +4646,10 @@
mSelectHandleRight.setBounds(end_x, end_y,
end_x + mSelectHandleRight.getIntrinsicWidth(),
end_y + mSelectHandleRight.getIntrinsicHeight());
+ if (DEBUG_TEXT_HANDLES) {
+ mSelectHandleLeft.setAlpha(125);
+ mSelectHandleRight.setAlpha(125);
+ }
mSelectHandleLeft.draw(canvas);
mSelectHandleRight.draw(canvas);
}
@@ -5409,6 +5410,10 @@
}
mExtendSelection = false;
mSelectingText = mDrawSelectionPointer = true;
+ if (DEBUG_TEXT_HANDLES) {
+ // Debugging text handles requires running in software mode
+ setLayerType(LAYER_TYPE_SOFTWARE, null);
+ }
// don't let the picture change during text selection
WebViewCore.pauseUpdatePicture(mWebViewCore);
if (nativeHasCursorNode()) {
@@ -5487,6 +5492,11 @@
void selectionDone() {
if (mSelectingText) {
mSelectingText = false;
+ if (DEBUG_TEXT_HANDLES) {
+ // Debugging text handles required running in software mode, set
+ // back to default now
+ setLayerType(LAYER_TYPE_NONE, null);
+ }
// finish is idempotent, so this is fine even if selectionDone was
// called by mSelectCallback.onDestroyActionMode
mSelectCallback.finish();
@@ -9608,7 +9618,8 @@
private native int nativeGetBackgroundColor();
native boolean nativeSetProperty(String key, String value);
native String nativeGetProperty(String key);
- private native void nativeGetTextSelectionRegion(Region region);
+ private native void nativeGetTextSelectionRegion(int instance, Region region);
+ private native void nativeGetSelectionHandles(int instance, int[] handles);
/**
* See {@link ComponentCallbacks2} for the trim levels and descriptions
*/
diff --git a/core/res/res/values-af/strings.xml b/core/res/res/values-af/strings.xml
index 3ad01a5..7f25527 100644
--- a/core/res/res/values-af/strings.xml
+++ b/core/res/res/values-af/strings.xml
@@ -1169,6 +1169,8 @@
<string name="description_target_camera" msgid="969071997552486814">"Kamera"</string>
<string name="description_target_silent" msgid="893551287746522182">"Stil"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Klank aan"</string>
+ <!-- no translation found for description_target_unlock_tablet (3833195335629795055) -->
+ <skip />
<string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Koppel \'n kopstuk om te hoor hoe wagwoordsleutels hardop gesê word."</string>
<string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Punt."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Navigeer tuis"</string>
diff --git a/core/res/res/values-am/strings.xml b/core/res/res/values-am/strings.xml
index f23e9e7..3b60099 100644
--- a/core/res/res/values-am/strings.xml
+++ b/core/res/res/values-am/strings.xml
@@ -1169,6 +1169,8 @@
<string name="description_target_camera" msgid="969071997552486814">"ካሜራ"</string>
<string name="description_target_silent" msgid="893551287746522182">"ፀጥታ"</string>
<string name="description_target_soundon" msgid="30052466675500172">"ድምፅ አብራ"</string>
+ <!-- no translation found for description_target_unlock_tablet (3833195335629795055) -->
+ <skip />
<string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"የይለፍቃል ቁልፎች ጮክ በለው ሲነገሩ ለመስማት የጆሮ ማዳመጫ ሰካ::"</string>
<string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"ነጥብ."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"መነሻ ዳስስ"</string>
diff --git a/core/res/res/values-ar/strings.xml b/core/res/res/values-ar/strings.xml
index 1d65c4f..2bd9d69 100644
--- a/core/res/res/values-ar/strings.xml
+++ b/core/res/res/values-ar/strings.xml
@@ -1169,6 +1169,8 @@
<string name="description_target_camera" msgid="969071997552486814">"الكاميرا"</string>
<string name="description_target_silent" msgid="893551287746522182">"صامت"</string>
<string name="description_target_soundon" msgid="30052466675500172">"تشغيل الصوت"</string>
+ <!-- no translation found for description_target_unlock_tablet (3833195335629795055) -->
+ <skip />
<string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"يمكنك توصيل سماعة رأس لسماع مفاتيح كلمة المرور منطوقة بصوت عالٍ."</string>
<string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"نقطة"</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"التنقل إلى الشاشة الرئيسية"</string>
diff --git a/core/res/res/values-bg/strings.xml b/core/res/res/values-bg/strings.xml
index 1b5c4cd..269e348 100644
--- a/core/res/res/values-bg/strings.xml
+++ b/core/res/res/values-bg/strings.xml
@@ -1169,6 +1169,8 @@
<string name="description_target_camera" msgid="969071997552486814">"Камера"</string>
<string name="description_target_silent" msgid="893551287746522182">"Тих режим"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Включване на звука"</string>
+ <!-- no translation found for description_target_unlock_tablet (3833195335629795055) -->
+ <skip />
<string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Включете слушалки, за да чуете клавишите за паролата на висок глас."</string>
<string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Точка."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Придвижване към „Начало“"</string>
diff --git a/core/res/res/values-ca/strings.xml b/core/res/res/values-ca/strings.xml
index ec454a7..b03afef 100644
--- a/core/res/res/values-ca/strings.xml
+++ b/core/res/res/values-ca/strings.xml
@@ -1169,6 +1169,8 @@
<string name="description_target_camera" msgid="969071997552486814">"Càmera"</string>
<string name="description_target_silent" msgid="893551287746522182">"Silenci"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Activa el so"</string>
+ <!-- no translation found for description_target_unlock_tablet (3833195335629795055) -->
+ <skip />
<string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Connecta un auricular per escoltar les claus de la contrasenya en veu alta."</string>
<string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Punt."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Torna a la pàgina d\'inici"</string>
diff --git a/core/res/res/values-cs/strings.xml b/core/res/res/values-cs/strings.xml
index 618e114..3b0b7f9 100644
--- a/core/res/res/values-cs/strings.xml
+++ b/core/res/res/values-cs/strings.xml
@@ -1169,6 +1169,8 @@
<string name="description_target_camera" msgid="969071997552486814">"Fotoaparát"</string>
<string name="description_target_silent" msgid="893551287746522182">"Tichý"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Zapnout zvuk"</string>
+ <!-- no translation found for description_target_unlock_tablet (3833195335629795055) -->
+ <skip />
<string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Chcete-li slyšet, které klávesy jste při zadávání hesla stiskli, připojte sluchátka."</string>
<string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Tečka."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Přejít na plochu"</string>
diff --git a/core/res/res/values-da/strings.xml b/core/res/res/values-da/strings.xml
index 56b24bb..788b285 100644
--- a/core/res/res/values-da/strings.xml
+++ b/core/res/res/values-da/strings.xml
@@ -1169,6 +1169,8 @@
<string name="description_target_camera" msgid="969071997552486814">"Kamera"</string>
<string name="description_target_silent" msgid="893551287746522182">"Lydløs"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Lyd slået til"</string>
+ <!-- no translation found for description_target_unlock_tablet (3833195335629795055) -->
+ <skip />
<string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Tilslut et headset for at få læst taster højt, når du indtaster en adgangskode."</string>
<string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Punktum."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Naviger hjem"</string>
diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml
index c995b69..6bcdaa9 100644
--- a/core/res/res/values-de/strings.xml
+++ b/core/res/res/values-de/strings.xml
@@ -147,7 +147,7 @@
<string name="global_actions" product="default" msgid="2406416831541615258">"Telefonoptionen"</string>
<string name="global_action_lock" msgid="2844945191792119712">"Display-Sperre"</string>
<string name="global_action_power_off" msgid="4471879440839879722">"Ausschalten"</string>
- <string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"Lautlos"</string>
+ <string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"Lautlos-Modus"</string>
<string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"Ton ist AUS."</string>
<string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"Ton ist AN."</string>
<string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Flugmodus"</string>
@@ -256,7 +256,7 @@
<string name="permdesc_systemAlertWindow" msgid="2884149573672821318">"Ermöglicht einer App, Fenster mit Systemwarnungen anzuzeigen. Schädliche Anwendungen können so die Kontrolle über das gesamte Display übernehmen."</string>
<string name="permlab_setAnimationScale" msgid="2805103241153907174">"Allgemeine Animationsgeschwindigkeit einstellen"</string>
<string name="permdesc_setAnimationScale" msgid="7181522138912391988">"Ermöglicht einer App, die allgemeine Animationsgeschwindigkeit (schnellere oder langsamere Animationen) jederzeit anzupassen"</string>
- <string name="permlab_manageAppTokens" msgid="17124341698093865">"Anwendungs-Tokens verwalten"</string>
+ <string name="permlab_manageAppTokens" msgid="17124341698093865">"App-Tokens verwalten"</string>
<string name="permdesc_manageAppTokens" msgid="977127907524195988">"Ermöglicht Anwendungen, Ihre eigenen Tokens zu erstellen und zu verwalten. Hierbei wird die normale Z-Reihenfolge umgangen. Dies sollte nicht für normale Anwendungen benötigt werden."</string>
<string name="permlab_injectEvents" msgid="1378746584023586600">"Tasten und Steuerungstasten drücken"</string>
<string name="permdesc_injectEvents" product="tablet" msgid="7200014808195664505">"Ermöglicht einer App, ihre eigenen Eingabeaktionen (Drücken von Tasten usw.) an andere Anwendungen zu liefern. Schädliche Anwendungen können so die Kontrolle über Ihr Tablet übernehmen."</string>
@@ -1169,6 +1169,8 @@
<string name="description_target_camera" msgid="969071997552486814">"Kamera"</string>
<string name="description_target_silent" msgid="893551287746522182">"Lautlos"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Ton ein"</string>
+ <!-- no translation found for description_target_unlock_tablet (3833195335629795055) -->
+ <skip />
<string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Schließen Sie ein Headset an, um das Passwort gesprochen zu hören."</string>
<string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Punkt."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Zur Startseite navigieren"</string>
diff --git a/core/res/res/values-el/strings.xml b/core/res/res/values-el/strings.xml
index 127e705..529aa62 100644
--- a/core/res/res/values-el/strings.xml
+++ b/core/res/res/values-el/strings.xml
@@ -1084,7 +1084,7 @@
<string name="tethered_notification_message" msgid="3067108323903048927">"Αγγίξτε για να γίνει διαμόρφωση"</string>
<string name="back_button_label" msgid="2300470004503343439">"Πίσω"</string>
<string name="next_button_label" msgid="1080555104677992408">"Επόμενο"</string>
- <string name="skip_button_label" msgid="1275362299471631819">"Παράβλεψη"</string>
+ <string name="skip_button_label" msgid="1275362299471631819">"Παράλειψη"</string>
<string name="throttle_warning_notification_title" msgid="4890894267454867276">"Υψηλή χρήση δεδομένων κινητής τηλεφωνίας"</string>
<string name="throttle_warning_notification_message" msgid="2609734763845705708">"Αγγίξτε για να μάθετε περισσότερα σχετικά με τη χρήση δεδομένων κινητής τηλεφωνίας"</string>
<string name="throttled_notification_title" msgid="6269541897729781332">"Ξεπεράστηκε το όριο δεδομένων κινητής τηλεφωνίας"</string>
@@ -1169,6 +1169,8 @@
<string name="description_target_camera" msgid="969071997552486814">"Φωτογραφική μηχανή"</string>
<string name="description_target_silent" msgid="893551287746522182">"Αθόρυβο"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Ενεργοποίηση ήχου"</string>
+ <!-- no translation found for description_target_unlock_tablet (3833195335629795055) -->
+ <skip />
<string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Συνδέστε ένα σετ ακουστικών για να ακούσετε τα πλήκτρα του κωδικού πρόσβασης να εκφωνούνται δυνατά."</string>
<string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Τελεία."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Πλοήγηση στην αρχική σελίδα"</string>
diff --git a/core/res/res/values-en-rGB/strings.xml b/core/res/res/values-en-rGB/strings.xml
index 43deb8b..adc32a3 100644
--- a/core/res/res/values-en-rGB/strings.xml
+++ b/core/res/res/values-en-rGB/strings.xml
@@ -1169,6 +1169,8 @@
<string name="description_target_camera" msgid="969071997552486814">"Camera"</string>
<string name="description_target_silent" msgid="893551287746522182">"Silent"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Sound on"</string>
+ <!-- no translation found for description_target_unlock_tablet (3833195335629795055) -->
+ <skip />
<string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Plug in a headset to hear password keys spoken aloud."</string>
<string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Dot"</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Navigate home"</string>
diff --git a/core/res/res/values-es-rUS/strings.xml b/core/res/res/values-es-rUS/strings.xml
index cfb6742..84c385c 100644
--- a/core/res/res/values-es-rUS/strings.xml
+++ b/core/res/res/values-es-rUS/strings.xml
@@ -983,13 +983,13 @@
<string name="perms_hide" msgid="7283915391320676226"><b>"Ocultar"</b></string>
<string name="perms_show_all" msgid="2671791163933091180"><b>"Mostrar todos"</b></string>
<string name="usb_storage_activity_title" msgid="2399289999608900443">"Almacenamiento masivo USB"</string>
- <string name="usb_storage_title" msgid="5901459041398751495">"conectado al USB"</string>
+ <string name="usb_storage_title" msgid="5901459041398751495">"Conectado al USB"</string>
<string name="usb_storage_message" product="nosdcard" msgid="6631094834151575841">"Has conectado tu teléfono a tu computadora mediante USB. Selecciona el botón a continuación si deseas copiar los archivos entre tu computadora y el almacenamiento USB de Android."</string>
<string name="usb_storage_message" product="default" msgid="4510858346516069238">"Has conectado tu teléfono a tu computadora mediante USB. Selecciona el botón a continuación si deseas copiar los archivos entre tu computadora y la tarjeta SD de Android."</string>
<string name="usb_storage_button_mount" msgid="1052259930369508235">"Activar el almacenamiento USB"</string>
<string name="usb_storage_error_message" product="nosdcard" msgid="3276413764430468454">"Hay un problema para utilizar el almacenamiento USB en el almacenamiento masivo USB."</string>
<string name="usb_storage_error_message" product="default" msgid="120810397713773275">"Hay un problema para utilizar tu tarjeta SD en el almacenamiento masivo USB."</string>
- <string name="usb_storage_notification_title" msgid="8175892554757216525">"conectado al USB"</string>
+ <string name="usb_storage_notification_title" msgid="8175892554757216525">"Conectado al USB"</string>
<string name="usb_storage_notification_message" msgid="7380082404288219341">"Seleccionar para copiar archivos desde o hacia tu computadora."</string>
<string name="usb_storage_stop_notification_title" msgid="2336058396663516017">"Desactivar el almacenamiento USB"</string>
<string name="usb_storage_stop_notification_message" msgid="2591813490269841539">"Seleccionar para desactivar el almacenamiento USB."</string>
@@ -1169,6 +1169,8 @@
<string name="description_target_camera" msgid="969071997552486814">"Cámara"</string>
<string name="description_target_silent" msgid="893551287746522182">"Silencioso"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Sonido activado"</string>
+ <!-- no translation found for description_target_unlock_tablet (3833195335629795055) -->
+ <skip />
<string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Conecta un auricular para escuchar las contraseñas en voz alta."</string>
<string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Punto"</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Desplazarse hasta la página principal"</string>
diff --git a/core/res/res/values-es/strings.xml b/core/res/res/values-es/strings.xml
index 0d20eb6..a2f54ef 100644
--- a/core/res/res/values-es/strings.xml
+++ b/core/res/res/values-es/strings.xml
@@ -148,11 +148,11 @@
<string name="global_action_lock" msgid="2844945191792119712">"Bloqueo de pantalla"</string>
<string name="global_action_power_off" msgid="4471879440839879722">"Apagar"</string>
<string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"Modo silencio"</string>
- <string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"El sonido está desactivado. Activar."</string>
- <string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"El sonido está activado. Desactivar."</string>
+ <string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"El sonido está desactivado. Activar"</string>
+ <string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"El sonido está activado. Desactivar"</string>
<string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Modo avión"</string>
- <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Modo avión activado. Desactivar."</string>
- <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Modo avión desactivado. Activar."</string>
+ <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Modo avión activado. Desactivar"</string>
+ <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Modo avión desactivado. Activar"</string>
<string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"> 999"</string>
<string name="safeMode" msgid="2788228061547930246">"Modo seguro"</string>
<string name="android_system_label" msgid="6577375335728551336">"Sistema Android"</string>
@@ -750,7 +750,7 @@
<string name="permdesc_packageVerificationAgent" msgid="6033195477325381106">"Permite que la aplicación verifique si se puede instalar un paquete."</string>
<string name="permlab_bindPackageVerifier" msgid="4187786793360326654">"enlazar con un detector de paquetes"</string>
<string name="permdesc_bindPackageVerifier" msgid="2409521927385789318">"Permite hacer solicitudes de detectores de paquetes. Las aplicaciones normales no deberían necesitar este permiso."</string>
- <string name="save_password_message" msgid="767344687139195790">"¿Deseas que el navegador recuerde esta contraseña?"</string>
+ <string name="save_password_message" msgid="767344687139195790">"¿Quieres que el navegador recuerde esta contraseña?"</string>
<string name="save_password_notnow" msgid="6389675316706699758">"Ahora no"</string>
<string name="save_password_remember" msgid="6491879678996749466">"Recordar"</string>
<string name="save_password_never" msgid="8274330296785855105">"Nunca"</string>
@@ -983,19 +983,19 @@
<string name="perms_hide" msgid="7283915391320676226"><b>"Ocultar"</b></string>
<string name="perms_show_all" msgid="2671791163933091180"><b>"Mostrar todos"</b></string>
<string name="usb_storage_activity_title" msgid="2399289999608900443">"Almacenamiento USB masivo"</string>
- <string name="usb_storage_title" msgid="5901459041398751495">"Conectado por USB"</string>
- <string name="usb_storage_message" product="nosdcard" msgid="6631094834151575841">"Has conectado el teléfono al equipo mediante USB. Toca el botón situado debajo si deseas copiar archivos entre el equipo y el almacenamiento USB del teléfono Android."</string>
- <string name="usb_storage_message" product="default" msgid="4510858346516069238">"Has conectado el teléfono al equipo mediante USB. Toca el botón situado debajo si deseas copiar archivos entre el equipo y la tarjeta SD del teléfono Android."</string>
+ <string name="usb_storage_title" msgid="5901459041398751495">"Conexión por USB"</string>
+ <string name="usb_storage_message" product="nosdcard" msgid="6631094834151575841">"Has conectado el dispositivo al ordenador por USB. Toca el si siguiente botón si quieres copiar archivos entre el ordenador y el almacenamiento USB del dispositivo."</string>
+ <string name="usb_storage_message" product="default" msgid="4510858346516069238">"Has conectado el dispositivo al ordenador por USB. Toca el siguiente botón si quieres copiar archivos entre el ordenador y la tarjeta SD del dispositivo."</string>
<string name="usb_storage_button_mount" msgid="1052259930369508235">"Activar almacenamiento USB"</string>
- <string name="usb_storage_error_message" product="nosdcard" msgid="3276413764430468454">"Se ha producido un problema al utilizar el almacenamiento USB para el almacenamiento masivo USB."</string>
+ <string name="usb_storage_error_message" product="nosdcard" msgid="3276413764430468454">"Se ha producido una incidencia al usar el almacenamiento USB para el almacenamiento masivo USB."</string>
<string name="usb_storage_error_message" product="default" msgid="120810397713773275">"Se ha producido un problema al utilizar la tarjeta SD para el almacenamiento USB masivo."</string>
- <string name="usb_storage_notification_title" msgid="8175892554757216525">"Conectado por USB"</string>
- <string name="usb_storage_notification_message" msgid="7380082404288219341">"Para copiar archivos al/desde el equipo"</string>
+ <string name="usb_storage_notification_title" msgid="8175892554757216525">"Conexión por USB"</string>
+ <string name="usb_storage_notification_message" msgid="7380082404288219341">"Toca para copiar archivos"</string>
<string name="usb_storage_stop_notification_title" msgid="2336058396663516017">"Desactivar almacenamiento USB"</string>
<string name="usb_storage_stop_notification_message" msgid="2591813490269841539">"Seleccionar para desactivar USB."</string>
- <string name="usb_storage_stop_title" msgid="660129851708775853">"El almacenamiento USB está en uso."</string>
+ <string name="usb_storage_stop_title" msgid="660129851708775853">"El almacenamiento USB está en uso"</string>
<string name="usb_storage_stop_message" product="nosdcard" msgid="1368842269463745067">"Antes de desactivar el almacenamiento USB, asegúrate de haber desactivado (\"extraído\") el almacenamiento USB del teléfono con Android del equipo."</string>
- <string name="usb_storage_stop_message" product="default" msgid="3613713396426604104">"Antes de desactivar el almacenamiento USB, asegúrate de haber desmontado (\"retirado\") la tarjeta SD del teléfono con Android del equipo."</string>
+ <string name="usb_storage_stop_message" product="default" msgid="3613713396426604104">"Antes de desactivar el almacenamiento USB, asegúrate de haber desactivado la tarjeta SD del teléfono en el ordenador."</string>
<string name="usb_storage_stop_button_mount" msgid="7060218034900696029">"Desactivar almacenamiento USB"</string>
<string name="usb_storage_stop_error_message" msgid="143881914840412108">"Se ha producido un problema al desactivar el almacenamiento USB. Asegúrate de haber desactivado el host USB y, a continuación, vuelve a intentarlo."</string>
<string name="dlg_confirm_kill_storage_users_title" msgid="963039033470478697">"Activar almacenamiento USB"</string>
@@ -1169,6 +1169,8 @@
<string name="description_target_camera" msgid="969071997552486814">"Cámara"</string>
<string name="description_target_silent" msgid="893551287746522182">"Silencio"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Sonido activado"</string>
+ <!-- no translation found for description_target_unlock_tablet (3833195335629795055) -->
+ <skip />
<string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Conecta un auricular para escuchar las contraseñas en voz alta."</string>
<string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Punto"</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Ir al escritorio"</string>
diff --git a/core/res/res/values-fa/strings.xml b/core/res/res/values-fa/strings.xml
index 869b540..274d46b 100644
--- a/core/res/res/values-fa/strings.xml
+++ b/core/res/res/values-fa/strings.xml
@@ -1169,6 +1169,8 @@
<string name="description_target_camera" msgid="969071997552486814">"دوربین"</string>
<string name="description_target_silent" msgid="893551287746522182">"ساکت"</string>
<string name="description_target_soundon" msgid="30052466675500172">"صدا روشن"</string>
+ <!-- no translation found for description_target_unlock_tablet (3833195335629795055) -->
+ <skip />
<string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"برای شنیدن کلیدهای گذرواژه که با صدای بلند خوانده میشوند، از هدست استفاده کنید."</string>
<string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"نقطه."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"رفتن به صفحه اصلی"</string>
diff --git a/core/res/res/values-fi/strings.xml b/core/res/res/values-fi/strings.xml
index d16d29b..1f0d020 100644
--- a/core/res/res/values-fi/strings.xml
+++ b/core/res/res/values-fi/strings.xml
@@ -1169,6 +1169,8 @@
<string name="description_target_camera" msgid="969071997552486814">"Kamera"</string>
<string name="description_target_silent" msgid="893551287746522182">"Äänetön"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Ääni käytössä"</string>
+ <!-- no translation found for description_target_unlock_tablet (3833195335629795055) -->
+ <skip />
<string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Liitä kuulokkeet kuullaksesi, mitä näppäimiä painat kirjoittaessasi salasanaa."</string>
<string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Piste."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Siirry etusivulle"</string>
diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml
index 3ef6347..6336532 100644
--- a/core/res/res/values-fr/strings.xml
+++ b/core/res/res/values-fr/strings.xml
@@ -1169,6 +1169,8 @@
<string name="description_target_camera" msgid="969071997552486814">"Appareil photo"</string>
<string name="description_target_silent" msgid="893551287746522182">"Mode silencieux"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Son activé"</string>
+ <!-- no translation found for description_target_unlock_tablet (3833195335629795055) -->
+ <skip />
<string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Branchez des écouteurs pour entendre l\'énoncé à haute voix des touches du mot de passe."</string>
<string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Point."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Retour à l\'accueil"</string>
diff --git a/core/res/res/values-hi/strings.xml b/core/res/res/values-hi/strings.xml
index 968ade8..c275a5d 100644
--- a/core/res/res/values-hi/strings.xml
+++ b/core/res/res/values-hi/strings.xml
@@ -1169,6 +1169,8 @@
<string name="description_target_camera" msgid="969071997552486814">"कैमरा"</string>
<string name="description_target_silent" msgid="893551287746522182">"मौन"</string>
<string name="description_target_soundon" msgid="30052466675500172">"ध्वनि चालू करें"</string>
+ <!-- no translation found for description_target_unlock_tablet (3833195335629795055) -->
+ <skip />
<string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"ज़ोर से बोली गईं पासवर्ड कुंजियां सुनने के लिए हेडसेट प्लग इन करें."</string>
<string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"बिंदु."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"होम पर नेविगेट करें"</string>
diff --git a/core/res/res/values-hr/strings.xml b/core/res/res/values-hr/strings.xml
index 84d940d..3c90e09 100644
--- a/core/res/res/values-hr/strings.xml
+++ b/core/res/res/values-hr/strings.xml
@@ -1169,6 +1169,8 @@
<string name="description_target_camera" msgid="969071997552486814">"Fotoaparat"</string>
<string name="description_target_silent" msgid="893551287746522182">"Bešumno"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Zvuk je uključen"</string>
+ <!-- no translation found for description_target_unlock_tablet (3833195335629795055) -->
+ <skip />
<string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Priključite slušalice da biste čuli tipke zaporke izgovorene naglas."</string>
<string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Točka."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Kreni na početnu"</string>
diff --git a/core/res/res/values-hu/strings.xml b/core/res/res/values-hu/strings.xml
index b2b61e6..c416f2e 100644
--- a/core/res/res/values-hu/strings.xml
+++ b/core/res/res/values-hu/strings.xml
@@ -1169,6 +1169,8 @@
<string name="description_target_camera" msgid="969071997552486814">"Kamera"</string>
<string name="description_target_silent" msgid="893551287746522182">"Némítás"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Hang bekapcsolása"</string>
+ <!-- no translation found for description_target_unlock_tablet (3833195335629795055) -->
+ <skip />
<string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Csatlakoztasson egy fejhallgatót, ha hallani szeretné a jelszó gombjait felolvasva."</string>
<string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Pont."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Ugrás a főoldalra"</string>
diff --git a/core/res/res/values-in/strings.xml b/core/res/res/values-in/strings.xml
index 5819e4e..8b6e9e7 100644
--- a/core/res/res/values-in/strings.xml
+++ b/core/res/res/values-in/strings.xml
@@ -1169,6 +1169,8 @@
<string name="description_target_camera" msgid="969071997552486814">"Kamera"</string>
<string name="description_target_silent" msgid="893551287746522182">"Senyap"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Suara hidup"</string>
+ <!-- no translation found for description_target_unlock_tablet (3833195335629795055) -->
+ <skip />
<string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Pasang headset untuk mendengar tombol sandi yang diucapkan dengan keras."</string>
<string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Titik."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Navigasi ke beranda"</string>
diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml
index fdb1e5a..38e42f2 100644
--- a/core/res/res/values-it/strings.xml
+++ b/core/res/res/values-it/strings.xml
@@ -1169,6 +1169,8 @@
<string name="description_target_camera" msgid="969071997552486814">"Fotocamera"</string>
<string name="description_target_silent" msgid="893551287746522182">"Silenzioso"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Audio attivato"</string>
+ <!-- no translation found for description_target_unlock_tablet (3833195335629795055) -->
+ <skip />
<string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Collega gli auricolari per ascoltare la pronuncia dei tasti premuti per la password."</string>
<string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Punto."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Vai alla home page"</string>
diff --git a/core/res/res/values-iw/strings.xml b/core/res/res/values-iw/strings.xml
index 78209bd..608cee0 100644
--- a/core/res/res/values-iw/strings.xml
+++ b/core/res/res/values-iw/strings.xml
@@ -28,7 +28,7 @@
<string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
<string name="fileSizeSuffix" msgid="7670819340156489359">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string>
<string name="untitled" msgid="6071602020171759109">"<ללא כותרת>"</string>
- <string name="ellipsis" msgid="7899829516048813237">"…"</string>
+ <string name="ellipsis" msgid="7899829516048813237">"..."</string>
<string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string>
<string name="emptyPhoneNumber" msgid="7694063042079676517">"(אין מספר טלפון)"</string>
<string name="unknownName" msgid="2277556546742746522">"(לא ידוע)"</string>
@@ -1169,6 +1169,8 @@
<string name="description_target_camera" msgid="969071997552486814">"מצלמה"</string>
<string name="description_target_silent" msgid="893551287746522182">"שקט"</string>
<string name="description_target_soundon" msgid="30052466675500172">"הקול פועל"</string>
+ <!-- no translation found for description_target_unlock_tablet (3833195335629795055) -->
+ <skip />
<string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"חבר אוזניות כדי לשמוע הקראה של מפתחות סיסמה."</string>
<string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"נקודה."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"נווט לדף הבית"</string>
diff --git a/core/res/res/values-ja/strings.xml b/core/res/res/values-ja/strings.xml
index c2d7bfe..a30e1f5 100644
--- a/core/res/res/values-ja/strings.xml
+++ b/core/res/res/values-ja/strings.xml
@@ -895,8 +895,8 @@
<string name="chooseUsbActivity" msgid="7892597146032121735">"USBデバイス用アプリケーションを選択"</string>
<string name="noApplications" msgid="1691104391758345586">"この操作を実行できるアプリケーションはありません。"</string>
<string name="aerr_title" msgid="1905800560317137752"></string>
- <string name="aerr_application" msgid="932628488013092776">"申し訳ありませんが、<xliff:g id="APPLICATION">%1$s</xliff:g>は停止しました。"</string>
- <string name="aerr_process" msgid="4507058997035697579">"申し訳ありませんが、プロセス「<xliff:g id="PROCESS">%1$s</xliff:g>」が停止しました。"</string>
+ <string name="aerr_application" msgid="932628488013092776">"問題が発生したため、<xliff:g id="APPLICATION">%1$s</xliff:g>を終了します。"</string>
+ <string name="aerr_process" msgid="4507058997035697579">"問題が発生したため、プロセス「<xliff:g id="PROCESS">%1$s</xliff:g>」を終了します。"</string>
<string name="anr_title" msgid="4351948481459135709"></string>
<string name="anr_activity_application" msgid="8339738283149696827">"<xliff:g id="APPLICATION">%2$s</xliff:g>は応答していません。"\n\n"このアプリケーションを終了しますか?"</string>
<string name="anr_activity_process" msgid="7018289416670457797">"操作「<xliff:g id="ACTIVITY">%1$s</xliff:g>」は応答していません。"\n\n"この操作を終了しますか?"</string>
@@ -1169,6 +1169,8 @@
<string name="description_target_camera" msgid="969071997552486814">"カメラ"</string>
<string name="description_target_silent" msgid="893551287746522182">"マナーモード"</string>
<string name="description_target_soundon" msgid="30052466675500172">"サウンドON"</string>
+ <!-- no translation found for description_target_unlock_tablet (3833195335629795055) -->
+ <skip />
<string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"パスワードのキーが音声出力されるのでヘッドセットを接続してください。"</string>
<string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"ドット。"</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"ホームへ移動"</string>
diff --git a/core/res/res/values-ko/strings.xml b/core/res/res/values-ko/strings.xml
index ea4c6cc..f3e6317 100644
--- a/core/res/res/values-ko/strings.xml
+++ b/core/res/res/values-ko/strings.xml
@@ -1169,6 +1169,8 @@
<string name="description_target_camera" msgid="969071997552486814">"카메라"</string>
<string name="description_target_silent" msgid="893551287746522182">"무음"</string>
<string name="description_target_soundon" msgid="30052466675500172">"사운드 켜기"</string>
+ <!-- no translation found for description_target_unlock_tablet (3833195335629795055) -->
+ <skip />
<string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"비밀번호 키를 음성으로 들으려면 헤드셋을 연결하세요."</string>
<string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"점"</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"홈 탐색"</string>
diff --git a/core/res/res/values-lt/strings.xml b/core/res/res/values-lt/strings.xml
index b62284a..944ea88 100644
--- a/core/res/res/values-lt/strings.xml
+++ b/core/res/res/values-lt/strings.xml
@@ -1169,6 +1169,8 @@
<string name="description_target_camera" msgid="969071997552486814">"Vaizdo kamera"</string>
<string name="description_target_silent" msgid="893551287746522182">"Begarsis"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Garsas įjungtas"</string>
+ <!-- no translation found for description_target_unlock_tablet (3833195335629795055) -->
+ <skip />
<string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Įjunkite ausines, kad išgirstumėte sakomus slaptažodžio klavišus."</string>
<string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Taškas."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Naršyti pagrindinį puslapį"</string>
diff --git a/core/res/res/values-lv/strings.xml b/core/res/res/values-lv/strings.xml
index 9812b43..21f4e32 100644
--- a/core/res/res/values-lv/strings.xml
+++ b/core/res/res/values-lv/strings.xml
@@ -1169,6 +1169,8 @@
<string name="description_target_camera" msgid="969071997552486814">"Kamera"</string>
<string name="description_target_silent" msgid="893551287746522182">"Klusums"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Skaņa ieslēgta"</string>
+ <!-- no translation found for description_target_unlock_tablet (3833195335629795055) -->
+ <skip />
<string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Pievienojiet austiņas, lai dzirdētu paroles rakstzīmes."</string>
<string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Punkts."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Pārvietoties uz sākuma ekrānu"</string>
diff --git a/core/res/res/values-ms/strings.xml b/core/res/res/values-ms/strings.xml
index b17803fa..1cd8359 100644
--- a/core/res/res/values-ms/strings.xml
+++ b/core/res/res/values-ms/strings.xml
@@ -1169,6 +1169,8 @@
<string name="description_target_camera" msgid="969071997552486814">"Kamera"</string>
<string name="description_target_silent" msgid="893551287746522182">"Senyap"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Bunyi dihidupkan"</string>
+ <!-- no translation found for description_target_unlock_tablet (3833195335629795055) -->
+ <skip />
<string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Pasangkan set kepala untuk mendengar kekunci kata laluan disebut dengan kuat."</string>
<string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Titik."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Navigasi laman utama"</string>
diff --git a/core/res/res/values-nb/strings.xml b/core/res/res/values-nb/strings.xml
index bc53220..9cd3cb3 100644
--- a/core/res/res/values-nb/strings.xml
+++ b/core/res/res/values-nb/strings.xml
@@ -1169,6 +1169,8 @@
<string name="description_target_camera" msgid="969071997552486814">"Kamera"</string>
<string name="description_target_silent" msgid="893551287746522182">"Stille"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Lyd på"</string>
+ <!-- no translation found for description_target_unlock_tablet (3833195335629795055) -->
+ <skip />
<string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Koble til hodetelefoner for å høre hvilke taster som brukes for å skrive inn passordet."</string>
<string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Punktum."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Gå til startsiden"</string>
diff --git a/core/res/res/values-nl/strings.xml b/core/res/res/values-nl/strings.xml
index 73c6c8be..4d93442 100644
--- a/core/res/res/values-nl/strings.xml
+++ b/core/res/res/values-nl/strings.xml
@@ -1169,6 +1169,8 @@
<string name="description_target_camera" msgid="969071997552486814">"Camera"</string>
<string name="description_target_silent" msgid="893551287746522182">"Stil"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Geluid aan"</string>
+ <!-- no translation found for description_target_unlock_tablet (3833195335629795055) -->
+ <skip />
<string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Sluit een headset aan om wachtwoordtoetsen hardop te laten voorlezen."</string>
<string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Stip."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Navigeren naar startpositie"</string>
diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml
index e317426..ae93a61 100644
--- a/core/res/res/values-pl/strings.xml
+++ b/core/res/res/values-pl/strings.xml
@@ -1169,6 +1169,8 @@
<string name="description_target_camera" msgid="969071997552486814">"Aparat"</string>
<string name="description_target_silent" msgid="893551287746522182">"Wyciszenie"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Włącz dźwięk"</string>
+ <!-- no translation found for description_target_unlock_tablet (3833195335629795055) -->
+ <skip />
<string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Podłącz zestaw słuchawkowy, aby usłyszeć znaki hasła wypowiadane na głos."</string>
<string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Kropka"</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Przejdź do strony głównej"</string>
diff --git a/core/res/res/values-pt-rPT/strings.xml b/core/res/res/values-pt-rPT/strings.xml
index 9875c9d..5b20c9dd 100644
--- a/core/res/res/values-pt-rPT/strings.xml
+++ b/core/res/res/values-pt-rPT/strings.xml
@@ -1169,6 +1169,8 @@
<string name="description_target_camera" msgid="969071997552486814">"Câmara"</string>
<string name="description_target_silent" msgid="893551287746522182">"Silencioso"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Som ativado"</string>
+ <!-- no translation found for description_target_unlock_tablet (3833195335629795055) -->
+ <skip />
<string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Ligue os auscultadores com microfone integrado para ouvir as teclas da palavra-passe."</string>
<string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Ponto."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Navegar para página inicial"</string>
diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml
index 7ddf142..bfba074 100644
--- a/core/res/res/values-pt/strings.xml
+++ b/core/res/res/values-pt/strings.xml
@@ -1169,6 +1169,8 @@
<string name="description_target_camera" msgid="969071997552486814">"Câmera"</string>
<string name="description_target_silent" msgid="893551287746522182">"Silencioso"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Som ativado"</string>
+ <!-- no translation found for description_target_unlock_tablet (3833195335629795055) -->
+ <skip />
<string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Conecte um fone de ouvido para ouvir as teclas da senha em voz alta."</string>
<string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Ponto final."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Navegar na página inicial"</string>
diff --git a/core/res/res/values-rm/strings.xml b/core/res/res/values-rm/strings.xml
index 643b79e..f249f32 100644
--- a/core/res/res/values-rm/strings.xml
+++ b/core/res/res/values-rm/strings.xml
@@ -1428,6 +1428,8 @@
<skip />
<!-- no translation found for description_target_soundon (30052466675500172) -->
<skip />
+ <!-- no translation found for description_target_unlock_tablet (3833195335629795055) -->
+ <skip />
<!-- no translation found for keyboard_headset_required_to_hear_password (5913502399391940888) -->
<skip />
<!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
diff --git a/core/res/res/values-ro/strings.xml b/core/res/res/values-ro/strings.xml
index 23f7cb5..3670e53 100644
--- a/core/res/res/values-ro/strings.xml
+++ b/core/res/res/values-ro/strings.xml
@@ -1169,6 +1169,8 @@
<string name="description_target_camera" msgid="969071997552486814">"Cameră foto"</string>
<string name="description_target_silent" msgid="893551287746522182">"Silenţios"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Sunet activat"</string>
+ <!-- no translation found for description_target_unlock_tablet (3833195335629795055) -->
+ <skip />
<string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Conectaţi un set căşti-microfon pentru a auzi tastele apăsate când introduceţi parola."</string>
<string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Punct."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Navigaţi la ecranul de pornire"</string>
diff --git a/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml
index 697f082..746ea9e 100644
--- a/core/res/res/values-ru/strings.xml
+++ b/core/res/res/values-ru/strings.xml
@@ -1169,6 +1169,8 @@
<string name="description_target_camera" msgid="969071997552486814">"Камера"</string>
<string name="description_target_silent" msgid="893551287746522182">"Без звука"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Включить звук"</string>
+ <!-- no translation found for description_target_unlock_tablet (3833195335629795055) -->
+ <skip />
<string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Подключите гарнитуру, чтобы услышать пароль."</string>
<string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Точка"</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Перейти на главную"</string>
diff --git a/core/res/res/values-sk/strings.xml b/core/res/res/values-sk/strings.xml
index abcb3f6..30e3491 100644
--- a/core/res/res/values-sk/strings.xml
+++ b/core/res/res/values-sk/strings.xml
@@ -1169,6 +1169,8 @@
<string name="description_target_camera" msgid="969071997552486814">"Fotoaparát"</string>
<string name="description_target_silent" msgid="893551287746522182">"Tichý"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Zapnúť zvuk"</string>
+ <!-- no translation found for description_target_unlock_tablet (3833195335629795055) -->
+ <skip />
<string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Ak si chcete vypočuť nahlas vyslovené klávesy hesla, pripojte náhlavnú súpravu."</string>
<string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Bodka."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Prejsť na plochu"</string>
diff --git a/core/res/res/values-sl/strings.xml b/core/res/res/values-sl/strings.xml
index 7a3ae0b..2f1ecc9 100644
--- a/core/res/res/values-sl/strings.xml
+++ b/core/res/res/values-sl/strings.xml
@@ -1169,6 +1169,8 @@
<string name="description_target_camera" msgid="969071997552486814">"Fotoaparat"</string>
<string name="description_target_silent" msgid="893551287746522182">"Tiho"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Vklopljen zvok"</string>
+ <!-- no translation found for description_target_unlock_tablet (3833195335629795055) -->
+ <skip />
<string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Priključite slušalke, če želite slišati zvok tipkanja gesla."</string>
<string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Pika."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Krmarjenje domov"</string>
diff --git a/core/res/res/values-sr/strings.xml b/core/res/res/values-sr/strings.xml
index f08b80e..157a3fc 100644
--- a/core/res/res/values-sr/strings.xml
+++ b/core/res/res/values-sr/strings.xml
@@ -1169,6 +1169,8 @@
<string name="description_target_camera" msgid="969071997552486814">"Камера"</string>
<string name="description_target_silent" msgid="893551287746522182">"Нечујно"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Укључи звук"</string>
+ <!-- no translation found for description_target_unlock_tablet (3833195335629795055) -->
+ <skip />
<string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Укључите слушалице да бисте чули наглас изговорене тастере за лозинку."</string>
<string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Тачка."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Кретање до Почетне"</string>
diff --git a/core/res/res/values-sv/strings.xml b/core/res/res/values-sv/strings.xml
index 4230f28..e618221 100644
--- a/core/res/res/values-sv/strings.xml
+++ b/core/res/res/values-sv/strings.xml
@@ -1169,6 +1169,8 @@
<string name="description_target_camera" msgid="969071997552486814">"Kamera"</string>
<string name="description_target_silent" msgid="893551287746522182">"Tyst"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Ljud på"</string>
+ <!-- no translation found for description_target_unlock_tablet (3833195335629795055) -->
+ <skip />
<string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Anslut hörlurar om du vill höra lösenorden läsas upp."</string>
<string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Punkt."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Visa startsidan"</string>
diff --git a/core/res/res/values-sw/strings.xml b/core/res/res/values-sw/strings.xml
index b5465ac..f87592f4 100644
--- a/core/res/res/values-sw/strings.xml
+++ b/core/res/res/values-sw/strings.xml
@@ -1169,6 +1169,8 @@
<string name="description_target_camera" msgid="969071997552486814">"Kamera"</string>
<string name="description_target_silent" msgid="893551287746522182">"Kimya"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Sauti imewashwa"</string>
+ <!-- no translation found for description_target_unlock_tablet (3833195335629795055) -->
+ <skip />
<string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Chomeka plagi ya kifaa cha kichwa cha kusikiza ili kusikiliza msimbo wa nenosiri inayozungumwa kwa sauti ya juu."</string>
<string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Nukta."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Abiri nyumbani"</string>
diff --git a/core/res/res/values-th/strings.xml b/core/res/res/values-th/strings.xml
index 4446db3..f1c47bf 100644
--- a/core/res/res/values-th/strings.xml
+++ b/core/res/res/values-th/strings.xml
@@ -1169,6 +1169,8 @@
<string name="description_target_camera" msgid="969071997552486814">"กล้องถ่ายรูป"</string>
<string name="description_target_silent" msgid="893551287746522182">"ปิดเสียง"</string>
<string name="description_target_soundon" msgid="30052466675500172">"เปิดเสียง"</string>
+ <!-- no translation found for description_target_unlock_tablet (3833195335629795055) -->
+ <skip />
<string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"เสียบชุดหูฟังเพื่อฟังเสียงเมื่อพิมพ์รหัสผ่าน"</string>
<string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"เครื่องหมายจุด"</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"นำทางไปหน้าแรก"</string>
diff --git a/core/res/res/values-tl/strings.xml b/core/res/res/values-tl/strings.xml
index 746cb96..bc12ce6 100644
--- a/core/res/res/values-tl/strings.xml
+++ b/core/res/res/values-tl/strings.xml
@@ -1169,6 +1169,8 @@
<string name="description_target_camera" msgid="969071997552486814">"Camera"</string>
<string name="description_target_silent" msgid="893551287746522182">"Tahimik"</string>
<string name="description_target_soundon" msgid="30052466675500172">"I-on ang tunog"</string>
+ <!-- no translation found for description_target_unlock_tablet (3833195335629795055) -->
+ <skip />
<string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Mag-plug in ng isang headset upang marinig ang mga password key na binabanggit nang malakas."</string>
<string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Dot."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Magnabiga sa home"</string>
diff --git a/core/res/res/values-tr/strings.xml b/core/res/res/values-tr/strings.xml
index 2b76c22..981ff5d 100644
--- a/core/res/res/values-tr/strings.xml
+++ b/core/res/res/values-tr/strings.xml
@@ -1169,6 +1169,8 @@
<string name="description_target_camera" msgid="969071997552486814">"Kamera"</string>
<string name="description_target_silent" msgid="893551287746522182">"Sessiz"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Ses açık"</string>
+ <!-- no translation found for description_target_unlock_tablet (3833195335629795055) -->
+ <skip />
<string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Şifre tuşlarının sesli okunmasını dinlemek için mikrofonlu kulaklık takın."</string>
<string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Nokta."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Ana sayfaya git"</string>
diff --git a/core/res/res/values-uk/strings.xml b/core/res/res/values-uk/strings.xml
index c71cc8c..9e9d74f 100644
--- a/core/res/res/values-uk/strings.xml
+++ b/core/res/res/values-uk/strings.xml
@@ -1169,6 +1169,8 @@
<string name="description_target_camera" msgid="969071997552486814">"Камера"</string>
<string name="description_target_silent" msgid="893551287746522182">"Без звуку"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Увімкнути звук"</string>
+ <!-- no translation found for description_target_unlock_tablet (3833195335629795055) -->
+ <skip />
<string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Підключіть гарнітуру, щоб прослухати відтворені вголос символи пароля."</string>
<string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Крапка."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Перейти на головну"</string>
diff --git a/core/res/res/values-vi/strings.xml b/core/res/res/values-vi/strings.xml
index c65ecf4..93f0901 100644
--- a/core/res/res/values-vi/strings.xml
+++ b/core/res/res/values-vi/strings.xml
@@ -1169,6 +1169,8 @@
<string name="description_target_camera" msgid="969071997552486814">"Máy ảnh"</string>
<string name="description_target_silent" msgid="893551287746522182">"Im lặng"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Bật âm thanh"</string>
+ <!-- no translation found for description_target_unlock_tablet (3833195335629795055) -->
+ <skip />
<string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Hãy cắm tai nghe để nghe mật khẩu."</string>
<string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Dấu chấm."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Điều hướng về trang chủ"</string>
diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml
index 929ba22..8076723 100644
--- a/core/res/res/values-zh-rCN/strings.xml
+++ b/core/res/res/values-zh-rCN/strings.xml
@@ -452,8 +452,8 @@
<string name="permdesc_writeApnSettings" msgid="2369786339323021771">"允许应用程序更改网络设置、拦截和检查所有网络流量,例如,更改任何 APN 的代理和端口。恶意应用程序可以监视、重定向,或在您不知情的情况下修改网络数据包。"</string>
<string name="permlab_changeNetworkState" msgid="958884291454327309">"更改网络连接性"</string>
<string name="permdesc_changeNetworkState" msgid="4199958910396387075">"允许应用程序更改网络连接的状态。"</string>
- <string name="permlab_changeTetherState" msgid="2702121155761140799">"更改绑定的连接"</string>
- <string name="permdesc_changeTetherState" msgid="8905815579146349568">"允许应用程序更改绑定网络连接的状态。"</string>
+ <string name="permlab_changeTetherState" msgid="2702121155761140799">"更改网络共享连接"</string>
+ <string name="permdesc_changeTetherState" msgid="8905815579146349568">"允许应用程序更改共享网络时所用连接的状态。"</string>
<string name="permlab_changeBackgroundDataSetting" msgid="1400666012671648741">"更改后台数据使用设置"</string>
<string name="permdesc_changeBackgroundDataSetting" msgid="1001482853266638864">"允许应用程序更改后台数据使用设置。"</string>
<string name="permlab_accessWifiState" msgid="8100926650211034400">"查看 Wi-Fi 状态"</string>
@@ -888,8 +888,8 @@
<string name="loading" msgid="1760724998928255250">"正在载入..."</string>
<string name="capital_on" msgid="1544682755514494298">"打开"</string>
<string name="capital_off" msgid="6815870386972805832">"关闭"</string>
- <string name="whichApplication" msgid="4533185947064773386">"使用以下方式发送"</string>
- <string name="alwaysUse" msgid="4583018368000610438">"默认使用此方式发送。"</string>
+ <string name="whichApplication" msgid="4533185947064773386">"选择要使用的应用程序:"</string>
+ <string name="alwaysUse" msgid="4583018368000610438">"设为默认选项。"</string>
<string name="clearDefaultHintMsg" msgid="4815455344600932173">"通过主屏幕上的“设置”>“应用程序”>“管理应用程序”清除默认设置。"</string>
<string name="chooseActivity" msgid="1009246475582238425">"选择一项操作"</string>
<string name="chooseUsbActivity" msgid="7892597146032121735">"选择适用于 USB 设备的应用程序"</string>
@@ -1080,7 +1080,7 @@
<string name="submit" msgid="1602335572089911941">"提交"</string>
<string name="car_mode_disable_notification_title" msgid="3164768212003864316">"已启用车载模式"</string>
<string name="car_mode_disable_notification_message" msgid="668663626721675614">"选择退出车载模式"</string>
- <string name="tethered_notification_title" msgid="3146694234398202601">"USB 绑定或热点已启用"</string>
+ <string name="tethered_notification_title" msgid="3146694234398202601">"网络共享或热点已启用"</string>
<string name="tethered_notification_message" msgid="3067108323903048927">"触摸可进行配置"</string>
<string name="back_button_label" msgid="2300470004503343439">"上一步"</string>
<string name="next_button_label" msgid="1080555104677992408">"下一步"</string>
@@ -1169,6 +1169,8 @@
<string name="description_target_camera" msgid="969071997552486814">"相机"</string>
<string name="description_target_silent" msgid="893551287746522182">"静音"</string>
<string name="description_target_soundon" msgid="30052466675500172">"打开声音"</string>
+ <!-- no translation found for description_target_unlock_tablet (3833195335629795055) -->
+ <skip />
<string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"需要插入耳机才能听到密码的按键声。"</string>
<string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"点。"</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"导航首页"</string>
diff --git a/core/res/res/values-zh-rTW/strings.xml b/core/res/res/values-zh-rTW/strings.xml
index 36da9e4..dba72f4 100644
--- a/core/res/res/values-zh-rTW/strings.xml
+++ b/core/res/res/values-zh-rTW/strings.xml
@@ -1169,6 +1169,8 @@
<string name="description_target_camera" msgid="969071997552486814">"相機"</string>
<string name="description_target_silent" msgid="893551287746522182">"靜音"</string>
<string name="description_target_soundon" msgid="30052466675500172">"開啟音效"</string>
+ <!-- no translation found for description_target_unlock_tablet (3833195335629795055) -->
+ <skip />
<string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"接上耳機即可聽見系統朗讀密碼鍵。"</string>
<string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"點。"</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"瀏覽首頁"</string>
diff --git a/core/res/res/values-zu/strings.xml b/core/res/res/values-zu/strings.xml
index a61416f..9c4bde1 100644
--- a/core/res/res/values-zu/strings.xml
+++ b/core/res/res/values-zu/strings.xml
@@ -1169,6 +1169,8 @@
<string name="description_target_camera" msgid="969071997552486814">"Ikhamera"</string>
<string name="description_target_silent" msgid="893551287746522182">"Thulile"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Umsindo uvuliwe"</string>
+ <!-- no translation found for description_target_unlock_tablet (3833195335629795055) -->
+ <skip />
<string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Faka ama-headset ukuze uzwe izinkinobho zephasiwedi eziphimiswayo."</string>
<string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Icashazi."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Zulazulela ekhaya"</string>
diff --git a/docs/html/guide/developing/index.jd b/docs/html/guide/developing/index.jd
index 722c75a..3af4a8c 100644
--- a/docs/html/guide/developing/index.jd
+++ b/docs/html/guide/developing/index.jd
@@ -11,58 +11,55 @@
will sometimes have to call command line tools manually, but you will have access to the same
number of features that you would have in Eclipse.</p>
- <p class="note"><strong>Note:</strong> Before you begin developing Android applications, make
- sure you have gone through all of the steps outlined in <a
-href="{@docRoot}sdk/installing.html">Installing the SDK</a>.</p>
+<div class="figure" style="width:461px">
+ <img src="{@docRoot}images/developing/developing_overview.png"
+ alt="Development process for Android applications"
+ height="738" />
+ <p class="img-caption">
+ <strong>Figure 1.</strong> The development process for Android applications.
+ </p>
+</div>
- <p>The basic steps for developing applications with or without Eclipse are the same:</p>
+<p>The basic steps for developing applications (with or without Eclipse) are shown in figure 1. The
+development steps encompass four development phases, which include:</p>
- <ol>
-
- <li>Set up Android Virtual Devices or hardware devices.
-
- <p>You need to create Android Virtual Devices (AVD) or connect hardware devices on which
- you will install your applications.</p>
-
- <p>See <a href="{@docRoot}guide/developing/devices/index.html">Managing Virtual Devices</a>
+<ul>
+ <li><strong>Setup</strong>
+ <p>During this phase you install and set up your development environment. You also create
+ Android Virtual Devices (AVDs) and connect hardware devices on which you can install your
+ applications.</p>
+ <p>See <a href="{@docRoot}guide/developing/devices/index.html">Managing Virtual Devices</a>
and <a href="{@docRoot}guide/developing/device.html">Using Hardware Devices</a> for more
-information.
- </li>
+ information.
+ </li>
+ <li><strong>Development</strong>
+ <p>During this phase you set up and develop your Android project, which contains all of the
+ source code and resource files for your application. For more informations, see
+ <a href="{@docRoot}guide/developing/projects/index.html">Create an Android project</a>.</p>
+ </li>
+ <li><strong>Debugging and Testing</strong>
+ <p>During this phase you build your project into a debuggable <code>.apk</code> package that you
+ can install and run on the emulator or an Android-powered device. If you are using Eclipse,
+ builds are generated each time you project is saved. If you're using another IDE,
+ you can build your project using Ant and install it on a device using
+ <a href="{@docRoot}guide/developing/tools/adb.html">adb</a>. For more information, see
+ <a href="{@docRoot}guide/developing/building/index.html">Build and run your application</a>.</p>
+ <p>Next, you debug your application using a JDWP-compliant debugger along with the debugging
+ and logging tools that are provided with the Android SDK. Eclipse already comes packaged with
+ a compatible debugger. For more information see,
+ <a href="{@docRoot}guide/developing/debugging/index.html">Debug your application with the
+ SDK debugging and logging tools</a>.</p>
+ <p>Last, you test your application using various Android SDK testing tools. For more
+ information, see <a href="{@docRoot}guide/developing/testing/index.html">Test your application
+ with the Testing and Instrumentation framework</a>.</p>
+ </li>
+ <li><strong>Publishing</strong>
+ <p>During this phase you configure and build your application for release and distribute your
+ application to users. For more information, see
+ <a href="{@docRoot}guide/publishing/publishing_overview.html">Publishing Overview</a>.</p>
+ </li>
+</ul>
- <li>
- <a href="{@docRoot}guide/developing/projects/index.html">Create an Android project</a>.
-
- <p>An Android project contains all source code and resource files for your application. It is
- built into an <code>.apk</code> package that you can install on Android devices.</p>
- </li>
-
- <li>
- <a href="{@docRoot}guide/developing/building/index.html">Build and run your
- application</a>.
-
- <p>If you are using Eclipse, builds are generated each time you save changes and you can install
- your application on a device by clicking <strong>Run</strong>. If you're using another IDE, you can build your
- project using Ant and install it on a device using <code>adb</code>.</p>
- </li>
-
- <li>
- <a href="{@docRoot}guide/developing/debugging/index.html">Debug your application with the
- SDK debugging and logging tools</a>.
-
- <p>Debugging your application involves using a JDWP-compliant debugger along with the
- debugging and logging tools that are provided with the Android SDK. Eclipse already
- comes packaged with a compatible debugger.</p>
- </li>
-
- <li>
- <a href="{@docRoot}guide/developing/testing/index.html">Test your application with the
- Testing and Instrumentation framework</a>.
-
- <p>The Android SDK provides a testing and instrumnetation framework to help you set up and
- run tests within an emulator or device.</p>
- </li>
- </ol>
-
<h2 id="EssentialTools">Essential command line tools</h2>
<p>When developing in IDEs or editors other than Eclipse, be familiar with
@@ -101,7 +98,7 @@
<dd>To sign your .apk file with a private key generated by Keytool. Jarsigner is part of the
JDK.</dd>
</dl>
-
+
<p>If you are using Eclipse and ADT, tools such as <code>adb</code> and <code>android</code>
are automatically called by Eclipse and ADT so you don't have to manually invoke these tools.
You need to be familiar with <code>adb</code>, however, because certain functions are not
@@ -109,19 +106,20 @@
Eclipse, such as the <code>adb</code> shell commands. You might also need to call Keytool and
Jarsigner to
sign your applications, but you can set up Eclipse to do this automatically as well.</p>
-
+
<p>For more information on the tools provided with the Android SDK, see the
<a href="{@docRoot}guide/developing/tools/index.html">Tools</a> section of the documentation.</p>
-
+
<h2 id="ThirdParty">Other Third-Party Development Tools</h2>
<p>
The tools described in this section are not developed by the Android SDK team. The Android Dev Guide
does not provide documentation for these tools. Please refer to the linked documents in each
section for documentation.
-</p>
+</p>
<h3 id="IntelliJ">Developing in IntelliJ IDEA</h3>
<div style="float: right">
-<img alt="The IntelliJ graphical user interface" height="500px" src="{@docRoot}images/developing/intellijidea_android_ide.png"/>
+<img alt="The IntelliJ graphical user interface" height="500px"
+src="{@docRoot}images/developing/intellijidea_android_ide.png"/>
</div>
<p>
IntelliJ IDEA is a powerful Java IDE from JetBrains that provides
@@ -148,5 +146,5 @@
<li>
<a href="http://wiki.jetbrains.net/intellij/Android">IntelliJ IDEA Android Tutorials</a>
</li>
-</ul>
+</ul>
diff --git a/docs/html/guide/guide_toc.cs b/docs/html/guide/guide_toc.cs
index b7710c3..a3bb6d4 100644
--- a/docs/html/guide/guide_toc.cs
+++ b/docs/html/guide/guide_toc.cs
@@ -406,6 +406,9 @@
<span class="en">Android Market Topics</span>
</h2>
<ul>
+ <li><a href="<?cs var:toroot ?>guide/publishing/publishing.html">
+ <span class="en">Publishing on Android Market</span>
+ </a></li>
<li><a href="<?cs var:toroot ?>guide/publishing/licensing.html">
<span class="en">Application Licensing</span></a>
</li>
@@ -649,28 +652,11 @@
<span class="zh-TW" style="display:none">發佈</span>
</h2>
<ul>
- <li><a href="<?cs var:toroot ?>guide/publishing/app-signing.html">
- <span class="en">Signing Your Applications</span>
- <span class="de" style="display:none">Signieren Ihrer Anwendungen</span>
- <span class="es" style="display:none">Firma de aplicaciones</span>
- <span class="fr" style="display:none">Attribution de votre signature <br />à vos applications</span>
- <span class="it" style="display:none">Firma delle applicazioni</span>
- <span class="ja" style="display:none">アプリケーションへの署名</span>
- <span class="zh-CN" style="display:none">应用程序签名</span>
- <span class="zh-TW" style="display:none">簽署應用程式</span>
- </a></li>
- <li><a href="<?cs var:toroot ?>guide/publishing/versioning.html">
- <span class="en">Versioning Your Applications</span>
- <span class="de" style="display:none">Versionsverwaltung für Ihre <br />Anwendungen</span>
- <span class="es" style="display:none">Versiones de las aplicaciones</span>
- <span class="fr" style="display:none">Attribution d'une version à vos applications</span>
- <span class="it" style="display:none">Controllo versioni delle applicazioni</span>
- <span class="ja" style="display:none">アプリケーションのバージョニング</span>
- <span class="zh-CN" style="display:none">应用程序版本控制</span>
- <span class="zh-TW" style="display:none">應用程式版本設定</span>
- </a></li>
+ <li><a href="<?cs var:toroot ?>guide/publishing/publishing_overview.html">
+ <span class="en">Publishing Overview</span>
+ </a><span class="new">new!</span></li>
<li><a href="<?cs var:toroot ?>guide/publishing/preparing.html">
- <span class="en">Preparing to Publish</span>
+ <span class="en">Preparing for Release</span>
<span class="de" style="display:none">Vorbereitung auf die Veröffentlichung</span>
<span class="es" style="display:none">Publicación de aplicaciones</span>
<span class="fr" style="display:none">Préparation à la publication</span>
@@ -678,9 +664,29 @@
<span class="ja" style="display:none">公開の準備</span>
<span class="zh-CN" style="display:none">准备发布</span>
<span class="zh-TW" style="display:none">準備發佈</span>
+ </a><span class="new">updated</span></li>
+ <li><a href="<?cs var:toroot ?>guide/publishing/app-signing.html">
+ <span class="en">Signing Your Applications</span>
+ <span class="de" style="display:none">Signieren Ihrer Anwendungen</span>
+ <span class="es" style="display:none">Firma de aplicaciones</span>
+ <span class="fr" style="display:none">Attribution de votre signature <br />à vos
+applications</span>
+ <span class="it" style="display:none">Firma delle applicazioni</span>
+ <span class="ja" style="display:none">アプリケーションへの署名</span>
+ <span class="zh-CN" style="display:none">应用程序签名</span>
+ <span class="zh-TW" style="display:none">簽署應用程式</span>
</a></li>
- <li><a href="<?cs var:toroot ?>guide/publishing/publishing.html">
- <span class="en">Publishing on Android Market</span>
+ <li><a href="<?cs var:toroot ?>guide/publishing/versioning.html">
+ <span class="en">Versioning Your Applications</span>
+ <span class="de" style="display:none">Versionsverwaltung für Ihre <br
+/>Anwendungen</span>
+ <span class="es" style="display:none">Versiones de las aplicaciones</span>
+ <span class="fr" style="display:none">Attribution d'une version à vos
+applications</span>
+ <span class="it" style="display:none">Controllo versioni delle applicazioni</span>
+ <span class="ja" style="display:none">アプリケーションのバージョニング</span>
+ <span class="zh-CN" style="display:none">应用程序版本控制</span>
+ <span class="zh-TW" style="display:none">應用程式版本設定</span>
</a></li>
</ul>
</li>
@@ -715,9 +721,9 @@
</a></li>
</ul>
</li>
- <li><a href="<?cs var:toroot ?>guide/practices/optimizing-for-3.0.html">
- <span class="en">Optimizing Apps for Android 3.0</span>
- </a></li>
+ <li><a href="<?cs var:toroot ?>guide/practices/tablets-and-handsets.html">
+ <span class="en">Supporting Tablets and Handsets</span>
+ </a> <span class="new">new!</span></li>
<li class="toggle-list">
<div><a href="<?cs var:toroot ?>guide/practices/ui_guidelines/index.html">
<span class="en">UI Guidelines</span>
diff --git a/docs/html/guide/practices/optimizing-for-3.0.jd b/docs/html/guide/practices/optimizing-for-3.0.jd
index a24dba8f..39662f1 100644
--- a/docs/html/guide/practices/optimizing-for-3.0.jd
+++ b/docs/html/guide/practices/optimizing-for-3.0.jd
@@ -1,6 +1,31 @@
page.title=Optimizing Apps for Android 3.0
@jd:body
+
+<div id="deprecatedSticker">
+ <a href="#"
+ onclick="$('#naMessage').show();$('#deprecatedSticker').hide();return false">
+ <strong>This doc is deprecated</strong></a>
+</div>
+
+
+<div id="naMessage" style="display:block">
+<div><p><strong>This document has been deprecated.</strong></p>
+ <p>To learn about how you can optimize your app for both tablets and handsets, please
+read the guide to <a href="tablets-and-handsets.html">Supporting Tablets and
+Handsets</a>.</p>
+
+ <input style="margin-top:1em;padding:5px" type="button"
+ value="That's nice, but I still want to read this document"
+onclick="$('#naMessage').hide();$('#deprecatedSticker').show()" />
+</div>
+</div>
+
+
+
+
+
+
<div id="qv-wrapper">
<div id="qv">
<h2>In this document</h2>
@@ -25,6 +50,8 @@
<h2>See also</h2>
<ol>
+ <li><a href="tablets-and-handsets.html">Supporting Tablets
+and Handsets</a></li>
<li><a
href="{@docRoot}sdk/compatibility-library.html">Compatibility Library</a></li>
<li><a href="http://code.google.com/p/iosched/">Google I/O App source code</a></li>
diff --git a/docs/html/guide/practices/screens-distribution.jd b/docs/html/guide/practices/screens-distribution.jd
index 951e364cc..60c9c95 100644
--- a/docs/html/guide/practices/screens-distribution.jd
+++ b/docs/html/guide/practices/screens-distribution.jd
@@ -15,8 +15,8 @@
<h2>In this document</h2>
<ol>
- <li><a href="#FilteringHansetApps">Filtering a Handset Application from Tablets</a></li>
- <li><a href="#FilteringTabletApps">Filtering a Tablet Application from Handsets</a></li>
+ <li><a href="#FilteringHansetApps">Declaring an App is Only for Handsets</a></li>
+ <li><a href="#FilteringTabletApps">Declaring an App is Only for Tablets</a></li>
<li><a href="#MultiApks">Publishing Multiple APKs for Different Screens</a></li>
</ol>
@@ -48,7 +48,7 @@
-<h2 id="FilteringHandsetApps">Filtering a Handset Application from Tablets</h2>
+<h2 id="FilteringHandsetApps">Declaring an App is Only for Handsets</h2>
<p>Because the system generally scales applications to fit larger screens well, you shouldn't
need to filter your application from larger screens. As long as you follow the <a
@@ -79,7 +79,6 @@
<pre>
<manifest ... >
- ...
<compatible-screens>
<!-- all small size screens -->
<screen android:screenSize="small" android:screenDensity="ldpi" />
@@ -92,6 +91,7 @@
<screen android:screenSize="normal" android:screenDensity="hdpi" />
<screen android:screenSize="normal" android:screenDensity="xhdpi" />
</compatible-screens>
+ ...
<application ... >
...
<application>
@@ -108,36 +108,66 @@
-<h2 id="FilteringTabletApps">Filtering a Tablet Application from Handsets</h2>
-<p>If your application's UI is adversely affected when the system scales your application down to
-smaller screens, you should add <a
-href="{@docRoot}guide/topics/resources/providing-resources.html#AlternativeResources">alternative
-layouts</a> for smaller screens to adjust the layout for those screens. However, sometimes your
-layout still might not fit a smaller screen or you've explicitly designed your application only for
-tablets and other large devices. In this case, you can manage the availability of your application
-to smaller screens by using the <a
+<h2 id="FilteringTabletApps">Declaring an App is Only for Tablets</h2>
+
+<p>If you don't want your app to be used on handsets (perhaps your app truly makes sense only on a
+large screen) or you need time to optimize it for smaller screens, you can prevent small-screen
+devices from downloading your app by using the <a
href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code
<supports-screens>}</a> manifest element.</p>
-<p>For example, if you want your application to be available only to large and extra large
-screens, you can declare the element in your manifest like this:</p>
+<p>For example, if you want your application to be available only to tablet devices, you can declare
+the element in your manifest like this:</p>
<pre>
<manifest ... >
- ...
<supports-screens android:smallScreens="false"
android:normalScreens="false"
android:largeScreens="true"
- android:xlargeScreens="true" />
+ android:xlargeScreens="true"
+ android:requiresSmallestWidthDp="600" />
+ ...
<application ... >
...
- <application>
+ </application>
</manifest>
</pre>
-<p>External services such as Android Market read this manifest element and use it to ensure that
-your application is available only to devices with either a large or an extra large screen.</p>
+<p>This describes your app's screen-size support in two different ways:</p>
+
+<ul>
+ <li>It declares that the app does <em>not</em> support the screen sizes "small" and
+"normal", which are traditionally not tablets.</li>
+ <li>It declares that the app requires a screen size with a minimum usable area that is at least
+600dp wide.</li>
+</ul>
+
+<p>The first technique is for devices that are running Android 3.1 or older, because those devices
+declare their size based on generalized screen sizes. The <a
+href="{@docRoot}guide/topics/manifest/supports-screens-element.html#requiresSmallest">{@code
+requiresSmallestWidthDp}</a> attribute is for devices running Android 3.2 and newer, which includes
+the capability for apps to specify size requirements based on a minimum number of
+density-independent pixels available. In this example, the app declares a minimum width requirement
+of 600dp, which generally implies a 7"-or-greater screen. </p>
+
+<p>Your size choice might be different, of course, based on how well your design works on different
+screen sizes; for example, if your design works well only on screens that are 9" or larger, you
+might require a minimum width of 720dp.</p>
+
+<p>The catch is that you must compile your application against Android 3.2 or higher in order to use
+the <code>requiresSmallestWidthDp</code> attribute. Older versions don't understand this attribute
+and will raise a compile-time error. The safest thing to do is develop your app against the platform
+that matches the API level you've set for <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">minSdkVersion</a
+>. When you're making final preparations to build your release candidate, change the build target to
+Android 3.2 and add the <code>requiresSmallestWidthDp</code> attribute. Android versions older than
+3.2 simply ignore that XML attribute, so there's no risk of a runtime failure.</p>
+
+<p>For more information about why the "smallest width" screen size is
+important for supporting different screen sizes, read <a
+href="http://android-developers.blogspot.com/2011/07/new-tools-for-managing-screen-sizes.html">New
+Tools for Managing Screen Sizes</a>.</p>
<p class="caution"><strong>Caution:</strong> If you use the <a
href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code
@@ -151,7 +181,7 @@
to prevent your application from being downloaded on larger screens, use <a
href="{@docRoot}guide/topics/manifest/compatible-screens-element.html">{@code
<compatible-screens>}</a>, as discussed in the previous section about <a
-href="#FilteringHandsetApps">Filtering a Handset Application from Tablets</a>.</p>
+href="#FilteringHandsetApps">Declaring an App is Only for Handsets</a>.</p>
<p>Remember, you should strive to make your application available to as many devices as possible by
applying all necessary techniques for <a
diff --git a/docs/html/guide/practices/screens_support.jd b/docs/html/guide/practices/screens_support.jd
index 0c3c7d3..fb121bd 100644
--- a/docs/html/guide/practices/screens_support.jd
+++ b/docs/html/guide/practices/screens_support.jd
@@ -50,6 +50,9 @@
<h2>See also</h2>
<ol>
<li><a
+href="http://android-developers.blogspot.com/2011/09/thinking-like-web-designer.html">Thinking
+Like a Web Designer</a></li>
+ <li><a
href="{@docRoot}guide/topics/resources/providing-resources.html#AlternativeResources">
Providing Alternative Resources</a></li>
<li><a href="{@docRoot}guide/practices/ui_guidelines/icon_design.html">Icon Design
diff --git a/docs/html/guide/practices/tablets-and-handsets.jd b/docs/html/guide/practices/tablets-and-handsets.jd
new file mode 100644
index 0000000..7bc1ad7
--- /dev/null
+++ b/docs/html/guide/practices/tablets-and-handsets.jd
@@ -0,0 +1,491 @@
+page.title=Supporting Tablets and Handsets
+
+@jd:body
+
+<div id="qv-wrapper">
+<ol id="qv">
+
+<h2>In this document</h2>
+<ol>
+ <li><a href="#Guidelines">Basic Guidelines</a></li>
+ <li><a href="#Fragments">Creating Single-pane and Multi-pane Layouts</a></li>
+ <li><a href="#ActionBar">Using the Action Bar</a>
+ <ol>
+ <li><a href="#SplitActionBar">Using split action bar</a></li>
+ <li><a href="#NavigatingUp">Using "up" navigation</a></li>
+ </ol>
+ </li>
+ <li><a href="#Tips">Other Design Tips</a></li>
+</ol>
+
+<h2>Related samples</h2>
+<ol>
+ <li><a href="{@docRoot}resources/samples/HoneycombGallery/index.html">Honeycomb
+Gallery</a></li>
+</ol>
+
+<h2>See also</h2>
+<ol>
+ <li><a href="{@docRoot}guide/topics/fundamentals/fragments.html">Fragments</a></li>
+ <li><a href="{@docRoot}guide/topics/ui/actionbar.html">Action Bar</a></li>
+ <li><a href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple Screens</a></li>
+</ol>
+
+
+
+</div>
+</div>
+
+
+
+<p>The Android platform runs on a variety of screen sizes and the system gracefully resizes your
+application's UI to fit each one. Typically, all you need to do is design your UI to be flexible and
+optimize some elements for different sizes by providing <a
+href="{@docRoot}guide/topics/resources/providing-resources.html#AlternativeResources">alternative
+resources</a> (such as alternative layouts that reposition some views or alternative
+dimension values for views). However, sometimes you might want to go a step further to
+optimize the overall user experience for different screen sizes. For example, tablets offer
+more space in which your application can present multiple sets of information at once, while a
+handset device usually requires that you split those sets apart and display them separately. So
+even though a UI designed for handsets will properly resize to fit a tablet, it does not fully
+leverage the potential of the tablet's screen to enhance the user experience.</p>
+
+<p>With Android 3.0 (API level 11), Android introduced a new set of framework APIs that allow you
+ to more effectively design activities that take advantage of large screens: the {@link
+android.app.Fragment} APIs. Fragments allow you to separate distinct behavioral components of your
+UI into separate parts, which you can then combine to create multi-pane layouts when running on a
+tablet or place in separate activities when running on a handset. Android 3.0 also introduced
+{@link android.app.ActionBar}, which provides a dedicated UI at the top of the screen to identify
+the app and provide user actions and navigation.</p>
+
+<p>This document provides guidance that can help you create an application that offers a unique and
+optimized user experience on both handsets and tablets, using fragments and the action bar.</p>
+
+<p>Before you continue with this guide, it's important that you first read the
+guide to <a href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple
+Screens</a>. That document describes the fundamental design principles for developing a UI that
+supports different screen sizes and densities with flexible layouts and alternative bitmaps,
+respectively.</p>
+
+
+
+
+<h2 id="Guidelines">Basic Guidelines</h2>
+
+<p>Here are a few guidelines that will help you create an app that provides an optimized user
+experience on both tablets and handsets:</p>
+
+<ul>
+ <li><strong>Build your activity designs based on fragments</strong> that you can reuse in
+different combinations—in multi-pane layouts on tablets and single-pane layouts on handsets.
+
+<p>A {@link android.app.Fragment} represents a behavior or a portion of user interface in an
+activity. You can think of a fragment as a modular section of an activity (a "fragment" of an
+activity), which has its own lifecycle and which you can add or remove while the activity is
+running.</p>
+
+<p>If you haven't used fragments yet, start by reading the <a
+href="{@docRoot}guide/topics/fundamentals/fragments.html">Fragments</a> developer guide.</p>
+</li>
+
+
+ <li><strong>Use the action bar</strong>, but follow best practices and ensure your design
+is flexible enough for the system to adjust the action bar layout based on the screen size.
+
+<p>The {@link android.app.ActionBar} is a UI component for activities that replaces the traditional
+title bar at the top of the screen. By default, the action bar includes the application logo on the
+left side, followed by the activity title, and access to items from the options menu on the right
+side.</p>
+
+<p>You can enable items from the options menu to appear directly in the action bar as "action
+items". You can also add navigation features to the action bar, such as tabs or a drop-down list,
+and use the application icon to supplement the system's BACK behavior with the option to navigate to
+your application's "home" activity or "up" the application's structural hierarchy.</p>
+
+<p>This guide provides some tips for using the action bar in ways that support both tablets and
+handsets. For a detailed discussion of the action bar APIs, read the <a
+href="{@docRoot}guide/topics/ui/actionbar.html">Action Bar</a> developer guide.</p>
+</li>
+
+
+ <li><strong>Implement flexible layouts</strong>, as discussed in the
+<a href="{@docRoot}guide/practices/screens_support.html#screen-independence">Best Practices</a> for
+supporting multiple screens and the blog post, <a
+href="http://android-developers.blogspot.com/2011/09/thinking-like-web-designer.html">Thinking
+Like a Web Designer</a>.
+ <p>A flexible layout design allows your application to adapt to variations in screen
+sizes. Not all tablets are the same size, nor are all handsets the same size. While you might
+provide different fragment combinations for "tablets" and "handsets", it's still necessary that
+each design be flexible to resize to variations in size and aspect ratio.</p>
+</li>
+</ul>
+
+<p>The following sections discuss the first two recommendations in more detail. For more
+information about creating flexible layouts, refer to the links provided above.</p>
+
+
+<p class="note"><strong>Note:</strong> Aside from one feature in the action bar, all the
+APIs needed to accomplish the recommendations in this document are available in Android
+3.0. Additionally, you can even implement the fragment design patterns and remain
+backward-compatible with Android 1.6, by using the support library—discussed in the side
+bar below.</p>
+
+
+
+<h2 id="Fragments">Creating Single-pane and Multi-pane Layouts</h2>
+
+
+<div class="sidebox-wrapper">
+<div class="sidebox">
+ <h3>Remaining backward-compatible</h3>
+<p>If you want to use fragments in your application <em>and</em> remain compatible with
+versions of Android older than 3.0, you can do so by using the Android <a
+href="{@docRoot}sdk/compatibility-library.html">Support Library</a> (downloadable from the
+SDK Manager).</p>
+<p>The support library includes APIs for <a
+href="{@docRoot}guide/topics/fundamentals/fragments.html">fragments</a>, <a
+href="{@docRoot}guide/topics/fundamentals/loaders.html">loaders</a>, and other APIs added in newer
+versions of Android. By simply adding this library to your Android project, you can use
+backward-compatible versions of these APIs in your application and remain compatible with Android
+1.6 (your <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code
+android:minSdkVersion}</a> value can be as low as {@code "4"}). For information about how to get the
+library and start using it, see the <a href="{@docRoot}sdk/compatibility-library.html">Support
+Library</a> document.</p>
+
+<p>The support library <em>does not</em> provide APIs for the action bar, but you can use
+code from the sample app, <a
+href="{@docRoot}resources/samples/ActionBarCompat/index.html">Action Bar Compatibility</a>, to
+create an action bar that supports all devices.</p>
+</div>
+</div>
+
+
+
+
+<p>The most effective way to create a distinct user experience for tablets and handsets is to create
+layouts with different combinations of fragments, such that you can design "multi-pane" layouts for
+tablets and "single-pane" layouts for handsets. For example, a news application on a tablet might
+show a list of articles on the left side and a full article on the right side—selecting an
+article on the left updates the article view on the right. On a handset, however, these two
+components should appear on separate screens—selecting an article from a list changes the
+entire screen to show that article. There are two techniques to accomplish this design with
+fragments:</p>
+
+
+<ul>
+ <li><em>Multiple fragments, one activity</em>: Use one activity regardless of the device size,
+but decide at runtime whether to combine fragments in the layout (to create a multiple-pane design)
+or swap fragments (to create a single-pane design). Or...</li>
+
+ <li><em>Multiple fragments, multiple activities</em>: On a tablet, place multiple fragments in
+one activity; on a handset, use separate activities to host each fragment. For example,
+when the tablet design uses two fragments in an activity, use the same activity for handsets, but
+supply an alternative layout that includes just the first fragment. When running on a handset and
+you need to switch fragments (such as when the user selects an item), start another activity that
+hosts the second fragment.</li>
+</ul>
+
+<p>The approach you choose depends on your design and personal preferences. The first option
+(one activity; swapping fragments) requires that you determine the screen size at runtime
+and dynamically add each fragment as appropriate—rather than declare the fragments
+in your activity's XML layout—because you <em>cannot</em> remove a fragment from an activity
+if it's been declared in the XML layout. When using the first technique, you might also need to
+update the action bar each time the fragments change, depending on what actions or navigation modes
+are available for each fragment. In some cases, these factors might not affect your design, so
+using one activity and swapping fragments might work well (especially if your tablet design requires
+that you add fragments dynamically anyway). Other times, however, dynamically swapping
+fragments for your handset design can make your code more complicated, because you must manage all
+the fragment combinations in the activity's code (rather than use alternative layout resources to
+define fragment combinations) and manage the back stack of fragments yourself (rather than
+allow the normal activity stack to handle back-navigation).</p>
+
+<p>This guide focuses on the second option, in which you display each fragment in a separate
+activity when on a smaller screen. Using this technique means that you can use alternative layout
+files that define different fragment combinations for different screen sizes, keep fragment code
+modular, simplify action bar management, and let the system handle all the back stack work on
+handsets.</p>
+
+<p>Figure 1 illustrates how an application with two fragments might be arranged for
+both handsets and tablets when using separate activities for the handset design:</p>
+
+<img src="{@docRoot}images/fundamentals/fragments.png" alt="" />
+<p class="img-caption"><strong>Figure 1.</strong> Different design patterns for tablets and
+handsets when selecting an item to view its details.</p>
+
+<p>In the application shown in figure 1, Activity A is the "main activity" and uses different
+layouts to display either one or two fragments at a time, depending on the size of the screen:</p>
+<ul>
+ <li>On a tablet-sized screen, the Activity A layout contains both Fragment A and Fragment B.</li>
+ <li>On a handset-sized screen, the Activity A layout contains only Fragment A (the list
+view). In order to show the details in Fragment B, Activity B must open.</li>
+</ul>
+
+<p class="note"><strong>Note:</strong> Activity B is never used on a tablet. It is simply a
+container to present Fragment B, so is only used on handset devices when the two fragments must
+be displayed separately.</p>
+
+<p>Depending on the screen size, the system applies a different {@code main.xml} layout file:</p>
+
+<p><code>res/layout/main.xml</code> for handsets:</p>
+
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+ <!-- "Fragment A" -->
+ <fragment class="<b>com.example.android.TitlesFragment</b>"
+ android:id="@+id/list_frag"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"/>
+</FrameLayout>
+</pre>
+
+<p><code>res/layout-large/main.xml</code> for tablets:</p>
+
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:orientation="horizontal"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:id="@+id/frags">
+ <!-- "Fragment A" -->
+ <fragment class="<b>com.example.android.TitlesFragment</b>"
+ android:id="@+id/list_frag"
+ android:layout_width="@dimen/titles_size"
+ android:layout_height="match_parent"/>
+ <!-- "Fragment B" -->
+ <fragment class="<b>com.example.android.DetailsFragment</b>"
+ android:id="@+id/details_frag"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent" />
+</LinearLayout>
+</pre>
+
+
+<div class="sidebox-wrapper">
+<div class="sidebox">
+ <h3>Supporting sizes based on screen width</h3>
+ <p>Android 3.2 (API level 13) adds new APIs that provide more fine-grain control over what screen
+sizes your app supports and what resources it uses, by declaring screen sizes based on the minimum
+width your layouts require. For example, both a 5" and 7" device qualify as a "large" screen, so
+your "large" layout resources are used on both devices. With API level 13, you can distinguish
+between these two sizes based on the screen width, as measured in density-independent pixels.</p>
+ <p>For details, read the blog post about <a
+href="http://android-developers.blogspot.com/2011/07/new-tools-for-managing-screen-sizes.html">
+New Tools for Managing Screen Sizes</a>.</p>
+</div>
+</div>
+
+<p class="note"><strong>Note:</strong> Although the above sample layout for tablets is based on
+the "large" screen configuration qualifier, you should also use the new "minimum width" size
+qualifiers in order to more precisely control the screen size at which the system applies your
+handset or tablet layout. See the sidebar for more information.</p>
+
+<p>How the application responds when a user selects an item from the list depends on whether
+Fragment B is available in the layout:</p>
+<ul>
+ <li>If Fragment B is in the layout, Activity A notifies Fragment B to update itself.</li>
+ <li>If Fragment B is <em>not</em> in the layout, Activity A starts Activity B (which hosts
+Fragment B).</li>
+</ul>
+
+
+<p>To implement this pattern for your application, it's important
+that you develop your fragments to be highly compartmentalized. Specifically, you should follow two
+guidelines:</p>
+
+<ul>
+ <li>Do not manipulate one fragment directly from another.</li>
+ <li>Keep all code that concerns content in a fragment inside that fragment, rather than putting it
+in the host activity's code.</li>
+</ul>
+
+<p>To avoid directly calling one fragment from another, <strong>define a callback interface in each
+fragment</strong> class that it can use to deliver events to
+its host activity, which implements the callback
+interface. When the activity receives a callback due to an event (such as the user selecting a list
+item), the activity responds appropriately based on the current fragment configuration.</p>
+
+<p>For example, Activity A from above can handle item selections depending on whether it's using
+the tablet or handset layout like this:</p>
+
+<pre>
+public class MainActivity extends Activity implements TitlesFragment.OnItemSelectedListener {
+ ...
+
+ /** This is a callback that the list fragment (Fragment A)
+ calls when a list item is selected */
+ public void onItemSelected(int position) {
+ DisplayFragment displayFrag = (DisplayFragment) getFragmentManager()
+ .findFragmentById(R.id.display_frag);
+ if (displayFrag == null) {
+ // DisplayFragment (Fragment B) is not in the layout (handset layout),
+ // so start DisplayActivity (Activity B)
+ // and pass it the info about the selected item
+ Intent intent = new Intent(this, DisplayActivity.class);
+ intent.putExtra("position", position);
+ startActivity(intent);
+ } else {
+ // DisplayFragment (Fragment B) is in the layout (tablet layout),
+ // so tell the fragment to update
+ displayFrag.updateContent(position);
+ }
+ }
+}
+</pre>
+
+<p>When <code>DisplayActivity</code> (Activity B) starts, it reads the data delivered by the
+{@link android.content.Intent} and passes it to the <code>DisplayFragment</code> (Fragment B).</p>
+
+<p>If Fragment B needs to deliver a result back to Fragment A (because Activity B was started with
+{@link android.app.Activity#startActivityForResult startActivityForResult()}), then the process
+works similarly with a callback interface between Fragment B and Activity B. That is, Activity B
+implements a different callback interface defined by Fragment B. When Activity B receives the
+callback with a result from the fragment, it sets the result for the activity (with {@link
+android.app.Activity#setResult setResult()}) and finishes itself. Activity A then receives the
+result and delivers it to Fragment A.</p>
+
+<p>For a demonstration of this technique for creating different fragment combinations for
+tablets and handsets, see the updated version of the <a
+href="{@docRoot}resources/samples/HoneycombGallery/index.html">Honeycomb Gallery</a>
+sample.</p>
+
+
+
+
+
+
+<h2 id="ActionBar">Using the Action Bar</h2>
+
+<p>The <a href="{@docRoot}guide/topics/ui/actionbar.html">Action Bar</a> is an important UI
+component for Android apps on both tablets and handsets. To ensure that the action bar
+behaves appropriately on all screen sizes, it's important that you use the {@link
+android.app.ActionBar} APIs without adding complex customizations. By using the standard {@link
+android.app.ActionBar} APIs to design your action bar, the Android system does all
+the work to gracefully adapt the action bar for different screen sizes. Here are some important
+tips to follow when creating your action bar:</p>
+
+<ul>
+ <li>When setting a menu item to be an action item, <strong>avoid using the {@code "always"}
+value</strong>. In your <a
+href="{@docRoot}guide/topics/resources/menu-resource.html">menu resource</a>, use {@code "ifRoom"}
+for the {@code android:showAsAction} attribute if you'd like the menu item to appear in the action
+bar. However, you might need {@code "always"} when an action view does not provide an alternative
+action for the overflow menu (that is, it must appear as an action view) or when a menu item added
+by a fragment is low in the menu order and it must jump into the action bar at all times. However,
+you should not use {@code "always"} more than once or twice. In almost all other cases, use {@code
+"ifRoom"} as the value for {@code "android:showAsAction"} when you want the item to appear as an
+action item. Forcing too many action items into the action bar can create a cluttered UI and
+action items may overlap with other action bar elements such as the title or navigation items.</li>
+
+ <li>When adding action items to the action bar with a text title, also <strong>provide an
+icon</strong>, when appropriate, and declare <code>showAsAction="ifRoom|withText"</code>.
+This way, if there's not enough room for the title, but there is enough room for the icon, then only
+the icon may be used.</li>
+
+
+ <li>Always <strong>provide a title</strong> for your action items, even if you don't enable {@code
+"withText"}, because users can view the title as a "tool-tip" by performing a
+"long click" on the item—the title text appears momentarily in a toast message. Providing
+a title is also critical for accessibility, because screen readers read aloud the item title
+even when not visible.</li>
+
+
+ <li><strong>Avoid using custom navigation modes when possible</strong>. Use the built-in tab
+and drop-down navigation modes when possible—they're designed so the system can adapt their
+presentation to different screen sizes. For example, when the width is too narrow for both tabs and
+other action items (such as a handset in portrait orientation), the tabs appear below the action bar
+(this is known as the "stacked action bar"). If you must build a custom navigation mode or other
+custom views in the action bar, thoroughly test them on smaller screens and make any
+necessary adjustments to support a narrow action bar.</li>
+</ul>
+
+<p>For example, the mock-ups below demonstrate how the system may adapt an action bar based
+on the available screen space. On the handset, only two action items fit, so the remaining menu
+items appear in the overflow menu (because {@code android:showAsAction} was set to {@code "ifRoom"})
+and the tabs appear in a separate row (the stacked action bar). On the tablet, more action items can
+fit in the action bar and so do the tabs.</p>
+
+<img src="{@docRoot}images/practices/actionbar-phone-tablet.png" alt=""/>
+<p class="img-caption"><strong>Figure 2.</strong> Mock-up showing how the system re-configures
+action bar components based on the available screen space.</p>
+
+
+<h3 id="SplitActionBar">Using split action bar</h3>
+
+<p>When your application is running on Android 4.0 (API level 14) and
+higher, there's an extra mode available for the action bar called "split action bar." When
+you enable split action bar, a separate bar appears at the bottom of the screen to
+display all action items when the activity is running on a narrow screen (such as a portrait
+handset). Splitting the action bar ensures that a reasonable amount of space is available to
+display action items on a narrow screen and also leave room for navigation and title elements
+at the top.</p>
+
+<p>To enable split action bar, simply add {@code uiOptions="splitActionBarWhenNarrow"} to your
+<a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a> or
+<a href="{@docRoot}guide/topics/manifest/application-element.html">{@code <application>}</a>
+manifest element.</p>
+
+
+<img src="{@docRoot}images/practices/actionbar-phone-splitaction.png" alt=""/>
+<p class="img-caption"><strong>Figure 3.</strong> Split action bar with navigation tabs on the left;
+with the app icon and title disabled on the right.</p>
+
+
+<p>If you'd like to hide the main action bar at the top, because you're using the built-in
+navigation tabs along with the split action bar, call {@link
+android.app.ActionBar#setDisplayShowHomeEnabled setDisplayShowHomeEnabled(false)} to disable the
+application icon in the action bar. In this case, there's now nothing left in the main action bar,
+so it disappears and all that’s left are the navigation tabs at the top and the action items at the
+bottom, as shown by the second device in figure 3.</p>
+
+<p class="note"><strong>Note:</strong> Although the {@code uiOptions} attribute was added in Android
+4.0 (API level 14), you can safely include it in your application even if your <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code minSdkVersion}</a> is set to
+a value lower than {@code "14"} to remain compatible with older versions of Android. When running on
+older versions, the system simply ignores the attribute because it doesn't understand it. The only
+condition to adding it to your manifest is that you must compile your application against a platform
+version that supports API level 14 or higher. Just be sure that you don't openly use other APIs in
+your application code that aren't supported by the version declared by your <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code minSdkVersion}</a>
+attribute.</p>
+
+
+<h3 id="NavigatingUp">Using "up" navigation</h3>
+
+<p>As discussed in the <a href="{@docRoot}guide/topics/ui/actionbar.html#Home">Action Bar</a>
+developer guide, you can use the application icon in the action bar to facilitate user navigation
+when appropriate—either as a method to get back to the "home" activity (similar to clicking
+the logo on a web site) or as a way to navigate up the application's structural hierarchy. Although
+it might seem similar to the standard BACK navigation in some cases, the up navigation option
+provides a more predictable navigation method for situations in which the user may have entered
+from an external location, such as a notification, app widget, or a different application.</p>
+
+<p>When using fragments in different combinations for different devices, it's important to give
+extra consideration to how your up navigation behaves in each configuration. For example, when on a
+handset and your application shows just one fragment at a time, it might be appropriate to enable up
+navigation to go up to the parent screen, whereas it's not necessary when showing the same
+fragment in a multi-pane configuration.</p>
+
+<p>For more information about enabling up navigation, see the <a
+href="{@docRoot}guide/topics/ui/actionbar.html#Home">Action Bar</a> developer guide.</p>
+
+
+
+
+<h2 id="Tips">Other Design Tips</h2>
+
+<ul>
+ <li>When working with a {@link android.widget.ListView}, consider how you might provide more or less
+information in each list item based on the available space. That is, you can create alternative
+layouts to be used by the items in your list adapter such that a large screen might display more
+detail for each item.</li>
+ <li>Create <a href="{@docRoot}guide/topics/resources/more-resources.html ">alternative resource
+files</a> for values such as integers, dimensions, and even booleans. Using size qualifiers for
+these resources, you can easily apply different layout sizes, font sizes, or enable/disable features
+based on the current screen size.</li>
+</ul>
+
+
diff --git a/docs/html/guide/publishing/app-signing.jd b/docs/html/guide/publishing/app-signing.jd
index 193c0fd..9abcdf7 100644
--- a/docs/html/guide/publishing/app-signing.jd
+++ b/docs/html/guide/publishing/app-signing.jd
@@ -7,7 +7,7 @@
<h2>Quickview</h2>
<ul>
-<li>All Android apps <em>must</em> be signed</a></li>
+<li>All Android apps <em>must</em> be signed</li>
<li>You can sign with a self-signed key</li>
<li>How you sign your apps is critical — read this document carefully</li>
<li>Determine your signing strategy early in the development process</li>
@@ -16,11 +16,11 @@
<h2>In this document</h2>
<ol>
-<li><a href="#overview">Overview</a></li>
+<li><a href="#signing">Signing Process</a></li>
<li><a href="#strategies">Signing Strategies</a></li>
<li><a href="#setup">Basic Setup for Signing</a></li>
<li><a href="#debugmode">Signing in Debug Mode</a></li>
-<li><a href="#releasemode">Signing for Public Release</a>
+<li><a href="#releasemode">Signing Release Mode</a>
<ol>
<li><a href="#cert">Obtain a suitable private key</a></li>
<li><a href="#releasecompile">Compile the application in release mode</a></li>
@@ -43,74 +43,67 @@
</div>
</div>
-<p>This document provides information about signing your Android applications prior to publishing them for mobile device users.</p>
-
-<h2 id="overview">Overview</h2>
-
-<p>The Android system requires that all installed applications be digitally
-signed with a certificate whose private key is held by the application's
-developer. The Android system uses the certificate as a means of identifying the author of
-an application and establishing trust relationships between applications. The certificate is not
-used to control which applications the user can install. The certificate
-does not need to be signed by a certificate authority: it is perfectly
-allowable, and typical, for Android applications to use self-signed
-certificates.</p>
+<p>The Android system requires that all installed applications be digitally signed with a
+certificate whose private key is held by the application's developer. The Android system uses the
+certificate as a means of identifying the author of an application and establishing trust
+relationships between applications. The certificate is not used to control which applications the
+user can install. The certificate does not need to be signed by a certificate authority: it is
+perfectly allowable, and typical, for Android applications to use self-signed certificates.</p>
<p>The important points to understand about signing Android applications are:</p>
<ul>
- <li>All applications <em>must</em> be signed. The system will not install an application
-that is not signed.</li>
- <li>You can use self-signed certificates to sign your applications. No certificate authority
-is needed.</li>
- <li>When you are ready to release your application for end-users, you must sign it with a suitable private
-key. You can not publish an application that is signed with the debug key generated
-by the SDK tools.
- </li>
- <li>The system tests a signer certificate's expiration date only at install time. If an
-application's signer certificate expires after the application is installed, the application
+ <li>All applications <em>must</em> be signed. The system will not install an application
+on an emulator or a device if it is not signed.</li>
+ <li>To test and debug your application, the build tools sign your application with a special debug
+ key that is created by the Android SDK build tools.</li>
+ <li>When you are ready to release your application for end-users, you must sign it with a suitable
+ private key. You cannot publish an application that is signed with the debug key generated
+ by the SDK tools.</li>
+ <li>You can use self-signed certificates to sign your applications. No certificate authority is
+ needed.</li>
+ <li>The system tests a signer certificate's expiration date only at install time. If an
+application's signer certificate expires after the application is installed, the application
will continue to function normally.</li>
- <li>You can use standard tools — Keytool and Jarsigner — to generate keys and
+ <li>You can use standard tools — Keytool and Jarsigner — to generate keys and
sign your application .apk files.</li>
- <li>Once you have signed the application, use the <code>zipalign</code> tool to optimize the final APK package.</li>
+ <li>After you sign your application for release, we recommend that you use the
+ <code>zipalign</code> tool to optimize the final APK package.</li>
</ul>
-<p>The Android system will not install or run an application that is not signed appropriately. This
-applies wherever the Android system is run, whether on an actual device or on the emulator.
-For this reason, you must set up signing for your application before you will be able to
-run or debug it on an emulator or device.</p>
+<p>The Android system will not install or run an application that is not signed appropriately. This
+applies wherever the Android system is run, whether on an actual device or on the emulator.
+For this reason, you must <a href="#setup">set up signing</a> for your application before you can
+run it or debug it on an emulator or device.</p>
-<p>The Android SDK tools assist you in signing your applications when debugging. Both the ADT Plugin
-for Eclipse and the Ant build tool offer two signing modes — <em>debug mode</em>
-and <em>release mode</em>.
+<h2 id="signing">Signing Process</h3>
-<ul>
-<li>While developing and testing, you can compile in debug mode.
-In debug mode, the build tools use the Keytool utility, included in the JDK, to create
-a keystore and key with a known alias and password. At each compilation, the tools then use
-the debug key to sign the application .apk file. Because the password is known, the tools
-don't need to prompt you for the keystore/key password each time you compile.</li>
+<p>The Android build process signs your application differently depending on which build mode you
+use to build your application. There are two build modes: <em>debug mode</em> and <em>release
+mode</em>. You use debug mode when you are developing and testing your application. You use
+release mode when you want to build a release version of your application that you can
+distribute directly to users or publish on an application marketplace such as Android Market.</p>
-<li>When your application is ready for release, you must compile in release mode
-and then sign the .apk <span style="color:red">with your private key</span>.
-There are two ways to do this:
- <ul>
- <li>Using Keytool and Jarsigner in the command-line. In this approach,
- you first compile your application to an <em>unsigned</em> .apk. You must then sign
- the .apk manually with your private key
- using Jarsigner (or similar tool). If you do not have a suitable private key already,
- you can run Keytool manually to generate your own keystore/key and then sign your
- application with Jarsigner.</li>
- <li>Using the ADT Export Wizard. If you are developing in Eclipse with the ADT plugin,
- you can use the Export Wizard to compile the application, generate a private key
- (if necessary), and sign the .apk, all in a single process using the Export Wizard.
- </li>
- </ul>
-</li>
-</ul>
+<p>When you build in <em>debug mode</em> the Android SDK build tools use the Keytool utility
+(included in the JDK) to create a debug key. Because the SDK build tools created the debug key,
+they know the debug key's alias and password. Each time you compile your application in debug mode,
+the build tools use the debug key along with the Jarsigner utility (also included in the JDK) to
+sign your application's <code>.apk</code> file. Because the alias and password are known to the SDK
+build tools, the tools don't need to prompt you for the debug key's alias and password each time
+you compile.</p>
-<p>Once your application is signed, don't forget to run {@code zipalign} on the APK
-for additional optimization.</p>
+<p>When you build in <em>release mode</em> you use your own private key to sign your application. If
+you don't have a private key, you can use the Keytool utility to create one for you. When you
+compile your application in release mode, the build tools use your private key along with the
+Jarsigner utility to sign your application's <code>.apk</code> file. Because the certificate and
+private key you use are your own, you will have to provide the password for the keystore and key
+alias.</p>
+
+<p>The debug signing process happens automatically when you run or debug your application using
+Eclipse with the ADT plugin. Debug signing also happens automatically when you use the Ant build
+script with the <code>debug</code> option. You can automate the release signing process by using the
+Eclipse Export Wizard or by modifying the Ant build script and building with the
+<code>release</code> option.</p>
<h2 id="strategies">Signing Strategies</h2>
@@ -149,24 +142,24 @@
</ul>
-<p>Another important consideration in determining your signing strategy is
-how to set the validity period of the key that you will use to sign your
+<p>Another important consideration in determining your signing strategy is
+how to set the validity period of the key that you will use to sign your
applications.</p>
<ul>
-<li>If you plan to support upgrades for a single application, you should ensure
+<li>If you plan to support upgrades for a single application, you should ensure
that your key has a validity period that exceeds the expected lifespan of
-that application. A validity period of 25 years or more is recommended.
+that application. A validity period of 25 years or more is recommended.
When your key's validity period expires, users will no longer be
able to seamlessly upgrade to new versions of your application.</li>
-<li>If you will sign multiple distinct applications with the same key,
-you should ensure that your key's validity period exceeds the expected
-lifespan of <em>all versions of all of the applications</em>, including
+<li>If you will sign multiple distinct applications with the same key,
+you should ensure that your key's validity period exceeds the expected
+lifespan of <em>all versions of all of the applications</em>, including
dependent applications that may be added to the suite in the future. </li>
<li>If you plan to publish your application(s) on Android Market, the
-key you use to sign the application(s) must have a validity period
+key you use to sign the application(s) must have a validity period
ending after 22 October 2033. The Market server enforces this requirement
to ensure that users can seamlessly upgrade Market applications when
new versions are available. </li>
@@ -177,25 +170,21 @@
<h2 id="setup">Basic Setup for Signing</h2>
-<p>Before you begin, you should make sure that
-Keytool is available to the SDK build
-tools. In most cases, you can tell the SDK build tools how to find Keytool by setting
-your <code>JAVA_HOME</code> environment variable to references a suitable JDK.
-Alternatively, you can add the JDK version of Keytool to your <code>PATH</code> variable.</p>
+<p>Before you begin, make sure that the Keytool utility and Jarsigner utility are available to
+the SDK build tools. Both of these tools are available in the JDK. In most cases, you can tell
+the SDK build tools how to find these utilities by setting your <code>JAVA_HOME</code> environment
+variable so it references a suitable JDK. Alternatively, you can add the JDK version of Keytool and
+Jarsigner to your <code>PATH</code> variable.</p>
-<p>If you are developing on a version of Linux that originally came with GNU Compiler for
-Java, make sure that the system is using the JDK version of Keytool, rather than the gcj
-version. If Keytool is already in your <code>PATH</code>, it might be pointing to a symlink at
-<code>/usr/bin/keytool</code>. In this case, check the symlink target to be sure it points
+<p>If you are developing on a version of Linux that originally came with GNU Compiler for
+Java, make sure that the system is using the JDK version of Keytool, rather than the gcj
+version. If Keytool is already in your <code>PATH</code>, it might be pointing to a symlink at
+<code>/usr/bin/keytool</code>. In this case, check the symlink target to be sure it points
to the Keytool in the JDK.</p>
-<p>If you will release your application to the public, you will also need to have
-the Jarsigner tool available on your machine. Both Jarsigner and Keytool are included
-in the JDK. </p>
-
<h2 id="debugmode">Signing in Debug Mode</h2>
-<p>The Android build tools provide a debug signing mode that makes it easier for you
+<p>The Android build tools provide a debug signing mode that makes it easier for you
to develop and debug your application, while still meeting the Android system
requirement for signing your .apk.
When using debug mode to build your app, the SDK tools invoke Keytool to automatically create
@@ -209,7 +198,7 @@
<li>Key alias: "androiddebugkey"</li>
<li>Key password: "android"</li>
<li>CN: "CN=Android Debug,O=Android,C=US"</li>
-</ul></p>
+</ul>
<p>If necessary, you can change the location/name of the debug keystore/key or
supply a custom debug keystore/key to use. However, any custom debug
@@ -218,38 +207,38 @@
<strong>Windows</strong> > <strong>Preferences</strong> >
<strong>Android</strong> > <strong>Build</strong>.) </p>
-<p class="caution"><strong>Caution:</strong> You <em>cannot</em> release your application
+<p class="caution"><strong>Caution:</strong> You <em>cannot</em> release your application
to the public when signed with the debug certificate.</p>
<h3>Eclipse Users</h3>
-<p>If you are developing in Eclipse/ADT (and have set up Keytool as described above in
+<p>If you are developing in Eclipse/ADT (and have set up Keytool and Jarsigner as described above in
<a href="#setup">Basic Setup for Signing</a>),
signing in debug mode is enabled by default. When you run or debug your
-application, ADT signs the .apk with the debug certificate, runs {@code zipalign} on the
-package, then installs it on
-the selected emulator or connected device. No specific action on your part is needed,
+application, ADT signs the .apk with the debug certificate, runs {@code zipalign} on the
+package, then installs it on
+the selected emulator or connected device. No specific action on your part is needed,
provided ADT has access to Keytool.</p>
<h3>Ant Users</h3>
-<p>If you are using Ant to build your .apk files, debug signing mode
+<p>If you are using Ant to build your .apk files, debug signing mode
is enabled by using the <code>debug</code> option with the <code>ant</code> command
(assuming that you are using a <code>build.xml</code> file generated by the
-<code>android</code> tool). When you run <code>ant debug</code> to
-compile your app, the build script generates a keystore/key and signs the .apk for you.
+<code>android</code> tool). When you run <code>ant debug</code> to
+compile your app, the build script generates a keystore/key and signs the .apk for you.
The script then also aligns the .apk with the <code>zipalign</code> tool.
-No other action on your part is needed. Read
+No other action on your part is needed. Read
<a href="{@docRoot}guide/developing/building/building-cmdline.html#DebugMode">Building and Running Apps
on the Command Line</a> for more information.</p>
<h3 id="debugexpiry">Expiry of the Debug Certificate</h3>
-<p>The self-signed certificate used to sign your application in debug mode (the default on
+<p>The self-signed certificate used to sign your application in debug mode (the default on
Eclipse/ADT and Ant builds) will have an expiration date of 365 days from its creation date.</p>
-<p>When the certificate expires, you will get a build error. On Ant builds, the error
+<p>When the certificate expires, you will get a build error. On Ant builds, the error
looks like this:</p>
<pre>debug:
@@ -258,59 +247,59 @@
<p>In Eclipse/ADT, you will see a similar error in the Android console.</p>
-<p>To fix this problem, simply delete the <code>debug.keystore</code> file.
-The default storage location for AVDs is in <code>~/.android/</code> on OS X and Linux,
+<p>To fix this problem, simply delete the <code>debug.keystore</code> file.
+The default storage location for AVDs is in <code>~/.android/</code> on OS X and Linux,
in <code>C:\Documents and Settings\<user>\.android\</code> on Windows XP, and in
<code>C:\Users\<user>\.android\</code> on Windows Vista and Windows 7.</p>
<p>The next time you build, the build tools will regenerate a new keystore and debug key.</p>
-<p>Note that, if your development machine is using a non-Gregorian locale, the build
-tools may erroneously generate an already-expired debug certificate, so that you get an
-error when trying to compile your application. For workaround information, see the
+<p>Note that, if your development machine is using a non-Gregorian locale, the build
+tools may erroneously generate an already-expired debug certificate, so that you get an
+error when trying to compile your application. For workaround information, see the
troubleshooting topic <a href="{@docRoot}resources/faq/troubleshooting.html#signingcalendar">
-I can't compile my app because the build tools generated an expired debug
+I can't compile my app because the build tools generated an expired debug
certificate</a>. </p>
-<h2 id="releasemode">Signing for Public Release</h2>
+<h2 id="releasemode">Signing in Release Mode</h2>
<p>When your application is ready for release to other users, you must:</p>
<ol>
<li><a href="#cert">Obtain a suitable private key</a></li>
- <li><a href="#releasecompile">Compile the application in release mode</li>
+ <li><a href="#releasecompile">Compile the application in release mode</a></li>
<li><a href="#signapp">Sign your application with your private key</a></li>
<li><a href="#align">Align the final APK package</a></li>
</ol>
<p>If you are developing in Eclipse with the ADT plugin, you can use the Export Wizard
-to perform the compile, sign, and align procedures. The Export Wizard even allows you to
-generate a new keystore and private key in the process. So if you use Eclipse, you can
+to perform the compile, sign, and align procedures. The Export Wizard even allows you to
+generate a new keystore and private key in the process. So if you use Eclipse, you can
skip to <a href="#ExportWizard">Compile and sign with Eclipse ADT</a>.</p>
<h3 id="cert">1. Obtain a suitable private key</h3>
-<p>In preparation for signing your application, you must first ensure that
-you have a suitable private key with which to sign. A suitable private
+<p>In preparation for signing your application, you must first ensure that
+you have a suitable private key with which to sign. A suitable private
key is one that:</p>
<ul>
<li>Is in your possession</li>
-<li>Represents the personal, corporate, or organizational entity to be identified
+<li>Represents the personal, corporate, or organizational entity to be identified
with the application</li>
<li>Has a validity period that exceeds the expected lifespan of the application
-or application suite. A validity period of more than 25 years is recommended.
-<p>If you plan to publish your application(s) on Android Market, note that a
+or application suite. A validity period of more than 25 years is recommended.
+<p>If you plan to publish your application(s) on Android Market, note that a
validity period ending after 22 October 2033 is a requirement. You can not upload an
-application if it is signed with a key whose validity expires before that date.
+application if it is signed with a key whose validity expires before that date.
</p></li>
<li>Is not the debug key generated by the Android SDK tools. </li>
</ul>
-<p>The key may be self-signed. If you do not have a suitable key, you must
+<p>The key may be self-signed. If you do not have a suitable key, you must
generate one using Keytool. Make sure that you have Keytool available, as described
in <a href="#setup">Basic Setup</a>.</p>
@@ -318,8 +307,8 @@
command and pass any of the options listed below (and any others, as
needed). </p>
-<p class="warning"><strong>Warning:</strong> Keep your private key secure.
-Before you run Keytool, make sure to read
+<p class="warning"><strong>Warning:</strong> Keep your private key secure.
+Before you run Keytool, make sure to read
<a href="#secure-key">Securing Your Private Key</a> for a discussion of how to keep
your key secure and why doing so is critically important to you and to users. In
particular, when you are generating your key, you should select strong passwords
@@ -342,7 +331,7 @@
the first 8 characters of the alias are used.</td>
</tr>
<tr>
-<td><code>-keyalg <alg></code></td><td>The encryption algorithm to use
+<td><code>-keyalg <alg></code></td><td>The encryption algorithm to use
when generating the key. Both DSA and RSA are supported.</td>
</tr>
<tr>
@@ -354,7 +343,7 @@
<td><code>-dname <name></code></td><td><p>A Distinguished Name that describes
who created the key. The value is used as the issuer and subject fields in the
self-signed certificate. </p><p>Note that you do not need to specify this option
-in the command line. If not supplied, Jarsigner prompts you to enter each
+in the command line. If not supplied, Jarsigner prompts you to enter each
of the Distinguished Name fields (CN, OU, and so on).</p></td>
</tr>
<tr>
@@ -381,14 +370,14 @@
<p>Here's an example of a Keytool command that generates a private key:</p>
-<pre>$ keytool -genkey -v -keystore my-release-key.keystore
+<pre>$ keytool -genkey -v -keystore my-release-key.keystore
-alias alias_name -keyalg RSA -keysize 2048 -validity 10000</pre>
<p>Running the example command above, Keytool prompts you to provide
passwords for the keystore and key, and to provide the Distinguished
Name fields for your key. It then generates the keystore as a file called
-<code>my-release-key.keystore</code>. The keystore and key are
-protected by the passwords you entered. The keystore contains
+<code>my-release-key.keystore</code>. The keystore and key are
+protected by the passwords you entered. The keystore contains
a single key, valid for 10000 days. The alias is a name that you —
will use later, to refer to this keystore when signing your application. </p>
@@ -401,7 +390,7 @@
<h3 id="releasecompile">2. Compile the application in release mode</h3>
-<p>In order to release your application to users, you must compile it in release mode.
+<p>In order to release your application to users, you must compile it in release mode.
In release mode, the compiled application is not signed by default and you will need
to sign it with your private key.</p>
@@ -410,19 +399,19 @@
<h4>With Eclipse</h4>
-<p>To export an <em>unsigned</em> .apk from Eclipse, right-click the project in the Package
-Explorer and select <strong>Android Tools</strong> > <strong>Export Unsigned Application
+<p>To export an <em>unsigned</em> .apk from Eclipse, right-click the project in the Package
+Explorer and select <strong>Android Tools</strong> > <strong>Export Unsigned Application
Package</strong>. Then specify the file location for the unsigned .apk.
-(Alternatively, open your <code>AndroidManifest.xml</code> file in Eclipse, open
+(Alternatively, open your <code>AndroidManifest.xml</code> file in Eclipse, open
the <em>Overview</em> tab, and click <strong>Export an unsigned .apk</strong>.)</p>
-<p>Note that you can combine the compiling and signing steps with the Export Wizard. See
+<p>Note that you can combine the compiling and signing steps with the Export Wizard. See
<a href="#ExportWizard">Compiling and signing with Eclipse ADT</a>.</p>
<h4>With Ant</h4>
<p>If you are using Ant, you can enable release mode by using the <code>release</code> option
-with the <code>ant</code> command. For example, if you are running Ant from the
+with the <code>ant</code> command. For example, if you are running Ant from the
directory containing your {@code build.xml} file, the command would look like this:</p>
<pre>ant release</pre>
@@ -437,7 +426,7 @@
your key alias in the project's {@code ant.properties} file. With this information provided,
the build script will prompt you for your keystore and alias password when you perform
<code>ant release</code>, it will sign the package and then align it. The final output
-file in {@code bin/} will instead be
+file in {@code bin/} will instead be
<code><em><your_project_name></em>-release.apk</code>. With these steps
automated for you, you're able to skip the manual procedures below (steps 3 and 4).
To learn how to specify your keystore and alias in the {@code ant.properties} file,
@@ -455,7 +444,7 @@
<p>To sign your application, you run Jarsigner, referencing both the
application's .apk and the keystore containing the private key with which to
-sign the .apk. The table below shows the options you could use. <p>
+sign the .apk. The table below shows the options you could use. </p>
<table>
<tr>
@@ -471,37 +460,37 @@
</tr>
<tr>
<td><code>-storepass <password></code></td><td><p>The password for the
-keystore. </p><p>As a security precaution, do not include this option
+keystore. </p><p>As a security precaution, do not include this option
in your command line unless you are working at a secure computer.
-If not supplied, Jarsigner prompts you to enter the password. In this
+If not supplied, Jarsigner prompts you to enter the password. In this
way, your password is not stored in your shell history.</p></td>
</tr>
<tr>
<td><code>-keypass <password></code></td><td><p>The password for the private
-key. </p><p>As a security precaution, do not include this option
+key. </p><p>As a security precaution, do not include this option
in your command line unless you are working at a secure computer.
-If not supplied, Jarsigner prompts you to enter the password. In this
+If not supplied, Jarsigner prompts you to enter the password. In this
way, your password is not stored in your shell history.</p></td>
</tr>
</table>
<p>Here's how you would use Jarsigner to sign an application package called
-<code>my_application.apk</code>, using the example keystore created above.
+<code>my_application.apk</code>, using the example keystore created above.
</p>
-<pre>$ jarsigner -verbose -keystore my-release-key.keystore
+<pre>$ jarsigner -verbose -keystore my-release-key.keystore
my_application.apk alias_name</pre>
<p>Running the example command above, Jarsigner prompts you to provide
-passwords for the keystore and key. It then modifies the .apk
-in-place, meaning the .apk is now signed. Note that you can sign an
+passwords for the keystore and key. It then modifies the .apk
+in-place, meaning the .apk is now signed. Note that you can sign an
.apk multiple times with different keys.</p>
<p>To verify that your .apk is signed, you can use a command like this:</p>
<pre>$ jarsigner -verify my_signed.apk</pre>
-<p>If the .apk is signed properly, Jarsigner prints "jar verified".
+<p>If the .apk is signed properly, Jarsigner prints "jar verified".
If you want more details, you can try one of these commands:</p>
<pre>$ jarsigner -verify -verbose my_application.apk</pre>
@@ -510,7 +499,7 @@
<pre>$ jarsigner -verify -verbose -certs my_application.apk</pre>
-<p>The command above, with the <code>-certs</code> option added, will show you the
+<p>The command above, with the <code>-certs</code> option added, will show you the
"CN=" line that describes who created the key.</p>
<p class="note"><strong>Note:</strong> If you see "CN=Android Debug", this means the .apk was
@@ -534,21 +523,21 @@
of the data from the package. The benefit is a reduction in the amount of
RAM consumed by the running application.</p>
-<p>The <code>zipalign</code> tool is provided with the Android SDK, inside the
+<p>The <code>zipalign</code> tool is provided with the Android SDK, inside the
<code>tools/</code> directory. To align your signed .apk, execute:</p>
<pre>zipalign -v 4 <em>your_project_name</em>-unaligned.apk <em>your_project_name</em>.apk</pre>
<p>The {@code -v} flag turns on verbose output (optional). {@code 4} is the
byte-alignment (don't use anything other than 4). The first file argument is
-your signed .apk (the input) and the second file is the destination .apk file (the output).
+your signed .apk (the input) and the second file is the destination .apk file (the output).
If you're overriding an existing .apk, add the {@code -f} flag.</p>
<p class="caution"><strong>Caution:</strong> Your input .apk must be signed with your
private key <strong>before</strong> you optimize the package with {@code zipalign}.
If you sign it after using {@code zipalign}, it will undo the alignment.</p>
-<p>For more information, read about the
+<p>For more information, read about the
<a href="{@docRoot}guide/developing/tools/zipalign.html">zipalign</a> tool.
@@ -568,15 +557,15 @@
<p>To create a signed and aligned .apk in Eclipse:</p>
<ol>
- <li>Select the project in the Package
+ <li>Select the project in the Package
Explorer and select <strong>File > Export</strong>.</li>
- <li>Open the Android folder, select Export Android Application,
+ <li>Open the Android folder, select Export Android Application,
and click <strong>Next</strong>.
- <p>The Export Android Application wizard now starts, which will
+ <p>The Export Android Application wizard now starts, which will
guide you through the process of signing your application,
including steps for selecting the private key with which to sign the .apk
(or creating a new keystore and private key).</p>
- <li>Complete the Export Wizard and your application will be compiled,
+ <li>Complete the Export Wizard and your application will be compiled,
signed, aligned, and ready for distribution.</li>
</ol>
@@ -590,10 +579,10 @@
could find and use them, your authoring identity and the trust of the user
are compromised. </p>
-<p>If a third party should manage to take your key without your knowledge or
+<p>If a third party should manage to take your key without your knowledge or
permission, that person could sign and distribute applications that maliciously
replace your authentic applications or corrupt them. Such a person could also
-sign and distribute applications under your identity that attack other
+sign and distribute applications under your identity that attack other
applications or the system itself, or corrupt or steal user data. </p>
<p>Your reputation as a developer entity depends on your securing your private
@@ -602,12 +591,12 @@
<ul>
<li>Select strong passwords for the keystore and key.</li>
-<li>When you generate your key with Keytool, <em>do not</em> supply the
-<code>-storepass</code> and <code>-keypass</code> options at the command line.
-If you do so, your passwords will be available in your shell history,
+<li>When you generate your key with Keytool, <em>do not</em> supply the
+<code>-storepass</code> and <code>-keypass</code> options at the command line.
+If you do so, your passwords will be available in your shell history,
which any user on your computer could access.</li>
-<li>Similarly, when signing your applications with Jarsigner,
-<em>do not</em> supply the <code>-storepass</code> and <code>-keypass</code>
+<li>Similarly, when signing your applications with Jarsigner,
+<em>do not</em> supply the <code>-storepass</code> and <code>-keypass</code>
options at the command line. </li>
<li>Do not give or lend anyone your private key, and do not let unauthorized
persons know your keystore and key passwords.</li>
diff --git a/docs/html/guide/publishing/preparing.jd b/docs/html/guide/publishing/preparing.jd
index 69aecd4..5ed55fe 100644
--- a/docs/html/guide/publishing/preparing.jd
+++ b/docs/html/guide/publishing/preparing.jd
@@ -1,253 +1,355 @@
-page.title=Preparing to Publish: A Checklist
+page.title=Preparing for Release
@jd:body
-<p>Publishing an application means testing it, packaging it appropriately, and
-making it available to users of Android-powered mobile devices.</p>
+<div id="qv-wrapper">
+ <div id="qv">
+ <h2>Quickview</h2>
+ <ul>
+ <li>Learn which resources you'll need to release your app.</li>
+ <li>Find out how to configure and build your app for release.</li>
+ <li>Learn best practices for releasing your app.</li>
+ </ul>
+ <h2>In this document</h2>
+ <ol>
+ <li><a href="#publishing-intro">Introduction</a></li>
+ <li><a href="#publishing-gather">Gathering Materials and Resources</a></li>
+ <li><a href="#publishing-configure">Configuring Your Application</a></li>
+ <li><a href="#publishing-build">Building Your Application</a></li>
+ <li><a href="#publishing-resources">Preparing External Servers and Resources</a></li>
+ <li><a href="#publishing-test">Testing Your Application for Release</a></li>
+ </ol>
+ <h2>See also</h2>
+ <ol>
+ <li><a href="{@docRoot}guide/publishing/publishing_overview.html">Publishing Overview</a></li>
+ <li><a href="{@docRoot}guide/publishing/app-signing.html">Signing Your Applications</a></li>
+ <li><a href="{@docRoot}guide/publishing/publishing.html">Publishing on Android Market</a></li>
+ </ol>
+ </div>
+</div>
-<p>If you plan to publish your application for installation on
-Android-powered devices, there are several things you need to do, to get
-your application ready. This document highlights the significant
-checkpoints for preparing your application for a successful release.
+<p>Before you distribute your Android application to users you need to prepare it for release. The
+preparation process is a required <a href="{@docRoot}guide/developing/index.html">development
+task</a> for all Android applications and is the first step in the publishing process (see figure
+1).</p>
+
+<p>When you prepare your application for release, you configure, build, and test a release
+version of your application. The configuration tasks are straightforward, involving basic code
+cleanup and code modification tasks that help optimize your application. The build process is
+similar to the debug build process and can be done using JDK and Android SDK tools. The testing
+tasks serve as a final check, ensuring that your application performs as expected under real-world
+conditions. When you are finished preparing your application for release you have a signed
+<code>.apk</code> file, which you can distribute directly to users or distribute through an
+application marketplace such as Android Market.</p>
+
+<p>This document summarizes the main tasks you need to perform to prepare your application for
+release. The tasks that are described in this document apply to all Android applications regardless
+how they are released or distributed to users. If you are releasing your application through Android
+Market, you should also read <a href="{@docRoot}guide/publishing/publishing.html">Publishing on
+Android Market</a> to be sure your release-ready application satisfies all Android Market
+requirements.</p>
+
+<p class="note"><strong>Note:</strong> As a best practice, your application should meet all of your
+release criteria for functionality, performance, and stability before you perform the tasks outlined
+in this document.</p>
+
+<img src="{@docRoot}images/publishing/publishing_overview_prep.png"
+ alt="Shows how the preparation process fits into the development process"
+ height="190"
+ id="figure1" />
+<p class="img-caption">
+ <strong>Figure 1.</strong> Preparing for release is a required <a
+href="{@docRoot}guide/developing/index.html">development
+task</a> and is the first step in the publishing process.
</p>
-<p>If you will publish your application on Android Market, please also see <a
-href="{@docRoot}guide/publishing/publishing.html#market">Publishing on Android Market</a>
-for specific preparation requirements for your application. </p>
+<h2 id="publishing-intro">Introduction</h2>
-<p>For general information about the ways that you can publish an applications,
-see the <a href="{@docRoot}guide/publishing/publishing.html">Publishing Your
-Applications</a> document. </p>
+<p>To release your application to users you need to create a release-ready package that users can
+install and run on their Android-powered devices. The release-ready package contains the same
+components as the debug <code>.apk</code> file — compiled source code, resources, manifest
+file, and so on — and it is built using the same build tools. However, unlike the debug
+<code>.apk</code> file, the release-ready <code>.apk</code> file is signed with your own certificate
+and it is optimized with the zipalign tool.</p>
-<div class="special">
-
-<p><a href="#releaseready">Before you consider your application ready for release</a>:</p>
-
-<ol>
-<li>Test your application extensively on an actual device </li>
-<li>Consider adding an End User License Agreement in your application</li>
-<li>Consider adding licensing support</li>
-<li>Specify an icon and label in the application's manifest</li>
-<li>Turn off logging and debugging and clean up data/files</li>
-</ol>
-
-<p><a href="#finalcompile">Before you do the final compile of your application</a>:</p>
-
-<ol start="6">
-<li>Version your application</li>
-<li>Obtain a suitable cryptographic key</li>
-<li>Register for a Maps API Key, if your application is using MapView elements</li>
-</ol>
-
-<p><a href="#compile">Compile your application</a></p>
-
-<p><a href="#post-compile">After you compile your application</a>:</p>
-<ol start="9">
-<li>Sign your application</li>
-<li>Test your compiled application</li>
-</ol>
+<div class="figure" style="width:331px">
+ <img src="{@docRoot}images/publishing/publishing_preparing.png"
+ alt="Shows the five tasks you perform to prepare your app for release"
+ height="450" />
+ <p class="img-caption">
+ <strong>Figure 2.</strong> You perform five main tasks to prepare your application for
+ release.
+ </p>
</div>
-<h2 id="releaseready">Before you consider your application ready for release</h2>
+<p>The signing and optimization tasks are usually seamless if you are building your application with
+Eclipse and the ADT plugin or with the Ant build script (included with the Android SDK). For
+example, you can use the Eclipse Export Wizard to compile, sign, and optimize your application all
+at once. You can also configure the Ant build script to do the same when you build from the command
+line.</p>
-<h3 id="test">1. Test your application extensively on an actual device</h3>
+<p>To prepare your application for release you typically perform five main tasks (see figure 2).
+Each main task may include one or more smaller tasks depending on how you are releasing your
+application. For example, if you are releasing your application through Android Market you may want
+to add special filtering rules to your manifest while you are configuring your application for
+release. Similarly, to meet Android Market publishing guidelines you may have to prepare screenshots
+and create promotional text while you are gathering materials for release.</p>
-<p>It's important to test your application as extensively as possible, in as
-many areas as possible. To help you do that, Android provides a variety of
-testing classes and tools. You can use
-{@link android.app.Instrumentation Instrumentation} to run JUnit and other
-test cases, and you can use testing
-tools such as the <a href="{@docRoot}guide/developing/tools/monkey.html">UI/Application
-Exerciser Monkey</a>. </p>
+<p>You usually perform the tasks listed in figure 2 after you have throroughly debugged and tested
+your application. The Android SDK contains several tools to help you test and debug your Android
+applications. For more information, see the <a
+href="{@docRoot}guide/developing/debugging/index.html">Debugging</a> and <a
+href="{@docRoot}guide/developing/testing/index.html">Testing</a> sections in the Dev Guide.</p>
+
+<h2 id="publishing-gather">Gathering Materials and Resources</h2>
+
+<p>To begin preparing your application for release you need to gather several supporting items. At a
+minimum this includes cryptographic keys for signing your application and an application icon. You
+might also want to include an end-user license agreement.</p>
+
+<h4 id="publishing-keys">Cryptographic keys</h4>
+
+<p>The Android system requires that each installed application be digitally signed with a
+certificate that is owned by the application's developer (that is, a certificate for which the
+developer holds the private key). The Android system uses the certificate as a means of identifying
+the author of an application and establishing trust relationships between applications. The
+certificate that you use for signing does not need to be signed by a certificate authority; the
+Android system allows you to sign your applications with a self-signed certificate. To learn about
+certificate requirements, see <a href="{@docRoot}guide/publishing/app-signing.html#cert">Obtain a
+suitable private key</a>.</p>
+
+<p>You may also have to obtain other release keys if your application accesses a service or uses a
+third-party library that requires you to use a key that is based on your private key. For example,
+if your application uses the <a
+href="http://code.google.com/android/add-ons/google-apis/reference/com/google/android/maps/ MapView.
+html">MapView</a> class, which is part of the <a
+href="http://code.google.com/android/add-ons/google-apis/maps-overview.html">Google Maps external
+library</a>, you will need to register your application with the Google Maps service and obtain
+a Maps API key. For information about getting a Maps API key, see <a
+href="http://code.google.com/android/add-ons/google-apis/mapkey.html"> Obtaining a Maps API
+key</a>.</p>
+
+<h4>Application Icon</h4>
+
+<p>Be sure you have an application icon and that it meets the recommended <a
+href="{@docRoot}guide/practices/ui_guidelines/icon_design_launcher.html">icon guidelines</a>. Your
+application's icon helps users identify your application on a device's Home
+screen and in the Launcher window. It also appears in Manage Applications, My Downloads, and
+elsewhere. In addition, publishing services such as Android Market display your icon to users.</p>
+
+<p class="note"><strong>Note:</strong> If you are releasing your application on Android Market, you
+need to create a high resolution
+ version of your icon. See <a
+href="https://www.google.com/support/androidmarket/developer/bin/answer.py?answer=1078870">Graphic
+Assets for your Application</a> for more information.</p>
+
+<h4>End-user License Agreement</h4>
+
+<p>Consider preparing an End User License Agreement (EULA) for your application. A EULA can help
+protect your person, organization, and intellectual property, and we recommend that you provide one
+with your application.</p>
+
+<h4>Miscellaneous Materials</h4>
+
+<p>You might also have to prepare promotional and marketing materials to publicize your application.
+For example, if you are releasing your application on Android Market you will need to prepare some
+promotional text and you will need to create screenshots of your application. For more
+information, see
+<a href="https://www.google.com/support/androidmarket/developer/bin/answer.py?answer=1078870">
+Graphic Assets for your Application</a></p>
+
+<h2 id="publishing-configure">Configuring Your Application for Release</h2>
+
+<p>After you gather all of your supporting materials you can start configuring your application
+for release. This section provides a summary of the configuration changes we recommend that you make
+to your source code, resource files, and application manifest prior to releasing your application.
+Although most of the configuration changes listed in this section are optional, they are
+considered good coding practices and we encourage you to implement them. In some cases,
+you may have already made these configuration changes as part of your development process.</p>
+
+<h4>Choose a good package name</h4>
+
+<p>Make sure you choose a package name that is suitable over the life of your application. You
+cannot change the package name after you distribute your application to users. You can set the
+package name in application's manifest file. For more information, see the <a
+href="{@docRoot}guide/topics/manifest/manifest-element.html#package">package</a> attribute
+documentation.</p>
+
+<h4>Turn off logging and debugging</h4>
+
+<p>Make sure you deactivate logging and disable the debugging option before you build your
+application for release. You can deactivate logging by removing calls to
+{@link android.util.Log} methods in your source files. You can disable debugging by removing the
+<code>android:debuggable</code> attribute from the <code><application></code> tag in your
+manifest file, or by setting the <code>android:debuggable</code> attribute to
+<code>false</code> in your manifest file. Also, remove any log files or static test files that
+were created in your project.</p>
+
+<p>Also, you should remove all {@link android.os.Debug} tracing calls that you
+added to your code, such as {@link android.os.Debug#startMethodTracing()} and
+{@link android.os.Debug#stopMethodTracing()} method calls.</p>
+
+<h4>Clean up your project directories</h4>
+
+<p>Clean up your project and make sure it conforms to the directory structure described in <a
+href="{@docRoot}guide/developing/projects/index.html#ApplicationProjects">Android Projects</a>.
+Leaving stray or orphaned files in your project can prevent your application from compiling and
+cause your application to behave unpredictably. At a minimum you should do the following cleanup
+tasks:</p>
<ul>
-<li>To ensure that your application will run properly for users, you should make
-every effort to obtain one or more physical mobile device(s) of the type on
-which you expect the application to run. You should then test your application
-on the actual device, under realistic network conditions. Testing your
-application on a physical device is very important, because it enables you to
-verify that your user interface elements are sized correctly (especially for
-touch-screen UI) and that your application's performance and battery efficiency
-are acceptable.</li>
-
-<li>If you can not obtain a mobile device of the type you are targeting for your
-application, you can use emulator options such as <code>-dpi</code>,
-<code>-device</code>, <code>-scale</code>, <code>-netspeed</code>,
-<code>-netdelay</code>, <code>-cpu-delay</code> and others to model the
-emulator's screen, network performance, and other attributes to match the target
-device to the greatest extent possible. You can then test your application's UI
-and performance. However, we strongly recommend that you test your application
-on an actual target device before publishing it. </li>
-
+ <li>Review the contents of your <code>jni/</code>, <code>lib/</code>, and <code>src/</code>
+ directories. The <code>jni/</code> directory should contain only source files associated with the
+ <a href="{@docRoot}sdk/ndk/index.html">Android NDK</a>, such as
+ <code>.c</code>, <code>.cpp</code>, <code>.h</code>, and <code>.mk</code> files. The
+ <code>lib/</code> directory should contain only third-party library files or private library
+ files, including prebuilt shared and static libraries (for example, <code>.so</code> files). The
+ <code>src/</code> directory should contain only the source files for your application
+ (<code>.java</code> and <code>.aidl</code> files). The <code>src/</code> directory should not
+ contain any <code>.jar</code> files.</li>
+ <li>Check your project for private or proprietary data files that your application does not use
+ and remove them. For example, look in your project's <code>res/</code> directory for old
+ drawable files, layout files, and values files that you are no longer using and delete them.</li>
+ <li>Check your <code>lib/</code> directory for test libraries and remove them if they are no
+ longer being used by your application.</li>
+ <li>Review the contents of your <code>assets/</code> directory and your <code>res/raw/</code>
+ directory for raw asset files and static files that you need to update or remove prior to
+ release.</li>
</ul>
-<h3 id="eula">2. Consider adding an End User License Agreement in your
-application</h3>
+<h4>Review and update your manifest settings</h4>
-<p>To protect your person, organization, and intellectual property, you may want
-to provide an End User License Agreement (EULA) with your application.
-
-<h3>3. Consider adding support for Android Market Licensing</h3>
-
-<p>If you are publishing a paid application through Android Market, consider
-adding support for Android Market Licensing. Licensing lets you control access
-to your application based on whether the current user has purchased it.
-Using Android Market Licensing is optional.
-
-<p>For complete information about Android Market Licensing Service and how to
-use it in your application, see <a
-href="{@docRoot}guide/publishing/licensing.html">Licensing Your
-Applications</a>.</p>
-
-<h3 id="iconlabel">4. Specify an icon and label in the application's manifest</h3>
-
-<p>The icon and label that you specify in an application's manifest are
-important because they are displayed to users as your application's icon and
-name. They are displayed on the device's Home screen, as well as in Manage
-Applications, My Downloads, and elsewhere. Additionally, publishing services may
-display the icon and label to users. </p>
-
-<p>To specify an icon and label, you define the attributes
-<code>android:icon</code> and <code>android:label</code> in the
-<code><application></code> element of the manifest. </p>
-
-<p>As regards the design of your icon, you should try to make it match as much
-as possible the style used by the built-in Android applications.</p>
-
-<h3 id="logging">5. Turn off logging and debugging and clean up data/files</h3>
-
-<p>For release, you should make sure that debug facilities are turned off and
-that debug and other unnecessary data/files are removed from your application
-project.</p>
-<ul>
-<li>Remove the <code>android:debuggable="true"</code> attribute from the
-<code><application></code> element of the manifest.</li>
-<li>Remove log files, backup files, and other unnecessary files from the
-application project.</li>
-<li>Check for private or proprietary data and remove it as necessary.</li>
-<li>Deactivate any calls to {@link android.util.Log} methods in the source
-code.</li>
-</ul>
-
-<h2 id="finalcompile">Before you do the final compile of your application</h2>
-
-<h3 id="versionapp">6. Version your application</h3>
-
-<p>Before you compile your application, you must make sure that you have defined
-a version number for your application, specifying an appropriate value for both
-the <code>android:versionCode</code> and <code>android:versionName</code>
-attributes of the <code><manifest></code> element in the application's
-manifest file. Carefully consider your version numbering plans in the context of
-your overall application upgrade strategy. </p>
-
-<p>If you have previously released a version of your application, you must make
-sure to increment the version number of the current application. You must
-increment both the <code>android:versionCode</code> and
-<code>android:versionName</code> attributes of the <code><manifest></code>
-element in the application's manifest file, using appropriate values. </p>
-
-<p>For detailed information about how to define version information for your
-application, see <a href="{@docRoot}guide/publishing/versioning.html">Versioning
-Your Applications</a>.</p>
-
-<h3 id="cryptokey">7. Obtain a suitable cryptographic key</h3>
-
-<p>If you have read and followed all of the preparation steps up to this point,
-your application is compiled and ready for signing. Inside the .apk, the
-application is properly versioned, and you've cleaned out extra files and
-private data, as described above. </p>
-
-<p>Before you sign your application, you need to make sure that you have a
-suitable private key. For complete information about how to obtain (or generate)
-a private key, see <a href="{@docRoot}guide/publishing/app-signing.html#cert">
-Obtaining a Suitable Private Key</a>.</p>
-
-<p>Once you have obtained (or generated) a suitable private key, you will use it
-to:</p>
+<p>Verify that the following manifest items are set correctly:</p>
<ul>
-<li>Register for a Maps API Key (see below), if your application uses MapView
-elements.</li>
-<li>Sign your application for release, later in the preparation process</li>
+ <li><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html">
+ <uses-permission></a> element
+ <p>You should specify only those permissions that are relevant and required for your application.</p>
+ </li>
+ <li><code>android:icon</code> and <code>android:label</code> attributes
+ <p>You must specify values for these attributes, which are located in the
+ <a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a>
+ element.</p>
+ </li>
+ <li><code>android:versionCode</code> and <code>android:versionName</code> attributes.
+ <p>We recommend that you specify values for these attributes, which are located in the
+ <a href="{@docRoot}guide/topics/manifest/manifest-element.html"><manifest></a>
+ element. For more information see
+ <a href="{@docRoot}guide/publishing/versioning.html">Versioning your Application</a>.</p>
+ </li>
</ul>
-<h3 id="mapsApiKey">8. Register for a Maps API Key, if your application is using
-MapView elements</h3>
+<p>There are several additional manifest elements that you can set if you are releasing your
+application on Android Market. For example, the <code>android:minSdkVersion</code> and
+<code>android:targetSdkVersion</code> attributes, which are located in the <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html"> <uses-sdk></a> element. For more
+information about these and other Android Market settings, see <a
+href="{@docRoot}/guide//appendix/market-filters.html">Market Filters</a>.</p>
-<div class="sidebox-wrapper">
-<div class="sidebox"><p>
-For complete information about getting a Maps API Key, see <a
-href="http://code.google.com/android/add-ons/google-apis/mapkey.html">
-Obtaining a Maps API Key</a>.</p>
-</div>
-</div>
+<h4>Address compatibility issues</h4>
-<p>If your application uses one or more Mapview elements, you will need to
-register your application with the Google
-Maps service and obtain a Maps API Key, before your MapView(s) will be able to
-retrieve data from Google Maps. To do so, you supply an MD5 fingerprint of your
-signer certificate to the Maps service. </p>
+<p>Android provides several tools and techniques to make your application compatible with a wide
+range of devices. To make your application available to the largest number of users, consider
+doing the following:</p>
-<p>During development, you can get a temporary Maps API Key by registering the
-debug key generated by the SDK tools. However, before publishing your
-application, you must register for a new Maps API Key that is based on your
-private key. </p>
+<ul>
+ <li><strong>Add support for multiple screen configurations</strong>
+ <p>Make sure you meet the
+ <a href="{@docRoot}guide/practices/screens_support.html#screen-independence">
+ best practices for supporting multiple screens</a>. By supporting multiple screen configurations
+ you can create an application that functions properly and looks good on any of the screen sizes
+ supported by Android.</p>
+ </li>
+ <li><strong>Optimize your application for Android 3.0 devices.</strong>
+ <p>If your application is designed for devices older than Android 3.0, make it compatible
+ with Android 3.0 devices by following the guidelines and best practices described in
+ <a href="{@docRoot}guide/practices/optimizing-for-3.0.html">Optimizing Apps for Android 3.0
+ </a>.</p>
+ </li>
+ <li><strong>Consider using the Support Library</strong>
+ <p>If your application is designed for devices running Android 3.x, make your application
+ compatible with older versions of Android by adding the
+ <a href="{@docRoot}sdk/compatibility-library.html">Support Library</a> to your
+ application project. The Support Library provides static support libraries that you can add to
+ your Android application, which enables you to use APIs that are either not available on
+ older platform versions or use utility APIs that are not part of the framework APIs.</p>
+ </li>
+</ul>
-<p>If your application uses MapView elements, the important points to understand
-are:</p>
+<h4>Update URLs for servers and services</h4>
-<ol>
-<li>You <em>must</em> obtain the Maps API Key before you compile your
-application for release, because you must add the Key to a special attribute in
-each MapView element — <code>android:apiKey</code> — in your
-application's layout files. If you are instantiating MapView objects directly
-from code, you must pass the Maps API Key as a parameter in the constructor.
-</li>
-<li>The Maps API Key referenced by your application's MapView elements must be
-registered (in Google Maps) to the certificate used to sign the application.
-This is particularly important when publishing your application — your
-MapView elements must reference a Key that is registered to the release
-certificate that you will use to sign your application. </li>
-<li>If you previously got a temporary Maps API Key by registering the debug
-certificate generated by the SDK tools, you <em>must</em> remember to obtain a
-new Maps API Key by registering your release certificate. You must then remember
-to change the MapView elements to reference the new Key, rather than the Key
-associated with the debug certificate. If you do not do so, your MapView
-elements will not have permission to download Maps data. </li>
-<li>If you change the private key that you will use to sign your application,
-you <em>must</em> remember to obtain a new Maps API Key from the Google Maps
-service. If you do not get a new Maps API Key and apply it to all MapView
-elements, any MapView elements referencing the old Key will not have permission
-to download Maps data. </li>
-</ol>
+<p>If your application accesses remote servers or services, make sure you are using the production
+URL or path for the server or service and not a test URL or path.</p>
-<h2 id="compile">Compile your application</h2>
+<h4>Implement Licensing (if you are releasing on Android Market)</h4>
-<p>When you've prepared your application as described in the previous sections,
-you can compile your application for release.</p>
+<p>If you are releasing a paid application through Android Market, consider adding support for
+Android Market Licensing. Licensing lets you control access to your application based on whether the
+current user has purchased it. Using Android Market Licensing is optional even if you are
+releasing your app through Android Market.</p>
+<p>For more information about Android Market Licensing Service and how to use it in your
+application, see <a href="{@docRoot}guide/publishing/licensing.html">Application Licensing</a>.</p>
-<h2 id="post-compile">After you compile your application</h2>
+<h2 id="publishing-build">Building Your Application for Release</h2>
-<h3 id="signapp">9. Sign your application</h3>
+<p>After you finish configuring your application you can build it into a release-ready
+<code>.apk</code> fle that is signed and optimized. The JDK includes the tools for signing the
+<code>.apk</code> file (Keytool and Jarsigner); the Android SDK includes the tools for compiling and
+optimizing the <code>.apk</code> file. If you are using Eclipse with the ADT plugin or you are using
+the Ant build script from the command line, you can automate the entire build process.</p>
-<p>Sign your application using your private key and then
-align it with the {@code zipalign} tool. Signing your application
-correctly is critically important. Please see
-<a href="{@docRoot}guide/publishing/app-signing.html">Signing Your
-Applications</a> for complete information. </p>
+<h3>Building with Eclipse</h3>
-<h3 id="testapp">10. Test your compiled and signed application</h3>
+<p>You can use the Eclipse Export Wizard to build a release-ready <code>.apk</code> file that is
+signed with your private key and optimized. To learn how to run the Export Wizard, see
+<a href="{@docRoot}guide/publishing/app-signing.html#ExportWizard">Compile and sign with Eclipse
+ADT</a>. The Export Wizard compiles your application for release, signs your application with your
+private key, and optimizes your application with the zipalign tool. The Export Wizard should run
+successfully if you have run or debugged your application from Eclipse and you have no errors in
+your application (see <a href="{@docRoot}guide/developing/building/building-eclipse.html">Building
+and Running from Eclipse with ADT</a> for more information.</p>
-<p>Before you release your compiled application, you should thoroughly test it
-on the target mobile device (and target network, if possible). In particular,
-you should make sure that any MapView elements in your UI are receiving maps
-data properly. If they are not, go back to <a href="#mapsApiKey">Register for a
-Maps API Key</a> and correct the problem. You should also ensure that the
-application works correctly with any server-side services and data that you are
-providing or are relying on and that the application handles any authentication
-requirements correctly. </p>
+<p>The Export Wizard assumes that you have a <a href="#billing-keys">certificate and private key</a>
+suitable for signing your application. If you do not have a suitable certificate and private key,
+the Export Wizard will help you generate one (see
+<a href="{@docRoot}guide/publishing/app-signing.html">Signing Your Applications</a> for more
+information about the signing process and signing guidelines.</p>
-<p>After testing, you are now ready to publish your application to mobile device
-users.</p>
+<h3>Building with Ant</h3>
+
+<p>You can use the Ant build script (included in the Android SDK) to build a release-ready
+<code>.apk</code> file that is signed with your private key and optimized. To learn how to do this,
+see <a href="{@docRoot}guide/developing/building/building-cmdline.html#ReleaseMode">Building in
+Release Mode</a>. This build method assumes you have a <a href="#billing-keys">certificate and
+private key</a> suitable for signing your application. If you do not have a suitable certificate and
+private key, the Export Wizard will help you generate one (see
+<a href="{@docRoot}guide/publishing/app-signing.html">Signing Your Applications</a> for more
+information about the signing process and signing guidelines.</p>
+
+<h2 id="publishing-resources">Preparing External Servers and Resources</h2>
+
+<p>If your application relies on a remote server, make sure the server is secure and that it is
+configured for production use. This is particularly important if you are implementing <a
+href="{@docRoot}guide/market/billing/index.html">in-app billing</a> in your application and you are
+performing the signature verification step on a remote server.</p>
+
+<p>Also, if your application fetches content from a remote server or a real-time service (such as a
+content feed), be sure the content you are providing is up to date and production-ready.</p>
+
+<h2 id="publishing-test">Testing Your Application for Release</h2>
+
+<p>Testing the release version of your application helps ensure that your application runs properly
+under realistic device and network conditions. Ideally, you should test your application on at least
+one handset-sized device and one tablet-sized device to verify that your user interface elements are
+sized correctly and that your application's performance and battery efficiency are acceptable.</p>
+
+<p>As a starting point for testing, see
+<a href="{@docRoot}guide/topics/testing/what_to_test.html">What to Test</a>. This article provides
+a summary of common Android situations that you should consider when you are testing. When you are
+done testing and you are satisfied that the release version of your application
+behaves correctly, you can release your application to users. For more information, see
+<a href="{@docRoot}guide/publishing/publishing_overview.html#publishing-release">Releasing Your
+Application to Users</a>. If you are publishing your application on Android Market, see
+<a href="{@docRoot}guide/publishing/publishing.html">Publishing on Android Market</a>.</p>
diff --git a/docs/html/guide/publishing/publishing_overview.jd b/docs/html/guide/publishing/publishing_overview.jd
new file mode 100755
index 0000000..a0f6ae3
--- /dev/null
+++ b/docs/html/guide/publishing/publishing_overview.jd
@@ -0,0 +1,236 @@
+page.title=Publishing Overview
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+ <h2>Quickview</h2>
+ <ul>
+ <li>Learn how to publish Android apps.</li>
+ <li>Find out how to prepare apps for release.</li>
+ <li>Learn how to release apps to users.</li>
+ </ul>
+ <h2>In this document</h2>
+ <ol>
+ <li><a href="#publishing-prepare">Preparing Your Application for Release</a></li>
+ <li><a href="#publishing-release">Releasing Your Application to Users</a>
+ <ol>
+ <li><a href="#publishing-market">Releasing on Android Market</a></li>
+ <li><a href="#publishing-website">Releasing on your own website</a></li>
+ <li><a href="#publishing-email">Releasing through email</a></li>
+ </ol>
+ </ol>
+ <h2>See also</h2>
+ <ol>
+ <li><a href="{@docRoot}guide/publishing/publishing_preparing.html">Preparing for
+ Release</a></li>
+ <li><a href="{@docRoot}guide/publishing/publishing.html">Publishing on Android Market</a></li>
+ </ol>
+</div>
+</div>
+
+<p>Publishing is the process that makes your Android applications available to users. When you
+publish an Android application you perform two main tasks:</p>
+
+<ul>
+ <li>You prepare the application for release.
+ <p>During the preparation step you build a release version of your application, which users can
+ download and install on their Android-powered devices.</p>
+ </li>
+ <li>You release the application to users.
+ <p>During the release step you publicize, sell, and distribute the release version of your
+ application to users.</p>
+ </li>
+</ul>
+
+<p>Usually, you release your application through an application marketplace, such as Android Market.
+However, you can also release applications by sending them directly to users or by letting users
+download them from your own website.</p>
+
+<p>Figure 1 shows how the publishing process fits into the overall Android <a
+href="{@docRoot}guide/developing/index.html">application development process</a>.
+The publishing process is typically performed after you finish testing your application in a debug
+environment. Also, as a best practice, your application should meet all of your release criteria for
+functionality, performance, and stability before you begin the publishing process.</p>
+
+<img src="{@docRoot}images/publishing/publishing_overview.png" alt="Shows where the publishing
+ process fits into the overall development process" height="86" id="figure1" />
+<p class="img-caption">
+ <strong>Figure 1.</strong> Publishing is the last phase of the Android <a
+href="{@docRoot}guide/developing/index.html">application development process</a>.
+</p>
+
+<h2 id="publishing-prepare">Preparing Your Application for Release</h2>
+
+<p>Preparing your application for release is a multi-step process that involves the following
+tasks:</p>
+
+<ul>
+
+ <li>Configuring your application for release.
+ <p>At a minimum you need to remove {@link android.util.Log} calls and remove the
+ <a href="{@docRoot}guide/topics/manifest/application-element.html#debug">android:debuggable</a>
+ attribute from your manifest file. You should also provide values for the
+ <code>android:versionCode</code> and <code>android:versionName</code> attributes, which are
+ located in the
+ <a href="{@docRoot}guide/topics/manifest/manifest-element.html"><manifest></a>
+ element. You may also have to configure several other settings to meet Android Market
+ requirements or accomodate whatever method you're using to release your application.</p>
+ </li>
+ <li>Building and signing a release version of your application.
+ <p>The Android Development Tools (ADT) plugin and the Ant build script that are provided
+ with the Android SDK tools provide everything you need to build and sign a release version of
+ your application.</p>
+ </li>
+ <li>Testing the release version of your application.
+ <p>Before you distribute your application, you should thoroughly test the release version on at
+ least one target handset device and one target tablet device.</p>
+ </li>
+ <li>Updating application resources for release.
+ <p>You need to be sure that all application resources such as multimedia files and graphics
+ are updated and included with your application or staged on the proper production servers.</p>
+ </li>
+ <li>Preparing remote servers and services that your application depends on.
+ <p>If your application depends on external servers or services, you need to be sure they
+ are secure and production ready.</p>
+ </li>
+</ul>
+
+<p>You may have to perform several other tasks as part of the preparation process. For example, you
+will need to get a private key for signing your application, and you may need to get a Maps API
+release key if you are using the <a
+href="http://code.google.com/android/add-ons/google-apis/maps-overview.html">Google Maps external
+library</a>. You will also need to create an icon for your application, and you may want to prepare
+an End User License Agreement (EULA) to protect your person, organization, and intellectual
+property.</p>
+
+<p>When you are finished preparing your application for release you will have a signed
+<code>.apk</code> file that you can distribute to users.</p>
+
+<p>To learn how to prepare your application for release, see <a
+href="{@docRoot}guide/publishing/preparing.html">Preparing for Release</a> in the Dev Guide. This
+topic provides step-by-step instructions for configuring and building a release version of your
+application.</p>
+
+<h2 id="publishing-release">Releasing Your Application to Users</h2>
+
+<p>You can release your Android applications several ways. Usually, you release applications
+through an application marketplace, such as Android Market, but you can also release applications
+on your own website or by sending an application directly to a user. Android Market is the
+recommended marketplace for Android applications and is particularly useful if you want to
+distribute your applications to a large global audience. The other two release methods—server
+distribution and email distribution—are useful if you are releasing an application to a small
+group of users (for example, a work group in an enterprise environment), or if you do not want to
+make your application available to the general public.</p>
+
+<h3 id="publishing-market">Releasing Your Applications on Android Market</h3>
+
+<p>Android Market is a robust publishing platform that helps you publicize, sell, and distribute
+your Android applications to users around the world. When you release your applications through
+Android Market you have access to a suite of developer tools that let you analyze your sales,
+identify market trends, and control who your applications are being distributed to. You also have
+access to several revenue-enhancing features that are not available anywhere else, such as <a
+href="{@docRoot}guide/market/billing/index.html">in-app billing</a> and <a
+href="{@docRoot}guide/publishing/licensing.html">application licensing</a>. This rich array of tools
+and features, coupled with numerous end-user community features, makes Android Market the premier
+marketplace for selling and buying Android applications.</p>
+
+<p>Releasing your application on Android Market is a simple process that involves four basic
+ steps:</p>
+
+<div class="figure" style="width:275px">
+ <img src="{@docRoot}images/publishing/publishing_unknown_sources.png"
+ alt="Screenshot showing the graphical user interface element that allows unknown sources
+ to be installed" />
+ <p class="img-caption">
+ <strong>Figure 2.</strong> The <strong>Unknown sources</strong> setting lets you install
+ applications that are not published on Android Market .
+ </p>
+</div>
+
+<ul>
+ <li>Preparing promotional materials.
+ <p>To fully leverage the marketing and publicity capabilities of Android Market, you need to
+ create promotional materials for your application, such as screenshots, videos, graphics, and
+ promotional text.</p>
+ </li>
+ <li>Planning publishing options.
+ <p>Android Market lets you target your application to a worldwide pool of users and devices.
+ Using various Android Market tools, you can choose the countries you want to reach, the
+ price you want to charge in each country, and the devices you want to target. You can also
+ use Android Market's filtering settings to target specific device features and capabilities.</p>
+ </li>
+ <li>Configuring publishing options and uploading assets.
+ <p>After you create your promotional materials and determine which publishing options are
+ suitable for your application, you can use the Android Market developer console to configure
+ those options and upload the promotional materials. You can also use the developer console to
+ upload your application as a draft (unpublished) application, which lets you do final
+ testing before you publish it for final release.</p>
+ </li>
+ <li>Publishing the release version of your application.
+ <p>When you are satisfied that your publishing settings are correctly configured and your
+ uploaded application is ready to be released to the public, you can simply click
+ <strong>Publish</strong > in the developer console and within minutes your application will be
+ live and available for download around the world.</p>
+ </li>
+</ul>
+
+<p>For information about Android Market, see <a
+href="{@docRoot}guide/publishing/publishing.html#market">Publishing on Android Market</a>. This
+topic provides an introduction to Android Market features and provides a step-by-step guide for
+distributing your applications on Android Market.</p>
+
+<h3 id="publishing-website">Releasing your application on your own website</h3>
+
+<p>If you do not want to release your application on an application marketplace like Android Market,
+you can release your application by making it available for download on your own website or server.
+To do this, you must first prepare your application for release (that is, you must build it for
+release and sign it). Then all you need to do is host the release-ready application on your website
+and provide a download link for the application. When users browse to your website with their
+Android-powered devices and download your application, the Android system will automatically start
+installing the application on the device. However, the installation process will start automatically
+only if the user has configured their device to allow the installation of non-Android Market
+applications.</p>
+
+<div class="figure" style="width:275px">
+ <img src="{@docRoot}images/publishing/publishing_via_email.png"
+ alt="Screenshot showing the graphical user interface users see when you send them an app"
+ height="453" />
+ <p class="img-caption">
+ <strong>Figure 3.</strong> Users can simply click <strong>Install</strong> when you send them
+ an application via email.
+ </p>
+</div>
+
+<p>By default, Android-powered devices allow users to install applications only if the applications
+have been downloaded from Android Market. To allow the installation of applications from other
+sources, users need to enable the <strong>Unknown sources</strong> setting on their devices, and
+they need to make this configuration change before they download your application to their
+device (see figure 2).</p>
+
+<p class="note"><strong>Note:</strong> Some network providers do not allow users to install
+applications from unknown sources.</p>
+
+<p>Although it is relatively easy to release your application on your own website, it can be
+inefficient and cumbersome. For example, if you want to monetize your application you will
+have to process and track all financial transactions yourself and you will not be able to use
+Android Market's in-app billing feature to sell in-app products. In addition, you will not be
+able to use the licensing feature to help prevent unauthorized installation and use of your
+application.</p>
+
+<h3 id="publishing-email">Releasing your application through email</h3>
+
+<p>The easiest and quickest way to release your application is to send it to a user through
+email. To do this, you prepare your application for release and then attach it to an email
+and send it to a user. When the user opens your email message on their Android-powered device
+the Android system will recognize the <code>.apk</code> and display an <strong>Install Now</strong>
+button in the email message (see figure 3). Users can install your application by touching the
+button.</p>
+
+<p class="note"><strong>Note:</strong> The <strong>Install Now</strong> button appears only if a
+user has configured their device to allow the installation of non-Android Market applications and
+they open your email with the native Gmail application.</p>
+
+<p>Releasing applications through email is convenient if you are sending your application to
+only a few trusted users, but it provides few protections from piracy and unauthorized
+distribution; that is, anyone you send your application to can simply forward it to someone else.
+else.
\ No newline at end of file
diff --git a/docs/html/guide/publishing/versioning.jd b/docs/html/guide/publishing/versioning.jd
index 01bfba8..79ebf96 100644
--- a/docs/html/guide/publishing/versioning.jd
+++ b/docs/html/guide/publishing/versioning.jd
@@ -32,8 +32,8 @@
</div>
</div>
-<p>Versioning is a critical component of your application upgrade/maintenance
-strategy. </p>
+<p>Versioning is a critical component of your application upgrade and maintenance
+strategy. Versioning is important because:</p>
<ul>
<li>Users need to have specific information about the application version that
@@ -48,15 +48,14 @@
determine compatibility and establish upgrade/downgrade relationships.</li>
</ul>
-<p>The Android system itself <em>does not ever</em> check the application version
-information for an application, such as to enforce restrictions on upgrades,
-compatibility, and so on. Instead, only users or applications themselves are
-responsible for enforcing any version restrictions for applications themselves. </p>
-
-<p>The Android system <em>does</em> check any system version compatibility expressed
-by an application in its manifest, in the <code>minSdkVersion</code> attribute. This
-allows an application to specify the minimum system API with which is compatible.
-For more information see <a href="#minsdkversion">Specifying Minimum System API Version</a>.
+<p>The Android system does not use app version information to enforce
+restrictions on upgrades, downgrades, or compatibility of third-party apps. Instead, you (the
+developer) are responsible for enforcing version restrictions within your application or by
+informing users of the version restrictions and limitations. The Android system does, however,
+enforce system version compatibility as expressed by the <code>minSdkVersion</code> attribute in the
+manifest. This attribute allows an application to specify the minimum system API with which it is
+compatible. For more information see <a href="#minsdkversion">Specifying Minimum System API
+Version</a>.</p>
<h2 id="appversioning">Setting Application Version</h2>
<p>To define the version information for your application, you set attributes in
@@ -65,7 +64,7 @@
<ul>
<li><code>android:versionCode</code> — An integer value that represents
-the version of the application code, relative to other versions.
+the version of the application code, relative to other versions.
<p>The value is an integer so that other applications can programmatically
evaluate it, for example to check an upgrade or downgrade relationship. You can
@@ -83,7 +82,7 @@
services should not display this version value to users.</p>
</li>
<li><code>android:versionName</code> — A string value that represents the
-release version of the application code, as it should be shown to users.
+release version of the application code, as it should be shown to users.
<p>The value is a string so that you can describe the application version as a
<major>.<minor>.<point> string, or as any other type of
absolute or relative version identifier. </p>
@@ -121,20 +120,20 @@
<p>The Android framework provides an API to let applications query the system
for version information about your application. To obtain version information,
-applications use the
-{@link android.content.pm.PackageManager#getPackageInfo(java.lang.String, int)}
+applications use the
+{@link android.content.pm.PackageManager#getPackageInfo(java.lang.String, int)}
method of {@link android.content.pm.PackageManager PackageManager}. </p>
<h2 id="minsdkversion">Specifying Your Application's System API Requirements</h2>
<p>If your application requires a specific minimum version of the Android
platform, or is designed only to support a certain range of Android platform
-versions, you can specify those version requirements as API Level identifiers
-in the application's manifest file. Doing so ensures that your
+versions, you can specify those version requirements as API Level identifiers
+in the application's manifest file. Doing so ensures that your
application can only be installed on devices that
are running a compatible version of the Android system. </p>
-<p>To specify API Level requirements, add a <code><uses-sdk></code>
+<p>To specify API Level requirements, add a <code><uses-sdk></code>
element in the application's manifest, with one or more of these attributes: </p>
<ul>
@@ -144,10 +143,10 @@
<li><code>android:targetSdkVersion</code> — Specifies the API Level
on which the application is designed to run. In some cases, this allows the
application to use manifest elements or behaviors defined in the target
-API Level, rather than being restricted to using only those defined
+API Level, rather than being restricted to using only those defined
for the minimum API Level.</li>
<li><code>android:maxSdkVersion</code> — The maximum version
-of the Android platform on which the application is designed to run,
+of the Android platform on which the application is designed to run,
specified by the platform's API Level identifier. <strong>Important:</strong> Please read the <a
href="{@docRoot}guide/topics/manifest/uses-sdk-element.html"><code><uses-sdk></code></a>
documentation before using this attribute. </li>
diff --git a/docs/html/guide/topics/fundamentals/fragments.jd b/docs/html/guide/topics/fundamentals/fragments.jd
index d34a798..d6ba646 100644
--- a/docs/html/guide/topics/fundamentals/fragments.jd
+++ b/docs/html/guide/topics/fundamentals/fragments.jd
@@ -11,7 +11,7 @@
<li>Fragments decompose application functionality and UI into reusable modules</li>
<li>Add multiple fragments to a screen to avoid switching activities</li>
<li>Fragments have their own lifecycle, state, and back stack</li>
- <li>Fragments require API Level "Honeycomb" or greater</li>
+ <li>Fragments require API Level 11 or greater</li>
</ul>
<h2>In this document</h2>
@@ -49,8 +49,16 @@
<h2>Related samples</h2>
<ol>
<li><a
+href="{@docRoot}resources/samples/HoneycombGallery/index.html">Honeycomb Gallery</a></li>
+ <li><a
href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/index.html#Fragment">ApiDemos</a></li>
</ol>
+
+ <h2>See also</h2>
+ <ol>
+ <li><a href="{@docRoot}guide/practices/tablets-and-handsets.html">Supporting Tablets
+and Handsets</a></li>
+ </ol>
</div>
</div>
@@ -58,7 +66,8 @@
{@link android.app.Activity}. You can combine multiple fragments in a single activity to build a
multi-pane UI and reuse a fragment in multiple activities. You can think of a fragment as a
modular section of an activity, which has its own lifecycle, receives its own input events, and
-which you can add or remove while the activity is running.</p>
+which you can add or remove while the activity is running (sort of like a "sub activity" that
+you can reuse in different activities).</p>
<p>A fragment must always be embedded in an activity and the fragment's lifecycle is directly
affected by the host activity's lifecycle. For example, when the activity is paused, so are all
@@ -69,14 +78,16 @@
fragment transaction, you can also add it to a back stack that's managed by the
activity—each back stack entry in the activity is a record of the fragment transaction that
occurred. The back stack allows the user to reverse a fragment transaction (navigate backwards),
-by pressing the BACK key.</p>
+by pressing the BACK button.</p>
<p>When you add a fragment as a part of your activity layout, it lives in a {@link
-android.view.ViewGroup} inside the activity's view hierarchy and defines its own layout of views.
+android.view.ViewGroup} inside the activity's view hierarchy and the fragment defines its own view
+layout.
You can insert a fragment into your activity layout by declaring the fragment in the activity's
layout file, as a {@code <fragment>} element, or from your application code by adding it to an
existing {@link android.view.ViewGroup}. However, a fragment is not required to be a part of the
-activity layout; you may also use a fragment as an invisible worker for the activity.</p>
+activity layout; you may also use a fragment without its own UI as an invisible worker for the
+activity.</p>
<p>This document describes how to build your application to use fragments, including
how fragments can maintain their state when added to the activity's back stack, share
@@ -86,9 +97,9 @@
<h2 id="Design">Design Philosophy</h2>
-<p>Android introduced fragments in Android 3.0 (API Level "Honeycomb"), primarily to support more
+<p>Android introduced fragments in Android 3.0 (API level 11), primarily to support more
dynamic and flexible UI designs on large screens, such as tablets. Because a
-tablet's screen is much larger than that of a mobile phone, there's more room to combine and
+tablet's screen is much larger than that of a handset, there's more room to combine and
interchange UI components. Fragments allow such designs without the need for you to manage complex
changes to the view hierarchy. By dividing the layout of an activity into fragments, you become able
to modify the activity's appearance at runtime and preserve those changes in a back stack
@@ -99,28 +110,34 @@
activity, side by side, and each fragment has its own set of lifecycle callback methods and handle
their own user input events. Thus, instead of using one activity to select an article and another
activity to read the article, the user can select an article and read it all within the same
-activity, as illustrated in figure 1.</p>
+activity, as illustrated in the tablet layout in figure 1.</p>
+
+<p>You should design each fragment as a modular and reusable activity component. That is, because
+each fragment defines its own layout and its own behavior with its own lifecycle callbacks, you can
+include one fragment in multiple activities, so you should design for reuse and avoid directly
+manipulating one fragment from another fragment. This is especially important because a modular
+fragment allows you to change your fragment combinations for different screen sizes. When designing
+your application to support both tablets and handsets, you can reuse your fragments in different
+layout configurations to optimize the user experience based on the available screen space. For
+example, on a handset, it might be necessary to separate fragments to provide a single-pane UI when
+more than one cannot fit within the same activity.</p>
<img src="{@docRoot}images/fundamentals/fragments.png" alt="" />
-<p class="img-caption"><strong>Figure 1.</strong> An example of how two UI modules that are
-typically separated into two activities can be combined into one activity, using fragments.</p>
-
-
-<p>A fragment should be a modular and reusable component in your application. That is, because the
-fragment defines its own layout and its own behavior using its own lifecycle callbacks, you
-can include one fragment in multiple activities. This is especially important because it allows you
-to adapt your user experience to different screen sizes. For instance, you might include multiple
-fragments in an activity only when the screen size is sufficiently large, and, when it is not,
-launch separate activities that use different fragments.</p>
+<p class="img-caption"><strong>Figure 1.</strong> An example of how two UI modules defined by
+fragments can be combined into one activity for a tablet design, but separated for a
+handset design.</p>
<p>For example—to continue with the news application example—the application can embed
-two
-fragments in <em>Activity A</em>, when running on an extra large screen (a tablet, for example).
-However, on a normal-sized screen (a phone, for example),
-there would not be enough room for both fragments, so <em>Activity A</em> includes only the fragment for
-the list of articles, and when the user selects an article, it starts <em>Activity B</em>, which
-includes the fragment to read the article. Thus, the application supports both design patterns
-suggested in figure 1.</p>
+two fragments in <em>Activity A</em>, when running on a tablet-sized device. However, on a
+handset-sized screen, there's not be enough room for both fragments, so <em>Activity A</em> includes
+only the fragment for the list of articles, and when the user selects an article, it starts
+<em>Activity B</em>, which includes the second fragment to read the article. Thus, the application
+supports both tablets and handsets by reusing fragments in different combinations, as illustrated in
+figure 1.</p>
+
+<p>For more information about designing your application with different fragment combinations for
+different screen configurations, see the guide to <a
+href="{@docRoot}guide/practices/tablets-and-handsets.html">Supporting Tablets and Handsets</a>.</p>
diff --git a/docs/html/images/developing/developing_overview.png b/docs/html/images/developing/developing_overview.png
new file mode 100755
index 0000000..ab09407
--- /dev/null
+++ b/docs/html/images/developing/developing_overview.png
Binary files differ
diff --git a/docs/html/images/fundamentals/fragments.graffle b/docs/html/images/fundamentals/fragments.graffle
new file mode 100755
index 0000000..c14282b
--- /dev/null
+++ b/docs/html/images/fundamentals/fragments.graffle
@@ -0,0 +1,2549 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>ActiveLayerIndex</key>
+ <integer>0</integer>
+ <key>ApplicationVersion</key>
+ <array>
+ <string>com.omnigroup.OmniGrafflePro</string>
+ <string>138.9.0.117994</string>
+ </array>
+ <key>AutoAdjust</key>
+ <true/>
+ <key>BackgroundGraphic</key>
+ <dict>
+ <key>Bounds</key>
+ <string>{{0, 0}, {576, 733}}</string>
+ <key>Class</key>
+ <string>SolidGraphic</string>
+ <key>FontInfo</key>
+ <dict>
+ <key>Font</key>
+ <string>Helvetica</string>
+ <key>Size</key>
+ <real>12</real>
+ </dict>
+ <key>ID</key>
+ <integer>2</integer>
+ <key>Style</key>
+ <dict>
+ <key>shadow</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ </dict>
+ </dict>
+ <key>CanvasOrigin</key>
+ <string>{0, 0}</string>
+ <key>ColumnAlign</key>
+ <integer>1</integer>
+ <key>ColumnSpacing</key>
+ <real>36</real>
+ <key>CreationDate</key>
+ <string>2011-01-11 11:58:30 -0800</string>
+ <key>Creator</key>
+ <string>Scott Main</string>
+ <key>DisplayScale</key>
+ <string>1 0/72 in = 1.0000 in</string>
+ <key>FileType</key>
+ <string>flat</string>
+ <key>GraphDocumentVersion</key>
+ <integer>6</integer>
+ <key>GraphicsList</key>
+ <array>
+ <dict>
+ <key>Bounds</key>
+ <string>{{381.839, 143.614}, {103, 38}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FitText</key>
+ <string>YES</string>
+ <key>Flow</key>
+ <string>Resize</string>
+ <key>FontInfo</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>a</key>
+ <string>0.65</string>
+ <key>w</key>
+ <string>0</string>
+ </dict>
+ <key>Font</key>
+ <string>DroidSans</string>
+ <key>Size</key>
+ <real>10</real>
+ </dict>
+ <key>ID</key>
+ <integer>199</integer>
+ <key>Line</key>
+ <dict>
+ <key>ID</key>
+ <integer>198</integer>
+ <key>Position</key>
+ <real>0.49348831176757812</real>
+ <key>RotationType</key>
+ <integer>0</integer>
+ </dict>
+ <key>Magnets</key>
+ <array>
+ <string>{0, 1}</string>
+ <string>{0, -1}</string>
+ <string>{1, 0}</string>
+ <string>{-1, 0}</string>
+ </array>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>shadow</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>RTFD</key>
+ <data>
+ BAtzdHJlYW10eXBlZIHoA4QBQISEhBJOU0F0dHJpYnV0
+ ZWRTdHJpbmcAhIQITlNPYmplY3QAhZKEhIQITlNTdHJp
+ bmcBlIQBKyNTZWxlY3RpbmcgYW4gaXRlbQpzdGFydHMg
+ QWN0aXZpdHkgQoaEAmlJASOShISEDE5TRGljdGlvbmFy
+ eQCUhAFpA5KElpYQTlNQYXJhZ3JhcGhTdHlsZYaShISE
+ EE5TUGFyYWdyYXBoU3R5bGUAlIQEQ0NAUwIAhISEB05T
+ QXJyYXkAlJkMkoSEhAlOU1RleHRUYWIAlIQCQ2YAHIaS
+ hJ+eADiGkoSfngBUhpKEn54AcIaShJ+eAIGMAIaShJ+e
+ AIGoAIaShJ+eAIHEAIaShJ+eAIHgAIaShJ+eAIH8AIaS
+ hJ+eAIEYAYaShJ+eAIE0AYaShJ+eAIFQAYaGAIaShJaW
+ B05TQ29sb3KGkoSEhAdOU0NvbG9yAJSEAWMDhAJmZgCD
+ ZmYmP4aShJaWBk5TRm9udIaShISEBk5TRm9udB6UmRyE
+ BVsyOGNdBgAAABQAAAD//kgAZQBsAHYAZQB0AGkAYwBh
+ AIQBZgygAKABoACgAIaGhg==
+ </data>
+ <key>Text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf540
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf2 Selecting an item\
+starts Activity B}</string>
+ </dict>
+ <key>Wrap</key>
+ <string>NO</string>
+ </dict>
+ <dict>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>FontInfo</key>
+ <dict>
+ <key>Font</key>
+ <string>DroidSans</string>
+ <key>Size</key>
+ <real>11</real>
+ </dict>
+ <key>Head</key>
+ <dict>
+ <key>ID</key>
+ <integer>224</integer>
+ <key>Info</key>
+ <integer>2</integer>
+ </dict>
+ <key>ID</key>
+ <integer>198</integer>
+ <key>OrthogonalBarAutomatic</key>
+ <false/>
+ <key>OrthogonalBarPosition</key>
+ <real>4.1290435791015625</real>
+ <key>Points</key>
+ <array>
+ <string>{369.178, 215.343}</string>
+ <string>{423.11, 162.614}</string>
+ <string>{500.499, 215.4}</string>
+ </array>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>a</key>
+ <string>0.7</string>
+ <key>b</key>
+ <string>0</string>
+ <key>g</key>
+ <string>0</string>
+ <key>r</key>
+ <string>0</string>
+ </dict>
+ <key>CornerRadius</key>
+ <real>4</real>
+ <key>HeadArrow</key>
+ <string>FilledArrow</string>
+ <key>LineType</key>
+ <integer>2</integer>
+ <key>TailArrow</key>
+ <string>0</string>
+ </dict>
+ </dict>
+ <key>Tail</key>
+ <dict>
+ <key>ID</key>
+ <integer>213</integer>
+ <key>Info</key>
+ <integer>2</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{82.9116, 142.624}, {119, 38}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FitText</key>
+ <string>YES</string>
+ <key>Flow</key>
+ <string>Resize</string>
+ <key>FontInfo</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>a</key>
+ <string>0.65</string>
+ <key>w</key>
+ <string>0</string>
+ </dict>
+ <key>Font</key>
+ <string>DroidSans</string>
+ <key>Size</key>
+ <real>10</real>
+ </dict>
+ <key>ID</key>
+ <integer>207</integer>
+ <key>Line</key>
+ <dict>
+ <key>ID</key>
+ <integer>206</integer>
+ <key>Position</key>
+ <real>0.4970354437828064</real>
+ <key>RotationType</key>
+ <integer>0</integer>
+ </dict>
+ <key>Magnets</key>
+ <array>
+ <string>{0, 1}</string>
+ <string>{0, -1}</string>
+ <string>{1, 0}</string>
+ <string>{-1, 0}</string>
+ </array>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>shadow</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>RTFD</key>
+ <data>
+ BAtzdHJlYW10eXBlZIHoA4QBQISEhBJOU0F0dHJpYnV0
+ ZWRTdHJpbmcAhIQITlNPYmplY3QAhZKEhIQITlNTdHJp
+ bmcBlIQBKyVTZWxlY3RpbmcgYW4gaXRlbSAKdXBkYXRl
+ cyBGcmFnbWVudCBChoQCaUkBJZKEhIQMTlNEaWN0aW9u
+ YXJ5AJSEAWkDkoSWlhBOU1BhcmFncmFwaFN0eWxlhpKE
+ hIQQTlNQYXJhZ3JhcGhTdHlsZQCUhARDQ0BTAgCEhIQH
+ TlNBcnJheQCUmQyShISECU5TVGV4dFRhYgCUhAJDZgAc
+ hpKEn54AOIaShJ+eAFSGkoSfngBwhpKEn54AgYwAhpKE
+ n54AgagAhpKEn54AgcQAhpKEn54AgeAAhpKEn54AgfwA
+ hpKEn54AgRgBhpKEn54AgTQBhpKEn54AgVABhoYAhpKE
+ lpYHTlNDb2xvcoaShISEB05TQ29sb3IAlIQBYwOEAmZm
+ AINmZiY/hpKElpYGTlNGb250hpKEhIQGTlNGb250HpSZ
+ HIQFWzI4Y10GAAAAFAAAAP/+SABlAGwAdgBlAHQAaQBj
+ AGEAhAFmDKAAoAGgAKAAhoaG
+ </data>
+ <key>Text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf540
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf2 Selecting an item \
+updates Fragment B}</string>
+ </dict>
+ <key>Wrap</key>
+ <string>NO</string>
+ </dict>
+ <dict>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>FontInfo</key>
+ <dict>
+ <key>Font</key>
+ <string>DroidSans</string>
+ <key>Size</key>
+ <real>11</real>
+ </dict>
+ <key>Head</key>
+ <dict>
+ <key>ID</key>
+ <integer>230</integer>
+ <key>Info</key>
+ <integer>4</integer>
+ </dict>
+ <key>ID</key>
+ <integer>206</integer>
+ <key>OrthogonalBarAutomatic</key>
+ <false/>
+ <key>OrthogonalBarPosition</key>
+ <real>4.1290435791015625</real>
+ <key>Points</key>
+ <array>
+ <string>{71.6501, 212.785}</string>
+ <string>{160.191, 161.624}</string>
+ <string>{214.615, 212.785}</string>
+ </array>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>a</key>
+ <string>0.7</string>
+ <key>b</key>
+ <string>0</string>
+ <key>g</key>
+ <string>0</string>
+ <key>r</key>
+ <string>0</string>
+ </dict>
+ <key>CornerRadius</key>
+ <real>4</real>
+ <key>HeadArrow</key>
+ <string>FilledArrow</string>
+ <key>LineType</key>
+ <integer>2</integer>
+ <key>TailArrow</key>
+ <string>0</string>
+ </dict>
+ </dict>
+ <key>Tail</key>
+ <dict>
+ <key>ID</key>
+ <integer>229</integer>
+ <key>Info</key>
+ <integer>2</integer>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{48.4197, 241.159}, {69.6911, 14.0908}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>ID</key>
+ <integer>239</integer>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>fill</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>1</string>
+ <key>g</key>
+ <string>0.874135</string>
+ <key>r</key>
+ <string>0.71718</string>
+ </dict>
+ </dict>
+ <key>shadow</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>1</string>
+ <key>g</key>
+ <string>0.662438</string>
+ <key>r</key>
+ <string>0.464468</string>
+ </dict>
+ </dict>
+ </dict>
+ </dict>
+ <dict>
+ <key>AllowConnections</key>
+ <string>NO</string>
+ <key>Bounds</key>
+ <string>{{131.767, 253.185}, {122.888, 80.6596}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>ID</key>
+ <integer>238</integer>
+ <key>Rotation</key>
+ <real>359.89700317382812</real>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0.727869</string>
+ <key>g</key>
+ <string>0.728019</string>
+ <key>r</key>
+ <string>0.72793</string>
+ </dict>
+ <key>CornerRadius</key>
+ <real>4</real>
+ </dict>
+ </dict>
+ </dict>
+ <dict>
+ <key>AllowConnections</key>
+ <string>NO</string>
+ <key>Bounds</key>
+ <string>{{131.723, 217.483}, {122.898, 31.7043}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>ID</key>
+ <integer>237</integer>
+ <key>Rotation</key>
+ <real>359.89700317382812</real>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0.727869</string>
+ <key>g</key>
+ <string>0.728019</string>
+ <key>r</key>
+ <string>0.72793</string>
+ </dict>
+ <key>CornerRadius</key>
+ <real>4</real>
+ </dict>
+ </dict>
+ </dict>
+ <dict>
+ <key>AllowConnections</key>
+ <string>NO</string>
+ <key>AllowLabelDrop</key>
+ <false/>
+ <key>AllowToConnect</key>
+ <false/>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>ID</key>
+ <integer>236</integer>
+ <key>Points</key>
+ <array>
+ <string>{118.111, 325.705}</string>
+ <string>{48.4197, 325.705}</string>
+ </array>
+ <key>Rotation</key>
+ <real>358.4884033203125</real>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0.223529</string>
+ <key>g</key>
+ <string>0.776471</string>
+ <key>r</key>
+ <string>0.643137</string>
+ </dict>
+ <key>HeadArrow</key>
+ <string>0</string>
+ <key>TailArrow</key>
+ <string>0</string>
+ </dict>
+ </dict>
+ </dict>
+ <dict>
+ <key>AllowConnections</key>
+ <string>NO</string>
+ <key>AllowLabelDrop</key>
+ <false/>
+ <key>AllowToConnect</key>
+ <false/>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>ID</key>
+ <integer>235</integer>
+ <key>Points</key>
+ <array>
+ <string>{118.111, 311.614}</string>
+ <string>{48.4197, 311.614}</string>
+ </array>
+ <key>Rotation</key>
+ <real>358.4884033203125</real>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0.223529</string>
+ <key>g</key>
+ <string>0.776471</string>
+ <key>r</key>
+ <string>0.643137</string>
+ </dict>
+ <key>HeadArrow</key>
+ <string>0</string>
+ <key>TailArrow</key>
+ <string>0</string>
+ </dict>
+ </dict>
+ </dict>
+ <dict>
+ <key>AllowConnections</key>
+ <string>NO</string>
+ <key>AllowLabelDrop</key>
+ <false/>
+ <key>AllowToConnect</key>
+ <false/>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>ID</key>
+ <integer>234</integer>
+ <key>Points</key>
+ <array>
+ <string>{118.111, 297.523}</string>
+ <string>{48.4197, 297.523}</string>
+ </array>
+ <key>Rotation</key>
+ <real>358.4884033203125</real>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0.223529</string>
+ <key>g</key>
+ <string>0.776471</string>
+ <key>r</key>
+ <string>0.643137</string>
+ </dict>
+ <key>HeadArrow</key>
+ <string>0</string>
+ <key>TailArrow</key>
+ <string>0</string>
+ </dict>
+ </dict>
+ </dict>
+ <dict>
+ <key>AllowConnections</key>
+ <string>NO</string>
+ <key>AllowLabelDrop</key>
+ <false/>
+ <key>AllowToConnect</key>
+ <false/>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>ID</key>
+ <integer>233</integer>
+ <key>Points</key>
+ <array>
+ <string>{118.111, 283.432}</string>
+ <string>{48.4197, 283.432}</string>
+ </array>
+ <key>Rotation</key>
+ <real>358.4884033203125</real>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0.223529</string>
+ <key>g</key>
+ <string>0.776471</string>
+ <key>r</key>
+ <string>0.643137</string>
+ </dict>
+ <key>HeadArrow</key>
+ <string>0</string>
+ <key>TailArrow</key>
+ <string>0</string>
+ </dict>
+ </dict>
+ </dict>
+ <dict>
+ <key>AllowConnections</key>
+ <string>NO</string>
+ <key>AllowLabelDrop</key>
+ <false/>
+ <key>AllowToConnect</key>
+ <false/>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>ID</key>
+ <integer>232</integer>
+ <key>Points</key>
+ <array>
+ <string>{118.111, 269.341}</string>
+ <string>{48.4197, 269.341}</string>
+ </array>
+ <key>Rotation</key>
+ <real>358.4884033203125</real>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0.223529</string>
+ <key>g</key>
+ <string>0.776471</string>
+ <key>r</key>
+ <string>0.643137</string>
+ </dict>
+ <key>HeadArrow</key>
+ <string>0</string>
+ <key>TailArrow</key>
+ <string>0</string>
+ </dict>
+ </dict>
+ </dict>
+ <dict>
+ <key>AllowConnections</key>
+ <string>NO</string>
+ <key>AllowLabelDrop</key>
+ <false/>
+ <key>AllowToConnect</key>
+ <false/>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>ID</key>
+ <integer>231</integer>
+ <key>Points</key>
+ <array>
+ <string>{118.111, 227.364}</string>
+ <string>{48.4197, 227.364}</string>
+ </array>
+ <key>Rotation</key>
+ <real>358.4884033203125</real>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0.223529</string>
+ <key>g</key>
+ <string>0.776471</string>
+ <key>r</key>
+ <string>0.643137</string>
+ </dict>
+ <key>HeadArrow</key>
+ <string>0</string>
+ <key>TailArrow</key>
+ <string>0</string>
+ </dict>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{127.406, 212.785}, {130.814, 125.056}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>ID</key>
+ <integer>230</integer>
+ <key>Magnets</key>
+ <array>
+ <string>{-0.7396, -1.1094}</string>
+ <string>{-0.421637, -1.26491}</string>
+ <string>{0, -1.33333}</string>
+ <string>{0.421637, -1.26491}</string>
+ <string>{0.7396, -1.1094}</string>
+ <string>{1.1094, -0.7396}</string>
+ <string>{1.26491, -0.421637}</string>
+ <string>{1.33333, 0}</string>
+ <string>{1.26491, 0.421637}</string>
+ <string>{1.1094, 0.7396}</string>
+ <string>{0.7396, 1.1094}</string>
+ <string>{0.421637, 1.26491}</string>
+ <string>{0, 1.33333}</string>
+ <string>{-0.421637, 1.26491}</string>
+ <string>{-0.7396, 1.1094}</string>
+ <string>{-1.1094, 0.7396}</string>
+ <string>{-1.26491, 0.421636}</string>
+ <string>{-1.33333, -6.35783e-07}</string>
+ <string>{-1.26491, -0.421638}</string>
+ <string>{-1.1094, -0.7396}</string>
+ </array>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>fill</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>1</string>
+ <key>g</key>
+ <string>0.874135</string>
+ <key>r</key>
+ <string>0.71718</string>
+ </dict>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>1</string>
+ <key>g</key>
+ <string>0.662438</string>
+ <key>r</key>
+ <string>0.464468</string>
+ </dict>
+ <key>CornerRadius</key>
+ <real>3</real>
+ </dict>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{48.4197, 212.785}, {69.6911, 125.056}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>ID</key>
+ <integer>229</integer>
+ <key>Magnets</key>
+ <array>
+ <string>{-0.7396, -1.1094}</string>
+ <string>{-0.421636, -1.26491}</string>
+ <string>{1.27157e-06, -1.33333}</string>
+ <string>{0.421638, -1.26491}</string>
+ <string>{0.739601, -1.1094}</string>
+ <string>{1.1094, -0.7396}</string>
+ <string>{1.26491, -0.421636}</string>
+ <string>{1.33333, 0}</string>
+ <string>{1.26491, 0.421637}</string>
+ <string>{1.1094, 0.7396}</string>
+ <string>{0.7396, 1.1094}</string>
+ <string>{0.421638, 1.26491}</string>
+ <string>{1.27157e-06, 1.33333}</string>
+ <string>{-0.421636, 1.26491}</string>
+ <string>{-0.739599, 1.1094}</string>
+ <string>{-1.1094, 0.739601}</string>
+ <string>{-1.26491, 0.421638}</string>
+ <string>{-1.33333, -6.35783e-07}</string>
+ <string>{-1.26491, -0.421638}</string>
+ <string>{-1.1094, -0.7396}</string>
+ </array>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>fill</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0.921919</string>
+ <key>g</key>
+ <string>1</string>
+ <key>r</key>
+ <string>0.936969</string>
+ </dict>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0.223529</string>
+ <key>g</key>
+ <string>0.776471</string>
+ <key>r</key>
+ <string>0.643137</string>
+ </dict>
+ <key>CornerRadius</key>
+ <real>3</real>
+ </dict>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{40.3187, 205.072}, {226.178, 141.361}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FontInfo</key>
+ <dict>
+ <key>Font</key>
+ <string>Copperplate-Bold</string>
+ <key>Size</key>
+ <real>33</real>
+ </dict>
+ <key>ID</key>
+ <integer>228</integer>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>fill</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0.938075</string>
+ <key>g</key>
+ <string>0.938269</string>
+ <key>r</key>
+ <string>0.938154</string>
+ </dict>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0.712329</string>
+ <key>g</key>
+ <string>0.70317</string>
+ <key>r</key>
+ <string>0.691643</string>
+ </dict>
+ <key>CornerRadius</key>
+ <real>1</real>
+ <key>Width</key>
+ <real>2</real>
+ </dict>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{24.8797, 189.905}, {258.196, 172.701}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>ID</key>
+ <integer>227</integer>
+ <key>ImageID</key>
+ <integer>4</integer>
+ <key>Magnets</key>
+ <array>
+ <string>{-0.7396, -1.1094}</string>
+ <string>{-0.421637, -1.26491}</string>
+ <string>{-3.17891e-07, -1.33333}</string>
+ <string>{0.421637, -1.26491}</string>
+ <string>{0.7396, -1.1094}</string>
+ <string>{1.1094, -0.7396}</string>
+ <string>{1.26491, -0.421637}</string>
+ <string>{1.33333, 0}</string>
+ <string>{1.26491, 0.421637}</string>
+ <string>{1.1094, 0.7396}</string>
+ <string>{0.7396, 1.1094}</string>
+ <string>{0.421637, 1.26491}</string>
+ <string>{-3.17892e-07, 1.33333}</string>
+ <string>{-0.421638, 1.26491}</string>
+ <string>{-0.7396, 1.1094}</string>
+ <string>{-1.1094, 0.7396}</string>
+ <string>{-1.26491, 0.421637}</string>
+ <string>{-1.33333, -6.35783e-07}</string>
+ <string>{-1.26491, -0.421637}</string>
+ <string>{-1.1094, -0.7396}</string>
+ </array>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>fill</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>shadow</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ </dict>
+ </dict>
+ <dict>
+ <key>AllowConnections</key>
+ <string>NO</string>
+ <key>Bounds</key>
+ <string>{{473.523, 244.187}, {54.0405, 64.7821}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>ID</key>
+ <integer>226</integer>
+ <key>Rotation</key>
+ <real>359.85791015625</real>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0.727869</string>
+ <key>g</key>
+ <string>0.728019</string>
+ <key>r</key>
+ <string>0.72793</string>
+ </dict>
+ <key>CornerRadius</key>
+ <real>3</real>
+ </dict>
+ </dict>
+ </dict>
+ <dict>
+ <key>AllowConnections</key>
+ <string>NO</string>
+ <key>Bounds</key>
+ <string>{{473.435, 219.657}, {54.2123, 20.3811}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>ID</key>
+ <integer>225</integer>
+ <key>Rotation</key>
+ <real>359.82769775390625</real>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0.727869</string>
+ <key>g</key>
+ <string>0.728019</string>
+ <key>r</key>
+ <string>0.72793</string>
+ </dict>
+ <key>CornerRadius</key>
+ <real>3</real>
+ </dict>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{470.354, 215.4}, {60.48, 97.92}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>ID</key>
+ <integer>224</integer>
+ <key>Magnets</key>
+ <array>
+ <string>{0, 1}</string>
+ <string>{0, -1}</string>
+ <string>{1, 0}</string>
+ <string>{-1, 0}</string>
+ </array>
+ <key>Rotation</key>
+ <real>359.88986206054688</real>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>fill</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>1</string>
+ <key>g</key>
+ <string>0.874135</string>
+ <key>r</key>
+ <string>0.71718</string>
+ </dict>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0.727869</string>
+ <key>g</key>
+ <string>0.728019</string>
+ <key>r</key>
+ <string>0.72793</string>
+ </dict>
+ <key>CornerRadius</key>
+ <real>2</real>
+ </dict>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{460.845, 198.425}, {79.9634, 145.72}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>ID</key>
+ <integer>222</integer>
+ <key>ImageID</key>
+ <integer>3</integer>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>fill</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>shadow</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{339.608, 238.883}, {59.4713, 10.3718}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>ID</key>
+ <integer>220</integer>
+ <key>Rotation</key>
+ <real>359.91473388671875</real>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>fill</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>1</string>
+ <key>g</key>
+ <string>0.874135</string>
+ <key>r</key>
+ <string>0.71718</string>
+ </dict>
+ </dict>
+ <key>shadow</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>1</string>
+ <key>g</key>
+ <string>0.662438</string>
+ <key>r</key>
+ <string>0.464468</string>
+ </dict>
+ </dict>
+ </dict>
+ </dict>
+ <dict>
+ <key>AllowConnections</key>
+ <string>NO</string>
+ <key>AllowLabelDrop</key>
+ <false/>
+ <key>AllowToConnect</key>
+ <false/>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>ID</key>
+ <integer>219</integer>
+ <key>Points</key>
+ <array>
+ <string>{399.607, 301.157}</string>
+ <string>{340.135, 301.157}</string>
+ </array>
+ <key>Rotation</key>
+ <real>358.4884033203125</real>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0.223529</string>
+ <key>g</key>
+ <string>0.776471</string>
+ <key>r</key>
+ <string>0.643137</string>
+ </dict>
+ <key>HeadArrow</key>
+ <string>0</string>
+ <key>TailArrow</key>
+ <string>0</string>
+ </dict>
+ </dict>
+ </dict>
+ <dict>
+ <key>AllowConnections</key>
+ <string>NO</string>
+ <key>AllowLabelDrop</key>
+ <false/>
+ <key>AllowToConnect</key>
+ <false/>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>ID</key>
+ <integer>218</integer>
+ <key>Points</key>
+ <array>
+ <string>{399.607, 290.785}</string>
+ <string>{340.115, 290.785}</string>
+ </array>
+ <key>Rotation</key>
+ <real>358.4884033203125</real>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0.223529</string>
+ <key>g</key>
+ <string>0.776471</string>
+ <key>r</key>
+ <string>0.643137</string>
+ </dict>
+ <key>HeadArrow</key>
+ <string>0</string>
+ <key>TailArrow</key>
+ <string>0</string>
+ </dict>
+ </dict>
+ </dict>
+ <dict>
+ <key>AllowConnections</key>
+ <string>NO</string>
+ <key>AllowLabelDrop</key>
+ <false/>
+ <key>AllowToConnect</key>
+ <false/>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>ID</key>
+ <integer>217</integer>
+ <key>Points</key>
+ <array>
+ <string>{399.707, 280.413}</string>
+ <string>{340.095, 280.413}</string>
+ </array>
+ <key>Rotation</key>
+ <real>358.4884033203125</real>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0.223529</string>
+ <key>g</key>
+ <string>0.776471</string>
+ <key>r</key>
+ <string>0.643137</string>
+ </dict>
+ <key>HeadArrow</key>
+ <string>0</string>
+ <key>TailArrow</key>
+ <string>0</string>
+ </dict>
+ </dict>
+ </dict>
+ <dict>
+ <key>AllowConnections</key>
+ <string>NO</string>
+ <key>AllowLabelDrop</key>
+ <false/>
+ <key>AllowToConnect</key>
+ <false/>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>ID</key>
+ <integer>216</integer>
+ <key>Points</key>
+ <array>
+ <string>{399.607, 270.041}</string>
+ <string>{340.075, 270.041}</string>
+ </array>
+ <key>Rotation</key>
+ <real>358.4884033203125</real>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0.223529</string>
+ <key>g</key>
+ <string>0.776471</string>
+ <key>r</key>
+ <string>0.643137</string>
+ </dict>
+ <key>HeadArrow</key>
+ <string>0</string>
+ <key>TailArrow</key>
+ <string>0</string>
+ </dict>
+ </dict>
+ </dict>
+ <dict>
+ <key>AllowConnections</key>
+ <string>NO</string>
+ <key>AllowLabelDrop</key>
+ <false/>
+ <key>AllowToConnect</key>
+ <false/>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>ID</key>
+ <integer>215</integer>
+ <key>Points</key>
+ <array>
+ <string>{399.607, 259.669}</string>
+ <string>{340.055, 259.669}</string>
+ </array>
+ <key>Rotation</key>
+ <real>358.4884033203125</real>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0.223529</string>
+ <key>g</key>
+ <string>0.776471</string>
+ <key>r</key>
+ <string>0.643137</string>
+ </dict>
+ <key>HeadArrow</key>
+ <string>0</string>
+ <key>TailArrow</key>
+ <string>0</string>
+ </dict>
+ </dict>
+ </dict>
+ <dict>
+ <key>AllowConnections</key>
+ <string>NO</string>
+ <key>AllowLabelDrop</key>
+ <false/>
+ <key>AllowToConnect</key>
+ <false/>
+ <key>Class</key>
+ <string>LineGraphic</string>
+ <key>ID</key>
+ <integer>214</integer>
+ <key>Points</key>
+ <array>
+ <string>{399.607, 228.411}</string>
+ <string>{339.995, 228.411}</string>
+ </array>
+ <key>Rotation</key>
+ <real>358.4884033203125</real>
+ <key>Style</key>
+ <dict>
+ <key>stroke</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0.223529</string>
+ <key>g</key>
+ <string>0.776471</string>
+ <key>r</key>
+ <string>0.643137</string>
+ </dict>
+ <key>HeadArrow</key>
+ <string>0</string>
+ <key>TailArrow</key>
+ <string>0</string>
+ </dict>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{339.032, 215.343}, {60.48, 97.92}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>ID</key>
+ <integer>213</integer>
+ <key>Magnets</key>
+ <array>
+ <string>{0, 1}</string>
+ <string>{0, -1}</string>
+ <string>{1, 0}</string>
+ <string>{-1, 0}</string>
+ </array>
+ <key>Rotation</key>
+ <real>359.8895263671875</real>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>fill</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0.921919</string>
+ <key>g</key>
+ <string>1</string>
+ <key>r</key>
+ <string>0.936969</string>
+ </dict>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0.727869</string>
+ <key>g</key>
+ <string>0.728019</string>
+ <key>r</key>
+ <string>0.72793</string>
+ </dict>
+ <key>CornerRadius</key>
+ <real>2</real>
+ </dict>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{72.7507, 362.169}, {161, 38}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FitText</key>
+ <string>YES</string>
+ <key>Flow</key>
+ <string>Resize</string>
+ <key>FontInfo</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>a</key>
+ <string>0.65</string>
+ <key>w</key>
+ <string>0</string>
+ </dict>
+ <key>Font</key>
+ <string>DroidSans</string>
+ <key>Size</key>
+ <real>10</real>
+ </dict>
+ <key>ID</key>
+ <integer>210</integer>
+ <key>Magnets</key>
+ <array>
+ <string>{0, 1}</string>
+ <string>{0, -1}</string>
+ <string>{1, 0}</string>
+ <string>{-1, 0}</string>
+ </array>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>shadow</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>RTFD</key>
+ <data>
+ BAtzdHJlYW10eXBlZIHoA4QBQISEhBJOU0F0dHJpYnV0
+ ZWRTdHJpbmcAhIQITlNPYmplY3QAhZKEhIQITlNTdHJp
+ bmcBlIQBKy1BY3Rpdml0eSBBIGNvbnRhaW5zCkZyYWdt
+ ZW50IEEgYW5kIEZyYWdtZW50IEKGhAJpSQEtkoSEhAxO
+ U0RpY3Rpb25hcnkAlIQBaQOShJaWEE5TUGFyYWdyYXBo
+ U3R5bGWGkoSEhBBOU1BhcmFncmFwaFN0eWxlAJSEBEND
+ QFMCAISEhAdOU0FycmF5AJSZDJKEhIQJTlNUZXh0VGFi
+ AJSEAkNmAByGkoSfngA4hpKEn54AVIaShJ+eAHCGkoSf
+ ngCBjACGkoSfngCBqACGkoSfngCBxACGkoSfngCB4ACG
+ koSfngCB/ACGkoSfngCBGAGGkoSfngCBNAGGkoSfngCB
+ UAGGhgCGkoSWlgdOU0NvbG9yhpKEhIQHTlNDb2xvcgCU
+ hAFjA4QCZmYAg2ZmJj+GkoSWlgZOU0ZvbnSGkoSEhAZO
+ U0ZvbnQelJkchAVbMjhjXQYAAAAUAAAA//5IAGUAbAB2
+ AGUAdABpAGMAYQCEAWYMoACgAaAAoACGhoY=
+ </data>
+ <key>Text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf540
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf2 Activity A contains\
+Fragment A and Fragment B}</string>
+ </dict>
+ <key>Wrap</key>
+ <string>NO</string>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{446.159, 362.169}, {108, 38}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FitText</key>
+ <string>YES</string>
+ <key>Flow</key>
+ <string>Resize</string>
+ <key>FontInfo</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>a</key>
+ <string>0.65</string>
+ <key>w</key>
+ <string>0</string>
+ </dict>
+ <key>Font</key>
+ <string>DroidSans</string>
+ <key>Size</key>
+ <real>10</real>
+ </dict>
+ <key>ID</key>
+ <integer>209</integer>
+ <key>Magnets</key>
+ <array>
+ <string>{0, 1}</string>
+ <string>{0, -1}</string>
+ <string>{1, 0}</string>
+ <string>{-1, 0}</string>
+ </array>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>shadow</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>RTFD</key>
+ <data>
+ BAtzdHJlYW10eXBlZIHoA4QBQISEhBJOU0F0dHJpYnV0
+ ZWRTdHJpbmcAhIQITlNPYmplY3QAhZKEhIQITlNTdHJp
+ bmcBlIQBKx5BY3Rpdml0eSBCIGNvbnRhaW5zCkZyYWdt
+ ZW50IEKGhAJpSQEekoSEhAxOU0RpY3Rpb25hcnkAlIQB
+ aQOShJaWEE5TUGFyYWdyYXBoU3R5bGWGkoSEhBBOU1Bh
+ cmFncmFwaFN0eWxlAJSEBENDQFMCAISEhAdOU0FycmF5
+ AJSZDJKEhIQJTlNUZXh0VGFiAJSEAkNmAByGkoSfngA4
+ hpKEn54AVIaShJ+eAHCGkoSfngCBjACGkoSfngCBqACG
+ koSfngCBxACGkoSfngCB4ACGkoSfngCB/ACGkoSfngCB
+ GAGGkoSfngCBNAGGkoSfngCBUAGGhgCGkoSWlgdOU0Nv
+ bG9yhpKEhIQHTlNDb2xvcgCUhAFjA4QCZmYAg2ZmJj+G
+ koSWlgZOU0ZvbnSGkoSEhAZOU0ZvbnQelJkchAVbMjhj
+ XQYAAAAUAAAA//5IAGUAbAB2AGUAdABpAGMAYQCEAWYM
+ oACgAaAAoACGhoY=
+ </data>
+ <key>Text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf540
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf2 Activity B contains\
+Fragment B}</string>
+ </dict>
+ <key>Wrap</key>
+ <string>NO</string>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{316.401, 362.169}, {107, 38}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FitText</key>
+ <string>YES</string>
+ <key>Flow</key>
+ <string>Resize</string>
+ <key>FontInfo</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>a</key>
+ <string>0.65</string>
+ <key>w</key>
+ <string>0</string>
+ </dict>
+ <key>Font</key>
+ <string>DroidSans</string>
+ <key>Size</key>
+ <real>10</real>
+ </dict>
+ <key>ID</key>
+ <integer>208</integer>
+ <key>Magnets</key>
+ <array>
+ <string>{0, 1}</string>
+ <string>{0, -1}</string>
+ <string>{1, 0}</string>
+ <string>{-1, 0}</string>
+ </array>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>shadow</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>RTFD</key>
+ <data>
+ BAtzdHJlYW10eXBlZIHoA4QBQISEhBJOU0F0dHJpYnV0
+ ZWRTdHJpbmcAhIQITlNPYmplY3QAhZKEhIQITlNTdHJp
+ bmcBlIQBKx5BY3Rpdml0eSBBIGNvbnRhaW5zCkZyYWdt
+ ZW50IEGGhAJpSQEekoSEhAxOU0RpY3Rpb25hcnkAlIQB
+ aQOShJaWEE5TUGFyYWdyYXBoU3R5bGWGkoSEhBBOU1Bh
+ cmFncmFwaFN0eWxlAJSEBENDQFMCAISEhAdOU0FycmF5
+ AJSZDJKEhIQJTlNUZXh0VGFiAJSEAkNmAByGkoSfngA4
+ hpKEn54AVIaShJ+eAHCGkoSfngCBjACGkoSfngCBqACG
+ koSfngCBxACGkoSfngCB4ACGkoSfngCB/ACGkoSfngCB
+ GAGGkoSfngCBNAGGkoSfngCBUAGGhgCGkoSWlgdOU0Nv
+ bG9yhpKEhIQHTlNDb2xvcgCUhAFjA4QCZmYAg2ZmJj+G
+ koSWlgZOU0ZvbnSGkoSEhAZOU0ZvbnQelJkchAVbMjhj
+ XQYAAAAUAAAA//5IAGUAbAB2AGUAdABpAGMAYQCEAWYM
+ oACgAaAAoACGhoY=
+ </data>
+ <key>Text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf540
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf2 Activity A contains\
+Fragment A}</string>
+ </dict>
+ <key>Wrap</key>
+ <string>NO</string>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{394.67, 99.0729}, {80.1852, 42.5806}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FontInfo</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>a</key>
+ <string>0.5</string>
+ <key>b</key>
+ <string>0</string>
+ <key>g</key>
+ <string>0</string>
+ <key>r</key>
+ <string>0</string>
+ </dict>
+ <key>Font</key>
+ <string>Helvetica</string>
+ <key>Size</key>
+ <real>12</real>
+ </dict>
+ <key>ID</key>
+ <integer>100</integer>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>fill</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>shadow</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>RTFD</key>
+ <data>
+ BAtzdHJlYW10eXBlZIHoA4QBQISEhBJOU0F0dHJpYnV0
+ ZWRTdHJpbmcAhIQITlNPYmplY3QAhZKEhIQITlNTdHJp
+ bmcBlIQBKwdIYW5kc2V0hoQCaUkBB5KEhIQMTlNEaWN0
+ aW9uYXJ5AJSEAWkDkoSWlgdOU0NvbG9yhpKEhIQHTlND
+ b2xvcgCUhAFjAYQEZmZmZgAAAIMAAAA/hpKElpYGTlNG
+ b250hpKEhIQGTlNGb250HpSZHIQFWzI4Y10GAAAAFAAA
+ AP/+SABlAGwAdgBlAHQAaQBjAGEAhAFmDJsAmwGbAJsA
+ hpKElpYQTlNQYXJhZ3JhcGhTdHlsZYaShISEEE5TUGFy
+ YWdyYXBoU3R5bGUAlIQEQ0NAUwIAhISEB05TQXJyYXkA
+ lJkMkoSEhAlOU1RleHRUYWIAlIQCQ2YAHIaShKWkADiG
+ koSlpABUhpKEpaQAcIaShKWkAIGMAIaShKWkAIGoAIaS
+ hKWkAIHEAIaShKWkAIHgAIaShKWkAIH8AIaShKWkAIEY
+ AYaShKWkAIE0AYaShKWkAIFQAYaGAIaGhg==
+ </data>
+ <key>Text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf540
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf2 Handset}</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{110.788, 99.0729}, {80.1852, 42.5806}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FontInfo</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>a</key>
+ <string>0.5</string>
+ <key>b</key>
+ <string>0</string>
+ <key>g</key>
+ <string>0</string>
+ <key>r</key>
+ <string>0</string>
+ </dict>
+ <key>Font</key>
+ <string>Helvetica</string>
+ <key>Size</key>
+ <real>12</real>
+ </dict>
+ <key>ID</key>
+ <integer>205</integer>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>fill</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>shadow</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>RTFD</key>
+ <data>
+ BAtzdHJlYW10eXBlZIHoA4QBQISEhBJOU0F0dHJpYnV0
+ ZWRTdHJpbmcAhIQITlNPYmplY3QAhZKEhIQITlNTdHJp
+ bmcBlIQBKwZUYWJsZXSGhAJpSQEGkoSEhAxOU0RpY3Rp
+ b25hcnkAlIQBaQOShJaWB05TQ29sb3KGkoSEhAdOU0Nv
+ bG9yAJSEAWMBhARmZmZmAAAAgwAAAD+GkoSWlgZOU0Zv
+ bnSGkoSEhAZOU0ZvbnQelJkchAVbMjhjXQYAAAAUAAAA
+ //5IAGUAbAB2AGUAdABpAGMAYQCEAWYMmwCbAZsAmwCG
+ koSWlhBOU1BhcmFncmFwaFN0eWxlhpKEhIQQTlNQYXJh
+ Z3JhcGhTdHlsZQCUhARDQ0BTAgCEhIQHTlNBcnJheQCU
+ mQyShISECU5TVGV4dFRhYgCUhAJDZgAchpKEpaQAOIaS
+ hKWkAFSGkoSlpABwhpKEpaQAgYwAhpKEpaQAgagAhpKE
+ paQAgcQAhpKEpaQAgeAAhpKEpaQAgfwAhpKEpaQAgRgB
+ hpKEpaQAgTQBhpKEpaQAgVABhoYAhoaG
+ </data>
+ <key>Text</key>
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf540
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf2 Tablet}</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{14.3137, 109.726}, {279.329, 302.075}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FontInfo</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>a</key>
+ <string>0.65</string>
+ <key>w</key>
+ <string>0</string>
+ </dict>
+ <key>Font</key>
+ <string>DroidSans</string>
+ <key>Size</key>
+ <real>10</real>
+ </dict>
+ <key>ID</key>
+ <integer>204</integer>
+ <key>Magnets</key>
+ <array>
+ <string>{0, 1}</string>
+ <string>{0, -1}</string>
+ <string>{1, 0}</string>
+ <string>{-1, 0}</string>
+ </array>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>shadow</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0.578326</string>
+ <key>g</key>
+ <string>0.578615</string>
+ <key>r</key>
+ <string>0.578453</string>
+ </dict>
+ <key>CornerRadius</key>
+ <real>15</real>
+ <key>Pattern</key>
+ <integer>1</integer>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>VerticalPad</key>
+ <integer>10</integer>
+ </dict>
+ <key>TextPlacement</key>
+ <integer>0</integer>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{329.628, 198.425}, {79.9634, 145.72}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>ID</key>
+ <integer>221</integer>
+ <key>ImageID</key>
+ <integer>3</integer>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>fill</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>shadow</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ </dict>
+ </dict>
+ <dict>
+ <key>Bounds</key>
+ <string>{{311.222, 109.726}, {250, 302.074}}</string>
+ <key>Class</key>
+ <string>ShapedGraphic</string>
+ <key>FontInfo</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>a</key>
+ <string>0.65</string>
+ <key>w</key>
+ <string>0</string>
+ </dict>
+ <key>Font</key>
+ <string>DroidSans</string>
+ <key>Size</key>
+ <real>10</real>
+ </dict>
+ <key>ID</key>
+ <integer>203</integer>
+ <key>Magnets</key>
+ <array>
+ <string>{0, 1}</string>
+ <string>{0, -1}</string>
+ <string>{1, 0}</string>
+ <string>{-1, 0}</string>
+ </array>
+ <key>Shape</key>
+ <string>Rectangle</string>
+ <key>Style</key>
+ <dict>
+ <key>shadow</key>
+ <dict>
+ <key>Draws</key>
+ <string>NO</string>
+ </dict>
+ <key>stroke</key>
+ <dict>
+ <key>Color</key>
+ <dict>
+ <key>b</key>
+ <string>0.578326</string>
+ <key>g</key>
+ <string>0.578615</string>
+ <key>r</key>
+ <string>0.578453</string>
+ </dict>
+ <key>CornerRadius</key>
+ <real>15</real>
+ <key>Pattern</key>
+ <integer>1</integer>
+ </dict>
+ </dict>
+ <key>Text</key>
+ <dict>
+ <key>VerticalPad</key>
+ <integer>10</integer>
+ </dict>
+ <key>TextPlacement</key>
+ <integer>0</integer>
+ </dict>
+ </array>
+ <key>GridInfo</key>
+ <dict/>
+ <key>GuidesLocked</key>
+ <string>NO</string>
+ <key>GuidesVisible</key>
+ <string>YES</string>
+ <key>HPages</key>
+ <integer>1</integer>
+ <key>HorizontalGuides</key>
+ <array>
+ <real>109.44444274902344</real>
+ </array>
+ <key>ImageCounter</key>
+ <integer>5</integer>
+ <key>Images</key>
+ <array>
+ <dict>
+ <key>Extension</key>
+ <string>png</string>
+ <key>ID</key>
+ <integer>4</integer>
+ <key>RawData</key>
+ <data>
+ iVBORw0KGgoAAAANSUhEUgAAAvMAAAH5CAMAAAA7qEEeAAAAGXRF
+ WHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAwBQTFRF
+ OTk5dnZ3wMLDU1JS3+DhVFRUn6Gk5eXmXl5eDg4O6erquLm74eLi
+ xMXH09TVent72NnaODg4YWFhg4SFxMbHZmZmqKmrd3h50NHSaWlp
+ 3d3e1dbW9vb2bW1uzM3OIiIimJqc9PT0hIWG8PDx/v7+uLq7l5mb
+ yMnKqqyuYmJitri5tLa4xcbHvr/BTExMxsjJzs/Qu72+w8TFuru9
+ ycrLtLW3vb6/z9DRwcLDd3d45OTl19jZ5ubnsLGzeXp6m52gMzMz
+ 2tvcRERF5ebmeHl6wMHC3t/g5ufoU1NT2trb4+Tk4uPj1tfX5+jo
+ 0dLTy8zNoaOlmZyePT09pKWnsrS1oKKkn6GjfH19nqCiVFRT+vr6
+ o6Wn+fn5QUJCpqiqnZ+hm52f8/Pz+/v7sbO0oKKlr7Gz8vLzqKqs
+ V1dXRUZG/Pz8oqSmra+xp6mr7+/vsLK07Ozs7e3ts7W3pKaohYaH
+ eXl5RUVGnJ6gXV1dVlZWpqireHl5V1ZWeHh5/f39p6iqVVVVqKqt
+ Ozs7nJ6hWVhYnJ+hpaepnZ+ip6irp6mqWFdXmpyerK6w7O3trK6x
+ 7+/w+Pj4nqGjqautsbO18vLys7S2s7W26+zs7e7u7/Dw+Pn5q62v
+ 7OztnaCi7u7vsrO18fHxsrS2r7Cy/P39sbK0+Pj59fX1+vv7rrCx
+ ra6wpaeopKaprrCyoKOl6uvr9/f3+fr6+/v88/P08/T0nJ+gqaus
+ 7u/v8vPzrq+xoqOmmp2f7e3uoaOmVlVW+vr7qqutnp+i9/j4oKOk
+ /Pz9+fj5oaKl+/r7rK2wra6xpKWompyf7u7u/v79paaooaSloqSl
+ kJGTo6anoqWno6Smo6Wm9/j3Pz8/gYKDoaOkn6Kk/v39oKKj/v3+
+ r7Gy+fn6ra+wnJ2g8/TznqChnqCj/fz8/fz9n6Ci+/r6+/z7V1ZX
+ +/z8mZudVFNUqKmsV1dWrbCxqKusqaqsrK+w3uDfpqeppqeqXl1d
+ 8/Lzp6qsWlpaW1tbWVlZWFhYAAAA////XFxciKC+sAAAICNJREFU
+ eNrsnXlcFGeaxzFBUVTWSYYoh4gjIoLYoERNnIxhFW2NR2UzVdML
+ DNVqGDugcTesqfRkwN5BMIk6xjuJOcxlbp0zc2buGefYY/aa3ex9
+ z+4ye18D3VM9bzXiAd1No10Pz/v27/cHFtgPH32fX1d/q35V9WTZ
+ EJRZysISQPA8BMHzEJSpnt/WDEH8tM0Nz3/1y4Wz3ltdW7Udgvip
+ qrbaM2vtD9vS5vmucxsbKpommX6rxwdBHNXT7Tf19oMrVr6dBs+X
+ HZ518h7LNHRdgyDO0nXDsv6nKm/r9Xm+bENDk2XG7P6Wz7T8FvYo
+ EEMJZ4rdsmNT4xmrZcW66/D8+5calh77RabZ/ub8FZ6SPAhip6It
+ nhumHvyiZZqTnP29pVXnXqPn5zXopvMrfP7Xq+qmzftGGU5yQWz1
+ p8Vnsj3HmvzO7l7v1hbNvQbPfyrvdWcfr/foVUVPYEkhGdR1bvMH
+ Y2gyyf+5lWVj9fy8paYR+5i4YR3275BEtr9rmeEcgRpmQ/HYPD/t
+ Py2BNfvvveHU0E/OPzGtqGZRwwoI4qYGz/KNdz35+NCJl9xawyfc
+ ax1cNxbP5+miSDefe//F3/J2Xu3RH/h9ensTBPGT8OqBv66oLpp3
+ 0a/ZrQ7gmH9Yn7Lny+qeeVdUtNe8Evu2eOMJ34GmSs/6nENntzVC
+ EDf9ZO6h21d6KrU+o7L+2zHPNnucXb1hzErR82ULusWbpPtgTuy7
+ T2/ZVb6rYdrZLqAixJvktxZWd5R/bfkgxmfv2C9Q5es1KXm+zON8
+ LlhLYyd7Gjd3lP77yvNY0DSr8ens/85+og0LkWbNzTtdesvG2Lp+
+ /kSPcxKmJhXPb17lWH5J7FK13GPlf7V+G5YyzXqypEK3rM/+2ReW
+ fwSLkWY1F+0orXw2dtal1hKmP7JydM8XGpO0t6zpDsp0zfK9W9OM
+ ZUz3Z/Dm10vNiqqqE0dXle5aifVIt87XmV/c6Jxg/8tlpmD69pzR
+ PJ/7uiFYfpFT8lRD+R25WMJ065MNfmtqtgOdcwur/JYHB0ppV87R
+ 0ve+6BDksm5N8/3sTHLPN24Xbw1/rdOH4ufLVwDk068lfXrRUMxX
+ VvNM3xYsSfqxfmn5Uud0fXNVj3No2pXU8wsEAvnuiO2Ejh2oQQKb
+ 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
+ uwwAAAAASUVORK5CYII=
+ </data>
+ </dict>
+ <dict>
+ <key>Extension</key>
+ <string>png</string>
+ <key>ID</key>
+ <integer>3</integer>
+ <key>RawData</key>
+ <data>
+ iVBORw0KGgoAAAANSUhEUgAAAMUAAAFnCAMAAAAhRX2TAAAAGXRF
+ WHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAwBQTFRF
+ rrCxu72+1NXWoKKk7OzswMHCVlZW7u7ugYGCxMXHqaqsvsDB0NHS
+ t7i6hYaGlpib8vLz9vb23t/gqqyudXV2sLK0xcbIwsPE/v7+yMnK
+ 29zcw8TGVFRUxsjJzs/Q8PDxubq8wcLErK2vu7y+zc7P0tPUeXp6
+ t7m6zM3O3N3eycrLeHh4UlFR4uLj6OjptLW3ysvNfn5/5OTlvb6/
+ 3+DgzM7PmZye2Nna5ubnury91dbX2trcsrO1wsTF0NDS19jZ5ebm
+ 4eLil5mb3t7fn6Gk3d7em52g4ODh2trb4+Tkr7Gz5+jo2Nja5OXm
+ 6Onq7ezu4OHi5ufo2NjZ09TVdnd47u/v29zd4uPjqKms7O7ukZKT
+ 6+zssrS1pKWn0dLTz9DRoKGjnZ+hnqCinJ6g+fn5pKaotre5pqiq
+ /Pz8paeptba4n6Gj9fX1+vr6mJqcm52f6+vrsrS2mZudmpyepaeo
+ mpyf/f39o6Wnpaaop6mrs7W3oqSmpqirs7S2ra+xnJ+hra+wnqCj
+ +Pj4+Pn4g4OE+/v7V1dX8fHys7W27/Dw+fr56urrtbe4mp2fU1NT
+ mJqd8/PzmJud9PT1nJ6hmZue9PT0rK6veHl6tri5ra6w9fb2d3h5
+ VlZV6uvr9/j46+vsnqGj+Pn58/T0f3+AtLa36erq+Pj5nZ+i9/f3
+ 8fLy+vv7+fr6p6iqWFhX+/z8/f7+9PX1rq+x9fX2f4CAo6SmnaCi
+ +fn6/P39pqeqp6mqpqepn6CinaChpqmq+vr7pKWo+/v8oqWntbe5
+ /Pz9oKGko6Wo/v799fb18vHypqipnJ2gpqmr+vv6o6anoqOlhISF
+ q62voqWm7e3u7u7tpKappKeo+/z76enpoqOmVVVVnJ+gnZ6g/P38
+ nZ+g/fz8/fz98vHxsLG0paiq/Pv8/Pv7p6irjo+Qm52emJmcs7a3
+ srW2mpues7S3/v3+9/j3lZeYnJ6fiYqLzMzNoaSloaSmoqSl+Pf3
+ u76+oaOmoaOlWlpaW1tbWVlZWFhYXFxc////DxLvHgAAIHNJREFU
+ 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
+ st+xzQAAAABJRU5ErkJggg==
+ </data>
+ </dict>
+ </array>
+ <key>KeepToScale</key>
+ <false/>
+ <key>Layers</key>
+ <array>
+ <dict>
+ <key>Lock</key>
+ <string>NO</string>
+ <key>Name</key>
+ <string>Layer 1</string>
+ <key>Print</key>
+ <string>YES</string>
+ <key>View</key>
+ <string>YES</string>
+ </dict>
+ </array>
+ <key>LayoutInfo</key>
+ <dict>
+ <key>Animate</key>
+ <string>NO</string>
+ <key>circoMinDist</key>
+ <real>18</real>
+ <key>circoSeparation</key>
+ <real>0.0</real>
+ <key>layoutEngine</key>
+ <string>dot</string>
+ <key>neatoSeparation</key>
+ <real>0.0</real>
+ <key>twopiSeparation</key>
+ <real>0.0</real>
+ </dict>
+ <key>LinksVisible</key>
+ <string>NO</string>
+ <key>MagnetsVisible</key>
+ <string>NO</string>
+ <key>MasterSheets</key>
+ <array/>
+ <key>ModificationDate</key>
+ <string>2011-10-26 13:03:17 -0700</string>
+ <key>Modifier</key>
+ <string>Scott Main</string>
+ <key>NotesVisible</key>
+ <string>NO</string>
+ <key>Orientation</key>
+ <integer>2</integer>
+ <key>OriginVisible</key>
+ <string>NO</string>
+ <key>PageBreaks</key>
+ <string>YES</string>
+ <key>PrintInfo</key>
+ <dict>
+ <key>NSBottomMargin</key>
+ <array>
+ <string>float</string>
+ <string>41</string>
+ </array>
+ <key>NSLeftMargin</key>
+ <array>
+ <string>float</string>
+ <string>18</string>
+ </array>
+ <key>NSPaperSize</key>
+ <array>
+ <string>size</string>
+ <string>{612, 792}</string>
+ </array>
+ <key>NSRightMargin</key>
+ <array>
+ <string>float</string>
+ <string>18</string>
+ </array>
+ <key>NSTopMargin</key>
+ <array>
+ <string>float</string>
+ <string>18</string>
+ </array>
+ </dict>
+ <key>PrintOnePage</key>
+ <false/>
+ <key>ReadOnly</key>
+ <string>NO</string>
+ <key>RowAlign</key>
+ <integer>1</integer>
+ <key>RowSpacing</key>
+ <real>36</real>
+ <key>SheetTitle</key>
+ <string>Canvas 1</string>
+ <key>SmartAlignmentGuidesActive</key>
+ <string>YES</string>
+ <key>SmartDistanceGuidesActive</key>
+ <string>YES</string>
+ <key>UniqueID</key>
+ <integer>1</integer>
+ <key>UseEntirePage</key>
+ <false/>
+ <key>VPages</key>
+ <integer>1</integer>
+ <key>WindowInfo</key>
+ <dict>
+ <key>CurrentSheet</key>
+ <integer>0</integer>
+ <key>ExpandedCanvases</key>
+ <array>
+ <dict>
+ <key>name</key>
+ <string>Canvas 1</string>
+ </dict>
+ </array>
+ <key>ListView</key>
+ <true/>
+ <key>OutlineWidth</key>
+ <integer>142</integer>
+ <key>RightSidebar</key>
+ <false/>
+ <key>ShowRuler</key>
+ <true/>
+ <key>Sidebar</key>
+ <true/>
+ <key>SidebarWidth</key>
+ <integer>120</integer>
+ <key>VisibleRegion</key>
+ <string>{{-108, 0}, {792.222, 718.889}}</string>
+ <key>Zoom</key>
+ <real>0.89999997615814209</real>
+ <key>ZoomValues</key>
+ <array>
+ <array>
+ <string>Canvas 1</string>
+ <real>0.89999997615814209</real>
+ <real>1.7200000286102295</real>
+ </array>
+ </array>
+ </dict>
+ <key>saveQuickLookFiles</key>
+ <string>NO</string>
+</dict>
+</plist>
diff --git a/docs/html/images/fundamentals/fragments.png b/docs/html/images/fundamentals/fragments.png
index b3b7b23..bf986b1 100644
--- a/docs/html/images/fundamentals/fragments.png
+++ b/docs/html/images/fundamentals/fragments.png
Binary files differ
diff --git a/docs/html/images/practices/actionbar-phone-splitaction.png b/docs/html/images/practices/actionbar-phone-splitaction.png
new file mode 100644
index 0000000..a0081e7
--- /dev/null
+++ b/docs/html/images/practices/actionbar-phone-splitaction.png
Binary files differ
diff --git a/docs/html/images/practices/actionbar-phone-tablet.png b/docs/html/images/practices/actionbar-phone-tablet.png
new file mode 100644
index 0000000..430ea85
--- /dev/null
+++ b/docs/html/images/practices/actionbar-phone-tablet.png
Binary files differ
diff --git a/docs/html/images/publishing/publishing_overview.png b/docs/html/images/publishing/publishing_overview.png
new file mode 100755
index 0000000..0d88b4f
--- /dev/null
+++ b/docs/html/images/publishing/publishing_overview.png
Binary files differ
diff --git a/docs/html/images/publishing/publishing_overview_prep.png b/docs/html/images/publishing/publishing_overview_prep.png
new file mode 100755
index 0000000..7a300f4
--- /dev/null
+++ b/docs/html/images/publishing/publishing_overview_prep.png
Binary files differ
diff --git a/docs/html/images/publishing/publishing_preparing.png b/docs/html/images/publishing/publishing_preparing.png
new file mode 100755
index 0000000..40c0ac6
--- /dev/null
+++ b/docs/html/images/publishing/publishing_preparing.png
Binary files differ
diff --git a/docs/html/images/publishing/publishing_unknown_sources.png b/docs/html/images/publishing/publishing_unknown_sources.png
new file mode 100755
index 0000000..ad310a1
--- /dev/null
+++ b/docs/html/images/publishing/publishing_unknown_sources.png
Binary files differ
diff --git a/docs/html/images/publishing/publishing_via_email.png b/docs/html/images/publishing/publishing_via_email.png
new file mode 100755
index 0000000..54c64bd
--- /dev/null
+++ b/docs/html/images/publishing/publishing_via_email.png
Binary files differ
diff --git a/docs/html/resources/resources-data.js b/docs/html/resources/resources-data.js
index 38357ef..164bd16 100644
--- a/docs/html/resources/resources-data.js
+++ b/docs/html/resources/resources-data.js
@@ -601,10 +601,20 @@
tags: ['sample', 'input', 'new'],
path: 'samples/SpellChecker/SampleSpellCheckerService/index.html',
title: {
- en: 'Spell Checker'
+ en: 'Spell Checker Service'
},
description: {
- en: 'An example spell checker service, using the <a href="'+toRoot+'reference/android/service/textservice/SpellCheckerService.html"><code>SpellCheckerservice</code></a>.'
+ en: 'An example spell checker service, using the <a href="'+toRoot+'reference/android/service/textservice/SpellCheckerService.html"><code>SpellCheckerService</code></a>.'
+ }
+ },
+ {
+ tags: ['sample', 'input', 'new'],
+ path: 'samples/SpellChecker/HelloSpellChecker/index.html',
+ title: {
+ en: 'Spell Checker Client'
+ },
+ description: {
+ en: 'An example spell checker client, using the <a href="'+toRoot+'reference/android/view/textservice/TextServicesManager.html"><code>TextServicesManager</code></a> and <a href="'+toRoot+'reference/android/view/textservice/SpellCheckerSession.html"><code>SpellCheckerSession</code></a>.'
}
},
{
diff --git a/docs/html/sdk/android-4.0.jd b/docs/html/sdk/android-4.0.jd
index b6381fc..cad89c2 100644
--- a/docs/html/sdk/android-4.0.jd
+++ b/docs/html/sdk/android-4.0.jd
@@ -264,10 +264,11 @@
<h4>Event intent</h4>
-<p>If all you want to do is add an event to the user’s calendar, you can use an
-{@link android.content.Intent#ACTION_INSERT} intent with a {@code "vnd.android.cursor.item/event"}
-MIME type to start an activity in the Calendar app that creates new events. Using the intent does
-not require any permission and you can specify event details with the following extras:</p>
+<p>If all you want to do is add an event to the user’s calendar, you can use an {@link
+android.content.Intent#ACTION_INSERT} intent with the data defined by {@link
+android.provider.CalendarContract.Events#CONTENT_URI Events.CONTENT_URI} in order to start an
+activity in the Calendar app that creates new events. Using the intent does not require any
+permission and you can specify event details with the following extras:</p>
<ul>
<li>{@link android.provider.CalendarContract.EventsColumns#TITLE Events.TITLE}: Name for the
@@ -957,8 +958,10 @@
include a {@code <meta-data>} element that declares configuration information for the spell
checker. </p>
-<p>See the <a href="{@docRoot}resources/samples/SpellChecker/SampleSpellCheckerService/index.html">
-Spell Checker</a> sample app for example code.</p>
+<p>See the sample <a href="{@docRoot}resources/samples/SpellChecker/SampleSpellCheckerService/index.html">
+Spell Checker Service</a> app and
+sample <a href="{@docRoot}resources/samples/SpellChecker/HelloSpellChecker/index.html">
+Spell Checker Client</a> app for example code.</p>
diff --git a/media/java/android/media/CamcorderProfile.java b/media/java/android/media/CamcorderProfile.java
index 51a45cd..7d60c55 100644
--- a/media/java/android/media/CamcorderProfile.java
+++ b/media/java/android/media/CamcorderProfile.java
@@ -82,7 +82,6 @@
/**
* Quality level corresponding to the QVGA (320x240) resolution.
- * {@hide}
*/
public static final int QUALITY_QVGA = 7;
@@ -127,7 +126,6 @@
/**
* Time lapse quality level corresponding to the QVGA (320 x 240) resolution.
- * {@hide}
*/
public static final int QUALITY_TIME_LAPSE_QVGA = 1007;
diff --git a/media/java/android/media/MediaRecorder.java b/media/java/android/media/MediaRecorder.java
index 8f5d0e5..2a11d19 100644
--- a/media/java/android/media/MediaRecorder.java
+++ b/media/java/android/media/MediaRecorder.java
@@ -299,7 +299,7 @@
setVideoEncodingBitRate(profile.videoBitRate);
setVideoEncoder(profile.videoCodec);
if (profile.quality >= CamcorderProfile.QUALITY_TIME_LAPSE_LOW &&
- profile.quality <= CamcorderProfile.QUALITY_TIME_LAPSE_1080P) {
+ profile.quality <= CamcorderProfile.QUALITY_TIME_LAPSE_QVGA) {
// Enable time lapse. Also don't set audio for time lapse.
setParameter(String.format("time-lapse-enable=1"));
} else {
diff --git a/media/libstagefright/AwesomePlayer.cpp b/media/libstagefright/AwesomePlayer.cpp
index 1c7e58d..f37e75b 100644
--- a/media/libstagefright/AwesomePlayer.cpp
+++ b/media/libstagefright/AwesomePlayer.cpp
@@ -385,10 +385,12 @@
for (size_t i = 0; i < extractor->countTracks(); ++i) {
sp<MetaData> meta = extractor->getTrackMetaData(i);
- const char *mime;
- CHECK(meta->findCString(kKeyMIMEType, &mime));
+ const char *_mime;
+ CHECK(meta->findCString(kKeyMIMEType, &_mime));
- if (!haveVideo && !strncasecmp(mime, "video/", 6)) {
+ String8 mime = String8(_mime);
+
+ if (!haveVideo && !strncasecmp(mime.string(), "video/", 6)) {
setVideoSource(extractor->getTrack(i));
haveVideo = true;
@@ -409,9 +411,9 @@
mStats.mTracks.push();
TrackStat *stat =
&mStats.mTracks.editItemAt(mStats.mVideoTrackIndex);
- stat->mMIME = mime;
+ stat->mMIME = mime.string();
}
- } else if (!haveAudio && !strncasecmp(mime, "audio/", 6)) {
+ } else if (!haveAudio && !strncasecmp(mime.string(), "audio/", 6)) {
setAudioSource(extractor->getTrack(i));
haveAudio = true;
@@ -421,10 +423,10 @@
mStats.mTracks.push();
TrackStat *stat =
&mStats.mTracks.editItemAt(mStats.mAudioTrackIndex);
- stat->mMIME = mime;
+ stat->mMIME = mime.string();
}
- if (!strcasecmp(mime, MEDIA_MIMETYPE_AUDIO_VORBIS)) {
+ if (!strcasecmp(mime.string(), MEDIA_MIMETYPE_AUDIO_VORBIS)) {
// Only do this for vorbis audio, none of the other audio
// formats even support this ringtone specific hack and
// retrieving the metadata on some extractors may turn out
@@ -436,7 +438,7 @@
modifyFlags(AUTO_LOOPING, SET);
}
}
- } else if (!strcasecmp(mime, MEDIA_MIMETYPE_TEXT_3GPP)) {
+ } else if (!strcasecmp(mime.string(), MEDIA_MIMETYPE_TEXT_3GPP)) {
addTextSource(extractor->getTrack(i));
}
}
diff --git a/packages/SystemUI/res/layout-sw600dp/status_bar_notification_area.xml b/packages/SystemUI/res/layout-sw600dp/status_bar_notification_area.xml
index 5e254e8..739f3aa 100644
--- a/packages/SystemUI/res/layout-sw600dp/status_bar_notification_area.xml
+++ b/packages/SystemUI/res/layout-sw600dp/status_bar_notification_area.xml
@@ -116,22 +116,23 @@
android:orientation="horizontal"
android:gravity="center"
>
- <ImageView
- android:id="@+id/bluetooth"
- android:layout_height="wrap_content"
- android:layout_width="wrap_content"
- android:visibility="gone"
- />
<include layout="@layout/signal_cluster_view"
android:id="@+id/signal_cluster"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<ImageView
+ android:id="@+id/bluetooth"
+ android:layout_height="wrap_content"
+ android:layout_width="wrap_content"
+ android:paddingLeft="4dip"
+ android:visibility="gone"
+ />
+ <ImageView
android:id="@+id/battery"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
- android:paddingLeft="6dip"
+ android:paddingLeft="4dip"
/>
</LinearLayout>
</LinearLayout>
diff --git a/packages/SystemUI/res/values-de/strings.xml b/packages/SystemUI/res/values-de/strings.xml
index aac201f..43577a6 100644
--- a/packages/SystemUI/res/values-de/strings.xml
+++ b/packages/SystemUI/res/values-de/strings.xml
@@ -64,7 +64,7 @@
<string name="compat_mode_help_body" msgid="4946726776359270040">"Wenn eine App für einen kleineren Bildschirm ausgelegt ist, wird ein Zoom-Steuerelement neben der Uhr angezeigt."</string>
<string name="screenshot_saving_ticker" msgid="7403652894056693515">"Screenshot wird gespeichert..."</string>
<string name="screenshot_saving_title" msgid="8242282144535555697">"Screenshot wird gespeichert..."</string>
- <string name="screenshot_saving_text" msgid="2419718443411738818">"Screenshot wird gespeichert."</string>
+ <string name="screenshot_saving_text" msgid="2419718443411738818">"Screenshot wird gespeichert..."</string>
<string name="screenshot_saved_title" msgid="6461865960961414961">"Screenshot aufgenommen"</string>
<string name="screenshot_saved_text" msgid="1152839647677558815">"Zum Anzeigen Ihres Screenshots berühren"</string>
<string name="screenshot_failed_title" msgid="705781116746922771">"Screenshot konnte nicht aufgenommen werden."</string>
@@ -128,7 +128,7 @@
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"4G-Daten deaktiviert"</string>
<string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Mobile Daten deaktiviert"</string>
<string name="data_usage_disabled_dialog_title" msgid="2086815304858964954">"Daten deaktiviert"</string>
- <string name="data_usage_disabled_dialog" msgid="3853117269051806280">"Sie haben das angegebene Limit für den Datenverbrauch erreicht."\n\n"Wenn Sie die Datennutzung erneut aktivieren, berechnet Ihr Mobilfunkanbieter unter Umständen zusätzliche Gebühren."</string>
+ <string name="data_usage_disabled_dialog" msgid="3853117269051806280">"Sie haben die angegebenen Grenze für die Datennutzung erreicht."\n\n"Wenn Sie die Datennutzung erneut aktivieren, berechnet Ihr Mobilfunkanbieter unter Umständen zusätzliche Gebühren."</string>
<string name="data_usage_disabled_dialog_enable" msgid="7729772039208664606">"Daten erneut aktivieren"</string>
<string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Keine Internetverbindung"</string>
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"WLAN verbunden"</string>
diff --git a/packages/SystemUI/res/values-it/strings.xml b/packages/SystemUI/res/values-it/strings.xml
index 2ec6f31..f7bd146 100644
--- a/packages/SystemUI/res/values-it/strings.xml
+++ b/packages/SystemUI/res/values-it/strings.xml
@@ -64,7 +64,7 @@
<string name="compat_mode_help_body" msgid="4946726776359270040">"Se un\'applicazione è stata progettata per uno schermo più piccolo, accanto all\'orologio viene visualizzato un controllo dello zoom."</string>
<string name="screenshot_saving_ticker" msgid="7403652894056693515">"Salvataggio screenshot..."</string>
<string name="screenshot_saving_title" msgid="8242282144535555697">"Salvataggio screenshot..."</string>
- <string name="screenshot_saving_text" msgid="2419718443411738818">"Salvataggio screenshot..."</string>
+ <string name="screenshot_saving_text" msgid="2419718443411738818">"Screenshot in corso di salvataggio."</string>
<string name="screenshot_saved_title" msgid="6461865960961414961">"Screenshot acquisito."</string>
<string name="screenshot_saved_text" msgid="1152839647677558815">"Tocca per visualizzare il tuo screenshot."</string>
<string name="screenshot_failed_title" msgid="705781116746922771">"Impossibile acquisire lo screenshot."</string>
diff --git a/packages/SystemUI/res/values-nb/strings.xml b/packages/SystemUI/res/values-nb/strings.xml
index 7408755..3e4ecb5 100644
--- a/packages/SystemUI/res/values-nb/strings.xml
+++ b/packages/SystemUI/res/values-nb/strings.xml
@@ -65,14 +65,14 @@
<string name="screenshot_saving_ticker" msgid="7403652894056693515">"Lagrer skjermdumpen …"</string>
<string name="screenshot_saving_title" msgid="8242282144535555697">"Lagrer skjermdumpen …"</string>
<string name="screenshot_saving_text" msgid="2419718443411738818">"Skjermdumpen lagres."</string>
- <string name="screenshot_saved_title" msgid="6461865960961414961">"Skjermdumpen lagret."</string>
+ <string name="screenshot_saved_title" msgid="6461865960961414961">"Skjermdumpen er lagret."</string>
<string name="screenshot_saved_text" msgid="1152839647677558815">"Trykk for å se skjermdumpen."</string>
- <string name="screenshot_failed_title" msgid="705781116746922771">"Kan ikke avbilde skjermdumpen."</string>
+ <string name="screenshot_failed_title" msgid="705781116746922771">"Kan ikke lagre skjermdumpen."</string>
<string name="screenshot_failed_text" msgid="8134011269572415402">"Kan ikke ikke lagre skjermdumpen. Det er mulig ekstern lagring er i bruk."</string>
<string name="usb_preference_title" msgid="6551050377388882787">"Altern. for USB-filoverføring"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Sett inn som mediespiller (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Sett inn som kamera (PTP)"</string>
- <string name="installer_cd_button_title" msgid="2312667578562201583">"Installer Android File Transfer-app for Mac"</string>
+ <string name="installer_cd_button_title" msgid="2312667578562201583">"Installer Android File Transfer-appen for Mac"</string>
<string name="accessibility_back" msgid="567011538994429120">"Tilbake"</string>
<string name="accessibility_home" msgid="8217216074895377641">"Startside"</string>
<string name="accessibility_menu" msgid="316839303324695949">"Meny"</string>
@@ -101,7 +101,7 @@
<string name="accessibility_wifi_one_bar" msgid="6854947280074467207">"Dekningssignal for Wi-Fi med én stolpe."</string>
<string name="accessibility_wifi_two_bars" msgid="3344340012058984348">"Dekningssignal for Wi-Fi med to stolper."</string>
<string name="accessibility_wifi_three_bars" msgid="928322805193265041">"Dekningssignal for Wi-Fi med tre stolper."</string>
- <string name="accessibility_wifi_signal_full" msgid="4826278754383492058">"Fullstendig Wi-Fi-signal"</string>
+ <string name="accessibility_wifi_signal_full" msgid="4826278754383492058">"Fullt Wi-Fi-signal"</string>
<string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
<string name="accessibility_data_connection_3g" msgid="8628562305003568260">"3G"</string>
<string name="accessibility_data_connection_3.5g" msgid="8664845609981692001">"3,5G"</string>
@@ -126,7 +126,7 @@
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"4G-data er deaktivert"</string>
<string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Mobildata er deaktivert"</string>
<string name="data_usage_disabled_dialog_title" msgid="2086815304858964954">"Data deaktivert"</string>
- <string name="data_usage_disabled_dialog" msgid="3853117269051806280">"Du har nådd den angitte databruksgrensen."\n\n"Hvis du aktiverer data på nytt, kan du bli belastet med kostnader av operatøren."</string>
+ <string name="data_usage_disabled_dialog" msgid="3853117269051806280">"Du har nådd den angitte databruksgrensen."\n\n"Hvis du slår på igjen databruk, kan du bli belastet med kostnader av operatøren."</string>
<string name="data_usage_disabled_dialog_enable" msgid="7729772039208664606">"Aktiver data på nytt"</string>
<string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Ingen Internett-forbindelse"</string>
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi tilkoblet"</string>
diff --git a/packages/SystemUI/res/values-nl/strings.xml b/packages/SystemUI/res/values-nl/strings.xml
index f7e0e56..0684acf 100644
--- a/packages/SystemUI/res/values-nl/strings.xml
+++ b/packages/SystemUI/res/values-nl/strings.xml
@@ -53,7 +53,7 @@
<string name="usb_accessory_permission_prompt" msgid="5171775411178865750">"De app <xliff:g id="APPLICATION">%1$s</xliff:g> toegang geven tot het USB-accessoire?"</string>
<string name="usb_device_confirm_prompt" msgid="5161205258635253206">"<xliff:g id="ACTIVITY">%1$s</xliff:g> openen wanneer dit USB-apparaat wordt aangesloten?"</string>
<string name="usb_accessory_confirm_prompt" msgid="3808984931830229888">"<xliff:g id="ACTIVITY">%1$s</xliff:g> openen wanneer dit USB-accessoire wordt aangesloten?"</string>
- <string name="usb_accessory_uri_prompt" msgid="513450621413733343">"Geen geïnstalleerde apps werken met dit USB-accessoire. Meer informatie op: <xliff:g id="URL">%1$s</xliff:g>"</string>
+ <string name="usb_accessory_uri_prompt" msgid="513450621413733343">"Er werken geen geïnstalleerde apps met dit USB-accessoire. Meer informatie op: <xliff:g id="URL">%1$s</xliff:g>"</string>
<string name="title_usb_accessory" msgid="4966265263465181372">"USB-accessoire"</string>
<string name="label_view" msgid="6304565553218192990">"Weergeven"</string>
<string name="always_use_device" msgid="1450287437017315906">"Standaard gebruiken voor dit USB-apparaat"</string>
diff --git a/packages/SystemUI/res/values-pl/strings.xml b/packages/SystemUI/res/values-pl/strings.xml
index 19e2ee31..ecfbe63ec 100644
--- a/packages/SystemUI/res/values-pl/strings.xml
+++ b/packages/SystemUI/res/values-pl/strings.xml
@@ -35,7 +35,7 @@
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Bieżące"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Powiadomienia"</string>
<string name="battery_low_title" msgid="2783104807551211639">"Podłącz ładowarkę"</string>
- <string name="battery_low_subtitle" msgid="1752040062087829196">"Bateria wkrótce zostanie rozładowana."</string>
+ <string name="battery_low_subtitle" msgid="1752040062087829196">"Bateria wkrótce się rozładuje."</string>
<string name="battery_low_percent_format" msgid="1077244949318261761">"Pozostało: <xliff:g id="NUMBER">%d%%</xliff:g>"</string>
<string name="invalid_charger" msgid="4549105996740522523">"Ładowanie przy użyciu złącza USB nie jest obsługiwane."\n"Należy używać tylko dołączonej ładowarki."</string>
<string name="battery_low_why" msgid="7279169609518386372">"Użycie baterii"</string>
diff --git a/packages/SystemUI/res/values-ru/strings.xml b/packages/SystemUI/res/values-ru/strings.xml
index 20bb411..12b32f7 100644
--- a/packages/SystemUI/res/values-ru/strings.xml
+++ b/packages/SystemUI/res/values-ru/strings.xml
@@ -66,7 +66,7 @@
<string name="screenshot_saving_title" msgid="8242282144535555697">"Сохранение..."</string>
<string name="screenshot_saving_text" msgid="2419718443411738818">"Сохранение..."</string>
<string name="screenshot_saved_title" msgid="6461865960961414961">"Скриншот сохранен."</string>
- <string name="screenshot_saved_text" msgid="1152839647677558815">"Нажмите, чтобы просмотреть скриншот"</string>
+ <string name="screenshot_saved_text" msgid="1152839647677558815">"Нажмите, чтобы просмотреть"</string>
<string name="screenshot_failed_title" msgid="705781116746922771">"Не удалось сохранить скриншот."</string>
<string name="screenshot_failed_text" msgid="8134011269572415402">"Не удалось сохранить скриншот. Возможно, накопители заняты."</string>
<string name="usb_preference_title" msgid="6551050377388882787">"Параметры передачи через USB"</string>
diff --git a/packages/SystemUI/res/values-zh-rCN/strings.xml b/packages/SystemUI/res/values-zh-rCN/strings.xml
index 8a661ec..64adf0d 100644
--- a/packages/SystemUI/res/values-zh-rCN/strings.xml
+++ b/packages/SystemUI/res/values-zh-rCN/strings.xml
@@ -46,7 +46,7 @@
<string name="status_bar_settings_mute_label" msgid="554682549917429396">"静音"</string>
<string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"自动"</string>
<string name="status_bar_settings_notifications" msgid="397146176280905137">"通知"</string>
- <string name="bluetooth_tethered" msgid="7094101612161133267">"蓝牙已绑定"</string>
+ <string name="bluetooth_tethered" msgid="7094101612161133267">"已通过蓝牙共享网络"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="3504292471512317827">"设置输入法"</string>
<string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"使用物理键盘"</string>
<string name="usb_device_permission_prompt" msgid="834698001271562057">"允许应用程序“<xliff:g id="APPLICATION">%1$s</xliff:g>”访问该 USB 设备吗?"</string>
@@ -110,7 +110,7 @@
<string name="accessibility_data_connection_edge" msgid="4477457051631979278">"EDGE"</string>
<string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"Wi-Fi"</string>
<string name="accessibility_no_sim" msgid="8274017118472455155">"无 SIM 卡。"</string>
- <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"蓝牙网络共享。"</string>
+ <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"蓝牙共享网络。"</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"飞行模式。"</string>
<!-- String.format failed for translation -->
<!-- no translation found for accessibility_battery_level (7451474187113371965) -->
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BluetoothController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BluetoothController.java
index c6f416f..903a300 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BluetoothController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BluetoothController.java
@@ -35,6 +35,7 @@
private ArrayList<ImageView> mIconViews = new ArrayList<ImageView>();
private int mIconId = R.drawable.stat_sys_data_bluetooth;
+ private int mContentDescriptionId = 0;
private boolean mEnabled;
public BluetoothController(Context context) {
@@ -44,6 +45,11 @@
filter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);
filter.addAction(BluetoothAdapter.ACTION_CONNECTION_STATE_CHANGED);
context.registerReceiver(this, filter);
+
+ final BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
+ handleAdapterStateChange(adapter.getState());
+ handleConnectionStateChange(adapter.getConnectionState());
+ refreshViews();
}
public void addIconView(ImageView v) {
@@ -52,24 +58,43 @@
@Override
public void onReceive(Context context, Intent intent) {
- int state = intent.getIntExtra(BluetoothAdapter.EXTRA_CONNECTION_STATE,
- BluetoothAdapter.STATE_DISCONNECTED);
- int contentDescriptionResId = 0;
+ final String action = intent.getAction();
- if (state == BluetoothAdapter.STATE_CONNECTED) {
+ if (action.equals(BluetoothAdapter.ACTION_STATE_CHANGED)) {
+ handleAdapterStateChange(
+ intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, BluetoothAdapter.ERROR));
+ } else if (action.equals(BluetoothAdapter.ACTION_CONNECTION_STATE_CHANGED)) {
+ handleConnectionStateChange(
+ intent.getIntExtra(BluetoothAdapter.EXTRA_CONNECTION_STATE,
+ BluetoothAdapter.STATE_DISCONNECTED));
+ }
+ refreshViews();
+ }
+
+ public void handleAdapterStateChange(int adapterState) {
+ mEnabled = (adapterState == BluetoothAdapter.STATE_ON);
+ }
+
+ public void handleConnectionStateChange(int connectionState) {
+ final boolean connected = (connectionState == BluetoothAdapter.STATE_CONNECTED);
+ if (connected) {
mIconId = R.drawable.stat_sys_data_bluetooth_connected;
- contentDescriptionResId = R.string.accessibility_bluetooth_connected;
+ mContentDescriptionId = R.string.accessibility_bluetooth_connected;
} else {
mIconId = R.drawable.stat_sys_data_bluetooth;
- contentDescriptionResId = R.string.accessibility_bluetooth_disconnected;
+ mContentDescriptionId = R.string.accessibility_bluetooth_disconnected;
}
+ }
+ public void refreshViews() {
int N = mIconViews.size();
for (int i=0; i<N; i++) {
ImageView v = mIconViews.get(i);
v.setImageResource(mIconId);
v.setVisibility(mEnabled ? View.VISIBLE : View.GONE);
- v.setContentDescription(mContext.getString(contentDescriptionResId));
+ v.setContentDescription((mContentDescriptionId == 0)
+ ? null
+ : mContext.getString(mContentDescriptionId));
}
}
}
diff --git a/services/java/com/android/server/PowerManagerService.java b/services/java/com/android/server/PowerManagerService.java
index 8abf07e..fdae4bd 100644
--- a/services/java/com/android/server/PowerManagerService.java
+++ b/services/java/com/android/server/PowerManagerService.java
@@ -264,7 +264,7 @@
// could be either static or controllable at runtime
private static final boolean mSpew = false;
private static final boolean mDebugProximitySensor = (false || mSpew);
- private static final boolean mDebugLightSensor = (true || mSpew);
+ private static final boolean mDebugLightSensor = (false || mSpew);
private native void nativeInit();
private native void nativeSetPowerState(boolean screenOn, boolean screenBright);
diff --git a/services/java/com/android/server/connectivity/Tethering.java b/services/java/com/android/server/connectivity/Tethering.java
index 6b9c088..1107fe9 100644
--- a/services/java/com/android/server/connectivity/Tethering.java
+++ b/services/java/com/android/server/connectivity/Tethering.java
@@ -160,13 +160,24 @@
mDhcpRange = DHCP_DEFAULT_RANGE;
}
- mTetherableUsbRegexs = context.getResources().getStringArray(
+ // load device config info
+ updateConfiguration();
+
+ // TODO - remove and rely on real notifications of the current iface
+ mDnsServers = new String[2];
+ mDnsServers[0] = DNS_DEFAULT_SERVER1;
+ mDnsServers[1] = DNS_DEFAULT_SERVER2;
+ }
+
+ void updateConfiguration() {
+ mTetherableUsbRegexs = mContext.getResources().getStringArray(
com.android.internal.R.array.config_tether_usb_regexs);
- mTetherableWifiRegexs = context.getResources().getStringArray(
+ mTetherableWifiRegexs = mContext.getResources().getStringArray(
com.android.internal.R.array.config_tether_wifi_regexs);
- mTetherableBluetoothRegexs = context.getResources().getStringArray(
+ mTetherableBluetoothRegexs = mContext.getResources().getStringArray(
com.android.internal.R.array.config_tether_bluetooth_regexs);
- int ifaceTypes[] = context.getResources().getIntArray(
+
+ int ifaceTypes[] = mContext.getResources().getIntArray(
com.android.internal.R.array.config_tether_upstream_types);
mUpstreamIfaceTypes = new ArrayList();
for (int i : ifaceTypes) {
@@ -175,11 +186,6 @@
// check if the upstream type list needs to be modified due to secure-settings
checkDunRequired();
-
- // TODO - remove and rely on real notifications of the current iface
- mDnsServers = new String[2];
- mDnsServers[0] = DNS_DEFAULT_SERVER1;
- mDnsServers[1] = DNS_DEFAULT_SERVER2;
}
public void interfaceStatusChanged(String iface, boolean up) {
@@ -575,6 +581,7 @@
}
public int[] getUpstreamIfaceTypes() {
+ updateConfiguration();
int values[] = new int[mUpstreamIfaceTypes.size()];
Iterator<Integer> iterator = mUpstreamIfaceTypes.iterator();
for (int i=0; i < mUpstreamIfaceTypes.size(); i++) {
@@ -584,11 +591,13 @@
}
public void checkDunRequired() {
- int requiredApn = ((Settings.Secure.getInt(mContext.getContentResolver(),
- Settings.Secure.TETHER_DUN_REQUIRED, 0) == 1) ?
- ConnectivityManager.TYPE_MOBILE_DUN :
- ConnectivityManager.TYPE_MOBILE_HIPRI);
- if (mPreferredUpstreamMobileApn != requiredApn) {
+ int secureSetting = Settings.Secure.getInt(mContext.getContentResolver(),
+ Settings.Secure.TETHER_DUN_REQUIRED, 2);
+ // 2 = not set, 0 = DUN not required, 1 = DUN required
+ if (secureSetting != 2) {
+ int requiredApn = (secureSetting == 1 ?
+ ConnectivityManager.TYPE_MOBILE_DUN :
+ ConnectivityManager.TYPE_MOBILE_HIPRI);
if (requiredApn == ConnectivityManager.TYPE_MOBILE_DUN) {
while (mUpstreamIfaceTypes.contains(MOBILE_TYPE)) {
mUpstreamIfaceTypes.remove(MOBILE_TYPE);
@@ -610,7 +619,11 @@
mUpstreamIfaceTypes.add(HIPRI_TYPE);
}
}
- mPreferredUpstreamMobileApn = requiredApn;
+ }
+ if (mUpstreamIfaceTypes.contains(DUN_TYPE)) {
+ mPreferredUpstreamMobileApn = ConnectivityManager.TYPE_MOBILE_DUN;
+ } else {
+ mPreferredUpstreamMobileApn = ConnectivityManager.TYPE_MOBILE_HIPRI;
}
}
@@ -1251,6 +1264,15 @@
int upType = ConnectivityManager.TYPE_NONE;
String iface = null;
+ updateConfiguration();
+
+ if (VDBG) {
+ Log.d(TAG, "chooseUpstreamType has upstream iface types:");
+ for (Integer netType : mUpstreamIfaceTypes) {
+ Log.d(TAG, " " + netType);
+ }
+ }
+
for (Integer netType : mUpstreamIfaceTypes) {
NetworkInfo info = null;
try {
@@ -1314,7 +1336,6 @@
boolean retValue = true;
switch (message.what) {
case CMD_TETHER_MODE_REQUESTED:
- checkDunRequired();
TetherInterfaceSM who = (TetherInterfaceSM)message.obj;
if (VDBG) Log.d(TAG, "Tether Mode requested by " + who.toString());
mNotifyList.add(who);
@@ -1487,6 +1508,11 @@
return;
}
+ pw.println("mUpstreamIfaceTypes: ");
+ for (Integer netType : mUpstreamIfaceTypes) {
+ pw.println(" " + netType);
+ }
+
pw.println();
pw.println("Tether state:");
synchronized (mIfaces) {
diff --git a/wifi/java/android/net/wifi/p2p/package.html b/wifi/java/android/net/wifi/p2p/package.html
new file mode 100644
index 0000000..94d695f
--- /dev/null
+++ b/wifi/java/android/net/wifi/p2p/package.html
@@ -0,0 +1,68 @@
+<HTML>
+<BODY>
+<p>Provides classes to create peer-to-peer (P2P) connections with Wi-Fi Direct.</p>
+
+<p>Using these APIs, you can discover and connect to other devices when each
+device supports Wi-Fi Direct, then communicate over a speedy connection across distances much longer
+than a Bluetooth connection. The primary class you need to work with is {@link
+android.net.wifi.p2p.WifiP2pManager}, which you can acquire by calling {@link
+android.app.Activity#getSystemService getSystemService(WIFI_P2P_SERVICE)}. The {@link
+android.net.wifi.p2p.WifiP2pManager} includes APIs that allow you to:</p>
+<ul>
+<li>Initialize your application for P2P connections by calling {@link
+android.net.wifi.p2p.WifiP2pManager#initialize initialize()}</li>
+
+<li>Discover nearby devices by calling {@link android.net.wifi.p2p.WifiP2pManager#discoverPeers
+discoverPeers()}</li>
+
+<li>Start a P2P connection by calling {@link android.net.wifi.p2p.WifiP2pManager#connect
+connect()}</li>
+<li>And more</li>
+</ul>
+
+<p>Several other interfaces and classes are necessary as well, such as:</p>
+<ul>
+<li>The {@link android.net.wifi.p2p.WifiP2pManager.ActionListener} interface allows you to receive
+callbacks when an operation such as discovering peers or connecting to them succeeds or fails.</li>
+
+<li>{@link android.net.wifi.p2p.WifiP2pManager.PeerListListener} interface allows you to receive
+information about discovered peers. The callback provides a {@link
+android.net.wifi.p2p.WifiP2pDeviceList}, from which you can retrieve a {@link
+android.net.wifi.p2p.WifiP2pDevice} object for each device within range and get information such as
+the device name, address, device type, the WPS configurations the device supports, and more.</li>
+
+<li>The {@link android.net.wifi.p2p.WifiP2pManager.GroupInfoListener} interface allows you to
+receive information about a P2P group. The callback provides a {@link
+android.net.wifi.p2p.WifiP2pGroup} object, which provides group information such as the owner, the
+network name, and passphrase.</li>
+
+<li>{@link android.net.wifi.p2p.WifiP2pManager.ConnectionInfoListener} interface allows you to
+receive information about the current connection. The callback provides a {@link
+android.net.wifi.p2p.WifiP2pInfo} object, which has information such as whether a group has been
+formed and who is the group owner.</li>
+</ul>
+
+<p>In order to use the Wi-Fi P2P APIs, your app must request the following user permissions:</p>
+<ul>
+<li>{@link android.Manifest.permission#ACCESS_WIFI_STATE}</li>
+<li>{@link android.Manifest.permission#CHANGE_WIFI_STATE}</li>
+<li>{@link android.Manifest.permission#INTERNET} (although your app doesn’t technically connect
+to the Internet, communicating to Wi-Fi Direct peers with standard java sockets requires Internet
+permission).</li>
+</ul>
+
+<p>For example code, see the <a href="{@docRoot}resources/samples/WiFiDirectDemo/index.html">Wi-Fi
+Direct Demo</a> sample application.</p>
+
+<p class="note"><strong>Note:</strong> Not all Android-powered devices support Wi-Fi
+Direct. If your application uses Wi-Fi Direct, declare so with a <a
+href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code <uses-feature>}</a>
+element in the manifest file:</p>
+<pre>
+<manifest ...>
+ <uses-feature android:name="android.hardware.wifi.direct" />
+ ...
+</manifest>
+</pre>
+</BODY>
+</HTML>
diff --git a/wifi/java/android/net/wifi/package.html b/wifi/java/android/net/wifi/package.html
index 530313d..6f0d337 100644
--- a/wifi/java/android/net/wifi/package.html
+++ b/wifi/java/android/net/wifi/package.html
@@ -1,12 +1,29 @@
<HTML>
<BODY>
-Provides classes to manage Wi-Fi functionality on the device.
+<p>Provides classes to manage Wi-Fi functionality on the device.</p>
<p>The Wi-Fi APIs provide a means by which applications can communicate
with the lower-level wireless stack that provides Wi-Fi network access. Almost all
information from the device supplicant is available, including the connected network's
link speed, IP address, negotiation state, and more, plus information about other
networks that are available. Some other API features include the ability to
scan, add, save, terminate and initiate Wi-Fi connections.</p>
-<p>Remember, not all Android devices are guaranteed to have Wi-Fi functionality.</p>
+
+<p>Some APIs may require the following user permissions:</p>
+<ul>
+ <li>{@link android.Manifest.permission#ACCESS_WIFI_STATE}</li>
+ <li>{@link android.Manifest.permission#CHANGE_WIFI_STATE}</li>
+ <li>{@link android.Manifest.permission#CHANGE_WIFI_MULTICAST_STATE}</li>
+</ul>
+
+<p class="note"><strong>Note:</strong> Not all Android-powered devices provide Wi-Fi functionality.
+If your application uses Wi-Fi, declare so with a <a
+href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code <uses-feature>}</a>
+element in the manifest file:</p>
+<pre>
+<manifest ...>
+ <uses-feature android:name="android.hardware.wifi" />
+ ...
+</manifest>
+</pre>
</BODY>
</HTML>