diff options
341 files changed, 4170 insertions, 13323 deletions
diff --git a/cmds/bootanimation/BootAnimation.cpp b/cmds/bootanimation/BootAnimation.cpp index a2d34e42f298..2fa1ee6b3869 100644 --- a/cmds/bootanimation/BootAnimation.cpp +++ b/cmds/bootanimation/BootAnimation.cpp @@ -68,15 +68,25 @@ static const char SYSTEM_ENCRYPTED_BOOTANIMATION_FILE[] = "/system/media/bootani static const char SYSTEM_DATA_DIR_PATH[] = "/data/system"; static const char SYSTEM_TIME_DIR_NAME[] = "time"; static const char SYSTEM_TIME_DIR_PATH[] = "/data/system/time"; +static const char CLOCK_FONT_ASSET[] = "images/clock_font.png"; +static const char CLOCK_FONT_ZIP_NAME[] = "clock_font.png"; static const char LAST_TIME_CHANGED_FILE_NAME[] = "last_time_change"; static const char LAST_TIME_CHANGED_FILE_PATH[] = "/data/system/time/last_time_change"; static const char ACCURATE_TIME_FLAG_FILE_NAME[] = "time_is_accurate"; static const char ACCURATE_TIME_FLAG_FILE_PATH[] = "/data/system/time/time_is_accurate"; // Java timestamp format. Don't show the clock if the date is before 2000-01-01 00:00:00. static const long long ACCURATE_TIME_EPOCH = 946684800000; +static constexpr char FONT_BEGIN_CHAR = ' '; +static constexpr char FONT_END_CHAR = '~' + 1; +static constexpr size_t FONT_NUM_CHARS = FONT_END_CHAR - FONT_BEGIN_CHAR + 1; +static constexpr size_t FONT_NUM_COLS = 16; +static constexpr size_t FONT_NUM_ROWS = FONT_NUM_CHARS / FONT_NUM_COLS; +static const int TEXT_CENTER_VALUE = INT_MAX; +static const int TEXT_MISSING_VALUE = INT_MIN; static const char EXIT_PROP_NAME[] = "service.bootanim.exit"; static const char PLAY_SOUND_PROP_NAME[] = "persist.sys.bootanim.play_sound"; static const int ANIM_ENTRY_NAME_MAX = 256; +static constexpr size_t TEXT_POS_LEN_MAX = 16; static const char BOOT_COMPLETED_PROP_NAME[] = "sys.boot_completed"; static const char BOOTREASON_PROP_NAME[] = "ro.boot.bootreason"; // bootreasons list in "system/core/bootstat/bootstat.cpp". @@ -175,15 +185,14 @@ status_t BootAnimation::initTexture(Texture* texture, AssetManager& assets, glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); + return NO_ERROR; } -status_t BootAnimation::initTexture(const Animation::Frame& frame) +status_t BootAnimation::initTexture(FileMap* map, int* width, int* height) { - //StopWatch watch("blah"); - SkBitmap bitmap; - SkMemoryStream stream(frame.map->getDataPtr(), frame.map->getDataLength()); + SkMemoryStream stream(map->getDataPtr(), map->getDataLength()); SkImageDecoder* codec = SkImageDecoder::Factory(&stream); if (codec != NULL) { codec->setDitherImage(false); @@ -196,7 +205,7 @@ status_t BootAnimation::initTexture(const Animation::Frame& frame) // FileMap memory is never released until application exit. // Release it now as the texture is already loaded and the memory used for // the packed resource can be released. - delete frame.map; + delete map; // ensure we can call getPixels(). No need to call unlock, since the // bitmap will go out of scope when we return from this method. @@ -242,6 +251,9 @@ status_t BootAnimation::initTexture(const Animation::Frame& frame) glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_CROP_RECT_OES, crop); + *width = w; + *height = h; + return NO_ERROR; } @@ -404,7 +416,6 @@ bool BootAnimation::android() return false; } - void BootAnimation::checkExit() { // Allow surface flinger to gracefully request shutdown char value[PROPERTY_VALUE_MAX]; @@ -415,6 +426,47 @@ void BootAnimation::checkExit() { } } +bool BootAnimation::validClock(const Animation::Part& part) { + return part.clockPosX != TEXT_MISSING_VALUE && part.clockPosY != TEXT_MISSING_VALUE; +} + +bool parseTextCoord(const char* str, int* dest) { + if (strcmp("c", str) == 0) { + *dest = TEXT_CENTER_VALUE; + return true; + } + + char* end; + int val = (int) strtol(str, &end, 0); + if (end == str || *end != '\0' || val == INT_MAX || val == INT_MIN) { + return false; + } + *dest = val; + return true; +} + +// Parse two position coordinates. If only string is non-empty, treat it as the y value. +void parsePosition(const char* str1, const char* str2, int* x, int* y) { + bool success = false; + if (strlen(str1) == 0) { // No values were specified + // success = false + } else if (strlen(str2) == 0) { // we have only one value + if (parseTextCoord(str1, y)) { + *x = TEXT_CENTER_VALUE; + success = true; + } + } else { + if (parseTextCoord(str1, x) && parseTextCoord(str2, y)) { + success = true; + } + } + + if (!success) { + *x = TEXT_MISSING_VALUE; + *y = TEXT_MISSING_VALUE; + } +} + // Parse a color represented as an HTML-style 'RRGGBB' string: each pair of // characters in str is a hex number in [0, 255], which are converted to // floating point values in the range [0.0, 1.0] and placed in the @@ -461,69 +513,105 @@ static bool readFile(ZipFileRO* zip, const char* name, String8& outString) return true; } -// The time glyphs are stored in a single image of height 64 pixels. Each digit is 40 pixels wide, -// and the colon character is half that at 20 pixels. The glyph order is '0123456789:'. -// We render 24 hour time. -void BootAnimation::drawTime(const Texture& clockTex, const int yPos) { - static constexpr char TIME_FORMAT[] = "%H:%M"; - static constexpr int TIME_LENGTH = sizeof(TIME_FORMAT); +// The font image should be a 96x2 array of character images. The +// columns are the printable ASCII characters 0x20 - 0x7f. The +// top row is regular text; the bottom row is bold. +status_t BootAnimation::initFont(Font* font, const char* fallback) { + status_t status = NO_ERROR; - static constexpr int DIGIT_HEIGHT = 64; - static constexpr int DIGIT_WIDTH = 40; - static constexpr int COLON_WIDTH = DIGIT_WIDTH / 2; - static constexpr int TIME_WIDTH = (DIGIT_WIDTH * 4) + COLON_WIDTH; + if (font->map != nullptr) { + glGenTextures(1, &font->texture.name); + glBindTexture(GL_TEXTURE_2D, font->texture.name); - if (clockTex.h < DIGIT_HEIGHT || clockTex.w < (10 * DIGIT_WIDTH + COLON_WIDTH)) { - ALOGE("Clock texture is too small; abandoning boot animation clock"); - mClockEnabled = false; - return; + status = initTexture(font->map, &font->texture.w, &font->texture.h); + + glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); + glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); + } else if (fallback != nullptr) { + status = initTexture(&font->texture, mAssets, fallback); + } else { + return NO_INIT; } - time_t rawtime; - time(&rawtime); - struct tm* timeInfo = localtime(&rawtime); + if (status == NO_ERROR) { + font->char_width = font->texture.w / FONT_NUM_COLS; + font->char_height = font->texture.h / FONT_NUM_ROWS / 2; // There are bold and regular rows + } - char timeBuff[TIME_LENGTH]; - size_t length = strftime(timeBuff, TIME_LENGTH, TIME_FORMAT, timeInfo); + return status; +} - if (length != TIME_LENGTH - 1) { - ALOGE("Couldn't format time; abandoning boot animation clock"); - mClockEnabled = false; - return; +void BootAnimation::drawText(const char* str, const Font& font, bool bold, int* x, int* y) { + glEnable(GL_BLEND); // Allow us to draw on top of the animation + glBindTexture(GL_TEXTURE_2D, font.texture.name); + + const int len = strlen(str); + const int strWidth = font.char_width * len; + + if (*x == TEXT_CENTER_VALUE) { + *x = (mWidth - strWidth) / 2; + } else if (*x < 0) { + *x = mWidth + *x - strWidth; + } + if (*y == TEXT_CENTER_VALUE) { + *y = (mHeight - font.char_height) / 2; + } else if (*y < 0) { + *y = mHeight + *y - font.char_height; } - glEnable(GL_BLEND); // Allow us to draw on top of the animation - glBindTexture(GL_TEXTURE_2D, clockTex.name); + int cropRect[4] = { 0, 0, font.char_width, -font.char_height }; - int xPos = (mWidth - TIME_WIDTH) / 2; - int cropRect[4] = { 0, DIGIT_HEIGHT, DIGIT_WIDTH, -DIGIT_HEIGHT }; + for (int i = 0; i < len; i++) { + char c = str[i]; - for (int i = 0; i < TIME_LENGTH - 1; i++) { - char c = timeBuff[i]; - int width = DIGIT_WIDTH; - int pos = c - '0'; // Position in the character list - if (pos < 0 || pos > 10) { - continue; - } - if (c == ':') { - width = COLON_WIDTH; + if (c < FONT_BEGIN_CHAR || c > FONT_END_CHAR) { + c = '?'; } // Crop the texture to only the pixels in the current glyph - int left = pos * DIGIT_WIDTH; - cropRect[0] = left; - cropRect[2] = width; + const int charPos = (c - FONT_BEGIN_CHAR); // Position in the list of valid characters + const int row = charPos / FONT_NUM_COLS; + const int col = charPos % FONT_NUM_COLS; + cropRect[0] = col * font.char_width; // Left of column + cropRect[1] = row * font.char_height * 2; // Top of row + // Move down to bottom of regular (one char_heigh) or bold (two char_heigh) line + cropRect[1] += bold ? 2 * font.char_height : font.char_height; glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_CROP_RECT_OES, cropRect); - glDrawTexiOES(xPos, yPos, 0, width, DIGIT_HEIGHT); + glDrawTexiOES(*x, *y, 0, font.char_width, font.char_height); - xPos += width; + *x += font.char_width; } glDisable(GL_BLEND); // Return to the animation's default behaviour glBindTexture(GL_TEXTURE_2D, 0); } +// We render 24 hour time. +void BootAnimation::drawClock(const Font& font, const int xPos, const int yPos) { + static constexpr char TIME_FORMAT[] = "%H:%M"; + static constexpr int TIME_LENGTH = 6; + + time_t rawtime; + time(&rawtime); + struct tm* timeInfo = localtime(&rawtime); + + char timeBuff[TIME_LENGTH]; + size_t length = strftime(timeBuff, TIME_LENGTH, TIME_FORMAT, timeInfo); + + if (length != TIME_LENGTH - 1) { + ALOGE("Couldn't format time; abandoning boot animation clock"); + mClockEnabled = false; + return; + } + + int x = xPos; + int y = yPos; + drawText(timeBuff, font, false, &x, &y); +} + bool BootAnimation::parseAnimationDesc(Animation& animation) { String8 desString; @@ -544,9 +632,10 @@ bool BootAnimation::parseAnimationDesc(Animation& animation) int height = 0; int count = 0; int pause = 0; - int clockPosY = -1; char path[ANIM_ENTRY_NAME_MAX]; char color[7] = "000000"; // default to black if unspecified + char clockPos1[TEXT_POS_LEN_MAX + 1] = ""; + char clockPos2[TEXT_POS_LEN_MAX + 1] = ""; char pathType; if (sscanf(l, "%d %d %d", &width, &height, &fps) == 3) { @@ -554,15 +643,15 @@ bool BootAnimation::parseAnimationDesc(Animation& animation) animation.width = width; animation.height = height; animation.fps = fps; - } else if (sscanf(l, " %c %d %d %s #%6s %d", - &pathType, &count, &pause, path, color, &clockPosY) >= 4) { - // ALOGD("> type=%c, count=%d, pause=%d, path=%s, color=%s, clockPosY=%d", pathType, count, pause, path, color, clockPosY); + } else if (sscanf(l, " %c %d %d %s #%6s %16s %16s", + &pathType, &count, &pause, path, color, clockPos1, clockPos2) >= 4) { + //ALOGD("> type=%c, count=%d, pause=%d, path=%s, color=%s, clockPos1=%s, clockPos2=%s", + // pathType, count, pause, path, color, clockPos1, clockPos2); Animation::Part part; part.playUntilComplete = pathType == 'c'; part.count = count; part.pause = pause; part.path = path; - part.clockPosY = clockPosY; part.audioData = NULL; part.animation = NULL; if (!parseColor(color, part.backgroundColor)) { @@ -571,6 +660,7 @@ bool BootAnimation::parseAnimationDesc(Animation& animation) part.backgroundColor[1] = 0.0f; part.backgroundColor[2] = 0.0f; } + parsePosition(clockPos1, clockPos2, &part.clockPosX, &part.clockPosY); animation.parts.add(part); } else if (strcmp(l, "$SYSTEM") == 0) { @@ -614,6 +704,14 @@ bool BootAnimation::preloadZip(Animation& animation) const String8 path(entryName.getPathDir()); const String8 leaf(entryName.getPathLeaf()); if (leaf.size() > 0) { + if (entryName == CLOCK_FONT_ZIP_NAME) { + FileMap* map = zip->createEntryFileMap(entry); + if (map) { + animation.clockFont.map = map; + } + continue; + } + for (size_t j = 0; j < pcount; j++) { if (path == animation.parts[j].path) { uint16_t method; @@ -698,7 +796,7 @@ bool BootAnimation::movie() bool anyPartHasClock = false; for (size_t i=0; i < animation->parts.size(); i++) { - if(animation->parts[i].clockPosY >= 0) { + if(validClock(animation->parts[i])) { anyPartHasClock = true; break; } @@ -736,10 +834,11 @@ bool BootAnimation::movie() glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - bool clockTextureInitialized = false; + bool clockFontInitialized = false; if (mClockEnabled) { - clockTextureInitialized = (initTexture(&mClock, mAssets, "images/clock64.png") == NO_ERROR); - mClockEnabled = clockTextureInitialized; + clockFontInitialized = + (initFont(&animation->clockFont, CLOCK_FONT_ASSET) == NO_ERROR); + mClockEnabled = clockFontInitialized; } if (mClockEnabled && !updateIsTimeAccurate()) { @@ -756,8 +855,8 @@ bool BootAnimation::movie() releaseAnimation(animation); - if (clockTextureInitialized) { - glDeleteTextures(1, &mClock.name); + if (clockFontInitialized) { + glDeleteTextures(1, &animation->clockFont.texture.name); } return false; @@ -813,7 +912,8 @@ bool BootAnimation::playAnimation(const Animation& animation) glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); } - initTexture(frame); + int w, h; + initTexture(frame.map, &w, &h); } const int xc = animationX + frame.trimX; @@ -835,8 +935,8 @@ bool BootAnimation::playAnimation(const Animation& animation) // which is equivalent to mHeight - (yc + frame.trimHeight) glDrawTexiOES(xc, mHeight - (yc + frame.trimHeight), 0, frame.trimWidth, frame.trimHeight); - if (mClockEnabled && mTimeIsAccurate && part.clockPosY >= 0) { - drawTime(mClock, part.clockPosY); + if (mClockEnabled && mTimeIsAccurate && validClock(part)) { + drawClock(animation.clockFont, part.clockPosX, part.clockPosY); } eglSwapBuffers(mDisplay, mSurface); @@ -915,6 +1015,7 @@ BootAnimation::Animation* BootAnimation::loadAnimation(const String8& fn) Animation *animation = new Animation; animation->fileName = fn; animation->zip = zip; + animation->clockFont.map = nullptr; mLoadedFiles.add(animation->fileName); parseAnimationDesc(*animation); diff --git a/cmds/bootanimation/BootAnimation.h b/cmds/bootanimation/BootAnimation.h index fd497a362fc7..42759f1acf0d 100644 --- a/cmds/bootanimation/BootAnimation.h +++ b/cmds/bootanimation/BootAnimation.h @@ -74,6 +74,13 @@ private: GLuint name; }; + struct Font { + FileMap* map; + Texture texture; + int char_width; + int char_height; + }; + struct Animation { struct Frame { String8 name; @@ -90,8 +97,12 @@ private: struct Part { int count; // The number of times this part should repeat, 0 for infinite int pause; // The number of frames to pause for at the end of this part - int clockPosY; // The y position of the clock, in pixels, from the bottom of the - // display (the clock is centred horizontally). -1 to disable the clock + int clockPosX; // The x position of the clock, in pixels. Positive values offset from + // the left of the screen, negative values offset from the right. + int clockPosY; // The y position of the clock, in pixels. Positive values offset from + // the bottom of the screen, negative values offset from the top. + // If either of the above are INT_MIN the clock is disabled, if INT_MAX + // the clock is centred on that axis. String8 path; String8 trimData; SortedVector<Frame> frames; @@ -108,13 +119,17 @@ private: String8 audioConf; String8 fileName; ZipFileRO* zip; + Font clockFont; }; status_t initTexture(Texture* texture, AssetManager& asset, const char* name); - status_t initTexture(const Animation::Frame& frame); + status_t initTexture(FileMap* map, int* width, int* height); + status_t initFont(Font* font, const char* fallback); bool android(); bool movie(); - void drawTime(const Texture& clockTex, const int yPos); + void drawText(const char* str, const Font& font, bool bold, int* x, int* y); + void drawClock(const Font& font, const int xPos, const int yPos); + bool validClock(const Animation::Part& part); Animation* loadAnimation(const String8&); bool playAnimation(const Animation&); void releaseAnimation(Animation*) const; @@ -127,7 +142,6 @@ private: sp<SurfaceComposerClient> mSession; AssetManager mAssets; Texture mAndroid[2]; - Texture mClock; int mWidth; int mHeight; bool mUseNpotTextures = false; diff --git a/core/java/android/preference/Preference.java b/core/java/android/preference/Preference.java index b1cad0538d31..ec1e102c9289 100644 --- a/core/java/android/preference/Preference.java +++ b/core/java/android/preference/Preference.java @@ -719,6 +719,9 @@ public class Preference implements Comparable<Preference> { * @see #setIcon(Drawable) */ public Drawable getIcon() { + if (mIcon == null && mIconResId != 0) { + mIcon = getContext().getDrawable(mIconResId); + } return mIcon; } diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index 9268db7c2e42..17f9bad828de 100755 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -5357,6 +5357,13 @@ public final class Settings { public static final String LONG_PRESS_TIMEOUT = "long_press_timeout"; /** + * The duration in milliseconds between the first tap's up event and the second tap's + * down event for an interaction to be considered part of the same multi-press. + * @hide + */ + public static final String MULTI_PRESS_TIMEOUT = "multi_press_timeout"; + + /** * List of the enabled print services. * * N and beyond uses {@link #DISABLED_PRINT_SERVICES}. But this might be used in an upgrade @@ -5929,6 +5936,36 @@ public final class Settings { INCALL_POWER_BUTTON_BEHAVIOR_SCREEN_OFF; /** + * What happens when the user presses the Back button while in-call + * and the screen is on.<br/> + * <b>Values:</b><br/> + * 0 - The Back buttons does nothing different.<br/> + * 1 - The Back button hangs up the current call.<br/> + * + * @hide + */ + public static final String INCALL_BACK_BUTTON_BEHAVIOR = "incall_back_button_behavior"; + + /** + * INCALL_BACK_BUTTON_BEHAVIOR value for no action. + * @hide + */ + public static final int INCALL_BACK_BUTTON_BEHAVIOR_NONE = 0x0; + + /** + * INCALL_BACK_BUTTON_BEHAVIOR value for "hang up". + * @hide + */ + public static final int INCALL_BACK_BUTTON_BEHAVIOR_HANGUP = 0x1; + + /** + * INCALL_POWER_BUTTON_BEHAVIOR default value. + * @hide + */ + public static final int INCALL_BACK_BUTTON_BEHAVIOR_DEFAULT = + INCALL_BACK_BUTTON_BEHAVIOR_NONE; + + /** * Whether the device should wake when the wake gesture sensor detects motion. * @hide */ diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java index 972208363933..38e24bc0f89b 100644 --- a/core/java/android/view/View.java +++ b/core/java/android/view/View.java @@ -23911,7 +23911,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, * on the screen. */ private boolean shouldDrawRoundScrollbar() { - if (!mResources.getConfiguration().isScreenRound()) { + if (!mResources.getConfiguration().isScreenRound() || mAttachInfo == null) { return false; } diff --git a/core/java/android/view/ViewConfiguration.java b/core/java/android/view/ViewConfiguration.java index 4d584a3df4fb..8b8525f2f1b5 100644 --- a/core/java/android/view/ViewConfiguration.java +++ b/core/java/android/view/ViewConfiguration.java @@ -16,6 +16,7 @@ package android.view; +import android.annotation.SystemApi; import android.app.AppGlobals; import android.content.Context; import android.content.res.Configuration; @@ -64,6 +65,12 @@ public class ViewConfiguration { private static final int DEFAULT_LONG_PRESS_TIMEOUT = 500; /** + * Defines the default duration in milliseconds between the first tap's up event and the second + * tap's down event for an interaction to be considered part of the same multi-press. + */ + private static final int DEFAULT_MULTI_PRESS_TIMEOUT = 300; + + /** * Defines the time between successive key repeats in milliseconds. */ private static final int KEY_REPEAT_DELAY = 50; @@ -213,6 +220,12 @@ public class ViewConfiguration { private static final int OVERFLING_DISTANCE = 6; /** + * Amount to scroll in response to a {@link MotionEvent#ACTION_SCROLL} event, in dips per + * axis value. + */ + private static final int SCROLL_FACTOR = 64; + + /** * Default duration to hide an action mode for. */ private static final long ACTION_MODE_HIDE_DURATION_DEFAULT = 2000; @@ -240,6 +253,7 @@ public class ViewConfiguration { private final int mOverflingDistance; private final boolean mFadingMarqueeEnabled; private final long mGlobalActionsKeyTimeout; + private final int mScrollFactor; private boolean sHasPermanentMenuKey; private boolean sHasPermanentMenuKeySet; @@ -268,6 +282,7 @@ public class ViewConfiguration { mOverflingDistance = OVERFLING_DISTANCE; mFadingMarqueeEnabled = true; mGlobalActionsKeyTimeout = GLOBAL_ACTIONS_KEY_TIMEOUT; + mScrollFactor = SCROLL_FACTOR; } /** @@ -351,6 +366,8 @@ public class ViewConfiguration { com.android.internal.R.dimen.config_viewMaxFlingVelocity); mGlobalActionsKeyTimeout = res.getInteger( com.android.internal.R.integer.config_globalActionsKeyTimeout); + mScrollFactor = res.getDimensionPixelSize( + com.android.internal.R.dimen.config_scrollFactor); } /** @@ -441,6 +458,16 @@ public class ViewConfiguration { } /** + * @return the duration in milliseconds between the first tap's up event and the second tap's + * down event for an interaction to be considered part of the same multi-press. + * @hide + */ + public static int getMultiPressTimeout() { + return AppGlobals.getIntCoreSetting(Settings.Secure.MULTI_PRESS_TIMEOUT, + DEFAULT_MULTI_PRESS_TIMEOUT); + } + + /** * @return the time before the first key repeat in milliseconds. */ public static int getKeyRepeatTimeout() { @@ -653,6 +680,16 @@ public class ViewConfiguration { } /** + * @return Amount to scroll in response to a {@link MotionEvent#ACTION_SCROLL} event. Multiply + * this by the event's axis value to obtain the number of pixels to be scrolled. + * @hide + * @SystemApi + */ + public int getScaledScrollFactor() { + return mScrollFactor; + } + + /** * The maximum drawing cache size expressed in bytes. * * @return the maximum size of View's drawing cache expressed in bytes diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java index e95fa5e6a2ee..f761b9b4ea14 100644 --- a/core/java/android/view/ViewRootImpl.java +++ b/core/java/android/view/ViewRootImpl.java @@ -6080,7 +6080,8 @@ public final class ViewRootImpl implements ViewParent, return true; } return mEvent instanceof MotionEvent - && mEvent.isFromSource(InputDevice.SOURCE_CLASS_POINTER); + && (mEvent.isFromSource(InputDevice.SOURCE_CLASS_POINTER) + || mEvent.isFromSource(InputDevice.SOURCE_ROTARY_ENCODER)); } public boolean shouldSendToSynthesizer() { diff --git a/core/java/android/widget/AbsListView.java b/core/java/android/widget/AbsListView.java index 7b45d8cb05b0..f1bfadee5f36 100644 --- a/core/java/android/widget/AbsListView.java +++ b/core/java/android/widget/AbsListView.java @@ -21,6 +21,7 @@ import android.annotation.DrawableRes; import android.annotation.NonNull; import android.content.Context; import android.content.Intent; +import android.content.res.Configuration; import android.content.res.TypedArray; import android.graphics.Canvas; import android.graphics.Rect; @@ -616,6 +617,8 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te private int mTouchSlop; private float mDensityScale; + private float mScrollFactor; + private InputConnection mDefInputConnection; private InputConnectionWrapper mPublicInputConnection; @@ -857,6 +860,10 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te R.styleable.AbsListView_fastScrollAlwaysVisible, false)); a.recycle(); + + if (context.getResources().getConfiguration().uiMode == Configuration.UI_MODE_TYPE_WATCH) { + setRevealOnFocusHint(false); + } } private void initAbsListView() { @@ -869,6 +876,7 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te final ViewConfiguration configuration = ViewConfiguration.get(mContext); mTouchSlop = configuration.getScaledTouchSlop(); + mScrollFactor = configuration.getScaledScrollFactor(); mMinimumVelocity = configuration.getScaledMinimumFlingVelocity(); mMaximumVelocity = configuration.getScaledMaximumFlingVelocity(); mOverscrollDistance = configuration.getScaledOverscrollDistance(); @@ -4201,21 +4209,26 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te @Override public boolean onGenericMotionEvent(MotionEvent event) { - if ((event.getSource() & InputDevice.SOURCE_CLASS_POINTER) != 0) { - switch (event.getAction()) { - case MotionEvent.ACTION_SCROLL: - if (mTouchMode == TOUCH_MODE_REST) { - final float vscroll = event.getAxisValue(MotionEvent.AXIS_VSCROLL); - if (vscroll != 0) { - final int delta = (int) (vscroll * getVerticalScrollFactor()); - if (!trackMotionScroll(delta, delta)) { - return true; - } - } - } - break; + switch (event.getAction()) { + case MotionEvent.ACTION_SCROLL: + final float axisValue; + if (event.isFromSource(InputDevice.SOURCE_CLASS_POINTER)) { + axisValue = event.getAxisValue(MotionEvent.AXIS_VSCROLL); + } else if (event.isFromSource(InputDevice.SOURCE_ROTARY_ENCODER)) { + axisValue = event.getAxisValue(MotionEvent.AXIS_SCROLL); + } else { + axisValue = 0; + } - case MotionEvent.ACTION_BUTTON_PRESS: + final int delta = Math.round(axisValue * mScrollFactor); + if (delta != 0) { + if (!trackMotionScroll(delta, delta)) { + return true; + } + } + break; + case MotionEvent.ACTION_BUTTON_PRESS: + if (event.isFromSource(InputDevice.SOURCE_CLASS_POINTER)) { int actionButton = event.getActionButton(); if ((actionButton == MotionEvent.BUTTON_STYLUS_PRIMARY || actionButton == MotionEvent.BUTTON_SECONDARY) @@ -4225,8 +4238,8 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te removeCallbacks(mPendingCheckForTap); } } - break; - } + } + break; } return super.onGenericMotionEvent(event); diff --git a/core/java/android/widget/HorizontalScrollView.java b/core/java/android/widget/HorizontalScrollView.java index 00f368e3abe3..918b6c0d65ff 100644 --- a/core/java/android/widget/HorizontalScrollView.java +++ b/core/java/android/widget/HorizontalScrollView.java @@ -18,6 +18,7 @@ package android.widget; import android.annotation.NonNull; import android.content.Context; +import android.content.res.Configuration; import android.content.res.TypedArray; import android.graphics.Canvas; import android.graphics.Rect; @@ -128,6 +129,8 @@ public class HorizontalScrollView extends FrameLayout { private int mOverscrollDistance; private int mOverflingDistance; + private float mScrollFactor; + /** * ID of the active pointer. This is used to retain consistency during * drags/flings if multiple pointers are used. @@ -165,6 +168,10 @@ public class HorizontalScrollView extends FrameLayout { setFillViewport(a.getBoolean(android.R.styleable.HorizontalScrollView_fillViewport, false)); a.recycle(); + + if (context.getResources().getConfiguration().uiMode == Configuration.UI_MODE_TYPE_WATCH) { + setRevealOnFocusHint(false); + } } @Override @@ -217,6 +224,7 @@ public class HorizontalScrollView extends FrameLayout { mMaximumVelocity = configuration.getScaledMaximumFlingVelocity(); mOverscrollDistance = configuration.getScaledOverscrollDistance(); mOverflingDistance = configuration.getScaledOverflingDistance(); + mScrollFactor = configuration.getScaledScrollFactor(); } @Override @@ -719,30 +727,35 @@ public class HorizontalScrollView extends FrameLayout { @Override public boolean onGenericMotionEvent(MotionEvent event) { - if ((event.getSource() & InputDevice.SOURCE_CLASS_POINTER) != 0) { - switch (event.getAction()) { - case MotionEvent.ACTION_SCROLL: { - if (!mIsBeingDragged) { - final float hscroll; + switch (event.getAction()) { + case MotionEvent.ACTION_SCROLL: { + if (!mIsBeingDragged) { + final float axisValue; + if (event.isFromSource(InputDevice.SOURCE_CLASS_POINTER)) { if ((event.getMetaState() & KeyEvent.META_SHIFT_ON) != 0) { - hscroll = -event.getAxisValue(MotionEvent.AXIS_VSCROLL); + axisValue = -event.getAxisValue(MotionEvent.AXIS_VSCROLL); } else { - hscroll = event.getAxisValue(MotionEvent.AXIS_HSCROLL); + axisValue = event.getAxisValue(MotionEvent.AXIS_HSCROLL); } - if (hscroll != 0) { - final int delta = (int) (hscroll * getHorizontalScrollFactor()); - final int range = getScrollRange(); - int oldScrollX = mScrollX; - int newScrollX = oldScrollX + delta; - if (newScrollX < 0) { - newScrollX = 0; - } else if (newScrollX > range) { - newScrollX = range; - } - if (newScrollX != oldScrollX) { - super.scrollTo(newScrollX, mScrollY); - return true; - } + } else if (event.isFromSource(InputDevice.SOURCE_ROTARY_ENCODER)) { + axisValue = event.getAxisValue(MotionEvent.AXIS_SCROLL); + } else { + axisValue = 0; + } + + final int delta = Math.round(axisValue * mScrollFactor); + if (delta != 0) { + final int range = getScrollRange(); + int oldScrollX = mScrollX; + int newScrollX = oldScrollX + delta; + if (newScrollX < 0) { + newScrollX = 0; + } else if (newScrollX > range) { + newScrollX = range; + } + if (newScrollX != oldScrollX) { + super.scrollTo(newScrollX, mScrollY); + return true; } } } @@ -1430,11 +1443,13 @@ public class HorizontalScrollView extends FrameLayout { @Override public void requestChildFocus(View child, View focused) { - if (!mIsLayoutDirty) { - scrollToChild(focused); - } else { - // The child may not be laid out yet, we can't compute the scroll yet - mChildToScrollTo = focused; + if (focused.getRevealOnFocusHint()) { + if (!mIsLayoutDirty) { + scrollToChild(focused); + } else { + // The child may not be laid out yet, we can't compute the scroll yet + mChildToScrollTo = focused; + } } super.requestChildFocus(child, focused); } diff --git a/core/java/android/widget/ScrollView.java b/core/java/android/widget/ScrollView.java index 0555cd403b00..e696ff7229e8 100644 --- a/core/java/android/widget/ScrollView.java +++ b/core/java/android/widget/ScrollView.java @@ -17,6 +17,7 @@ package android.widget; import android.annotation.NonNull; +import android.content.res.Configuration; import android.os.Build; import android.os.Build.VERSION_CODES; import android.os.Parcel; @@ -134,6 +135,8 @@ public class ScrollView extends FrameLayout { private int mOverscrollDistance; private int mOverflingDistance; + private int mScrollFactor; + /** * ID of the active pointer. This is used to retain consistency during * drags/flings if multiple pointers are used. @@ -186,6 +189,10 @@ public class ScrollView extends FrameLayout { setFillViewport(a.getBoolean(R.styleable.ScrollView_fillViewport, false)); a.recycle(); + + if (context.getResources().getConfiguration().uiMode == Configuration.UI_MODE_TYPE_WATCH) { + setRevealOnFocusHint(false); + } } @Override @@ -243,6 +250,7 @@ public class ScrollView extends FrameLayout { mMaximumVelocity = configuration.getScaledMaximumFlingVelocity(); mOverscrollDistance = configuration.getScaledOverscrollDistance(); mOverflingDistance = configuration.getScaledOverflingDistance(); + mScrollFactor = configuration.getScaledScrollFactor(); } @Override @@ -777,30 +785,35 @@ public class ScrollView extends FrameLayout { @Override public boolean onGenericMotionEvent(MotionEvent event) { - if ((event.getSource() & InputDevice.SOURCE_CLASS_POINTER) != 0) { - switch (event.getAction()) { - case MotionEvent.ACTION_SCROLL: { - if (!mIsBeingDragged) { - final float vscroll = event.getAxisValue(MotionEvent.AXIS_VSCROLL); - if (vscroll != 0) { - final int delta = (int) (vscroll * getVerticalScrollFactor()); - final int range = getScrollRange(); - int oldScrollY = mScrollY; - int newScrollY = oldScrollY - delta; - if (newScrollY < 0) { - newScrollY = 0; - } else if (newScrollY > range) { - newScrollY = range; - } - if (newScrollY != oldScrollY) { - super.scrollTo(mScrollX, newScrollY); - return true; - } - } + switch (event.getAction()) { + case MotionEvent.ACTION_SCROLL: + final float axisValue; + if (event.isFromSource(InputDevice.SOURCE_CLASS_POINTER)) { + axisValue = event.getAxisValue(MotionEvent.AXIS_VSCROLL); + } else if (event.isFromSource(InputDevice.SOURCE_ROTARY_ENCODER)) { + axisValue = event.getAxisValue(MotionEvent.AXIS_SCROLL); + } else { + axisValue = 0; + } + + final int delta = Math.round(axisValue * mScrollFactor); + if (delta != 0) { + final int range = getScrollRange(); + int oldScrollY = mScrollY; + int newScrollY = oldScrollY - delta; + if (newScrollY < 0) { + newScrollY = 0; + } else if (newScrollY > range) { + newScrollY = range; + } + if (newScrollY != oldScrollY) { + super.scrollTo(mScrollX, newScrollY); + return true; } } - } + break; } + return super.onGenericMotionEvent(event); } @@ -1455,11 +1468,13 @@ public class ScrollView extends FrameLayout { @Override public void requestChildFocus(View child, View focused) { - if (!mIsLayoutDirty) { - scrollToChild(focused); - } else { - // The child may not be laid out yet, we can't compute the scroll yet - mChildToScrollTo = focused; + if (focused.getRevealOnFocusHint()) { + if (!mIsLayoutDirty) { + scrollToChild(focused); + } else { + // The child may not be laid out yet, we can't compute the scroll yet + mChildToScrollTo = focused; + } } super.requestChildFocus(child, focused); } diff --git a/core/java/com/android/internal/app/AlertController.java b/core/java/com/android/internal/app/AlertController.java index 5aeb7f92eeda..95c291a9e8fe 100644 --- a/core/java/com/android/internal/app/AlertController.java +++ b/core/java/com/android/internal/app/AlertController.java @@ -888,7 +888,8 @@ public class AlertController { final int checkedItem = mCheckedItem; if (checkedItem > -1) { listView.setItemChecked(checkedItem, true); - listView.setSelection(checkedItem); + listView.setSelectionFromTop(checkedItem, + a.getDimensionPixelSize(R.styleable.AlertDialog_selectionScrollOffset, 0)); } } } diff --git a/core/java/com/android/internal/policy/BackdropFrameRenderer.java b/core/java/com/android/internal/policy/BackdropFrameRenderer.java index 619303f34c32..1abb59b006dd 100644 --- a/core/java/com/android/internal/policy/BackdropFrameRenderer.java +++ b/core/java/com/android/internal/policy/BackdropFrameRenderer.java @@ -110,12 +110,15 @@ public class BackdropFrameRenderer extends Thread implements Choreographer.Frame int statusBarColor, int navigationBarColor) { mDecorView = decorView; mResizingBackgroundDrawable = resizingBackgroundDrawable != null + && resizingBackgroundDrawable.getConstantState() != null ? resizingBackgroundDrawable.getConstantState().newDrawable() : null; mCaptionBackgroundDrawable = captionBackgroundDrawableDrawable != null + && captionBackgroundDrawableDrawable.getConstantState() != null ? captionBackgroundDrawableDrawable.getConstantState().newDrawable() : null; mUserCaptionBackgroundDrawable = userCaptionBackgroundDrawable != null + && userCaptionBackgroundDrawable.getConstantState() != null ? userCaptionBackgroundDrawable.getConstantState().newDrawable() : null; if (mCaptionBackgroundDrawable == null) { diff --git a/core/java/com/android/internal/widget/WatchHeaderListView.java b/core/java/com/android/internal/widget/WatchHeaderListView.java index 3d32d86cd49c..4fd19c37bf47 100644 --- a/core/java/com/android/internal/widget/WatchHeaderListView.java +++ b/core/java/com/android/internal/widget/WatchHeaderListView.java @@ -103,7 +103,8 @@ public class WatchHeaderListView extends ListView { @Override public int getHeaderViewsCount() { - return mTopPanel == null ? super.getHeaderViewsCount() : super.getHeaderViewsCount() + 1; + return mTopPanel == null ? super.getHeaderViewsCount() + : super.getHeaderViewsCount() + (mTopPanel.getVisibility() == GONE ? 0 : 1); } private void wrapAdapterIfNecessary() { @@ -133,7 +134,7 @@ public class WatchHeaderListView extends ListView { } private int getTopPanelCount() { - return mTopPanel == null ? 0 : 1; + return (mTopPanel == null || mTopPanel.getVisibility() == GONE) ? 0 : 1; } @Override @@ -143,33 +144,19 @@ public class WatchHeaderListView extends ListView { @Override public boolean areAllItemsEnabled() { - return mTopPanel == null && super.areAllItemsEnabled(); + return getTopPanelCount() == 0 && super.areAllItemsEnabled(); } @Override public boolean isEnabled(int position) { - if (mTopPanel != null) { - if (position == 0) { - return false; - } else { - return super.isEnabled(position - 1); - } - } - - return super.isEnabled(position); + int topPanelCount = getTopPanelCount(); + return position < topPanelCount ? false : super.isEnabled(position - topPanelCount); } @Override public Object getItem(int position) { - if (mTopPanel != null) { - if (position == 0) { - return null; - } else { - return super.getItem(position - 1); - } - } - - return super.getItem(position); + int topPanelCount = getTopPanelCount(); + return position < topPanelCount ? null : super.getItem(position - topPanelCount); } @Override @@ -187,15 +174,9 @@ public class WatchHeaderListView extends ListView { @Override public View getView(int position, View convertView, ViewGroup parent) { - if (mTopPanel != null) { - if (position == 0) { - return mTopPanel; - } else { - return super.getView(position - 1, convertView, parent); - } - } - - return super.getView(position, convertView, parent); + int topPanelCount = getTopPanelCount(); + return position < topPanelCount + ? mTopPanel : super.getView(position - topPanelCount, convertView, parent); } @Override diff --git a/core/java/com/android/internal/widget/WatchListDecorLayout.java b/core/java/com/android/internal/widget/WatchListDecorLayout.java index 538cecaec616..5b49611fa4b0 100644 --- a/core/java/com/android/internal/widget/WatchListDecorLayout.java +++ b/core/java/com/android/internal/widget/WatchListDecorLayout.java @@ -306,8 +306,9 @@ public class WatchListDecorLayout extends FrameLayout if (mListView.getChildCount() > 0) { if (mListView.getLastVisiblePosition() >= mListView.getCount() - 1) { View lastChild = mListView.getChildAt(mListView.getChildCount() - 1); - setScrolling(mBottomPanel, - lastChild.getY() + lastChild.getHeight() - mBottomPanel.getTop()); + setScrolling(mBottomPanel, Math.max( + 0, + lastChild.getY() + lastChild.getHeight() - mBottomPanel.getTop())); } else { // shift to hide the frame, last child is not the last position setScrolling(mBottomPanel, mBottomPanel.getHeight()); diff --git a/core/jni/android_util_AssetManager.cpp b/core/jni/android_util_AssetManager.cpp index 3473d9dab732..77d03433134b 100644 --- a/core/jni/android_util_AssetManager.cpp +++ b/core/jni/android_util_AssetManager.cpp @@ -25,6 +25,7 @@ #include <sys/types.h> #include <sys/wait.h> #include <sys/stat.h> +#include <sys/system_properties.h> #include <private/android_filesystem_config.h> // for AID_SYSTEM @@ -41,6 +42,7 @@ #include "ScopedUtfChars.h" #include "utils/Log.h" #include "utils/misc.h" +#include "utils/String8.h" extern "C" int capget(cap_user_header_t hdrp, cap_user_data_t datap); extern "C" int capset(cap_user_header_t hdrp, const cap_user_data_t datap); @@ -184,11 +186,19 @@ static void verifySystemIdmaps() argv[argc++] = AssetManager::TARGET_APK_PATH; argv[argc++] = AssetManager::IDMAP_DIR; - // Directories to scan for overlays - // /vendor/overlay - if (stat(AssetManager::OVERLAY_DIR, &st) == 0) { + // Directories to scan for overlays: if OVERLAY_SUBDIR_PROPERTY is defined, + // use OVERLAY_SUBDIR/<value of OVERLAY_SUBDIR_PROPERTY>/ if exists, otherwise + // use OVERLAY_DIR if exists. + char subdir[PROP_VALUE_MAX]; + int len = __system_property_get(AssetManager::OVERLAY_SUBDIR_PROPERTY, subdir); + if (len > 0) { + String8 subdirPath = String8(AssetManager::OVERLAY_SUBDIR) + "/" + subdir; + if (stat(subdirPath.string(), &st) == 0) { + argv[argc++] = subdirPath.string(); + } + } else if (stat(AssetManager::OVERLAY_DIR, &st) == 0) { argv[argc++] = AssetManager::OVERLAY_DIR; - } + } // Finally, invoke idmap (if any overlay directory exists) if (argc > 5) { diff --git a/core/jni/fd_utils-inl.h b/core/jni/fd_utils-inl.h index c67662bd8a88..5c17b23adacd 100644 --- a/core/jni/fd_utils-inl.h +++ b/core/jni/fd_utils-inl.h @@ -20,6 +20,7 @@ #include <vector> #include <algorithm> +#include <android-base/strings.h> #include <dirent.h> #include <fcntl.h> #include <grp.h> @@ -241,7 +242,8 @@ class FileDescriptorInfo { // Returns true iff. a given path is whitelisted. A path is whitelisted // if it belongs to the whitelist (see kPathWhitelist) or if it's a path - // under /system/framework that ends with ".jar". + // under /system/framework that ends with ".jar" or if it is a system + // framework overlay. static bool IsWhitelisted(const std::string& path) { for (size_t i = 0; i < (sizeof(kPathWhitelist) / sizeof(kPathWhitelist[0])); ++i) { if (kPathWhitelist[i] == path) { @@ -249,12 +251,37 @@ class FileDescriptorInfo { } } - static const std::string kFrameworksPrefix = "/system/framework/"; - static const std::string kJarSuffix = ".jar"; - if (path.compare(0, kFrameworksPrefix.size(), kFrameworksPrefix) == 0 && - path.compare(path.size() - kJarSuffix.size(), kJarSuffix.size(), kJarSuffix) == 0) { + static const char* kFrameworksPrefix = "/system/framework/"; + static const char* kJarSuffix = ".jar"; + if (android::base::StartsWith(path, kFrameworksPrefix) + && android::base::EndsWith(path, kJarSuffix)) { return true; } + + // Whitelist files needed for Runtime Resource Overlay, like these: + // /system/vendor/overlay/framework-res.apk + // /system/vendor/overlay-subdir/pg/framework-res.apk + // /data/resource-cache/system@vendor@overlay@framework-res.apk@idmap + // /data/resource-cache/system@vendor@overlay-subdir@pg@framework-res.apk@idmap + // See AssetManager.cpp for more details on overlay-subdir. + static const char* kOverlayDir = "/system/vendor/overlay/"; + static const char* kOverlaySubdir = "/system/vendor/overlay-subdir/"; + static const char* kApkSuffix = ".apk"; + + if ((android::base::StartsWith(path, kOverlayDir) + || android::base::StartsWith(path, kOverlaySubdir)) + && android::base::EndsWith(path, kApkSuffix) + && path.find("/../") == std::string::npos) { + return true; + } + + static const char* kOverlayIdmapPrefix = "/data/resource-cache/"; + static const char* kOverlayIdmapSuffix = ".apk@idmap"; + if (android::base::StartsWith(path, kOverlayIdmapPrefix) + && android::base::EndsWith(path, kOverlayIdmapSuffix)) { + return true; + } + return false; } diff --git a/core/res/assets/images/android-logo-mask.png b/core/res/assets/images/android-logo-mask.png Binary files differindex ad40645e8943..5512c0ad8a83 100644 --- a/core/res/assets/images/android-logo-mask.png +++ b/core/res/assets/images/android-logo-mask.png diff --git a/core/res/assets/images/android-logo-shine.png b/core/res/assets/images/android-logo-shine.png Binary files differindex cb65f229eb52..c5d126392eeb 100644 --- a/core/res/assets/images/android-logo-shine.png +++ b/core/res/assets/images/android-logo-shine.png diff --git a/core/res/assets/images/clock64.png b/core/res/assets/images/clock64.png Binary files differdeleted file mode 100644 index 493a1ea97717..000000000000 --- a/core/res/assets/images/clock64.png +++ /dev/null diff --git a/core/res/assets/images/clock_font.png b/core/res/assets/images/clock_font.png Binary files differnew file mode 100644 index 000000000000..be927ae2612f --- /dev/null +++ b/core/res/assets/images/clock_font.png diff --git a/core/res/assets/sounds/bootanim0.raw b/core/res/assets/sounds/bootanim0.raw Binary files differdeleted file mode 100644 index 46b8c0f9a8c4..000000000000 --- a/core/res/assets/sounds/bootanim0.raw +++ /dev/null diff --git a/core/res/assets/sounds/bootanim1.raw b/core/res/assets/sounds/bootanim1.raw Binary files differdeleted file mode 100644 index ce69944f69b2..000000000000 --- a/core/res/assets/sounds/bootanim1.raw +++ /dev/null diff --git a/core/res/assets/webkit/hyph_en_US.dic b/core/res/assets/webkit/hyph_en_US.dic deleted file mode 100644 index d91204b55418..000000000000 --- a/core/res/assets/webkit/hyph_en_US.dic +++ /dev/null @@ -1,9784 +0,0 @@ -ISO8859-1 -LEFTHYPHENMIN 2 -RIGHTHYPHENMIN 3 -.a2ch4 -.ad4der -.a2d -.ad1d4 -.a2f1t -.a2f -.a4l3t -.am5at -.4a1ma -.an5c -.a2n -.2ang4 -.an1i5m -.an1t4 -.an3te -.anti5s -.ant2i -.a4r5s2 -.2a2r -.ar4t2ie4 -.ar1ti -.ar4ty -.as3c -.as1p -.a2s1s -.aster5 -.a2tom5 -.a1to -.au1d -.av4i -.awn4 -.ba4g -.ba5na -.ba2n -.bas4e -.ber4 -.be5r1a -.be3s1m -.4bes4 -.b4e5s2to -.bri2 -.but4ti -.bu4t3t2 -.cam4pe -.1ca -.ca4m1p -.can5c -.ca2n -.capa5b -.ca1pa -.car5ol -.c2a2r -.ca4t -.ce4la -.2ch4 -.chill5i -.ch4il2 -.chil1l -.1ci2 -.cit5r -.2c1it -.co3e2 -.1co -.co4r -.cor5n1er -.corn2e -.de4moi2 -.d4em -.de1mo -.de3o -.de3r1a -.de3r1i -.de1s4c -.des2 -.dic1t2io5 -.3di2c1t -.do4t -.1do -.du4c -.1du -.du4m1b5 -.earth5 -.ear2t -.e2a2r -.eas3i -.2e1b4 -.eer4 -.eg2 -.e2l5d -.el3em -.enam3 -.e1na -.en3g -.e2n3s2 -.eq5ui5t -.e1q -.equ2 -.eq2ui2 -.er4ri -.er1r4 -.es3 -.4eu3 -.eye5 -.fes3 -.for5mer -.1fo -.fo2r -.for1m -.for2me -.1ga2 -.ge2 -.gen3t4 -.1gen -.ge5o2g -.1geo -.1g2i5a -.gi4b -.go4r -.1go -.hand5i -.ha2n -.h4and -.ha4n5k2 -.he2 -.hero5i2 -.h2ero -.h1es3 -.he4t3 -.hi3b -.hi3er -.h2ie4 -.hon5ey -.ho2n -.hon3o -.hov5 -.id4l -.2id -.idol3 -.i1do -.im3m -.im5p1i2n -.i4m1p -.im2pi -.in1 -.in3ci -.2ine2 -.4i4n2k2 -.2i2n3s2 -.ir5r4 -.4ir -.is4i -.ju3r -.la4cy -.la4m -.lat5er -.l4ath5 -.le2 -.leg5e -.len4 -.lep5 -.lev1 -.l2i4g -.li1g5a -.li2n -.l2i3o -.l1i4t -.ma1g5a5 -.1ma -.mal5o -.ma1n5a -.ma2n -.mar5ti -.m2a2r -.me2 -.mer3c -.me5ter -.me1te -.m2is1 -.mis4t5i -.mon3e -.1mo -.mo2n -.mo3ro -.mo2r -.mu5ta -.1mu -.mu2ta5b -.ni4c -.od2 -.od1d5 -.of5te -.o2ft -.or5a1to -.o1ra -.or3c -.or1d -.or3t -.os3 -.os4tl -.4oth3 -.out3 -.ou2 -.ped5al -.2p2ed -.p2e2d2a -.pe5te -.pe2t -.pe5tit -.p2i4e4 -.pio5n4 -.3p2i1o -.pi2t -.pre3m -.pr2 -.ra4c -.ran4t -.ra2n -.ratio5n1a -.ratio2n4 -.ra1t2io -.ree2 -.re5mit -.res2 -.re5stat -.res2t -.res1ta -.r2i4g -.ri2t5u -.ro4q -.ros5t -.row5d -.ru4d -.3s4c2i3e4 -.s1ci -.5se2l2f5 -.sel1l5 -.se2n -.se5r2ie4 -.ser1i -.s2h2 -.si2 -.s3ing4 -.2s1in -.st4 -.sta5b2l2 -.s1ta -.s2tab -.s4y2 -.1ta4 -.te4 -.3ten5a2n -.te1na -.th2 -.ti2 -.til4 -.ti1m5o5 -.1tim -.ting4 -.2t1in -.t4i4n5k2 -.to1n4a -.1to -.to2n -.to4p -.top5i -.to2u5s -.tou2 -.trib5ut -.tr4ib -.u1n1a -.un3ce -.under5 -.un1de -.u2n1e -.u4n5k2 -.un5o -.un3u4 -.up3 -.ure3 -.us5a2 -.2us -.ven4de -.ve5r1a -.wil5i -.wi2 -.wil2 -.ye4 -4ab. -a5bal -a5ba2n -abe2 -ab5erd -ab2i5a -ab5i2t5ab -abi2t -abi1ta -ab5lat -ab2l2 -ab5o5l1iz -abol2i -4abr -ab5rog -ab3ul -a4c2a2r -a1ca -ac5ard -ac5aro -a5ceou2 -ac1er -a5che4t -a2ch -ache2 -4a2ci -a3c2ie4 -a2c1in -a3c2io -ac5rob -act5if2 -a2c1t -ac3ul -ac4um -a2d -ad4d1in -ad1d4 -ad5er. -2adi -a3d4i3a -ad3i1ca -adi4er -ad2ie4 -a3d2io -a3dit -a5di1u -ad4le -ad3ow -a1do -ad5ra2n -a1dr -ad4su -a2d1s2 -4a1du -a3du2c -ad5um -ae4r -aer2i4e4 -aer1i -a2f -a4f1f4 -a4gab -a1ga -aga4n -ag5el1l -a1ge4o -4ag4eu -ag1i -4ag4l2 -ag1n -a2go -3a3g4o4g -ag3o3ni -ago2n2 -a5guer -a2gue -ag5ul -a4gy -a3ha -a3he -a4h4l4 -a3ho -ai2 -a5i1a -a3ic. -ai5ly -a4i4n -ain5in -a2ini -a2i1n5o -ait5en -a2ite -a1j -ak1en -al5ab -al3a2d -a4l2a2r -4aldi4 -a2ld -2ale -al3end -a4lent2i -a1len1t -a5le5o -al1i -al4ia. -al2i1a -al2i4e4 -al5lev -al1l -al2le -4allic -all2i -4a2lm -a5log. -a4ly. -a1ly -4a2lys4 -5a5lys1t -5alyt -3alyz -4a1ma -a2m5ab -am3ag -ama5ra -am2a2r -am5asc -a4ma3tis -a4m5a1to -am5er1a -am3ic -am5if -am5i1ly -am1in -am2i4no -a2mo -a5mo2n -amor5i -amo2r -amp5en -a4m1p -a2n -an3age -a1na -3ana1ly -a3n2a2r -an3ar3c -anar4i -a3nati -an2at -4and -ande4s2 -an1de -an3dis1 -an1dl -an4dow -an1do -a5nee -a3nen -an5e2st. -a1nes -a2nest -a3n4eu -2ang -ang5ie4 -an1gl2 -a4n1ic -a3nies -an2ie4 -an3i3f -an4ime -an1im -a5nim1i -a5n2ine -an1in -an3i4o -a3n2ip -an3is2h -an3it -a3ni1u -an4kli -a4nk2 -an1k1l -5anniz -a4n1n2 -ano4 -an5ot -an4oth5 -an2sa2 -a2n1s2 -an4s1co -ans4c -an4s1n4 -an2sp -ans3po -an4st -an4su2r -an1su -anta2l4 -an1t -an1ta -an4t2ie4 -ant2i -4an1to -an2tr -an4tw4 -an3u1a -an3ul -a5nur -4ao -ap2a2r4 -a1pa -ap5at -ap5er3o -a3ph4er -4aphi -a4pilla -apil1l -ap5ill2a2r -ap3i2n -ap3i1ta -a3pi2tu -a2p2l2 -apo4c5 -ap5o1la -apor5i -a1p4or -apos3t -a1pos -aps5e4s -a2p1s2 -ap2se -a3pu -aque5 -aqu2 -2a2r -ar3a2c1t -a5rade -ara2d -ar5adis1 -ar2adi -ar3al -a5rame1te -aram3et -ar2an4g -ara2n -ara3p -ar4at -a5ra1t2io -ar5a1t2iv -a5rau -ar5av4 -araw4 -arbal4 -ar1b -ar4cha2n -ar1c -ar3cha -ar2ch -ar5d2ine -ard2i -ard1in4 -ar4dr -ar5eas -a3ree -ar3en1t -a5r2e2ss -ar4fi -ar1f -ar4f4l2 -ar1i -ar5i2al -ar2i3a -ar3i2a2n -a3ri5et -ar2ie4 -ar4im -ar5in2at -ar2i1na -ar3i1o -ar2iz -ar2mi -ar1m -ar5o5d -a5roni -aro2n -a3roo2 -ar2p -ar3q -arre4 -ar1r4 -ar4sa2 -a4rs2 -ar2s2h -4as. -a2s4ab -asa2 -as3an1t -asa2n -ashi4 -as2h -a5sia. -as2i1a -a3si1b -a3sic -5a5si4t -ask3i -ask2 -as4l2 -a4soc -a1so -as5ph -as4s2h -a2ss -as3ten -as1t4r -asu1r5a -a1su -asu2r -a2ta -at3ab2l2 -a2tab -at5ac -at3alo -ata2l -at5ap -ate5c -at5e2ch -at3e1go -ateg4 -at3en. -at3er1a -ater5n -a5ter1na -at3est -at5ev -4ath -ath5em -ath2e -a5the2n -at4ho -ath5om -4ati. -a5t2i1a -a2t5i5b -at1ic -at3if2 -ation5a2r -a1t2io -atio2n -atio1n1a -at3i1tu -a4tog -a1to -a2tom -at5om2iz -a4top -a4tos2 -a1tr -at5rop -at4sk2 -a4t1s2 -at4tag -a4t3t2 -at1ta -at5te -at4th -a2tu -at5u1a -a4t5ue -at3ul -at3u1ra -a2ty -au4b -augh3 -au3gu -au4l2 -aun5d -au3r -au5si1b -a2us -a4ut5en -au1th -a2va -av3ag4 -a5va2n -av4e4no -av3er1a -av5ern -av5ery -av1i -avi4er -av2ie4 -av3ig -av5oc -a1vor -3away -aw3i2 -aw4ly -aws4 -ax4i5c -ax3i -ax4id -ay5al -aye4 -ays4 -azi4er -a2z1i -az2ie4 -az2z5i -a4z1z2 -5ba. -bad5ger -ba2d -ba4ge -bal1a -ban5dag -ba2n -b4and -ban1d2a -ban4e -ban3i -barbi5 -b2a2r -bar1b -bar2i4a -bar1i -bas4si -ba2ss -1bat -ba4z -2b1b -b2be -b3ber -bbi4na -4b1d -4be. -beak4 -bea2t3 -4be2d -b2e3d2a -be3de -b4e3di -be3gi -be5gu -1bel -be1l2i -be3lo -4be5m -be5n2ig -be5nu -4bes4 -be3sp -b2e5st4r -3bet -be1t5iz -be5tr -be3tw4 -be3w -be5y1o4 -2bf -4b3h -bi2b -b2i4d -3b2ie4 -bi5en -bi4er -2b3if -1bil -bi3l2iz -bil1i -bin2a5r4 -bi1na -b4in4d -bi5net -b2ine -bi3o2gr -b2io -bi5ou2 -bi2t -3b2i3t2io -bi1ti -bi3tr -3bit5u1a -bi1tu -b5i4tz -b1j -bk4 -b2l2 -bl4ath5 -b4le. -blen4 -5ble1sp -bles2 -b3lis -b4lo -blun4t -4b1m -4b3n -bne5g -3bod -bod3i -bo4e -bol3ic -bol2i -bom4bi -bo4m1b -bo1n4a -bo2n -bon5at -3boo2 -5bor. -4b1o1ra -bor5d -5bore -5bori -5bos4 -b5o1ta -b4oth5 -bo4to -boun2d3 -bou2 -4bp -4brit -br4oth3 -2b5s2 -bsor4 -b1so -2bt -b2t4l -b4to -b3tr -buf4fer1 -bu4f1f -bu4ga -bu3l2i -bu1mi4 -bu4n -bunt4i -bun1t -bu3re -bus5ie4 -b2us -buss4e -bu2ss -5bust -4bu1ta -3bu1t2io -b4u1t2i -b5u1to -b1v -4b5w -5by. -bys4 -1ca -cab3in -ca1b2l2 -ca2ch4 -ca5den -ca2d -4cag4 -2c5ah -ca3lat -cal4la -cal1l -cal2l5in4 -call2i -4calo -c4an5d -ca2n -can4e -ca4n4ic -can5is -can3iz -can4ty -can1t -cany4 -ca5per -car5om -c2a2r -cast5er -cas5t2ig -cast2i -4cas4y -c4a4th -4ca1t2iv -cav5al -ca2va -c3c -ccha5 -c2ch -c3c2i4a -c1ci -ccom1pa5 -c1co -cco4m1p -cco2n4 -ccou3t -ccou2 -2ce. -4ced. -4ce1den -3cei2 -5cel. -3cel1l -1cen -3cenc -2cen4e -4ceni -3cen1t -3cep -ce5ram -cer1a -4ce1s4a2 -3ces1si -c2e2ss -ces5si5b -ces5t -cet4 -c5e4ta -cew4 -2ch -4ch. -4ch3ab -5cha4n1ic -cha2n -ch5a5nis -che2 -cheap3 -4ch4ed -ch5e5lo -3chemi -ch5ene -che2n -ch3er. -ch3e4r1s2 -4ch1in -5chi2ne. -ch2ine -ch5i5n2e2ss -chi1nes -5ch2ini -5ch2io -3chit -chi2z -3cho2 -ch4ti -1ci -3c2i1a -ci2a5b -ci2a5r -ci5c -4cier -c2ie4 -5c4i2f3ic. -ci1fi -4c4i5i4 -ci4la -3cil1i -2cim -2cin -c4i1na -3cin2at -cin3em -c2ine -c1ing -c5ing. -5c2i1no -cio2n4 -c2io -4cipe4 -c2ip -ci3ph -4cip4ic -cip3i -4cis1ta -4cis1t2i -2c1it -ci1t3iz -ci1ti -5ciz -ck1 -ck3i -1c4l4 -4cl2a2r -c5la5ra1t2io -clar4at -5clare -cle4m -4clic -clim4 -c1ly4 -c5n -1co -co5ag -c4oa -coe2 -2cog -co4gr -coi4 -co3inc -col5i -5colo -col3o4r -com5er -co2me -co1n4a -co2n -c4one -con3g -con5t -co3pa -cop3ic -co4p2l2 -4cor1b -coro3n -cos4e -cov1 -cove4 -cow5a -co2z5e -co5z1i -c1q -cras5t -cr2as -5crat. -5crat1ic -cre3a2t -5c2r2ed -4c3re1ta -cre4v2 -cri2 -cri5f -c4rin -cr2is4 -5cri1ti -cro4p2l2 -crop5o -cros4e -cru4d -4c3s2 -2c1t -c2ta4b -c1ta -ct5ang -cta2n -c5tan1t -c2te -c3ter -c4t4ic1u -ctim3i -c1tim -ctu4r -c1tu -c4tw4 -cud5 -c4uf -c4ui2 -cu5i1ty -5cul2i -cul4tis4 -cul1ti -cu4lt -3c4ul1tu2 -cu2ma -c3ume -cu4mi -3cun -cu3pi -cu5py -cu2r5a4b -cu1ra -cu5r2i3a -1c2us -cus1s4i -cu2ss -3c4ut -cu4t2ie4 -c4u1t2i -4c5u1t2iv -4cutr -1cy -c2ze4 -1d2a -5da. -2d3a4b -da2ch4 -4da2f -2dag -da2m2 -d2an3g -da2n -dard5 -d2a2r -dark5 -4dary -3dat -4da1t2iv -4da1to -5dav4 -dav5e -5day -d1b -d5c -d1d4 -2de. -dea2f5 -de4b5i2t -d2e1b -de4bo2n -deca2n4 -de1ca -de4cil -de1c2i -de5com -de1co -2d1ed -4dee. -de5if -dei2 -del2i4e4 -del2i -de4l5i5q -de5lo -d4em -5dem. -3demic -dem5ic. -de5mil -de4mo2n3s2 -de1mo -demo2n -demo2r5 -1den -de4n2a2r -de1na -d4e3no -denti5f2 -den1t -dent2i -de3nu -de1p -de3pa -depi4 -de2pu -d3e1q -d4er1h4 -5der3m4 -d5ern5iz -de4r5s2 -des2 -d2es. -de1s2c -de2s5o -des3t2i -d2e3st4r -de4su -de1t -de2to -de1v -de2v3i4l -de1vi -4dey -4d1f -d4ga -d3ge4t -dg1i -d2gy -d1h2 -5di. -1d4i3a -dia5b -d4i4cam -di1ca -d4ice -3di2c1t -3d2id -5di3en -d2ie4 -d1if -di3ge -d2ig -di4la1to -di1la -d1in -1di1na -3di2ne. -d2ine -5d2ini -di5niz -1d2io -dio5g -di4p2l2 -d2ip -d4ir2 -di1re -dir1t5i -dis1 -5disi -d4is3t -d2i1ti -1d2i1v -d1j -d5k2 -4d5la -3dle. -3dled -3dles. -dles2 -4d3l2e2ss -2d3lo -4d5lu -2d1ly -d1m -4d1n4 -1do -3do. -do5de -5doe -2d5of -d4og -do4la -dol2i4 -do5lo4r -dom5iz -do3n2at -do2n -do1n1a -doni4 -doo3d -doo2 -do4p4p -d4or -3dos -4d5out -dou2 -do4v -3dox -d1p -1dr -drag5o2n2 -dra2go -4dr2ai2 -dre4 -dre2a5r -5dren -dr4i4b -dril4 -dro4p -4drow -5drupli -dru3p2l2 -4dry -2d1s2 -ds4p -d4sw2 -d4s4y -d2th -1du -d1u1a -du2c -d1u3ca -duc5er -4duct. -du2c1t -4duc4t1s2 -du5el -du4g -d3ul4e -dum4be -du4m1b -du4n -4dup -du4pe -d1v -d1w -d2y -5dyn -dy4s2e -dys5p -e1a4b -e3a2c1t -ea2d1 -ead5ie4 -e2adi -ea4ge -ea5ger -ea4l -eal5er -e2ale -eal3ou2 -eam3er -e5and -ea2n -ear3a -e2a2r -ear4c -ear5es -ear4ic -ear1i -ear4il -ear5k -ear2t -eart3e -ea5sp -e3a2ss -east3 -ea2t -eat5en -eath3i -e4ath -e5at3if2 -e4a3tu -ea2v -eav3en -eav5i -eav5o -2e1b -e4bel. -e1bel -e4be2l1s2 -e4ben -e4bi2t -e3br -e4ca2d -e1ca -ecan5c -eca2n -ec1ca5 -ec3c -e1ce -ec5es1sa2 -ec2e2ss -e1c2i -e4cib -ec5ificat -eci1fi -ecifi1ca -ec5i3f2ie4 -ec5i1fy -e2c3im -e2c1i4t -e5c2ite -e4clam -e1c4l4 -e4cl2us -e2col -e1co -e4com1m -e4compe -eco4m1p -e4con1c -eco2n -e2cor -ec3o1ra -eco5ro -e1cr -e4crem -ec4ta2n -e2c1t -ec1ta -ec4te -e1cu -e4cul -ec3u1la -2e2d2a -4ed3d4 -e4d1er -ede4s2 -4edi -e3d4i3a -ed3ib -ed3i1ca -ed3im -ed1it -edi5z -4e1do -e4dol -edo2n2 -e4dri -e1dr -e4dul -e1du -ed5u1l4o -ee2c -e4ed3i -ee2f -eel3i -ee4ly -ee2m -ee4na -ee4p1 -ee2s4 -eest4 -ee4ty -e5ex -e1f -e4f3ere -efer1 -1e4f1f -e4fic -e1fi -5ef2i1c4i -efil4 -e3f2i2ne -e2fin -ef5i5n2ite -ef2ini -efin2it -3efit -efor5es -e1fo -efo2r -e4fu4se. -e3fu -ef2us -4egal -e1ga -eger4 -eg5ib -eg4ic -eg5ing -e5git5 -eg5n -e4go. -e1go -e4gos -eg1ul -e5gur -5e1gy -e1h4 -eher4 -ei2 -e5ic -e2i5d -e2ig2 -ei5g4l2 -e3i4m1b -e3in3f -e1ing -e5inst -e2i2n1s2 -eir4d -e4ir -e2it3e -e2i3th -e5i1ty -e1j -e4jud -ej5udi -eki4n -ek1i -ek4la -ek1l -e1la -e4la. -e4lac -e3l4an4d -ela2n -e4l5a1t2iv -e4law -elax1a4 -e3le2a -el5ebra -el2e1b -ele3br -5elec -e4led -el3e1ga -e5len -e4l1er -e1les2 -e2l2f -el2i -e3libe4 -e4l5ic. -el3i1ca -e3lier -el2ie4 -el5i3gib -el2ig -el4igi -e5lim -e4l3ing -e3l2io -e2lis -el5is2h -e3l2iv3 -4ella -el1l -el4lab -ell4o4 -e5loc -el5og -el3op. -el2s2h -e2l1s2 -el4ta -e4lt -e5lud -el5ug -e4mac -e1ma -e4mag -e5ma2n -em5a1na -e4m5b -e1me -e2mel -e4met -em3i1ca -em2i4e4 -em5igra -em2ig4 -emi1gr -em1in2 -em5ine -em3i3ni -e4m2is -em5is2h -e5m4i2s1s -em3iz -5emniz -e4m1n -emo4g -e1mo -emo3n2i5o -emo2n -em3pi -e4m1p -e4mul -e1mu -em5u1la -emu3n2 -e3my -en5a2mo -e1na -e4nan1t -en2a2n -ench4er -en2ch -enche2 -en3dic -e5nea -e5nee -en3em -en5ero -en1er -en5e1si -e1nes -e2n5est -en3etr -e3ne4w -en5i4c3s2 -e5n2ie4 -e5nil -e3n2i4o -en3is2h -en3it -e5ni1u -5eniz -4e4n1n2 -4eno -e4no4g -e4nos -en3ov -en4sw2 -e2n1s2 -ent5age -en1t -en1ta -4enth1es -enth2e -en3u1a -en5uf -e3ny. -4e4n3z -e5of -eo2g -e4oi4 -e3ol -eop3a2r -eo2pa -e1or -eo3re -eo5rol -eos4 -e4ot -eo4to -e5out -eou2 -e5ow -e2pa -e3p4ai2 -ep5anc -epa2n -e5pel -e3pen1t -ep5e5t2i1t2io -epe2t -epeti1ti -ephe4 -e4pli -e1p2l2 -e1po -e4prec -epr2 -ep5re1ca -e4p2r2ed -ep3re1h4 -e3pro -e4prob -ep4s4h -e2p1s2 -ep5ti5b -e2p1t -e4pu2t -ep5u1ta -e1q -equi3l -equ2 -eq2ui2 -e4q3ui3s -er1a -e2ra4b -4er4and -era2n -er3a2r -4er4ati. -2er1b -er4b2l2 -er3ch -er1c -er4che2 -2e2re. -e3re1a4l -ere5co -ere3in -erei2 -er5el. -er3e1mo -er5e1na -er5ence -4erene -er3en1t -ere4q -er5e2ss -er3es2t -eret4 -er1h4 -er1i -e1r2i3a4 -5erick1 -e3rien -er2ie4 -eri4er -er3in4e -e1r2i1o -4erit -er4i1u -er2i4v -e4ri1va -er3m4 -er4nis4 -4er3n2it -5erniz -er3no4 -2ero -er5ob -e5r2oc -ero4r -er1ou2 -e4r1s2 -er3set -er2se -ert3er -4er2tl -er3tw4 -4eru -eru4t -5erwau -er1w -e1s4a2 -e4sa2ge. -e4sages -es2c -e2s1ca -es5ca2n -e3scr -es5cu -e1s2e -e2sec -es5e1cr -e4s5enc -e4sert. -e4ser4t1s2 -e4ser1va -4es2h -e3sha -esh5e2n -e1si -e2sic -e2s2id -es5i1den -e4s5ig1n4a -es2ig -e2s5im -e2s4i4n -esis4te -e1sis -e5si4u -e5skin -esk2 -esk1i -es4mi -e2s1m -e2sol -e1so -es3olu -e2so2n -es5o1n1a4 -e1sp -e2s3per -es5pi1ra -esp4ir -es4pre -espr2 -2e2ss -es4si4b -es1si -esta2n4 -es1ta -es3t2ig -est2i -es5tim -4es2to -e3sto2n -2est4r -e5stro -estruc5 -e2su2r -e1su -es5ur1r4 -es4w2 -e2ta4b -e1ta -e3ten4d -e3teo -ethod3 -et1ic -e5tide -et2id -e2t1in4 -et2i4no -e5t4ir -e5t2i1t2io -eti1ti -et5i1t2iv -4e2t1n2 -et5o1n1a -e1to -eto2n -e3tra -e3tre -et3ric -et5rif -et3rog -et5ros -et3u1a -e1tu -et5ym -e1ty -e4t5z -4eu -e5un -e3up -eu3ro -e2us4 -eute4 -euti5l -e4u1t2i -eu5tr -eva2p5 -e1va -e2vas -ev5ast -e5vea -ev3el1l -eve4l3o -e5veng -even4i -ev1er -e5v2er1b -e1vi -ev3id -e2vi4l -e4v1in -e3v2i4v -e5voc -e5vu -e1wa -e4wag -e5wee -e3wh -ewil5 -ewi2 -ew3in4g -e3wit -1ex3p -5ey1c -5eye. -eys4 -1fa -fa3b2l2 -f4ab3r -fa4ce -4fag -fa4i4n4 -fai2 -fal2l5e -fal1l -4f4a4ma -fam5is -5f2a2r -far5th -fa3ta -fa3th2e -f4ath -4fa1to -fau4lt5 -fau4l2 -4f5b -4fd -4fe. -feas4 -fe4ath3 -fea2t -f2e4b -4fe1ca -5fe2c1t -2fed -fe3l2i -fe4mo -fen2d -fen1d5e -fer1 -5fer1r4 -fev4 -4f1f -f4fes -f4f2ie4 -f1fi -f5f2in. -f2fin -f2f5is -f4f2ly5 -ff4l2 -f2fy -4fh -1fi -f2i3a -2f3ic. -4f3ical -fi1ca -f3ica2n -4ficate -f3i1cen -fi3cer -f2i1c4i -5fi3c2i1a -5fic2ie4 -4fi4c3s2 -fi3cu -fi5del -f2id -fight5 -f2ig -fil5i -fil2l5in4 -fil1l -fill2i -4fi1ly -2fin -5fi1na -f4in2d5 -f2i2ne -f1in3g -f2i4n4n2 -fis4t2i -f4l2 -f5l2e2ss -fles2 -flin4 -flo3re -f2ly5 -4fm -4fn -1fo -5fo2n -fon4de -f2ond -fon4t -fo2r -fo5rat -fo1ra -for5ay -fore5t -for4i -for1t5a -fos5 -4f5p -fra4t -f5rea -fres5c -fri2 -fril4 -frol5 -2f3s -2ft -f4to -f2ty -3fu -fu5el -4fug -fu4min -fu1mi -fu5ne -fu3ri -fusi4 -f2us -fu2s4s -4fu1ta -1fy -1ga -ga2f4 -5gal. -3gal1i -ga3lo -2gam -ga5met -g5a2mo -gan5is -ga2n -ga3niz -gani5za1 -4gano4 -gar5n4 -g2a2r -ga2ss4 -g4ath3 -4ga1t2iv -4gaz -g3b -gd4 -2ge. -2ged -geez4 -gel4in -gel2i -ge5lis -ge5l1iz -4ge1ly -1gen -ge4n2at -ge1na -g5e5niz -4g4eno -4geny -1geo -ge3om -g4ery -5ge1si -geth5 -4ge1to -ge4ty -ge4v -4g1g2 -g2ge -g3ger -gglu5 -ggl2 -g1go4 -gh3in -gh5out -ghou2 -gh4to -5gi. -1g2i4a -gi2a5r -g1ic -5gi3c2i1a -g2i1ci -g4i1co -gien5 -g2ie4 -5gies. -gil4 -g3i1men -3g4in. -g4in5ge -5g4i2n1s2 -5g2io -3g4ir -gir4l -g3is1l2 -gi4u -5g2iv -3giz -gl2 -gla4 -gl2ad5i -gla2d -5glas -1gle -gli4b -g3l2ig -3glo -glo3r -g1m -g4my -g1n4a -g4na. -gne4t4t2 -g1ni -g2n1in -g4n2i4o -g1no -g4no4n -1go -3go. -gob5 -5goe -3g4o4g -go3is -goi2 -go2n2 -4g3o3n1a -gon5do5 -g2ond -go3ni -5goo2 -go5riz -gor5ou2 -5gos. -gov1 -g3p -1gr -4gra1d2a -gra2d -g4r2ai2 -gra2n2 -5gra4ph. -g5ra3ph4er -5graph1ic -gr4aphi -4g3ra1phy -4gray -gre4n -4gress. -gr2e2ss -4grit -g4ro -gruf4 -gs2 -g5ste -gth3 -gu4a -3guar2d -gu2a2r -2gue -5gui5t -g2ui2 -3gun -3g2us -4gu4t -g3w -1gy -2g5y3n -gy5ra -h3ab4l2 -ha2ch4 -hae4m -hae4t -h5agu -ha3la -hala3m -ha4m -han4ci -ha2n -han4cy -5hand. -h4and -h2an4g -hang5er -han1g5o -h5a5niz -ha4n4k2 -han4te -han1t -ha2p3l2 -ha2p5t -ha3ra2n -h2a2r -ha5r2as -har2d -hard3e -har4le4 -har1l -harp5en -har2p -har5ter -ha2s5s -haun4 -5haz -haz3a1 -h1b -1hea2d1 -3he2a2r -he4ca2n -he1ca -h5ecat -h4ed -h4e5do5 -he3l4i -hel4lis -hel1l -hell2i -hel4ly -h5elo -he4m4p -he2n -he1na4 -hen5at -he1o5r -hep5 -h4er1a -hera3p -her4ba -h2er1b -here5a -h3ern -h5er1ou2 -h2ero -h3ery -h1es -he2s5p -he4t -he2t4ed -h4eu4 -h1f -h1h -hi5a2n -h2i1a -hi4co -high5 -h2ig -h4il2 -himer4 -h4i1na -hion4e -h2io -hio2n -h2i4p -hir4l -h4ir -hi3ro -hir4p -hir4r4 -his3el -h4ise -h4i2s4s -hith5er -h2ith -hith2e -h2i2v -4hk -4h1l4 -hla2n4 -h2lo -hlo3ri -4h1m -hmet4 -2h1n -h5odiz -h5o2d1s2 -ho4g -ho1ge4 -hol5a2r -ho1la -3hol4e -ho4ma -ho2me3 -ho1n4a -ho2n -ho5ny -3hood -hoo2 -hoo2n4 -hor5at -ho1ra -ho5r2is -hort3e -ho5ru -hos4e -ho5sen -hos1p -1ho2us -hou2 -house3 -hov5el -4h5p -4hr4 -hree5 -hro5niz -hro2n -hro3po -4h1s2 -h4s2h -h4t2a2r -h1ta -ht1en -ht5es -h4ty -hu4g -hu4min -hu1mi -hun5ke -hu4nk2 -hun4t -hus3t4 -h2us -hu4t -h1w -h4war4t -hw2a2r -hy3pe -hy3ph -hy2s -2i1a -i2al -iam4 -iam5e1te -i2a2n -4ianc -ian3i -4ian4t -ia5pe -ia2ss4 -i4a1t2iv -ia4tric -ia1tr -i4a2tu -ibe4 -ib3er1a -ib5ert -ib5i1a -ib3in -ib5it. -ibi2t -ib5ite -i1b2l2 -ib3li -i5bo -i1br -i2b5ri -i5bu4n -4icam -i1ca -5icap -4ic2a2r -i4car. -i4cara -icas5 -i4cay -iccu4 -ic3c -4iceo -4i2ch -2i1ci -i5c2id -ic5i1na -i2cin -i2c2ip -ic3i1pa -i4c1ly4 -i1c4l4 -i2c5oc -i1co -4i1cr -5icra -i4cry -ic4te -i2c1t -ic1tu2 -ic4t3u1a -ic3u1la -ic4um -ic5uo -i3cur -2id -i4dai2 -i1d2a -id5anc -ida2n -id5d4 -ide3a4l -ide4s2 -i2di -id5i2a2n -i1d4i3a -idi4a2r -i5d2ie4 -i1d3io -idi5ou2 -id1it -id5i1u -i3dle -i4dom -i1do -id3ow -i4dr -i2du -id5uo -2ie4 -ied4e -5ie5ga -ie2ld3 -ie1n5a4 -ien4e -i5e4n1n2 -i3ent2i -ien1t -i1er. -i3es2c -i1est -i3et -4if. -if5ero -ifer1 -iff5en -i4f1f -if4fr -4i2f3ic. -i1fi -i3f2ie4 -i3f4l2 -4i2ft -2ig -iga5b -i1ga -ig3er1a -ight3i -4igi -i3gib -ig3il4 -ig3in -ig3it -i4g4l2 -i2go -ig3or -ig5ot -i5gre -i1gr -ig2u5i2 -ig1ur -i3h -4i5i4 -i3j -4ik -i1la -il3a4b -i4l4ade -ila2d -i2l5am -ila5ra -il2a2r -i3leg -il1er -ilev4 -i2l5f -il1i -il3i1a -il2ib -il3io -il4ist -2il1it -il2iz -ill5ab -il1l -4i2l1n2 -il3o1q -il4ty -i4lt -il5ur -il3v -i4mag -i1ma -im3age -ima5ry -im2a2r -iment2a5r -i1men -i3men1t -imen1ta -4imet -im1i -im5i1d4a -im2id -imi5le -i5m2ini -4imit -im4ni -i4m1n -i3mo2n -i1mo -i2mu -im3u1la -2in. -i4n3au -i1na -4inav -incel4 -in3cer -4ind -in5dling -2ine -i3nee -in4er4a2r -in1er -iner1a -i5n2e2ss -i1nes -4in1ga -4inge -in5gen -4ingi -in5gling -ingl2 -4in1go -4in1gu -2ini -i5ni. -i4n4i1a -in3i4o -in1is -i5ni4te. -in2it -in2ite -5i3n2i1t2io -ini1ti -in3i1ty -4i4nk2 -4i4n1l -2i4n1n2 -2i1no -i4no4c -ino4s -i4not -2i2n1s2 -in3se -insu1r5a -in1su -insu2r -2int. -in1t -2in4th -in1u -i5n2us -4iny -2io -4io. -io1ge4 -io2gr -i1ol -io4m -ion3at -io2n -io1n1a -ion4ery -ion1er -ion3i -i2o5ph -ior3i -i4os -i4o5th -i5oti -io4to -i4our -iou2 -2ip -ipe4 -iphr2as4 -ip4hr4 -ip3i -ip4ic -ip4re4 -ipr2 -ip3ul -i3qua -iqu2 -iq5ue1f -iq3u2id -iq2ui2 -iq3ui3t -4ir -i1ra -i2ra4b -i4rac -ird5e -ire4de -i2r2ed -i4re1f -i4rel4 -i4res -ir5gi -irg2 -ir1i -iri5de -ir2id -ir4is -iri3tu -5i5r2iz -ir4min -ir1m -iro4g -5iron. -iro2n -ir5ul -2is. -is5ag -isa2 -is3a2r -isas5 -2is1c -is3ch2 -4ise -is3er -3i4s3f -is5ha2n -is2h -is3ho2n3 -isho4 -ish5op -is3i1b -is2i4d -i5sis -is5i1t2iv -isi1ti -4is4k2 -isla2n4 -is1l2 -4is4m1s2 -i2s1m -i2so -iso5mer -i3som -iso2me -is1p -is2pi -is4py -4i2s1s -is4sal -is1sa2 -issen4 -is4s1e4s -is4ta. -is1ta -is1te -is1t2i -ist4ly -is2tl -4istral -ist4r -is1tra -i2su -is5us -4i3ta. -i1ta -ita4bi -i2tab -i4tag -4ita5m -i3ta2n -i3tat -2ite -it3er1a -i5ter1i -it4es -2ith -i1ti -4i1t2i1a -4i2tic -it3i1ca -5i5tick1 -i2t3ig -it5il1l -i2tim -2i1t2io -4itis -i4ti2s4m -i2t5o5m -i1to -4ito2n -i4tram -i1tra -it5ry -4i4t3t2 -it3u1at -i1tu -itu1a -i5tud2 -it3ul -4itz. -i4tz -i1u -2iv -iv3el1l -iv3en. -i4v3er. -i4vers. -ive4r1s2 -iv5il. -i2vil -iv5io -iv1it -i5vore -iv3o3ro -i4v3ot -4i5w -ix4o -4iy -4iz2a2r2 -iza1 -i2z1i4 -5izon1t -i1zo -izo2n -5ja -jac4q -ja4p -1je -je4r5s2 -4jes4t2ie4 -jest2i -4jes2ty -jew3 -jo4p -5judg -3ka. -k3ab -k5ag -kais4 -kai2 -kal4 -k1b -k2ed -1kee -ke4g -ke5l2i -k3en4d -k1er -kes4 -k3e2st. -ke4ty -k3f -kh4 -k1i -5ki. -5k2ic -k4il1l -kilo5 -k4im -k4in. -kin4de -k4ind -k5i5n2e2ss -k2ine -ki1nes -kin4g -k2i4p -kis4 -k5is2h -kk4 -k1l -4k3ley -4k1ly -k1m -k5nes -1k2no -ko5r -kos2h4 -k3ou2 -kro5n -4k1s2 -k4sc -ks4l2 -k4s4y -k5t -k1w -lab3ic -l4abo -l4a2ci4 -l4ade -la2d -la3d2y -lag4n -la2m3o -3l4and -la2n -lan4dl -lan5et -lan4te -lan1t -lar4g2 -l2a2r -lar3i -las4e -la5ta2n -la2ta -4latel2i4 -4la1t2iv -4lav -la4v4a -2l1b -lbin4 -4l1c2 -lce4 -l3ci -2ld -l2de -ld4ere -ld4er1i -ldi4 -ld5is1 -l3dr -l4dri -le2a -le4bi -l2e1b -le2ft5 -le1f -5leg. -5le4g1g2 -le4mat -le1ma -lem5at1ic -4len. -3lenc -5le2ne. -1len1t -le3ph -le4pr2 -le2ra5b -ler1a -ler4e -3lerg2 -3l4er1i -l4ero -les2 -le5s1co -les2c -5lesq -3l2e2ss -5less. -l3e1va -lev4er. -lev1er -lev4er1a -lev4e4r1s2 -3ley -4leye -2lf -l5fr -4l1g4 -l5ga -lg2a2r3 -l4ges -l1go3 -2l3h -li4ag -l2i1a -li2am4 -liar5iz -li2a2r -liar1i -li4as -li4a1to -li5bi -5lic2io -l2i1ci -li4cor -li1co -4li4c3s2 -4lict. -li2c1t -l4icu -l3i1cy -l3i1d2a -l2id -lid5er -3li2di -lif3er1 -l4i4f1f -li4f4l2 -5ligate -l2ig -li1ga -3ligh -li4gra -li1gr -3l4ik -4l4i4l -lim4b2l2 -li4m1b -lim3i -li4mo -l4i4m4p -l4i1na -1l4ine -lin3ea -l2in3i -link5er -l4i4nk2 -li5og -l2io -4l4iq -lis4p -l1it -l2it. -5lit3i1ca -li1ti -l4i2tic -l5i5ti4c3s2 -liv3er -l2iv -l1iz -4lj -lka3 -l3kal4 -lka4t -l1l -l4law -l2le -l5le2a -l3lec -l3leg -l3lel -l3le4n -l3le4t -ll2i -l2lin4 -l5l4i1na -ll4o -lloq2ui5 -llo1q -lloqu2 -l2l5out -llou2 -l5low -2lm -l5met -lm3ing -l4mo2d1 -l1mo -lmo2n4 -2l1n2 -3lo. -lob5al -lo4ci -4lof -3log1ic -l5o1go -3logu -lom3er -lo2me -5long -lo2n -lon4i -l3o3niz -lood5 -loo2 -5lo4pe. -lop3i -l3o4p1m -lo1ra4 -lo4ra1to -lo5r2ie4 -lor5ou2 -5los. -los5et -5los5o3phiz -lo2so -los4op -los2oph -5los5o1phy -los4t -lo4ta -loun5d -lou2 -2lout -4lov -2lp -lpa5b -l1pa -l3pha -l5phi -lp5ing -lpi2n -l3pit -l4p2l2 -l5pr2 -4l1r -2l1s2 -l4sc -l2se -l4s2ie4 -4lt -lt5ag -l1ta -ltane5 -lta2n -l1te -lten4 -lter1a4 -lth3i -l5ties. -lt2ie4 -ltis4 -l1tr -l1tu2 -ltu1r3a -lu5a -lu3br -lu2ch4 -lu3ci -lu3en -luf4 -lu5id -l2ui2 -lu4ma -5lu1mi -l5umn. -lu4m1n -5lum3n4i1a -lu3o -luo3r -4lup -lu2ss4 -l2us -lus3te -1lut -l5ven -l5vet4 -2l1w -1ly -4lya -4ly1b -ly5me4 -ly3no -2lys4 -l5y3s2e -1ma -2mab -ma2ca -ma5ch2ine -ma2ch -ma4ch1in -ma4c4l4 -mag5in -mag1i -5mag1n -2mah -ma2id5 -mai2 -4ma2ld -ma3l2ig -mal1i -ma5lin -mal4l2i -mal1l -mal4ty -ma4lt -5ma3n4i1a -ma2n -man5is -man3iz -4map -ma5ri2ne. -m2a2r -mar1i -mar2in4e -ma5r2iz -mar4ly -mar1l -mar3v -ma5sce -mas4e -mas1t -5mate -m4ath3 -ma3tis -4mati3za1 -ma1tiz -4m1b -m1ba4t5 -m5bil -m4b3ing -mb2i4v -4m5c -4me. -2med -4med. -5me3d4i3a -m4edi -me3d2ie4 -m5e5d2y -me2g -mel5o2n -me4l4t -me2m -me1m1o3 -1men -me1n4a -men5ac -men4de -4mene -men4i -me2n1s4 -men1su5 -3men1t -men4te -me5o2n -m5er1sa2 -me4r1s2 -2mes -3mest2i -me4ta -met3a2l -me1te -me5thi -m4etr -5met3ric -me5tr2ie4 -me3try -me4v -4m1f -2mh -5mi. -m2i3a -mi1d4a -m2id -mid4g -m2ig4 -3mil3i1a -mil1i -m5i5l2ie4 -m4il1l -mi1n4a -3m4ind -m5i3nee -m2ine -m4ingl2 -min5gli -m5ing1ly -min4t -m4in1u -miot4 -m2io -m2is -mi4s4er. -m4ise -mis3er -mis5l2 -mis4t2i -m5i4stry -mist4r -4m2ith -m2iz -4mk -4m1l -m1m -mma5ry -m1ma -mm2a2r -4m1n -m1n4a -m4n1in -mn4o -1mo -4mocr -5moc5ra1tiz -mo2d1 -mo4go -mois2 -moi2 -mo4i5se -4m2ok -mo5lest -moles2 -mo3me -mon5et -mo2n -mon5ge -mo3n4i3a -mon4i2s1m -mon1is -mon4ist -mo3niz -monol4 -mo3ny. -mo2r -4mo5ra. -mo1ra -mos2 -mo5sey -mo3sp -m4oth3 -m5ouf -mou2 -3mo2us -mo2v -4m1p -mpara5 -m1pa -mp2a2r -mpa5rab -mp4a4r5i -m3pe2t -mphas4 -m2pi -mp2i4a -mp5ies -mp2ie4 -m4p1i2n -m5p4ir -mp5is -mpo3ri -m1p4or -mpos5ite -m1pos -m4po2us -mpou2 -mpov5 -mp4tr -m2p1t -m2py -4m3r -4m1s2 -m4s2h -m5si -4mt -1mu -mul2a5r4 -mu1la -5mu4lt -mul1ti3 -3mum -mun2 -4mup -mu4u -4mw -1na -2n1a2b -n4abu -4nac. -na4ca -n5a2c1t -nag5er. -nak4 -na4l1i -na5l2i1a -4na4lt -na5mit -n2a2n -nan1ci4 -nan4it -na4nk4 -nar3c -n2a2r -4nare -nar3i -nar4l -n5ar1m -n4as -nas4c -nas5t2i -n2at -na3ta2l -na2ta -nat5o5m2iz -na2tom -na1to -n2au -nau3se -na2us -3naut -nav4e -4n1b4 -nc2a2r5 -n1ca -n4ces. -n3cha -n2ch -n5cheo -nche2 -n5ch4il2 -n3chis -n2c1in -n1ci -n2c4it -ncou1r5a -n1co -ncou2 -n1cr -n1cu -n4dai2 -n1d2a -n5da2n -n1de -nd5e2st. -ndes2 -ndi4b -n5d2if -n1dit -n3diz -n5du2c -n1du -ndu4r -nd2we -nd1w -2ne. -n3e2a2r -n2e2b -neb3u -ne2c -5neck1 -2ned -ne4gat -ne1ga -ne4g5a1t2iv -5nege -ne4la -nel5iz -nel2i -ne5mi -ne4mo -1nen -4nene -3neo -ne4po -ne2q -n1er -ne2ra5b -ner1a -n4er3a2r -n2ere -n4er5i -ner4r4 -1nes -2nes. -4ne1sp -2nest -4nes4w2 -3net1ic -ne4v -n5eve -ne4w -n3f -n4gab -n1ga -n3gel -nge4n4e -n1gen -n5gere -n3ger1i -ng5ha -n3gib -ng1in -n5git -n4gla4 -ngl2 -ngov4 -n1go -ng5s2h -ngs2 -n1gu -n4gum -n2gy -4n1h4 -nha4 -nhab3 -nhe4 -3n4i1a -ni3a2n -ni4ap -ni3ba -ni4b2l2 -n2i4d -ni5di -ni4er -n2ie4 -ni2fi -ni5ficat -nifi1ca -n5i1gr -n2ig -n4ik4 -n1im -ni3m2iz -nim1i -n1in -5ni2ne. -n2ine -nin4g -n2i4o -5n2is. -nis4ta -n2it -n4ith -3n2i1t2io -ni1ti -n3itor -ni1to -ni3tr -n1j -4nk2 -n5k2ero -nk1er -n3ket -nk3in -nk1i -n1k1l -4n1l -n5m -nme4 -nmet4 -4n1n2 -nne4 -nni3al -n3n4i1a -nn2i4v -nob4l2 -no3ble -n5o1c4l4 -4n3o2d -3noe -4nog -no1ge4 -nois5i -noi2 -no5l4i -5nol1o1gis -3nomic -n5o5m2iz -no4mo -no3my -no4n -non4ag -no1n1a -non5i -n5oniz -4nop -5nop5o5l2i -no2r5ab -no1ra -no4rary -nor2a2r -4nos2c -nos4e -nos5t -no5ta -1nou2 -3noun -nov3el3 -nowl3 -n1p4 -npi4 -npre4c -npr2 -n1q -n1r -nru4 -2n1s2 -n2s5ab -nsa2 -nsati4 -ns4c -n2se -n4s3e4s -ns2id1 -ns2ig4 -n2s1l2 -n2s3m -n4soc -n1so -ns4pe -n5spi -nsta5b2l2 -ns1ta -ns2tab -n1t -n2ta4b -n1ta -nte4r3s2 -nt2i -n5ti2b -nti4er -nt2ie4 -nti2f2 -n3t2ine -n2t1in -n4t3ing -nt2i4p -ntrol5l2i -ntrol1l -n4t4s2 -ntu3me -n1tu -n3tum -nu1a -nu4d -nu5en -nuf4fe -nu4f1f -n3ui4n -n2ui2 -3nu3it -n4um -nu1me -n5u1mi -3nu4n -n3uo -nu3tr -n1v2 -n1w4 -nym4 -nyp4 -4nz -n3za1 -4oa -oa2d3 -o5a5les2 -o2ale -oard3 -o2a2r -oas4e -oast5e -oat5i -ob3a3b -o5b2a2r -o1be4l -o1bi -o2bin -ob5ing -o3br -ob3ul -o1ce -o2ch4 -o3che4t -oche2 -ocif3 -o1ci -o4cil -o4clam -o1c4l4 -o4cod -o1co -oc3rac -oc5ra1tiz -ocre3 -5ocrit -ocri2 -octo2r5a -o2c1t -oc1to -oc3u1la -o5cure -od5d1ed -od1d4 -od3ic -o1d2i3o -o2do4 -od4or3 -o4d5uct. -o1du -odu2c -odu2c1t -o4d5uc4t1s2 -o4el -o5eng -o3er -oe4ta -o3ev -o2fi -of5ite -of4i4t4t2 -o2g5a5r -o1ga -o4g5a1t2iv -o4ga1to -o1ge -o5gene -o1gen -o5geo -o4ger -o3g2ie4 -1o1gis -og3it -o4gl2 -o5g2ly -3ogniz -og1ni -o4g4ro -o1gr -og2u5i2 -1o1gy -2o2g5y3n -o1h2 -ohab5 -oi2 -oic3es -oi3der -o2id -oi4f1f4 -o2ig4 -oi5let -o3ing -oint5er -oin1t -o5i2s1m -oi5so2n -oi2so -oist5en -ois1te -oi3ter -o2ite -o5j -2ok -o3ken -ok5ie4 -ok1i -o1la -o4la2n -ola2ss4 -o2l2d -ol2d1e -ol3er -o3les2c -oles2 -o3let -ol4fi -o2lf -ol2i -o3l2i1a -o3lice -ol5id. -ol2id -o3li4f -o5l4i4l -ol3ing -o5l2io -o5l2is. -ol3is2h -o5l2ite -ol1it -o5l2i1t2io -oli1ti -o5l2iv -oll2i4e4 -ol1l -oll2i -ol5o3giz -olo4r -ol5p2l2 -o2lp -o4l2t -ol3ub -ol3ume -ol3un -o5l2us -ol2v -o2ly -o2m5ah -o1ma -oma5l -om5a1tiz -om2be -o4m1b -om4b2l2 -o2me -om3e1n4a -o1men -om5er2se -ome4r1s2 -o4met -om5e3try -om4etr -o3m2i3a -om3ic. -om3i1ca -o5m2id -om1in -o5m2ini -5ommend -om1m -om1men -omo4ge -o1mo -o4mo2n -om3pi -o4m1p -ompro5 -ompr2 -o2n -o1n1a -on4ac -o3n2a2n -on1c -3oncil -on1ci -2ond -on5do -o3nen -o2n5est -o1nes -on4gu -on1ic -o3n2i4o -on1is -o5ni1u -on3key -o4nk2 -on4odi -o4n3o2d -on3o3my -o2n3s2 -on5spi4 -onspi1r5a -onsp4ir -on1su4 -onten4 -on1t -on3t4i -onti2f5 -on5um -on1va5 -on1v2 -oo2 -ood5e -ood5i -o2o4k -oop3i -o3ord -oost5 -o2pa -o2p2e5d -op1er -3oper1a -4op4erag -2oph -o5pha2n -o5ph4er -op3ing -opi2n -o3pit -o5po2n -o4posi -o1pos -o1pr2 -op1u -opy5 -o1q -o1ra -o5ra. -o4r3ag -or5al1iz -oral1i -or5an4ge -ora2n -or2ang -ore5a -o5re1a4l -or3ei2 -or4e5s2h -or5e2st. -ores2t -orew4 -or4gu -org2 -4o5r2i3a -or3i1ca -o5ril -or1in -o1r2i1o -or3i1ty -o3ri1u -or2mi -or1m -orn2e -o5rof -or3oug -orou2 -or5pe -or1p -3orrh4 -or1r4 -or4se -o4rs2 -ors5en -orst4 -or3thi -or3thy -or4ty -o5rum -o1ry -os3al -osa2 -os2c -os4ce -o3scop -os1co -4oscopi -o5scr -os4i4e4 -os5i1t2iv -osi1ti -os3i1to -os3i1ty -o5si4u -os4l2 -o2so -o2s4pa -os4po -os2ta -o5stati -os5til -ost2i -os5tit -o4ta2n -o1ta -otele4g -ot3er. -ot5e4r1s2 -o4tes -4oth -oth5e1si -oth2e -oth1es -oth3i4 -ot3ic. -ot5i1ca -o3tice -o3tif2 -o3tis -oto5s2 -o1to -ou2 -ou3b2l2 -ouch5i -ou2ch -ou5et -ou4l -ounc5er -oun2d -ou5v2 -ov4en -over4ne -ove4r3s2 -ov4ert -o3vis -o4vi1ti4 -o5v4ol -ow3der -ow3el -ow5est3 -ow1i2 -own5i -o4wo2 -oy1a -1pa -pa4ca -pa4ce -pa2c4t -p4a2d -5paga4n -pa1ga -p3agat -p4ai2 -pa4i4n4 -p4al -pa1n4a -pa2n -pan3el -pan4ty -pan1t -pa3ny -pa1p -pa4pu -para5b2l2 -p2a2r -pa2rab -par5age -par5d2i -3pare -par5el -p4a4r1i -par4is -pa2te -pa5ter -5pathic -p4ath -pa5thy -pa4tric -pa1tr -pav4 -3pay -4p1b -pd4 -4pe. -3pe4a -pear4l -pe2a2r -pe2c -2p2ed -3pede -3p4edi -pe3d4i3a4 -ped4ic -p4ee -pee4d -pek4 -pe4la -pel2i4e4 -pel2i -pe4n2a2n -pe1na -p4enc -pen4th -pen1t -pe5o2n -p4era. -per1a -pera5b2l2 -pe2ra4b -p4erag -p4er1i -peri5st -per2is -per4mal -per3m4 -per1ma -per2me5 -p4ern -p2er3o -per3ti -p4e5ru -per1v -pe2t -pe5ten -pe5tiz -4pf -4pg -4ph. -phar5i -ph2a2r -ph4e3no -phe2n -ph4er -ph4es. -ph1es -ph1ic -5ph2ie4 -ph5ing -5phis1t2i -3phiz -p4h2l4 -3phob -3phone -pho2n -5phoni -pho4r -4p4h1s2 -ph3t -5phu -1phy -p2i3a -pi2a2n4 -pi4c2ie4 -p2i1ci -pi4cy -p4id -p5i1d2a -pi3de -5pi2di -3piec -p2ie4 -pi3en -pi4grap -p2ig -pi1gr -pi3lo -pi2n -p4in. -p4ind4 -p4i1no -3p2i1o -pio2n4 -p3ith -pi5tha -pi2tu -2p3k2 -1p2l2 -3pla2n -plas5t -pl2i3a -pli5er -pl2ie4 -4pl2ig -pli4n -ploi4 -plu4m -plu4m4b -4p1m -2p3n -po4c -5pod. -po5em -po3et5 -5po4g -poin2 -poi2 -5poin1t -poly5t -po2ly -po4ni -po2n -po4p -1p4or -po4ry -1pos -po2s1s -p4ot -po4ta -5poun -pou2 -4p1p -ppa5ra -p1pa -pp2a2r -p2pe -p4p2ed -p5pel -p3pen -p3per -p3pe2t -ppo5s2ite -p1pos -pr2 -pray4e4 -5pre1c2i -pre5co -pre3e2m -pre4f5ac -pre1f -pre1fa -pre4la -pr1e3r4 -p3re1s2e -3pr2e2ss -pre5ten -pre3v2 -5pr2i4e4 -prin4t3 -pr2i4s -pri2s3o -p3ro1ca -pr2oc -prof5it -pro2fi -pro3l -pros3e -pro1t -2p1s2 -p2se -ps4h -p4si1b -2p1t -p2t5a4b -p1ta -p2te -p2th -p1ti3m -ptu4r -p1tu -p4tw4 -pub3 -pue4 -puf4 -pu4l3c2 -pu4m -pu2n -pur4r4 -5p2us -pu2t -5pute -put3er -pu3tr -put4t1ed -pu4t3t2 -put4t1in -p3w -qu2 -qua5v4 -2que. -3quer -3quet -2rab -ra3bi -rach4e2 -ra2ch -r5a1c4l4 -raf5fi -ra2f -ra4f1f4 -ra2f4t -r2ai2 -ra4lo -ram3et -r2ami -ra3ne5o -ra2n -ran4ge -r2ang -r4ani -ra5no4 -rap3er -3ra1phy -rar5c -r2a2r -rare4 -rar5e1f -4raril -rar1i -r2as -ratio2n4 -ra1t2io -rau4t -ra5vai2 -ra2va -rav3el -ra5z2ie4 -ra2z1i -r1b -r4bab -r4bag -rbi2 -r2b3i4f -r2bin -r5b2ine -rb5ing. -rb4o -r1c -r2ce -r1cen4 -r3cha -r2ch -rch4er -rche2 -r4ci4b -r1ci -r2c4it -rcum3 -r4dal -r1d2a -rd2i -r1d4i4a -rdi4er -rd2ie4 -rd1in4 -rd3ing -2re. -re1a4l -re3a2n -re5ar1r4 -re2a2r -5rea2v -re4aw -r5ebrat -r2e1b -re3br -rec5ol1l -re2col -re1co -re4c5ompe -reco4m1p -re4cre -re1cr -2r2ed -re1de -re3dis1 -r4edi -red5it -re4fac -re1f -re1fa -re2fe -re5fer. -refer1 -re3fi -re4fy -reg3is -re5it -rei2 -re1l2i -re5lu -r4en4ta -ren1t -ren4te -re1o -re5pi2n -re4posi -re1po -re1pos -re1pu -r1er4 -r4er1i -r2ero4 -r4e5ru -r4es. -re4spi -re1sp -res4s5i4b -r2e2ss -res1si -res2t -re5s2ta2l -res1ta -r2e3st4r -re4ter -re4ti4z -re3tri -r4eu2 -re5u1t2i -rev2 -re4val -re1va -rev3el -r5ev5er. -rev1er -re5ve4r1s2 -re5vert -re5vi4l -re1vi -rev5olu -re4wh -r1f -r3fu4 -r4fy -rg2 -rg3er -r3get -r3g1ic -rgi4n -rg3ing -r5gis -r5git -r1gl2 -rgo4n2 -r1go -r3gu -rh4 -4rh. -4rhal -r2i3a -ria4b -ri4ag -r4ib -rib3a -ric5as5 -ri1ca -r4ice -4r2i1ci -5ri5c2id -ri4c2ie4 -r4i1co -rid5er -r2id -ri3enc -r2ie4 -ri3en1t -ri1er -ri5et -rig5a2n -r2ig -ri1ga -5r4igi -ril3iz -ril1i -5rima2n -ri1ma -rim5i -3ri1mo -rim4pe -ri4m1p -r2i1na -5rina. -r4in4d -r2in4e -rin4g -r2i1o -5riph -r2ip -riph5e -ri2p2l2 -rip5lic -r4iq -r2is -r4is. -r2is4c -r3is2h -ris4p -ri3ta3b -ri1ta -r5ited. -r2ite -ri2t1ed -rit5er. -rit5e4r1s2 -r4i2t3ic -ri1ti -ri2tu -rit5ur -riv5el -r2iv -riv3et -riv3i -r3j -r3ket -rk4le -rk1l -rk4lin -r1l -rle4 -r2led -r4l2ig -r4lis -rl5is2h -r3lo4 -r1m -rma5c -r1ma -r2me -r3men -rm5e4r1s2 -rm3ing -r4ming. -r4m2io -r3mit -r4my -r4n2a2r -r1na -r3nel -r4n1er -r5net -r3ney -r5nic -r1nis4 -r3n2it -r3n2iv -rno4 -r4nou2 -r3nu -rob3l2 -r2oc -ro3cr -ro4e -ro1fe -ro5fil -ro2fi -r2ok2 -ro5k1er -5role. -rom5e1te -ro2me -ro4met -rom4i -ro4m4p -ron4al -ro2n -ro1n1a -ron4e -ro5n4is -ron4ta -ron1t -1room -roo2 -5root -ro3pel -rop3ic -ror3i -ro5ro -ro2s5per -ro2s4s -ro4th2e -r4oth -ro4ty -ro4va -rov5el -rox5 -r1p -r4pe4a -r5pen1t -rp5er. -r3pe2t -rp4h4 -rp3ing -rpi2n -r3po -r1r4 -rre4c -rre4f -r4re1o -rre4s2t -rr2i4o -rr2i4v -rro2n4 -rros4 -rrys4 -4rs2 -r1sa2 -rsa5ti -rs4c -r2se -r3sec -rse4cr -r4s5er. -rs3e4s -r5se5v2 -r1s2h -r5sha -r1si -r4si4b -rso2n3 -r1so -r1sp -r5sw2 -rta2ch4 -r1ta -r4tag -r3t2e1b -r3ten4d -r1te5o -r1ti -r2t5i2b -rt2i4d -r4tier -rt2ie4 -r3t2ig -rtil3i -rtil4l -r4ti1ly -r4tist -r4t2iv -r3tri -rtr2oph4 -rt4s2h4 -r4t1s2 -ru3a -ru3e4l -ru3en -ru4gl2 -ru3i4n -r2ui2 -rum3p2l2 -ru4m2p -ru2n -ru4nk5 -run4ty -run1t -r5usc2 -r2us -ru2t1i5n -r4u1t2i -rv4e -rvel4i -r3ven -rv5er. -r5vest -rv4e2s -r3vey -r3vic -r3v2i4v -r3vo -r1w -ry4c -5rynge -ryn5g -ry3t -sa2 -2s1ab -5sack1 -sac3ri2 -s3a2c1t -5sai2 -sa4l2a2r4 -s4a2l4m -sa5lo -sa4l4t -3sanc -sa2n -san4de -s4and -s1ap -sa5ta -5sa3t2io -sa2t3u -sau4 -sa5vor -5saw -4s5b -scan4t5 -s1ca -sca2n -sca4p -scav5 -s4ced -4s3cei2 -s4ces -s2ch2 -s4cho2 -3s4c2ie4 -s1ci -5sc4in4d -s2cin -scle5 -s1c4l4 -s4cli -scof4 -s1co -4scopy5 -scou1r5a -scou2 -s1cu -4s5d -4se. -se4a -seas4 -sea5w -se2c3o -3se2c1t -4s4ed -se4d4e -s5edl -se2g -se1g3r -5sei2 -se1le -5se2l2f -5selv -4se1me -se4mol -se1mo -sen5at -se1na -4senc -sen4d -s5e2ned -sen5g -s5en1in -4sen4t1d -sen1t -4sen2tl -se2p3a3 -4s1er. -s4er1l -s2er4o -4ser3vo -s1e4s -s4e5s2h -ses5t -5se5um -s4eu -5sev -sev3en -sew4i2 -5sex -4s3f -2s3g -s2h -2sh. -sh1er -5shev -sh1in -sh3io -3sh2i4p -sh2i2v5 -sho4 -sh5o2l2d -sho2n3 -shor4 -short5 -4sh1w -si1b -s5ic3c -3si2de. -s2id -5side4s2 -5si2di -si5diz -4sig1n4a -s2ig -sil4e -4si1ly -2s1in -s2i1na -5si2ne. -s2ine -s3ing -1s2io -5sio2n -sio1n5a -s4i2r -si1r5a -1sis -3s2i1t2io -si1ti -5si1u -1s2iv -5siz -sk2 -4ske -s3ket -sk5ine -sk1i -sk5in4g -s1l2 -s3lat -s2le -sl2ith5 -sl1it -2s1m -s3ma -smal1l3 -sma2n3 -smel4 -s5men -5s4m2ith -smo2l5d4 -s1mo -s1n4 -1so -so4ce -so2ft3 -so4lab -so1la -so2l3d2 -so3lic -sol2i -5sol2v -3som -3s4on. -so2n -so1n1a4 -son4g -s4op -5soph1ic -s2oph -s5o3phiz -s5o1phy -sor5c -sor5d -4sov -so5vi -2s1pa -5sp4ai2 -spa4n -spen4d -2s5peo -2sper -s2phe -3sph4er -spho5 -spil4 -sp5ing -spi2n -4s3p2i1o -s4p1ly -s1p2l2 -s4po2n -s1p4or4 -4sp4ot -squal4l -squ2 -s1r -2ss -s1sa2 -ssas3 -s2s5c -s3sel -s5sen5g -s4ses. -ss1e4s -s5set -s1si -s4s2ie4 -ssi4er -s4s5i1ly -s4s1l2 -ss4li -s4s1n4 -sspen4d4 -ss2t -ssu1r5a -s1su -ssu2r -ss5w2 -2st. -s2tag -s1ta -s2ta2l -stam4i -5st4and -sta2n -s4ta4p -5stat. -s4t1ed -stern5i -s5t2ero -ste2w -ste1w5a -s3th2e -st2i -s4ti. -s5t2i1a -s1tic -5s4tick1 -s4t2ie4 -s3tif2 -st3ing -s2t1in -5st4ir -s1tle -s2tl -5stock1 -s1to -sto2m3a -5stone -sto2n -s4top -3store -st4r -s4tra2d -s1tra -5stra2tu -s4tray -s4tr2id -4stry -4st3w4 -s2ty -1su -su1al -su4b3 -su2g3 -su5is -s2ui2 -suit3 -s4ul -su2m -su1m3i -su2n -su2r -4sv -sw2 -4s1wo2 -s4y -4sy1c -3syl -syn5o -sy5rin -1ta -3ta. -2tab -ta5bles2 -tab2l2 -5tab5o5l1iz -tabol2i -4t4a2ci -ta5do -ta2d -4ta2f4 -tai5lo -tai2 -ta2l -ta5la -tal5en -t2ale -tal3i -4talk -tal4lis -tal1l -tall2i -ta5log -ta5mo -tan4de -ta2n -t4and -1tan1ta3 -tan1t -ta5per -ta5p2l2 -tar4a -t2a2r -4tar1c -4tare -ta3r2iz -tar1i -tas4e -ta5s4y -4tat1ic -ta4tur -ta2tu -taun4 -tav4 -2taw -tax4is -tax3i -2t1b -4tc -t4ch -tch5e4t -tche2 -4t1d -4te. -te2ad4i -tea2d1 -4tea2t -te1ce4 -5te2c1t -2t1ed -t4e5di -1tee -teg4 -te5ger4 -te5gi -3tel. -tel2i4 -5te2l1s2 -te2ma2 -tem3at -3ten2a2n -te1na -3tenc -3tend -4te1nes -1ten1t -ten4tag -ten1ta -1teo -te4p -te5pe -ter3c -5ter3d -1ter1i -ter5ies -ter2ie4 -ter3is -teri5za1 -5t4er3n2it -ter5v -4tes. -4t2e2ss -t3ess. -teth5e -3t4eu -3tex -4tey -2t1f -4t1g -2th. -tha2n4 -th2e -4thea -th3eas -the5a2t -the3is -thei2 -3the4t -th5ic. -th5i1ca -4th4il2 -5th4i4nk2 -4t4h1l4 -th5ode -5thod3ic -4thoo2 -thor5it -tho5riz -2t4h1s2 -1t2i1a -ti4ab -ti4a1to -2ti2b -4tick1 -t4i1co -t4ic1u -5ti2di -t2id -3tien -t2ie4 -tif2 -ti5fy -2t2ig -5tigu -til2l5in4 -til1l -till2i -1tim -4ti4m1p -tim5ul -ti2mu -2t1in -t2i1na -3ti2ne. -t2ine -3t2ini -1t2io -ti5oc -tion5ee -tio2n -5tiq -ti3sa2 -3t4ise -ti2s4m -ti5so -tis4p -5tisti1ca -tis1t2i -tis1tic -ti3tl -ti4u -1t2iv -ti1v4a -1tiz -ti3za1 -ti3ze4n -ti2ze -2tl -t5la -tla2n4 -3tle. -3tled -3tles. -tles2 -t5let. -t5lo -4t1m -tme4 -2t1n2 -1to -to3b -to5crat -4to2do4 -2tof -to2gr -to5ic -toi2 -to2ma -to4m4b -to3my -ton4a4l1i -to2n -to1n1a -to3n2at -4tono -4tony -to2ra -to3r2ie4 -tor5iz -tos2 -5tour -tou2 -4tout -to3w2a2r -4t1p -1tra -t2ra3b -tra5ch -tr4a2ci4 -tra2c4it -trac4te -tra2c1t -tr2as4 -tra5ven -trav5e2s5 -tre5f -tre4m -trem5i -5tr2i3a -tri5ces -tr4ice -5tri3c2i1a -t4r2i1ci -4tri4c3s2 -2trim -tr2i4v -tro5m4i -tron5i -tro2n -4trony -tro5phe -tr2oph -tro3sp -tro3v -tr2u5i2 -tr2us4 -4t1s2 -t4sc -ts2h4 -t4sw2 -4t3t2 -t4tes -t5to -t1tu4 -1tu -tu1a -tu3a2r -tu4b4i -tud2 -4tue -4tuf4 -5t2u3i2 -3tum -tu4nis -tu1ni -2t3up. -3ture -5turi -tur3is -tur5o -tu5ry -3t2us -4tv -tw4 -4t1wa -twis4 -twi2 -4t1wo2 -1ty -4tya -2tyl -type3 -ty5ph -4tz -t2z4e -4uab -uac4 -ua5na -ua2n -uan4i -uar5an1t -u2a2r -uara2n -uar2d -uar3i -uar3t -u1at -uav4 -ub4e -u4bel -u3ber -u4b2ero -u1b4i -u4b5ing -u3b4le. -ub2l2 -u3ca -uci4b -u1ci -u2c4it -ucle3 -u1c4l4 -u3cr -u3cu -u4cy -ud5d4 -ud3er -ud5est -udes2 -ude1v4 -u1dic -ud3ied -ud2ie4 -ud3ies -ud5is1 -u5dit -u4do2n -u1do -ud4si -u2d1s2 -u4du -u4ene -ue2n1s4 -uen4te -uen1t -uer4il -uer1i -3u1fa -u3f4l2 -ugh3e2n -ug5in -2ui2 -uil5iz -uil1i -ui4n -u1ing -uir4m -u4ir -ui1ta4 -u2iv3 -ui4v4er. -u5j -4uk -u1la -ula5b -u5lati -ul2ch4 -u4l1c2 -5ulche2 -ul3der -u2ld -ul2de -ul4e -u1len -ul4gi -u4l1g4 -ul2i -u5l2i1a -ul3ing -ul5is2h -ul4l2a2r -ul1l -ul4li4b -ull2i -ul4lis -4u2l3m -u1l4o -4u2l1s2 -uls5e4s -ul2se -ul1ti -u4lt -ul1tra3 -ul1tr -4ul1tu2 -u3lu -ul5ul -ul5v -u2m5ab -u1ma -um4bi -u4m1b -um4b1ly -umb2l2 -u1mi -u4m3ing -umor5o -u1mo -umo2r -u4m2p -un2at4 -u1na -u2ne -un4er -u1ni -un4im -u2n1in -un5is2h -un2i3v -u2n3s4 -un4sw2 -un2t3a4b -un1t -un1ta -un4ter. -un4tes -unu4 -un5y -u4n5z -u4o4rs2 -u5os -u1ou2 -u1pe -upe4r5s2 -u5p2i3a -up3ing -upi2n -u3p2l2 -u4p3p -upport5 -up1p4or -up2t5i2b -u2p1t -up1tu4 -u1ra -4ura. -u4rag -u4r2as -ur4be -ur1b -ur1c4 -ur1d -ure5a2t -ur4fer1 -ur1f -ur4fr -u3rif -uri4fic -uri1fi -ur1in -u3r2i1o -u1rit -ur3iz -ur2l -url5ing. -ur4no4 -uros4 -ur4pe -ur1p -ur4pi -urs5er -u4rs2 -ur2se -ur5tes -ur3th2e -ur1ti4 -ur4t2ie4 -u3ru -2us -u5sa2d -usa2 -u5sa2n -us4ap -usc2 -us3ci -use5a -u5s2i1a -u3sic -us4lin -us1l2 -us1p -us5s1l2 -u2ss -us5tere -us1t4r -u2su -usu2r4 -u2ta4b -u1ta -u3tat -4u4te. -4utel -4uten -uten4i -4u1t2i -uti5l2iz -util1i -u3t2ine -u2t1in -ut3ing -utio1n5a -u1t2io -utio2n -u4tis -5u5tiz -u4t1l -u2t5of -u1to -uto5g -uto5mat1ic -uto2ma -u5to2n -u4tou2 -u4t1s4 -u3u -uu4m -u1v2 -ux1u3 -u2z4e -1va -5va. -2v1a4b -vac5il -v4a2ci -vac3u -vag4 -va4ge -va5l2i4e4 -val1i -val5o -val1u -va5mo -va5niz -va2n -va5pi -var5ied -v2a2r -var1i -var2ie4 -3vat -4ve. -4ved -veg3 -v3el. -vel3l2i -vel1l -ve4lo -v4e1ly -ven3om -v4eno -v5enue -v4erd -5v2e2re. -v4erel -v3eren -ver5enc -v4eres -ver3ie4 -ver1i -vermi4n -ver3m4 -3ver2se -ve4r1s2 -ver3th -v4e2s -4ves. -ves4te -ve4te -vet3er -ve4ty -vi5al1i -v2i1a -vi2al -5vi2a2n -5vi2de. -v2id -5vi2d1ed -4v3i1den -5vide4s2 -5vi2di -v3if -vi5gn -v2ig -v4ik4 -2vil -5v2il1it -vil1i -v3i3l2iz -v1in -4vi4na -v2inc -v4in5d -4ving -vi1o3l -v2io -v3io4r -vi1ou2 -v2i4p -vi5ro -v4ir -vis3it -vi3so -vi3su -4vi1ti -vit3r -4vi1ty -3v2iv -5vo. -voi4 -3v2ok -vo4la -v5ole -5vo4l2t -3vol2v -vom5i -vo2r5ab -vo1ra -vori4 -vo4ry -vo4ta -4vo1tee -4vv4 -v4y -w5ab2l2 -2wac -wa5ger -wa2g5o -wait5 -wai2 -w5al. -wam4 -war4t -w2a2r -was4t -wa1te -wa5ver -w1b -wea5r2ie4 -we2a2r -wear1i -we4ath3 -wea2t -we4d4n4 -weet3 -wee5v -wel4l -w1er -west3 -w3ev -whi4 -wi2 -wil2 -wil2l5in4 -wil1l -will2i -win4de -w4ind -win4g -w4ir4 -3w4ise -w2ith3 -wiz5 -w4k -wl4es2 -wl3in -w4no -1wo2 -wom1 -wo5v4en -w5p -wra4 -wri4 -wri1ta4 -w3s2h -ws4l2 -ws4pe -w5s4t -4wt -wy4 -x1a -xac5e -x4a2go -xam3 -x4ap -xas5 -x3c2 -x1e -xe4cu1to -xe1cu -xe3c4ut -x2ed -xer4i -x2e5ro -x1h -xhi2 -xh4il5 -xhu4 -x3i -x2i5a -xi5c -xi5di -x2id -x4ime -xi5m2iz -xim1i -x3o -x4ob -x3p -xp4an4d -x1pa -xpa2n -xpec1to5 -xpe2c -xpe2c1t -x2p2e3d -x1t2 -x3ti -x1u -xu3a -xx4 -y5ac -3y2a2r4 -y5at -y1b -y1c -y2ce -yc5er -y3ch -ych4e2 -ycom4 -y1co -ycot4 -y1d -y5ee -y1er -y4er1f -yes4 -ye4t -y5gi -4y3h -y1i -y3la -ylla5b2l2 -yl1l -y3lo -y5lu -ymbol5 -y4m1b -yme4 -ym1pa3 -y4m1p -yn3c4hr4 -yn2ch -yn5d -yn5g -yn5ic -5ynx -y1o4 -yo5d -y4o5g -yom4 -yo5net -yo2n -y4o2n3s2 -y4os -y4p2ed -yper5 -yp3i -y3po -y4po4c -yp2ta -y2p1t -y5pu -yra5m -yr5i3a -y3ro -yr4r4 -ys4c -y3s2e -ys3i1ca -y1s3io -3y1sis -y4so -y2ss4 -ys1t -ys3ta -ysu2r4 -y1su -y3thin -yt3ic -y1w -za1 -z5a2b -z2a2r2 -4zb -2ze -ze4n -ze4p -z1er -z2e3ro -zet4 -2z1i -z4il -z4is -5zl -4zm -1zo -zo4m -zo5ol -zoo2 -zte4 -4z1z2 -z4zy -.as9s8o9c8i8a8te. -.as1so -.asso1ci -.asso3c2i1a -.as9s8o9c8i8a8t8es. -.de8c9l8i9n8a9t8i8on. -.de1c4l4 -.decl4i1na -.declin2at -.declina1t2io -.declinatio2n -.ob8l8i8g9a9t8o8ry. -.ob2l2 -.obl2ig -.obli1ga -.obliga1to -.obligato1ry -.ph8i8l9a8n9t8h8r8o8p8ic. -.ph4il2 -.phi1la -.phila2n -.philan1t -.philant4hr4 -.philanthrop3ic -.pr8e8s8e8nt. -.p3re1s2e -.presen1t -.pr8e8s8e8n8ts. -.presen4t4s2 -.pr8o8j8e8ct. -.pro5j -.pro1je -.proje2c1t -.pr8o8j8e8c8ts. -.projec4t1s2 -.re8c9i9p8r8o8c9i9t8y. -.re1c2i -.rec2ip -.recipr2 -.recipr2oc -.re1cipro1ci -.recipro2c1it -.reciproci1ty -.re9c8o8g9n8i9z8a8n8ce. -.re1co -.re2cog -.rec3ogniz -.recog1ni -.recogniza1 -.recogniza2n -.re8f9o8r9m8a9t8i8on. -.re1f -.re1fo -.refo2r -.refor1m -.refor1ma -.reforma1t2io -.reformatio2n -.re8t9r8i9b8u9t8i8on. -.re3tri -.retr4ib -.retri3bu1t2io -.retrib4u1t2i -.retributio2n -.ta9b8le. -.2tab -.tab2l2 -.ac8a8d9e9m8y. -.a1ca -.aca2d -.acad4em -.acade3my -.ac8a8d9e9m8i8e8s. -.academ2i4e4 -.ac9c8u9s8a9t8i8v8e. -.ac3c -.ac1c2us -.accusa2 -.accusa1t2iv -.ac8r8o9n8y8m. -.acro2n -.acronym4 -.ac8r8y8l9a8m8i8d8e. -.acry3la -.acrylam2id -.ac8r8y8l9a8m8i8d8e8s. -.acrylamide4s2 -.ac8r8y8l9a8l8d8e9h8y8d8e. -.acryla2ld -.acrylal2de -.acrylalde1h4 -.acrylaldehy1d -.ad8d9a9b8l8e. -.ad1d2a -.ad2d3a4b -.addab2l2 -.ad8d9i9b8l8e. -.addi1b2l2 -.ad8r8e8n9a9l8i8n8e. -.a1dr -.adre4 -.a5dren -.adre1na -.adrena4l1i -.adrena1l4ine -.ae8r8o9s8p8a8c8e. -.ae4r -.a2ero -.aero2s4pa -.aerospa4ce -.af9t8e8r9t8h8o8u8g8h8t. -.afterthou2 -.af9t8e8r9t8h8o8u8g8h8t8s. -.afterthough4t1s2 -.ag8r8o8n9o9m8i8s8t. -.a1gr -.ag4ro -.agro2n -.agronom2is -.ag8r8o8n9o9m8i8s8t8s. -.agronomis4t1s2 -.al9g8e9b8r8a9i9c8a8l9l8y. -.a4l1g4 -.alg2e1b -.alge3br -.algebr2ai2 -.algebrai1ca -.algebraical1l -.algebraical1ly -.am9p8h8e8t9a9m8i8n8e. -.a4m1p -.amphe4t -.amphe1ta -.amphetam1in -.amphetam2ine -.am9p8h8e8t9a9m8i8n8e8s. -.amphetami1nes -.an9a9l8y8s8e. -.3ana1ly -.a1na -.an4a2lys4 -.anal5y3s2e -.an9a9l8y8s8e8d. -.analy4s4ed -.an8a8l8y9s8e8s. -.analys1e4s -.an9i8s8o9t8r8o8p9i8c. -.ani2so -.anisotrop3ic -.an9i8s8o9t8r8o8p9i9c8a8l9l8y. -.anisotropi1ca -.anisotropical1l -.anisotropical1ly -.an9i8s8o8t9r8o9p8i8s8m. -.anisotropi2s1m -.an9i8s8o8t9r8o8p8y. -.anisotropy5 -.an8o8m9a8l8y. -.ano4 -.anoma5l -.ano1ma -.anoma1ly -.an8o8m9a8l8i8e8s. -.anomal1i -.anomal2i4e4 -.an8t8i9d8e8r8i8v9a9t8i8v8e. -.ant2id -.antider1i -.antider2i4v -.antide4ri1va -.antideri3vat -.antider2iva1t2iv -.an8t8i9d8e8r8i8v9a9t8i8v8e8s. -.antiderivativ4e2s -.an8t8i9h8o8l8o9m8o8r9p8h8i8c. -.anti3h -.antiholo1mo -.antiholomo2r -.antiholomor1p -.antiholomorp4h4 -.antiholomorph1ic -.an9t8i8n9o9m8y. -.an2t1in -.ant2i1no -.antino3my -.an9t8i8n9o9m8i8e8s. -.antinom2ie4 -.an9t8i9n8u9c8l8e8a8r. -.antin1u -.antinucle3 -.antinu1c4l4 -.antinucle2a -.antinucle2a2r -.an9t8i9n8u9c8l8e9o8n. -.antinucleo2n -.an9t8i9r8e8v9o9l8u9t8i8o8n9a8r8y. -.ant4ir -.antirev2 -.antirev5olu -.antirevo1lut -.antirevol4u1t2i -.antirevolutio1n5a -.antirevolu1t2io -.antirevolutio2n -.antirevolution2a2r -.ap8o8t8h9e9o9s8e8s. -.ap4ot -.ap4oth -.apoth2e -.apotheos4 -.apotheos1e4s -.ap8o8t8h9e9o9s8i8s. -.apotheo1sis -.ap9p8e8n9d8i8x. -.a4p1p -.ap2pe -.ap3pen -.ar9c8h8i9m8e9d8e8a8n. -.ar1c -.ar2ch -.archi2med -.archimedea2n -.ar9c8h8i9p8e8l9a8g8o. -.arch2i4p -.archipe4 -.archipe4la -.archipela2go -.ar9c8h8i9p8e8l9a9g8o8s. -.ar9c8h8i8v8e. -.arch2i2v -.ar9c8h8i8v8e8s. -.archiv4e2s -.ar9c8h8i8v9i8n8g. -.archiv1in -.archi4ving -.ar9c8h8i8v9i8s8t. -.ar9c8h8i8v9i8s8t8s. -.archivis4t1s2 -.ar9c8h8e9t8y8p9a8l. -.arche2 -.arche4t -.arche1ty -.archety1pa -.archetyp4al -.ar9c8h8e9t8y8p9i9c8a8l. -.archetyp3i -.archetypi1ca -.ar8c9t8a8n9g8e8n8t. -.ar2c1t -.arct5ang -.arc1ta -.arcta2n -.arctan1gen -.arctangen1t -.ar8c9t8a8n9g8e8n8t8s. -.arctangen4t4s2 -.as9s8i8g8n9a9b8l8e. -.as1si -.as4sig1n4a -.ass2ig -.assig2n1a2b -.assignab2l2 -.as9s8i8g8n9o8r. -.assig1no -.as9s8i8g8n9o8r8s. -.assigno4rs2 -.as9s8i8s8t9a8n8t9s8h8i8p. -.as1sis -.assis1ta -.assista2n -.assistan1t -.assistan4t4s2 -.assistants2h4 -.assistant3sh2i4p -.as9s8i8s8t9a8n8t9s8h8i8p8s. -.assistantshi2p1s2 -.as8y8m8p9t8o9m8a8t8i8c. -.as4y -.asy4m1p -.asym2p1t -.asymp1to -.asympto2ma -.asymptomat1ic -.as9y8m8p9t8o8t9i8c. -.as8y8n9c8h8r8o9n8o8u8s. -.asyn3c4hr4 -.asyn2ch -.asynchro2n -.asynchro1nou2 -.asynchrono2us -.at8h9e8r9o9s8c8l8e9r8o9s8i8s. -.4ath -.ath2e -.ath2ero -.atheros2c -.atheroscle5 -.atheros1c4l4 -.ath2eroscl4ero -.atherosclero1sis -.at9m8o8s9p8h8e8r8e. -.a4t1m -.at1mo -.atmos2 -.atmo3sp -.atmos2phe -.atmo3sph4er -.at9m8o8s9p8h8e8r8e8s. -.at9t8r8i8b9u8t8e8d. -.a4t3t2 -.attr4ib -.attribu2t1ed -.at9t8r8i8b9u8t9a8b8l8e. -.attri4bu1ta -.attribu2ta4b -.attributab2l2 -.au9t8o9m8a9t8i8o8n. -.au1to -.auto2ma -.automa1t2io -.automatio2n -.au9t8o8m9a9t8o8n. -.automa1to -.automato2n -.au9t8o8m9a9t8a. -.automa2ta -.au9t8o9n8u8m9b8e8r9i8n8g. -.au5to2n -.auton5um -.autonu4m1b -.autonumber1i -.autonumberin4g -.au9t8o8n9o9m8o8u8s. -.au4tono -.autono4mo -.autono3mo2us -.autonomou2 -.au8t8o9r8o8u8n8d9i8n8g. -.autorou2 -.autoroun2d -.autoround1in -.av9o8i8r9d8u9p8o8i8s. -.avoi4 -.avo4ir -.avoir1du -.avoir4dup -.avoirdupoi2 -.ba8n8d9l8e8a8d8e8r. -.b4and -.ban1dl -.bandle2a -.bandlea2d1 -.ba8n8d9l8e8a8d8e8r8s. -.bandleade4r5s2 -.ba8n8k9r8u8p8t. -.ba4nk2 -.bankru2p1t -.ba8n8k9r8u8p8t9c8y. -.bankrup4tc -.bankrupt1cy -.ba8n8k9r8u8p8t9c8i8e8s. -.bankrupt1ci -.bankruptc2ie4 -.ba8r9o8n8i8e8s. -.b2a2r -.ba5roni -.baro2n -.baron2ie4 -.ba8s8e9l8i8n8e9s8k8i8p. -.basel2i -.base1l4ine -.baseli1nes -.baselinesk2 -.baselinesk1i -.baselinesk2i4p -.ba9t8h8y8m9e9t8r8y. -.1bat -.b4ath -.bathyme4 -.bathym4etr -.bathyme3try -.ba8t8h8y9s8c8a8p8h8e. -.bathy2s -.bathys4c -.bathysca4p -.bathys1ca -.be8a8n9i8e8s. -.bea2n -.bea3nies -.bean2ie4 -.be9h8a8v9i8o8u8r. -.be1h4 -.behav1i -.behavi1ou2 -.behav2io -.behavi4our -.be9h8a8v9i8o8u8r8s. -.behaviou4rs2 -.be8v8i8e8s. -.be1vi -.bev2ie4 -.bi8b9l8i9o8g9r8a9p8h8y9s8t8y8l8e. -.bi2b -.bi1b2l2 -.bib3li -.bibli5og -.bibl2io -.biblio2gr -.biblio4g3ra1phy -.bibliography2s -.bibliographys1t -.bibliographys2ty -.bibliographys2tyl -.bi9d8i8f9f8e8r9e8n9t8i8a8l. -.b2i4d -.bi2di -.bid1if -.bidi4f1f -.bidiffer1 -.bidiffer3en1t -.bidifferent2i -.bidifferen1t2i1a -.bidifferenti2al -.bi8g9g8e8s8t. -.b2ig -.bi4g1g2 -.big2ge -.bi8l8l9a8b8l8e. -.1bil -.bill5ab -.bil1l -.billab2l2 -.bi8o9m8a8t8h9e9m8a8t9i8c8s. -.b2io -.bio4m -.bio1ma -.biom4ath3 -.biomath5em -.biomath2e -.biomathe1ma -.biomathemat1ic -.biomathemati4c3s2 -.bi8o9m8e8d9i9c8a8l. -.bio2me -.bio2med -.biom4edi -.biomed3i1ca -.bi8o9m8e8d9i9c8i8n8e. -.biomed2i1ci -.biomedi2cin -.biomedic2ine -.bi8o9r8h8y8t8h8m8s. -.biorh4 -.biorhyt4h1m -.biorhyth4m1s2 -.bi8t9m8a8p. -.bi2t -.bi4t1m -.bit1ma -.bit4map -.bi8t9m8a8p8s. -.bitma2p1s2 -.bl8a8n8d9e8r. -.b2l2 -.b3l4and -.bla2n -.blan1de -.bl8a8n8d9e8s8t. -.blande4s2 -.bl8i8n8d9e8r. -.bl4ind -.blin1de -.bl8o8n8d8e8s. -.b4lo -.blo2n -.bl2ond -.blon1de -.blondes2 -.bl8u8e9p8r8i8n8t. -.bluepr2 -.blueprin4t3 -.bl8u8e9p8r8i8n8t8s. -.blueprin4t4s2 -.bo9l8o8m9e9t8e8r. -.bolo2me -.bolo4met -.bolome1te -.bo8o8k9s8e8l8l9e8r. -.3boo2 -.bo2o4k -.boo4k1s2 -.booksel1l -.booksel2le -.bo8o8k9s8e8l8l9e8r8s. -.bookselle4r1s2 -.bo8o8l9e8a8n. -.boole2a -.boolea2n -.bo8o8l9e8a8n8s. -.boolea2n1s2 -.bo8r9n8o9l8o8g9i9c8a8l. -.borno4 -.borno3log1ic -.bornologi1ca -.bo8t9u9l8i8s8m. -.bo1tu -.botul2i -.botuli2s1m -.br8u8s8q8u8e8r. -.br2us -.brusqu2 -.brus3quer -.bu8f9f8e8r. -.buf4fer1 -.bu4f1f -.bu8f9f8e8r8s. -.buffe4r1s2 -.bu8s8i8e8r. -.bus5ie4 -.b2us -.bu8s8i8e8s8t. -.busi1est -.bu8s8s8i8n8g. -.bu2ss -.bus1si -.bus2s1in -.buss3ing -.bu8t8t8e8d. -.but2t1ed -.bu8z8z9w8o8r8d. -.bu4z1z2 -.buzz1wo2 -.bu8z8z9w8o8r8d8s. -.buzzwor2d1s2 -.ca9c8o8p8h9o9n8y. -.ca1co -.cac2oph -.cacopho5ny -.cacopho2n -.ca9c8o8p8h9o9n8i8e8s. -.caco5phoni -.cacophon2ie4 -.ca8l8l9e8r. -.cal1l -.cal2le -.ca8l8l9e8r8s. -.calle4r1s2 -.ca8m9e8r8a9m8e8n. -.cam5er1a -.camera1men -.ca8r8t9w8h8e8e8l. -.cartw4 -.ca8r8t9w8h8e8e8l8s. -.cartwhee2l1s2 -.ca9t8a8r8r8h8s. -.ca2ta -.cat2a2r -.catar1r4 -.catarrh4 -.catarr4h1s2 -.ca8t9a9s8t8r8o8p8h9i8c. -.catas1t4r -.catastr2oph -.catastroph1ic -.ca8t9a9s8t8r8o8p8h9i9c8a8l8l8y. -.catastrophi1ca -.catastrophical1l -.catastrophical1ly -.ca8t9e9n8o8i8d. -.cat4eno -.catenoi2 -.cateno2id -.ca8t9e9n8o8i8d8s. -.catenoi2d1s2 -.ca8u9l8i9f8l8o8w9e8r. -.cau4l2 -.caul2i -.cauli4f4l2 -.cauliflow1er -.ch8a8p9a8r9r8a8l. -.chap2a2r4 -.cha1pa -.chapar1r4 -.ch8a8r9t8r8e8u8s8e. -.ch2a2r -.chartr4eu2 -.chartre2us4 -.ch8e8m8o9t8h8e8r9a8p8y. -.che2 -.che1mo -.chem4oth3 -.chemoth2e -.chemoth4er1a -.chemothera3p -.ch8e8m8o9t8h8e8r9a9p8i8e8s. -.chemotherap2ie4 -.ch8l8o8r8o9m8e8t8h9a8n8e. -.c4h1l4 -.ch2lo -.chloro2me -.chloro4met -.chlorometha2n4 -.ch8l8o8r8o9m8e8t8h9a8n8e8s. -.chlorometha1nes -.ch8o9l8e8s9t8e8r8i8c. -.3cho2 -.c3hol4e -.choles2 -.choles1ter1i -.ci8g9a9r8e8t8t8e. -.c2ig -.ci1ga -.cig2a2r -.cigare4t3t2 -.ci8g9a9r8e8t8t8e8s. -.cigaret4tes -.ci8n8q8u8e9f8o8i8l. -.2cin -.cin1q -.cinqu2 -.cinque1f -.cinque1fo -.cinquefoi2 -.co9a8s8s8o9c8i8a9t8i8v8e. -.c4oa -.coa2ss -.coas1so -.coasso1ci -.coasso3c2i1a -.coassoci4a1t2iv -.co9g8n8a8c. -.2cog -.cog1n4a -.co9g8n8a8c8s. -.cogna4c3s2 -.co9k8e8r9n8e8l. -.c2ok -.cok1er -.coker3nel -.co9k8e8r9n8e8l8s. -.cokerne2l1s2 -.co8l9l8i8n9e8a9t8i8o8n. -.col1l -.coll2i -.col2lin4 -.col1l4ine -.collin3ea -.collinea2t -.collinea1t2io -.collineatio2n -.co8l9u8m8n8s. -.colu4m1n -.colum2n1s2 -.co8m9p8a8r9a8n8d. -.co4m1p -.compara5 -.com1pa -.comp2a2r -.compara2n -.compar4and -.co8m9p8a8r9a8n8d8s. -.comparan2d1s2 -.co8m9p8e8n9d8i8u8m. -.compendi1u -.co8m9p8o9n8e8n8t9w8i8s8e. -.compo2n -.compo3nen -.componen1t -.componentw4 -.componentwis4 -.componentwi2 -.component3w4ise -.co8m8p9t8r8o8l9l8e8r. -.comp4tr -.com2p1t -.comptrol1l -.comptrol2le -.co8m8p9t8r8o8l9l8e8r8s. -.comptrolle4r1s2 -.co8n9f8o8r8m9a8b8l8e. -.co2n -.con3f -.con1fo -.confo2r -.confor1m -.confor1ma -.confor2mab -.conformab2l2 -.co8n9f8o8r8m9i8s8t. -.confor2mi -.conform2is -.co8n9f8o8r8m9i8s8t8s. -.conformis4t1s2 -.co8n9f8o8r8m9i8t8y. -.confor3mit -.conformi1ty -.co8n9g8r8e8s8s. -.con3g -.con1gr -.congr2e2ss -.co8n9g8r8e8s8s8e8s. -.congress1e4s -.co8n9t8r8i8b9u8t8e. -.con5t -.contr4ib -.co8n9t8r8i8b9u8t8e8s. -.co8n9t8r8i8b9u8t8e8d. -.contribu2t1ed -.co9r8e9l8a9t8i8o8n. -.core1la -.corela1t2io -.corelatio2n -.co9r8e9l8a9t8i8o8n8s. -.corelatio2n3s2 -.co9r8e9l8i9g8i8o8n9i8s8t. -.core1l2i -.corel2ig -.corel4igi -.coreli5g2io -.coreligion3i -.coreligio2n -.coreligion1is -.co9r8e9l8i9g8i8o8n9i8s8t8s. -.coreligionis4t1s2 -.co9r8e9o8p9s8i8s. -.core1o -.coreo2p1s2 -.coreop1sis -.co9r8e9s8p8o8n9d8e8n8t. -.core1sp -.cores4po2n -.coresp2ond -.corespon1de -.corespon1den -.coresponden1t -.co9r8e9s8p8o8n9d8e8n8t8s. -.coresponden4t4s2 -.co9s8e9c8a8n8t. -.cos4e -.cose1ca -.coseca2n -.cosecan1t -.co9t8a8n9g8e8n8t. -.co4ta2n -.co1ta -.cot2ang -.cotan1gen -.cotangen1t -.co8u8r9s8e8s. -.cou2 -.cou4rs2 -.cour2se -.cours3e4s -.co9w8o8r8k9e8r. -.co4wo2 -.cowork1er -.co9w8o8r8k9e8r8s. -.coworke4r1s2 -.cr8a8n8k9c8a8s8e. -.cra2n -.cra4nk2 -.crank1ca -.cr8a8n8k9s8h8a8f8t. -.cran4k1s2 -.cranks2h -.cranksha2f -.cranksha2ft -.cr8o8c9o9d8i8l8e. -.cr2oc -.cro4cod -.cro1co -.cr8o8c9o9d8i8l8e8s. -.crocodiles2 -.cr8o8s8s9h8a8t8c8h. -.cro2s4s -.cross2h -.crossha4tc -.crosshat4ch -.cr8o8s8s9h8a8t8c8h8e8d. -.crosshatche2 -.crosshat4ch4ed -.cr8o8s8s9o8v8e8r. -.cros1so -.cros4sov -.cr8y8p9t8o9g8r8a8m. -.cry2p1t -.cryp1to -.crypto2gr -.cr8y8p9t8o9g8r8a8m8s. -.cryptogra4m1s2 -.cu8f8f9l8i8n8k. -.c4uf -.cu4f1f -.cuff4l2 -.cufflin4 -.cuffl4i4nk2 -.cu8f8f9l8i8n8k8s. -.cufflin4k1s2 -.cu9n8e8i9f8o8r8m. -.3cun -.cu2ne -.cunei2 -.cunei1fo -.cuneifo2r -.cuneifor1m -.cu8s9t8o8m9i8z9a9b8l8e. -.1c2us -.cus1to -.custom2iz -.customiza1 -.customiz5a2b -.customizab2l2 -.cu8s9t8o8m9i8z8e. -.customi2ze -.cu8s9t8o8m9i8z8e8s. -.cu8s9t8o8m9i8z8e8d. -.da8c8h8s9h8u8n8d. -.1d2a -.da2ch4 -.dac4h1s2 -.dach4s2h -.da8m9s8e8l9f8l8y. -.da2m2 -.da4m1s2 -.dam5se2l2f -.damself4l2 -.damself2ly5 -.da8m9s8e8l9f8l8i8e8s. -.damselfl2ie4 -.da8c8t8y8l9o9g8r8a8m. -.da2c1t -.dac1ty -.dac2tyl -.dacty3lo -.dactylo1gr -.da8c8t8y8l9o9g8r8a8p8h. -.da8t8a9b8a8s8e. -.3dat -.da2ta -.da2tab -.da8t8a9b8a8s8e8s. -.databas1e4s -.da8t8a9p8a8t8h. -.dat5ap -.datap5at -.data1pa -.datap4ath -.da8t8a9p8a8t8h8s. -.datapa2t4h1s2 -.da8t8e9s8t8a8m8p. -.dat3est -.dates1ta -.datesta4m1p -.da8t8e9s8t8a8m8p8s. -.datestam2p1s2 -.de9c8l8a8r9a8b8l8e. -.de4cl2a2r -.decla2rab -.declarab2l2 -.de9f8i8n9i9t8i8v8e. -.de1f -.de1fi -.de2fin -.def2ini -.defin2it -.defini1ti -.defini1t2iv -.de9l8e8c9t8a9b8l8e. -.d5elec -.dele2c1t -.delec2ta4b -.delec1ta -.delectab2l2 -.de8m8i9s8e8m8i9q8u8a9v8e8r. -.de4m2is -.dem4ise -.demisemi3qua -.demisemiqu2 -.demisemiqua5v4 -.de8m8i9s8e8m8i9q8u8a9v8e8r8s. -.demisemiquave4r1s2 -.de9m8o8c9r8a9t8i8s8m. -.de4mocr -.democrati2s4m -.de8m8o8s. -.demos2 -.de9r8i8v9a9t8i8v8e. -.der2i4v -.de4ri1va -.deri3vat -.der2iva1t2iv -.de9r8i8v9a9t8i8v8e8s. -.derivativ4e2s -.di8a9l8e8c9t8i8c. -.1d4i3a -.di2al -.di2ale -.diale2c1t -.di8a9l8e8c9t8i8c8s. -.dialecti4c3s2 -.di8a9l8e8c9t8i9c8i8a8n. -.dialect2i1ci -.d2i1alecti3c2i1a -.dialectici2a2n -.di8a9l8e8c9t8i9c8i8a8n8s. -.dialecticia2n1s2 -.di9c8h8l8o8r8o9m8e8t8h9a8n8e. -.d4i2ch -.dic4h1l4 -.dich2lo -.dichloro2me -.dichloro4met -.dichlorometha2n4 -.di8f9f8r8a8c8t. -.d1if -.dif4fr -.di4f1f -.diffra2c1t -.di8f9f8r8a8c8t8s. -.diffrac4t1s2 -.di8f9f8r8a8c9t8i8o8n. -.diffrac1t2io -.diffractio2n -.di8f9f8r8a8c9t8i8o8n8s. -.diffractio2n3s2 -.di8r8e8r. -.d4ir2 -.di1re -.dir1er4 -.di8r8e9n8e8s8s. -.dire1nes -.diren2e2ss -.di8s9p8a8r9a8n8d. -.dis1 -.dis1p -.di2s1pa -.disp2a2r -.dispara2n -.dispar4and -.di8s9p8a8r9a8n8d8s. -.disparan2d1s2 -.di8s9t8r8a8u8g8h8t9l8y. -.d4is3t -.dist4r -.dis1tra -.distraugh3 -.distraugh2tl -.distraught1ly -.di8s9t8r8i8b9u8t8e. -.distr4ib -.di8s9t8r8i8b9u8t8e8s. -.di8s9t8r8i8b9u8t8e8d. -.distribu2t1ed -.do8u9b8l8e9s8p8a8c8e. -.dou2 -.dou3b2l2 -.dou5ble1sp -.doubles2 -.double2s1pa -.doublespa4ce -.do8u9b8l8e9s8p8a8c9i8n8g. -.doublesp4a2ci -.doublespa2c1in -.doublespac1ing -.do8l8l9i8s8h. -.dol1l -.doll2i -.dollis2h -.dr8i8f8t9a8g8e. -.1dr -.dr4i2ft -.drif1ta -.dr8i8v9e8r8s. -.dr2iv -.drive4r1s2 -.dr8o8m9e9d8a8r8y. -.dro2me -.dro2med -.drom2e2d2a -.drome4dary -.dromed2a2r -.dr8o8m9e9d8a8r8i8e8s. -.dromedar1i -.dromedar2ie4 -.du9o8p9o9l8i8s8t. -.duopol2i -.du9o8p9o9l8i8s8t8s. -.duopolis4t1s2 -.du9o8p9o8l8y. -.duopo2ly -.dy8s9l8e8x8i8a. -.d2y -.dys1l2 -.dys2le -.dyslex3i -.dyslex2i5a -.dy8s9l8e8c9t8i8c. -.dysle2c1t -.ea8s8t9e8n8d9e8r8s. -.east3 -.eas3ten -.eas3tend -.easten1de -.eastende4r5s2 -.ec8o9n8o8m9i8c8s. -.e1co -.eco2n -.eco3nomic -.economi4c3s2 -.ec8o8n9o9m8i8s8t. -.econom2is -.ec8o8n9o9m8i8s8t8s. -.economis4t1s2 -.ei9g8e8n9c8l8a8s8s. -.ei2 -.e2ig2 -.ei1gen -.eigen1c4l4 -.eigencla2ss -.ei9g8e8n9c8l8a8s8s8e8s. -.eigenclass1e4s -.ei9g8e8n9v8a8l9u8e. -.eigen1v2 -.eigen1va -.eigenval1u -.ei9g8e8n9v8a8l9u8e8s. -.el8e8c8t8r8o9m8e8c8h8a8n9i9c8a8l. -.5elec -.ele2c1t -.electro2me -.electrome2ch -.electrome5cha4n1ic -.electromecha2n -.electromechani1ca -.el8e8c8t8r8o9m8e8c8h8a8n8o9a8c8o8u8s8t8i8c. -.electromechano4 -.electromechan4oa -.electromechanoa1co -.electromechanoacou2 -.electromechanoaco2us -.electromechanoacoust2i -.electromechanoacous1tic -.el8i8t9i8s8t. -.el2i -.el1it -.eli1ti -.el4itis -.el8i8t9i8s8t8s. -.elitis4t1s2 -.en9t8r8e9p8r8e9n8e8u8r. -.en1t -.entrepr2 -.entrepren4eu -.en9t8r8e9p8r8e9n8e8u8r9i8a8l. -.entrepreneur2i3a -.entrepreneuri2al -.ep9i9n8e8p8h9r8i8n8e. -.epi2n -.ep2ine -.epinep4hr4 -.ep2inephr2in4e -.eq8u8i9v8a8r8i9a8n8t. -.equ2iv3 -.equi1va -.equiv2a2r -.equivar1i -.equivar3i2a2n -.equivar2i3a -.equivar4ian4t -.eq8u8i9v8a8r8i9a8n8c8e. -.equivar4ianc -.et8h9a8n8e. -.etha2n4 -.et8h9y8l9e8n8e. -.ev8e8r9s8i9b8l8e. -.ev1er -.eve4r1s2 -.ever1si -.ever4si4b -.eversi1b2l2 -.ev8e8r8t. -.ev8e8r8t8s. -.ever4t1s2 -.ev8e8r8t9e8d. -.ever2t1ed -.ev8e8r8t9i8n8g. -.ever1ti -.ever2t1in -.ex9q8u8i8s9i8t8e. -.exqu2 -.exq2ui2 -.exquis2ite -.ex9t8r8a9o8r9d8i9n8a8r8y. -.ex1t2 -.ex1tra -.extr4ao -.extraord2i -.extraord1in4 -.extraor1di1na -.extraordin2a2r -.fa8l8l9i8n8g. -.1fa -.fal1l -.fall2i -.fal2lin4 -.fe8r8m8i9o8n8s. -.fer1 -.fer3m4 -.fer4m2io -.fermio2n -.fermio2n3s2 -.fi9n8i8t8e9l8y. -.1fi -.2fin -.f2ini -.fin2it -.fin2ite -.finite1ly -.fl8a9g8e8l9l8u8m. -.f4l2 -.flag5el1l -.fl8a9g8e8l9l8a. -.flag4ella -.fl8a8m9m8a9b8l8e8s. -.flam1m -.flam1ma -.flam2mab -.flammab2l2 -.flammables2 -.fl8e8d8g9l8i8n8g. -.fledgl2 -.fl8o8w9c8h8a8r8t. -.flow2ch -.flowch2a2r -.fl8o8w9c8h8a8r8t8s. -.flowchar4t1s2 -.fl8u8o8r8o9c8a8r9b8o8n. -.flu3o -.fluo3r -.fluor2oc -.fluoro1ca -.fluoroc2a2r -.fluorocar1b -.fluorocarb4o -.fluorocarbo2n -.fo8r9m8i9d8a9b8l8e. -.for2mi -.formi1d4a -.form2id -.formi2d3a4b -.formidab2l2 -.fo8r9m8i9d8a9b8l8y. -.formidab1ly -.fo8r9s8y8t8h9i8a. -.fo4rs2 -.fors4y -.forsyth2i1a -.fo8r8t8h9r8i8g8h8t. -.fort4hr4 -.forthr2ig -.fr8e8e9l8o8a8d8e8r. -.freel4oa -.freeloa2d3 -.fr8e8e9l8o8a8d8e8r8s. -.freeloade4r5s2 -.fr8i8e8n8d9l8i8e8r. -.fri2 -.fr2ie4 -.friendl2ie4 -.fr8i9v8o8l9i8t8y. -.fr2iv -.frivol2i -.frivol1it -.frivoli1ty -.fr8i9v8o8l9i9t8i8e8s. -.frivoli1ti -.frivolit2ie4 -.fr8i8v9o9l8o8u8s. -.frivolou2 -.frivolo2us -.ga9l8a8c9t8i8c. -.gala2c1t -.ga8l9a8x8y. -.ga8l9a8x9i8e8s. -.galax3i -.galax2ie4 -.ga8s9o8m9e9t8e8r. -.ga1so -.ga3som -.gaso2me -.gaso4met -.gasome1te -.ge9o9d8e8s9i8c. -.geodes2 -.geode1si -.geode2sic -.ge9o9d8e8t9i8c. -.geode1t -.geodet1ic -.ge8o9m8e8t9r8i8c. -.ge3om -.geo2me -.geo4met -.geom4etr -.geo5met3ric -.ge8o9m8e8t9r8i8c8s. -.geome4tri4c3s2 -.ge9o9s8t8r8o8p8h8i8c. -.geos4 -.geost4r -.geostr2oph -.geostroph1ic -.ge8o9t8h8e8r9m8a8l. -.ge4ot -.ge4oth -.geoth2e -.geother3m4 -.geother1ma -.ge9o8t9r8o9p8i8s8m. -.geotropi2s1m -.gn8o9m8o8n. -.g1no -.gno4mo -.gno4mo2n -.gn8o9m8o8n8s. -.gnomo2n3s2 -.gr8a8n8d9u8n8c8l8e. -.1gr -.gra2n2 -.gr4and -.gran1du -.grandu4n -.grandun1c4l4 -.gr8a8n8d9u8n8c8l8e8s. -.granduncles2 -.gr8i8e8v9a8n8c8e. -.gr2ie4 -.grie1va -.grieva2n -.gr8i8e8v9a8n8c8e8s. -.gr8i8e8v9o8u8s. -.grievou2 -.grievo2us -.gr8i8e8v9o8u8s9l8y. -.grievous1l2 -.grievous1ly -.ha8i8r9s8t8y8l8e. -.hai2 -.ha4ir -.hai4rs2 -.hairs2ty -.hairs2tyl -.ha8i8r9s8t8y8l8e8s. -.hairstyles2 -.ha8i8r9s8t8y8l9i8s8t. -.ha8i8r9s8t8y8l9i8s8t8s. -.hairstylis4t1s2 -.ha8l8f9s8p8a8c8e. -.ha2lf -.hal2f3s -.half2s1pa -.halfspa4ce -.ha8l8f9s8p8a8c8e8s. -.ha8l8f9w8a8y. -.ha8r9b8i8n9g8e8r. -.h2a2r -.har1b -.harbi2 -.har2bin -.harb4inge -.ha8r9b8i8n9g8e8r8s. -.harbinge4r1s2 -.ha8r9l8e9q8u8i8n. -.har4le4 -.har1l -.harle1q -.harlequ2 -.harleq2ui2 -.harlequi4n -.ha8r9l8e9q8u8i8n8s. -.harlequ2i2n1s2 -.ha8t8c8h9e8r8i8e8s. -.ha4tc -.hat4ch -.hatche2 -.hatcher1i -.hatcher2ie4 -.he8m8i9d8e8m8i9s8e8m8i9q8u8a9v8e8r. -.hem2id -.hemid4em -.hemide4m2is -.hemidem4ise -.hemidemisemi3qua -.hemidemisemiqu2 -.hemidemisemiqua5v4 -.he8m8i9d8e8m8i9s8e8m8i9q8u8a9v8e8r8s. -.hemidemisemiquave4r1s2 -.he9m8o9g8l8o9b8i8n. -.hemo4g -.he1mo -.hemo4gl2 -.hemo3glo -.hemoglo1bi -.hemoglo2bin -.he9m8o9p8h8i8l9i8a. -.hem2oph -.hemoph4il2 -.hemophil1i -.hemophil3i1a -.he9m8o9p8h8i8l9i8a8c. -.he9m8o9p8h8i8l9i8a8c8s. -.hemophilia4c3s2 -.he8m8o9r8h8e9o8l9o8g8y. -.hemo2r -.hemorh4 -.hemorhe3ol -.hemorheol1o1gy -.he9p8a8t9i8c. -.hep5 -.he2pa -.hepat1ic -.he8r9m8a8p8h9r8o9d8i8t8e. -.her3m4 -.her1ma -.her4map -.hermap4hr4 -.hermaphrod2ite -.he8r9m8a8p8h9r8o9d8i8t9i8c. -.hermaphrod2i1ti -.hermaphrod4i2tic -.he9r8o8e8s. -.hero4e -.he8x8a9d8e8c9i9m8a8l. -.hex1a -.hexa2d -.hexade1c2i -.hexade2c3im -.hexadeci1ma -.ho9l8o9n8o9m8y. -.holo2n -.holon3o3my -.ho9m8e8o9m8o8r9p8h8i8c. -.ho2me3 -.homeo1mo -.homeomo2r -.homeomor1p -.homeomorp4h4 -.homeomorph1ic -.ho9m8e8o9m8o8r9p8h8i8s8m. -.homeomorphi2s1m -.ho9m8o9t8h8e8t8i8c. -.ho1mo -.hom4oth3 -.homoth2e -.homo3the4t -.homothet1ic -.ho8r8s8e9r8a8d9i8s8h. -.hor4se -.ho4rs2 -.horser1a -.horsera2d -.horser2adi -.horseradis1 -.horseradis2h -.ho8t9b8e8d. -.ho2t1b -.hot4be2d -.ho8t9b8e8d8s. -.hotbe2d1s2 -.hy9d8r8o9t8h8e8r9m8a8l. -.hy1d -.hy1dr -.hydro4th2e -.hydr4oth -.hydrother3m4 -.hydrother1ma -.hy9p8o9t8h8a8l9a9m8u8s. -.hy3po -.hyp4ot -.hyp4oth -.hypotha3la -.hypothala3m -.hypothala1mu -.hypothalam2us -.id8e8a8l8s. -.ide3a4l -.idea2l1s2 -.id8e8o9g8r8a8p8h8s. -.ideo2g -.ideo1gr -.ideogra4p4h1s2 -.id8i8o9s8y8n9c8r8a8s8y. -.i2di -.i1d3io -.idi4os -.idios4y -.idiosyn1cr -.idiosyncr2as -.idiosyncras4y -.id8i8o9s8y8n9c8r8a9s8i8e8s. -.idiosyncras2ie4 -.id8i8o9s8y8n9c8r8a8t8i8c. -.idiosyn5crat1ic -.id8i8o9s8y8n9c8r8a8t9i9c8a8l9l8y. -.idiosyncrati1ca -.idiosyncratical1l -.idiosyncratical1ly -.ig9n8i8t9e8r. -.2ig -.ig1ni -.ign2it -.ign2ite -.ig9n8i8t9e8r8s. -.ignite4r1s2 -.ig9n8i9t8o8r. -.ign3itor -.igni1to -.ig8n8o8r8e9s8p8a8c8e8s. -.ig1no -.ignore1sp -.ignore2s1pa -.ignorespa4ce -.im9p8e8d9a8n8c8e. -.im2p2ed -.imp2e2d2a -.impeda2n -.im9p8e8d9a8n8c8e8s. -.in9d8u9b8i9t8a9b8l8e. -.4ind -.in1du -.indu1b4i -.indubi2t -.indubi1ta -.indubi2tab -.indubitab2l2 -.in9f8i8n9i8t8e9l8y. -.in3f -.in1fi -.in2fin -.inf2ini -.infin2it -.infin2ite -.infinite1ly -.in9f8i8n9i9t8e8s9i9m8a8l. -.infinit4es -.infinite1si -.infinite2s5im -.infinitesi1ma -.in9f8r8a9s8t8r8u8c9t8u8r8e. -.infr2as -.infras1t4r -.infrastru2c1t -.infrastructu4r -.infrastruc1tu -.infrastruc3ture -.in9f8r8a9s8t8r8u8c9t8u8r8e8s. -.in9s8t8a8l8l9e8r. -.ins2ta2l -.ins1ta -.instal1l -.instal2le -.in9s8t8a8l8l9e8r8s. -.installe4r1s2 -.in9t8e8r9d8i8s9c8i9p8l8i9n8a8r8y. -.in1t -.in5ter3d -.interd2i -.interdis1 -.interd2is1c -.interdis1ci -.interdisc2ip -.interdisci1p2l2 -.interdiscipli4n -.interdiscipl4i1na -.interdisciplin2a2r -.in9t8e8r9g8a9l8a8c9t8i8c. -.interg2 -.inter1ga -.intergala2c1t -.in9u8t8i8l8e. -.in1u -.in4u1t2i -.in9u8t8i8l9i9t8y. -.inutil1i -.inut2il1it -.inutili1ty -.ir9r8e9d8u8c9i8b8l8e. -.ir2r2ed -.irre1du -.irredu2c -.irreduci4b -.irredu1ci -.irreduci1b2l2 -.ir9r8e9d8u8c9i8b8l8y. -.irreducib1ly -.ir9r8e8v9o9c8a9b8l8e. -.irrev2 -.irre5voc -.irrevo1ca -.irrevoca1b2l2 -.is8o8t9r8o8p8y. -.i2so -.isotropy5 -.is8o9t8r8o8p9i8c. -.isotrop3ic -.it8i8n9e8r9a8r8y. -.i1ti -.i2t1in -.it2ine -.itin4er4a2r -.itin1er -.itiner1a -.it8i8n9e8r9a8r9i8e8s. -.itinerar1i -.itinerar2ie4 -.je9r8e9m8i9a8d8s. -.1je -.jerem2i3a -.jeremia2d -.jeremia2d1s2 -.ke8y9n8o8t8e. -.ke8y9n8o8t8e8s. -.keyno4tes -.ke8y9s8t8r8o8k8e. -.keys4 -.keys1t -.keyst4r -.keystr2ok2 -.ke8y9s8t8r8o8k8e8s. -.keystrokes4 -.ki8l8n9i8n8g. -.k1i -.k4i2l1n2 -.kiln1in -.kilnin4g -.la8c9i9e8s8t. -.l4a2ci4 -.la3c2ie4 -.laci1est -.la8m9e8n9t8a9b8l8e. -.la1men -.la3men1t -.lamen2ta4b -.lamen1ta -.lamentab2l2 -.la8n8d9s8c8a8p9e8r. -.3l4and -.la2n -.lan2d1s2 -.landsca4p -.lands1ca -.landsca5per -.la8n8d9s8c8a8p9e8r8s. -.landscape4r1s2 -.la8r9c8e9n8y. -.l2a2r -.lar1c -.lar2ce -.lar1cen4 -.la8r9c8e9n9i8s8t. -.lar4ceni -.le8a8f9h8o8p9p8e8r. -.le2a -.lea2f -.lea4fh -.leafho4p1p -.leafhop2pe -.leafhop3per -.le8a8f9h8o8p9p8e8r8s. -.leafhoppe4r1s2 -.le8t9t8e8r9s8p8a8c9i8n8g. -.le4t3t2 -.lette4r1s2 -.letter1sp -.letter2s1pa -.lettersp4a2ci -.letterspa2c1in -.letterspac1ing -.li8f8e9s8p8a8n. -.life1sp -.life2s1pa -.lifespa4n -.li8f8e9s8p8a8n8s. -.lifespa2n1s2 -.li8f8e9s8t8y8l8e. -.lifes2ty -.lifes2tyl -.li8f8e9s8t8y8l8e8s. -.lifestyles2 -.li8g8h8t9w8e8i8g8h8t. -.3ligh -.lightw4 -.lightwei2 -.l2ightwe2ig2 -.li8m9o8u9s8i8n8e8s. -.li4mo -.li3mo2us -.limou2 -.limou2s1in -.limous2ine -.limousi1nes -.li8n8e9b8a8c8k8e8r. -.1l4ine -.lin2e2b -.lineback1 -.lineback1er -.li8n8e9s8p8a8c8i8n8g. -.li1nes -.li4ne1sp -.line2s1pa -.linesp4a2ci -.linespa2c1in -.linespac1ing -.li9o8n9e8s8s. -.lio2n -.lio1nes -.lion2e2ss -.li8t8h9o9g8r8a8p8h8e8d. -.l2ith -.litho4g -.litho1gr -.lithograph4ed -.li8t8h9o9g8r8a8p8h8s. -.lithogra4p4h1s2 -.lo9b8o8t9o8m8y. -.lobo4to -.loboto3my -.lo9b8o8t9o8m9i8z8e. -.lobotom2iz -.lobotomi2ze -.lo8g8e8s. -.lo1ge -.lo8n8g9e8s8t. -.5long -.lo2n -.lo9q8u8a8c9i8t8y. -.lo1q -.loqu2 -.loquac4 -.loqu4a2ci -.loqua2c1it -.loquaci1ty -.lo8v8e9s8t8r8u8c8k. -.4lov -.lov4e2s -.lov2est4r -.lovestruc5 -.lovestruck1 -.ma8c8r8o9e8c8o9n8o8m8i8c8s. -.macro4e -.macroe1co -.macroeco2n -.macroeco3nomic -.macroeconomi4c3s2 -.ma8l9a9p8r8o8p9i8s8m. -.malapr2 -.malapropi2s1m -.ma8l9a9p8r8o8p9i8s8m8s. -.malaprop4is4m1s2 -.ma8n9s8l8a8u8g8h9t8e8r. -.ma2n1s2 -.man2s1l2 -.manslaugh3 -.ma8n9u9s8c8r8i8p8t. -.man2us -.manusc2 -.manuscri2 -.manuscr2ip -.manuscri2p1t -.ma8r9g8i8n9a8l. -.marg2 -.margi4n -.margi1na -.ma8t8h9e9m8a9t8i9c8i8a8n. -.m4ath3 -.math5em -.math2e -.1mathe1ma -.mathemat1ic -.mathemat2i1ci -.mathemati3c2i1a -.mathematici2a2n -.ma8t8h9e9m8a9t8i9c8i8a8n8s. -.mathematicia2n1s2 -.ma8t8t8e8s. -.mat5te -.ma4t3t2 -.mat4tes -.me8d9i8c9a8i8d. -.2med -.m4edi -.med3i1ca -.medicai2 -.medica2id -.me8d8i9o8c8r8e. -.me1d2io -.mediocre3 -.me8d8i9o8c9r8i9t8i8e8s. -.medi5ocrit -.mediocri2 -.medio5cri1ti -.mediocrit2ie4 -.me8g8a9l8i8t8h. -.me2g -.m4egal -.me1ga -.me3gal1i -.megal1it -.megal2ith -.me8g8a9l8i8t8h8s. -.megali2t4h1s2 -.me8t8a9b8o8l9i8c. -.me4ta -.me2ta4b -.metabol3ic -.metabol2i -.me9t8a8b9o9l8i8s8m. -.metaboli2s1m -.me9t8a8b9o9l8i8s8m8s. -.metabol4is4m1s2 -.me9t8a8b9o9l8i8t8e. -.metabo5l2ite -.metabol1it -.me9t8a8b9o9l8i8t8e8s. -.metabolit4es -.me8t8a9l8a8n9g8u8a8g8e. -.met3a2l -.meta5la -.metala2n -.metal2ang -.metalan1gu -.metalangu4a -.me8t8a9l8a8n9g8u8a8g8e8s. -.me8t8a9p8h8o8r9i8c. -.metapho4r -.me8t8h9a8n8e. -.metha2n4 -.me9t8r8o8p9o9l8i8s. -.m4etr -.metropol2i -.me9t8r8o8p9o9l8i8s8e8s. -.metropol4ise -.metropolis1e4s -.me8t9r8o9p8o8l9i9t8a8n. -.metropol1it -.metropoli3ta2n -.metropoli1ta -.me8t9r8o9p8o8l9i9t8a8n8s. -.metropolita2n1s2 -.mi8c8r8o9e8c8o9n8o8m8i8c8s. -.m4i1cr -.micro4e -.microe1co -.microeco2n -.microeco3nomic -.microeconomi4c3s2 -.mi9c8r8o9f8i8c8h8e. -.micro2fi -.microf4i2ch -.microfiche2 -.mi9c8r8o9f8i8c8h8e8s. -.microfich1es -.mi8c8r8o9o8r8g8a8n9i8s8m. -.microo2 -.microorg2 -.microor1ga -.microorgan5is -.microorga2n -.microorgani2s1m -.mi8c8r8o9o8r8g8a8n9i8s8m8s. -.microorgan4is4m1s2 -.mi8l8l9a8g8e. -.m4il1l -.mi8l9l8i9l8i8t8e8r. -.mill2i -.mil4l4i4l -.millil1i -.mill2il1it -.millil2ite -.mi8m8e8o9g8r8a8p8h8e8d. -.mimeo2g -.mimeo1gr -.mimeograph4ed -.mi8m8e8o9g8r8a8p8h8s. -.mimeogra4p4h1s2 -.mi8m9i8c9r8i8e8s. -.mim1i -.mim4i1cr -.mimicri2 -.mimicr2ie4 -.mi8n9i8s. -.m2ini -.min1is -.mi8n8i9s8y8m9p8o9s8i8u8m. -.minis4y -.minisy4m1p -.minisym1pos -.minisympo5si4u -.mi8n8i9s8y8m9p8o9s8i8a. -.minisympos2i1a -.mi9n8u8t9e8r. -.m4in1u -.mi9n8u8t9e8s8t. -.mi8s9c8h8i8e9v8o8u8s9l8y. -.m2is1c -.mis3ch2 -.misch2ie4 -.mischievou2 -.mischievo2us -.mischievous1l2 -.mischievous1ly -.mi9s8e8r8s. -.m4ise -.mis3er -.mise4r1s2 -.mi9s8o8g9a9m8y. -.mi2so -.miso1ga -.miso2gam -.mo8d9e8l9l8i8n8g. -.mo2d1 -.model1l -.modell2i -.model2lin4 -.mo8l9e9c8u8l8e. -.mole1cu -.mole4cul -.molecul4e -.mo8l9e9c8u8l8e8s. -.molecules2 -.mo8n9a8r8c8h8s. -.mo1n1a -.monar3c -.mon2a2r -.monar2ch -.monarc4h1s2 -.mo8n8e8y9l8e8n9d8e8r. -.moneylen1de -.mo8n8e8y9l8e8n9d8e8r8s. -.moneylende4r5s2 -.mo8n8o9c8h8r8o8m8e. -.mono2ch4 -.monoc4hr4 -.monochro2me -.mo8n8o9e8n9e8r9g8e8t8i8c. -.mo3noe -.monoen1er -.monoenerg2 -.monoener3get -.monoenerget1ic -.mo8n9o8i8d. -.monoi2 -.mono2id -.mo8n8o9p8o8l8e. -.mo4nop -.mo8n8o9p8o8l8e8s. -.monopoles2 -.mo9n8o8p9o8l8y. -.monopo2ly -.mo8n8o9s8p8l8i8n8e. -.monos1p2l2 -.monospli4n -.monosp1l4ine -.mo8n8o9s8p8l8i8n8e8s. -.monospli1nes -.mo8n8o9s8t8r8o8f8i8c. -.monos5t -.monost4r -.monostro2fi -.mo9n8o8t9o9n8i8e8s. -.mono1to -.mo2noto2n -.monoton2ie4 -.mo9n8o8t9o9n8o8u8s. -.mono4tono -.monoto1nou2 -.monotono2us -.mo9r8o8n9i8s8m. -.moro5n4is -.moro2n -.moroni2s1m -.mo8s9q8u8i9t8o. -.mos2 -.mosqu2 -.mosq2ui2 -.mosqui1to -.mo8s9q8u8i9t8o8s. -.mosquitos2 -.mo8s9q8u8i9t8o8e8s. -.mu8d9r8o8o8m. -.mu1dr -.mud1room -.mudroo2 -.mu8d9r8o8o8m8s. -.mudroo4m1s2 -.mu8l9t8i9f8a8c9e8t8e8d. -.5mu4lt -.mul1ti3 -.multif2 -.multi1fa -.multifa4ce -.multifacet4 -.multiface2t1ed -.mu8l9t8i9p8l8i8c9a8b8l8e. -.mult2ip -.multi1p2l2 -.multipli1ca -.multiplica1b2l2 -.mu8l8t8i9u8s8e8r. -.multi4u -.multi2us -.ne8o9f8i8e8l8d8s. -.3neo -.ne5of -.neo2fi -.neof2ie4 -.neofie2ld3 -.neofiel2d1s2 -.ne8o9n8a8z8i. -.neo2n -.neo1n1a -.neona2z1i -.ne8o9n8a8z8i8s. -.neonaz4is -.ne8p8h9e8w8s. -.nephe4 -.ne8p8h9r8i8t8e. -.nep4hr4 -.nephr2ite -.ne8p8h9r8i8t8i8c. -.nephr4i2t3ic -.nephri1ti -.ne8w9e8s8t. -.ne4w -.newest3 -.ne8w8s9l8e8t9t8e8r. -.news4l2 -.news2le -.newsle4t3t2 -.ne8w8s9l8e8t9t8e8r8s. -.newslette4r1s2 -.ni8t8r8o9m8e8t8h9a8n8e. -.n2it -.ni3tr -.nitro2me -.nitro4met -.nitrometha2n4 -.no9n8a8m8e. -.no4n -.no1n1a -.no8n9a8r9i8t8h9m8e8t9i8c. -.nonar3i -.non2a2r -.nonar2ith -.nonarit4h1m -.nonarithmet4 -.nonarithmet1ic -.no8n9e8m8e8r9g8e8n8c8y. -.none1me -.nonemerg2 -.nonemer1gen -.nonemergen1cy -.no8n9e8q8u8i9v8a8r8i9a8n8c8e. -.none2q -.nonequ2 -.noneq2ui2 -.nonequ2iv3 -.nonequi1va -.nonequiv2a2r -.nonequivar1i -.nonequivar3i2a2n -.nonequivar2i3a -.nonequivar4ianc -.no8n8e9t8h8e9l8e8s8s. -.noneth2e -.nonethe1les2 -.nonethe3l2e2ss -.no8n9e8u8c8l8i8d9e8a8n. -.non4eu -.noneu1c4l4 -.noneucl2id -.noneuclidea2n -.no8n9i8s8o9m8o8r9p8h8i8c. -.non5i -.non1is -.noni2so -.noni3som -.noniso1mo -.nonisomo2r -.nonisomor1p -.nonisomorp4h4 -.nonisomorph1ic -.no8n9p8s8e8u8d8o9c8o8m9p8a8c8t. -.non1p4 -.non2p1s2 -.nonp2se -.nonps4eu -.nonpseu1do -.nonpseudo1co -.nonpseudoco4m1p -.nonpseudocom1pa -.nonpseudocompa2c4t -.no8n9s8m8o8o8t8h. -.no2n3s2 -.non2s3m -.nons1mo -.nonsmoo2 -.nonsmo4oth -.no8n9u8n8i9f8o8r8m. -.no3nu4n -.nonu1ni -.nonuni1fo -.nonunifo2r -.nonunifor1m -.no8n9u8n8i9f8o8r8m9l8y. -.nonunifor4m1l -.nonuniform1ly -.no8r9e8p9i9n8e8p8h9r8i8n8e. -.nore5pi2n -.norep2ine -.norepinep4hr4 -.norep2inephr2in4e -.no8t9w8i8t8h9s8t8a8n8d9i8n8g. -.notw4 -.notwi2 -.notw2ith3 -.notwi2t4h1s2 -.notwith5st4and -.notwiths1ta -.notwithsta2n -.notwithstand1in -.nu9c8l8e8o9t8i8d8e. -.nucle3 -.nu1c4l4 -.nucle4ot -.nucleot2id -.nu9c8l8e8o9t8i8d8e8s. -.nucleotide4s2 -.nu8t9c8r8a8c8k9e8r. -.nu4tc -.nutcrack1 -.nutcrack1er -.nu8t9c8r8a8c8k9e8r8s. -.nutcracke4r1s2 -.oe8r9s8t8e8d8s. -.o3er -.oe4r1s2 -.oers4t1ed -.oerste2d1s2 -.of8f9l8i8n8e. -.o4f1f -.off4l2 -.offlin4 -.off1l4ine -.of8f9l8o8a8d. -.offl4oa -.offloa2d3 -.of8f9l8o8a8d8s. -.offloa2d1s2 -.of8f9l8o8a8d8e8d. -.offloa2d1ed -.ol8i9g8o8p9o9l8i8s8t. -.ol2i -.ol2ig -.oli2go -.ol2igopol2i -.ol8i9g8o8p9o9l8i8s8t8s. -.oligopolis4t1s2 -.ol8i9g8o8p9o8l8y. -.oligopo2ly -.ol8i9g8o8p9o8l9i8e8s. -.oligopol2ie4 -.op9e8r9a8n8d. -.op1er -.3oper1a -.op4er4and -.opera2n -.op9e8r9a8n8d8s. -.operan2d1s2 -.or8a8n8g9u8t8a8n. -.ora2n -.or2ang -.oran1gu -.oran4gu4t -.orangu1ta -.ora2nguta2n -.or8a8n8g9u8t8a8n8s. -.oranguta2n1s2 -.or9t8h8o9d8o8n9t8i8s8t. -.ortho2do4 -.orthodo2n -.orthodon3t4i -.orthodon1t -.or9t8h8o9d8o8n9t8i8s8t8s. -.orthodontis4t1s2 -.or9t8h8o9k8e8r9a9t8o8l9o8g8y. -.orth2ok -.orthok1er -.orthoker1a -.orthokera1to -.orthokeratol1o1gy -.or8t8h8o9n8i8t8r8o9t8o8l8u8e8n8e. -.ortho2n -.orthon2it -.orthoni3tr -.orthonitro1to -.orthonitrotolu3en -.orthonitrotolu4ene -.ov8e8r9v8i8e8w. -.overv2ie4 -.ov8e8r9v8i8e8w8s. -.ox9i8d9i8c. -.ox3i -.oxi5di -.ox2id -.pa8d9d8i8n8g. -.1pa -.p4a2d -.pad4d1in -.pad1d4 -.pa8i8n9l8e8s8s9l8y. -.p4ai2 -.pa4i4n4 -.pa4i4n1l -.painles2 -.pain3l2e2ss -.painles4s1l2 -.painless1ly -.pa8l9e8t8t8e. -.p4al -.p2ale -.pale4t3t2 -.pa8l9e8t8t8e8s. -.palet4tes -.pa8r9a9b8o8l8a. -.p2a2r -.pa2rab -.parabo1la -.pa8r9a9b8o8l9i8c. -.parabol3ic -.parabol2i -.pa9r8a8b9o9l8o8i8d. -.paraboloi2 -.parabolo2id -.pa8r9a9d8i8g8m. -.para2d -.par2adi -.parad2ig -.paradig1m -.pa8r9a9d8i8g8m8s. -.paradig4m1s2 -.pa8r8a9c8h8u8t8e. -.para2ch -.parachu4t -.pa8r8a9c8h8u8t8e8s. -.pa8r8a9d8i9m8e8t8h8y8l9b8e8n8z8e8n8e. -.parad4imet -.paradimethy2l1b -.paradimethylb4e4n3z -.paradimethylben2ze -.paradimethylbenze4n -.pa8r8a9f8l8u8o8r8o9t8o8l8u8e8n8e. -.para2f -.paraf4l2 -.paraflu3o -.parafluo3r -.parafluoro1to -.parafluorotolu3en -.parafluorotolu4ene -.pa8r8a9g8r8a8p8h9e8r. -.para1gr -.parag5ra3ph4er -.pa8r8a9l8e9g8a8l. -.par3al -.par2ale -.paral4egal -.parale1ga -.pa8r9a8l9l8e8l9i8s8m. -.paral1l -.paral2le -.paral3lel -.parallel2i -.paralle2lis -.paralleli2s1m -.pa8r8a9m8a8g9n8e8t9i8s8m. -.par4a1ma -.param3ag -.para5mag1n -.paramagneti2s4m -.pa8r8a9m8e8d8i8c. -.para2med -.param4edi -.pa8r8a9m8e8t8h8y8l9a8n8i8s8o8l8e. -.param3et -.paramethy3la -.paramethyla2n -.paramethylani2so -.pa9r8a8m9e9t8r8i8z8e. -.param4etr -.parametri2ze -.pa8r8a9m8i8l9i9t8a8r8y. -.par2ami -.paramil1i -.param2il1it -.paramili1ta -.paramilit2a2r -.pa8r8a9m8o8u8n8t. -.para2mo -.paramou2 -.paramoun1t -.pa8t8h9o9g8e8n9i8c. -.p4ath -.pat4ho -.patho4g -.patho1ge4 -.patho1gen -.pe8e8v9i8s8h. -.p4ee -.pee1vi -.peevis2h -.pe8e8v9i8s8h9n8e8s8s. -.peevis2h1n -.peevish1nes -.peevishn2e2ss -.pe8n9t8a9g8o8n. -.pen1t -.pen1ta -.penta2go -.pentago2n2 -.pe8n9t8a9g8o8n8s. -.pentago2n3s2 -.pe9t8r8o9l8e9u8m. -.petrol4eu -.ph8e9n8o8m9e9n8o8n. -.ph4e3no -.phe2n -.pheno2me -.pheno1men -.phenom4eno -.phenomeno4n -.ph8e8n8y8l9a8l8a9n8i8n8e. -.pheny3la -.phenylala2n -.phenylala5n2ine -.phenylalan1in -.ph8i9l8a8t9e9l8i8s8t. -.phi4latel2i4 -.philate2lis -.ph8i9l8a8t9e9l8i8s8t8s. -.philatelis4t1s2 -.ph8o9n8e8m8e. -.3phone -.pho2n -.phone1me -.ph8o9n8e8m8e8s. -.phone2mes -.ph8o9n8e9m8i8c. -.phone5mi -.ph8o8s9p8h8o8r9i8c. -.phos1p -.phospho5 -.phospho4r -.ph8o9t8o9g8r8a8p8h8s. -.pho1to -.photo2gr -.photogra4p4h1s2 -.ph8o9t8o9o8f8f9s8e8t. -.photoo2 -.photoo4f1f -.photoof2f3s -.pi8c9a9d8o8r. -.pi1ca -.pica2d -.pica1do -.picad4or -.pi8c9a9d8o8r8s. -.picado4rs2 -.pi8p8e9l8i8n8e. -.p2ip -.pipe4 -.pipel2i -.pipe1l4ine -.pi8p8e9l8i8n8e8s. -.pipeli1nes -.pi8p8e9l8i8n9i8n8g. -.pipel2in3i -.pipelin1in -.pipelinin4g -.pi9r8a9n8h8a8s. -.p4ir -.pi1ra -.pira2n -.pira4n1h4 -.piranha4 -.pl8a8c8a9b8l8e. -.1p2l2 -.pla1ca -.placa1b2l2 -.pl8a8n8t9h8o8p9p8e8r. -.3pla2n -.plan1t -.plantho4p1p -.planthop2pe -.planthop3per -.pl8a8n8t9h8o8p9p8e8r8s. -.planthoppe4r1s2 -.pl8e8a8s9a8n8c8e. -.ple2a -.pleasa2 -.plea3sanc -.pleasa2n -.pl8u8g9i8n. -.plug5in -.pl8u8g9i8n8s. -.plu5g4i2n1s2 -.po8l9t8e8r9g8e8i8s8t. -.po4l2t -.pol1te -.polterg2 -.poltergei2 -.po8l8y9e8n8e. -.po2ly -.po8l8y9e8t8h9y8l9e8n8e. -.polye4t -.po9l8y8g9a9m8i8s8t. -.poly1ga -.poly2gam -.polygam2is -.po9l8y8g9a9m8i8s8t8s. -.polygamis4t1s2 -.po8l8y8g9o8n9i9z8a9t8i8o8n. -.poly1go -.polygo2n2 -.polygo3ni -.polygoniza1 -.polygoniza1t2io -.polygonizatio2n -.po9l8y8p8h9o9n8o8u8s. -.polypho2n -.polypho1nou2 -.polyphono2us -.po8l8y9s8t8y8r8e8n8e. -.po2lys4 -.polys1t -.polys2ty -.po8m8e9g8r8a8n9a8t8e. -.po2me -.pome2g -.pome1gr -.pomegra2n2 -.pomegra1na -.pomegran2at -.po8r8o9e8l8a8s9t8i8c. -.1p4or -.poro4e -.poro4el -.poroe1la -.poroelast2i -.poroelas1tic -.po8r9o8u8s. -.porou2 -.poro2us -.po8r9t8a9b8l8e. -.por1ta -.por2tab -.portab2l2 -.po8s8t9a8m9b8l8e. -.1pos -.pos2ta -.posta4m1b -.postamb2l2 -.po8s8t9a8m9b8l8e8s. -.postambles2 -.po8s8t9h8u9m8o8u8s. -.posthu1mo -.posthu3mo2us -.posthumou2 -.po8s8t9s8c8r8i8p8t. -.pos4t1s2 -.post4sc -.postscri2 -.postscr2ip -.postscri2p1t -.po8s8t9s8c8r8i8p8t8s. -.postscrip4t1s2 -.po8s9t8u8r9a8l. -.pos1tu -.postu1ra -.pr8e9a8m9b8l8e. -.prea4m1b -.preamb2l2 -.pr8e9a8m9b8l8e8s. -.preambles2 -.pr8e9l8o8a8d8e8d. -.prel4oa -.preloa2d3 -.preloa2d1ed -.pr8e9p8a8r9i8n8g. -.pre2pa -.prep4a4r1i -.prep2a2r -.preparin4g -.pr8e9p8r8i8n8t. -.pr2epr2 -.preprin4t3 -.pr8e9p8r8i8n8t8s. -.preprin4t4s2 -.pr8e9p8r8o8c8e8s9s8o8r. -.pre3pro -.prepr2oc -.prepro1ce -.preproc2e2ss -.preproces1so -.pr8e9p8r8o8c8e8s9s8o8r8s. -.preprocesso4rs2 -.pr8e9s8p8l8i8t9t8i8n8g. -.pre1sp -.pres1p2l2 -.prespl1it -.prespl4i4t3t2 -.presplit2t1in -.pr8e9w8r8a8p. -.prewra4 -.pr8e9w8r8a8p8p8e8d. -.prewra4p1p -.prewrap2pe -.prewrap4p2ed -.pr8i8e8s8t9e8s8s8e8s. -.5pr2i4e4 -.pri1est -.pries4t2e2ss -.priestess1e4s -.pr8e8t9t8y9p8r8i8n9t8e8r. -.pre4t3t2 -.pret1ty -.pr2ettypr2 -.prettyprin4t3 -.pr8e8t9t8y9p8r8i8n9t8i8n8g. -.prettyprint2i -.prettyprin4t3ing -.prettyprin2t1in -.pr8o9c8e9d8u8r9a8l. -.pr2oc -.pro1ce -.proce1du -.procedu1ra -.pr8o8c8e8s8s. -.proc2e2ss -.pr8o9c8u8r9a8n8c8e. -.procu1ra -.procura2n -.pr8o8g9e9n8i8e8s. -.pro1ge -.pro1gen -.proge5n2ie4 -.pr8o8g9e9n8y. -.pro4geny -.pr8o9g8r8a8m9m8a8b8l8e. -.pro1gr -.program1m -.program1ma -.program2mab -.programmab2l2 -.pr8o8m9i9n8e8n8t. -.prom4i -.prom1in -.prom2ine -.promi1nen -.prominen1t -.pr8o9m8i8s9c8u9o8u8s. -.prom2is -.prom2is1c -.promis1cu -.promiscu1ou2 -.promiscuo2us -.pr8o8m9i8s9s8o8r8y. -.prom4i2s1s -.promis1so -.promisso1ry -.pr8o8m9i8s8e. -.prom4ise -.pr8o8m9i8s8e8s. -.promis1e4s -.pr8o9p8e8l9l8e8r. -.pro3pel -.propel1l -.propel2le -.pr8o9p8e8l9l8e8r8s. -.propelle4r1s2 -.pr8o9p8e8l9l8i8n8g. -.propell2i -.propel2lin4 -.pr8o9h8i8b9i9t8i8v8e. -.pro1h2 -.prohibi2t -.prohibi1ti -.prohibi1t2iv -.pr8o9h8i8b9i9t8i8v8e9l8y. -.prohibitiv4e1ly -.pr8o9s8c8i8u8t9t8o. -.pros2c -.pros1ci -.prosci1u -.prosciu4t3t2 -.prosciut5to -.pr8o9t8e8s8t9e8r. -.pro1t -.pro4tes -.pr8o9t8e8s8t9e8r8s. -.proteste4r1s2 -.pr8o9t8e8s9t8o8r. -.prot4es2to -.pr8o9t8e8s9t8o8r8s. -.protesto4rs2 -.pr8o9t8o9l8a8n9g8u8a8g8e. -.pro1to -.proto1la -.proto4la2n -.protol2ang -.protolan1gu -.protolangu4a -.pr8o9t8o9t8y8p9a8l. -.proto1ty -.prototy1pa -.prototyp4al -.pr8o8v9i8n8c8e. -.prov1in -.prov2inc -.pr8o8v9i8n8c8e8s. -.pr8o9v8i8n9c8i8a8l. -.provin1ci -.provin3c2i1a -.provinci2al -.pr8o8w9e8s8s. -.prow2e2ss -.ps8e8u9d8o9d8i8f9f8e8r9e8n9t8i8a8l. -.2p1s2 -.p2se -.ps4eu -.pseu1do -.pseudod1if -.pseudodi4f1f -.pseudodiffer1 -.pseudodiffer3en1t -.pseudodifferent2i -.pseudodifferen1t2i1a -.pseudodifferenti2al -.ps8e8u9d8o9f8i9n8i8t8e. -.pseu2d5of -.pseudo2fi -.pseudo2fin -.pseudof2ini -.pseudofin2it -.pseudofin2ite -.ps8e8u9d8o9f8i9n8i8t8e9l8y. -.pseudofinite1ly -.ps8e8u9d8o9f8o8r8c8e8s. -.pseudo1fo -.pseudofo2r -.pseudofor1c -.pseudofor2ce -.ps8e8u9d8o8g9r8a9p8h8e8r. -.pseud4og -.pseudo1gr -.pseudog5ra3ph4er -.ps8e8u9d8o9g8r8o8u8p. -.pseudo4g4ro -.pseudogrou2 -.ps8e8u9d8o9g8r8o8u8p8s. -.pseudogrou2p1s2 -.ps8e8u9d8o9n8y8m. -.pseu4do2n -.pseudonym4 -.ps8e8u9d8o9n8y8m8s. -.pseudony4m1s2 -.ps8e8u9d8o9w8o8r8d. -.pseudo4wo2 -.ps8e8u9d8o9w8o8r8d8s. -.pseudowor2d1s2 -.ps8y9c8h8e9d8e8l9i8c. -.ps4y -.p4sy1c -.psy3ch -.psych4e2 -.psy4ch4ed -.psychedel2i -.ps8y8c8h8s. -.psyc4h1s2 -.pu9b8e8s9c8e8n8c8e. -.pub3 -.pub4e -.pu4bes4 -.pubes2c -.pubes1cen -.pubes3cenc -.qu8a8d9d8i8n8g. -.qu2 -.qua2d -.quad4d1in -.quad1d4 -.qu8a9d8r8a8t9i8c. -.qua1dr -.quadrat1ic -.qu8a9d8r8a8t9i8c8s. -.quadrati4c3s2 -.qu8a8d9r8a9t8u8r8e. -.quadra2tu -.quadra3ture -.qu8a8d9r8i9p8l8e8g9i8c. -.quadri2p2l2 -.quadr2ip -.quadripleg4ic -.qu8a8i8n8t9e8r. -.quai2 -.qua4i4n -.quain1t -.qu8a8i8n8t9e8s8t. -.qu8a9s8i9e8q8u8i8v9a9l8e8n8c8e. -.quas2ie4 -.quasie1q -.qu2asiequ2 -.quasieq2ui2 -.quasiequ2iv3 -.quasiequi1va -.quasiequiv2ale -.quasiequiva3lenc -.qu8a9s8i9e8q8u8i8v9a9l8e8n8c8e8s. -.qu8a9s8i9e8q8u8i8v9a9l8e8n8t. -.quasiequiva1len1t -.qu8a9s8i9h8y9p8o9n8o8r9m8a8l. -.quasi3h -.quasihy3po -.quasihypo2n -.quasihyponor1m -.quasihyponor1ma -.qu8a9s8i9r8a8d9i9c8a8l. -.quas4i2r -.quasi1r5a -.quasira2d -.quasir2adi -.quasirad3i1ca -.qu8a9s8i9r8e8s8i8d9u8a8l. -.quasi4res -.quasire1si -.quasire2s2id -.quasiresi2du -.quasiresid1u1a -.qu8a9s8i9s8m8o8o8t8h. -.qua1sis -.quasi2s1m -.quasis1mo -.quasismoo2 -.quasismo4oth -.qu8a9s8i9s8t8a9t8i8o8n9a8r8y. -.quasis1ta -.quasistation5a2r -.quasista1t2io -.quasistatio2n -.quasistatio1n1a -.qu8a9s8i9t8o8p8o8s. -.qu5a5si4t -.quasi1to -.quasito1pos -.qu8a9s8i9t8r8i9a8n9g8u9l8a8r. -.quasi5tr2i3a -.quasitri2a2n -.quasitri2ang -.quasitrian1gu -.quasitriangu1la -.quasitriangul2a2r -.qu8a9s8i9t8r8i8v9i8a8l. -.quasitr2i4v -.quasitriv3i -.quasitriv2i1a -.quasitrivi2al -.qu8i8n9t8e8s9s8e8n8c8e. -.q2ui2 -.qui4n -.quin1t -.quin4t2e2ss -.quintes4senc -.qu8i8n9t8e8s9s8e8n8c8e8s. -.qu8i8n9t8e8s9s8e8n9t8i8a8l. -.quintessen1t -.quintessent2i -.quintessen1t2i1a -.quintessenti2al -.ra8b9b8i8t9r8y. -.2rab -.ra2b1b -.rabbi2t -.rabbi3tr -.rabbit5ry -.ra9d8i9o8g9r8a9p8h8y. -.ra2d -.r2adi -.ra3d2io -.radio5g -.radio2gr -.radio4g3ra1phy -.ra8f8f9i8s8h. -.raf5fi -.ra2f -.ra4f1f4 -.raf2f5is -.raffis2h -.ra8f8f9i8s8h9l8y. -.raffis4h1l4 -.raffish1ly -.ra8m9s8h8a8c8k8l8e. -.ra4m1s2 -.ram4s2h -.ramshack1 -.ramshack1l -.ra8v9e8n9o8u8s. -.rav4e4no -.rave1nou2 -.raveno2us -.re9a8r8r8a8n8g8e9m8e8n8t. -.re5ar1r4 -.re2a2r -.rearran4ge -.rearra2n -.rearr2ang -.rearrange1me -.rearrange1men -.rearrange3men1t -.re9a8r8r8a8n8g8e9m8e8n8t8s. -.rearrangemen4t4s2 -.re8c9i9p8r8o8c9i9t8i8e8s. -.reciproci1ti -.reciprocit2ie4 -.re8c9t8a8n9g8l8e. -.rec4ta2n -.re2c1t -.rect5ang -.rec1ta -.rectan1gl2 -.rectan1gle -.re8c9t8a8n9g8l8e8s. -.rectangles2 -.re8c9t8a8n9g8u9l8a8r. -.rectan1gu -.rectangu1la -.rectangul2a2r -.re9d8i9r8e8c8t. -.2r2ed -.r4edi -.red4ir2 -.redi1re -.redire2c1t -.re9d8i9r8e8c8t9i8o8n. -.redirec1t2io -.redirectio2n -.re9d8u8c9i8b8l8e. -.re1du -.redu2c -.reduci4b -.redu1ci -.reduci1b2l2 -.re9e8c8h8o. -.ree2c -.ree2ch -.ree3cho2 -.re9p8h8r8a8s8e. -.rep4hr4 -.rephr2as -.re9p8h8r8a8s8e8s. -.rephras1e4s -.re9p8h8r8a8s8e8d. -.rephra4s4ed -.re9p8o9s8i9t8i8o8n. -.re4posi -.re1po -.re1pos -.repo3s2i1t2io -.reposi1ti -.repositio2n -.re9p8o9s8i9t8i8o8n8s. -.repositio2n3s2 -.re9p8r8i8n8t. -.repr2 -.reprin4t3 -.re9p8r8i8n8t8s. -.reprin4t4s2 -.re9s8t8o8r9a8b8l8e. -.r4es2to -.resto2ra -.resto2rab -.restorab2l2 -.re8t8r8o9f8i8t. -.retro2fi -.re8t8r8o9f8i8t9t8e8d. -.retrof4i4t4t2 -.retrofit2t1ed -.re9u8s9a8b8l8e. -.r4eu2 -.re2us4 -.reusa2 -.reu2s1ab -.reusab2l2 -.re9u8s8e. -.re9w8i8r8e. -.rewi2 -.rew4ir4 -.re9w8r8a8p. -.rewra4 -.re9w8r8a8p8p8e8d. -.rewra4p1p -.rewrap2pe -.rewrap4p2ed -.re9w8r8i8t8e. -.rewri4 -.rewr2ite -.rh8i9n8o8c9e8r9o8s. -.rh4 -.rh2i1no -.rhi4no4c -.rhino1ce -.rhinoc2ero -.ri8g8h8t9e8o8u8s. -.righ1teo -.righteou2 -.righteo2us -.ri8g8h8t9e8o8u8s9n8e8s8s. -.righteous1n4 -.righteous1nes -.righteousn2e2ss -.ri8n8g9l8e8a8d8e8r. -.rin4g -.ringl2 -.rin1gle -.ringle2a -.ringlea2d1 -.ri8n8g9l8e8a8d8e8r8s. -.ringleade4r5s2 -.ro9b8o8t. -.ro9b8o8t8s. -.robo4t1s2 -.ro9b8o8t8i8c. -.ro9b8o8t9i8c8s. -.roboti4c3s2 -.ro8u8n8d9t8a8b8l8e. -.rou2 -.roun2d -.round1ta -.round2tab -.roundtab2l2 -.ro8u8n8d9t8a8b8l8e8s. -.roundta5bles2 -.sa8l8e8s9c8l8e8r8k. -.sa2 -.s2ale -.sales2 -.sales2c -.salescle5 -.sales1c4l4 -.sa8l8e8s9c8l8e8r8k8s. -.salescler4k1s2 -.sa8l8e8s9w8o8m8a8n. -.sales4w2 -.sale4s1wo2 -.saleswom1 -.saleswo1ma -.saleswoma2n -.sa8l8e8s9w8o8m8e8n. -.saleswo2me -.saleswo1men -.sa8l9m8o9n8e8l9l8a. -.s4a2l4m -.salmo2n4 -.sal1mo -.salmon4ella -.salmonel1l -.sa8l9t8a9t8i8o8n. -.sa4l4t -.sal1ta -.salta1t2io -.saltatio2n -.sa8r9s8a9p8a8r9i8l9l8a. -.s2a2r -.sa2r4sa2 -.sa4rs2 -.sars1ap -.s2a2rsap2a2r4 -.sarsa1pa -.sarsap4a4r1i -.sarsaparil1l -.sa8u8e8r9k8r8a8u8t. -.sau4 -.sauerkrau4t -.sc8a8t9o9l8o8g9i9c8a8l. -.s1ca -.sca1to -.scato3log1ic -.scatologi1ca -.sc8h8e8d9u8l9i8n8g. -.s2ch2 -.sche2 -.s4ch4ed -.sche4dul -.sche1du -.schedul2i -.schedul3ing -.sc8h8i8z9o9p8h8r8e8n8i8c. -.schi2z -.schi1zo -.schiz2oph -.schizop4hr4 -.sc8h8n8a8u9z8e8r. -.sc2h1n -.sch1na -.schn2au -.schnau2z4e -.schnauz1er -.sc8h8o8o8l9c8h8i8l8d. -.s4cho2 -.schoo2 -.schoo4l1c2 -.s2chool2ch -.schoolch4il2 -.schoolchi2ld -.sc8h8o8o8l9c8h8i8l8d9r8e8n. -.schoolchil3dr -.schoolchildre4 -.schoolchil5dren -.sc8h8o8o8l9t8e8a8c8h8e8r. -.schoo4l2t -.school1te -.s2chooltea2ch -.schoolteache2 -.sc8h8o8o8l9t8e8a8c8h9e8r8s. -.schoolteach3e4r1s2 -.sc8r8u9t8i9n8y. -.scru2t1i5n -.scr4u1t2i -.scrut4iny -.sc8y8t8h9i8n8g. -.s1cy -.scy3thin -.se8l8l9e8r. -.sel2le -.se8l8l9e8r8s. -.selle4r1s2 -.se8c9r8e9t8a8r9i8a8t. -.se1cr -.se4c3re1ta -.secret2a2r -.secretar1i -.secretar2i3a -.se8c9r8e9t8a8r9i8a8t8s. -.secretaria4t1s2 -.se8m9a9p8h8o8r8e. -.se1ma -.se4map -.semapho4r -.se8m9a9p8h8o8r8e8s. -.se9m8e8s9t8e8r. -.4se1me -.se2mes -.se8m8i9d8e8f9i9n8i8t8e. -.sem2id -.semide1f -.semidef5i5n2ite -.semide1fi -.semide2fin -.semidef2ini -.semidefin2it -.se8m8i9d8i9r8e8c8t. -.semi2di -.semid4ir2 -.semidi1re -.semidire2c1t -.se8m8i9h8o9m8o9t8h8e8t9i8c. -.semi3h -.semiho1mo -.semihom4oth3 -.semihomoth2e -.semihomo3the4t -.semihomothet1ic -.se8m8i9r8i8n8g. -.sem4ir -.semir1i -.semirin4g -.se8m8i9r8i8n8g8s. -.semirings2 -.se8m8i9s8i8m9p8l8e. -.se4m2is -.semisi4m1p -.semisim1p2l2 -.se8m8i9s8k8i8l8l8e8d. -.sem4is4k2 -.semisk1i -.semisk4il1l -.semiskil2le -.se8r8o9e8p8i9d8e9m8i9o9l8o8g9i9c8a8l. -.s2er4o -.sero4e -.seroep4id -.seroepi3de -.seroepid4em -.seroepidem2io -.seroepidemi1ol -.seroepidemio3log1ic -.seroepidemiologi1ca -.se8r9v8o9m8e8c8h9a8n8i8s8m. -.4ser3vo -.servo2me -.servome2ch -.servomech5a5nis -.servomecha2n -.servomechani2s1m -.se8r9v8o9m8e8c8h9a8n8i8s8m8s. -.servomechan4is4m1s2 -.se8s9q8u8i9p8e9d8a9l8i8a8n. -.s1e4s -.sesqu2 -.sesq2ui2 -.sesqu2ip -.sesquipe4 -.sesqui2p2ed -.sesquip2e2d2a -.sesquipedal1i -.sesquipedal2i1a -.sesquipedali2a2n -.se8t9u8p. -.se1tu -.se8t9u8p8s. -.setu2p1s2 -.se9v8e8r8e9l8y. -.5sev -.sev1er -.sev4erel -.severe1ly -.sh8a8p8e9a8b8l8e. -.sha3pe4a -.shape1a4b -.shapeab2l2 -.sh8o8e9s8t8r8i8n8g. -.sho4 -.sho2est4r -.shoestrin4g -.sh8o8e9s8t8r8i8n8g8s. -.shoestrings2 -.si8d8e9s8t8e8p. -.5side4s2 -.s2id -.sideste4p -.si8d8e9s8t8e8p8s. -.sideste2p1s2 -.si8d8e9s8w8i8p8e. -.sides4w2 -.sideswi2 -.sidesw2ip -.sideswipe4 -.sk8y9s8c8r8a8p8e8r. -.sk2 -.skys4c -.skyscrap3er -.sk8y9s8c8r8a8p8e8r8s. -.skyscrape4r1s2 -.sm8o8k8e9s8t8a8c8k. -.2s1m -.s1mo -.s4m2ok -.smokes4 -.smokes1ta -.smokestack1 -.sm8o8k8e9s8t8a8c8k8s. -.smokestac4k1s2 -.sn8o8r9k8e8l9i8n8g. -.s1n4 -.snorke5l2i -.snorke4l3ing -.so9l8e9n8o8i8d. -.1so -.sol4eno -.solenoi2 -.soleno2id -.so9l8e9n8o8i8d8s. -.solenoi2d1s2 -.so8l8u8t8e. -.so1lut -.so8l8u8t8e8s. -.so8v9e8r9e8i8g8n. -.4sov -.soverei2 -.sovere2ig2 -.so8v9e8r9e8i8g8n8s. -.sovereig2n1s2 -.sp8a9c8e8s. -.2s1pa -.spa4ce -.sp8e9c8i8o8u8s. -.spe2c -.spe1c2i -.spec2io -.speciou2 -.specio2us -.sp8e8l8l9e8r. -.spel1l -.spel2le -.sp8e8l8l9e8r8s. -.spelle4r1s2 -.sp8e8l8l9i8n8g. -.spell2i -.spel2lin4 -.sp8e9l8u8n8k9e8r. -.spelu4nk2 -.spelunk1er -.sp8e8n8d9t8h8r8i8f8t. -.spen4d -.spend2th -.spendt4hr4 -.spendthr4i2ft -.sp8h8e8r9o8i8d. -.s2phe -.3sph4er -.sph2ero -.spheroi2 -.sphero2id -.sp8h8e8r9o8i8d9a8l. -.spheroi1d2a -.sp8h8i8n9g8e8s. -.sph5ing -.sph4inge -.sp8i8c9i9l8y. -.sp2i1ci -.spici1ly -.sp8i8n9o8r8s. -.spi2n -.sp4i1no -.spino4rs2 -.sp8o8k8e8s9w8o8m8a8n. -.sp2ok -.spokes4 -.spokes4w2 -.spoke4s1wo2 -.spokeswom1 -.spokeswo1ma -.spokeswoma2n -.sp8o8k8e8s9w8o8m8e8n. -.spokeswo2me -.spokeswo1men -.sp8o8r8t8s9c8a8s8t. -.s1p4or4 -.spor4t1s2 -.sport4sc -.sports1ca -.sp8o8r8t8s9c8a8s8t9e8r. -.sportscast5er -.sp8o8r9t8i8v8e9l8y. -.spor1ti -.spor4t2iv -.sportiv4e1ly -.sp8o8r8t8s9w8e8a8r. -.sport4sw2 -.sportswe2a2r -.sp8o8r8t8s9w8r8i8t8e8r. -.sportswri4 -.sportswr2ite -.sp8o8r8t8s9w8r8i8t8e8r8s. -.sportswrit5e4r1s2 -.sp8r8i8g8h8t9l8i8e8r. -.spr2 -.spr2ig -.sprigh2tl -.sprightl2ie4 -.sq8u8e8a9m8i8s8h. -.squ2 -.squeam2is -.squeamis2h -.st8a8n8d9a8l8o8n8e. -.5st4and -.sta2n -.stan1d2a -.standalo2n -.st8a8r9t8l8i8n8g. -.st2a2r -.star2tl -.st8a8r9t8l8i8n8g9l8y. -.startlingl2 -.startling1ly -.st8a9t8i8s9t8i8c8s. -.statis1t2i -.statis1tic -.statisti4c3s2 -.st8e8a8l8t8h9i8l8y. -.stea4l -.stea4lt -.stealth3i -.steal4th4il2 -.stealthi1ly -.st8e8e8p8l8e9c8h8a8s8e. -.s1tee -.stee4p1 -.stee1p2l2 -.steeple2ch -.st8e8r8e8o9g8r8a8p8h9i8c. -.stere1o -.stereo2g -.stereo1gr -.stereo5graph1ic -.stereogr4aphi -.st8o9c8h8a8s9t8i8c. -.s1to -.sto2ch4 -.stochast2i -.stochas1tic -.st8r8a8n8g8e9n8e8s8s. -.st4r -.s1tra -.stran4ge -.stra2n -.str2ang -.strange4n4e -.stran1gen -.strange1nes -.strangen2e2ss -.st8r8a8p9h8a8n8g8e8r. -.straph2an4g -.straphang5er -.strapha2n -.st8r8a8t9a9g8e8m. -.stra2ta -.st8r8a8t9a9g8e8m8s. -.stratage4m1s2 -.st8r8e8t8c8h9i9e8r. -.stre4tc -.stret4ch -.stretch2ie4 -.st8r8i8p9t8e8a8s8e. -.str2ip -.stri2p1t -.strip2te -.st8r8o8n8g9h8o8l8d. -.stro2n -.strongho2l2d -.st8r8o8n8g9e8s8t. -.st8u9p8i8d9e8r. -.s1tu -.stup4id -.stupi3de -.st8u9p8i8d9e8s8t. -.stupide4s2 -.su8b9d8i8f9f8e8r9e8n9t8i8a8l. -.1su -.su4b3 -.su4b1d -.subd1if -.subdi4f1f -.subdiffer1 -.subdiffer3en1t -.subdifferent2i -.subdifferen1t2i1a -.subdifferenti2al -.su8b9e8x9p8r8e8s9s8i8o8n. -.sub4e -.sub1ex3p -.subexpr2 -.subex3pr2e2ss -.subexpres1si -.subexpres1s2io -.subexpres5sio2n -.su8b9e8x9p8r8e8s9s8i8o8n8s. -.subexpressio2n3s2 -.su8m9m8a9b8l8e. -.su2m -.sum1m -.sum1ma -.sum2mab -.summab2l2 -.su8p8e8r9e8g8o. -.su1pe -.supere1go -.su8p8e8r9e8g8o8s. -.supere4gos -.su9p8r8e8m9a9c8i8s8t. -.supr2 -.supre4mac -.supre1ma -.suprem4a2ci -.su9p8r8e8m9a9c8i8s8t8s. -.supremacis4t1s2 -.su8r9v8e8i8l9l8a8n8c8e. -.su2r -.surv4e -.survei2 -.surveil1l -.surveilla2n -.sw8i8m9m8i8n8g9l8y. -.sw2 -.swi2 -.swim1m -.swimm4ingl2 -.swimm5ing1ly -.sy8m8p9t8o9m8a8t8i8c. -.sy4m1p -.sym2p1t -.symp1to -.sympto2ma -.symptomat1ic -.sy8n9c8h8r8o9m8e8s8h. -.syn3c4hr4 -.syn2ch -.synchro2me -.synchro2mes -.synchrom4es2h -.sy8n9c8h8r8o9n8o8u8s. -.synchro2n -.synchro1nou2 -.synchrono2us -.sy8n9c8h8r8o9t8r8o8n. -.synchrotro2n -.ta8f8f9r8a8i8l. -.4ta2f4 -.ta4f1f4 -.taffr2ai2 -.ta8l8k9a9t8i8v8e. -.ta2l -.4talk -.talka3 -.talka4t -.talka1t2iv -.ta9p8e8s9t8r8y. -.tap2est4r -.tape4stry -.ta9p8e8s9t8r8i8e8s. -.tapestr2ie4 -.ta8r9p8a8u9l8i8n. -.t2a2r -.tar2p -.tar1pa -.tarpau4l2 -.tarpaul2i -.ta8r9p8a8u9l8i8n8s. -.tarpaul2i2n1s2 -.te9l8e8g9r8a9p8h8e8r. -.tele1gr -.teleg5ra3ph4er -.te9l8e8g9r8a9p8h8e8r8s. -.telegraphe4r1s2 -.te8l8e9k8i9n8e8t9i8c. -.teleki4n -.telek1i -.telek2ine -.teleki3net1ic -.te8l8e9k8i9n8e8t9i8c8s. -.telekineti4c3s2 -.te8l8e9r8o9b8o8t9i8c8s. -.te4l1er -.tel4ero -.teler5ob -.teleroboti4c3s2 -.te8l8l9e8r. -.tel1l -.tel2le -.te8l8l9e8r8s. -.telle4r1s2 -.te8m9p8o9r8a8r9i8l8y. -.te4m1p -.tem1p4or -.tempo1ra -.tempo4raril -.tempor2a2r -.temporar1i -.temporari1ly -.te8n9u8r8e. -.te8s8t9b8e8d. -.tes2t1b -.test4be2d -.te8x8t9w8i8d8t8h. -.3tex -.tex1t2 -.textw4 -.textwi2 -.textw2id -.textwid2th -.th8a8l9a9m8u8s. -.tha3la -.thala3m -.thala1mu -.thalam2us -.th8e8r9m8o9e8l8a8s9t8i8c. -.th2e -.ther3m4 -.ther1mo -.thermo4el -.thermoe1la -.thermoelast2i -.thermoelas1tic -.ti8m8e9s8t8a8m8p. -.ti2mes -.times1ta -.timesta4m1p -.ti8m8e9s8t8a8m8p8s. -.timestam2p1s2 -.to8o8l9k8i8t. -.too2 -.toolk1i -.to8o8l9k8i8t8s. -.toolki4t1s2 -.to8p8o9g8r8a8p8h9i9c8a8l. -.to5po4g -.topo1gr -.topo5graph1ic -.topogr4aphi -.topographi1ca -.to8q8u8e8s. -.to1q -.toqu2 -.tr8a8i9t8o8r9o8u8s. -.1tra -.tr2ai2 -.trai1to -.traitorou2 -.traitoro2us -.tr8a8n8s9c8e8i8v8e8r. -.tra2n -.tra2n1s2 -.trans4c -.tran4s3cei2 -.transce2iv -.tr8a8n8s9c8e8i8v8e8r8s. -.transceive4r1s2 -.tr8a8n8s9g8r8e8s8s. -.tran2s3g -.trans1gr -.transgr2e2ss -.tr8a8n8s9v8e8r9s8a8l. -.tran4sv -.transve4r1s2 -.transver1sa2 -.tr8a8n8s9v8e8r9s8a8l8s. -.transversa2l1s2 -.tr8a8n8s9v8e8s9t8i8t8e. -.transv4e2s -.transvest2i -.transvest2ite -.tr8a8n8s9v8e8s9t8i8t8e8s. -.transvestit4es -.tr8a9v8e8r8s9a9b8l8e. -.trave4r1s2 -.traver1sa2 -.traver2s1ab -.traversab2l2 -.tr8a9v8e8r9s8a8l. -.tr8a9v8e8r9s8a8l8s. -.traversa2l1s2 -.tr8i9e8t8h8y8l9a8m8i8n8e. -.tri5et -.tr2ie4 -.triethy3la -.triethylam1in -.triethylam2ine -.tr8e8a8c8h9e8r8i8e8s. -.trea2ch -.treache2 -.treacher1i -.treacher2ie4 -.tr8o8u9b8a9d8o8u8r. -.trou2 -.trouba2d -.trouba1do -.troubadou2 -.tu8r9k8e8y. -.1tu -.tu8r9k8e8y8s. -.turkeys4 -.tu8r8n9a8r8o8u8n8d. -.tur4n2a2r -.tur1na -.turnarou2 -.turnaroun2d -.tu8r8n9a8r8o8u8n8d8s. -.turnaroun2d1s2 -.ty8p9a8l. -.1ty -.ty1pa -.typ4al -.un9a8t9t8a8c8h8e8d. -.un2at4 -.una4t3t2 -.unat1ta -.unatta2ch -.unattache2 -.unatta4ch4ed -.un9e8r8r9i8n8g9l8y. -.un4er -.uner4r4 -.unerrin4g -.unerringl2 -.unerring1ly -.un9f8r8i8e8n8d9l8y. -.un3f -.unfri2 -.unfr2ie4 -.unfrien2d1ly -.un9f8r8i8e8n8d9l8i9e8r. -.unfriendl2ie4 -.va8g8u8e8r. -.1va -.vag4 -.va5guer -.va2gue -.va8u8d8e9v8i8l8l8e. -.vaude1v4 -.vaude2v3i4l -.vaude1vi -.vaudevil1l -.vaudevil2le -.vi8c9a8r8s. -.v4ic2a2r -.vi1ca -.vica4rs2 -.vi8l9l8a8i8n9e8s8s. -.2vil -.vil1l -.villai2 -.villa4i4n -.villa2ine -.villai5n2e2ss -.villai1nes -.vi8s9u8a8l. -.vi3su -.visu1al -.vi8s9u8a8l9l8y. -.visual1l -.visual1ly -.vi9v8i8p9a9r8o8u8s. -.3v2iv -.viv2i4p -.vivi1pa -.vivip2a2r -.viviparou2 -.viviparo2us -.vo8i8c8e9p8r8i8n8t. -.voi4 -.voi3cep -.voicepr2 -.voiceprin4t3 -.vs8p8a8c8e. -.v2s1pa -.vspa4ce -.wa8d9d8i8n8g. -.wa2d -.wad4d1in -.wad1d4 -.wa8l8l9f8l8o8w8e8r. -.wal1l -.wal2lf -.wallf4l2 -.wallflow1er -.wa8l8l9f8l8o8w9e8r8s. -.wallflowe4r1s2 -.wa8r8m9e8s8t. -.w2a2r -.war1m -.war2me -.war2mes -.wa8s8t8e9w8a8t8e8r. -.was4t -.waste2w -.waste1w5a -.wastewa1te -.wa8v8e9g8u8i8d8e. -.waveg3 -.waveg2ui2 -.wavegu2id -.wa8v8e9g8u8i8d8e8s. -.waveguide4s2 -.wa8v8e9l8e8t. -.wa8v8e9l8e8t8s. -.wavele4t1s2 -.we8b9l8i8k8e. -.w2e1b -.web2l2 -.web3l4ik -.we8e8k9n8i8g8h8t. -.weekn2ig -.we8e8k9n8i8g8h8t8s. -.weeknigh4t1s2 -.wh8e8e8l9c8h8a8i8r. -.whee4l1c2 -.wheel2ch -.wheelchai2 -.wheelcha4ir -.wh8e8e8l9c8h8a8i8r8s. -.wheelchai4rs2 -.wh8i8c8h9e8v8e8r. -.whi4 -.wh4i2ch -.whiche2 -.whichev1er -.wh8i8t8e9s8i8d8e8d. -.wh2ite -.whit4es -.white1si -.white2s2id -.whitesi2d1ed -.wh8i8t8e9s8p8a8c8e. -.white1sp -.white2s1pa -.whitespa4ce -.wh8i8t8e9s8p8a8c8e8s. -.wi8d8e9s8p8r8e8a8d. -.w2id -.wide4s2 -.wide1sp -.wides4pre -.widespr2 -.widesprea2d1 -.wi8n8g9s8p8a8n. -.win4g -.wings2 -.wing2s1pa -.wingspa4n -.wi8n8g9s8p8a8n8s. -.wingspa2n1s2 -.wi8n8g9s8p8r8e8a8d. -.wingspr2 -.wingsprea2d1 -.wi8t8c8h9c8r8a8f8t. -.wi4tc -.wit4ch -.witchcra2f4t -.witchcra2f -.wo8r8d9s8p8a8c9i8n8g. -.1wo2 -.wor2d1s2 -.words4p -.word2s1pa -.wordsp4a2ci -.wordspa2c1in -.wordspac1ing -.wo8r8k9a8r8o8u8n8d. -.work2a2r -.workarou2 -.workaroun2d -.wo8r8k9a8r8o8u8n8d8s. -.workaroun2d1s2 -.wo8r8k9h8o8r8s8e. -.workh4 -.workhor4se -.workho4rs2 -.wo8r8k9h8o8r8s8e8s. -.workhors3e4s -.wr8a8p9a8r8o8u8n8d. -.wra4 -.wrap2a2r4 -.wra1pa -.wraparou2 -.wraparoun2d -.wr8e8t8c8h9e8d. -.wre4tc -.wret4ch -.wretche2 -.wret4ch4ed -.wr8e8t8c8h9e8d9l8y. -.wretche2d1ly -.ye8s9t8e8r9y8e8a8r. -.yes4 -.yesterye2a2r -.al9g8e9b8r8a8i9s8c8h8e. -.algebra2is1c -.algebrais3ch2 -.algebraische2 -.al9l8e9g8h8e9n8y. -.al1l -.al2le -.al3leg -.alleghe2n -.ar9k8a8n9s8a8s. -.arka2n -.arkan2sa2 -.arka2n1s2 -.at8p9a8s8e. -.a4t1p -.at1pa -.at8p9a8s8e8s. -.atpas1e4s -.au8s9t8r8a8l9a8s8i8a8n. -.a2us -.aus1t4r -.aus1tra -.australas2i1a -.australasi2a2n -.au8t8o9m8a8t8i9s8i8e8r9t8e8r. -.automa3tis -.automatis2ie4 -.automatisiert3er -.be9d8i8e9n8u8n8g. -.4be2d -.b4e3di -.be5di3en -.bed2ie4 -.bedie3nu4n -.be8m8b8o. -.4be5m -.be4m5b -.bi8b9l8i9o9g8r8a9p8h8i9s8c8h8e. -.bibliogr4aphi -.bibliograph2is1c -.bibliographis3ch2 -.bibliographische2 -.bo8s9t8o8n. -.5bos4 -.bos1to -.bosto2n -.br8o8w8n9i8a8n. -.brown5i -.brow3n4i1a -.browni3a2n -.br8u8n8s9w8i8c8k. -.bru2n -.bru2n3s4 -.brun4sw2 -.brunswi2 -.brunswick1 -.bu9d8a9p8e8s8t. -.bu1d2a -.ca8r9i8b9b8e8a8n. -.car1i -.car4ib -.cari2b1b -.carib2be -.caribbea2n -.ch8a8r8l8e8s9t8o8n. -.char4le4 -.char1l -.charles2 -.charl4es2to -.charle3sto2n -.ch8a8r9l8o8t8t8e8s9v8i8l8l8e. -.char3lo4 -.charlo4t3t2 -.charlot4tes -.charlotte4sv -.charlottes2vil -.charlottesvil1l -.charlottesvil2le -.co9l8u8m9b8i8a. -.colum4bi -.colu4m1b -.columb2i1a -.cz8e8c8h8o9s8l8o9v8a9k8i8a. -.c2ze4 -.cze2ch -.cze3cho2 -.czechos4l2 -.czechos4lov -.czechoslo1va -.czechoslovak1i -.czechoslovak2i1a -.de8l9a9w8a8r8e. -.de1la -.de4law -.delaw2a2r -.di8j8k9s8t8r8a. -.di3j -.dij4k1s2 -.dijkst4r -.dijks1tra -.du8a8n8e. -.d1u1a -.dua2n -.dy9n8a9m8i9s8c8h8e. -.5dyn -.dy1na -.dynam2is -.dynam2is1c -.dynamis3ch2 -.dynamische2 -.en8g9l8i8s8h. -.engl2 -.englis2h -.eu8l8e8r9i8a8n. -.eul4e -.eu3l4er1i -.eule1r2i3a4 -.euleri2a2n -.ev8a8n9s8t8o8n. -.e1va -.eva2n -.evan4st -.eva2n1s2 -.evans1to -.evansto2n -.fe8b9r8u9a8r8y. -.f2e4b -.fe3br -.febru3a -.febru2a2r -.fe8s8t9s8c8h8r8i8f8t. -.fes4t1s2 -.fest4sc -.fests2ch2 -.festsc4hr4 -.festschr4i2ft -.fl8o8r9i9d8a. -.flor2id -.flori1d2a -.fl8o8r9i9d9i8a8n. -.flori2di -.florid5i2a2n -.flori1d4i3a -.fo8r9s8c8h8u8n8g8s9i8n9s8t8i9t8u8t. -.fors4c -.fors2ch2 -.forschungs2 -.forschung2s1in -.forschungs2i2n1s2 -.forschungsinst2i -.forschungsinsti1tu -.fr8e8e9b8s8d. -.fre2e1b -.free2b5s2 -.freeb4s5d -.fu8n8k9t8s8i8o8n8a8l. -.3fu -.fu4nk2 -.funk5t -.funk4t1s2 -.funkt1s2io -.funkt5sio2n -.funktsio1n5a -.ga8u8s8s9i8a8n. -.ga2us -.gau2ss -.gaus1si -.gauss2i1a -.gaussi2a2n -.gh8o8s8t9s8c8r8i8p8t. -.ghos4t1s2 -.ghost4sc -.ghostscri2 -.ghostscr2ip -.ghostscri2p1t -.gh8o8s8t9v8i8e8w. -.ghos4tv -.ghostv2ie4 -.gr8a8s8s9m8a8n8n9i8a8n. -.gr2as -.gra2ss -.gras2s1m -.grass3ma -.grassma2n3 -.grassma4n1n2 -.grassman3n4i1a -.grassma2nni3a2n -.gr8e8i8f8s9w8a8l8d. -.grei2 -.grei2f3s -.greifsw2 -.greifswa2ld -.gr8o8t8h8e8n9d8i8e8c8k. -.g4ro -.gro4th2e -.gr4oth -.grothe2n -.grothend2ie4 -.grothendieck1 -.gr8u8n8d9l8e8h9r8e8n. -.gru2n -.grundle1h4 -.grundle4hr4 -.ha9d8a9m8a8r8d. -.ha2d -.ha1d2a -.hada2m2 -.had4a1ma -.hadam2a2r -.ha8i9f8a. -.hai1fa -.ha8m8i8l9t8o8n9i8a8n. -.ha4m -.hami4lt -.hamil1to -.hamilto2n -.hamilto3n4i1a -.hamiltoni3a2n -.he8l9s8i8n8k8i. -.he2l1s2 -.hel2s1in -.hels4i4nk2 -.helsink1i -.he8r9m8i8t9i8a8n. -.her3mit -.hermi1ti -.herm4i1t2i1a -.hermiti2a2n -.hi8b8b8s. -.hi2b1b -.hib2b5s2 -.ho8k9k8a8i9d8o. -.h2ok -.hokk4 -.hokkai2 -.hokka2id -.hokkai1do -.ja8c9k8o8w9s8k8i. -.5ja -.jack1 -.jackowsk2 -.jackowsk1i -.ja8n9u9a8r8y. -.ja2n -.jan3u1a -.janu2a2r -.ja9p8a9n8e8s8e. -.ja4p -.ja1pa -.japa2n -.japa1nes -.japane1s2e -.ka8d9o8m9t8s8e8v. -.ka2d -.ka1do -.kado4mt -.kadom4t1s2 -.kadomt5sev -.ka8n9s8a8s. -.ka2n -.kan2sa2 -.ka2n1s2 -.ka8r8l8s9r8u8h8e. -.k2a2r -.kar1l -.kar2l1s2 -.karls1r -.ko8r9t8e9w8e8g. -.ko5r -.kr8i8s8h8n8a. -.kr2is -.kr3is2h -.kris2h1n -.krish1na -.kr8i8s8h9n8a9i8s8m. -.krishnai2 -.krishnai2s1m -.kr8i8s8h9n8a8n. -.krishn2a2n -.la8n9c8a8s9t8e8r. -.lan1ca -.lancast5er -.le9g8e8n8d8r8e. -.le1gen -.legen1dr -.legendre4 -.le8i8c8e8s9t8e8r. -.lei2 -.le5ic -.leices5t -.li8p9s8c8h8i8t8z. -.l2ip -.li2p1s2 -.lips2ch2 -.lips3chit -.lipschi4tz -.li8p9s8c8h8i8t8z9i8a8n. -.lipschit2z1i -.lipschitz2i1a -.lipschitzi2a2n -.lo8j9b8a8n. -.lo5j -.lojba2n -.lo8u9i9s8i9a8n8a. -.lou2 -.lo2ui2 -.louis2i1a -.louisi2a2n -.louisia1na -.ma8c9o8s. -.ma1co -.ma8n9c8h8e8s9t8e8r. -.man2ch -.manche2 -.manch1es -.ma8r9k8o8v9i8a8n. -.marko5vi2a2n -.markov2i1a -.ma8r8k8t9o8b8e8r9d8o8r8f. -.mark5t -.mark1to -.markto3b -.marktober1do -.marktoberd4or -.marktoberdor1f -.ma8s8s9a9c8h8u9s8e8t8t8s. -.ma2ss -.mas1sa2 -.massa2ch -.massach2us -.massachuse4t3t2 -.massachuset4t1s2 -.ma8x9w8e8l8l. -.maxwel4l -.mi9c8r8o9s8o8f8t. -.micro2so -.microso2ft3 -.mi8n9n8e9a8p9o9l8i8s. -.m2i4n1n2 -.minne4 -.minneapol2i -.mi8n9n8e9s8o8t8a. -.min1nes -.minne1so -.minneso1ta -.mo8s9c8o8w. -.mos2c -.mos1co -.na8c8h9r8i8c8h8t8e8n. -.1na -.na2ch -.nac4hr4 -.na2chr4i2ch -.nachricht1en -.na8s8h9v8i8l8l8e. -.n4as -.nas2h -.nash2vil -.nashvil1l -.nashvil2le -.ne8t9b8s8d. -.ne2t1b -.net2b5s2 -.netb4s5d -.ne8t9s8c8a8p8e. -.ne4t1s2 -.net4sc -.netsca4p -.nets1ca -.ni8j9m8e9g8e8n. -.ni3j -.nijme2g -.nijme1gen -.no8e9t8h8e8r9i8a8n. -.3noe -.noeth2e -.noether1i -.noethe1r2i3a4 -.noetheri2a2n -.no8o8r8d9w8i8j8k8e8r9h8o8u8t. -.noo2 -.no3ord -.noord1w -.noordwi2 -.noordwi3j -.noordwijk1er -.noordwijker1h4 -.noordwijkerhou2 -.no9v8e8m9b8e8r. -.nove4m5b -.op8e8n9b8s8d. -.ope4n1b4 -.open2b5s2 -.openb4s5d -.op8e8n9o8f8f8i8c8e. -.op4eno -.openo4f1f -.openof1fi -.pa8l8a9t8i8n8o. -.pala2t1in -.palat2i1no -.pa9l8e8r9m8o. -.paler3m4 -.paler1mo -.pe9t8r8o8v9s8k8i. -.petro3v -.petrovsk2 -.petrovsk1i -.pf8a8f8f9i8a8n. -.4pf -.p1fa -.pfa2f -.pfa4f1f4 -.pfaf1fi -.pfaff2i3a -.pfaffi2a2n -.ph8i8l9a9d8e8l9p8h8i8a. -.phi4l4ade -.phila2d -.philade2lp -.philadel5phi -.philadelph2i1a -.ph8i8l9o9s8o8p8h9i9s8c8h8e. -.philo2so -.philos4op -.philos2oph -.philosoph2is1c -.philosophis3ch2 -.philosophische2 -.po8i8n9c8a8r8e. -.poin2 -.poi2 -.poinc2a2r5 -.poin1ca -.po9t8e8n9t8i8a8l9g8l8e8i9c8h8u8n8g. -.p4ot -.po1ten1t -.potent2i -.poten1t2i1a -.potenti2al -.potentia4l1g4 -.potentialgl2 -.potential1gle -.potentialglei2 -.potentialgle5ic -.potentialgle4i2ch -.ra9d8h8a9k8r8i8s8h9n8a8n. -.rad1h2 -.radhakr2is -.radhakr3is2h -.radhakris2h1n -.radhakrish1na -.radhakrishn2a2n -.ra8t8h8s9k8e8l9l8e8r. -.r4ath -.ra2t4h1s2 -.rathsk2 -.rath4ske -.rathskel1l -.rathskel2le -.ri8e9m8a8n8n9i8a8n. -.r2ie4 -.rie5ma2n -.rie1ma -.riema4n1n2 -.rieman3n4i1a -.riema2nni3a2n -.ry8d9b8e8r8g. -.ry1d -.ryd1b -.rydberg2 -.sc8h8o8t9t8i8s8c8h8e. -.scho4t3t2 -.schott2is1c -.s2ch2ottis3ch2 -.schottische2 -.sc8h8r8o9d8i8n8g9e8r. -.sc4hr4 -.schrod1in -.schrod4inge -.sc8h8w8a9b8a9c8h8e8r. -.sch1w -.schwaba2ch -.schwabache2 -.sc8h8w8a8r8z9s8c8h8i8l8d. -.schw2a2r -.s2chwarzs2ch2 -.schwarzsch4il2 -.schwarzschi2ld -.se8p9t8e8m9b8e8r. -.se2p1t -.sep2te -.septe4m5b -.st8o8k8e8s9s8c8h8e. -.st2ok -.stokes4 -.stok2e2ss -.stokes2s5c -.stokess2ch2 -.stokessche2 -.st8u8t8t9g8a8r8t. -.stu4t3t2 -.stut4t1g -.stutt1ga -.stuttg2a2r -.su8s9q8u8e9h8a8n9n8a. -.s2us -.susqu2 -.susque1h4 -.susqueha2n -.susqueha4n1n2 -.susquehan1na -.ta8u9b8e8r9i8a8n. -.tau4b -.taub4e -.tau3ber -.tauber1i -.taube1r2i3a4 -.tauberi2a2n -.te8c8h9n8i9s8c8h8e. -.te2ch -.tec2h1n -.techn2is1c -.te2chnis3ch2 -.technische2 -.te8n9n8e8s9s8e8e. -.t4e4n1n2 -.tenne4 -.ten1nes -.tenn2e2ss -.to9m8a9s8z8e8w9s8k8i. -.to2ma -.tomas2ze -.tomaszewsk2 -.tomaszewsk1i -.ty9p8o9g8r8a8p8h8i8q8u8e. -.ty3po -.ty5po4g -.typo1gr -.typogr4aphi -.typographiqu2 -.uk8r8a8i8n9i8a8n. -.4uk -.ukr2ai2 -.ukra4i4n -.ukra2ini -.ukrai4n4i1a -.ukraini3a2n -.ve8r9a8l8l9g8e9m8e8i8n9e8r8t8e. -.veral1l -.veral4l1g4 -.verallge1me -.verallgemei2 -.verallgeme2ine -.verallgemein1er -.ve8r9e8i8n9i9g8u8n8g. -.vere3in -.verei2 -.vere2ini -.verein2ig -.vereini3gun -.ve8r9t8e8i9l8u8n9g8e8n. -.vertei2 -.verteilun1gen -.vi8i8i8t8h. -.v4i5i4 -.vi4i5i4 -.vii2ith -.vi8i8t8h. -.vi2ith -.wa8h8r9s8c8h8e8i8n9l8i8c8h9k8e8i8t8s9t8h8e8o9r8i8e. -.wa4hr4 -.wah4rs2 -.wahrs4c -.wahrs2ch2 -.wahrsche2 -.wahrschei2 -.wahrsche4i4n1l -.wahrs2cheinl4i2ch -.wahrscheinlic4hk -.wahrscheinlichkei2 -.wahrscheinlichkei4t1s2 -.wahrscheinlichkeits3th2e -.wahrscheinlichkeitsthe1o5r -.wahrscheinlichkeitstheor2ie4 -.we8r9n8e8r. -.w1er -.wer4n1er -.we8r9t8h8e8r9i8a8n. -.werth2e -.werther1i -.werthe1r2i3a4 -.wertheri2a2n -.wi8n9c8h8e8s9t8e8r. -.win2ch -.winche2 -.winch1es -.wi8r8t9s8c8h8a8f8t. -.w4ir4 -.wir4t1s2 -.wirt4sc -.wirts2ch2 -.wirtscha2f -.wirtscha2ft -.wi8s9s8e8n9s8c8h8a8f8t9l8i8c8h. -.w4i2s1s -.wissen4 -.wisse2n1s2 -.wissens4c -.wissens2ch2 -.wissenscha2f -.wissenscha2ft -.wissenschaf2tl -.wissens2chaftl4i2ch -.xv8i8i8i8t8h. -.xv4i5i4 -.xvi4i5i4 -.xvii2ith -.xv8i8i8t8h. -.xvi2ith -.xx8i8i8i8r8d. -.xx4 -.xx3i -.xx4i5i4 -.xxi4i5i4 -.xxii4ir -.xx8i8i8n8d. -.xxi4ind -.yi8n8g9y8o8n8g. -.y1i -.yin2gy -.yingy1o4 -.yingyo2n -.sh8u9x8u8e. -.shux1u3 -.ji9s8u8a8n. -.ji2su -.jisua2n -.ze8a9l8a8n8d. -.2ze -.zea4l -.zea3l4and -.zeala2n -.ze8i8t9s8c8h8r8i8f8t. -.zei2 -.zei4t1s2 -.zeit4sc -.zeits2ch2 -.zeitsc4hr4 -.zeitschr4i2ft diff --git a/core/res/assets/webkit/incognito_mode_start_page.html b/core/res/assets/webkit/incognito_mode_start_page.html deleted file mode 100644 index 5d7a3fbf98c0..000000000000 --- a/core/res/assets/webkit/incognito_mode_start_page.html +++ /dev/null @@ -1,24 +0,0 @@ -<html> - <head> - <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no"/> - <title>New incognito window</title> - </head> - <body> - <p><strong>You've gone incognito</strong>. Pages you view in this window - won't appear in your browser history or search history, and they won't - leave other traces, like cookies, on your device after you close the - incognito window. Any files you download or bookmarks you create will be - preserved, however.</p> - - <p><strong>Going incognito doesn't affect the behavior of other people, - servers, or software. Be wary of:</strong></p> - - <ul> - <li>Websites that collect or share information about you</li> - <li>Internet service providers or employers that track the pages you visit</li> - <li>Malicious software that tracks your keystrokes in exchange for free smileys</li> - <li>Surveillance by secret agents</li> - <li>People standing behind you</li> - </ul> - </body> -</html> diff --git a/core/res/assets/webkit/missingImage.png b/core/res/assets/webkit/missingImage.png Binary files differdeleted file mode 100644 index f49a98d59d2d..000000000000 --- a/core/res/assets/webkit/missingImage.png +++ /dev/null diff --git a/core/res/assets/webkit/nullPlugin.png b/core/res/assets/webkit/nullPlugin.png Binary files differdeleted file mode 100644 index 96a52e3c2cc6..000000000000 --- a/core/res/assets/webkit/nullPlugin.png +++ /dev/null diff --git a/core/res/assets/webkit/play.png b/core/res/assets/webkit/play.png Binary files differdeleted file mode 100644 index 26fe2864d7c3..000000000000 --- a/core/res/assets/webkit/play.png +++ /dev/null diff --git a/core/res/assets/webkit/textAreaResizeCorner.png b/core/res/assets/webkit/textAreaResizeCorner.png Binary files differdeleted file mode 100644 index 777eff01a0a0..000000000000 --- a/core/res/assets/webkit/textAreaResizeCorner.png +++ /dev/null diff --git a/core/res/assets/webkit/togglePlugin.png b/core/res/assets/webkit/togglePlugin.png Binary files differdeleted file mode 100644 index 008333c66e60..000000000000 --- a/core/res/assets/webkit/togglePlugin.png +++ /dev/null diff --git a/core/res/assets/webkit/youtube.html b/core/res/assets/webkit/youtube.html deleted file mode 100644 index 8e103c1655e1..000000000000 --- a/core/res/assets/webkit/youtube.html +++ /dev/null @@ -1,71 +0,0 @@ -<html> - <head> - <style type="text/css"> - body { background-color: black; } - a:hover { text-decoration: none; } - a:link { color: black; } - a:visited { color: black; } - #main { - position: absolute; - left: 0%; - top: 0%; - width: 100%; - height: 100%; - padding: 0%; - z-index: 10; - background-size: 100%; - background: no-repeat; - background-position: center; - } - #play { - position: absolute; - left: 50%; - top: 50%; - } - #logo { - position: absolute; - bottom: 0; - right: 0; - } - </style> - </head> - <body id="body"> - <script type="text/javascript"> - function setup() { - var width = document.body.clientWidth; - var height = document.body.clientHeight; - var mainElement = document.getElementById("main"); - var playElement = document.getElementById("play"); - var loadcount = 0; - var POSTER = "http://img.youtube.com/vi/VIDEO_ID/0.jpg"; - - function doload() { - if (++loadcount == 2) { - // Resize the element to the right size - mainElement.width = width; - mainElement.height = height; - mainElement.style.backgroundImage = "url('" + POSTER + "')"; - // Center the play button - playElement.style.marginTop = "-" + play.height/2 + "px"; - playElement.style.marginLeft = "-" + play.width/2 + "px"; - playElement.addEventListener("click", function(e) { - top.location.href = "vnd.youtube:VIDEO_ID"; - }, false); - } - } - var background = new Image(); - background.onload = doload; - background.src = POSTER; - play = new Image(); - play.onload = doload; - play.src = "play.png"; - } - - window.onload = setup; - </script> - <div id="main"> - <img src="play.png" id="play"></img> - <img src="youtube.png" id="logo"></img> - </div> - </body> -</html> diff --git a/core/res/assets/webkit/youtube.png b/core/res/assets/webkit/youtube.png Binary files differdeleted file mode 100644 index 87779b113dd0..000000000000 --- a/core/res/assets/webkit/youtube.png +++ /dev/null diff --git a/core/res/res/anim-watch/progress_indeterminate_material.xml b/core/res/res/anim-watch/progress_indeterminate_material.xml new file mode 100644 index 000000000000..8f00d6c4cb66 --- /dev/null +++ b/core/res/res/anim-watch/progress_indeterminate_material.xml @@ -0,0 +1,42 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + Copyright (C) 2016 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<set xmlns:android="http://schemas.android.com/apk/res/android" > + <objectAnimator + android:duration="3333" + android:interpolator="@interpolator/trim_start_interpolator" + android:propertyName="trimPathStart" + android:repeatCount="-1" + android:valueFrom="0" + android:valueTo="0.75" + android:valueType="floatType" /> + <objectAnimator + android:duration="3333" + android:interpolator="@interpolator/trim_end_interpolator" + android:propertyName="trimPathEnd" + android:repeatCount="-1" + android:valueFrom="0" + android:valueTo="0.75" + android:valueType="floatType" /> + <objectAnimator + android:duration="3333" + android:interpolator="@interpolator/trim_offset_interpolator" + android:propertyName="trimPathOffset" + android:repeatCount="-1" + android:valueFrom="0" + android:valueTo="0.25" + android:valueType="floatType" /> +</set> diff --git a/core/res/res/anim-watch/progress_indeterminate_rotation_material.xml b/core/res/res/anim-watch/progress_indeterminate_rotation_material.xml new file mode 100644 index 000000000000..63e66ec24410 --- /dev/null +++ b/core/res/res/anim-watch/progress_indeterminate_rotation_material.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + Copyright (C) 2016 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android" + android:interpolator="@interpolator/progress_indeterminate_rotation_interpolator" + android:duration="16666" + android:propertyName="rotation" + android:repeatCount="-1" + android:valueFrom="0" + android:valueTo="720" + android:valueType="floatType" /> diff --git a/core/res/res/anim/watch_switch_thumb_to_off_animation.xml b/core/res/res/anim/watch_switch_thumb_to_off_animation.xml deleted file mode 100644 index cd02e0db2fd5..000000000000 --- a/core/res/res/anim/watch_switch_thumb_to_off_animation.xml +++ /dev/null @@ -1,36 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?><!-- Copyright (C) 2016 The Android Open Source Project - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---> - -<set xmlns:android="http://schemas.android.com/apk/res/android" - android:ordering="sequentially"> - <objectAnimator - android:duration="33" - android:interpolator="@android:interpolator/linear" - android:propertyName="pathData" - android:valueFrom="M 0.0,-7.0 l 0.0,0.0 c 3.8659932486,0.0 7.0,3.1340067514 7.0,7.0 l 0.0,0.0 c 0.0,3.8659932486 -3.1340067514,7.0 -7.0,7.0 l 0.0,0.0 c -3.8659932486,0.0 -7.0,-3.1340067514 -7.0,-7.0 l 0.0,0.0 c 0.0,-3.8659932486 3.1340067514,-7.0 7.0,-7.0 Z" - android:valueTo="M -3.0,-7.0 l 6.0,0.0 c 3.8659932486,0.0 7.0,3.1340067514 7.0,7.0 l 0.0,0.0 c 0.0,3.8659932486 -3.1340067514,7.0 -7.0,7.0 l -6.0,0.0 c -3.8659932486,0.0 -7.0,-3.1340067514 -7.0,-7.0 l 0.0,0.0 c 0.0,-3.8659932486 3.1340067514,-7.0 7.0,-7.0 Z" - android:valueType="pathType" /> - <objectAnimator - android:duration="66" - android:interpolator="@android:interpolator/linear" - android:propertyName="pathData" - android:valueFrom="M -3.0,-7.0 l 6.0,0.0 c 3.8659932486,0.0 7.0,3.1340067514 7.0,7.0 l 0.0,0.0 c 0.0,3.8659932486 -3.1340067514,7.0 -7.0,7.0 l -6.0,0.0 c -3.8659932486,0.0 -7.0,-3.1340067514 -7.0,-7.0 l 0.0,0.0 c 0.0,-3.8659932486 3.1340067514,-7.0 7.0,-7.0 Z" - android:valueTo="M -3.0,-7.0 l 6.0,0.0 c 3.8659932486,0.0 7.0,3.1340067514 7.0,7.0 l 0.0,0.0 c 0.0,3.8659932486 -3.1340067514,7.0 -7.0,7.0 l -6.0,0.0 c -3.8659932486,0.0 -7.0,-3.1340067514 -7.0,-7.0 l 0.0,0.0 c 0.0,-3.8659932486 3.1340067514,-7.0 7.0,-7.0 Z" - android:valueType="pathType" /> - <objectAnimator - android:duration="66" - android:interpolator="@android:interpolator/linear" - android:propertyName="pathData" - android:valueFrom="M -3.0,-7.0 l 6.0,0.0 c 3.8659932486,0.0 7.0,3.1340067514 7.0,7.0 l 0.0,0.0 c 0.0,3.8659932486 -3.1340067514,7.0 -7.0,7.0 l -6.0,0.0 c -3.8659932486,0.0 -7.0,-3.1340067514 -7.0,-7.0 l 0.0,0.0 c 0.0,-3.8659932486 3.1340067514,-7.0 7.0,-7.0 Z" - android:valueTo="M 0.0,-7.0 l 0.0,0.0 c 3.8659932486,0.0 7.0,3.1340067514 7.0,7.0 l 0.0,0.0 c 0.0,3.8659932486 -3.1340067514,7.0 -7.0,7.0 l 0.0,0.0 c -3.8659932486,0.0 -7.0,-3.1340067514 -7.0,-7.0 l 0.0,0.0 c 0.0,-3.8659932486 3.1340067514,-7.0 7.0,-7.0 Z" - android:valueType="pathType" /> -</set> diff --git a/core/res/res/anim/watch_switch_thumb_to_on_animation.xml b/core/res/res/anim/watch_switch_thumb_to_on_animation.xml deleted file mode 100644 index e64421776605..000000000000 --- a/core/res/res/anim/watch_switch_thumb_to_on_animation.xml +++ /dev/null @@ -1,37 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- Copyright (C) 2016 The Android Open Source Project - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---> - -<set xmlns:android="http://schemas.android.com/apk/res/android" - android:ordering="sequentially"> - <objectAnimator - android:duration="33" - android:interpolator="@android:interpolator/linear" - android:propertyName="pathData" - android:valueFrom="M 0.0,-7.0 l 0.0,0.0 c 3.8659932486,0.0 7.0,3.1340067514 7.0,7.0 l 0.0,0.0 c 0.0,3.8659932486 -3.1340067514,7.0 -7.0,7.0 l 0.0,0.0 c -3.8659932486,0.0 -7.0,-3.1340067514 -7.0,-7.0 l 0.0,0.0 c 0.0,-3.8659932486 3.1340067514,-7.0 7.0,-7.0 Z" - android:valueTo="M -3.0,-7.0 l 6.0,0.0 c 3.8659932486,0.0 7.0,3.1340067514 7.0,7.0 l 0.0,0.0 c 0.0,3.8659932486 -3.1340067514,7.0 -7.0,7.0 l -6.0,0.0 c -3.8659932486,0.0 -7.0,-3.1340067514 -7.0,-7.0 l 0.0,0.0 c 0.0,-3.8659932486 3.1340067514,-7.0 7.0,-7.0 Z" - android:valueType="pathType" /> - <objectAnimator - android:duration="66" - android:interpolator="@android:interpolator/linear" - android:propertyName="pathData" - android:valueFrom="M -3.0,-7.0 l 6.0,0.0 c 3.8659932486,0.0 7.0,3.1340067514 7.0,7.0 l 0.0,0.0 c 0.0,3.8659932486 -3.1340067514,7.0 -7.0,7.0 l -6.0,0.0 c -3.8659932486,0.0 -7.0,-3.1340067514 -7.0,-7.0 l 0.0,0.0 c 0.0,-3.8659932486 3.1340067514,-7.0 7.0,-7.0 Z" - android:valueTo="M -3.0,-7.0 l 6.0,0.0 c 3.8659932486,0.0 7.0,3.1340067514 7.0,7.0 l 0.0,0.0 c 0.0,3.8659932486 -3.1340067514,7.0 -7.0,7.0 l -6.0,0.0 c -3.8659932486,0.0 -7.0,-3.1340067514 -7.0,-7.0 l 0.0,0.0 c 0.0,-3.8659932486 3.1340067514,-7.0 7.0,-7.0 Z" - android:valueType="pathType" /> - <objectAnimator - android:duration="66" - android:interpolator="@android:interpolator/linear" - android:propertyName="pathData" - android:valueFrom="M -3.0,-7.0 l 6.0,0.0 c 3.8659932486,0.0 7.0,3.1340067514 7.0,7.0 l 0.0,0.0 c 0.0,3.8659932486 -3.1340067514,7.0 -7.0,7.0 l -6.0,0.0 c -3.8659932486,0.0 -7.0,-3.1340067514 -7.0,-7.0 l 0.0,0.0 c 0.0,-3.8659932486 3.1340067514,-7.0 7.0,-7.0 Z" - android:valueTo="M 0.0,-7.0 l 0.0,0.0 c 3.8659932486,0.0 7.0,3.1340067514 7.0,7.0 l 0.0,0.0 c 0.0,3.8659932486 -3.1340067514,7.0 -7.0,7.0 l 0.0,0.0 c -3.8659932486,0.0 -7.0,-3.1340067514 -7.0,-7.0 l 0.0,0.0 c 0.0,-3.8659932486 3.1340067514,-7.0 7.0,-7.0 Z" - android:valueType="pathType" /> -</set> diff --git a/core/res/res/color/watch_switch_thumb_color_material.xml b/core/res/res/color/watch_switch_thumb_color_material.xml index d4796a032631..f78d9b62a509 100644 --- a/core/res/res/color/watch_switch_thumb_color_material.xml +++ b/core/res/res/color/watch_switch_thumb_color_material.xml @@ -10,9 +10,9 @@ See the License for the specific language governing permissions and limitations under the License. --> - <selector xmlns:android="http://schemas.android.com/apk/res/android"> - <item android:color="?android:colorButtonNormal" android:state_enabled="false" /> - <item android:color="?android:colorControlActivated" android:state_checked="true" /> - <item android:color="?android:colorButtonNormal" /> -</selector>
\ No newline at end of file + <item android:color="?attr/colorButtonNormal" android:alpha="?attr/disabledAlpha" + android:state_enabled="false" /> + <item android:color="?attr/colorControlActivated" android:state_checked="true" /> + <item android:color="?attr/colorButtonNormal" /> +</selector> diff --git a/core/res/res/drawable-hdpi/watch_switch_thumb_mtrl_14w.png b/core/res/res/drawable-hdpi/watch_switch_thumb_mtrl_14w.png Binary files differnew file mode 100644 index 000000000000..371469c43b13 --- /dev/null +++ b/core/res/res/drawable-hdpi/watch_switch_thumb_mtrl_14w.png diff --git a/core/res/res/drawable-hdpi/watch_switch_thumb_mtrl_15w.png b/core/res/res/drawable-hdpi/watch_switch_thumb_mtrl_15w.png Binary files differnew file mode 100644 index 000000000000..e47726058e3e --- /dev/null +++ b/core/res/res/drawable-hdpi/watch_switch_thumb_mtrl_15w.png diff --git a/core/res/res/drawable-hdpi/watch_switch_thumb_mtrl_16w.png b/core/res/res/drawable-hdpi/watch_switch_thumb_mtrl_16w.png Binary files differnew file mode 100644 index 000000000000..19a1bd317799 --- /dev/null +++ b/core/res/res/drawable-hdpi/watch_switch_thumb_mtrl_16w.png diff --git a/core/res/res/drawable-hdpi/watch_switch_thumb_mtrl_17w.png b/core/res/res/drawable-hdpi/watch_switch_thumb_mtrl_17w.png Binary files differnew file mode 100644 index 000000000000..79dc7332b60d --- /dev/null +++ b/core/res/res/drawable-hdpi/watch_switch_thumb_mtrl_17w.png diff --git a/core/res/res/drawable-hdpi/watch_switch_thumb_mtrl_18w.png b/core/res/res/drawable-hdpi/watch_switch_thumb_mtrl_18w.png Binary files differnew file mode 100644 index 000000000000..6d921c0709b8 --- /dev/null +++ b/core/res/res/drawable-hdpi/watch_switch_thumb_mtrl_18w.png diff --git a/core/res/res/drawable-hdpi/watch_switch_track_mtrl_alpha.png b/core/res/res/drawable-hdpi/watch_switch_track_mtrl_alpha.png Binary files differnew file mode 100644 index 000000000000..ecee3e137ef6 --- /dev/null +++ b/core/res/res/drawable-hdpi/watch_switch_track_mtrl_alpha.png diff --git a/core/res/res/drawable-nodpi/default_wallpaper.png b/core/res/res/drawable-nodpi/default_wallpaper.png Binary files differindex ce546f0a11e7..d60ef83a86e3 100644 --- a/core/res/res/drawable-nodpi/default_wallpaper.png +++ b/core/res/res/drawable-nodpi/default_wallpaper.png diff --git a/core/res/res/drawable-sw600dp-hdpi/unlock_wave.png b/core/res/res/drawable-sw600dp-hdpi/unlock_wave.png Binary files differindex d259499312c5..64e3cf89c121 100644 --- a/core/res/res/drawable-sw600dp-hdpi/unlock_wave.png +++ b/core/res/res/drawable-sw600dp-hdpi/unlock_wave.png diff --git a/core/res/res/drawable-sw600dp-mdpi/unlock_wave.png b/core/res/res/drawable-sw600dp-mdpi/unlock_wave.png Binary files differindex 9e3849908eb5..719366eb147d 100644 --- a/core/res/res/drawable-sw600dp-mdpi/unlock_wave.png +++ b/core/res/res/drawable-sw600dp-mdpi/unlock_wave.png diff --git a/core/res/res/drawable-sw600dp-nodpi/default_wallpaper.png b/core/res/res/drawable-sw600dp-nodpi/default_wallpaper.png Binary files differindex af8e2512385a..7b7e940d1063 100644 --- a/core/res/res/drawable-sw600dp-nodpi/default_wallpaper.png +++ b/core/res/res/drawable-sw600dp-nodpi/default_wallpaper.png diff --git a/core/res/res/drawable-sw600dp-xhdpi/unlock_wave.png b/core/res/res/drawable-sw600dp-xhdpi/unlock_wave.png Binary files differindex 035bd9255c03..93916cdbb058 100644 --- a/core/res/res/drawable-sw600dp-xhdpi/unlock_wave.png +++ b/core/res/res/drawable-sw600dp-xhdpi/unlock_wave.png diff --git a/core/res/res/drawable-sw720dp-nodpi/default_wallpaper.png b/core/res/res/drawable-sw720dp-nodpi/default_wallpaper.png Binary files differindex cb00d82a826f..68e63312cfa8 100644 --- a/core/res/res/drawable-sw720dp-nodpi/default_wallpaper.png +++ b/core/res/res/drawable-sw720dp-nodpi/default_wallpaper.png diff --git a/core/res/res/drawable-watch/ic_input_extract_action_done.xml b/core/res/res/drawable-watch/ic_input_extract_action_done.xml new file mode 100644 index 000000000000..a04b944f391f --- /dev/null +++ b/core/res/res/drawable-watch/ic_input_extract_action_done.xml @@ -0,0 +1,19 @@ +<!-- + Copyright (C) 2016 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<vector android:height="22dp" android:viewportHeight="22.0" + android:viewportWidth="22.0" android:width="22dp" xmlns:android="http://schemas.android.com/apk/res/android"> + <path android:fillColor="#FFFFFF" android:pathData="M9.25,14.82L5.43,11l-1.3,1.3 5.12,5.12 11,-11 -1.3,-1.3 -9.7,9.7z"/> +</vector> diff --git a/core/res/res/drawable-watch/ic_input_extract_action_send.xml b/core/res/res/drawable-watch/ic_input_extract_action_send.xml new file mode 100644 index 000000000000..3689172f72ab --- /dev/null +++ b/core/res/res/drawable-watch/ic_input_extract_action_send.xml @@ -0,0 +1,24 @@ +<!-- + Copyright (C) 2016 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="22dp" + android:height="22dp" + android:viewportWidth="22.0" + android:viewportHeight="22.0"> + <path + android:pathData="M2.77,19.32L22,11.07 2.78,2.82v6.42l13.74,1.83L2.77,12.9v6.42z" + android:fillColor="#FFFFFF"/> +</vector> diff --git a/core/res/res/drawable-xhdpi/watch_switch_thumb_mtrl_14w.png b/core/res/res/drawable-xhdpi/watch_switch_thumb_mtrl_14w.png Binary files differnew file mode 100644 index 000000000000..7f7ca1416b76 --- /dev/null +++ b/core/res/res/drawable-xhdpi/watch_switch_thumb_mtrl_14w.png diff --git a/core/res/res/drawable-xhdpi/watch_switch_thumb_mtrl_15w.png b/core/res/res/drawable-xhdpi/watch_switch_thumb_mtrl_15w.png Binary files differnew file mode 100644 index 000000000000..52120b8bef02 --- /dev/null +++ b/core/res/res/drawable-xhdpi/watch_switch_thumb_mtrl_15w.png diff --git a/core/res/res/drawable-xhdpi/watch_switch_thumb_mtrl_16w.png b/core/res/res/drawable-xhdpi/watch_switch_thumb_mtrl_16w.png Binary files differnew file mode 100644 index 000000000000..d6e9be9e5daf --- /dev/null +++ b/core/res/res/drawable-xhdpi/watch_switch_thumb_mtrl_16w.png diff --git a/core/res/res/drawable-xhdpi/watch_switch_thumb_mtrl_17w.png b/core/res/res/drawable-xhdpi/watch_switch_thumb_mtrl_17w.png Binary files differnew file mode 100644 index 000000000000..8d76393a1b63 --- /dev/null +++ b/core/res/res/drawable-xhdpi/watch_switch_thumb_mtrl_17w.png diff --git a/core/res/res/drawable-xhdpi/watch_switch_thumb_mtrl_18w.png b/core/res/res/drawable-xhdpi/watch_switch_thumb_mtrl_18w.png Binary files differnew file mode 100644 index 000000000000..ca9c66e994ff --- /dev/null +++ b/core/res/res/drawable-xhdpi/watch_switch_thumb_mtrl_18w.png diff --git a/core/res/res/drawable-xhdpi/watch_switch_track_mtrl_alpha.png b/core/res/res/drawable-xhdpi/watch_switch_track_mtrl_alpha.png Binary files differnew file mode 100644 index 000000000000..1aa544227380 --- /dev/null +++ b/core/res/res/drawable-xhdpi/watch_switch_track_mtrl_alpha.png diff --git a/core/res/res/drawable-xxhdpi/watch_switch_thumb_mtrl_14w.png b/core/res/res/drawable-xxhdpi/watch_switch_thumb_mtrl_14w.png Binary files differnew file mode 100644 index 000000000000..c0d72d70d6dd --- /dev/null +++ b/core/res/res/drawable-xxhdpi/watch_switch_thumb_mtrl_14w.png diff --git a/core/res/res/drawable-xxhdpi/watch_switch_thumb_mtrl_15w.png b/core/res/res/drawable-xxhdpi/watch_switch_thumb_mtrl_15w.png Binary files differnew file mode 100644 index 000000000000..d7c0ec0fd25e --- /dev/null +++ b/core/res/res/drawable-xxhdpi/watch_switch_thumb_mtrl_15w.png diff --git a/core/res/res/drawable-xxhdpi/watch_switch_thumb_mtrl_16w.png b/core/res/res/drawable-xxhdpi/watch_switch_thumb_mtrl_16w.png Binary files differnew file mode 100644 index 000000000000..5815ba9d3767 --- /dev/null +++ b/core/res/res/drawable-xxhdpi/watch_switch_thumb_mtrl_16w.png diff --git a/core/res/res/drawable-xxhdpi/watch_switch_thumb_mtrl_17w.png b/core/res/res/drawable-xxhdpi/watch_switch_thumb_mtrl_17w.png Binary files differnew file mode 100644 index 000000000000..41da8c0eaaa6 --- /dev/null +++ b/core/res/res/drawable-xxhdpi/watch_switch_thumb_mtrl_17w.png diff --git a/core/res/res/drawable-xxhdpi/watch_switch_thumb_mtrl_18w.png b/core/res/res/drawable-xxhdpi/watch_switch_thumb_mtrl_18w.png Binary files differnew file mode 100644 index 000000000000..975eb01cea4a --- /dev/null +++ b/core/res/res/drawable-xxhdpi/watch_switch_thumb_mtrl_18w.png diff --git a/core/res/res/drawable-xxhdpi/watch_switch_track_mtrl_alpha.png b/core/res/res/drawable-xxhdpi/watch_switch_track_mtrl_alpha.png Binary files differnew file mode 100644 index 000000000000..af2042be7f59 --- /dev/null +++ b/core/res/res/drawable-xxhdpi/watch_switch_track_mtrl_alpha.png diff --git a/core/res/res/drawable/watch_switch_thumb_material.xml b/core/res/res/drawable/watch_switch_thumb_material.xml deleted file mode 100644 index 3463a4f54684..000000000000 --- a/core/res/res/drawable/watch_switch_thumb_material.xml +++ /dev/null @@ -1,27 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- Copyright (C) 2016 The Android Open Source Project - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---> - -<vector xmlns:android="http://schemas.android.com/apk/res/android" - android:width="20dp" - android:height="40dp" - android:viewportHeight="40" - android:viewportWidth="20"> - <group - android:translateX="10" - android:translateY="20"> - <path - android:name="thumb_path" - android:fillColor="@color/white" - android:pathData="M 0.0,-7.0 l 0.0,0.0 c 3.8659932486,0.0 7.0,3.1340067514 7.0,7.0 l 0.0,0.0 c 0.0,3.8659932486 -3.1340067514,7.0 -7.0,7.0 l 0.0,0.0 c -3.8659932486,0.0 -7.0,-3.1340067514 -7.0,-7.0 l 0.0,0.0 c 0.0,-3.8659932486 3.1340067514,-7.0 7.0,-7.0 Z" /> - </group> -</vector> diff --git a/core/res/res/drawable/watch_switch_thumb_material_anim.xml b/core/res/res/drawable/watch_switch_thumb_material_anim.xml index 686fb976cf1c..9e3e89338dab 100644 --- a/core/res/res/drawable/watch_switch_thumb_material_anim.xml +++ b/core/res/res/drawable/watch_switch_thumb_material_anim.xml @@ -15,21 +15,79 @@ android:constantSize="true"> <item android:id="@+id/off" - android:drawable="@drawable/watch_switch_thumb_material" + android:drawable="@drawable/watch_switch_thumb_mtrl_14w" android:state_enabled="false" /> <item android:id="@+id/on" - android:drawable="@drawable/watch_switch_thumb_material" + android:drawable="@drawable/watch_switch_thumb_mtrl_14w" android:state_checked="true" /> <item android:id="@+id/off" - android:drawable="@drawable/watch_switch_thumb_material" /> + android:drawable="@drawable/watch_switch_thumb_mtrl_14w" /> <transition - android:drawable="@drawable/watch_switch_thumb_to_on_anim_mtrl" android:fromId="@id/off" - android:toId="@id/on" /> + android:toId="@id/on"> + <animation-list> + <item + android:drawable="@drawable/watch_switch_thumb_mtrl_14w" + android:duration="30" /> + <item + android:drawable="@drawable/watch_switch_thumb_mtrl_15w" + android:duration="15" /> + <item + android:drawable="@drawable/watch_switch_thumb_mtrl_16w" + android:duration="15" /> + <item + android:drawable="@drawable/watch_switch_thumb_mtrl_17w" + android:duration="15" /> + <item + android:drawable="@drawable/watch_switch_thumb_mtrl_18w" + android:duration="75" /> + <item + android:drawable="@drawable/watch_switch_thumb_mtrl_17w" + android:duration="15" /> + <item + android:drawable="@drawable/watch_switch_thumb_mtrl_16w" + android:duration="15" /> + <item + android:drawable="@drawable/watch_switch_thumb_mtrl_15w" + android:duration="15" /> + <item + android:drawable="@drawable/watch_switch_thumb_mtrl_14w" + android:duration="30" /> + </animation-list> + </transition> <transition - android:drawable="@drawable/watch_switch_thumb_to_off_anim_mtrl" android:fromId="@id/on" - android:toId="@id/off" /> + android:toId="@id/off"> + <animation-list> + <item + android:drawable="@drawable/watch_switch_thumb_mtrl_14w" + android:duration="30" /> + <item + android:drawable="@drawable/watch_switch_thumb_mtrl_15w" + android:duration="15" /> + <item + android:drawable="@drawable/watch_switch_thumb_mtrl_16w" + android:duration="15" /> + <item + android:drawable="@drawable/watch_switch_thumb_mtrl_17w" + android:duration="15" /> + <item + android:drawable="@drawable/watch_switch_thumb_mtrl_18w" + android:duration="75" /> + <item + android:drawable="@drawable/watch_switch_thumb_mtrl_17w" + android:duration="15" /> + <item + android:drawable="@drawable/watch_switch_thumb_mtrl_16w" + android:duration="15" /> + <item + android:drawable="@drawable/watch_switch_thumb_mtrl_15w" + android:duration="15" /> + <item + android:drawable="@drawable/watch_switch_thumb_mtrl_14w" + android:duration="30" /> + </animation-list> + </transition> </animated-selector> diff --git a/core/res/res/drawable/watch_switch_track_material.xml b/core/res/res/drawable/watch_switch_track_material.xml index 00cdadb1b59d..79e92a331071 100644 --- a/core/res/res/drawable/watch_switch_track_material.xml +++ b/core/res/res/drawable/watch_switch_track_material.xml @@ -11,13 +11,11 @@ limitations under the License. --> -<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> - <item android:gravity="center_vertical|center_horizontal"> - <shape android:shape="oval"> - <solid android:color="@android:color/white" /> - <size - android:width="40dp" - android:height="40dp" /> - </shape> +<selector xmlns:android="http://schemas.android.com/apk/res/android"> + <item android:state_enabled="false"> + <bitmap android:alpha="0.1" android:src="@drawable/watch_switch_track_mtrl_alpha" /> </item> -</layer-list>
\ No newline at end of file + <item> + <bitmap android:alpha="0.2" android:src="@drawable/watch_switch_track_mtrl_alpha" /> + </item> +</selector> diff --git a/core/res/res/interpolator-watch/progress_indeterminate_rotation_interpolator.xml b/core/res/res/interpolator-watch/progress_indeterminate_rotation_interpolator.xml new file mode 100644 index 000000000000..ed2655cb0ac8 --- /dev/null +++ b/core/res/res/interpolator-watch/progress_indeterminate_rotation_interpolator.xml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + Copyright (C) 2016 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<pathInterpolator xmlns:android="http://schemas.android.com/apk/res/android" + android:pathData="M 0.0,0.0 c 0.032,0.0 0.016,0.2 0.08,0.2 l 0.12,0.0 c 0.032,0.0 0.016,0.2 0.08,0.2 l 0.12,0.0 c 0.032,0.0 0.016,0.2 0.08,0.2 l 0.12,0.0 c 0.032,0.0 0.016,0.2 0.08,0.2 l 0.12,0.0 c 0.032,0.0 0.016,0.2 0.08,0.2 l 0.12,0.0 L 1.0,1.0" /> diff --git a/core/res/res/values-round-watch/styles_material.xml b/core/res/res/interpolator-watch/trim_end_interpolator.xml index a2f3c0243189..f46d5e0e7c82 100644 --- a/core/res/res/values-round-watch/styles_material.xml +++ b/core/res/res/interpolator-watch/trim_end_interpolator.xml @@ -1,5 +1,6 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- Copyright (C) 2016 The Android Open Source Project +<?xml version="1.0" encoding="utf-8"?> +<!-- + Copyright (C) 2016 The Android Open Source Project Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -13,8 +14,5 @@ See the License for the specific language governing permissions and limitations under the License. --> -<resources> - <style name="TextAppearance.Material.AlertDialogMessage" parent="TextAppearance.Material.Body1"> - <item name="textAlignment">center</item> - </style> -</resources> +<pathInterpolator xmlns:android="http://schemas.android.com/apk/res/android" + android:pathData="M 0.0,0.0 c 0.08,0.0 0.04,1.0 0.2,1.0 l 0.8,0.0 L 1.0,1.0" /> diff --git a/core/res/res/drawable/watch_switch_thumb_to_on_anim_mtrl.xml b/core/res/res/interpolator-watch/trim_offset_interpolator.xml index 9f92361e70ea..d58672e9cb42 100644 --- a/core/res/res/drawable/watch_switch_thumb_to_on_anim_mtrl.xml +++ b/core/res/res/interpolator-watch/trim_offset_interpolator.xml @@ -1,19 +1,18 @@ <?xml version="1.0" encoding="utf-8"?> -<!-- Copyright (C) 2016 The Android Open Source Project +<!-- + Copyright (C) 2016 The Android Open Source Project + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> - -<animated-vector xmlns:android="http://schemas.android.com/apk/res/android" - android:drawable="@drawable/watch_switch_thumb_material"> - <target - android:name="thumb_path" - android:animation="@anim/watch_switch_thumb_to_on_animation" /> -</animated-vector> +<pathInterpolator xmlns:android="http://schemas.android.com/apk/res/android" + android:pathData="M 0.0,0.0 l 0.4,1.0 l 0.6,0.0 L 1.0,1.0" /> diff --git a/core/res/res/drawable/watch_switch_thumb_to_off_anim_mtrl.xml b/core/res/res/interpolator-watch/trim_start_interpolator.xml index 2c6ba2f75753..365609c97d75 100644 --- a/core/res/res/drawable/watch_switch_thumb_to_off_anim_mtrl.xml +++ b/core/res/res/interpolator-watch/trim_start_interpolator.xml @@ -1,19 +1,18 @@ <?xml version="1.0" encoding="utf-8"?> -<!-- Copyright (C) 2016 The Android Open Source Project +<!-- + Copyright (C) 2016 The Android Open Source Project + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> - -<animated-vector xmlns:android="http://schemas.android.com/apk/res/android" - android:drawable="@drawable/watch_switch_thumb_material"> - <target - android:name="thumb_path" - android:animation="@anim/watch_switch_thumb_to_off_animation" /> -</animated-vector> +<pathInterpolator xmlns:android="http://schemas.android.com/apk/res/android" + android:pathData="M 0.0,0.0 l 0.2,0.0 c 0.08,0.0 0.04,1.0 0.2,1.0 l 0.6,0.0 L 1.0,1.0" /> diff --git a/core/res/res/layout-notround-watch/alert_dialog_header_micro.xml b/core/res/res/layout-notround-watch/alert_dialog_title_material.xml index fc840d9fa73f..307c6db91c3a 100644 --- a/core/res/res/layout-notround-watch/alert_dialog_header_micro.xml +++ b/core/res/res/layout-notround-watch/alert_dialog_title_material.xml @@ -30,12 +30,9 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@null" /> - <com.android.internal.widget.DialogTitle android:id="@+id/alertTitle" + <TextView android:id="@+id/alertTitle" style="?android:attr/windowTitleStyle" - android:ellipsize="end" - android:layout_marginStart="8dp" android:layout_marginBottom="8dp" android:layout_width="match_parent" - android:layout_height="wrap_content" - android:textAlignment="viewStart" /> + android:layout_height="wrap_content" /> </LinearLayout> diff --git a/core/res/res/layout-round-watch/alert_dialog_header_micro.xml b/core/res/res/layout-round-watch/alert_dialog_title_material.xml index 6f7ae02388a3..027991106c5a 100644 --- a/core/res/res/layout-round-watch/alert_dialog_header_micro.xml +++ b/core/res/res/layout-round-watch/alert_dialog_title_material.xml @@ -27,12 +27,10 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@null" /> - <com.android.internal.widget.DialogTitle android:id="@+id/alertTitle" + <TextView android:id="@+id/alertTitle" style="?android:attr/windowTitleStyle" - android:ellipsize="end" android:layout_marginTop="36dp" - android:layout_marginBottom="4dp" + android:layout_marginBottom="8dp" android:layout_width="match_parent" - android:layout_height="wrap_content" - android:textAlignment="center" /> + android:layout_height="wrap_content" /> </FrameLayout> diff --git a/core/res/res/layout-watch/alert_dialog_material.xml b/core/res/res/layout-watch/alert_dialog_material.xml index ce8e20a12187..2fe13de2120a 100644 --- a/core/res/res/layout-watch/alert_dialog_material.xml +++ b/core/res/res/layout-watch/alert_dialog_material.xml @@ -39,18 +39,19 @@ <include android:id="@+id/title_template" android:layout_width="match_parent" android:layout_height="wrap_content" - layout="@layout/alert_dialog_header_micro"/> + layout="@layout/alert_dialog_title_material"/> </FrameLayout> <!-- Content Panel --> <FrameLayout android:id="@+id/contentPanel" android:layout_width="match_parent" - android:layout_height="match_parent" + android:layout_height="wrap_content" android:clipToPadding="false"> <TextView android:id="@+id/message" android:layout_width="match_parent" android:layout_height="wrap_content" - android:textAppearance="@style/TextAppearance.Material.Body1" + android:gravity="@integer/config_dialogTextGravity" + android:textAppearance="@style/TextAppearance.Material.Subhead" android:paddingStart="?dialogPreferredPadding" android:paddingEnd="?dialogPreferredPadding" android:paddingTop="8dip" @@ -77,6 +78,7 @@ <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" + android:layout_gravity="bottom" android:orientation="vertical" android:minHeight="@dimen/alert_dialog_button_bar_height" android:paddingBottom="?dialogPreferredPadding" diff --git a/core/res/res/layout-watch/date_picker_dialog.xml b/core/res/res/layout-watch/date_picker_dialog.xml new file mode 100644 index 000000000000..b8772bc5ea3c --- /dev/null +++ b/core/res/res/layout-watch/date_picker_dialog.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + Copyright (C) 2007 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<DatePicker xmlns:android="http://schemas.android.com/apk/res/android" + android:id="@+id/datePicker" + android:layout_gravity="center_horizontal" + android:gravity="center_horizontal" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:spinnersShown="true" + android:calendarViewShown="false" + android:datePickerMode="@integer/date_picker_mode" /> diff --git a/core/res/res/layout-watch/input_method_extract_view.xml b/core/res/res/layout-watch/input_method_extract_view.xml index 038b766c749b..3478bb544934 100644 --- a/core/res/res/layout-watch/input_method_extract_view.xml +++ b/core/res/res/layout-watch/input_method_extract_view.xml @@ -49,7 +49,7 @@ android:layout_width="@dimen/input_extract_action_button_width" android:layout_height="@dimen/input_extract_action_button_width" android:background="@drawable/input_extract_action_bg_material_dark" - android:padding="4dp" + android:padding="@dimen/input_extract_action_icon_padding" android:scaleType="centerInside" /> </FrameLayout> </android.inputmethodservice.CompactExtractEditLayout> diff --git a/core/res/res/layout-watch/preference_widget_switch.xml b/core/res/res/layout-watch/preference_widget_switch.xml index 37d0c6bf1af6..5881cf0c4d1e 100644 --- a/core/res/res/layout-watch/preference_widget_switch.xml +++ b/core/res/res/layout-watch/preference_widget_switch.xml @@ -23,8 +23,8 @@ android:layout_gravity="center" android:thumb="@drawable/watch_switch_thumb_material_anim" android:thumbTint="@color/watch_switch_thumb_color_material" + android:thumbTintMode="multiply" android:track="@drawable/watch_switch_track_material" - android:trackTint="?android:colorPrimary" android:focusable="false" android:clickable="false" android:background="@null" /> diff --git a/core/res/res/layout-watch/time_picker_dialog.xml b/core/res/res/layout-watch/time_picker_dialog.xml new file mode 100644 index 000000000000..788602bf09ba --- /dev/null +++ b/core/res/res/layout-watch/time_picker_dialog.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +** +** Copyright 2007, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ +--> + +<TimePicker xmlns:android="http://schemas.android.com/apk/res/android" + android:id="@+id/timePicker" + android:layout_gravity="center_horizontal" + android:gravity="center_horizontal" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:timePickerMode="@integer/time_picker_mode" /> diff --git a/core/res/res/layout/date_picker_legacy_holo.xml b/core/res/res/layout/date_picker_legacy_holo.xml index b465d97339a2..a6e93c99160d 100644 --- a/core/res/res/layout/date_picker_legacy_holo.xml +++ b/core/res/res/layout/date_picker_legacy_holo.xml @@ -41,8 +41,8 @@ android:id="@+id/month" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginTop="16dip" - android:layout_marginBottom="16dip" + android:layout_marginTop="@dimen/picker_top_margin" + android:layout_marginBottom="@dimen/picker_bottom_margin" android:layout_marginStart="8dip" android:layout_marginEnd="8dip" android:focusable="true" @@ -54,8 +54,8 @@ android:id="@+id/day" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginTop="16dip" - android:layout_marginBottom="16dip" + android:layout_marginTop="@dimen/picker_top_margin" + android:layout_marginBottom="@dimen/picker_bottom_margin" android:layout_marginStart="8dip" android:layout_marginEnd="8dip" android:focusable="true" @@ -67,8 +67,8 @@ android:id="@+id/year" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginTop="16dip" - android:layout_marginBottom="16dip" + android:layout_marginTop="@dimen/picker_top_margin" + android:layout_marginBottom="@dimen/picker_bottom_margin" android:layout_marginStart="8dip" android:layout_marginEnd="16dip" android:focusable="true" diff --git a/core/res/res/layout/number_picker_material.xml b/core/res/res/layout/number_picker_material.xml index b0455857e79e..6fbd2b279f0c 100644 --- a/core/res/res/layout/number_picker_material.xml +++ b/core/res/res/layout/number_picker_material.xml @@ -22,4 +22,4 @@ android:gravity="center" android:singleLine="true" android:background="@null" - android:textAppearance="@style/TextAppearance.Material.Body1" /> + android:textAppearance="@style/TextAppearance.Material.NumberPicker" /> diff --git a/core/res/res/layout/time_picker_legacy_material.xml b/core/res/res/layout/time_picker_legacy_material.xml index c6b7d3a70d97..ee56266390f1 100644 --- a/core/res/res/layout/time_picker_legacy_material.xml +++ b/core/res/res/layout/time_picker_legacy_material.xml @@ -40,8 +40,8 @@ android:id="@+id/hour" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginTop="16dip" - android:layout_marginBottom="16dip" + android:layout_marginTop="@dimen/picker_top_margin" + android:layout_marginBottom="@dimen/picker_bottom_margin" android:focusable="true" android:focusableInTouchMode="true" /> @@ -62,8 +62,8 @@ android:id="@+id/minute" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginTop="16dip" - android:layout_marginBottom="16dip" + android:layout_marginTop="@dimen/picker_top_margin" + android:layout_marginBottom="@dimen/picker_bottom_margin" android:focusable="true" android:focusableInTouchMode="true" /> @@ -75,8 +75,8 @@ android:id="@+id/amPm" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginTop="16dip" - android:layout_marginBottom="16dip" + android:layout_marginTop="@dimen/picker_top_margin" + android:layout_marginBottom="@dimen/picker_bottom_margin" android:layout_marginStart="8dip" android:layout_marginEnd="8dip" android:focusable="true" diff --git a/core/res/res/raw-ar-xlarge/incognito_mode_start_page.html b/core/res/res/raw-ar-xlarge/incognito_mode_start_page.html deleted file mode 100644 index 002be4164c9a..000000000000 --- a/core/res/res/raw-ar-xlarge/incognito_mode_start_page.html +++ /dev/null @@ -1,19 +0,0 @@ -<html DIR="RTL"> - <head> - <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" /> - <title>نافذة جديدة للتصفح المتخفي</title> - </head> - <body> - <p><strong>أنت الآن في وضع التصفح المتخفي</strong> الصفحات التي تشاهدها في هذه النافذة لن تظهر في سجل المتصفح أو سجلّ البحث، ولن تترك آثارًا أخرى للتتبع، مثل ملفات تعريف الارتباط على جهازك بعد أن تغلق نافذة التصفح المتخفي. ورغم ذلك، سيتم الاحتفاظ بأي ملفات تنزلها أو أية إشارات مرجعية تقوم بإنشائها.</p> - - <p><strong>العمل في وضع التصفح المخفي لا يؤثر على طريقة عمل الأشخاص الآخرين أو الخوادم أو البرامج الأخرى. كن على حذر مما يلي:</strong></p> - - <ul> - <li>مواقع الويب التي تجمع معلومات عنك أو تشارك الآخرين فيها</li> - <li>مزوّدو خدمة الإنترنت أو الموظفون الذين يتتبعون الصفحات التي تزورها</li> - <li>البرامج الضارة التي تتبع ضغطات المفاتيح التي تقوم بها مقابل تنزيل وجوه رمزية مجانًا</li> - <li>المراقبة من قبل العملاء السريين</li> - <li>الأشخاص الذين يقفون خلفك</li> - </ul> - </body> -</html> diff --git a/core/res/res/raw-ar/incognito_mode_start_page.html b/core/res/res/raw-ar/incognito_mode_start_page.html deleted file mode 100644 index 002be4164c9a..000000000000 --- a/core/res/res/raw-ar/incognito_mode_start_page.html +++ /dev/null @@ -1,19 +0,0 @@ -<html DIR="RTL"> - <head> - <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" /> - <title>نافذة جديدة للتصفح المتخفي</title> - </head> - <body> - <p><strong>أنت الآن في وضع التصفح المتخفي</strong> الصفحات التي تشاهدها في هذه النافذة لن تظهر في سجل المتصفح أو سجلّ البحث، ولن تترك آثارًا أخرى للتتبع، مثل ملفات تعريف الارتباط على جهازك بعد أن تغلق نافذة التصفح المتخفي. ورغم ذلك، سيتم الاحتفاظ بأي ملفات تنزلها أو أية إشارات مرجعية تقوم بإنشائها.</p> - - <p><strong>العمل في وضع التصفح المخفي لا يؤثر على طريقة عمل الأشخاص الآخرين أو الخوادم أو البرامج الأخرى. كن على حذر مما يلي:</strong></p> - - <ul> - <li>مواقع الويب التي تجمع معلومات عنك أو تشارك الآخرين فيها</li> - <li>مزوّدو خدمة الإنترنت أو الموظفون الذين يتتبعون الصفحات التي تزورها</li> - <li>البرامج الضارة التي تتبع ضغطات المفاتيح التي تقوم بها مقابل تنزيل وجوه رمزية مجانًا</li> - <li>المراقبة من قبل العملاء السريين</li> - <li>الأشخاص الذين يقفون خلفك</li> - </ul> - </body> -</html> diff --git a/core/res/res/raw-bg-xlarge/incognito_mode_start_page.html b/core/res/res/raw-bg-xlarge/incognito_mode_start_page.html deleted file mode 100644 index ee25ae4023ff..000000000000 --- a/core/res/res/raw-bg-xlarge/incognito_mode_start_page.html +++ /dev/null @@ -1,19 +0,0 @@ -<html DIR="LTR"> - <head> - <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" /> - <title>Нов прозорец „инкогнито“</title> - </head> - <body> - <p><strong>Влязохте в режим „инкогнито“</strong>. Страниците, които разглеждате в този прозорец, няма да се показват в историята на браузъра ви, нито в историята на търсенията ви. Те също няма да оставят други следи като „бисквитки“ в устройството ви, след като затворите прозореца в режим „инкогнито“. Ще се съхранят обаче всички файлове, които изтеглите, или отметки, които създадете.</p> - - <p><strong>Преминаването в режим „инкогнито“ не засяга поведението на други хора, сървъри или софтуер. </strong>Внимавайте за:</p> - - <ul> - <li>уебсайтове, които събират или споделят информация за вас;</li> - <li>доставчици на интернет услуги или служители, които проследяват посещаваните от вас страници;</li> - <li>злонамерен софтуер, който ви дава безплатни емотикони, но в замяна проследява натисканията на клавишите от вас;</li> - <li>наблюдение от тайните служби;</li> - <li>хора, които стоят зад вас.</li> - </ul> - </body> -</html> diff --git a/core/res/res/raw-bg/incognito_mode_start_page.html b/core/res/res/raw-bg/incognito_mode_start_page.html deleted file mode 100644 index ee25ae4023ff..000000000000 --- a/core/res/res/raw-bg/incognito_mode_start_page.html +++ /dev/null @@ -1,19 +0,0 @@ -<html DIR="LTR"> - <head> - <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" /> - <title>Нов прозорец „инкогнито“</title> - </head> - <body> - <p><strong>Влязохте в режим „инкогнито“</strong>. Страниците, които разглеждате в този прозорец, няма да се показват в историята на браузъра ви, нито в историята на търсенията ви. Те също няма да оставят други следи като „бисквитки“ в устройството ви, след като затворите прозореца в режим „инкогнито“. Ще се съхранят обаче всички файлове, които изтеглите, или отметки, които създадете.</p> - - <p><strong>Преминаването в режим „инкогнито“ не засяга поведението на други хора, сървъри или софтуер. </strong>Внимавайте за:</p> - - <ul> - <li>уебсайтове, които събират или споделят информация за вас;</li> - <li>доставчици на интернет услуги или служители, които проследяват посещаваните от вас страници;</li> - <li>злонамерен софтуер, който ви дава безплатни емотикони, но в замяна проследява натисканията на клавишите от вас;</li> - <li>наблюдение от тайните служби;</li> - <li>хора, които стоят зад вас.</li> - </ul> - </body> -</html> diff --git a/core/res/res/raw-ca-xlarge/incognito_mode_start_page.html b/core/res/res/raw-ca-xlarge/incognito_mode_start_page.html deleted file mode 100644 index bec3dacb9101..000000000000 --- a/core/res/res/raw-ca-xlarge/incognito_mode_start_page.html +++ /dev/null @@ -1,19 +0,0 @@ -<html DIR="LTR"> - <head> - <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" /> - <title>Nova finestra d'incògnit</title> - </head> - <body> - <p><strong>Has passat a l'estat d'incògnit</strong>. Les pàgines que visualitzis en aquesta finestra no apareixeran a l'historial del navegador ni a l'historial de cerques, i no deixaran cap pista, com ara galetes, al dispositiu després de tancar la finestra d'incògnit. Tanmateix, es conservaran tots els fitxers que baixis o les adreces d'interès que creïs.</p> - - <p><strong>Utilitzar el mode d'incògnit no afecta el comportament d'altres usuaris, servidors ni programari. Vés amb compte amb:</strong></p> - - <ul> - <li>llocs web que recopilen o comparteixen informació sobre la teva identitat,</li> - <li>proveïdors de serveis d'Internet o treballadors que segueixen les pàgines que visites,</li> - <li>programari maliciós que segueix les teves pulsacions del teclat a canvi d'emoticones,</li> - <li>vigilància per part d'agents secrets,</li> - <li>persones que estan darrere teu.</li> - </ul> - </body> -</html> diff --git a/core/res/res/raw-ca/incognito_mode_start_page.html b/core/res/res/raw-ca/incognito_mode_start_page.html deleted file mode 100644 index bec3dacb9101..000000000000 --- a/core/res/res/raw-ca/incognito_mode_start_page.html +++ /dev/null @@ -1,19 +0,0 @@ -<html DIR="LTR"> - <head> - <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" /> - <title>Nova finestra d'incògnit</title> - </head> - <body> - <p><strong>Has passat a l'estat d'incògnit</strong>. Les pàgines que visualitzis en aquesta finestra no apareixeran a l'historial del navegador ni a l'historial de cerques, i no deixaran cap pista, com ara galetes, al dispositiu després de tancar la finestra d'incògnit. Tanmateix, es conservaran tots els fitxers que baixis o les adreces d'interès que creïs.</p> - - <p><strong>Utilitzar el mode d'incògnit no afecta el comportament d'altres usuaris, servidors ni programari. Vés amb compte amb:</strong></p> - - <ul> - <li>llocs web que recopilen o comparteixen informació sobre la teva identitat,</li> - <li>proveïdors de serveis d'Internet o treballadors que segueixen les pàgines que visites,</li> - <li>programari maliciós que segueix les teves pulsacions del teclat a canvi d'emoticones,</li> - <li>vigilància per part d'agents secrets,</li> - <li>persones que estan darrere teu.</li> - </ul> - </body> -</html> diff --git a/core/res/res/raw-cs-xlarge/incognito_mode_start_page.html b/core/res/res/raw-cs-xlarge/incognito_mode_start_page.html deleted file mode 100644 index 7420393d3e51..000000000000 --- a/core/res/res/raw-cs-xlarge/incognito_mode_start_page.html +++ /dev/null @@ -1,19 +0,0 @@ -<html DIR="LTR"> - <head> - <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" /> - <title>Nové anonymní okno</title> - </head> - <body> - <p><strong>Spustili jste anonymní režim</strong>. Stránky, které zobrazíte v tomto okně, se nezahrnou do historie prohlížeče ani historie vyhledávání a dokonce po zavření tohoto anonymního okna ve vašem zařízení nezanechají ani žádné jiné stopy například v podobě souborů cookie. Veškeré stažené soubory nebo vytvořené záložky však budou zachovány.</p> - - <p><strong>Použití anonymního režimu nemá vliv na chování jiných osob, serverů nebo softwaru. Dejte si pozor na:</strong></p> - - <ul> - <li>Weby, které sbírají nebo sdílejí informace o vás</li> - <li>Poskytovatele internetových služeb nebo zaměstnavatele, kteří sledují stránky, které navštěvujete</li> - <li>Škodlivý software, který sleduje stisknuté klávesy a výměnou nabízí nové emotikony</li> - <li>Tajné agenty</li> - <li>Lidi, kteří vám koukají přes rameno</li> - </ul> - </body> -</html> diff --git a/core/res/res/raw-cs/incognito_mode_start_page.html b/core/res/res/raw-cs/incognito_mode_start_page.html deleted file mode 100644 index 7420393d3e51..000000000000 --- a/core/res/res/raw-cs/incognito_mode_start_page.html +++ /dev/null @@ -1,19 +0,0 @@ -<html DIR="LTR"> - <head> - <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" /> - <title>Nové anonymní okno</title> - </head> - <body> - <p><strong>Spustili jste anonymní režim</strong>. Stránky, které zobrazíte v tomto okně, se nezahrnou do historie prohlížeče ani historie vyhledávání a dokonce po zavření tohoto anonymního okna ve vašem zařízení nezanechají ani žádné jiné stopy například v podobě souborů cookie. Veškeré stažené soubory nebo vytvořené záložky však budou zachovány.</p> - - <p><strong>Použití anonymního režimu nemá vliv na chování jiných osob, serverů nebo softwaru. Dejte si pozor na:</strong></p> - - <ul> - <li>Weby, které sbírají nebo sdílejí informace o vás</li> - <li>Poskytovatele internetových služeb nebo zaměstnavatele, kteří sledují stránky, které navštěvujete</li> - <li>Škodlivý software, který sleduje stisknuté klávesy a výměnou nabízí nové emotikony</li> - <li>Tajné agenty</li> - <li>Lidi, kteří vám koukají přes rameno</li> - </ul> - </body> -</html> diff --git a/core/res/res/raw-da-xlarge/incognito_mode_start_page.html b/core/res/res/raw-da-xlarge/incognito_mode_start_page.html deleted file mode 100644 index eae989f9cd19..000000000000 --- a/core/res/res/raw-da-xlarge/incognito_mode_start_page.html +++ /dev/null @@ -1,19 +0,0 @@ -<html DIR="LTR"> - <head> - <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" /> - <title>Nyt inkognitovindue</title> - </head> - <body> - <p><strong>Nu er du inkognito</strong>. De sider, du besøger i dette vindue, vises ikke i din browser- eller søgeoversigt, og de efterlader ikke andre spor, såsom cookies, på din enhed, når du lukker incognitovinduet. Filer, som du downloader eller bogmærker, som du opretter, gemmes dog.</p> - - <p><strong>At være inkognito er ikke noget, der påvirker andre folk, servere eller software. Vær opmærksom på:</strong></p> - - <ul> - <li>Websider, der indsamler eller deler oplysninger om dig</li> - <li>Internetserviceudbydere eller arbejdsgivere, der registrerer de sider, du besøger</li> - <li>Ondsindet software, der registrerer dine tasteslag til gengæld for gratis smileys</li> - <li>Overvågning af hemmelige agenter</li> - <li>Folk, der kigger dig over skulderen</li> - </ul> - </body> -</html> diff --git a/core/res/res/raw-da/incognito_mode_start_page.html b/core/res/res/raw-da/incognito_mode_start_page.html deleted file mode 100644 index eae989f9cd19..000000000000 --- a/core/res/res/raw-da/incognito_mode_start_page.html +++ /dev/null @@ -1,19 +0,0 @@ -<html DIR="LTR"> - <head> - <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" /> - <title>Nyt inkognitovindue</title> - </head> - <body> - <p><strong>Nu er du inkognito</strong>. De sider, du besøger i dette vindue, vises ikke i din browser- eller søgeoversigt, og de efterlader ikke andre spor, såsom cookies, på din enhed, når du lukker incognitovinduet. Filer, som du downloader eller bogmærker, som du opretter, gemmes dog.</p> - - <p><strong>At være inkognito er ikke noget, der påvirker andre folk, servere eller software. Vær opmærksom på:</strong></p> - - <ul> - <li>Websider, der indsamler eller deler oplysninger om dig</li> - <li>Internetserviceudbydere eller arbejdsgivere, der registrerer de sider, du besøger</li> - <li>Ondsindet software, der registrerer dine tasteslag til gengæld for gratis smileys</li> - <li>Overvågning af hemmelige agenter</li> - <li>Folk, der kigger dig over skulderen</li> - </ul> - </body> -</html> diff --git a/core/res/res/raw-de-xlarge/incognito_mode_start_page.html b/core/res/res/raw-de-xlarge/incognito_mode_start_page.html deleted file mode 100644 index 1d2cb69904b0..000000000000 --- a/core/res/res/raw-de-xlarge/incognito_mode_start_page.html +++ /dev/null @@ -1,19 +0,0 @@ -<html DIR="LTR"> - <head> - <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" /> - <title>Neues Inkognito-Fenster</title> - </head> - <body> - <p><strong>Sie haben den Modus für anonymes Browsen aktiviert</strong>. In diesem Fenster aufgerufene Seiten erscheinen nicht in Ihrem Browser- oder Suchverlauf. Zudem werden nach dem Schließen des Inkognito-Fensters keine anderen Spuren wie etwa Cookies auf Ihrem Gerät gespeichert. Heruntergeladene Dateien oder hinzugefügte Lesezeichen werden jedoch beibehalten.</p> - - <p><strong>Das anonyme Browsen wirkt sich nicht auf das Verhalten von Menschen, Servern oder Software aus. </strong>Vorsicht ist geboten bei:</p> - - <ul> - <li>Websites, auf denen Informationen über Sie gesammelt oder weitergegeben werden</li> - <li>Internetanbietern oder Arbeitgebern, die die von Ihnen aufgerufenen Seiten protokollieren</li> - <li>Bösartiger Software, die Ihnen kostenlose Smileys bietet, dafür aber Ihre Tastatureingaben speichert</li> - <li>Geheimagenten</li> - <li>Personen, die hinter Ihnen stehen</li> - </ul> - </body> -</html> diff --git a/core/res/res/raw-de/incognito_mode_start_page.html b/core/res/res/raw-de/incognito_mode_start_page.html deleted file mode 100644 index 1d2cb69904b0..000000000000 --- a/core/res/res/raw-de/incognito_mode_start_page.html +++ /dev/null @@ -1,19 +0,0 @@ -<html DIR="LTR"> - <head> - <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" /> - <title>Neues Inkognito-Fenster</title> - </head> - <body> - <p><strong>Sie haben den Modus für anonymes Browsen aktiviert</strong>. In diesem Fenster aufgerufene Seiten erscheinen nicht in Ihrem Browser- oder Suchverlauf. Zudem werden nach dem Schließen des Inkognito-Fensters keine anderen Spuren wie etwa Cookies auf Ihrem Gerät gespeichert. Heruntergeladene Dateien oder hinzugefügte Lesezeichen werden jedoch beibehalten.</p> - - <p><strong>Das anonyme Browsen wirkt sich nicht auf das Verhalten von Menschen, Servern oder Software aus. </strong>Vorsicht ist geboten bei:</p> - - <ul> - <li>Websites, auf denen Informationen über Sie gesammelt oder weitergegeben werden</li> - <li>Internetanbietern oder Arbeitgebern, die die von Ihnen aufgerufenen Seiten protokollieren</li> - <li>Bösartiger Software, die Ihnen kostenlose Smileys bietet, dafür aber Ihre Tastatureingaben speichert</li> - <li>Geheimagenten</li> - <li>Personen, die hinter Ihnen stehen</li> - </ul> - </body> -</html> diff --git a/core/res/res/raw-el-xlarge/incognito_mode_start_page.html b/core/res/res/raw-el-xlarge/incognito_mode_start_page.html deleted file mode 100644 index 5641650b8691..000000000000 --- a/core/res/res/raw-el-xlarge/incognito_mode_start_page.html +++ /dev/null @@ -1,19 +0,0 @@ -<html DIR="LTR"> - <head> - <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" /> - <title>Νέο παράθυρο για ανώνυμη περιήγηση</title> - </head> - <body> - <p><strong>Είστε σε κατάσταση ανώνυμης περιήγησης</strong>. Οι σελίδες που θα προβάλλετε σε αυτό το παράθυρο δεν θα εμφανιστούν στο ιστορικό του πρόγράμματος περιήγησης ή στο ιστορικό αναζήτησης. Επίσης, δεν θα αφήσουν ίχνη, όπως cookie, στη συσκευή σας αφού κλείσετε το παράθυρο ανώνυμης περιήγησης. Ωστόσο, τα αρχεία και οι σελιδοδείκτες που θα δημιουργήσετε θα διατηρηθούν.</p> - - <p><strong>Η κατάσταση ανώνυμης περιήγησης δεν επηρεάζει την συμπεριφορά άλλων, διακομιστών ή λογισμικού. Αλλά προσοχή σε:</strong></p> - - <ul> - <li>Ιστοτόπους που συλλέγουν ή μοιράζονται πληροφορίες για εσάς</li> - <li>Πάροχους υπηρεσιών διαδικτύου ή εργοδότες που παρακολουθούν τις ιστοσελίδες που επισκέπτεστε</li> - <li>Κακόβουλο λογισμικό που καταγράφει ότι πληκτρολογείτε με αντάλλαγμα δωρεάν "φατσούλες"</li> - <li>Παρακολούθηση από μυστικούς πράκτορες</li> - <li>Άτομα που στέκονται πίσω σας</li> - </ul> - </body> -</html> diff --git a/core/res/res/raw-el/incognito_mode_start_page.html b/core/res/res/raw-el/incognito_mode_start_page.html deleted file mode 100644 index 5641650b8691..000000000000 --- a/core/res/res/raw-el/incognito_mode_start_page.html +++ /dev/null @@ -1,19 +0,0 @@ -<html DIR="LTR"> - <head> - <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" /> - <title>Νέο παράθυρο για ανώνυμη περιήγηση</title> - </head> - <body> - <p><strong>Είστε σε κατάσταση ανώνυμης περιήγησης</strong>. Οι σελίδες που θα προβάλλετε σε αυτό το παράθυρο δεν θα εμφανιστούν στο ιστορικό του πρόγράμματος περιήγησης ή στο ιστορικό αναζήτησης. Επίσης, δεν θα αφήσουν ίχνη, όπως cookie, στη συσκευή σας αφού κλείσετε το παράθυρο ανώνυμης περιήγησης. Ωστόσο, τα αρχεία και οι σελιδοδείκτες που θα δημιουργήσετε θα διατηρηθούν.</p> - - <p><strong>Η κατάσταση ανώνυμης περιήγησης δεν επηρεάζει την συμπεριφορά άλλων, διακομιστών ή λογισμικού. Αλλά προσοχή σε:</strong></p> - - <ul> - <li>Ιστοτόπους που συλλέγουν ή μοιράζονται πληροφορίες για εσάς</li> - <li>Πάροχους υπηρεσιών διαδικτύου ή εργοδότες που παρακολουθούν τις ιστοσελίδες που επισκέπτεστε</li> - <li>Κακόβουλο λογισμικό που καταγράφει ότι πληκτρολογείτε με αντάλλαγμα δωρεάν "φατσούλες"</li> - <li>Παρακολούθηση από μυστικούς πράκτορες</li> - <li>Άτομα που στέκονται πίσω σας</li> - </ul> - </body> -</html> diff --git a/core/res/res/raw-en-rGB-xlarge/incognito_mode_start_page.html b/core/res/res/raw-en-rGB-xlarge/incognito_mode_start_page.html deleted file mode 100644 index 7436f9804c51..000000000000 --- a/core/res/res/raw-en-rGB-xlarge/incognito_mode_start_page.html +++ /dev/null @@ -1,19 +0,0 @@ -<html DIR="LTR"> - <head> - <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" /> - <title>New incognito window</title> - </head> - <body> - <p><strong>You've gone incognito</strong>. Pages that you view in this window won't appear in your browser history or search history, and they won't leave other traces, such as cookies, on your device after you close the incognito window. However, any files that you download or bookmarks that you create will be preserved.</p> - - <p><strong>Going incognito doesn't affect the behaviour of other people, servers or software. Be cautious of:</strong></p> - - <ul> - <li>Websites that collect or share information about you</li> - <li>Internet service providers or employers that track the pages that you visit</li> - <li>Malicious software that tracks your keystrokes in exchange for free smileys</li> - <li>Surveillance by secret agents</li> - <li>People standing behind you</li> - </ul> - </body> -</html> diff --git a/core/res/res/raw-en-rGB/incognito_mode_start_page.html b/core/res/res/raw-en-rGB/incognito_mode_start_page.html deleted file mode 100644 index 7436f9804c51..000000000000 --- a/core/res/res/raw-en-rGB/incognito_mode_start_page.html +++ /dev/null @@ -1,19 +0,0 @@ -<html DIR="LTR"> - <head> - <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" /> - <title>New incognito window</title> - </head> - <body> - <p><strong>You've gone incognito</strong>. Pages that you view in this window won't appear in your browser history or search history, and they won't leave other traces, such as cookies, on your device after you close the incognito window. However, any files that you download or bookmarks that you create will be preserved.</p> - - <p><strong>Going incognito doesn't affect the behaviour of other people, servers or software. Be cautious of:</strong></p> - - <ul> - <li>Websites that collect or share information about you</li> - <li>Internet service providers or employers that track the pages that you visit</li> - <li>Malicious software that tracks your keystrokes in exchange for free smileys</li> - <li>Surveillance by secret agents</li> - <li>People standing behind you</li> - </ul> - </body> -</html> diff --git a/core/res/res/raw-es-rUS-xlarge/incognito_mode_start_page.html b/core/res/res/raw-es-rUS-xlarge/incognito_mode_start_page.html deleted file mode 100644 index d283df56cbaf..000000000000 --- a/core/res/res/raw-es-rUS-xlarge/incognito_mode_start_page.html +++ /dev/null @@ -1,19 +0,0 @@ -<html DIR="LTR"> - <head> - <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" /> - <title>Nueva ventana de incógnito</title> - </head> - <body> - <p><strong>Estás de incógnito</strong>. Las páginas que veas en esta ventana no aparecerán en el historial de tu navegador ni en el historial de búsquedas, y cuando cierres la ventana de incógnito, tampoco quedará ningún otro rastro, como cookies, en tu dispositivo. Sin embargo, sí se preservarán los archivos que descargues o los favoritos que marques.</p> - - <p><strong>Estar de incógnito no afecta el comportamiento de otras personas, servidores o programas. Ten cuidado con:</strong></p> - - <ul> - <li>Sitios web que recaban o comparten tu información</li> - <li>Proveedores de servicio de Internet o empleadores que hacen un seguimiento de las páginas que visitas</li> - <li>Programas de software maliciosos que hacen un seguimiento de la actividad de tu teclado a cambio de emoticones gratuitos</li> - <li>Vigilancia a cargo de agentes secretos</li> - <li>Personas paradas atrás tuyo</li> - </ul> - </body> -</html> diff --git a/core/res/res/raw-es-rUS/incognito_mode_start_page.html b/core/res/res/raw-es-rUS/incognito_mode_start_page.html deleted file mode 100644 index d283df56cbaf..000000000000 --- a/core/res/res/raw-es-rUS/incognito_mode_start_page.html +++ /dev/null @@ -1,19 +0,0 @@ -<html DIR="LTR"> - <head> - <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" /> - <title>Nueva ventana de incógnito</title> - </head> - <body> - <p><strong>Estás de incógnito</strong>. Las páginas que veas en esta ventana no aparecerán en el historial de tu navegador ni en el historial de búsquedas, y cuando cierres la ventana de incógnito, tampoco quedará ningún otro rastro, como cookies, en tu dispositivo. Sin embargo, sí se preservarán los archivos que descargues o los favoritos que marques.</p> - - <p><strong>Estar de incógnito no afecta el comportamiento de otras personas, servidores o programas. Ten cuidado con:</strong></p> - - <ul> - <li>Sitios web que recaban o comparten tu información</li> - <li>Proveedores de servicio de Internet o empleadores que hacen un seguimiento de las páginas que visitas</li> - <li>Programas de software maliciosos que hacen un seguimiento de la actividad de tu teclado a cambio de emoticones gratuitos</li> - <li>Vigilancia a cargo de agentes secretos</li> - <li>Personas paradas atrás tuyo</li> - </ul> - </body> -</html> diff --git a/core/res/res/raw-es-xlarge/incognito_mode_start_page.html b/core/res/res/raw-es-xlarge/incognito_mode_start_page.html deleted file mode 100644 index 6d9b5014b615..000000000000 --- a/core/res/res/raw-es-xlarge/incognito_mode_start_page.html +++ /dev/null @@ -1,19 +0,0 @@ -<html DIR="LTR"> - <head> - <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" /> - <title>Nueva ventana de incógnito</title> - </head> - <body> - <p><strong>Estás navegando de incógnito</strong>. Las páginas que consultes a través de esta ventana no quedarán registradas en el historial del navegador ni en el historial de búsquedas, y tampoco dejarán otros rastros en el ordenador (como cookies) una vez cerrada. Los archivos que descargues y los marcadores que guardes sí se almacenarán. </p> - - <p><strong>La función de navegación de incógnito no afecta al comportamiento de los servidores o programas de software. Ten cuidado con:</strong></p> - - <ul> - <li>sitios web que recopilan o comparten información personal</li> - <li>proveedores de servicios de Internet o trabajadores de estas empresas que supervisan las páginas que visitas</li> - <li>software malicioso que realiza un seguimiento de las teclas que pulsas a cambio de emoticonos gratuitos</li> - <li>actividades de seguimiento por parte de terceros</li> - <li>personas merodeando cerca de tu ordenador</li> - </ul> - </body> -</html> diff --git a/core/res/res/raw-es/incognito_mode_start_page.html b/core/res/res/raw-es/incognito_mode_start_page.html deleted file mode 100644 index 6d9b5014b615..000000000000 --- a/core/res/res/raw-es/incognito_mode_start_page.html +++ /dev/null @@ -1,19 +0,0 @@ -<html DIR="LTR"> - <head> - <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" /> - <title>Nueva ventana de incógnito</title> - </head> - <body> - <p><strong>Estás navegando de incógnito</strong>. Las páginas que consultes a través de esta ventana no quedarán registradas en el historial del navegador ni en el historial de búsquedas, y tampoco dejarán otros rastros en el ordenador (como cookies) una vez cerrada. Los archivos que descargues y los marcadores que guardes sí se almacenarán. </p> - - <p><strong>La función de navegación de incógnito no afecta al comportamiento de los servidores o programas de software. Ten cuidado con:</strong></p> - - <ul> - <li>sitios web que recopilan o comparten información personal</li> - <li>proveedores de servicios de Internet o trabajadores de estas empresas que supervisan las páginas que visitas</li> - <li>software malicioso que realiza un seguimiento de las teclas que pulsas a cambio de emoticonos gratuitos</li> - <li>actividades de seguimiento por parte de terceros</li> - <li>personas merodeando cerca de tu ordenador</li> - </ul> - </body> -</html> diff --git a/core/res/res/raw-fa-xlarge/incognito_mode_start_page.html b/core/res/res/raw-fa-xlarge/incognito_mode_start_page.html deleted file mode 100644 index f004120a62e4..000000000000 --- a/core/res/res/raw-fa-xlarge/incognito_mode_start_page.html +++ /dev/null @@ -1,19 +0,0 @@ -<html DIR="RTL"> - <head> - <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" /> - <title>پنجره ناشناس جدید</title> - </head> - <body> - <p><strong>شما به صورت ناشناس وارد شده اید</strong> صفحاتی که شما در این پنجره مشاهده میکنید در سابقه مرورگر یا سابقه جستجوی شما ظاهر نمیشوند، و پس از بستن پنجره ناشناس، دنباله ای از خود مانند کوکی ها روی دستگاه شما بر جای نمیگذارند. به هر حال، فایل های دانلود شده و نشانکهای صفحه ای که ایجاد کرده اید باقی خواهند ماند.</p> - - <p><strong>وارد شدن به صورت ناشناس، تاثیری بر روی رفتار افراد دیگر، سرورها و یا نرم افزارها ندارد. در خصوص موارد زیر هشیار باشید:</strong></p> - - <ul> - <li>وبسایت هایی که اطلاعاتی را در مورد شما جمع آوری کرده و به اشتراک میگذارند</li> - <li>تامین کننده های خدمات اینترنتی شما یا کارمندانی که صفحاتی که شما بازدید کرده اید را پیگیری میکنند</li> - <li>نرم افزارهای مخربی که در ازای نشانک های رایگان، ضربات کلیدهای شما را ذخیره میکنند</li> - <li>نظارت توسط نمایندگان سری</li> - <li>افرادی که پشت سرتان ایستاده اند</li> - </ul> - </body> -</html> diff --git a/core/res/res/raw-fa/incognito_mode_start_page.html b/core/res/res/raw-fa/incognito_mode_start_page.html deleted file mode 100644 index f004120a62e4..000000000000 --- a/core/res/res/raw-fa/incognito_mode_start_page.html +++ /dev/null @@ -1,19 +0,0 @@ -<html DIR="RTL"> - <head> - <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" /> - <title>پنجره ناشناس جدید</title> - </head> - <body> - <p><strong>شما به صورت ناشناس وارد شده اید</strong> صفحاتی که شما در این پنجره مشاهده میکنید در سابقه مرورگر یا سابقه جستجوی شما ظاهر نمیشوند، و پس از بستن پنجره ناشناس، دنباله ای از خود مانند کوکی ها روی دستگاه شما بر جای نمیگذارند. به هر حال، فایل های دانلود شده و نشانکهای صفحه ای که ایجاد کرده اید باقی خواهند ماند.</p> - - <p><strong>وارد شدن به صورت ناشناس، تاثیری بر روی رفتار افراد دیگر، سرورها و یا نرم افزارها ندارد. در خصوص موارد زیر هشیار باشید:</strong></p> - - <ul> - <li>وبسایت هایی که اطلاعاتی را در مورد شما جمع آوری کرده و به اشتراک میگذارند</li> - <li>تامین کننده های خدمات اینترنتی شما یا کارمندانی که صفحاتی که شما بازدید کرده اید را پیگیری میکنند</li> - <li>نرم افزارهای مخربی که در ازای نشانک های رایگان، ضربات کلیدهای شما را ذخیره میکنند</li> - <li>نظارت توسط نمایندگان سری</li> - <li>افرادی که پشت سرتان ایستاده اند</li> - </ul> - </body> -</html> diff --git a/core/res/res/raw-fi-xlarge/incognito_mode_start_page.html b/core/res/res/raw-fi-xlarge/incognito_mode_start_page.html deleted file mode 100644 index feb9f4faae32..000000000000 --- a/core/res/res/raw-fi-xlarge/incognito_mode_start_page.html +++ /dev/null @@ -1,19 +0,0 @@ -<html DIR="LTR"> - <head> - <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" /> - <title>Uusi incognito-ikkuna</title> - </head> - <body> - <p><strong>Olet nyt incognito-tilassa</strong>. Incognito-tilassa katsellut sivut eivät näy selainhistoriassa eikä hakuhistoriassa. Ne eivät myöskään jätä muita jälkiä, kuten evästeitä, sivun sulkemisen jälkeen. Lataamasi tiedostot tai luomasi kirjanmerkit tosin tallentuvat.</p> - - <p><strong>Incognito-tilaan siirtyminen ei vaikuta muiden ihmisten, palvelimien tai tietokoneohjelmien toimintaan. Varo:</strong></p> - - <ul> - <li>Verkkosivustoja jotka keräävät sinusta tietoa ja/tai jakavat sitä eteenpäin</li> - <li>Internet-palveluntarjoajia ja työnantajia jotka seuraavat sivuja, joilla käyt</li> - <li>Haittaohjelmia jotka seuraavat näppäimistön toimintaa ja tarjoavat vastineeksi ilmaisia hymiöitä</li> - <li>Salaisten agenttien seurantaa</li> - <li>Ihmisiä jotka seisovat takanasi</li> - </ul> - </body> -</html> diff --git a/core/res/res/raw-fi/incognito_mode_start_page.html b/core/res/res/raw-fi/incognito_mode_start_page.html deleted file mode 100644 index feb9f4faae32..000000000000 --- a/core/res/res/raw-fi/incognito_mode_start_page.html +++ /dev/null @@ -1,19 +0,0 @@ -<html DIR="LTR"> - <head> - <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" /> - <title>Uusi incognito-ikkuna</title> - </head> - <body> - <p><strong>Olet nyt incognito-tilassa</strong>. Incognito-tilassa katsellut sivut eivät näy selainhistoriassa eikä hakuhistoriassa. Ne eivät myöskään jätä muita jälkiä, kuten evästeitä, sivun sulkemisen jälkeen. Lataamasi tiedostot tai luomasi kirjanmerkit tosin tallentuvat.</p> - - <p><strong>Incognito-tilaan siirtyminen ei vaikuta muiden ihmisten, palvelimien tai tietokoneohjelmien toimintaan. Varo:</strong></p> - - <ul> - <li>Verkkosivustoja jotka keräävät sinusta tietoa ja/tai jakavat sitä eteenpäin</li> - <li>Internet-palveluntarjoajia ja työnantajia jotka seuraavat sivuja, joilla käyt</li> - <li>Haittaohjelmia jotka seuraavat näppäimistön toimintaa ja tarjoavat vastineeksi ilmaisia hymiöitä</li> - <li>Salaisten agenttien seurantaa</li> - <li>Ihmisiä jotka seisovat takanasi</li> - </ul> - </body> -</html> diff --git a/core/res/res/raw-fr-xlarge/incognito_mode_start_page.html b/core/res/res/raw-fr-xlarge/incognito_mode_start_page.html deleted file mode 100644 index 8962cdf28859..000000000000 --- a/core/res/res/raw-fr-xlarge/incognito_mode_start_page.html +++ /dev/null @@ -1,19 +0,0 @@ -<html DIR="LTR"> - <head> - <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" /> - <title>Nouvelle fenêtre de navigation privée</title> - </head> - <body> - <p><strong>Vous êtes passé en navigation privée</strong>. Les pages que vous consultez dans cette fenêtre n'apparaîtront ni dans l'historique de votre navigateur, ni dans l'historique des recherches, et ne laisseront aucune trace (comme les cookies) sur votre appareil une fois que vous aurez fermé la fenêtre de navigation privée. Tous les fichiers téléchargés et les favoris créés seront toutefois conservés.</p> - - <p><strong>Passer en navigation privée n'a aucun effet sur les autres utilisateurs, serveurs ou logiciels. Méfiez-vous :</strong></p> - - <ul> - <li>Des sites Web qui collectent ou partagent des informations vous concernant</li> - <li>Des fournisseurs d'accès Internet ou des employeurs qui conservent une trace des pages que vous visitez</li> - <li>Des programmes indésirables qui enregistrent vos frappes en échange d'émoticônes gratuites</li> - <li>Des personnes qui pourraient surveiller vos activités</li> - <li>Des personnes qui se tiennent derrière vous</li> - </ul> - </body> -</html> diff --git a/core/res/res/raw-fr/incognito_mode_start_page.html b/core/res/res/raw-fr/incognito_mode_start_page.html deleted file mode 100644 index 8962cdf28859..000000000000 --- a/core/res/res/raw-fr/incognito_mode_start_page.html +++ /dev/null @@ -1,19 +0,0 @@ -<html DIR="LTR"> - <head> - <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" /> - <title>Nouvelle fenêtre de navigation privée</title> - </head> - <body> - <p><strong>Vous êtes passé en navigation privée</strong>. Les pages que vous consultez dans cette fenêtre n'apparaîtront ni dans l'historique de votre navigateur, ni dans l'historique des recherches, et ne laisseront aucune trace (comme les cookies) sur votre appareil une fois que vous aurez fermé la fenêtre de navigation privée. Tous les fichiers téléchargés et les favoris créés seront toutefois conservés.</p> - - <p><strong>Passer en navigation privée n'a aucun effet sur les autres utilisateurs, serveurs ou logiciels. Méfiez-vous :</strong></p> - - <ul> - <li>Des sites Web qui collectent ou partagent des informations vous concernant</li> - <li>Des fournisseurs d'accès Internet ou des employeurs qui conservent une trace des pages que vous visitez</li> - <li>Des programmes indésirables qui enregistrent vos frappes en échange d'émoticônes gratuites</li> - <li>Des personnes qui pourraient surveiller vos activités</li> - <li>Des personnes qui se tiennent derrière vous</li> - </ul> - </body> -</html> diff --git a/core/res/res/raw-hi-xlarge/incognito_mode_start_page.html b/core/res/res/raw-hi-xlarge/incognito_mode_start_page.html deleted file mode 100644 index f73c41d01e9c..000000000000 --- a/core/res/res/raw-hi-xlarge/incognito_mode_start_page.html +++ /dev/null @@ -1,19 +0,0 @@ -<html DIR="LTR"> - <head> - <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" /> - <title>नई गुप्त विंडो</title> - </head> - <body> - <p><strong>आप गुप्त मोड में हैं</strong>. इस विंडो में देखे गए पृष्ठ आपके ब्राउज़र इतिहास या खोज इतिहास में प्रकट नहीं होंगे, और वे आपके डिवाइस पर गुप्त विंडो बंद करने के बाद और कोई चिह्न जैसे कुकीज़, नहीं छोड़ते. हालांकि डाउनलोड की गई या बुकमार्क की गई कोई भी फ़ाइल संरक्षित रखी जाएगी.</p> - - <p><strong>गुप्त मोड में होने से दूसरे लोगों, सर्वर. या सॉफ़्टवेयर पर कोई प्रभाव नहीं होता. इनका ध्यान रखें</strong></p> - - <ul> - <li>वे वेबसाइट जो आपके बारे में जानकारी एकत्र या शेयर करती हैं</li> - <li>इंटरनेट सेवा प्रदाता या नियोक्ता जो आपके द्वारा विज़िट किए गए पृष्ठों पर नज़र रखते हैं</li> - <li>दुर्भावनापूर्ण सॉफ़्टवेयर जो मुफ़्त स्माइली के बदले आपके कीस्ट्रोक पर नज़र रखते हैं.</li> - <li>गुप्तचरों द्वारा निगरानी</li> - <li>आपके पीछे खड़े लोग</li> - </ul> - </body> -</html> diff --git a/core/res/res/raw-hi/incognito_mode_start_page.html b/core/res/res/raw-hi/incognito_mode_start_page.html deleted file mode 100644 index f73c41d01e9c..000000000000 --- a/core/res/res/raw-hi/incognito_mode_start_page.html +++ /dev/null @@ -1,19 +0,0 @@ -<html DIR="LTR"> - <head> - <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" /> - <title>नई गुप्त विंडो</title> - </head> - <body> - <p><strong>आप गुप्त मोड में हैं</strong>. इस विंडो में देखे गए पृष्ठ आपके ब्राउज़र इतिहास या खोज इतिहास में प्रकट नहीं होंगे, और वे आपके डिवाइस पर गुप्त विंडो बंद करने के बाद और कोई चिह्न जैसे कुकीज़, नहीं छोड़ते. हालांकि डाउनलोड की गई या बुकमार्क की गई कोई भी फ़ाइल संरक्षित रखी जाएगी.</p> - - <p><strong>गुप्त मोड में होने से दूसरे लोगों, सर्वर. या सॉफ़्टवेयर पर कोई प्रभाव नहीं होता. इनका ध्यान रखें</strong></p> - - <ul> - <li>वे वेबसाइट जो आपके बारे में जानकारी एकत्र या शेयर करती हैं</li> - <li>इंटरनेट सेवा प्रदाता या नियोक्ता जो आपके द्वारा विज़िट किए गए पृष्ठों पर नज़र रखते हैं</li> - <li>दुर्भावनापूर्ण सॉफ़्टवेयर जो मुफ़्त स्माइली के बदले आपके कीस्ट्रोक पर नज़र रखते हैं.</li> - <li>गुप्तचरों द्वारा निगरानी</li> - <li>आपके पीछे खड़े लोग</li> - </ul> - </body> -</html> diff --git a/core/res/res/raw-hr-xlarge/incognito_mode_start_page.html b/core/res/res/raw-hr-xlarge/incognito_mode_start_page.html deleted file mode 100644 index 6f20fe0ecfd9..000000000000 --- a/core/res/res/raw-hr-xlarge/incognito_mode_start_page.html +++ /dev/null @@ -1,19 +0,0 @@ -<html DIR="LTR"> - <head> - <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" /> - <title>Novi anonimni prozor</title> - </head> - <body> - <p><strong>Sada ste anonimni</strong>. Stranice koje pregledavate u ovom prozoru neće se pojaviti u povijesti preglednika ili povijesti pretraživanja, neće ostaviti tragove, poput kolačića, na vašem uređaju nakon što zatvorite anonimni prozor. Međutim, sve datoteke koje preuzmete ili oznake koje stvorite bit će sačuvane.</p> - - <p><strong>Anonimno pregledavanje neće utjecati na ponašanje drugih osoba, poslužitelja ili softvera. Pazite na sljedeće:</strong></p> - - <ul> - <li>Web-lokacije koje prikupljaju ili dijele informacije o vama</li> - <li>Davatelje internetskih usluga ili poslodavce koji prate stranice koje posjećujete</li> - <li>Zlonamjerni softver koji prati koje tipke pritišćete u zamjenu za besplatne emotikone</li> - <li>Nadzor tajnih službi</li> - <li>Osobe koje stoje iza vas</li> - </ul> - </body> -</html> diff --git a/core/res/res/raw-hr/incognito_mode_start_page.html b/core/res/res/raw-hr/incognito_mode_start_page.html deleted file mode 100644 index 6f20fe0ecfd9..000000000000 --- a/core/res/res/raw-hr/incognito_mode_start_page.html +++ /dev/null @@ -1,19 +0,0 @@ -<html DIR="LTR"> - <head> - <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" /> - <title>Novi anonimni prozor</title> - </head> - <body> - <p><strong>Sada ste anonimni</strong>. Stranice koje pregledavate u ovom prozoru neće se pojaviti u povijesti preglednika ili povijesti pretraživanja, neće ostaviti tragove, poput kolačića, na vašem uređaju nakon što zatvorite anonimni prozor. Međutim, sve datoteke koje preuzmete ili oznake koje stvorite bit će sačuvane.</p> - - <p><strong>Anonimno pregledavanje neće utjecati na ponašanje drugih osoba, poslužitelja ili softvera. Pazite na sljedeće:</strong></p> - - <ul> - <li>Web-lokacije koje prikupljaju ili dijele informacije o vama</li> - <li>Davatelje internetskih usluga ili poslodavce koji prate stranice koje posjećujete</li> - <li>Zlonamjerni softver koji prati koje tipke pritišćete u zamjenu za besplatne emotikone</li> - <li>Nadzor tajnih službi</li> - <li>Osobe koje stoje iza vas</li> - </ul> - </body> -</html> diff --git a/core/res/res/raw-hu-xlarge/incognito_mode_start_page.html b/core/res/res/raw-hu-xlarge/incognito_mode_start_page.html deleted file mode 100644 index 38b0806a1d58..000000000000 --- a/core/res/res/raw-hu-xlarge/incognito_mode_start_page.html +++ /dev/null @@ -1,19 +0,0 @@ -<html DIR="LTR"> - <head> - <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" /> - <title>Új inkognitóablak</title> - </head> - <body> - <p><strong>Ön inkognitó módra váltott</strong>. Az inkognitóablakban megtekintett oldalak nem jelennek meg böngészője előzményeiben, illetve keresési előzményeiben, és nem hagynak más nyomot pl. cookie-t sem a számítógépén az inkognitóablak bezárását követően. A letöltött fájlok, valamint a létrehozott könyvjelzők azonban megmaradnak.</p> - - <p><strong>Az inkognitó üzemmód nem befolyásolja a többi felhasználó, szerver vagy szoftver viselkedését. Ügyeljen a következőkre:</strong></p> - - <ul> - <li>Olyan webhelyek, amelyek információt gyűjtenek vagy osztanak meg Önről</li> - <li>Olyan internetszolgáltatók vagy alkalmazottaik, akik nyomon követik az Ön által látogatott oldalakat</li> - <li>Olyan kártékony szoftverek, amelyek ingyenes hangulatjelekért cserébe nyomon követik billentyűbeviteleit</li> - <li>Titkos ügynökök megfigyelése</li> - <li>Az Ön mögött álló emberek</li> - </ul> - </body> -</html> diff --git a/core/res/res/raw-hu/incognito_mode_start_page.html b/core/res/res/raw-hu/incognito_mode_start_page.html deleted file mode 100644 index 38b0806a1d58..000000000000 --- a/core/res/res/raw-hu/incognito_mode_start_page.html +++ /dev/null @@ -1,19 +0,0 @@ -<html DIR="LTR"> - <head> - <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" /> - <title>Új inkognitóablak</title> - </head> - <body> - <p><strong>Ön inkognitó módra váltott</strong>. Az inkognitóablakban megtekintett oldalak nem jelennek meg böngészője előzményeiben, illetve keresési előzményeiben, és nem hagynak más nyomot pl. cookie-t sem a számítógépén az inkognitóablak bezárását követően. A letöltött fájlok, valamint a létrehozott könyvjelzők azonban megmaradnak.</p> - - <p><strong>Az inkognitó üzemmód nem befolyásolja a többi felhasználó, szerver vagy szoftver viselkedését. Ügyeljen a következőkre:</strong></p> - - <ul> - <li>Olyan webhelyek, amelyek információt gyűjtenek vagy osztanak meg Önről</li> - <li>Olyan internetszolgáltatók vagy alkalmazottaik, akik nyomon követik az Ön által látogatott oldalakat</li> - <li>Olyan kártékony szoftverek, amelyek ingyenes hangulatjelekért cserébe nyomon követik billentyűbeviteleit</li> - <li>Titkos ügynökök megfigyelése</li> - <li>Az Ön mögött álló emberek</li> - </ul> - </body> -</html> diff --git a/core/res/res/raw-id-xlarge/incognito_mode_start_page.html b/core/res/res/raw-id-xlarge/incognito_mode_start_page.html deleted file mode 100644 index 788c08868012..000000000000 --- a/core/res/res/raw-id-xlarge/incognito_mode_start_page.html +++ /dev/null @@ -1,19 +0,0 @@ -<html DIR="LTR"> - <head> - <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" /> - <title>Jendela penyamaran baru</title> - </head> - <body> - <p><strong>Anda menggunakan penyamaran</strong>. Laman yang Anda lihat di jendela ini tidak akan ditampilkan dalam riwayat peramban atau riwayat penelusuran, dan tidak akan meninggalkan jejak, seperti kuki, di perangkat setelah jendela penyamaran ditutup. Namun, berkas yang diunduh atau bookmark yang dibuat akan disimpan.</p> - - <p><strong>Menggunakan penyamaran tidak mempengaruhi perilaku orang lain, server, atau perangkat lunak. Waspadai:</strong></p> - - <ul> - <li>Situs web yang mengumpulkan atau berbagi informasi tentang Anda</li> - <li>Penyedia layanan internet atau tempat kerja yang melacak laman yang Anda kunjungi</li> - <li>Perangkat lunak jahat yang melacak penekanan tombol dengan imbalan smiley gratis</li> - <li>Pemantauan oleh agen rahasia</li> - <li>Orang yang berdiri di belakang Anda</li> - </ul> - </body> -</html> diff --git a/core/res/res/raw-id/incognito_mode_start_page.html b/core/res/res/raw-id/incognito_mode_start_page.html deleted file mode 100644 index 788c08868012..000000000000 --- a/core/res/res/raw-id/incognito_mode_start_page.html +++ /dev/null @@ -1,19 +0,0 @@ -<html DIR="LTR"> - <head> - <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" /> - <title>Jendela penyamaran baru</title> - </head> - <body> - <p><strong>Anda menggunakan penyamaran</strong>. Laman yang Anda lihat di jendela ini tidak akan ditampilkan dalam riwayat peramban atau riwayat penelusuran, dan tidak akan meninggalkan jejak, seperti kuki, di perangkat setelah jendela penyamaran ditutup. Namun, berkas yang diunduh atau bookmark yang dibuat akan disimpan.</p> - - <p><strong>Menggunakan penyamaran tidak mempengaruhi perilaku orang lain, server, atau perangkat lunak. Waspadai:</strong></p> - - <ul> - <li>Situs web yang mengumpulkan atau berbagi informasi tentang Anda</li> - <li>Penyedia layanan internet atau tempat kerja yang melacak laman yang Anda kunjungi</li> - <li>Perangkat lunak jahat yang melacak penekanan tombol dengan imbalan smiley gratis</li> - <li>Pemantauan oleh agen rahasia</li> - <li>Orang yang berdiri di belakang Anda</li> - </ul> - </body> -</html> diff --git a/core/res/res/raw-it-xlarge/incognito_mode_start_page.html b/core/res/res/raw-it-xlarge/incognito_mode_start_page.html deleted file mode 100644 index 4a34874462da..000000000000 --- a/core/res/res/raw-it-xlarge/incognito_mode_start_page.html +++ /dev/null @@ -1,19 +0,0 @@ -<html DIR="LTR"> - <head> - <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" /> - <title>Nuova finestra di navigazione in incognito</title> - </head> - <body> - <p><strong>Sei passato alla navigazione in incognito</strong>. Le pagine aperte in questa finestra non vengono registrate nella cronologia di navigazione o di ricerca, e non lasciano traccia sul tuo computer, ad esempio sotto forma di cookie, una volta chiusa la finestra. Tuttavia, qualsiasi file scaricato o preferito creato verrà conservato.</p> - - <p><strong>La navigazione in incognito non influisce sul comportamento di altri utenti, server o software. Diffida di:</strong></p> - - <ul> - <li>Siti web che raccolgono o condividono informazioni su di te</li> - <li>Provider di servizi Internet o datori di lavoro che registrano le pagine da te visitate</li> - <li>Software dannosi che registrano le sequenze di tasti da te utilizzate in cambio di smiley gratuiti</li> - <li>Agenti segreti</li> - <li>Persone che ti stanno alle spalle</li> - </ul> - </body> -</html> diff --git a/core/res/res/raw-it/incognito_mode_start_page.html b/core/res/res/raw-it/incognito_mode_start_page.html deleted file mode 100644 index 4a34874462da..000000000000 --- a/core/res/res/raw-it/incognito_mode_start_page.html +++ /dev/null @@ -1,19 +0,0 @@ -<html DIR="LTR"> - <head> - <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" /> - <title>Nuova finestra di navigazione in incognito</title> - </head> - <body> - <p><strong>Sei passato alla navigazione in incognito</strong>. Le pagine aperte in questa finestra non vengono registrate nella cronologia di navigazione o di ricerca, e non lasciano traccia sul tuo computer, ad esempio sotto forma di cookie, una volta chiusa la finestra. Tuttavia, qualsiasi file scaricato o preferito creato verrà conservato.</p> - - <p><strong>La navigazione in incognito non influisce sul comportamento di altri utenti, server o software. Diffida di:</strong></p> - - <ul> - <li>Siti web che raccolgono o condividono informazioni su di te</li> - <li>Provider di servizi Internet o datori di lavoro che registrano le pagine da te visitate</li> - <li>Software dannosi che registrano le sequenze di tasti da te utilizzate in cambio di smiley gratuiti</li> - <li>Agenti segreti</li> - <li>Persone che ti stanno alle spalle</li> - </ul> - </body> -</html> diff --git a/core/res/res/raw-iw-xlarge/incognito_mode_start_page.html b/core/res/res/raw-iw-xlarge/incognito_mode_start_page.html deleted file mode 100644 index 368dea0ed395..000000000000 --- a/core/res/res/raw-iw-xlarge/incognito_mode_start_page.html +++ /dev/null @@ -1,19 +0,0 @@ -<html DIR="RTL"> - <head> - <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" /> - <title>חלון חדש של גלישה בסתר</title> - </head> - <body> - <p><strong>עברת למצב של גלישה בסתר</strong>. דפים שאתה רואה בחלון זה לא יופיעו בהיסטוריית הדפדפן או בהיסטוריית החיפושים שלך, והם לא ישאירו עקבות אחרים, כמו קובצי cookie, לאחר שתסגור את חלון הגלישה בסתר. עם זאת, כל קובץ שאתה מוריד או כוכביות שאתה יוצר יישמרו.</p> - - <p><strong> גלישה בסתר לא משפיעה על התנהגותם של אנשים אחרים, שרתים אחרים או תוכנות אחרות. היזהר מ:</strong></p> - - <ul> - <li>אתרים שאוספים נתונים או משתפים מידע לגביך</li> - <li>ספקי שירות אינטרנט או עובדים שעוקבים אחר הדפים שבהם אתה מבקר</li> - <li>תוכנה זדונית שעוקבת אחר ההקשות שלך על המקשים בתמורה לסימני סמיילי בחינם</li> - <li>מעקב של סוכנים חשאיים</li> - <li>אנשים שעומדים מאחוריך</li> - </ul> - </body> -</html> diff --git a/core/res/res/raw-iw/incognito_mode_start_page.html b/core/res/res/raw-iw/incognito_mode_start_page.html deleted file mode 100644 index 368dea0ed395..000000000000 --- a/core/res/res/raw-iw/incognito_mode_start_page.html +++ /dev/null @@ -1,19 +0,0 @@ -<html DIR="RTL"> - <head> - <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" /> - <title>חלון חדש של גלישה בסתר</title> - </head> - <body> - <p><strong>עברת למצב של גלישה בסתר</strong>. דפים שאתה רואה בחלון זה לא יופיעו בהיסטוריית הדפדפן או בהיסטוריית החיפושים שלך, והם לא ישאירו עקבות אחרים, כמו קובצי cookie, לאחר שתסגור את חלון הגלישה בסתר. עם זאת, כל קובץ שאתה מוריד או כוכביות שאתה יוצר יישמרו.</p> - - <p><strong> גלישה בסתר לא משפיעה על התנהגותם של אנשים אחרים, שרתים אחרים או תוכנות אחרות. היזהר מ:</strong></p> - - <ul> - <li>אתרים שאוספים נתונים או משתפים מידע לגביך</li> - <li>ספקי שירות אינטרנט או עובדים שעוקבים אחר הדפים שבהם אתה מבקר</li> - <li>תוכנה זדונית שעוקבת אחר ההקשות שלך על המקשים בתמורה לסימני סמיילי בחינם</li> - <li>מעקב של סוכנים חשאיים</li> - <li>אנשים שעומדים מאחוריך</li> - </ul> - </body> -</html> diff --git a/core/res/res/raw-ja-xlarge/incognito_mode_start_page.html b/core/res/res/raw-ja-xlarge/incognito_mode_start_page.html deleted file mode 100644 index a58ad05c2ea7..000000000000 --- a/core/res/res/raw-ja-xlarge/incognito_mode_start_page.html +++ /dev/null @@ -1,19 +0,0 @@ -<html DIR="LTR"> - <head> - <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" /> - <title>新しいシークレットウィンドウ</title> - </head> - <body> - <p><strong>シークレットモードを使用中です</strong>。このウィンドウで開いたページはブラウザの履歴や検索履歴に残りません。このウィンドウを閉じるとCookieなどの記録も端末から消去されます。ただし、ダウンロードしたファイルやブックマークしたページは保存されます。</p> - - <p><strong>シークレットモードが他のユーザーやサーバー、ソフトウェアの動作に影響することはありません。なお、下記のようなケースにご注意ください。</strong></p> - - <ul> - <li>ユーザーの情報を収集、共有するウェブサイト</li> - <li>アクセスしたページをトラッキングするインターネットサービスプロバイダや雇用主</li> - <li>無料ダウンロードなどと一緒にインストールされ、キーストロークを記録するマルウェア</li> - <li>スパイ、諜報活動</li> - <li>背後にいる人</li> - </ul> - </body> -</html> diff --git a/core/res/res/raw-ja/incognito_mode_start_page.html b/core/res/res/raw-ja/incognito_mode_start_page.html deleted file mode 100644 index a58ad05c2ea7..000000000000 --- a/core/res/res/raw-ja/incognito_mode_start_page.html +++ /dev/null @@ -1,19 +0,0 @@ -<html DIR="LTR"> - <head> - <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" /> - <title>新しいシークレットウィンドウ</title> - </head> - <body> - <p><strong>シークレットモードを使用中です</strong>。このウィンドウで開いたページはブラウザの履歴や検索履歴に残りません。このウィンドウを閉じるとCookieなどの記録も端末から消去されます。ただし、ダウンロードしたファイルやブックマークしたページは保存されます。</p> - - <p><strong>シークレットモードが他のユーザーやサーバー、ソフトウェアの動作に影響することはありません。なお、下記のようなケースにご注意ください。</strong></p> - - <ul> - <li>ユーザーの情報を収集、共有するウェブサイト</li> - <li>アクセスしたページをトラッキングするインターネットサービスプロバイダや雇用主</li> - <li>無料ダウンロードなどと一緒にインストールされ、キーストロークを記録するマルウェア</li> - <li>スパイ、諜報活動</li> - <li>背後にいる人</li> - </ul> - </body> -</html> diff --git a/core/res/res/raw-ko-xlarge/incognito_mode_start_page.html b/core/res/res/raw-ko-xlarge/incognito_mode_start_page.html deleted file mode 100644 index 0e703b100102..000000000000 --- a/core/res/res/raw-ko-xlarge/incognito_mode_start_page.html +++ /dev/null @@ -1,19 +0,0 @@ -<html DIR="LTR"> - <head> - <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" /> - <title>새 시크릿 창</title> - </head> - <body> - <p><strong>시크릿 모드로 들어오셨습니다.</strong> 이 창에서 보는 페이지는 브라우저 기록이나 검색기록에 남지 않으며, 시크릿 창을 닫은 뒤 기기에 쿠기와 같은 흔적도 남기지 않습니다. 다운로드한 파일이나 생성한 북마크는 보관됩니다. </p> - - <p><strong>시크릿 모드를 이용해도 다른 사용자, 서버, 소프트웨어에 영향을 주지는 않습니다. 다음을 주의하세요.</strong></p> - - <ul> - <li>사용자에 대한 정보를 모으고 공유하는 웹사이트</li> - <li>방문 페이지를 추적하는 인터넷 서비스 제공업체나 직원 </li> - <li>스마일 이모티콘을 제공한다는 명목으로 입력 내용을 추적하는 악성 소프트웨어</li> - <li>비밀 개체를 통한 감시</li> - <li>뒤에서 사용자의 작업내용을 지켜보는 사람</li> - </ul> - </body> -</html> diff --git a/core/res/res/raw-ko/incognito_mode_start_page.html b/core/res/res/raw-ko/incognito_mode_start_page.html deleted file mode 100644 index 0e703b100102..000000000000 --- a/core/res/res/raw-ko/incognito_mode_start_page.html +++ /dev/null @@ -1,19 +0,0 @@ -<html DIR="LTR"> - <head> - <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" /> - <title>새 시크릿 창</title> - </head> - <body> - <p><strong>시크릿 모드로 들어오셨습니다.</strong> 이 창에서 보는 페이지는 브라우저 기록이나 검색기록에 남지 않으며, 시크릿 창을 닫은 뒤 기기에 쿠기와 같은 흔적도 남기지 않습니다. 다운로드한 파일이나 생성한 북마크는 보관됩니다. </p> - - <p><strong>시크릿 모드를 이용해도 다른 사용자, 서버, 소프트웨어에 영향을 주지는 않습니다. 다음을 주의하세요.</strong></p> - - <ul> - <li>사용자에 대한 정보를 모으고 공유하는 웹사이트</li> - <li>방문 페이지를 추적하는 인터넷 서비스 제공업체나 직원 </li> - <li>스마일 이모티콘을 제공한다는 명목으로 입력 내용을 추적하는 악성 소프트웨어</li> - <li>비밀 개체를 통한 감시</li> - <li>뒤에서 사용자의 작업내용을 지켜보는 사람</li> - </ul> - </body> -</html> diff --git a/core/res/res/raw-lt-xlarge/incognito_mode_start_page.html b/core/res/res/raw-lt-xlarge/incognito_mode_start_page.html deleted file mode 100644 index 9244ae4398b1..000000000000 --- a/core/res/res/raw-lt-xlarge/incognito_mode_start_page.html +++ /dev/null @@ -1,19 +0,0 @@ -<html DIR="LTR"> - <head> - <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" /> - <title>Naujas inkognito langas</title> - </head> - <body> - <p><strong>Naršote inkognito režimu</strong>. Šiame lange peržiūrimi puslapiai nebus išsaugomi naršyklės istorijoje ar paieškos istorijoje ir uždarius inkognito langą nepaliks jokių kitų žymių, pvz., slapukų. Tačiau bus išsaugoti atsisiųsti failai ar sukurtos žymos.</p> - - <p><strong>Naršymas inkognito režimu nedaro jokios įtakos kitiems asmenims, serveriams ar programinei įrangai. Saugokitės:</strong></p> - - <ul> - <li>svetainių, kurios renka ar platina informaciją apie jus</li> - <li>interneto paslaugos teikėjų ar darbdavių, kurie stebi, kuriuos puslapius peržiūrite</li> - <li>kenkėjiškos programinės įrangos, kuri siūlydama nemokamų šypsniukų fiksuoja klavišų paspaudimus</li> - <li>jus galinčių sekti slaptųjų agentų</li> - <li>už nugaros stovinčių asmenų</li> - </ul> - </body> -</html> diff --git a/core/res/res/raw-lt/incognito_mode_start_page.html b/core/res/res/raw-lt/incognito_mode_start_page.html deleted file mode 100644 index 9244ae4398b1..000000000000 --- a/core/res/res/raw-lt/incognito_mode_start_page.html +++ /dev/null @@ -1,19 +0,0 @@ -<html DIR="LTR"> - <head> - <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" /> - <title>Naujas inkognito langas</title> - </head> - <body> - <p><strong>Naršote inkognito režimu</strong>. Šiame lange peržiūrimi puslapiai nebus išsaugomi naršyklės istorijoje ar paieškos istorijoje ir uždarius inkognito langą nepaliks jokių kitų žymių, pvz., slapukų. Tačiau bus išsaugoti atsisiųsti failai ar sukurtos žymos.</p> - - <p><strong>Naršymas inkognito režimu nedaro jokios įtakos kitiems asmenims, serveriams ar programinei įrangai. Saugokitės:</strong></p> - - <ul> - <li>svetainių, kurios renka ar platina informaciją apie jus</li> - <li>interneto paslaugos teikėjų ar darbdavių, kurie stebi, kuriuos puslapius peržiūrite</li> - <li>kenkėjiškos programinės įrangos, kuri siūlydama nemokamų šypsniukų fiksuoja klavišų paspaudimus</li> - <li>jus galinčių sekti slaptųjų agentų</li> - <li>už nugaros stovinčių asmenų</li> - </ul> - </body> -</html> diff --git a/core/res/res/raw-lv-xlarge/incognito_mode_start_page.html b/core/res/res/raw-lv-xlarge/incognito_mode_start_page.html deleted file mode 100644 index f325ef5267b9..000000000000 --- a/core/res/res/raw-lv-xlarge/incognito_mode_start_page.html +++ /dev/null @@ -1,19 +0,0 @@ -<html DIR="LTR"> - <head> - <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" /> - <title>Jauns inkognito logs</title> - </head> - <body> - <p><strong>Jūs esat ieslēdzis inkognito režīmu</strong>. Šajā logā aplūkotās lapas neparādīsies jūsu pārlūkprogrammas vēsturē vai meklēšanas vēsturē, tās arī neatstās citas pēdas, piemēram, sīkfailus, jūsu ierīcē pēc inkognito režīma loga aizvēršanas. Tomēr visi jūsu lejupielādētie faili vai izveidotās grāmatzīmes tiks saglabātas.</p> - - <p><strong>Inkognito režīma ieslēgšana neietekmēs citu personu, serveru vai programmatūras darbību. Uzmanieties no</strong></p> - - <ul> - <li>vietnēm, kas apkopo vai koplieto informāciju par jums;</li> - <li>interneta pakalpojumu sniedzējiem vai darba devējiem, kas izseko jūsu apmeklētajām lapām;</li> - <li>maldprogrammatūras, kas izseko jūsu taustiņsitieniem apmaiņā par bezmaksas smaidiņiem;</li> - <li>slepeno aģentu veiktas izmeklēšanas;</li> - <li>personām, kas stāv aiz jums.</li> - </ul> - </body> -</html> diff --git a/core/res/res/raw-lv/incognito_mode_start_page.html b/core/res/res/raw-lv/incognito_mode_start_page.html deleted file mode 100644 index f325ef5267b9..000000000000 --- a/core/res/res/raw-lv/incognito_mode_start_page.html +++ /dev/null @@ -1,19 +0,0 @@ -<html DIR="LTR"> - <head> - <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" /> - <title>Jauns inkognito logs</title> - </head> - <body> - <p><strong>Jūs esat ieslēdzis inkognito režīmu</strong>. Šajā logā aplūkotās lapas neparādīsies jūsu pārlūkprogrammas vēsturē vai meklēšanas vēsturē, tās arī neatstās citas pēdas, piemēram, sīkfailus, jūsu ierīcē pēc inkognito režīma loga aizvēršanas. Tomēr visi jūsu lejupielādētie faili vai izveidotās grāmatzīmes tiks saglabātas.</p> - - <p><strong>Inkognito režīma ieslēgšana neietekmēs citu personu, serveru vai programmatūras darbību. Uzmanieties no</strong></p> - - <ul> - <li>vietnēm, kas apkopo vai koplieto informāciju par jums;</li> - <li>interneta pakalpojumu sniedzējiem vai darba devējiem, kas izseko jūsu apmeklētajām lapām;</li> - <li>maldprogrammatūras, kas izseko jūsu taustiņsitieniem apmaiņā par bezmaksas smaidiņiem;</li> - <li>slepeno aģentu veiktas izmeklēšanas;</li> - <li>personām, kas stāv aiz jums.</li> - </ul> - </body> -</html> diff --git a/core/res/res/raw-nb-xlarge/incognito_mode_start_page.html b/core/res/res/raw-nb-xlarge/incognito_mode_start_page.html deleted file mode 100644 index 724e73433fcb..000000000000 --- a/core/res/res/raw-nb-xlarge/incognito_mode_start_page.html +++ /dev/null @@ -1,19 +0,0 @@ -<html DIR="LTR"> - <head> - <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" /> - <title>Nytt inkognitovindu</title> - </head> - <body> - <p><strong></strong>Du er nå inkognito Sider du besøker i dette vinduet blir ikke lagret i nettleser- eller søkelogg, og etterlater ikke andre spor, f. eks. informasjonskapsler, på enheten din etter at du har lukket vinduet. Filer du laster ned eller bokmerker du lager blir derimot lagret.</p> - - <p><strong>Det at du er inkognito endrer ikke hvordan andre mennesker, tjenere eller programmer oppfører seg. Pass deg for:</strong></p> - - <ul> - <li>Nettsider som samler eller deler informasjon om deg</li> - <li>Nettleverandører eller arbeidsgivere som overvåker hvilke sider du besøker</li> - <li>Skadelige programmer som følger med på tastetrykk i bytte mot smilefjes</li> - <li>Hemmelige agenter som spionerer på deg</li> - <li>Folk som titter over skulderen din</li> - </ul> - </body> -</html> diff --git a/core/res/res/raw-nb/incognito_mode_start_page.html b/core/res/res/raw-nb/incognito_mode_start_page.html deleted file mode 100644 index 724e73433fcb..000000000000 --- a/core/res/res/raw-nb/incognito_mode_start_page.html +++ /dev/null @@ -1,19 +0,0 @@ -<html DIR="LTR"> - <head> - <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" /> - <title>Nytt inkognitovindu</title> - </head> - <body> - <p><strong></strong>Du er nå inkognito Sider du besøker i dette vinduet blir ikke lagret i nettleser- eller søkelogg, og etterlater ikke andre spor, f. eks. informasjonskapsler, på enheten din etter at du har lukket vinduet. Filer du laster ned eller bokmerker du lager blir derimot lagret.</p> - - <p><strong>Det at du er inkognito endrer ikke hvordan andre mennesker, tjenere eller programmer oppfører seg. Pass deg for:</strong></p> - - <ul> - <li>Nettsider som samler eller deler informasjon om deg</li> - <li>Nettleverandører eller arbeidsgivere som overvåker hvilke sider du besøker</li> - <li>Skadelige programmer som følger med på tastetrykk i bytte mot smilefjes</li> - <li>Hemmelige agenter som spionerer på deg</li> - <li>Folk som titter over skulderen din</li> - </ul> - </body> -</html> diff --git a/core/res/res/raw-nl-xlarge/incognito_mode_start_page.html b/core/res/res/raw-nl-xlarge/incognito_mode_start_page.html deleted file mode 100644 index 92fedd725fe6..000000000000 --- a/core/res/res/raw-nl-xlarge/incognito_mode_start_page.html +++ /dev/null @@ -1,19 +0,0 @@ -<html DIR="LTR"> - <head> - <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" /> - <title>Nieuw incognitovenster</title> - </head> - <body> - <p><strong>U bent nu incognito</strong> De pagina's die u in dit venster bekijkt worden niet opgenomen in de browsergeschiedenis en de zoekgeschiedenis en laten geen cookies of andere sporen na op uw apparaat nadat u het incognitovenster hebt gesloten. Alle bestanden die u downloadt en bladwijzers die u maakt, blijven echter behouden.</p> - - <p><strong>Incognito zijn heeft geen invloed op het gedrag van andere personen, servers of software. Wees op uw hoede voor:</strong></p> - - <ul> - <li>Websites die informatie over u verzamelen of delen</li> - <li>Internetproviders of werkgevers die bijhouden welke pagina's u bezoekt</li> - <li>Schadelijke software die uw toetsaanslagen registreert in ruil voor gratis emoticons</li> - <li>Spionage door geheim agenten</li> - <li>Mensen die achter u staan</li> - </ul> - </body> -</html> diff --git a/core/res/res/raw-nl/incognito_mode_start_page.html b/core/res/res/raw-nl/incognito_mode_start_page.html deleted file mode 100644 index 92fedd725fe6..000000000000 --- a/core/res/res/raw-nl/incognito_mode_start_page.html +++ /dev/null @@ -1,19 +0,0 @@ -<html DIR="LTR"> - <head> - <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" /> - <title>Nieuw incognitovenster</title> - </head> - <body> - <p><strong>U bent nu incognito</strong> De pagina's die u in dit venster bekijkt worden niet opgenomen in de browsergeschiedenis en de zoekgeschiedenis en laten geen cookies of andere sporen na op uw apparaat nadat u het incognitovenster hebt gesloten. Alle bestanden die u downloadt en bladwijzers die u maakt, blijven echter behouden.</p> - - <p><strong>Incognito zijn heeft geen invloed op het gedrag van andere personen, servers of software. Wees op uw hoede voor:</strong></p> - - <ul> - <li>Websites die informatie over u verzamelen of delen</li> - <li>Internetproviders of werkgevers die bijhouden welke pagina's u bezoekt</li> - <li>Schadelijke software die uw toetsaanslagen registreert in ruil voor gratis emoticons</li> - <li>Spionage door geheim agenten</li> - <li>Mensen die achter u staan</li> - </ul> - </body> -</html> diff --git a/core/res/res/raw-pl-xlarge/incognito_mode_start_page.html b/core/res/res/raw-pl-xlarge/incognito_mode_start_page.html deleted file mode 100644 index 9748ead325a2..000000000000 --- a/core/res/res/raw-pl-xlarge/incognito_mode_start_page.html +++ /dev/null @@ -1,19 +0,0 @@ -<html DIR="LTR"> - <head> - <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" /> - <title>Nowe okno incognito</title> - </head> - <body> - <p><strong>Jesteś teraz incognito</strong> Strony przeglądane w tym oknie nie będą wyświetlane w historii przeglądarki ani w historii wyszukiwania. Po zamknięciu okna incognito na komputerze nie zostanie po nich żaden ślad np. w postaci plików cookie. Zachowane zostaną jednak pobrane pliki lub utworzone zakładki.</p> - - <p><strong>Przejście do trybu incognito nie ma wpływu na działania innych osób, serwery ani oprogramowanie. Należy uważać na:</strong></p> - - <ul> - <li>witryny zbierające lub udostępniające dane na temat użytkowników</li> - <li>dostawców usług internetowych oraz pracowników monitorujących strony odwiedzane przez użytkowników</li> - <li>złośliwe oprogramowanie śledzące naciśnięcia klawiszy (np. w zamian za darmowe emotikony)</li> - <li>aktywność wywiadowczą tajnych agentów</li> - <li>osoby stojące za plecami</li> - </ul> - </body> -</html> diff --git a/core/res/res/raw-pl/incognito_mode_start_page.html b/core/res/res/raw-pl/incognito_mode_start_page.html deleted file mode 100644 index 9748ead325a2..000000000000 --- a/core/res/res/raw-pl/incognito_mode_start_page.html +++ /dev/null @@ -1,19 +0,0 @@ -<html DIR="LTR"> - <head> - <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" /> - <title>Nowe okno incognito</title> - </head> - <body> - <p><strong>Jesteś teraz incognito</strong> Strony przeglądane w tym oknie nie będą wyświetlane w historii przeglądarki ani w historii wyszukiwania. Po zamknięciu okna incognito na komputerze nie zostanie po nich żaden ślad np. w postaci plików cookie. Zachowane zostaną jednak pobrane pliki lub utworzone zakładki.</p> - - <p><strong>Przejście do trybu incognito nie ma wpływu na działania innych osób, serwery ani oprogramowanie. Należy uważać na:</strong></p> - - <ul> - <li>witryny zbierające lub udostępniające dane na temat użytkowników</li> - <li>dostawców usług internetowych oraz pracowników monitorujących strony odwiedzane przez użytkowników</li> - <li>złośliwe oprogramowanie śledzące naciśnięcia klawiszy (np. w zamian za darmowe emotikony)</li> - <li>aktywność wywiadowczą tajnych agentów</li> - <li>osoby stojące za plecami</li> - </ul> - </body> -</html> diff --git a/core/res/res/raw-pt-rPT-xlarge/incognito_mode_start_page.html b/core/res/res/raw-pt-rPT-xlarge/incognito_mode_start_page.html deleted file mode 100644 index 89a5ab0de880..000000000000 --- a/core/res/res/raw-pt-rPT-xlarge/incognito_mode_start_page.html +++ /dev/null @@ -1,19 +0,0 @@ -<html DIR="LTR"> - <head> - <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" /> - <title>Nova janela de navegação anónima</title> - </head> - <body> - <p><strong>Está no modo de navegação anónima</strong>. As páginas que visualizar nesta janela não vão aparecer nos históricos de pesquisa ou de navegação e não deixarão quaisquer vestígios (por exemplo cookies) no computador depois de fechar a janela. No entanto se transferir ficheiros ou criar marcadores, estes serão preservados.</p> - - <p><strong>Navegar no modo de navegação anónima não afecta o comportamento de outras pessoas, nem o comportamento de servidores ou programas. Tenha cuidado com:</strong></p> - - <ul> - <li>Web sites que recolhem ou partilham informações sobre si</li> - <li>Serviços de fornecimento de internet ou empregadores que monitorizam as páginas que você visita</li> - <li>Programas maliciosos que monitorizam as teclas em que carrega em troca de ícones expressivos ("smileys")</li> - <li>Vigilância de agentes secretos</li> - <li>Pessoas que estejam perto de si</li> - </ul> - </body> -</html> diff --git a/core/res/res/raw-pt-rPT/incognito_mode_start_page.html b/core/res/res/raw-pt-rPT/incognito_mode_start_page.html deleted file mode 100644 index 89a5ab0de880..000000000000 --- a/core/res/res/raw-pt-rPT/incognito_mode_start_page.html +++ /dev/null @@ -1,19 +0,0 @@ -<html DIR="LTR"> - <head> - <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" /> - <title>Nova janela de navegação anónima</title> - </head> - <body> - <p><strong>Está no modo de navegação anónima</strong>. As páginas que visualizar nesta janela não vão aparecer nos históricos de pesquisa ou de navegação e não deixarão quaisquer vestígios (por exemplo cookies) no computador depois de fechar a janela. No entanto se transferir ficheiros ou criar marcadores, estes serão preservados.</p> - - <p><strong>Navegar no modo de navegação anónima não afecta o comportamento de outras pessoas, nem o comportamento de servidores ou programas. Tenha cuidado com:</strong></p> - - <ul> - <li>Web sites que recolhem ou partilham informações sobre si</li> - <li>Serviços de fornecimento de internet ou empregadores que monitorizam as páginas que você visita</li> - <li>Programas maliciosos que monitorizam as teclas em que carrega em troca de ícones expressivos ("smileys")</li> - <li>Vigilância de agentes secretos</li> - <li>Pessoas que estejam perto de si</li> - </ul> - </body> -</html> diff --git a/core/res/res/raw-pt-xlarge/incognito_mode_start_page.html b/core/res/res/raw-pt-xlarge/incognito_mode_start_page.html deleted file mode 100644 index b301eda73f49..000000000000 --- a/core/res/res/raw-pt-xlarge/incognito_mode_start_page.html +++ /dev/null @@ -1,19 +0,0 @@ -<html DIR="LTR"> - <head> - <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" /> - <title>Nova janela anônima</title> - </head> - <body> - <p><strong>Você ficou anônimo</strong>. As páginas que você vê nesta janela não aparecerão no histórico do seu navegador ou da sua pesquisa e não deixarão rastros, como cookies, no seu dispositivo depois que você fechar a janela anônima. Quaisquer arquivos que você fizer o download ou favoritos que criar serão preservados.</p> - - <p><strong>Tornar-se anônimo não afeta o comportamento de outras pessoas, servidores ou software. Esteja atento a:</strong></p> - - <ul> - <li>Websites que coletam ou compartilham informações sobre você</li> - <li>Provedores de serviços de internet ou funcionários que rastreiam as páginas que você visita</li> - <li>Softwares maliciosos que rastreiam os seus toques de teclado em troca de ícones gratuitos</li> - <li>Vigilância por agentes secretos</li> - <li>Pessoas paradas detrás de você</li> - </ul> - </body> -</html> diff --git a/core/res/res/raw-pt/incognito_mode_start_page.html b/core/res/res/raw-pt/incognito_mode_start_page.html deleted file mode 100644 index b301eda73f49..000000000000 --- a/core/res/res/raw-pt/incognito_mode_start_page.html +++ /dev/null @@ -1,19 +0,0 @@ -<html DIR="LTR"> - <head> - <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" /> - <title>Nova janela anônima</title> - </head> - <body> - <p><strong>Você ficou anônimo</strong>. As páginas que você vê nesta janela não aparecerão no histórico do seu navegador ou da sua pesquisa e não deixarão rastros, como cookies, no seu dispositivo depois que você fechar a janela anônima. Quaisquer arquivos que você fizer o download ou favoritos que criar serão preservados.</p> - - <p><strong>Tornar-se anônimo não afeta o comportamento de outras pessoas, servidores ou software. Esteja atento a:</strong></p> - - <ul> - <li>Websites que coletam ou compartilham informações sobre você</li> - <li>Provedores de serviços de internet ou funcionários que rastreiam as páginas que você visita</li> - <li>Softwares maliciosos que rastreiam os seus toques de teclado em troca de ícones gratuitos</li> - <li>Vigilância por agentes secretos</li> - <li>Pessoas paradas detrás de você</li> - </ul> - </body> -</html> diff --git a/core/res/res/raw-ro-xlarge/incognito_mode_start_page.html b/core/res/res/raw-ro-xlarge/incognito_mode_start_page.html deleted file mode 100644 index 3e499d30039c..000000000000 --- a/core/res/res/raw-ro-xlarge/incognito_mode_start_page.html +++ /dev/null @@ -1,19 +0,0 @@ -<html DIR="LTR"> - <head> - <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" /> - <title>Fereastră incognito nouă</title> - </head> - <body> - <p><strong>Navigaţi incognito</strong>. Paginile pe care le afişaţi în această fereastră nu vor apărea în istoricul browserului sau al căutărilor şi nu vor lăsa alte urme, precum cookie-uri, pe dispozitivul dvs. după ce închideţi fereastra incognito. Dar fişierele descărcate şi marcajele create vor fi păstrate.</p> - - <p><strong>Navigarea incognito nu influenţează comportamentul altor persoane, servere sau aplicaţii software. Fiţi atent(ă) la:</strong></p> - - <ul> - <li>site-urile web care colectează sau distribuie informaţii despre dvs.;</li> - <li>furnizorii de servicii de internet sau angajatorii care urmăresc paginile pe care le accesaţi;</li> - <li>aplicaţiile software rău intenţionate care vă urmăresc apăsările pe taste promiţându-vă că vă oferă emoticonuri gratuite;</li> - <li>acţiunile de monitorizare efectuate de agenţi secreţi;</li> - <li>persoanele din spatele dvs.</li> - </ul> - </body> -</html> diff --git a/core/res/res/raw-ro/incognito_mode_start_page.html b/core/res/res/raw-ro/incognito_mode_start_page.html deleted file mode 100644 index 3e499d30039c..000000000000 --- a/core/res/res/raw-ro/incognito_mode_start_page.html +++ /dev/null @@ -1,19 +0,0 @@ -<html DIR="LTR"> - <head> - <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" /> - <title>Fereastră incognito nouă</title> - </head> - <body> - <p><strong>Navigaţi incognito</strong>. Paginile pe care le afişaţi în această fereastră nu vor apărea în istoricul browserului sau al căutărilor şi nu vor lăsa alte urme, precum cookie-uri, pe dispozitivul dvs. după ce închideţi fereastra incognito. Dar fişierele descărcate şi marcajele create vor fi păstrate.</p> - - <p><strong>Navigarea incognito nu influenţează comportamentul altor persoane, servere sau aplicaţii software. Fiţi atent(ă) la:</strong></p> - - <ul> - <li>site-urile web care colectează sau distribuie informaţii despre dvs.;</li> - <li>furnizorii de servicii de internet sau angajatorii care urmăresc paginile pe care le accesaţi;</li> - <li>aplicaţiile software rău intenţionate care vă urmăresc apăsările pe taste promiţându-vă că vă oferă emoticonuri gratuite;</li> - <li>acţiunile de monitorizare efectuate de agenţi secreţi;</li> - <li>persoanele din spatele dvs.</li> - </ul> - </body> -</html> diff --git a/core/res/res/raw-ru-xlarge/incognito_mode_start_page.html b/core/res/res/raw-ru-xlarge/incognito_mode_start_page.html deleted file mode 100644 index ae7b59cacfec..000000000000 --- a/core/res/res/raw-ru-xlarge/incognito_mode_start_page.html +++ /dev/null @@ -1,19 +0,0 @@ -<html DIR="LTR"> - <head> - <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" /> - <title>Новое окно в режиме инкогнито</title> - </head> - <body> - <p><strong>Вы перешли в режим инкогнито</strong>. Страницы, которые вы просматриваете в окне в режиме инкогнито, не появятся в истории вашего браузера или истории поиска, а также не оставят на вашем компьютере других следов, таких как файлы cookie, когда вы закроете это окно. Тем не менее, все файлы, которые вы загружаете, или закладки, которые вы создаете, останутся в целости и сохранности. </p> - - <p><strong>Переход в режим инкогнито не влияет на поведение других пользователей, серверов или программ. Опасайтесь:</strong></p> - - <ul> - <li>Веб-сайтов, которые собирают информацию о вас или передают ее другим</li> - <li>Поставщиков услуг Интернета или их сотрудников, которые отслеживают, какие страницы вы посещаете</li> - <li>Вредоносного ПО, которое отслеживает нажатие клавиш клавиатуры в обмен на бесплатные смайлики</li> - <li>Слежки тайными агентами</li> - <li>Людей, которые стоят у вас за спиной</li> - </ul> - </body> -</html> diff --git a/core/res/res/raw-ru/incognito_mode_start_page.html b/core/res/res/raw-ru/incognito_mode_start_page.html deleted file mode 100644 index ae7b59cacfec..000000000000 --- a/core/res/res/raw-ru/incognito_mode_start_page.html +++ /dev/null @@ -1,19 +0,0 @@ -<html DIR="LTR"> - <head> - <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" /> - <title>Новое окно в режиме инкогнито</title> - </head> - <body> - <p><strong>Вы перешли в режим инкогнито</strong>. Страницы, которые вы просматриваете в окне в режиме инкогнито, не появятся в истории вашего браузера или истории поиска, а также не оставят на вашем компьютере других следов, таких как файлы cookie, когда вы закроете это окно. Тем не менее, все файлы, которые вы загружаете, или закладки, которые вы создаете, останутся в целости и сохранности. </p> - - <p><strong>Переход в режим инкогнито не влияет на поведение других пользователей, серверов или программ. Опасайтесь:</strong></p> - - <ul> - <li>Веб-сайтов, которые собирают информацию о вас или передают ее другим</li> - <li>Поставщиков услуг Интернета или их сотрудников, которые отслеживают, какие страницы вы посещаете</li> - <li>Вредоносного ПО, которое отслеживает нажатие клавиш клавиатуры в обмен на бесплатные смайлики</li> - <li>Слежки тайными агентами</li> - <li>Людей, которые стоят у вас за спиной</li> - </ul> - </body> -</html> diff --git a/core/res/res/raw-sk-xlarge/incognito_mode_start_page.html b/core/res/res/raw-sk-xlarge/incognito_mode_start_page.html deleted file mode 100644 index 5b138f1e087c..000000000000 --- a/core/res/res/raw-sk-xlarge/incognito_mode_start_page.html +++ /dev/null @@ -1,19 +0,0 @@ -<html DIR="LTR"> - <head> - <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" /> - <title>Nové okno inkognito</title> - </head> - <body> - <p><strong>Ste v režime inkognito</strong> Stránky, ktoré si pozriete v tomto okne, sa nezobrazia v histórii prehliadača ani v histórii vyhľadávania. Po zavretí okna inkognito na zariadení nezostanú ani žiadne iné stopy, ako sú napr. súbory cookie. Napriek tomu však zostanú zachované všetky prevzaté súbory aj záložky, ktoré ste vytvorili.</p> - - <p><strong>Režim inkognito neovplyvňuje správanie iných ľudí, serverov ani softvéru. Dávajte si pozor na:</strong></p> - - <ul> - <li>webové stránky, ktoré zbierajú alebo zdieľajú vaše informácie;</li> - <li>poskytovateľov internetových služieb alebo zamestnancov, ktorí sledujú vaše navštívené stránky;</li> - <li>škodlivý softvér, ktorý sleduje ktoré klávesy stláčate výmenou za smajlíkov zadarmo;</li> - <li>sledovanie tajnými agentmi;</li> - <li>ľudí, ktorí stoja za vami.</li> - </ul> - </body> -</html> diff --git a/core/res/res/raw-sk/incognito_mode_start_page.html b/core/res/res/raw-sk/incognito_mode_start_page.html deleted file mode 100644 index 5b138f1e087c..000000000000 --- a/core/res/res/raw-sk/incognito_mode_start_page.html +++ /dev/null @@ -1,19 +0,0 @@ -<html DIR="LTR"> - <head> - <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" /> - <title>Nové okno inkognito</title> - </head> - <body> - <p><strong>Ste v režime inkognito</strong> Stránky, ktoré si pozriete v tomto okne, sa nezobrazia v histórii prehliadača ani v histórii vyhľadávania. Po zavretí okna inkognito na zariadení nezostanú ani žiadne iné stopy, ako sú napr. súbory cookie. Napriek tomu však zostanú zachované všetky prevzaté súbory aj záložky, ktoré ste vytvorili.</p> - - <p><strong>Režim inkognito neovplyvňuje správanie iných ľudí, serverov ani softvéru. Dávajte si pozor na:</strong></p> - - <ul> - <li>webové stránky, ktoré zbierajú alebo zdieľajú vaše informácie;</li> - <li>poskytovateľov internetových služieb alebo zamestnancov, ktorí sledujú vaše navštívené stránky;</li> - <li>škodlivý softvér, ktorý sleduje ktoré klávesy stláčate výmenou za smajlíkov zadarmo;</li> - <li>sledovanie tajnými agentmi;</li> - <li>ľudí, ktorí stoja za vami.</li> - </ul> - </body> -</html> diff --git a/core/res/res/raw-sl-xlarge/incognito_mode_start_page.html b/core/res/res/raw-sl-xlarge/incognito_mode_start_page.html deleted file mode 100644 index 33a8b08fed49..000000000000 --- a/core/res/res/raw-sl-xlarge/incognito_mode_start_page.html +++ /dev/null @@ -1,19 +0,0 @@ -<html DIR="LTR"> - <head> - <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" /> - <title>Novo okno brez beleženja zgodovine</title> - </head> - <body> - <p><strong>Ste v načinu brez beleženja zgodovine.</strong> Strani, ki si jih ogledate v tem oknu, ne bodo prikazane v zgodovini brskalnika ali zgodovini iskanja, prav tako v vaši napravi ne bodo pustile sledi, kot npr. piškotkov, ko zaprete stran, ki jo imate odprto v tem načinu. Datoteke, ki jih prenesete ali zaznamki, ki jih ustvarite, bodo ohranjeni.</p> - - <p><strong>Funkcije brez beleženja zgodovine ne vplivajo na obnašanje drugih oseb, strežnikov ali programske opreme. Pazite na:</strong></p> - - <ul> - <li>Spletna mesta, ki zbirajo informacije o vas ali jih dajejo v skupno rabo.</li> - <li>Ponudnike internetnih storitev ali zaposlene, ki spremljajo spletna mesta, ki ste jih obiskali.</li> - <li>Zlonamerno programsko opremo, ki spremlja vaše tipkanje, v zameno pa vam ponuja brezplačne čustvene simbole.</li> - <li>Nadzor tajnih agentov.</li> - <li>Osebe, ki stojijo za vašim hrbtom.</li> - </ul> - </body> -</html> diff --git a/core/res/res/raw-sl/incognito_mode_start_page.html b/core/res/res/raw-sl/incognito_mode_start_page.html deleted file mode 100644 index 33a8b08fed49..000000000000 --- a/core/res/res/raw-sl/incognito_mode_start_page.html +++ /dev/null @@ -1,19 +0,0 @@ -<html DIR="LTR"> - <head> - <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" /> - <title>Novo okno brez beleženja zgodovine</title> - </head> - <body> - <p><strong>Ste v načinu brez beleženja zgodovine.</strong> Strani, ki si jih ogledate v tem oknu, ne bodo prikazane v zgodovini brskalnika ali zgodovini iskanja, prav tako v vaši napravi ne bodo pustile sledi, kot npr. piškotkov, ko zaprete stran, ki jo imate odprto v tem načinu. Datoteke, ki jih prenesete ali zaznamki, ki jih ustvarite, bodo ohranjeni.</p> - - <p><strong>Funkcije brez beleženja zgodovine ne vplivajo na obnašanje drugih oseb, strežnikov ali programske opreme. Pazite na:</strong></p> - - <ul> - <li>Spletna mesta, ki zbirajo informacije o vas ali jih dajejo v skupno rabo.</li> - <li>Ponudnike internetnih storitev ali zaposlene, ki spremljajo spletna mesta, ki ste jih obiskali.</li> - <li>Zlonamerno programsko opremo, ki spremlja vaše tipkanje, v zameno pa vam ponuja brezplačne čustvene simbole.</li> - <li>Nadzor tajnih agentov.</li> - <li>Osebe, ki stojijo za vašim hrbtom.</li> - </ul> - </body> -</html> diff --git a/core/res/res/raw-sr-xlarge/incognito_mode_start_page.html b/core/res/res/raw-sr-xlarge/incognito_mode_start_page.html deleted file mode 100644 index b1fbcb1324bd..000000000000 --- a/core/res/res/raw-sr-xlarge/incognito_mode_start_page.html +++ /dev/null @@ -1,19 +0,0 @@ -<html DIR="LTR"> - <head> - <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" /> - <title>Нов прозор без архивирања</title> - </head> - <body> - <p><strong>Ушли сте у режим без архивирања</strong> Странице које гледате у овом прозору се неће појавити у историји прегледања ни историји претраге, нити ће оставити друге трагове, попут колачића, на вашем уређају када затворите овај прозор. Међутим, ако преузмете датотеке или направите обележиваче, они ће бити сачувани.</p> - - <p><strong>Режим без архивирања не утиче на понашање других људи, сервера нити софтвера. Чувајте се:</strong></p> - - <ul> - <li>Веб сајтова који прикупљају и деле податке о вама</li> - <li>Добављача интернет услуга или запослених који прате странице које посетите</li> - <li>Злонамерног софтвера који прати шта куцате</li> - <li>Надзора тајних агената</li> - <li>Људи који вам стоје иза леђа</li> - </ul> - </body> -</html> diff --git a/core/res/res/raw-sr/incognito_mode_start_page.html b/core/res/res/raw-sr/incognito_mode_start_page.html deleted file mode 100644 index b1fbcb1324bd..000000000000 --- a/core/res/res/raw-sr/incognito_mode_start_page.html +++ /dev/null @@ -1,19 +0,0 @@ -<html DIR="LTR"> - <head> - <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" /> - <title>Нов прозор без архивирања</title> - </head> - <body> - <p><strong>Ушли сте у режим без архивирања</strong> Странице које гледате у овом прозору се неће појавити у историји прегледања ни историји претраге, нити ће оставити друге трагове, попут колачића, на вашем уређају када затворите овај прозор. Међутим, ако преузмете датотеке или направите обележиваче, они ће бити сачувани.</p> - - <p><strong>Режим без архивирања не утиче на понашање других људи, сервера нити софтвера. Чувајте се:</strong></p> - - <ul> - <li>Веб сајтова који прикупљају и деле податке о вама</li> - <li>Добављача интернет услуга или запослених који прате странице које посетите</li> - <li>Злонамерног софтвера који прати шта куцате</li> - <li>Надзора тајних агената</li> - <li>Људи који вам стоје иза леђа</li> - </ul> - </body> -</html> diff --git a/core/res/res/raw-sv-xlarge/incognito_mode_start_page.html b/core/res/res/raw-sv-xlarge/incognito_mode_start_page.html deleted file mode 100644 index 5ebbb22f409b..000000000000 --- a/core/res/res/raw-sv-xlarge/incognito_mode_start_page.html +++ /dev/null @@ -1,19 +0,0 @@ -<html DIR="LTR"> - <head> - <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" /> - <title>Nytt inkognitofönster</title> - </head> - <body> - <p><strong>Du använder inkognitoläget</strong>. Sidor som du har läst i detta fönster visas inte i din webbläsarhistorik eller sökhistorik. De lämnar inga spår efter sig, till exempel cookies, i din enhet efter att du stängt inkognitofönstret. Alla filer som du hämtar eller bokmärken du skapar sparas dock.</p> - - <p><strong>Att använda datorn inkognito påverkar inte användare, servrar eller program. Se upp för:</strong></p> - - <ul> - <li>Webbplatser som samlar eller delar information om dig</li> - <li>Internetleverantörer eller arbetsgivare som spårar var du surfar</li> - <li>Skadlig programvara som spårar dina tangenttryckningar som nyckelloggare</li> - <li>Övervakning av hemliga agenter</li> - <li>Personer som står bakom dig</li> - </ul> - </body> -</html> diff --git a/core/res/res/raw-sv/incognito_mode_start_page.html b/core/res/res/raw-sv/incognito_mode_start_page.html deleted file mode 100644 index 5ebbb22f409b..000000000000 --- a/core/res/res/raw-sv/incognito_mode_start_page.html +++ /dev/null @@ -1,19 +0,0 @@ -<html DIR="LTR"> - <head> - <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" /> - <title>Nytt inkognitofönster</title> - </head> - <body> - <p><strong>Du använder inkognitoläget</strong>. Sidor som du har läst i detta fönster visas inte i din webbläsarhistorik eller sökhistorik. De lämnar inga spår efter sig, till exempel cookies, i din enhet efter att du stängt inkognitofönstret. Alla filer som du hämtar eller bokmärken du skapar sparas dock.</p> - - <p><strong>Att använda datorn inkognito påverkar inte användare, servrar eller program. Se upp för:</strong></p> - - <ul> - <li>Webbplatser som samlar eller delar information om dig</li> - <li>Internetleverantörer eller arbetsgivare som spårar var du surfar</li> - <li>Skadlig programvara som spårar dina tangenttryckningar som nyckelloggare</li> - <li>Övervakning av hemliga agenter</li> - <li>Personer som står bakom dig</li> - </ul> - </body> -</html> diff --git a/core/res/res/raw-th-xlarge/incognito_mode_start_page.html b/core/res/res/raw-th-xlarge/incognito_mode_start_page.html deleted file mode 100644 index 29c64eb4c041..000000000000 --- a/core/res/res/raw-th-xlarge/incognito_mode_start_page.html +++ /dev/null @@ -1,19 +0,0 @@ -<html DIR="LTR"> - <head> - <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" /> - <title>หน้าต่างใหม่ที่ไม่ระบุตัวตน</title> - </head> - <body> - <p><strong>คุณได้เข้าสู่โหมดไม่ระบุตัวตนแล้ว</strong> หน้าเว็บที่คุณดูในหน้าต่างนี้จะไม่ปรากฏในประวัติของเบราว์เซอร์หรือประวัติการค้นหาของคุณ และจะไม่ทิ้งร่องรอยอื่นๆ เช่น คุกกี้ ไว้บนอุปกรณ์หลังจากที่คุณปิดหน้าต่างที่ไม่ระบุตัวตนนี้แล้ว อย่างไรก็ตาม ไฟล์ที่คุณดาวน์โหลดหรือบุ๊กมาร์กที่สร้างขึ้นจะถูกเก็บไว้</p> - - <p><strong>การเข้าสู่โหมดไม่ระบุตัวตนจะไม่กระทบต่อการทำงานของบุคคล เซิร์ฟเวอร์ หรือซอฟต์แวร์อื่น โปรดระวัง:</strong></p> - - <ul> - <li>เว็บไซต์ที่เก็บหรือแบ่งปันข้อมูลเกี่ยวกับคุณ</li> - <li>ผู้ให้บริการอินเทอร์เน็ตหรือนายจ้างที่ติดตามหน้าเว็บที่คุณเข้าชม</li> - <li>ซอฟต์แวร์มุ่งร้ายที่ติดตามการกดแป้นพิมพ์โดยมากับของฟรี</li> - <li>การตรวจสอบของหน่วยสืบราชการลับ</li> - <li>บุคคลที่ยืนอยู่ข้างหลังคุณ</li> - </ul> - </body> -</html> diff --git a/core/res/res/raw-th/incognito_mode_start_page.html b/core/res/res/raw-th/incognito_mode_start_page.html deleted file mode 100644 index 29c64eb4c041..000000000000 --- a/core/res/res/raw-th/incognito_mode_start_page.html +++ /dev/null @@ -1,19 +0,0 @@ -<html DIR="LTR"> - <head> - <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" /> - <title>หน้าต่างใหม่ที่ไม่ระบุตัวตน</title> - </head> - <body> - <p><strong>คุณได้เข้าสู่โหมดไม่ระบุตัวตนแล้ว</strong> หน้าเว็บที่คุณดูในหน้าต่างนี้จะไม่ปรากฏในประวัติของเบราว์เซอร์หรือประวัติการค้นหาของคุณ และจะไม่ทิ้งร่องรอยอื่นๆ เช่น คุกกี้ ไว้บนอุปกรณ์หลังจากที่คุณปิดหน้าต่างที่ไม่ระบุตัวตนนี้แล้ว อย่างไรก็ตาม ไฟล์ที่คุณดาวน์โหลดหรือบุ๊กมาร์กที่สร้างขึ้นจะถูกเก็บไว้</p> - - <p><strong>การเข้าสู่โหมดไม่ระบุตัวตนจะไม่กระทบต่อการทำงานของบุคคล เซิร์ฟเวอร์ หรือซอฟต์แวร์อื่น โปรดระวัง:</strong></p> - - <ul> - <li>เว็บไซต์ที่เก็บหรือแบ่งปันข้อมูลเกี่ยวกับคุณ</li> - <li>ผู้ให้บริการอินเทอร์เน็ตหรือนายจ้างที่ติดตามหน้าเว็บที่คุณเข้าชม</li> - <li>ซอฟต์แวร์มุ่งร้ายที่ติดตามการกดแป้นพิมพ์โดยมากับของฟรี</li> - <li>การตรวจสอบของหน่วยสืบราชการลับ</li> - <li>บุคคลที่ยืนอยู่ข้างหลังคุณ</li> - </ul> - </body> -</html> diff --git a/core/res/res/raw-tl-xlarge/incognito_mode_start_page.html b/core/res/res/raw-tl-xlarge/incognito_mode_start_page.html deleted file mode 100644 index 6ce5853de0cd..000000000000 --- a/core/res/res/raw-tl-xlarge/incognito_mode_start_page.html +++ /dev/null @@ -1,19 +0,0 @@ -<html DIR="LTR"> - <head> - <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" /> - <title>Bagong incognito window</title> - </head> - <body> - <p><strong>Nag-incognito ka</strong>. Hindi lalabas sa iyong kasaysayan ng pag-browse at kasaysayan ng paghahanap ang mga pahinang tiningnan mo sa window na ito, at hindi sila mag-iiwan ng ibang bakas, gaya ng cookies, sa iyong device matapos mong isara ang window na incognito. Gayunpaman, pananatiliin ang anumang mga file na iyong na-download o ang iyong mga ginawang bookmark.</p> - - <p><strong>Hindi nakakaapekto ang pagiging incognito sa gawi ng ibang mga tao, server, o software. Maging maingat sa:</strong></p> - - <ul> - <li>Mga website na kumokolekta o nagbabahagi ng impormasyong tungkol sa iyo</li> - <li>Mga internet service provider o mga employer na sinusubaybayan ang mga pahinang binibisita mo</li> - <li>Malicious software na sinusubaybayan ang iyong mga keystroke kapalit ng mga libreng smiley</li> - <li>Pagmamasid ng mga secret agent</li> - <li>Mga tao na nakatayo sa likuran mo</li> - </ul> - </body> -</html> diff --git a/core/res/res/raw-tl/incognito_mode_start_page.html b/core/res/res/raw-tl/incognito_mode_start_page.html deleted file mode 100644 index 6ce5853de0cd..000000000000 --- a/core/res/res/raw-tl/incognito_mode_start_page.html +++ /dev/null @@ -1,19 +0,0 @@ -<html DIR="LTR"> - <head> - <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" /> - <title>Bagong incognito window</title> - </head> - <body> - <p><strong>Nag-incognito ka</strong>. Hindi lalabas sa iyong kasaysayan ng pag-browse at kasaysayan ng paghahanap ang mga pahinang tiningnan mo sa window na ito, at hindi sila mag-iiwan ng ibang bakas, gaya ng cookies, sa iyong device matapos mong isara ang window na incognito. Gayunpaman, pananatiliin ang anumang mga file na iyong na-download o ang iyong mga ginawang bookmark.</p> - - <p><strong>Hindi nakakaapekto ang pagiging incognito sa gawi ng ibang mga tao, server, o software. Maging maingat sa:</strong></p> - - <ul> - <li>Mga website na kumokolekta o nagbabahagi ng impormasyong tungkol sa iyo</li> - <li>Mga internet service provider o mga employer na sinusubaybayan ang mga pahinang binibisita mo</li> - <li>Malicious software na sinusubaybayan ang iyong mga keystroke kapalit ng mga libreng smiley</li> - <li>Pagmamasid ng mga secret agent</li> - <li>Mga tao na nakatayo sa likuran mo</li> - </ul> - </body> -</html> diff --git a/core/res/res/raw-tr-xlarge/incognito_mode_start_page.html b/core/res/res/raw-tr-xlarge/incognito_mode_start_page.html deleted file mode 100644 index c570cc7e645f..000000000000 --- a/core/res/res/raw-tr-xlarge/incognito_mode_start_page.html +++ /dev/null @@ -1,19 +0,0 @@ -<html DIR="LTR"> - <head> - <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" /> - <title>Yeni gizli pencere</title> - </head> - <body> - <p><strong>Gizli moda geçtiniz</strong> Bu pencerede görüntülediğiniz sayfalar tarayıcı geçmişinizde veya arama geçmişinizde görünmez ve gizli pencereyi kapatmanızın ardından cihazınızda çerezler gibi izler bırakmaz. Ancak, indirdiğiniz dosyalar ve oluşturduğunuz favoriler korunur.</p> - - <p><strong>Gizli moda geçmeniz diğer kişilerin, sunucuların veya yazılımların davranışlarını etkilemez. Şu konularda dikkatli olun:</strong></p> - - <ul> - <li>Hakkınızda bilgi toplayan veya paylaşan web siteleri</li> - <li>Ziyaret ettiğiniz sayfaları izleyen şirket çalışanları veya servis sağlayıcıları</li> - <li>Ücretsiz ifade simgeleri karşılığında tuş vuruşlarınızı takip eden kötü niyetli yazılımlar</li> - <li>Gizli ajanlar tarafından takip edilme</li> - <li>Arkanızda dikilip ne yaptığınıza bakan kişiler</li> - </ul> - </body> -</html> diff --git a/core/res/res/raw-tr/incognito_mode_start_page.html b/core/res/res/raw-tr/incognito_mode_start_page.html deleted file mode 100644 index c570cc7e645f..000000000000 --- a/core/res/res/raw-tr/incognito_mode_start_page.html +++ /dev/null @@ -1,19 +0,0 @@ -<html DIR="LTR"> - <head> - <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" /> - <title>Yeni gizli pencere</title> - </head> - <body> - <p><strong>Gizli moda geçtiniz</strong> Bu pencerede görüntülediğiniz sayfalar tarayıcı geçmişinizde veya arama geçmişinizde görünmez ve gizli pencereyi kapatmanızın ardından cihazınızda çerezler gibi izler bırakmaz. Ancak, indirdiğiniz dosyalar ve oluşturduğunuz favoriler korunur.</p> - - <p><strong>Gizli moda geçmeniz diğer kişilerin, sunucuların veya yazılımların davranışlarını etkilemez. Şu konularda dikkatli olun:</strong></p> - - <ul> - <li>Hakkınızda bilgi toplayan veya paylaşan web siteleri</li> - <li>Ziyaret ettiğiniz sayfaları izleyen şirket çalışanları veya servis sağlayıcıları</li> - <li>Ücretsiz ifade simgeleri karşılığında tuş vuruşlarınızı takip eden kötü niyetli yazılımlar</li> - <li>Gizli ajanlar tarafından takip edilme</li> - <li>Arkanızda dikilip ne yaptığınıza bakan kişiler</li> - </ul> - </body> -</html> diff --git a/core/res/res/raw-uk-xlarge/incognito_mode_start_page.html b/core/res/res/raw-uk-xlarge/incognito_mode_start_page.html deleted file mode 100644 index 8852854b4110..000000000000 --- a/core/res/res/raw-uk-xlarge/incognito_mode_start_page.html +++ /dev/null @@ -1,19 +0,0 @@ -<html DIR="LTR"> - <head> - <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" /> - <title>Нове анонімне вікно</title> - </head> - <body> - <p><strong>Ви в анонімному режимі</strong>. Сторінки, які ви переглядаєте в цьому вікні, не з’являться в історії веб-переглядача чи в історії пошуку. Вони також не залишать жодних слідів, як-от файлів cookie, у вашому пристрої після того, як ви закриєте анонімне вікно. Однак, завантажені файли та збережені закладки залишаться.</p> - - <p><strong>Анонімний режим не впливає на поведінку інших людей, серверів чи програмного забезпечення. Остерігайтеся:</strong></p> - - <ul> - <li>веб-сайтів, які збирають чи поширюють інформацію про вас</li> - <li>постачальників інтернет-послуг або роботодавців, які відстежують сторінки, які ви відвідуєте</li> - <li>зловмисного програмного забезпечення, яке пропонує безкоштовні смайли, натомість реєструючи клавіші, які ви натискаєте</li> - <li>нагляду збоку секретних служб</li> - <li>людей за вашою спиною</li> - </ul> - </body> -</html> diff --git a/core/res/res/raw-uk/incognito_mode_start_page.html b/core/res/res/raw-uk/incognito_mode_start_page.html deleted file mode 100644 index 8852854b4110..000000000000 --- a/core/res/res/raw-uk/incognito_mode_start_page.html +++ /dev/null @@ -1,19 +0,0 @@ -<html DIR="LTR"> - <head> - <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" /> - <title>Нове анонімне вікно</title> - </head> - <body> - <p><strong>Ви в анонімному режимі</strong>. Сторінки, які ви переглядаєте в цьому вікні, не з’являться в історії веб-переглядача чи в історії пошуку. Вони також не залишать жодних слідів, як-от файлів cookie, у вашому пристрої після того, як ви закриєте анонімне вікно. Однак, завантажені файли та збережені закладки залишаться.</p> - - <p><strong>Анонімний режим не впливає на поведінку інших людей, серверів чи програмного забезпечення. Остерігайтеся:</strong></p> - - <ul> - <li>веб-сайтів, які збирають чи поширюють інформацію про вас</li> - <li>постачальників інтернет-послуг або роботодавців, які відстежують сторінки, які ви відвідуєте</li> - <li>зловмисного програмного забезпечення, яке пропонує безкоштовні смайли, натомість реєструючи клавіші, які ви натискаєте</li> - <li>нагляду збоку секретних служб</li> - <li>людей за вашою спиною</li> - </ul> - </body> -</html> diff --git a/core/res/res/raw-vi-xlarge/incognito_mode_start_page.html b/core/res/res/raw-vi-xlarge/incognito_mode_start_page.html deleted file mode 100644 index 9902cdef45cb..000000000000 --- a/core/res/res/raw-vi-xlarge/incognito_mode_start_page.html +++ /dev/null @@ -1,19 +0,0 @@ -<html DIR="LTR"> - <head> - <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" /> - <title>Cửa sổ ẩn danh mới</title> - </head> - <body> - <p><strong>Bạn đã sử dụng cửa sổ ẩn danh</strong>. Các trang bạn xem trong cửa sổ này sẽ không xuất hiện trong lịch sử của trình duyệt hoặc lịch sử tìm kiếm và chúng cũng không để lại dấu vết như cookie trên thiết bị sau khi bạn đóng cửa sổ ẩn danh. Tuy nhiên, mọi tệp bạn tải xuống hoặc mọi dấu trang bạn tạo sẽ được giữ nguyên.</p> - - <p><strong>Sử dụng cửa sổ ẩn danh không ảnh hưởng đến hành vi của người khác, của máy chủ hoặc phần mềm. Hãy cảnh giác với:</strong></p> - - <ul> - <li>Các trang web thu thập hoặc chia sẻ thông tin về bạn</li> - <li>Nhà cung cấp dịch vụ Internet hoặc ông chủ muốn theo dõi những trang bạn đã truy cập</li> - <li>Phần mềm độc hại theo dõi thao tác gõ phím khi nhập các mặt cười</li> - <li>Sự theo dõi của các cơ quan tình báo</li> - <li>Những người đứng đằng sau bạn</li> - </ul> - </body> -</html> diff --git a/core/res/res/raw-vi/incognito_mode_start_page.html b/core/res/res/raw-vi/incognito_mode_start_page.html deleted file mode 100644 index 9902cdef45cb..000000000000 --- a/core/res/res/raw-vi/incognito_mode_start_page.html +++ /dev/null @@ -1,19 +0,0 @@ -<html DIR="LTR"> - <head> - <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" /> - <title>Cửa sổ ẩn danh mới</title> - </head> - <body> - <p><strong>Bạn đã sử dụng cửa sổ ẩn danh</strong>. Các trang bạn xem trong cửa sổ này sẽ không xuất hiện trong lịch sử của trình duyệt hoặc lịch sử tìm kiếm và chúng cũng không để lại dấu vết như cookie trên thiết bị sau khi bạn đóng cửa sổ ẩn danh. Tuy nhiên, mọi tệp bạn tải xuống hoặc mọi dấu trang bạn tạo sẽ được giữ nguyên.</p> - - <p><strong>Sử dụng cửa sổ ẩn danh không ảnh hưởng đến hành vi của người khác, của máy chủ hoặc phần mềm. Hãy cảnh giác với:</strong></p> - - <ul> - <li>Các trang web thu thập hoặc chia sẻ thông tin về bạn</li> - <li>Nhà cung cấp dịch vụ Internet hoặc ông chủ muốn theo dõi những trang bạn đã truy cập</li> - <li>Phần mềm độc hại theo dõi thao tác gõ phím khi nhập các mặt cười</li> - <li>Sự theo dõi của các cơ quan tình báo</li> - <li>Những người đứng đằng sau bạn</li> - </ul> - </body> -</html> diff --git a/core/res/res/raw-xlarge/incognito_mode_start_page.html b/core/res/res/raw-xlarge/incognito_mode_start_page.html deleted file mode 100644 index 492658d29484..000000000000 --- a/core/res/res/raw-xlarge/incognito_mode_start_page.html +++ /dev/null @@ -1,24 +0,0 @@ -<html> - <head> - <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no"/> - <title>New incognito tab</title> - </head> - <body> - <p><strong>You've gone incognito</strong>. Pages you view in this tab - won't appear in your browser history or search history, and they won't - leave other traces, like cookies, on your device after you close the - incognito tab. Any files you download or bookmarks you create will be - preserved, however.</p> - - <p><strong>Going incognito doesn't affect the behavior of other people, - servers, or software. Be wary of:</strong></p> - - <ul> - <li>Websites that collect or share information about you</li> - <li>Internet service providers or employers that track the pages you visit</li> - <li>Malicious software that tracks your keystrokes in exchange for free smileys</li> - <li>Surveillance by secret agents</li> - <li>People standing behind you</li> - </ul> - </body> -</html> diff --git a/core/res/res/raw-zh-rCN-xlarge/incognito_mode_start_page.html b/core/res/res/raw-zh-rCN-xlarge/incognito_mode_start_page.html deleted file mode 100644 index 2caf8f8bc807..000000000000 --- a/core/res/res/raw-zh-rCN-xlarge/incognito_mode_start_page.html +++ /dev/null @@ -1,19 +0,0 @@ -<html DIR="LTR"> - <head> - <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" /> - <title>新建隐身窗口</title> - </head> - <body> - <p><strong>您已进入隐身模式</strong>。当关闭隐身窗口后,您在此窗口中查看的网页将不会出现在您的浏览器历史记录或搜索记录中,也不会在您的设备留下任何踪迹(如 cookie)。但是,您下载的任何文件或您创建的书签会予以保留。</p> - - <p><strong>进入隐身模式不会影响他人、其他服务器或软件的行为。敬请提防:</strong></p> - - <ul> - <li>搜集并分享有关您的信息的网站</li> - <li>跟踪您所访问的网页的互联网服务提供商或雇主</li> - <li>跟踪您的键盘输入内容以换取免费表情符号的恶意软件</li> - <li>对您进行监视的秘密代理</li> - <li>站在您身后的人</li> - </ul> - </body> -</html> diff --git a/core/res/res/raw-zh-rCN/incognito_mode_start_page.html b/core/res/res/raw-zh-rCN/incognito_mode_start_page.html deleted file mode 100644 index 2caf8f8bc807..000000000000 --- a/core/res/res/raw-zh-rCN/incognito_mode_start_page.html +++ /dev/null @@ -1,19 +0,0 @@ -<html DIR="LTR"> - <head> - <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" /> - <title>新建隐身窗口</title> - </head> - <body> - <p><strong>您已进入隐身模式</strong>。当关闭隐身窗口后,您在此窗口中查看的网页将不会出现在您的浏览器历史记录或搜索记录中,也不会在您的设备留下任何踪迹(如 cookie)。但是,您下载的任何文件或您创建的书签会予以保留。</p> - - <p><strong>进入隐身模式不会影响他人、其他服务器或软件的行为。敬请提防:</strong></p> - - <ul> - <li>搜集并分享有关您的信息的网站</li> - <li>跟踪您所访问的网页的互联网服务提供商或雇主</li> - <li>跟踪您的键盘输入内容以换取免费表情符号的恶意软件</li> - <li>对您进行监视的秘密代理</li> - <li>站在您身后的人</li> - </ul> - </body> -</html> diff --git a/core/res/res/raw-zh-rTW-xlarge/incognito_mode_start_page.html b/core/res/res/raw-zh-rTW-xlarge/incognito_mode_start_page.html deleted file mode 100644 index 54eb40bbecd0..000000000000 --- a/core/res/res/raw-zh-rTW-xlarge/incognito_mode_start_page.html +++ /dev/null @@ -1,19 +0,0 @@ -<html DIR="LTR"> - <head> - <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" /> - <title>新的無痕式視窗</title> - </head> - <body> - <p><strong>您已開啟無痕式視窗</strong>。透過這個視窗開啟的網頁都不會出現在瀏覽器記錄和搜尋記錄中,而且您關閉此類視窗之後,裝置上並不會保留任何相關記錄 (例如 cookie)。不過系統會保存您的下載檔案和書籤。</p> - - <p><strong>無痕式視窗無法掌控人、伺服器和軟體的行為,所以請小心下列的人事物:</strong></p> - - <ul> - <li>會收集或分享您的相關資訊的網站</li> - <li>會追蹤您造訪網頁的網路服務供應商或雇主</li> - <li>以免費下載為誘因引誘您點擊的連結,其中通常隱藏鍵盤記錄惡意軟體</li> - <li>情報特務的監控</li> - <li>站在您身後的人</li> - </ul> - </body> -</html> diff --git a/core/res/res/raw-zh-rTW/incognito_mode_start_page.html b/core/res/res/raw-zh-rTW/incognito_mode_start_page.html deleted file mode 100644 index 54eb40bbecd0..000000000000 --- a/core/res/res/raw-zh-rTW/incognito_mode_start_page.html +++ /dev/null @@ -1,19 +0,0 @@ -<html DIR="LTR"> - <head> - <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" /> - <title>新的無痕式視窗</title> - </head> - <body> - <p><strong>您已開啟無痕式視窗</strong>。透過這個視窗開啟的網頁都不會出現在瀏覽器記錄和搜尋記錄中,而且您關閉此類視窗之後,裝置上並不會保留任何相關記錄 (例如 cookie)。不過系統會保存您的下載檔案和書籤。</p> - - <p><strong>無痕式視窗無法掌控人、伺服器和軟體的行為,所以請小心下列的人事物:</strong></p> - - <ul> - <li>會收集或分享您的相關資訊的網站</li> - <li>會追蹤您造訪網頁的網路服務供應商或雇主</li> - <li>以免費下載為誘因引誘您點擊的連結,其中通常隱藏鍵盤記錄惡意軟體</li> - <li>情報特務的監控</li> - <li>站在您身後的人</li> - </ul> - </body> -</html> diff --git a/core/res/res/raw/incognito_mode_start_page.html b/core/res/res/raw/incognito_mode_start_page.html deleted file mode 100644 index 5d7a3fbf98c0..000000000000 --- a/core/res/res/raw/incognito_mode_start_page.html +++ /dev/null @@ -1,24 +0,0 @@ -<html> - <head> - <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no"/> - <title>New incognito window</title> - </head> - <body> - <p><strong>You've gone incognito</strong>. Pages you view in this window - won't appear in your browser history or search history, and they won't - leave other traces, like cookies, on your device after you close the - incognito window. Any files you download or bookmarks you create will be - preserved, however.</p> - - <p><strong>Going incognito doesn't affect the behavior of other people, - servers, or software. Be wary of:</strong></p> - - <ul> - <li>Websites that collect or share information about you</li> - <li>Internet service providers or employers that track the pages you visit</li> - <li>Malicious software that tracks your keystrokes in exchange for free smileys</li> - <li>Surveillance by secret agents</li> - <li>People standing behind you</li> - </ul> - </body> -</html> diff --git a/core/res/res/values-notround-watch/config_material.xml b/core/res/res/values-notround-watch/config_material.xml new file mode 100644 index 000000000000..a99674f3f060 --- /dev/null +++ b/core/res/res/values-notround-watch/config_material.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2016 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<!-- These resources are around just to allow their values to be customized + for different hardware and product builds, only for Material theme. Do not translate. + + NOTE: The naming convention is "config_camelCaseValue". --> + +<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- Gravity that should be used for dialog text styles. Equivalent to: Gravity.START | Gravity.TOP --> + <integer name="config_dialogTextGravity">0x00800033</integer> +</resources> diff --git a/core/res/res/values-notround-watch/dimens.xml b/core/res/res/values-notround-watch/dimens.xml index f103aa91dcfe..f0204d0f2d34 100644 --- a/core/res/res/values-notround-watch/dimens.xml +++ b/core/res/res/values-notround-watch/dimens.xml @@ -24,4 +24,5 @@ <item name="input_extract_action_margin_bottom" type="fraction">0%</item> <item name="input_extract_action_button_width" type="dimen">24dp</item> <item name="input_extract_action_button_height" type="dimen">24dp</item> + <item name="input_extract_action_icon_padding" type="dimen">3dp</item> </resources> diff --git a/core/res/res/values-round-watch/config_material.xml b/core/res/res/values-round-watch/config_material.xml index bf445ef3fd0e..11798709f148 100644 --- a/core/res/res/values-round-watch/config_material.xml +++ b/core/res/res/values-round-watch/config_material.xml @@ -19,4 +19,10 @@ <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <!-- Don't clip on round screens so the list can scroll past the rounded edges. --> <bool name="config_preferenceFragmentClipToPadding">false</bool> + + <!-- Gravity that should be used for dialog text styles. Equivalent to: Gravity.CENTER_HORIZONTAL | Gravity.TOP --> + <integer name="config_dialogTextGravity">0x00000031</integer> + + <!-- The amount to offset when scrolling to a selection in an AlertDialog --> + <dimen name="config_alertDialogSelectionScrollOffset">@dimen/screen_percentage_15</dimen> </resources> diff --git a/core/res/res/values-round-watch/dimens.xml b/core/res/res/values-round-watch/dimens.xml index a12f49929929..1d8c669ac55b 100644 --- a/core/res/res/values-round-watch/dimens.xml +++ b/core/res/res/values-round-watch/dimens.xml @@ -24,4 +24,5 @@ <item name="input_extract_action_margin_bottom" type="fraction">2.1%</item> <item name="input_extract_action_button_width" type="dimen">32dp</item> <item name="input_extract_action_button_height" type="dimen">32dp</item> + <item name="input_extract_action_icon_padding" type="dimen">5dp</item> </resources> diff --git a/core/res/res/values-w180dp-notround-watch/dimens_material.xml b/core/res/res/values-w180dp-notround-watch/dimens_material.xml new file mode 100644 index 000000000000..79acf84b7e3f --- /dev/null +++ b/core/res/res/values-w180dp-notround-watch/dimens_material.xml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2016 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<resources> + <dimen name="text_size_display_4_material">80sp</dimen> + <dimen name="text_size_display_3_material">50sp</dimen> + <dimen name="text_size_display_2_material">40sp</dimen> + <dimen name="text_size_display_1_material">30sp</dimen> + <dimen name="text_size_headline_material">20sp</dimen> + <dimen name="text_size_title_material">18sp</dimen> + <dimen name="text_size_subhead_material">18sp</dimen> + <dimen name="text_size_title_material_toolbar">18dp</dimen> + <dimen name="text_size_subtitle_material_toolbar">18dp</dimen> + <dimen name="text_size_menu_material">18sp</dimen> + <dimen name="text_size_menu_header_material">16sp</dimen> + <dimen name="text_size_body_2_material">16sp</dimen> + <dimen name="text_size_body_1_material">16sp</dimen> + <dimen name="text_size_caption_material">14sp</dimen> + <dimen name="text_size_button_material">16sp</dimen> + + <dimen name="text_size_large_material">18sp</dimen> + <dimen name="text_size_medium_material">16sp</dimen> + <dimen name="text_size_small_material">14sp</dimen> +</resources> diff --git a/core/res/res/values-w210dp-round-watch/dimens_material.xml b/core/res/res/values-w210dp-round-watch/dimens_material.xml new file mode 100644 index 000000000000..79acf84b7e3f --- /dev/null +++ b/core/res/res/values-w210dp-round-watch/dimens_material.xml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2016 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<resources> + <dimen name="text_size_display_4_material">80sp</dimen> + <dimen name="text_size_display_3_material">50sp</dimen> + <dimen name="text_size_display_2_material">40sp</dimen> + <dimen name="text_size_display_1_material">30sp</dimen> + <dimen name="text_size_headline_material">20sp</dimen> + <dimen name="text_size_title_material">18sp</dimen> + <dimen name="text_size_subhead_material">18sp</dimen> + <dimen name="text_size_title_material_toolbar">18dp</dimen> + <dimen name="text_size_subtitle_material_toolbar">18dp</dimen> + <dimen name="text_size_menu_material">18sp</dimen> + <dimen name="text_size_menu_header_material">16sp</dimen> + <dimen name="text_size_body_2_material">16sp</dimen> + <dimen name="text_size_body_1_material">16sp</dimen> + <dimen name="text_size_caption_material">14sp</dimen> + <dimen name="text_size_button_material">16sp</dimen> + + <dimen name="text_size_large_material">18sp</dimen> + <dimen name="text_size_medium_material">16sp</dimen> + <dimen name="text_size_small_material">14sp</dimen> +</resources> diff --git a/core/res/res/values-notround-watch/styles_material.xml b/core/res/res/values-w225dp/dimens_material.xml index cd8521f48421..aa822a32c975 100644 --- a/core/res/res/values-notround-watch/styles_material.xml +++ b/core/res/res/values-w225dp/dimens_material.xml @@ -1,4 +1,4 @@ -<?xml version="1.0" encoding="UTF-8"?> +<?xml version="1.0" encoding="utf-8"?> <!-- Copyright (C) 2016 The Android Open Source Project Licensed under the Apache License, Version 2.0 (the "License"); @@ -14,5 +14,7 @@ limitations under the License. --> <resources> - <style name="TextAppearance.Material.AlertDialogMessage" parent="TextAppearance.Material.Body1"/> + <dimen name="screen_percentage_05">11.25dp</dimen> + <dimen name="screen_percentage_10">22.5dp</dimen> + <dimen name="screen_percentage_15">33.75dp</dimen> </resources> diff --git a/core/res/res/values-watch/colors_material.xml b/core/res/res/values-watch/colors_material.xml index 45eb9812f137..54eece4f2bdf 100644 --- a/core/res/res/values-watch/colors_material.xml +++ b/core/res/res/values-watch/colors_material.xml @@ -22,5 +22,5 @@ <color name="primary_material_dark">#4D4D4D</color> - <color name="button_material_dark">#ff999999</color> + <color name="button_material_dark">#ff919699</color> </resources> diff --git a/core/res/res/values-watch/config.xml b/core/res/res/values-watch/config.xml index 919519e5832a..7c05b7a8e362 100644 --- a/core/res/res/values-watch/config.xml +++ b/core/res/res/values-watch/config.xml @@ -57,4 +57,9 @@ <!-- Use a custom transition for RemoteViews. --> <bool name="config_overrideRemoteViewsActivityTransition">true</bool> + + <!-- Default value for android:focusableInTouchMode for some framework scrolling containers. + ListView/GridView are notably absent since this is their default anyway. + Set to true for watch devices. --> + <bool name="config_focusScrollContainersInTouchMode">true</bool> </resources> diff --git a/core/res/res/values-watch/config_material.xml b/core/res/res/values-watch/config_material.xml index 81b53e71b5d7..104d122e01d3 100644 --- a/core/res/res/values-watch/config_material.xml +++ b/core/res/res/values-watch/config_material.xml @@ -29,7 +29,4 @@ <!-- Always overscan by default to ensure onApplyWindowInsets will always be called. --> <bool name="config_windowOverscanByDefault">true</bool> - - <!-- Due to the smaller screen size, have dialog titles occupy more than 1 line. --> - <integer name="config_dialogWindowTitleMaxLines">3</integer> </resources> diff --git a/core/res/res/values-watch/dimens_material.xml b/core/res/res/values-watch/dimens_material.xml index d579434d5e30..b48cde62158a 100644 --- a/core/res/res/values-watch/dimens_material.xml +++ b/core/res/res/values-watch/dimens_material.xml @@ -14,5 +14,29 @@ limitations under the License. --> <resources> + <dimen name="text_size_display_4_material">71sp</dimen> + <dimen name="text_size_display_3_material">44sp</dimen> + <dimen name="text_size_display_2_material">36sp</dimen> + <dimen name="text_size_display_1_material">27sp</dimen> + <dimen name="text_size_headline_material">18sp</dimen> + <dimen name="text_size_title_material">16sp</dimen> + <dimen name="text_size_subhead_material">16sp</dimen> + <dimen name="text_size_title_material_toolbar">16dp</dimen> + <dimen name="text_size_subtitle_material_toolbar">16dp</dimen> + <dimen name="text_size_menu_material">16sp</dimen> + <dimen name="text_size_menu_header_material">14sp</dimen> + <dimen name="text_size_body_2_material">14sp</dimen> + <dimen name="text_size_body_1_material">14sp</dimen> + <dimen name="text_size_caption_material">12sp</dimen> + <dimen name="text_size_button_material">14sp</dimen> + + <dimen name="text_size_large_material">16sp</dimen> + <dimen name="text_size_medium_material">14sp</dimen> + <dimen name="text_size_small_material">12sp</dimen> + <item name="text_line_spacing_multiplier_material" format="float" type="dimen">1.2</item> + + <!-- Date and time picker legacy dimens --> + <dimen name="picker_top_margin">1dip</dimen> + <dimen name="picker_bottom_margin">1dip</dimen> </resources> diff --git a/core/res/res/layout-watch/number_picker_material.xml b/core/res/res/values-watch/integers.xml index a1c0921482ad..46ed97d83182 100644 --- a/core/res/res/layout-watch/number_picker_material.xml +++ b/core/res/res/values-watch/integers.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <!-- -** +/* ** Copyright 2012, The Android Open Source Project ** ** Licensed under the Apache License, Version 2.0 (the "License"); @@ -16,16 +16,10 @@ ** limitations under the License. */ --> +<resources> + <!-- Specifies date picker mode to be 'spinner' --> + <integer name="date_picker_mode_material">1</integer> -<merge xmlns:android="http://schemas.android.com/apk/res/android"> - - <view class="android.widget.NumberPicker$CustomEditText" - android:textAppearance="?android:attr/textAppearanceLarge" - android:id="@+id/numberpicker_input" - android:layout_width="fill_parent" - android:layout_height="wrap_content" - android:gravity="center" - android:singleLine="true" - android:background="@null" /> - -</merge> + <!-- Specifies time picker mode to be 'spinner' --> + <integer name="time_picker_mode_material">1</integer> +</resources> diff --git a/core/res/res/values-watch/styles_material.xml b/core/res/res/values-watch/styles_material.xml index a9f6e226510c..8a080d9c155d 100644 --- a/core/res/res/values-watch/styles_material.xml +++ b/core/res/res/values-watch/styles_material.xml @@ -61,11 +61,16 @@ please see styles_device_defaults.xml. <item name="divider">@empty</item> </style> + <style name="TextAppearance.Material.ListItem" parent="TextAppearance.Material.Body1" /> + <style name="TextAppearance.Material.ListItemSecondary" parent="TextAppearance.Material.Caption" /> + <style name="Widget.Material.TextView" parent="Widget.TextView"> <item name="breakStrategy">balanced</item> </style> - <style name="Widget.Material.ButtonBar" parent="Widget.Material.BaseButtonBar" /> + <style name="TextAppearance.Material.NumberPicker" parent="TextAppearance.Material.Body1"> + <item name="textSize">@dimen/text_size_medium_material</item> + </style> <!-- Alert dialog button bar button --> <style name="Widget.Material.Button.ButtonBar.AlertDialog" parent="Widget.Material.Button.Borderless.Small"> @@ -82,10 +87,18 @@ please see styles_device_defaults.xml. <item name="solidColor">@color/transparent</item> <item name="selectionDivider">@drawable/numberpicker_selection_divider</item> <item name="selectionDividerHeight">2dp</item> - <item name="selectionDividersDistance">48dp</item> - <item name="internalMinWidth">64dp</item> - <item name="internalMaxHeight">180dp</item> + <item name="selectionDividersDistance">24dp</item> + <item name="internalMinWidth">32dp</item> + <item name="internalMaxHeight">90dp</item> <item name="virtualButtonPressedDrawable">?selectableItemBackground</item> <item name="descendantFocusability">blocksDescendants</item> </style> + + <style name="DialogWindowTitle.Material"> + <item name="maxLines">3</item> + <item name="scrollHorizontally">false</item> + <item name="textAppearance">@style/TextAppearance.Material.DialogWindowTitle</item> + <item name="gravity">@integer/config_dialogTextGravity</item> + <item name="ellipsize">end</item> + </style> </resources> diff --git a/core/res/res/values-watch/themes_material.xml b/core/res/res/values-watch/themes_material.xml index 4ae4367e8bc7..84bc25f26db4 100644 --- a/core/res/res/values-watch/themes_material.xml +++ b/core/res/res/values-watch/themes_material.xml @@ -59,4 +59,17 @@ please see styles_device_defaults.xml. <item name="colorBackgroundCacheHint">@color/background_cache_hint_selector_material_light</item> <item name="windowIsFloating">false</item> </style> + + <!-- Force all settings themes to use normal Material theme. --> + <style name="Theme.Material.Settings" parent="Theme.Material"/> + <style name="Theme.Material.Settings.NoActionBar" parent="Theme.Material"/> + <style name="Theme.Material.Settings.BaseDialog" parent="Theme.Material.Dialog"/> + <style name="Theme.Material.Settings.Dialog" parent="Theme.Material.Settings.BaseDialog"/> + <style name="Theme.Material.Settings.Dialog.BaseAlert" parent="Theme.Material.Dialog.BaseAlert"/> + <style name="Theme.Material.Settings.Dialog.Alert" parent="Theme.Material.Settings.Dialog.BaseAlert"/> + <style name="Theme.Material.Settings.DialogWhenLarge" parent="Theme.Material.DialogWhenLarge"/> + <style name="Theme.Material.Settings.DialogWhenLarge.NoActionBar" parent="Theme.Material.DialogWhenLarge.NoActionBar"/> + <style name="Theme.Material.Settings.Dialog.Presentation" parent="Theme.Material.Dialog.Presentation"/> + <style name="Theme.Material.Settings.SearchBar" parent="Theme.Material.SearchBar"/> + <style name="Theme.Material.Settings.CompactMenu" parent="Theme.Material.CompactMenu"/> </resources> diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml index 30a1a28617e5..4c9f33e339b5 100644 --- a/core/res/res/values/attrs.xml +++ b/core/res/res/values/attrs.xml @@ -2057,6 +2057,8 @@ i <!-- Controller for micro specific layout. --> <enum name="micro" value="1" /> </attr> + <!-- @hide Offset when scrolling to a selection. --> + <attr name="selectionScrollOffset" format="dimension" /> </declare-styleable> <!-- @hide --> diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index 18467ae3a11e..8a77fc94a48a 100644 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -202,7 +202,7 @@ <!-- The threshold angle for any motion detection in auto-power save modes. In hundreths of a degree. --> - <integer name="config_autoPowerModeThresholdAngle">200</integer> + <integer name="config_autoPowerModeThresholdAngle">10</integer> <!-- The sensor id of an "any motion" sensor used in auto-power save modes. 0 indicates this sensor is not available. --> @@ -551,9 +551,12 @@ Software implementation will be used if config_hardware_auto_brightness_available is not set --> <bool name="config_automatic_brightness_available">false</bool> - <!-- Fast brightness animation ramp rate --> + <!-- Fast brightness animation ramp rate in brightness units per second--> <integer translatable="false" name="config_brightness_ramp_rate_fast">200</integer> + <!-- Slow brightness animation ramp rate in brightness units per second--> + <integer translatable="false" name="config_brightness_ramp_rate_slow">40</integer> + <!-- Don't name config resources like this. It should look like config_annoyDianne --> <bool name="config_annoy_dianne">true</bool> @@ -808,6 +811,12 @@ --> <integer name="config_longPressOnBackBehavior">0</integer> + <!-- Control the behavior when the user panic presses the back button. + 0 - Nothing + 1 - Go to home + --> + <integer name="config_backPanicBehavior">0</integer> + <!-- Control the behavior when the user short presses the power button. 0 - Nothing 1 - Go to sleep (doze) @@ -1135,6 +1144,40 @@ <integer-array name="config_autoBrightnessKeyboardBacklightValues"> </integer-array> + <!-- Array of hysteresis constraint values for brightening, represented as tenths of a + percent. The length of this array is assumed to be one greater than + config_dynamicHysteresisLuxLevels. The brightening threshold is calculated as + lux * (1.0f + CONSTRAINT_VALUE). When the current lux is higher than this threshold, + the screen brightness is recalculated. See the config_dynamicHysteresisLuxLevels + description for how the constraint value is chosen. --> + <integer-array name="config_dynamicHysteresisBrightLevels"> + <item>100</item> + </integer-array> + + <!-- Array of hysteresis constraint values for darkening, represented as tenths of a + percent. The length of this array is assumed to be one greater than + config_dynamicHysteresisLuxLevels. The darkening threshold is calculated as + lux * (1.0f - CONSTRAINT_VALUE). When the current lux is lower than this threshold, + the screen brightness is recalculated. See the config_dynamicHysteresisLuxLevels + description for how the constraint value is chosen. --> + <integer-array name="config_dynamicHysteresisDarkLevels"> + <item>200</item> + </integer-array> + + <!-- Array of ambient lux threshold values. This is used for determining hysteresis constraint + values by calculating the index to use for lookup and then setting the constraint value + to the corresponding value of the array. The new brightening hysteresis constraint value + is the n-th element of config_dynamicHysteresisBrightLevels, and the new darkening + hysteresis constraint value is the n-th element of config_dynamicHysteresisDarkLevels. + + The (zero-based) index is calculated as follows: (MAX is the largest index of the array) + condition calculated index + value < lux[0] 0 + lux[n] <= value < lux[n+1] n+1 + lux[MAX] <= value MAX+1 --> + <integer-array name="config_dynamicHysteresisLuxLevels"> + </integer-array> + <!-- Amount of time it takes for the light sensor to warm up in milliseconds. For this time after the screen turns on, the Power Manager will not debounce light sensor readings --> @@ -1756,6 +1799,10 @@ <!-- Amount of time in ms the user needs to press the relevant key to bring up the global actions dialog --> <integer name="config_globalActionsKeyTimeout">500</integer> + <!-- Distance that should be scrolled in response to a {@link MotionEvent#ACTION_SCROLL event} + with an axis value of 1. --> + <dimen name="config_scrollFactor">64dp</dimen> + <!-- Maximum number of grid columns permitted in the ResolverActivity used for picking activities to handle an intent. --> <integer name="config_maxResolverActivityColumns">3</integer> @@ -2547,6 +2594,14 @@ <string-array translatable="false" name="config_defaultFirstUserRestrictions"> </string-array> + <!-- Default value for android:focusableInTouchMode for some framework scrolling containers. + ListView/GridView are notably absent since this is their default anyway. + Set to true for watch devices. --> + <bool name="config_focusScrollContainersInTouchMode">false</bool> + + <string name="config_networkOverLimitComponent" translatable="false">com.android.systemui/com.android.systemui.net.NetworkOverLimitActivity</string> + <string name="config_dataUsageSummaryComponent" translatable="false">com.android.settings/com.android.settings.Settings$DataUsageSummaryActivity</string> + <!-- A array of regex to treat a SMS as VVM SMS if the message body matches. Each item represents an entry, which consists of two parts: a comma (,) separated list of MCCMNC the regex applies to, followed by a semicolon (;), and diff --git a/core/res/res/values/config_material.xml b/core/res/res/values/config_material.xml index a37be837d9f1..29494db40557 100644 --- a/core/res/res/values/config_material.xml +++ b/core/res/res/values/config_material.xml @@ -32,9 +32,9 @@ <!-- True if windowOverscan should be on by default. --> <bool name="config_windowOverscanByDefault">false</bool> - <!-- Max number of lines for the dialog title. --> - <integer name="config_dialogWindowTitleMaxLines">1</integer> - <!-- True if preference fragment should clip to padding. --> <bool name="config_preferenceFragmentClipToPadding">true</bool> + + <!-- The amount to offset when scrolling to a selection in an AlertDialog --> + <dimen name="config_alertDialogSelectionScrollOffset">0dp</dimen> </resources> diff --git a/core/res/res/values/dimens_material.xml b/core/res/res/values/dimens_material.xml index f96cef9ad1c5..ae3116584e5d 100644 --- a/core/res/res/values/dimens_material.xml +++ b/core/res/res/values/dimens_material.xml @@ -189,4 +189,8 @@ <dimen name="day_picker_button_margin_top">0dp</dimen> <dimen name="datepicker_view_animator_height">226dp</dimen> + + <!-- Date and time picker legacy dimens --> + <dimen name="picker_top_margin">16dip</dimen> + <dimen name="picker_bottom_margin">16dip</dimen> </resources> diff --git a/core/res/res/values/integers.xml b/core/res/res/values/integers.xml index 71ac2f49ff71..2b69c75b7d9c 100644 --- a/core/res/res/values/integers.xml +++ b/core/res/res/values/integers.xml @@ -26,5 +26,12 @@ <integer name="date_picker_mode">1</integer> <integer name="time_picker_mode">1</integer> + + <!-- Specifies date picker mode to be 'calendar' --> + <integer name="date_picker_mode_material">2</integer> + + <!-- Specifies time picker mode to be 'clock' --> + <integer name="time_picker_mode_material">2</integer> + <integer name="date_picker_header_max_lines_material">2</integer> </resources> diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml index 26d24bc0d1ac..3a1fe53bee39 100644 --- a/core/res/res/values/strings.xml +++ b/core/res/res/values/strings.xml @@ -1960,7 +1960,7 @@ <string name="lockscreen_access_pattern_cleared">Pattern cleared</string> <!-- Accessibility description sent when user adds a dot to the pattern. [CHAR LIMIT=NONE] --> <string name="lockscreen_access_pattern_cell_added">Cell added</string> - <!-- Accessibility description sent when user adds a dot to the pattern. Announces the + <!-- Accessibility description sent when user adds a dot to the pattern. Announces the actual cell when headphones are connected [CHAR LIMIT=NONE] --> <string name="lockscreen_access_pattern_cell_added_verbose"> Cell <xliff:g id="cell_index" example="3">%1$s</xliff:g> added</string> @@ -2040,6 +2040,12 @@ <!-- Button to restart the device after the factory test. --> <string name="factorytest_reboot">Reboot</string> + <!-- Do not translate. timepicker mode, overridden for watch --> + <string name="time_picker_mode" translatable="false">"clock"</string> + + <!-- Do not translate. datepicker mode, overridden for watch --> + <string name="date_picker_mode" translatable="false">"calendar"</string> + <!-- Do not translate. WebView User Agent string --> <string name="web_user_agent" translatable="false">Mozilla/5.0 (Linux; U; <xliff:g id="x">Android %s</xliff:g>) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 <xliff:g id="mobile">%s</xliff:g>Safari/534.30</string> diff --git a/core/res/res/values/styles.xml b/core/res/res/values/styles.xml index 762cf31abd55..937428b12c60 100644 --- a/core/res/res/values/styles.xml +++ b/core/res/res/values/styles.xml @@ -649,11 +649,13 @@ please see styles_device_defaults.xml. <style name="Widget.ScrollView"> <item name="scrollbars">vertical</item> <item name="fadingEdge">vertical</item> + <item name="focusableInTouchMode">@bool/config_focusScrollContainersInTouchMode</item> </style> <style name="Widget.HorizontalScrollView"> <item name="scrollbars">horizontal</item> <item name="fadingEdge">horizontal</item> + <item name="focusableInTouchMode">@bool/config_focusScrollContainersInTouchMode</item> </style> <style name="Widget.ListView" parent="Widget.AbsListView"> diff --git a/core/res/res/values/styles_material.xml b/core/res/res/values/styles_material.xml index 443553754193..22bdf7e9616a 100644 --- a/core/res/res/values/styles_material.xml +++ b/core/res/res/values/styles_material.xml @@ -255,6 +255,8 @@ please see styles_device_defaults.xml. <item name="textColor">?attr/textColorPrimary</item> </style> + <style name="TextAppearance.Material.NumberPicker" parent="TextAppearance.Material.Body1"/> + <!-- Deprecated text styles --> <style name="TextAppearance.Material.Inverse"> @@ -475,6 +477,9 @@ please see styles_device_defaults.xml. <item name="textColor">#66000000</item> </style> + <style name="TextAppearance.Material.ListItem" parent="TextAppearance.Material.Subhead" /> + <style name="TextAppearance.Material.ListItemSecondary" parent="TextAppearance.Material.Body1" /> + <style name="Widget.Material.Notification.ProgressBar" parent="Widget.Material.Light.ProgressBar.Horizontal" /> <style name="Widget.Material.Notification.MessagingText" parent="Widget.Material.Light.TextView"> @@ -548,11 +553,7 @@ please see styles_device_defaults.xml. <item name="textOff">@string/capital_off</item> </style> - <style name="Widget.Material.BaseButtonBar"> - <item name="background">?attr/colorBackgroundFloating</item> - </style> - - <style name="Widget.Material.ButtonBar" parent="Widget.Material.BaseButtonBar"> + <style name="Widget.Material.ButtonBar"> <item name="background">@null</item> </style> @@ -684,7 +685,7 @@ please see styles_device_defaults.xml. </style> <style name="Widget.Material.TimePicker"> - <item name="timePickerMode">clock</item> + <item name="timePickerMode">@integer/time_picker_mode_material</item> <item name="legacyLayout">@layout/time_picker_legacy_material</item> <!-- Attributes for new-style TimePicker. --> <item name="internalLayout">@layout/time_picker_material</item> @@ -698,7 +699,7 @@ please see styles_device_defaults.xml. </style> <style name="Widget.Material.DatePicker"> - <item name="datePickerMode">calendar</item> + <item name="datePickerMode">@integer/date_picker_mode_material</item> <item name="legacyLayout">@layout/date_picker_legacy_holo</item> <item name="calendarViewShown">true</item> <!-- Attributes for new-style DatePicker. --> @@ -1208,6 +1209,7 @@ please see styles_device_defaults.xml. <item name="multiChoiceItemLayout">@layout/select_dialog_multichoice_material</item> <item name="singleChoiceItemLayout">@layout/select_dialog_singlechoice_material</item> <item name="controllerType">@integer/config_alertDialogController</item> + <item name="selectionScrollOffset">@dimen/config_alertDialogSelectionScrollOffset</item> </style> <style name="AlertDialog.Material.Light" /> @@ -1246,7 +1248,7 @@ please see styles_device_defaults.xml. <style name="DialogWindowTitleBackground.Material.Light" /> <style name="DialogWindowTitle.Material"> - <item name="maxLines">@integer/config_dialogWindowTitleMaxLines</item> + <item name="maxLines">1</item> <item name="scrollHorizontally">true</item> <item name="textAppearance">@style/TextAppearance.Material.DialogWindowTitle</item> </style> diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index b03a61663f98..7f093827204b 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -375,6 +375,7 @@ <java-symbol type="integer" name="config_immersive_mode_confirmation_panic" /> <java-symbol type="integer" name="config_longPressOnPowerBehavior" /> <java-symbol type="integer" name="config_longPressOnBackBehavior" /> + <java-symbol type="integer" name="config_backPanicBehavior" /> <java-symbol type="integer" name="config_lowMemoryKillerMinFreeKbytesAdjust" /> <java-symbol type="integer" name="config_lowMemoryKillerMinFreeKbytesAbsolute" /> <java-symbol type="integer" name="config_max_pan_devices" /> @@ -415,6 +416,7 @@ <java-symbol type="dimen" name="config_viewConfigurationTouchSlop" /> <java-symbol type="dimen" name="config_viewMinFlingVelocity" /> <java-symbol type="dimen" name="config_viewMaxFlingVelocity" /> + <java-symbol type="dimen" name="config_scrollFactor" /> <java-symbol type="dimen" name="default_app_widget_padding_bottom" /> <java-symbol type="dimen" name="default_app_widget_padding_left" /> <java-symbol type="dimen" name="default_app_widget_padding_right" /> @@ -1407,7 +1409,6 @@ <java-symbol type="raw" name="color_fade_vert" /> <java-symbol type="raw" name="color_fade_frag" /> <java-symbol type="raw" name="accessibility_gestures" /> - <java-symbol type="raw" name="incognito_mode_start_page" /> <java-symbol type="raw" name="loaderror" /> <java-symbol type="raw" name="nodomain" /> @@ -1644,6 +1645,9 @@ <java-symbol type="array" name="config_autoBrightnessKeyboardBacklightValues" /> <java-symbol type="array" name="config_autoBrightnessLcdBacklightValues" /> <java-symbol type="array" name="config_autoBrightnessLevels" /> + <java-symbol type="array" name="config_dynamicHysteresisBrightLevels" /> + <java-symbol type="array" name="config_dynamicHysteresisDarkLevels" /> + <java-symbol type="array" name="config_dynamicHysteresisLuxLevels" /> <java-symbol type="array" name="config_protectedNetworks" /> <java-symbol type="array" name="config_statusBarIcons" /> <java-symbol type="array" name="config_tether_bluetooth_regexs" /> @@ -1766,6 +1770,7 @@ <java-symbol type="integer" name="config_undockedHdmiRotation" /> <java-symbol type="integer" name="config_virtualKeyQuietTimeMillis" /> <java-symbol type="integer" name="config_brightness_ramp_rate_fast" /> + <java-symbol type="integer" name="config_brightness_ramp_rate_slow" /> <java-symbol type="layout" name="am_compat_mode_dialog" /> <java-symbol type="layout" name="launch_warning" /> <java-symbol type="layout" name="safe_mode" /> @@ -2662,6 +2667,10 @@ <!-- Colon separated list of package names that should be granted DND access --> <java-symbol type="string" name="config_defaultDndAccessPackages" /> + <!-- For NetworkPolicyManagerService --> + <java-symbol type="string" name="config_networkOverLimitComponent" /> + <java-symbol type="string" name="config_dataUsageSummaryComponent" /> + <java-symbol type="string" name="lockscreen_storage_locked" /> <java-symbol type="string" name="global_action_emergency" /> diff --git a/core/res/res/values/themes_material.xml b/core/res/res/values/themes_material.xml index 7e2867de1d7a..0eb4c8d86928 100644 --- a/core/res/res/values/themes_material.xml +++ b/core/res/res/values/themes_material.xml @@ -114,9 +114,9 @@ please see themes_device_defaults.xml. <item name="listPreferredItemHeightSmall">48dip</item> <item name="listPreferredItemHeightLarge">80dip</item> <item name="dropdownListPreferredItemHeight">?attr/listPreferredItemHeightSmall</item> - <item name="textAppearanceListItem">@style/TextAppearance.Material.Subhead</item> - <item name="textAppearanceListItemSmall">@style/TextAppearance.Material.Subhead</item> - <item name="textAppearanceListItemSecondary">@style/TextAppearance.Material.Body1</item> + <item name="textAppearanceListItem">@style/TextAppearance.Material.ListItem</item> + <item name="textAppearanceListItemSmall">@style/TextAppearance.Material.ListItem</item> + <item name="textAppearanceListItemSecondary">@style/TextAppearance.Material.ListItemSecondary</item> <item name="listPreferredItemPaddingLeft">@dimen/list_item_padding_horizontal_material</item> <item name="listPreferredItemPaddingRight">@dimen/list_item_padding_horizontal_material</item> <item name="listPreferredItemPaddingStart">@dimen/list_item_padding_start_material</item> @@ -475,9 +475,9 @@ please see themes_device_defaults.xml. <item name="listPreferredItemHeightSmall">48dip</item> <item name="listPreferredItemHeightLarge">80dip</item> <item name="dropdownListPreferredItemHeight">?attr/listPreferredItemHeightSmall</item> - <item name="textAppearanceListItem">@style/TextAppearance.Material.Subhead</item> - <item name="textAppearanceListItemSmall">@style/TextAppearance.Material.Subhead</item> - <item name="textAppearanceListItemSecondary">@style/TextAppearance.Material.Body1</item> + <item name="textAppearanceListItem">@style/TextAppearance.Material.ListItem</item> + <item name="textAppearanceListItemSmall">@style/TextAppearance.Material.ListItem</item> + <item name="textAppearanceListItemSecondary">@style/TextAppearance.Material.ListItemSecondary</item> <item name="listPreferredItemPaddingLeft">@dimen/list_item_padding_horizontal_material</item> <item name="listPreferredItemPaddingRight">@dimen/list_item_padding_horizontal_material</item> <item name="listPreferredItemPaddingStart">@dimen/list_item_padding_start_material</item> diff --git a/core/res/res/xml-watch/default_zen_mode_config.xml b/core/res/res/xml-watch/default_zen_mode_config.xml index 26af10c1809e..938cc0c3f7c0 100644 --- a/core/res/res/xml-watch/default_zen_mode_config.xml +++ b/core/res/res/xml-watch/default_zen_mode_config.xml @@ -17,8 +17,8 @@ <!-- Default configuration for zen mode. See android.service.notification.ZenModeConfig. --> <zen version="2"> - <!-- Allow starred contacts to go through only. Repeated calls on. - Calls, messages, reminders, events off.--> - <allow from="2" repeatCallers="true" calls="false" messages="false" reminders="false" + <!-- Allow starred contacts to go through only. + Repeated calls, calls, messages, reminders, events off. --> + <allow from="2" repeatCallers="false" calls="false" messages="false" reminders="false" events="false"/> </zen> diff --git a/docs/html/_redirects.yaml b/docs/html/_redirects.yaml index 8ddb98239038..e71cf2b8d18d 100644 --- a/docs/html/_redirects.yaml +++ b/docs/html/_redirects.yaml @@ -842,6 +842,10 @@ redirects: to: /topic/performance/power/network/gather-data.html - from: /training/performance/battery/network/index.html to: /topic/performance/power/network/index.html +- from: /training/articles/memory.html + to: /topic/performance/memory.html +- from: /topic/performance/optimizing-view-hierarchies.html + to: /topic/performance/rendering/optimizing-view-hierarchies.html # Redirects for the new [dac]/topic/libraries/ area diff --git a/docs/html/guide/topics/resources/drawable-resource.jd b/docs/html/guide/topics/resources/drawable-resource.jd index aae0cbae99b3..4587ae4ec5db 100644 --- a/docs/html/guide/topics/resources/drawable-resource.jd +++ b/docs/html/guide/topics/resources/drawable-resource.jd @@ -1270,7 +1270,7 @@ the right edge, a right gravity clips the left edge, and neither clips both edge progressively reveal the image:</p> <pre> ImageView imageview = (ImageView) findViewById(R.id.image); -ClipDrawable drawable = (ClipDrawable) imageview.getDrawable(); +ClipDrawable drawable = (ClipDrawable) imageview.getBackground(); drawable.setLevel(drawable.getLevel() + 1000); </pre> diff --git a/docs/html/topic/performance/_book.yaml b/docs/html/topic/performance/_book.yaml index e053a2c1bdfe..ba7c8b54e699 100644 --- a/docs/html/topic/performance/_book.yaml +++ b/docs/html/topic/performance/_book.yaml @@ -1,34 +1,61 @@ toc: -- title: Reducing Network Battery Drain - path: /topic/performance/power/network/index.html +- title: Optimizing for Battery Life + path: /topic/performance/power/index.html path_attributes: - name: description - value: Access the network while going easy on battery life. + value: Learn to make your app more battery-friendly. section: - - title: Collecting Network Traffic Data - path: /topic/performance/power/network/gather-data.html - - title: Analyzing Network Traffic Data - path: /topic/performance/power/network/analyze-data.html - - title: Optimizing User-Initiated Network Use - path: /topic/performance/power/network/action-user-traffic.html - - title: Optimizing Server-Initiated Network Use - path: /topic/performance/power/network/action-server-traffic.html - - title: Optimizing General Network Use - path: /topic/performance/power/network/action-any-traffic.html -- title: Implementing Doze - path: /training/monitoring-device-state/doze-standby.html + - title: Network Use and Battery Consumption + path: /topic/performance/power/network/index.html + section: + - title: Collecting Network Traffic Data + path: /topic/performance/power/network/gather-data.html + - title: Analyzing Data Traffic + path: /topic/performance/power/network/analyze-data.html + - title: Optimizing User-Initiated Network Use + path: /topic/performance/power/network/action-user-traffic.html + - title: Optimizing App-Initiated Network Use + path: topic/performance/power/network/action-app-traffic.html + - title: Optimizing Server-Initiated Network Use + path: /topic/performance/power/network/action-server-traffic.html + - title: Optimizing General Network Use + path: /topic/performance/power/network/action-any-traffic.html + - title: Doze and App Standby + path: /training/monitoring-device-state/doze-standby.html + path_attributes: + - name: description + value: Help ensure the device isn't depleting the battery when not in use. + - title: Battery Historian + path: /topic/performance/power/battery-historian.html +- title: Rendering + path: /topic/performance/rendering/index.html path_attributes: - name: description - value: Help ensure the device isn't depleting the battery when not in use. -- title: Launch-Time Performance - path: /topic/performance/launch-time.html -- title: Better Performance through Threading - path: /topic/performance/threads.html -- title: Optimizing View Hierarchies - path: /topic/performance/optimizing-view-hierarchies.html -- title: Background Optimization - path: /topic/performance/background-optimization.html + value: Speed up your app's rendering + section: + - title: Reducing Overdraw + path: /topic/performance/rendering/overdraw.html + - title: Optimizing View Hierarchies + path: /topic/performance/rendering/optimizing-view-hierarchies.html + - title: Using the Profile GPU Tool + path: /topic/performance/rendering/profile-gpu.html - title: Intelligent Job-Scheduling path: /topic/performance/scheduling.html +- title: Background Optimization + path: /topic/performance/background-optimization.html - title: Reducing APK Size path: /topic/performance/reduce-apk-size.html +- title: Reducing Image Download Sizes + path: /topic/performance/network-xfer.html +- title: Launch-Time Performance + path: /topic/performance/launch-time.html +- title: Better Performance through Threading + path: /topic/performance/threads.html +- title: Manage Your App's Memory + path: /topic/performance/memory.html +- title: Overview of Memory Managemement + path: /topic/performance/memory-overview.html + path_attributes: + - name: description + value: How to keep your app's memory footprint small in order to improve performance on a variety of mobile devices. + diff --git a/docs/html/topic/performance/images/app-rankings.png b/docs/html/topic/performance/images/app-rankings.png Binary files differnew file mode 100644 index 000000000000..9dd60e54735f --- /dev/null +++ b/docs/html/topic/performance/images/app-rankings.png diff --git a/docs/html/topic/performance/images/bars.png b/docs/html/topic/performance/images/bars.png Binary files differnew file mode 100644 index 000000000000..3afea465c975 --- /dev/null +++ b/docs/html/topic/performance/images/bars.png diff --git a/docs/html/topic/performance/images/beforeafterindexed.png b/docs/html/topic/performance/images/beforeafterindexed.png Binary files differnew file mode 100644 index 000000000000..dc7762ed42a4 --- /dev/null +++ b/docs/html/topic/performance/images/beforeafterindexed.png diff --git a/docs/html/topic/performance/images/comparison.png b/docs/html/topic/performance/images/comparison.png Binary files differnew file mode 100644 index 000000000000..18f204c31d1b --- /dev/null +++ b/docs/html/topic/performance/images/comparison.png diff --git a/docs/html/topic/performance/images/decisions.png b/docs/html/topic/performance/images/decisions.png Binary files differnew file mode 100644 index 000000000000..d4f21f8f770b --- /dev/null +++ b/docs/html/topic/performance/images/decisions.png diff --git a/docs/html/topic/performance/images/dropdown.png b/docs/html/topic/performance/images/dropdown.png Binary files differnew file mode 100644 index 000000000000..59ec6110e5ef --- /dev/null +++ b/docs/html/topic/performance/images/dropdown.png diff --git a/docs/html/topic/performance/images/generic-timeline.png b/docs/html/topic/performance/images/generic-timeline.png Binary files differnew file mode 100644 index 000000000000..04388b6f4abb --- /dev/null +++ b/docs/html/topic/performance/images/generic-timeline.png diff --git a/docs/html/topic/performance/images/moarparrots.png b/docs/html/topic/performance/images/moarparrots.png Binary files differnew file mode 100644 index 000000000000..ee10ec158936 --- /dev/null +++ b/docs/html/topic/performance/images/moarparrots.png diff --git a/docs/html/topic/performance/images/palette.png b/docs/html/topic/performance/images/palette.png Binary files differnew file mode 100644 index 000000000000..eb6be6b4246c --- /dev/null +++ b/docs/html/topic/performance/images/palette.png diff --git a/docs/html/topic/performance/images/parrot.png b/docs/html/topic/performance/images/parrot.png Binary files differnew file mode 100644 index 000000000000..7a8b86a97b1e --- /dev/null +++ b/docs/html/topic/performance/images/parrot.png diff --git a/docs/html/topic/performance/images/pug-visualization.png b/docs/html/topic/performance/images/pug-visualization.png Binary files differnew file mode 100644 index 000000000000..8270d0e37d1d --- /dev/null +++ b/docs/html/topic/performance/images/pug-visualization.png diff --git a/docs/html/topic/performance/images/pugspecificdata.png b/docs/html/topic/performance/images/pugspecificdata.png Binary files differnew file mode 100644 index 000000000000..1c2be837ba26 --- /dev/null +++ b/docs/html/topic/performance/images/pugspecificdata.png diff --git a/docs/html/topic/performance/images/s-generic-closeup.png b/docs/html/topic/performance/images/s-generic-closeup.png Binary files differnew file mode 100644 index 000000000000..6685d51a32a1 --- /dev/null +++ b/docs/html/topic/performance/images/s-generic-closeup.png diff --git a/docs/html/topic/performance/images/s-profiler-legend.png b/docs/html/topic/performance/images/s-profiler-legend.png Binary files differnew file mode 100644 index 000000000000..968fd381156a --- /dev/null +++ b/docs/html/topic/performance/images/s-profiler-legend.png diff --git a/docs/html/topic/performance/images/vq.gif b/docs/html/topic/performance/images/vq.gif Binary files differnew file mode 100644 index 000000000000..cbf6a3504059 --- /dev/null +++ b/docs/html/topic/performance/images/vq.gif diff --git a/docs/html/topic/performance/index.jd b/docs/html/topic/performance/index.jd index e08db15baa08..2b6b1972a03b 100644 --- a/docs/html/topic/performance/index.jd +++ b/docs/html/topic/performance/index.jd @@ -1,4 +1,4 @@ -page.title=Performance +page.title=Performance and Power page.article=true page.metaDescription=Improve your app's performance by learning how to optimize power consumption, launch times, and other important areas of performance. diff --git a/docs/html/topic/performance/memory-overview.jd b/docs/html/topic/performance/memory-overview.jd new file mode 100644 index 000000000000..58067d2be4b8 --- /dev/null +++ b/docs/html/topic/performance/memory-overview.jd @@ -0,0 +1,288 @@ +page.title=Overview of Android Memory Management +page.tags=ram,memory,paging,mmap + +@jd:body + +<div id="qv-wrapper"> +<div id="qv"> + +<h2>In this document</h2> +<ol class="nolist"> + <li><a href="#gc">Garbage collection</a></li> + <li><a href="#SharingRAM">Sharing Memory</a></li> + <li><a href="#AllocatingRAM">Allocating and Reclaiming App Memory</a></li> + <li><a href="#RestrictingMemory">Restricting App Memory</a></li> + <li><a href="#SwitchingApps">Switching Apps</a></li> +</ol> +<h2>See Also</h2> +<ul> + <li><a href="{@docRoot}training/articles/memory.html">Manage Your App's Memory</a> + </li> + <li><a href="{@docRoot}studio/profile/investigate-ram.html">Investigating Your RAM Usage</a> + </li> +</ul> + +</div> +</div> + +<p> + The Android Runtime (ART) and Dalvik virtual machine use + <a href="http://en.wikipedia.org/wiki/Paging" class="external-link">paging</a> + and <a href="http://en.wikipedia.org/wiki/Memory-mapped_files" class="external-link">memory-mapping</a> + (mmapping) to manage memory. This means that any memory an app + modifies—whether by allocating + new objects or touching mmapped pages—remains resident in RAM and + cannot be paged out. The only way to release memory from an app is to release + object references that the app holds, making the memory available to the + garbage collector. + That is with one exception: any files + mmapped in without modification, such as code, + can be paged out of RAM if the system wants to use that memory elsewhere. +</p> + +<p> + This page explains how Android manages app processes and memory + allocation. For more information about how to manage memory more efficiently + in your app, see + <a href="{@docRoot}training/articles/memory.html">Manage Your App's Memory</a>. +</p> + +<!-- Section 1 #################################################### --> + +<h2 id="gc">Garbage collection</h2> + +<p> + A managed memory environment, like the ART or Dalvik virtual machine, + keeps track of each memory allocation. Once it determines + that a piece of memory is no longer being used by the program, + it frees it back to the heap, without any intervention from the programmer. + The mechanism for reclaiming unused memory + within a managed memory environment + is known as <i>garbage collection</i>. Garbage collection has two goals: + find data objects in a program that cannot be accessed in the future; and + reclaim the resources used by those objects. +</p> + +<p> + Android’s memory heap is a generational one, meaning that there are + different buckets of allocations that it tracks, + based on the expected life and size of an object being allocated. + For example, recently allocated objects belong in the <i>Young generation</i>. + When an object stays active long enough, it can be promoted + to an older generation, followed by a permanent generation. +</p> + +<p> + Each heap generation has its own dedicated upper limit on the amount + of memory that objects there can occupy. Any time a generation starts + to fill up, the system executes a garbage collection + event in an attempt to free up memory. The duration of the garbage collection + depends on which generation of objects it's collecting + and how many active objects are in each generation. +</p> + +<p> + Even though garbage collection can be quite fast, it can still + affect your app's performance. You don’t generally control + when a garbage collection event occurs from within your code. + The system has a running set of criteria for determining when to perform + garbage collection. When the criteria are satisfied, + the system stops executing the process and begins garbage collection. If + garbage collection occurs in the middle of an intensive processing loop + like an animation or during music playback, it can increase processing time. + This increase can potentially push code execution in your app past the + recommended 16ms threshold for efficient and smooth frame rendering. +</p> + +<p> + Additionally, your code flow may perform kinds of work that + force garbage collection events to occur + more often or make them last longer-than-normal. + For example, if you allocate multiple objects in the + innermost part of a for-loop during each frame of an alpha + blending animation, you might pollute your memory heap with a + lot of objects. + In that circumstance, the garbage collector executes multiple garbage + collection events and can degrade the performance of your app. +</p> + +<p> + For more general information about garbage collection, see + <a href="https://en.wikipedia.org/wiki/Garbage_collection_(computer_science)" + class="external-link">Garbage collection</a>. +</p> + +<!-- Section 2 #################################################### --> + +<h2 id="SharingRAM">Sharing Memory</h2> + +<p> + In order to fit everything it needs in RAM, + Android tries to share RAM pages across processes. It + can do so in the following ways: +</p> + +<ul> + <li> + Each app process is forked from an existing process called Zygote. + The Zygote process starts when the system boots and loads common + framework code and resources + (such as activity themes). To start a new app process, + the system forks the Zygote process then + loads and runs the app's code in the new process. + This approach allows most of the RAM pages allocated for + framework code and resources to be shared across all app processes. + </li> + + <li> + Most static data is mmapped into a process. + This technique allows data to be shared + between processes, and also allows it to be paged + out when needed. Example static data include: + Dalvik code (by placing it in a pre-linked <code>.odex</code> + file for direct mmapping), app resources + (by designing the resource table to be a structure + that can be mmapped and by aligning the zip + entries of the APK), and traditional project + elements like native code in <code>.so</code> files. + </li> + + <li> + In many places, Android shares the same dynamic + RAM across processes using explicitly allocated + shared memory regions (either with ashmem or gralloc). + For example, window surfaces use shared + memory between the app and screen compositor, and + cursor buffers use shared memory between the + content provider and client. + </li> +</ul> + +<p> + Due to the extensive use of shared memory, determining + how much memory your app is using requires + care. Techniques to properly determine your app's + memory use are discussed in + <a href="{@docRoot}studio/profile/investigate-ram.html">Investigating Your RAM Usage</a>. +</p> + +<!-- Section 3 #################################################### --> + +<h2 id="AllocatingRAM">Allocating and Reclaiming App Memory</h2> + +<p> + The Dalvik heap is constrained to a + single virtual memory range for each app process. This defines + the logical heap size, which can grow as it needs to + but only up to a limit that the system defines + for each app. +</p> + +<p> + The logical size of the heap is not the same as + the amount of physical memory used by the heap. + When inspecting your app's heap, Android computes + a value called the Proportional Set Size (PSS), + which accounts for both dirty and clean pages + that are shared with other processes—but only in an + amount that's proportional to how many apps share + that RAM. This (PSS) total is what the system + considers to be your physical memory footprint. + For more information about PSS, see the + <a href="{@docRoot}studio/profile/investigate-ram.html">Investigating Your RAM Usage</a> + guide. +</p> + +<p> + The Dalvik heap does not compact the logical + size of the heap, meaning that Android does not + defragment the heap to close up space. Android + can only shrink the logical heap size when there + is unused space at the end of the heap. However, + the system can still reduce physical memory used by the heap. + After garbage collection, Dalvik + walks the heap and finds unused pages, then returns + those pages to the kernel using madvise. So, paired + allocations and deallocations of large + chunks should result in reclaiming all (or nearly all) + the physical memory used. However, + reclaiming memory from small allocations can be much + less efficient because the page used + for a small allocation may still be shared with + something else that has not yet been freed. + +</p> + +<!-- Section 4 #################################################### --> + +<h2 id="RestrictingMemory">Restricting App Memory</h2> + +<p> + To maintain a functional multi-tasking environment, + Android sets a hard limit on the heap size + for each app. The exact heap size limit varies + between devices based on how much RAM the device + has available overall. If your app has reached the + heap capacity and tries to allocate more + memory, it can receive an {@link java.lang.OutOfMemoryError}. +</p> + +<p> + In some cases, you might want to query the + system to determine exactly how much heap space you + have available on the current device—for example, to + determine how much data is safe to keep in a + cache. You can query the system for this figure by calling + {@link android.app.ActivityManager#getMemoryClass() }. + This method returns an integer indicating the number of + megabytes available for your app's heap. +</p> + +<!-- Section 5 #################################################### --> + +<h2 id="SwitchingApps">Switching apps</h2> + +<p> + When users switch between apps, + Android keeps apps that + are not foreground—that is, not visible to the user or running a + foreground service like music playback— + in a least-recently used (LRU) cache. + For example, when a user first launches an app, + a process is created for it; but when the user + leaves the app, that process does <em>not</em> quit. + The system keeps the process cached. If + the user later returns to the app, the system reuses the process, thereby + making the app switching faster. +</p> + +<p> + If your app has a cached process and it retains memory + that it currently does not need, + then your app—even while the user is not using it— + affects the system's + overall performance. As the system runs low on memory, + it kills processes in the LRU cache + beginning with the process least recently used. The system also + accounts for processes that hold onto the most memory + and can terminate them to free up RAM. +</p> + +<p class="note"> + <strong>Note:</strong> When the system begins killing processes in the + LRU cache, it primarily works bottom-up. The system also considers which + processes consume more memory and thus provide the system + more memory gain if killed. + The less memory you consume while in the LRU list overall, + the better your chances are + to remain in the list and be able to quickly resume. +</p> + +<p> + For more information about how processes are cached while + not running in the foreground and how + Android decides which ones + can be killed, see the + <a href="{@docRoot}guide/components/processes-and-threads.html">Processes and Threads</a> + guide. +</p> diff --git a/docs/html/topic/performance/memory.jd b/docs/html/topic/performance/memory.jd new file mode 100644 index 000000000000..ef1c4ae0aeea --- /dev/null +++ b/docs/html/topic/performance/memory.jd @@ -0,0 +1,593 @@ +page.title=Manage Your App's Memory +page.tags=ram,low memory,OutOfMemoryError,onTrimMemory + +@jd:body + +<div id="qv-wrapper"> +<div id="qv"> + +<h2>In this document</h2> +<ol> + <li><a href="#monitor">Monitor Available Memory and Memory Usage</a> + <ul> + <li><a href="#AnalyzeRam">Tools for analyzing RAM usage</a></li> + <li><a href="#release">Release memory in response to events</a></li> + <li><a href="#CheckHowMuchMemory">Check how much memory you should use</a></li> + </ul> + </li> + <li><a href="#code">Use More Efficient Code Constructs</a> + <ul> + <li><a href="#Services">Use services sparingly</a></li> + <li><a href="#DataContainers">Use optimized data containers</a></li> + <li><a href="#Abstractions">Be careful with code abstractions</a></li> + <li><a href="#NanoProto">Use nano protobufs for serialized data</a></li> + <li><a href="#churn">Avoid memory churn</a></li> + </ul> + </li> + <li><a href="#remove">Remove Memory-Intensive Resources and Libraries</a> + <ul> + <li><a href="#reduce">Reduce overall APK size</a></li> + <li><a href="#DependencyInjection">Avoid dependency injection frameworks</a></li> + <li><a href="#ExternalLibs">Be careful about using external libraries</a></li> + </ul> + </li> +</ol> +<h2>See Also</h2> +<ul> + <li><a href="{@docRoot}training/articles/memory-overview.html">Overview of Android Memory Management</a> + </li> + <li><a href="{@docRoot}studio/profile/investigate-ram.html">Investigating Your RAM Usage</a> + </li> + <li><a href="{@docRoot}topic/performance/reduce-apk-size.html">Reduce APK Size</a></li> +</ul> + +</div> +</div> + +<!-- INTRO #################################################### --> + +<p> + Random-access memory (RAM) is a valuable + resource in any software development environment, but + it's even more valuable on a mobile operating system + where physical memory is often constrained. + Although both the Android Runtime (ART) and Dalvik virtual machine perform + routine garbage collection, this does not mean you can ignore + when and where your app allocates and releases memory. + You still need to avoid + introducing memory leaks, usually caused by holding onto + object references in static member variables, and + release any {@link java.lang.ref.Reference} objects at the appropriate + time as defined by + lifecycle callbacks. +</p> + +<p> + This page explains how you can + proactively reduce memory usage within your app. + For more information about general + practices to clean up your resources when programming in Java, + refer to other books or online + documentation about managing resource references. + If you’re looking for information about how to + analyze memory in a running app, read + <a href="#AnalyzeRam">Tools for analyzing RAM usage</a>. + For more detailed information about how the Android Runtime and Dalvik + virtual machine manage memory, see the + <a href="{@docRoot}training/articles/memory-overview.html">Overview of Android Memory Management</a>. +</p> + +<!-- Section 1 #################################################### --> + +<h2 id="monitor">Monitor Available Memory and Memory Usage</h2> + +<p> + The Android framework, Android Studio, and Android SDK + can help you analyze and adjust your app's memory usage. + The Android framework + exposes several APIs that allow your app to reduce its memory usage + dynamically during runtime. Android Studio and the Android SDK + contain several tools that allow you to investigate how your + app uses memory. +</p> + +<!-- Section 1.1 #################################################### --> + +<h3 id="AnalyzeRam">Tools for analyzing RAM usage</h3> + +<p> + Before you can fix the memory usage problems in your app, you first need + to find them. Android Studio and the Android SDK include several tools + for analyzing memory usage in your app: +</p> + +<ol> + <li> + The Device Monitor has a Dalvik Debug Monitor Server (DDMS) tool that allows + you to inspect memory allocation within your app process. + You can use this information to understand how your + app uses memory overall. For example, you can force a garbage collection + event and then view the types of objects that remain in memory. You can + use this information to identify operations or actions within your app + that allocate or leave excessive amounts of objects in memory. + + <p>For more information about how to use the DDMS tool, see + <a href="/studio/profile/ddms.html">Using DDMS</a>. + </p> + </li> + + <li> + The Memory Monitor in Android Studio shows you how your app allocates + memory over the course of a single session. + The tool shows a graph of available + and allocated Java memory over time, including garbage collection events. + You can also initiate garbage collection events and take a snapshot of + the Java heap while your app runs. The output from the Memory Monitor tool + can help you identify points when your app experiences excessive garbage + collection events, leading to app slowness. + <p> + For more information about how to use Memory Monitor tool, see + <a href="{@docRoot}tools/debugging/debugging-memory.html#ViewHeap">Viewing Heap Updates</a>. + </p> + </li> + + <li> + Garbage collection events also show up in the Traceview viewer. Traceview + allows you to view trace log files as both a timeline and as a profile + of what happened within a method. You can use this tool to determine + what code was executing when a garbage collection event occurred. + <p> + For more information about how to use the Traceview viewer, see + <a href="https://developer.android.com/studio/profile/traceview.html">Profiling with Traceview and dmtracedump</a>. + </p> + </li> + + <li> + The Allocation Tracker tool in Android Studio gives you a detailed look + at how your app allocates memory. + The Allocation Tracker records an app's memory allocations and lists + all allocated objects within the profiling snapshot. You can use this + tool to track down parts of your code that allocate too many objects. + + <p> + For more information about how to use the Allocation Tracker tool, see + <a href="{docRoot}studio/profile/allocation-tracker-walkthru.html">Allocation Tracker Walkthrough</a>. + </p> + </li> + +</ol> + +<!-- Section 1.2 #################################################### --> + +<h3 id="release">Release memory in response to events</h3> + +<p> + An Android device can run with varying amounts of free memory + depending on the physical amount of RAM on the device and how the user + operates it. The system broadcasts signals to indicate when it is under + memory pressure, and apps should listen for these signals and adjust + their memory usage as appropriate. +</p> + +</p> + You can use the {@link android.content.ComponentCallbacks2} API + to listen for these signals and then adjust your memory + usage in response to app lifecycle + or device events. The + {@link android.content.ComponentCallbacks2#onTrimMemory onTrimMemory()} + method allows your app to listen for memory related events when the app runs + in the foreground (is visible) and when it runs in the background. +</p> + +<p> + To listen for these events, implement the {@link + android.content.ComponentCallbacks2#onTrimMemory onTrimMemory()} + callback in your {@link android.app.Activity} + classes, as shown in the following code snippet. +</p> + +<pre class="prettyprint"> +import android.content.ComponentCallbacks2; +// Other import statements ... + +public class MainActivity extends AppCompatActivity + implements ComponentCallbacks2 { + + // Other activity code ... + + /** + * Release memory when the UI becomes hidden or when system resources become low. + * @param level the memory-related event that was raised. + */ + public void onTrimMemory(int level) { + + // Determine which lifecycle or system event was raised. + switch (level) { + + case ComponentCallbacks2.TRIM_MEMORY_UI_HIDDEN: + + /* + Release any UI objects that currently hold memory. + + The user interface has moved to the background. + */ + + break; + + case ComponentCallbacks2.TRIM_MEMORY_RUNNING_MODERATE: + case ComponentCallbacks2.TRIM_MEMORY_RUNNING_LOW: + case ComponentCallbacks2.TRIM_MEMORY_RUNNING_CRITICAL: + + /* + Release any memory that your app doesn't need to run. + + The device is running low on memory while the app is running. + The event raised indicates the severity of the memory-related event. + If the event is TRIM_MEMORY_RUNNING_CRITICAL, then the system will + begin killing background processes. + */ + + break; + + case ComponentCallbacks2.TRIM_MEMORY_BACKGROUND: + case ComponentCallbacks2.TRIM_MEMORY_MODERATE: + case ComponentCallbacks2.TRIM_MEMORY_COMPLETE: + + /* + Release as much memory as the process can. + + The app is on the LRU list and the system is running low on memory. + The event raised indicates where the app sits within the LRU list. + If the event is TRIM_MEMORY_COMPLETE, the process will be one of + the first to be terminated. + */ + + break; + + default: + /* + Release any non-critical data structures. + + The app received an unrecognized memory level value + from the system. Treat this as a generic low-memory message. + */ + break; + } + } +} +</pre> + +<p> + The + {@link android.content.ComponentCallbacks2#onTrimMemory onTrimMemory()} + callback was added in Android 4.0 (API level 14). For earlier versions, + you can use the + {@link android.content.ComponentCallbacks#onLowMemory()} + callback as a fallback for older versions, which is roughly equivalent to the + {@link android.content.ComponentCallbacks2#TRIM_MEMORY_COMPLETE} event. +</p> + +<!-- Section 1.3 #################################################### --> + +<h3 id="CheckHowMuchMemory">Check how much memory you should use</h3> + +<p> + To allow multiple running processes, Android sets a hard limit + on the heap size alloted for each app. The exact heap size limit varies + between devices based on how much RAM the device + has available overall. If your app has reached the heap capacity and + tries to allocate more + memory, the system throws an {@link java.lang.OutOfMemoryError}. +</p> + +<p> + To avoid running out of memory, you can to query the system to determine + how much heap space you have available on the current device. + You can query the system for this figure by calling + {@link android.app.ActivityManager#getMemoryInfo(android.app.ActivityManager.MemoryInfo) getMemoryInfo()}. + This returns an + {@link android.app.ActivityManager.MemoryInfo } object that provides + information about the device's + current memory status, including available memory, total memory, and + the memory threshold—the memory level below which the system begins + to kill processes. The + {@link android.app.ActivityManager.MemoryInfo } class also exposes a simple + boolean field, + {@link android.app.ActivityManager.MemoryInfo#lowMemory } + that tells you whether the device is running low on memory. +</p> + +<p> + The following code snippet shows an example of how you can use the + {@link android.app.ActivityManager#getMemoryInfo(android.app.ActivityManager.MemoryInfo) getMemoryInfo()}. + method in your application. +</p> + +<pre class="prettyprint"> +public void doSomethingMemoryIntensive() { + + // Before doing something that requires a lot of memory, + // check to see whether the device is in a low memory state. + ActivityManager.MemoryInfo memoryInfo = getAvailableMemory(); + + if (!memoryInfo.lowMemory) { + // Do memory intensive work ... + } +} + +// Get a MemoryInfo object for the device's current memory status. +private ActivityManager.MemoryInfo getAvailableMemory() { + ActivityManager activityManager = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE); + ActivityManager.MemoryInfo memoryInfo = new ActivityManager.MemoryInfo(); + activityManager.getMemoryInfo(memoryInfo); + return memoryInfo; +} +</pre> + +<!-- Section 2 #################################################### --> + +<h2 id="code">Use More Memory-Efficient Code Constructs</h2> + +<p> + Some Android features, Java classes, and code constructs tend to + use more memory than others. You can minimize how + much memory your app uses by choosing more efficient alternatives in + your code. +</p> + +<!-- Section 2.1 #################################################### --> + +<h3 id="Services">Use services sparingly</h3> + +<p> + Leaving a service running when it’s not needed is + <strong>one of the worst memory-management + mistakes</strong> an Android app can make. If your app needs a + <a href="{@docRoot}guide/components/services.html">service</a> + to perform work in the background, do not keep it running unless + it needs to run a job. Remember to stop your service when it has completed + its task. Otherwise, you can inadvertently cause a memory leak. +</p> + +<p> + When you start a service, the system prefers to always keep the process + for that service running. This behavior + makes services processes very expensive + because the RAM used by a service remains unavailable to other processes. + This reduces the number of cached processes that the system can keep in + the LRU cache, making app switching less efficient. It can even lead to + thrashing in the system when memory is tight and the system can’t + maintain enough processes to host all the services currently running. +</p> + +<p> + You should generally avoid use of persistent services because of + the on-going demands they place on available memory. Instead, we + recommend that you use an alternative implementation + such as {@link android.app.job.JobScheduler}. For more information about + how to use {@link android.app.job.JobScheduler} to schedule background + processes, see + <a href="/topic/performance/background-optimization.html">Background Optimizations</a>. +<p> + If you must use a service, the + best way to limit the lifespan of your service is to use an {@link + android.app.IntentService}, which finishes + itself as soon as it's done handling the intent that started it. + For more information, read + <a href="{@docRoot}training/run-background-service/index.html">Running in a Background Service</a>. +</p> + +<!-- Section 2.2 #################################################### --> + +<h3 id="DataContainers">Use optimized data containers</h3> + +<p> + Some of the classes provided by the programming language are not optimized for + use on mobile devices. For example, the generic + {@link java.util.HashMap} implementation can be quite memory + inefficient because it needs a separate entry object for every mapping. +</p> + +<p> + The Android framework includes several optimized data containers, including + {@link android.util.SparseArray}, {@link android.util.SparseBooleanArray}, + and {@link android.support.v4.util.LongSparseArray}. + For example, the {@link android.util.SparseArray} classes are more + efficient because they avoid the system's need to + <acronym title="Automatic conversion from primitive types to object classes (such as int to Integer)">autobox</acronym> + the key and sometimes value (which creates yet another object or + two per entry). +</p> + +<p> + If necessary, you can always switch to raw arrays for a really lean data + structure. +</p> + +<!-- Section 2.3 #################################################### --> + +<h3 id="Abstractions">Be careful with code abstractions</h3> + +<p> + Developers often use abstractions simply as a good programming practice, + because abstractions can improve code flexibility and maintenance. + However, abstractions come at a significant cost: + generally they require a fair amount more code that + needs to be executed, requiring more time and + more RAM for that code to be mapped into memory. + So if your abstractions aren't supplying a + significant benefit, you should avoid them. +</p> + +<p> + For example, enums often require more than twice as much memory as static + constants. You should strictly avoid using enums on Android. +</p> + +<!-- Section 2.4 #################################################### --> + +<h3 id="NanoProto">Use nano protobufs for serialized data</h3> + +<p> + <a href="https://developers.google.com/protocol-buffers/docs/overview">Protocol buffers</a> + are a language-neutral, platform-neutral, extensible mechanism + designed by Google for serializing structured data—similar to XML, but + smaller, faster, and simpler. If you decide to use + protobufs for your data, you should always use nano protobufs in your + client-side code. Regular protobufs generate extremely verbose code, which + can cause many kinds of problems in your app such as + increased RAM use, significant APK size increase, and slower execution. +</p> + +<p> + For more information, see the "Nano version" section in the + <a href="https://android.googlesource.com/platform/external/protobuf/+/master/java/README.txt" +class="external-link">protobuf readme</a>. +</p> + +<!-- Section 2.5 #################################################### --> + +<h3 id="churn">Avoid memory churn</h3> + +<p> + As mentioned previously, garbage collections events don't normally affect + your app's performance. However, many garbage collection events that occur + over a short period of time can quickly eat up your frame time. The more time + that the system spends on garbage collection, the less time it has to do + other stuff like rendering or streaming audio. +</p> + +<p> + Often, <em>memory churn</em> can cause a large number of + garbage collection events to occur. In practice, memory churn describes the + number of allocated temporary objects that occur in a given amount of time. +</p> + +<p> + For example, you might allocate multiple temporary objects within a + <code>for</code> loop. Or you might create new + {@link android.graphics.Paint} or {@link android.graphics.Bitmap} + objects inside the + {@link android.view.View#onDraw(android.graphics.Canvas) onDraw()} + function of a view. + In both cases, the app creates a lot of objects quickly at high volume. + These can quickly consume all the available memory in the young generation, + forcing a garbage collection event to occur. +</p> + +<p> + Of course, you need to find the places in your code where + the memory churn is high before you can fix them. Use the tools discussed in + <a href="#AnalyzeRam">Analyze your RAM usage</a> +</p> + +<p> + Once you identify the problem areas in your code, try to reduce the number of + allocations within performance critical areas. Consider moving things out of + inner loops or perhaps moving them into a + <a href="https://en.wikipedia.org/wiki/Factory_method_pattern" class="external-link">Factory</a> + based allocation structure. +</p> + +<!-- Section 3 #################################################### --> + +<h2 id="remove">Remove Memory-Intensive Resources and Libraries</h2> + +<p> + Some resources and libraries within your code can gobble up memory without + you knowing it. Overall size of your APK, including third-party libraries + or embedded resources, can affect how much memory your app consumes. You can + improve your app's memory consumption by removing any redundant, unnecessary, + or bloated components, resources, or libraries from your code. +</p> + +<!-- Section 3.1 #################################################### --> + +<h3 id="reduce">Reduce overall APK size</h3> + +<p> + You can significantly reduce your app's memory usage by reducing the overall + size of your app. Bitmap size, resources, animation frames, and third-party + libraries can all contribute to the size of your APK. + Android Studio and the Android SDK provide multiple tools + to help you reduce the size of your resources and external dependencies. +</p> + +<p> + For more information about how to reduce your overall APK size, see + <a href="{@docRoot}topic/performance/reduce-apk-size.html">Reduce APK Size</a>. +</p> + +<!-- Section 3.2 #################################################### --> + +<h3 id="DependencyInjection">Use caution with dependency injection frameworks</h3> + +<p> + Dependency injection framework such as + <a href="https://code.google.com/p/google-guice/" class="external-link">Guice</a> + or + <a href="https://github.com/roboguice/roboguice" class="external-link">RoboGuice</a> + can simplify the code you write and provide an adaptive environment + that's useful for testing and other configuration changes. However, dependency + frameworks aren't always optimized for mobile devices. +</p> + +<p> + For example, these frameworks tend to initialize processes by + scanning your code for annotations. This which can require significant + amounts of your code to be mapped into RAM unnecessarily. The system + allocates these mapped pages into clean memory so Android can drop them; yet + that can't happen until the pages have remained in memory for a long period + of time. + </p> + +<p> + If you need to use a dependency injection framework in your app, consider + using + <a class="external-link" href="http://google.github.io/dagger/">Dagger</a> + instead. For example, Dagger does not use reflection to scan your app's code. + Dagger's strict implementation means that it can be used in Android apps + without needlessly increasing memory usage. +</p> + +<!-- Section 3.3 #################################################### --> + +<h3 id="ExternalLibs">Be careful about using external libraries</h3> + +<p> + External library code is often not written for mobile environments and + can be inefficient when used + for work on a mobile client. When you decide to use an + external library, you may need to optimize that library for mobile devices. + Plan for that work up-front and analyze the library in terms of code size and + RAM footprint before deciding to use it at all. +</p> + +<p> + Even some mobile-optimized libraries can cause problems due to differing + implementations. For example, one library may use nano protobufs + while another uses micro protobufs, resulting in two different protobuf + implementations in your app. This can happen with different + implementations of logging, analytics, image loading frameworks, + caching, and many other things you don't expect. +</p> + +<p> + Although <a href="{@docRoot}tools/help/proguard.html">ProGuard</a> can + help to remove APIs and resources with the right flags, it can't remove a + library's large internal dependencies. The features that you want in these + libraries may require lower-level dependencies. This becomes especially + problematic when you use an {@link android.app.Activity } subclass from a + library (which will tend to have wide swaths of dependencies), + when libraries use reflection (which is common and means you need to spend a + lot of time manually tweaking ProGuard to get it to work), and so on. +</p> + +<p> + Also avoid using a shared library for just one or two features out of dozens. + You don't want to pull in a large amount of code and overhead that + you don't even use. When you consider whether to use a library, look for + an implementation that strongly matches what you need. Otherwise, you might + decide to create your own implementation. +</p> + diff --git a/docs/html/topic/performance/network-xfer.jd b/docs/html/topic/performance/network-xfer.jd new file mode 100644 index 000000000000..7fe5594ca899 --- /dev/null +++ b/docs/html/topic/performance/network-xfer.jd @@ -0,0 +1,374 @@ +page.title=Reducing Image Download Sizes +page.metaDescription=Improve network performance by optimizing image size. + +meta.tags="performance" +page.tags="performance" + +@jd:body + +<div id="qv-wrapper"> +<div id="qv"> + +<h2>In this document</h2> + <ol> + + <li> + <a href="#uif">Understanding Image Formats</a> + <ul> + <li><a href="#png">PNG</a></li> + <li><a href="#jpg">JPG</a></li> + <li><a href="#webp">WebP</a></li> + </ul> + </li> + <li> + <a href="#sf">Selecting a Format</a></li> + <li><a href="#doqv">Determining Optimal Quality Values</a> + <ul> + <li><a href="#sv">Scalar Values (JPG, WebP only)</a></li> + <li><a href="#butter">Butteraugli</a></li> + </ul> + </li> + <li><a href="#sizes">Serving Sizes</a></li> + </ol> + </div> +</div> + +<p> +Most download traffic consists of images. As a result, the smaller you can make +your downloadable images, the better a network experience your app can provide +for users. This page provides guidance on making image files smaller and more +network-friendly. +</p> + +<h2 id="uif">Understanding Image Formats</h2> + +<p>Android apps typically use images that are in one or more of the following file +formats: PNG, JPG, and WebP. For each of these formats, there are steps you can +take to reduce image sizes. +</p> + +<h3 id="png">PNG</h3> + +<p> +A key to making your PNG files smaller is reducing the number of unique +colors used in each row of pixels that comprises the image. By using fewer +colors, you improve the compression potential at all of the other stages of +the pipeline. +</p> + +<p> +Reducing the number of unique colors makes a significant difference because PNG +compression effectiveness is partly a function of the degree to which +horizontally adjacent pixel colors vary. Thus, reducing the number of unique +colors in each row of your PNG images can help in reducing their file sizes. +</p> + +<p> +When deciding whether to pursue this strategy, you should keep in mind that +reducing the number of unique colors effectively amounts to applying a lossy +encoding stage to the image. However, an encoding tool may not be a good +judge of how bad a seemingly small error looks to the human eye. Therefore, +you should perform this work manually in order to help ensure +the right balance between efficient compression and acceptable image quality. +</p> + +<p> +There are two particularly useful approaches you can take: striving for indexed +formats, and applying vector quantization. +</p> + + +<h4 id="strive">Strive for indexed formats</h4> + +<p> +Any attempt at color reduction should start with trying to optimize your colors +so that you can use the INDEXED format when exporting the image as a PNG. The +INDEXED color mode works by choosing the best 256 colors to use, and replacing +all pixel values with indices into that color palette. The result is a +reduction from 16 million (potential) colors to only 256 colors: from 3 (without +transparency) or 4 (with transparency) bytes per pixel to 1 byte per pixel. +This change is a significant first-step file size reduction. +</p> + +<p> +Figure 1 shows shows an image and its indexed variant. +</p> + + <img src="{@docRoot}topic/performance/images/beforeafterindexed.png"> + <p class="img-caption"> +Figure 1. An image before and after conversion to the INDEXED format. + </p> + + +<p> +Figure 2 shows the color palette for the image in Figure 1: +</p> + + <img src="{@docRoot}topic/performance/images/palette.png"> + <p class="img-caption"> +Figure 2. The color palette for the image in Figure 1. + </p> + +<p> +Representing your image as a paletted image goes a long way toward +significantly improving the file size, so it's worth investigating if the +majority of your images can be converted. +</p> + +<p> +Of course, not every image can be accurately represented with only 256 colors. +Some images, for example, might need 257, 310, 512, or 912 colors to +look correct. In such cases, vector quantization can also be helpful. +</p> + +<h4 id="vq">Vector quantization</h4> + +<p> +The process of creating an indexed image may be better described as vector +quantization (VQ). VQ serves as a rounding process for multidimensional +numbers. In this process, all the colors in your image get grouped based upon +their similarity. For a given group, all colors in that group are replaced by a +single <em>center point</em> value, which minimizes error for colors in that +cell (or "site" if you're using the Voronoi terminology). In Figure 3, +the green dots represent input colors, and the red dots are the center points +that replace the input colors. Each cell is bounded by blue lines. +</p> + + <img src="{@docRoot}topic/performance/images/vq.gif"> + <p class="img-caption"> +Figure 3. Applying vector quantization to the colors in an image. +</p> + +<p> +The result of applying VQ to an image reduces the number of unique colors, +replacing each group of colors with a single color that's "pretty close" +in visual quality. +</p> + +<p> +This technique also allows you to define the maximum number of unique colors in +your image. For example, Figure 4 shows the a parrot head in 16.7 million colors +(24 bits per pixel, or bpp) alongside a version that only allows only +16 (3 bpp) unique colors to be used. +</p> + + <img src="{@docRoot}topic/performance/images/parrot.png"> + <p class="img-caption"> +Figure 4. Image before and after application of vector quantification. + </p> + +<p> +Immediately, you can see that there's a loss of quality; most of the gradient +colors have been replaced, imparting a banding effect to the image. This image +needs more than 16 unique colors. +</p> + +<p> +Setting up a VQ step in your pipeline can help you get a better sense of the +true number of unique colors that your image uses, and can help you reduce them +significantly. There are a number of readily available tools that you can use +to help you implement this technique. +</p> + +<h3 id="jpg">JPG</h3> + +<p> +If you are using JPG images, there are several small changes you can make that +potentially provide significant file-size savings. These include: +</p> + +<ul> + <li> +Producing a smaller file size through different encoding methods (without +impacting quality). + </li> + + <li> +Adjusting quality slightly in order to yield better compression. + </li> +</ul> + +<p>Pursuing these strategies can often net you file-size reductions of up to +25%. +</p> + +<p> +When choosing tools, remember that photo exporting tools can +insert unnecessary metadata, such as GPS information, into your images. At +a minimum, try to leverage existing tools to help strip out this information +from your files. +</p> + +<h3 id="webp">WebP</h3> + +<p> +WebP is a newer image format supported from Android 4.2.1 (API level 17). This +format provides superior lossless and lossy compression for images on the web. +Using WebP, developers can create smaller, richer images. WebP lossless image +files are, on average, +<a href="https://developers.google.com/speed/webp/docs/webp_lossless_alpha_study#conclusions"> +26% smaller</a> than PNGs. These image files also support +transparency (also known as alpha channel) at a cost of just +<a href="https://developers.google.com/speed/webp/docs/webp_lossless_alpha_study#results"> +22% more</a> bytes. +</p> + +<p> +WebP lossy images are +<a href="https://developers.google.com/speed/webp/docs/webp_study#experiment_1_webp_vs_jpeg_at_equal_ssim_index"> +25-34% smaller</a> than comparable JPG images at equivalent +<a href="https://en.wikipedia.org/wiki/Structural_similarity">SSIM</a> +quality indices. For cases when lossy RGB compression is acceptable, lossy +WebP also supports transparency, typically producing file sizes 3 times smaller +than PNG. +</p> + +<p> +For more information about WebP, visit the +<a href="https://developers.google.com/speed/webp/">WebP site</a>. +</p> + +<h2 id="sf">Selecting a Format</h2> + +<p> +Different image formats are suitable for different types of images. JPG and PNG +have very different compression processes, and they produce quite different +results. +</p> + +<p> +The decision between PNG and JPG often comes down to the complexity of the +image itself. Figure 5 shows two images that come out quite differently +depending on which compression scheme the developer applies. The image on the +left has many small details, and thus compresses more efficiently with JPG. The +image on the right, with runs of the same color, compresses more efficiently +with PNG. +</p> + + <img src="{@docRoot}topic/performance/images/comparison.png"> + <p class="img-caption"> +Figure 5. Suitable cases for JPG vs. PNG + </p> + + +<p> +WebP as a format can support both lossy and lossless modes, making it an ideal +replacement for both PNG and JPG. The only thing to keep in mind is that it +only has native support on devices running Android 4.2.1 (API level 17) and +higher. Fortunately, the large +<a +href="https://developer.android.com/about/dashboards/index.html#Platform"> +majority of devices</a> satisfy that requirement. +</p> + +<p> +Figure 6 provides a simple visualization to help you decide which compression +scheme to use. +</p> + + <img src="{@docRoot}topic/performance/images/decisions.png"> + <p class="img-caption"> +Figure 6. Deciding on a compression scheme + </p> + +<h2 id="doqv">Determining Optimal Quality Values</h2> + +<p> +There are several techniques you can use to achieve the right balance between +compression and image quality. One technique uses scalar values and therefore +only works for JPG and WebP. The other technique takes advantage of the +Butteraugli library, and is usable for all image formats. +</p> + +<h3 id="sv">Scalar values (JPG and WebP only)</h3> + +<p> +The power of JPG and WebP comes from the fact that you can use a scalar value +to balance quality against file size. The trick is finding out what the correct +quality value is for your image. Too low a quality level produces a small file +at the cost of image quality. Too high a quality level increases file size +without providing a noticeable benefit to the user. +</p> + +<p> +The most straightforward solution is to pick some non-maximum value, and use +that value. However, be aware that the quality value affects every image +differently. While a quality of 75%, for example, may look fine on most images, +there may be some cases do not fare as well. You should make sure to test your +chosen maximum value against a representative sample of images. Also, make +sure to perform all of your tests against the original images, and not on +compressed versions. +</p> + +<p> +For large media applications that upload and re-send millions of JPGs a day, +hand-tuning for each asset is impractical. You might address this challenge by +specifying several different quality levels, according to image category. For +example, you might set 35% as the quality setting for thumbnails, since a +smaller image hides more compression artifacts. +</p> + +<h3 id="butter">Butteraugli</h4> + +<p> +The Butteraugli project is a library to test an image's Psychovisual Error +Threshold: the point at which a viewer starts to notice image degradation. In +other words, this project attempts to quantify how distorted your compressed +image is. +</p> + +<p> +Butteraugli allows you to define a goal for visual quality, and then run PNG, +JPG, WebP lossy, and WebP lossless compressions. You can then choose the image +that is the best balance of file size and Butteraugli level. Figure 7 shows an +example of how Butteraugli was used to find the minimal JPG quality level +before the visual distortion was high enough for a user could perceive a +problem; the result is a roughly 65% reduction in file size. +</p> + + <img src="{@docRoot}topic/performance/images/moarparrots.png"> + <p class="img-caption"> +Figure 7. An image before and after application of Butteraugli technology. + </p> + +<p> +Butteraugli allows you to proceed based on either output or input. That is, you +can look for the lowest quality setting before a user perceives noticeable +distortion in the resulting image, or you can iteratively set image-distortion +levels to learn their associated quality levels. +</p> + +<h2 id="sizes">Serving Sizes</h2> + +<p> +It is tempting to keep only a single resolution of an image on a server. When a +device accesses the image, the server serves it at that one resolution and +leaves downscaling to the device. +</p> + +<p> +This solution is convenient for the developer, but potentially painful for the +user, because the solution forces the user to download much more data than they +need. + +You should instead store multiple sizes of images, and serve the size that is +most appropriate for a particular use case. For example, for a thumbnail, +serving an actual thumbnail image instead of serving and downscaling a +full-size version consumes much less network bandwidth +</p> + +</p> +This approach is good for download speed, and is less costly for users who may +be using limited or metered data plans. Proceeding like this also results in +the image's taking less space on the device and in main memory. In the +case of large images, such as 4K ones, this approach also saves the device +from having to resize images before loading them. +</p> + +<p> +Implementing this approach requires that you have a backend image service to +provide images at various resolutions with proper caching. There are existing +services that can provide help with this task. For example, +<a href="https://cloud.google.com/appengine/">App Engine</a> comes +with image resizing functionality already installed. +</p> diff --git a/docs/html/topic/performance/power/battery-historian.jd b/docs/html/topic/performance/power/battery-historian.jd new file mode 100644 index 000000000000..79ea59d21419 --- /dev/null +++ b/docs/html/topic/performance/power/battery-historian.jd @@ -0,0 +1,247 @@ +page.title=Analyzing Power Use with Battery Historian +page.metaDescription=Improve network performance by optimizing image size. + +meta.tags="power" +page.tags="power" + +@jd:body + +<div id="qv-wrapper"> +<div id="qv"> + +<h2>In this document</h2> + <ol> + <li> + <a href="#sv">System-wide View</a> + </li> + <li> + <a href="#asd">App-Specific Data</a> + </li> + <li> + <a href="#usecases">Other Cases Where Battery Historian Can Help</a> + </li> + </ol> +<h2>See also</h2> + <ol> + <li> + <a href="https://github.com/google/battery-historian">Battery Historian + on GitHub</a> + </li> + + <li> + <a href="https://developer.android.com/studio/profile/battery-historian.html"> + Batterystats and Battery Historian Walkthrough + </li> + + <li> + <a href="https://youtu.be/VC2Hlb22mZM?list=PLOU2XLYxmsILe6_eGvDN3GyiodoV3qNSC&t=2063" + target="_blank"> + Battery Historian talk at Google I/O 2016</a> + </li> + </ol> + </div> +</div> + +<p> +The Battery Historian tool provides insight into a device’s battery consumption +over time. At a system-wide level, the tool visualizes power-related events from +the system logs in an HTML representation. At an app-specific level, the tool +provides a variety of data that can help you identify battery-draining app +behavior. +</p> + +<p> +This document describes some of the ways you can use Battery Historian +to learn about battery-consumption patterns. The document begins by explaining +how to read the system-wide data that Battery Historian reports. Then, +it presents ways in which you can use Battery Historian to diagnose +and troubleshoot your own app's behavior related to battery consumption. +Last, it offers several tips on scenarios in which Battery Historian may be +particularly useful. +</p> + +<h2 id="sv">System-wide View</h2> + +<p> +The Battery Historian tool provides a system-wide visualization of various +app and system behaviors, along with their correlation against battery +consumption over time. This view, shown in Figure 1, can help you +diagnose and identify power use issues with your app. +</p> + + <img src="{@docRoot}topic/performance/images/generic-timeline.png"> + <p class="img-caption"> +<strong>Figure 1.</strong> +Battery Historian’s display of system-wide events affecting power +consumption. + </p> + +<p> +Of particular interest in this figure is the black, horizontal, downward trend +line representing Battery Level, measured on the y-axis. For example, at the +very beginning of the Battery Level line, at approximately 6:50 AM, the +visualization shows a relatively steep drop in battery level. +</p> + +<p> +Figure 2 provides a close-up of that part of the display. +</p> + + <img src="{@docRoot}topic/performance/images/s-generic-closeup.png"> + <p class="img-caption"> +<strong>Figure 2.</strong> +A close-up of the Battery Historian timeline from roughly 6:50 AM to 7:20 AM. + </p> + +<p> +At the very beginning of the Battery Level line, as battery decline steeply, +the display shows three things happening: The CPU is running, an app has +acquired a wakelock, and the screen is on. In this way, Battery Historian helps +you understand what events are happening when battery consumption is high. You +can then target these behaviors in your app and investigate whether there are +related optimizations you can make. +</p> + +<p> +The system-wide visualization can provide other clues, as well. For instance, if +it shows that the mobile radio is frequently being turned off and on, there may +be an opportunity to optimize this behavior through <a href=”intelligent +scheduling page”>intelligent scheduling APIs</a> such as JobScheduler or +Firebase Job Dispatcher. +</p> + +<p> +The next section explains how to investigate behavior and events specific to +your own app. +</p> + +<p> +<h2 id="asd">App-Specific Data</h2> +</p> + +<p> +In addition to the macro-level data provided by the system-wide view, Battery +Historian also provides tables and some visualization of data specific to each +app running on your device. The tabular data includes: +</p> + +<ul> + <li>The app’s estimated power use on the device.</li> + <li>Network information.</li> + <li>Wakelocks.</li> + <li>Services.</li> + <li>Process info.</li> +</ul> + +<p> +The tables provide two dimensions of data about your app. First, you can look +up where your app’s power usage ranks compared to other apps. To do so, click +<em>Device Power Estimates</em> table under <em>Tables</em>. This example +examines a fictional app called Pug Power. +</p> + + <img src="{@docRoot}topic/performance/images/app-rankings.png"> + <p class="img-caption"> +<strong>Figure 3.</strong> Investigating which apps consume the most power. + </p> + +<p> +The table in Figure 3 reveals that Pug Power is the ninth biggest consumer of +battery power on this device, and the third biggest app that is not part of the +OS. This data suggests that this app bears deeper investigation. +</p> + +<p> +To look up the data for a specific app, enter its package name into the lower +of the two dropdown menus under <em>App Selection</em>, located under the left +side of the visualization. +</p> + + <img src="{@docRoot}topic/performance/images/dropdown.png"> + <p class="img-caption"> +<strong>Figure 4.</strong> Entering a specific app whose data to view. + </p> + +<p> +When you select a specific app, the following data visualization categories +change to display app-specific data instead of system-wide data: +</p> + +<ul> + <li>SyncManager.</li> + <li>Foreground process.</li> + <li>Userspace Wakelock.</li> + <li>Top app.</li> + <li>JobScheduler.</li> + <li>Activity Manager Proc.</li> +</ul> + +The SyncManager and JobScheduler visualizations immediately make it obvious if +your app performs syncs and executes jobs more frequently than necessary. In +doing so, they can quickly reveal an opportunity to optimize your app’s +behavior for improved battery performance. + +<p> +You can also obtain one more piece of app-specific visualization data, +<em>Userspace Wakelock</em>. To include this information in the bug report, +enter the following command in your terminal window: +</p> + +<pre> +$ adb shell dumpsys batterystats --enable full-wake-history +</pre> + +<p class="note"> +<strong>Note:</strong> From Android 6.0 (API level 23), the platform includes +Doze functionality, which imposes certain optimizations on apps. For example, +Doze batches jobs to take place during brief maintenance windows, regardless of +how JobScheduler has scheduled them. +</p> + +<p> +Figures 5 and 6 show data for Pug Power: Figure 5 +shows the visualization of +the app-specific data, and Figure 6 shows the corresponding tabular data. +</p> + + <img src="{@docRoot}topic/performance/images/pug-visualization.png"> + <p class="img-caption"> +<strong>Figure 5.</strong> Visualization of data for fictional app Pug Power. + </p> + + <img src="{@docRoot}topic/performance/images/pugspecificdata.png"> + <p class="img-caption"> +<strong>Figure 6.</strong> Tabular data for the fictional Pug Power app. + </p> + +<p> +A look at the visualization does not show anything immediately obvious. +The JobScheduler line shows that the app has no jobs scheduled. The SyncManager +line shows that the app has not performed any syncs. +</p> + +<p> +However, examination of the <em>Wakelocks</em> segment of the tabular data +reveals that Pug Power acquires wakelocks totaling over an hour. This unusual +and costly behavior can account for the app’s high level of power consumption. +This piece of information helps the developer target an area where optimization +is likely to greatly help. In this case, why does the app acquire so much +wakelock time, and how can the developer ameliorate this behavior? +</p> + +<h2 id="usecases">Other Cases Where Battery Historian Can Help</h2> + +<p> +There are many other cases in which Battery Historian can help you diagnose +opportunities for improving battery behavior. For example, Battery Historian +can tell you if your app is: +</p> + +<ul> + <li>Firing wakeup alarms overly frequently (every 10 seconds or less).</li> + <li>Continuously holding a GPS lock.</li> + <li>Scheduling jobs every 30 seconds or less.</li> + <li>Scheduling syncs every 30 seconds or less.</li> + <li>Using the cellular radio more frequently than you expect.</li> +</ul> + diff --git a/docs/html/topic/performance/power/index.jd b/docs/html/topic/performance/power/index.jd new file mode 100644 index 000000000000..88addcea1f71 --- /dev/null +++ b/docs/html/topic/performance/power/index.jd @@ -0,0 +1,125 @@ +page.title=Optimizing for Battery Life +page.metaDescription=Learn how to help your app go easier on the battery. + +meta.tags="performance" +page.tags="performance" + +@jd:body + +<div id="qv-wrapper"> + <div id="qv"> + <h2> + In this document + </h2> + <ol> + <li> + <a href="#lazy">Lazy First</a> + </li> + <li> + <a href="#features">Platform Features</a> + </li> + <li> + <a href="#toolery">Tooling</a> + </li> + </ol> + </div> +</div> + +<p>Battery life is the single most important aspect of the mobile user +experience. A device without power offers no functionality at all. +For this reason, it is critically important that apps be as respectful of +battery life as possible.</p> + +<p>There are three important things to keep in mind in keeping your app +power-thrifty:</p> +<ul> +<li>Make your apps <em>Lazy First</em>.</li> +<li>Take advantage of platform features that can help manage your app's battery +consumption.</li> +<li>Use tools that can help you identify battery-draining culprits.</li> +</ul> + +<h2 id="lazy">Lazy First</h2> + +<p>Making your app Lazy First means looking for ways to reduce and optimize +operations that are particularly battery-intensive. The core questions +underpinning Lazy First design are: + +<ul> + + <li><strong>Reduce:</strong> Are there redundant operations your app can cut +out? For example, can it cache downloaded data instead of repeatedly waking + up the radio to re-download the data?</li> + + <li><strong>Defer:</strong> Does an app need to perform an action right + away? For example, + can it wait until the device is charging before it backs data up to the + cloud?</li> + + <li><strong>Coalesce:</strong> Can work be batched, instead of putting the + device + into an active state many times? For example, is it really necessary for + several dozen apps to each turn on the radio at separate times to send + their messages? Can the messages instead be transmitted during a + single awakening of the radio?</li> +</ul> + +<p> +You should ask these questions when it comes to using the CPU, +the radio, and the screen. Lazy First design is often a good way +to tame these battery killers. +</p> + +<p> +To help you achieve these and other efficiencies, the Android platform +provides a number of features to help maximize battery life. +</p> + +<h2 id="features">Platform Features</h2> + +<p> +Broadly speaking, the Android platform provides two categories of help +for you to optimize your app's battery use. First, it provides several +APIs that you can implement in your app. You can learn more about these APIs in +<a href="/topic/performance/scheduling.html">Intelligent Job Scheduling</a> +and <a href="/performance/power/network/index.html"> +Network Use and Battery Consumption</a>. +</p> + +<p> +There are also internal mechanisms in the platform to help conserve +battery life. While they are not APIs that you implement programmatically, +you should still be aware of them so that your app can leverage them +successfully. For more information, see +<a href="/training/monitoring-device-state/doze-standby.html">Doze and +App Standby</a>.</p> + +<p> +You can get even more benefit out of these features by using the tools +available for the platform to discover the parts of your app that consume +the most power. Finding what to target is a big step toward +successful optimization. +</p> + +<h2 id ="toolery">Tooling</h2> + +<p>There are tools for Android, including +<a href="/studio/profile/dev-options-rendering.html">Profile GPU Rendering</a> +and <a class="external-link" +href="https://github.com/google/battery-historian">Battery Historian</a> +to help you identify areas that you can optimize for better battery life. +Take advantage of these tools to target areas where you can apply the +principles of Lazy First. +</p> + +<section class="dac-section dac-small" id="latest-games"><div class="wrap"> + <h2 class="norule" style="margin:0 0">More resources</h2> + <div class="resource-widget resource-flow-layout col-16" + data-query="collection:develop/performance/landing" + data-sortOrder="random" + data-cardSizes="6x6" + data-maxResults="24" + data-items-per-page="24" + data-initial-results="3"></div> + </div> +</section> diff --git a/docs/html/topic/performance/rendering/index.jd b/docs/html/topic/performance/rendering/index.jd new file mode 100644 index 000000000000..e04605cc7eee --- /dev/null +++ b/docs/html/topic/performance/rendering/index.jd @@ -0,0 +1,60 @@ +page.title=Rendering +page.article=true + +page.tags=battery +page.metaDescription=Learn how to optimize your app's rendering performance. + +@jd:body + + +<iframe width="448" height="252" + src="//www.youtube.com/embed/wIy8g8yNhNk?autohide=1&showinfo=0" + frameborder="0" allowfullscreen="" + style="float: right; margin: 0 0 20px 20px;"></iframe> + +<p> + A key aspect of your app that influences your users' perception of quality is + the smoothness with which it renders images and text to the screen. It is + important to avoid jank and sluggish responsiveness when your app is drawing + to the screen. +</p> + +<p> + This section helps you learn several ways to optimize your app's rendering + performance: reducing overdraw, optimizing view hierarchies, and taking + advantage of the Profile GPU tool. +</p> + +<h2>Rendering Actions</h2> + +<dl> + <dt> + <strong><a href="overdraw.html"> + Reducing Overdraw</a></strong> + </dt> + <dd> + Minimize the number of times you app redraws the same pixel in a single + frame. + </dd> + + <dt> + <strong><a href="profile-gpu.html"> + Optimizing View Hierarchies</a></strong> + </dt> + <dd> + Make sure your layout and measurement are executing efficiently, and + avoid double taxation. + </dd> + + + <dt> + <strong><a href="profile-gpu.html"> + Using the Profile GPU Tool</a></strong> + </dt> + <dd> + Take advantage of this on-device tool to identify bottlenecks that + may be slowing your app's rendering down. + </dd> + + +</dl> diff --git a/docs/html/topic/performance/optimizing-view-hierarchies.jd b/docs/html/topic/performance/rendering/optimizing-view-hierarchies.jd index 27d3d163f853..27d3d163f853 100644 --- a/docs/html/topic/performance/optimizing-view-hierarchies.jd +++ b/docs/html/topic/performance/rendering/optimizing-view-hierarchies.jd diff --git a/docs/html/topic/performance/rendering/overdraw.jd b/docs/html/topic/performance/rendering/overdraw.jd new file mode 100644 index 000000000000..c1feff57a26b --- /dev/null +++ b/docs/html/topic/performance/rendering/overdraw.jd @@ -0,0 +1,197 @@ +page.title=Reducing Overdraw +page.metaDescription=Improve performance by reducing unnecessary rendering. + +meta.tags="performance" +page.tags="performance" + +@jd:body + +<div id="qv-wrapper"> +<div id="qv"> + +<h2>In this document</h2> + <ol> + + <li> + <a href="#understanding">Understanding Overdraw</a> + </li> + <li> + <a href="#finding">Finding Overdraw Problems</a> + </li> + <li> + <a href="#fixing">Fixing Overdraw</a> + </li> + </ol> + </div> +</div> + +<p> +An app may draw the same pixel more than once within a single frame, an event +called <em>overdraw</em>. Overdraw is usually unnecessary, and best +eliminated. It manifests itself as a performance problem by wasting GPU time to +render pixels that don't contribute to what the user sees on the screen. +</p> + +<p> +This document explains overdraw: what it is, how to diagnose it, and actions you +can take to eliminate or mitigate it. +</p> + +<h2 name="understanding">Understanding Overdraw</h2> + +<p> +Overdraw refers to the system's drawing a pixel on the screen multiple times +in a single frame of rendering. For example, if we have a bunch of stacked UI +cards, each card hides a portion of the one below it. +</p> + +<p> +However, the system still needs to draw even the hidden portions of the cards +in the stack. This is because stacked cards are rendered according to the +<a class="external-link" +href="https://en.wikipedia.org/wiki/Painter%27s_algorithm">painter's +algorithm</a>: that is, in back-to-front order. +This sequence of rendering allows the system to apply proper alpha blending to +translucent objects such as shadows. +</p> + +<h2 name="finding">Finding Overdraw Problems</h2> + +<p> +The platform offers several tools to help you determine if overdraw is +affecting your app's performance. These tools are available right on the device, +and accessible by turning on <strong>Developer Settings</strong></a> under +<em>Settings</em>. For more information about device developer settings, see +<a href="/studio/run/device.html#developer-device-options">Run Apps on a +Hardware Device</a>. +</p> + +<h3 id="dgot">Debug GPU overdraw tool</h3> + +<p> +The Debug GPU Overdraw tool uses color-coding to show the number of times your +app draws each pixel on the screen. The higher this count, the +more likely it is that overdraw affects your app's performance. +</p> + +<p> +For more information on how to use the tool, refer to the related +<a href="/studio/profile/dev-options-overdraw.html">walkthrough</a> +and +<a href="https://io2015codelabs.appspot.com/codelabs/android-performance-debug-gpu-overdraw#1"> +codelab</a>. +</p> + +<h3 id="pgrt">Profile GPU rendering tool</h3> + +<p> +The Profile GPU Rendering tool displays, as a scrolling histogram, the time +each stage of the rendering pipeline takes to display a single frame. The +<em>Process</em> part of each bar, indicated in orange, shows when the system +is swapping buffers; this metric provides important clues about overdraw. +</p> + +<p> +On less performant GPUs, available fill-rate (the speed at which the GPU can +fill the frame buffer) can be quite low. As the number of +pixels required to draw a frame increases, the GPU may take longer to process +new commands, and ask the rest of the system to wait until it can catch up. +The <em>Process</em> bar shows that this spike happens as the GPU gets +overwhelmed trying to draw pixels as fast as possible. Issues other than +raw numbers of pixels may also cause this metric to spike. For example, +if the Debug GPU Overdraw tool shows heavy overdraw and <em>Process</em> spikes, +there's likely an issue with overdraw. +</p> + +<p class="note"><strong>Note: </strong>The +<a href="https://developer.android.com/studio/profile/dev-options-rendering.html"> +Profile GPU Rendering</a> tool does not +work with apps that use the NDK. This is because the system pushes framework +messages to the background whenever OpenGL takes a full-screen context. In +such cases, you may find a profiling tool provided by the GPU manufacturer +helpful.</p> + +<h2 name="fixing">Fixing Overdraw</h2> + +<p> +There are several strategies you can pursue to reduce or eliminate overdraw: +</p> + +<ul> + <li>Removing unneeded backgrounds in layouts.</li> + <li>Flattening the view hierarchy.</li> + <li>Reducing transparency.</li> +</ul> + +<p> +This section provides information about each of these approaches. +</p> + +<h3 id="rubil">Removing unneeded backgrounds in layouts</h3> + +<p> +By default, a layout does not have a background, which means it does not render +anything directly by itself. When layouts do have backgrounds, however, they may +contribute to overdraw. +</p> + +<p> +Removing unnecessary backgrounds is a quick way of improving rendering +performance. An unnecessary background may never be visible because it's +completely covered by everything else the app is drawing on top of that +view. For example, the system may entirely cover up a parent's +background when it draws child views on top of it. +</p> + +<p> +To find out why you're overdrawing, walk through the hierarchy in +the <a href="/studio/profile/hierarchy-viewer.html">Hierarchy Viewer</a> tool. +As you do so, look out for any backgrounds you can eliminate because +they are not visible to the user. Cases where many containers share a +common background color offer another opportunity to eliminate unneeded +backgrounds: You can set the window background to the main background color +of your app, and leave all of the containers above it with no background values +defined. +</p> + +<h3 id="fvh">Flattening view hierarchy</h3> + +<p> +Modern layouts make it easy to stack and layer views to produce beautiful +design. However, doing so can degrade performance by resulting in overdraw, +especially in scenarios where each stacked view object is opaque, requiring the +drawing of both seen and unseen pixels to the screen. +</p> + +<p> +If you encounter this sort of issue, you may be able to improve performance by +optimizing your view hierarchy to reduce the number of overlapping UI objects. +For more information about how to accomplish this, see +<a href="/topic/performance/optimizing-view-hierarchies.html">Optimizing View +Hierarchies</a>. +</p> + +<h3 id="rt">Reducing transparency</h3> + +<p> +Rendering of transparent pixels on screen, known as alpha rendering, is a key +contributor to overdraw. Unlike standard overdraw, +in which the system completely hides existing drawn pixels by drawing +opaque pixels on top of them, transparent +objects require existing pixels to be drawn first, so that the right blending +equation can occur. Visual effects like transparent animations, fade-outs, and +drop shadows all involve some sort of transparency, and can therefore contribute +significantly to overdraw. You can improve overdraw in these situations by +reducing the number of transparent objects you render. For example, you can get +gray text by drawing black text in a {@link android.widget.TextView} with a +translucent alpha value set on it. But you can get the same effect with far +better performance by simply drawing the text in gray. +</p> + +<p> +To learn more about performance costs that transparency imposes throughout the +entire drawing pipeline, watch the video +<a href="https://www.youtube.com/watch?v=wIy8g8yNhNk&index=46&list=PLWz5rJ2EKKc9CBxr3BVjPTPoDPLdPIFCE"> +Hidden Costs of Transparency</a>. +</p> + diff --git a/docs/html/topic/performance/rendering/profile-gpu.jd b/docs/html/topic/performance/rendering/profile-gpu.jd new file mode 100644 index 000000000000..11c38e40783d --- /dev/null +++ b/docs/html/topic/performance/rendering/profile-gpu.jd @@ -0,0 +1,406 @@ +page.title=Analyzing Rendering with Profile GPU +page.metaDescription=Use the Profile GPU tool to help you optimize your app's rendering performance. + +meta.tags="power" +page.tags="power" + +@jd:body + +<div id="qv-wrapper"> +<div id="qv"> + +<h2>In this document</h2> + <ol> + <li> + <a href="#visrep">Visual Representation</a></li> + </li> + + <li> + <a href="#sam">Stages and Their Meanings</a> + + <ul> + <li> + <a href="#sv">Input Handling</a> + </li> + <li> + <a href="#asd">Animation</a> + </li> + <li> + <a href="#asd">Measurement/Layout</a> + </li> + <li> + <a href="#asd">Drawing</a> + </li> + </li> + <li> + <a href="#asd">Sync/Upload</a> + </li> + <li> + <a href="#asd">Issuing Commands</a> + </li> + <li> + <a href="#asd">Processing/Swapping Buffer</a> + </li> + <li> + <a href="#asd">Miscellaneous</a> + </li> + </ul> + </li> + </ol> + </div> +</div> + +<p> +The <a href="/studio/profile/dev-options-rendering.html"> +Profile GPU Rendering</a> tool indicates the relative time that each stage of +the rendering pipeline takes to render the previous frame. This knowledge +can help you identify bottlenecks in the pipeline, so that you +can know what to optimize to improve your app's rendering performance. +</p> + +<p> +This page briefly explains what happens during each pipeline stage, and +discusses issues that can cause bottlenecks there. Before reading +this page, you should be familiar with the information presented in the +<a href="/studio/profile/dev-options-rendering.html">Profile GPU +Rendering Walkthrough</a>. In addition, to understand how all of the +stages fit together, it may be helpful to review +<a href="https://www.youtube.com/watch?v=we6poP0kw6E&index=64&list=PLWz5rJ2EKKc9CBxr3BVjPTPoDPLdPIFCE"> +how the rendering pipeline works.</a> +</p> + +<h2 id="#visrep">Visual Representation</h2> + +<p> +The Profile GPU Rendering tool displays stages and their relative times in the +form of a graph: a color-coded histogram. Figure 1 shows an example of +such a display. +</p> + + <img src="{@docRoot}topic/performance/images/bars.png"> + <p class="img-caption"> +<strong>Figure 1.</strong> Profile GPU Rendering Graph + </p> + +</p> + +<p> +Each segment of each vertical bar displayed in the Profile GPU Rendering +graph represents a stage of the pipeline and is highlighted using a specific +color in +the bar graph. Figure 2 shows a key to the meaning of each displayed color. +</p> + + <img src="{@docRoot}topic/performance/images/s-profiler-legend.png"> + <p class="img-caption"> +<strong>Figure 2.</strong> Profile GPU Rendering Graph Legend + </p> + +<p> +Once you understand what each color signfiies, +you can target specific aspects of your +app to try to optimize its rendering performance. +</p> + +<h2 id="sam">Stages and Their Meanings</a></h2> + +<p> +This section explains what happens during each stage corresponding +to a color in Figure 2, as well as bottleneck causes to look out for. +</p> + + +<h3 id="ih">Input Handling</h3> + +<p> +The input handling stage of the pipeline measures how long the app +spent handling input events. This metric indicates how long the app +spent executing code called as a result of input event callbacks. +</p> + +<h4>When this segment is large</h4> + +<p> +High values in this area are typically a result of too much work, or +too-complex work, occurring inside the input-handler event callbacks. +Since these callbacks always occur on the main thread, solutions to this +problem focus on optimizing the work directly, or offloading the work to a +different thread. +</p> + +<p> +It’s also worth noting that {@link android.support.v7.widget.RecyclerView} +scrolling can appear in this phase. +{@link android.support.v7.widget.RecyclerView} scrolls immediately when it +consumes the touch event. As a result, +it can inflate or populate new item views. For this reason, it’s important to +make this operation as fast as possible. Profiling tools like Traceview or +Systrace can help you investigate further. +</p> + +<h3 id="at">Animation</h3> + +<p> +The Animations phase shows you just how long it took to evaluate all the +animators that were running in that frame. The most common animators are +{@link android.animation.ObjectAnimator}, +{@link android.view.ViewPropertyAnimator}, and +<a href="/training/transitions/overview.html">Transitions</a>. +</p> + +<h4>When this segment is large</h4> + +<p> +High values in this area are typically a result of work that’s executing due +to some property change of the animation. For example, a fling animation, +which scrolls your {@link android.widget.ListView} or +{@link android.support.v7.widget.RecyclerView}, causes large amounts of view +inflation and population. +</p> + +<h3 id="ml">Measurement/Layout</h3> + +<p> +In order for Android to draw your view items on the screen, it executes +two specific operations across layouts and views in your view hierarchy. +</p> + +<p> +First, the system measures the view items. Every view and layout has +specific data that describes the size of the object on the screen. Some views +can have a specific size; others have a size that adapts to the size +of the parent layout container +</p> + +<p> +Second, the system lays out the view items. Once the system calculates +the sizes of children views, the system can proceed with layout, sizing +and positioning the views on the screen. +</p> + +<p> +The system performs measurement and layout not only for the views to be drawn, +but also for the parent hierarchies of those views, all the way up to the root +view. +</p> + +<h4>When this segment is large</h4> + +<p> +If your app spends a lot of time per frame in this area, it is +usually either because of the sheer volume of views that need to be +laid out, or problems such as +<a href="/topic/performance/optimizing-view-hierarchies.html#double"> +double taxation</a> at the wrong spot in your +hierarchy. In either of these cases, addressing performance involves +<a href="/topic/performance/optimizing-view-hierarchies.html">improving +the performance of your view hierarchies</a>. +</p> + +<p> +Code that you’ve added to +{@link android.view.View#onLayout(boolean, int, int, int, int)} or +{@link android.view.View#onMeasure(int, int)} +can also cause performance +issues. <a href="/studio/profile/traceview.html">Traceview</a> and +<a href="/studio/profile/systrace.html">Systrace</a> can help you examine +the callstacks to identify problems your code may have. +</p> + +<h3 id="draw">Drawing</h3> + +<p> +The draw stage translates a view’s rendering operations, such as drawing +a background or drawing text, into a sequence of native drawing commands. +The system captures these commands into a display list. +</p> + +<p> +The Draw bar records how much time it takes to complete capturing the commands +into the display list, for all the views that needed to be updated on the screen +this frame. The measured time applies to any code that you have added to the UI +objects in your app. Examples of such code may be the +{@link android.view.View#onDraw(android.graphics.Canvas) onDraw()}, +{@link android.view.View#dispatchDraw(android.graphics.Canvas) dispatchDraw()}, +and the various <code>draw ()methods</code> belonging to the subclasses of the +{@link android.graphics.drawable.Drawable} class. +</p> + +<h4>When this segment is large</h4> + +<p> +In simplified terms, you can understand this metric as showing how long it took +to run all of the calls to +{@link android.view.View#onDraw(android.graphics.Canvas) onDraw()} +for each invalidated view. This +measurement includes any time spent dispatching draw commands to children and +drawables that may be present. For this reason, when you see this bar spike, the +cause could be that a bunch of views suddenly became invalidated. Invalidation +makes it necessary to regenerate views' display lists. Alternatively, a +lengthy time may be the result of a few custom views that have some extremely +complex logic in their +{@link android.view.View#onDraw(android.graphics.Canvas) onDraw()} methods. +</p> + +<h3 id="su">Sync/Upload</h3> + +<p> +The Sync & Upload metric represents the time it takes to transfer +bitmap objects from CPU memory to GPU memory during the current frame. +</p> + +<p> +As different processors, the CPU and the GPU have different RAM areas +dedicated to processing. When you draw a bitmap on Android, the system +transfers the bitmap to GPU memory before the GPU can render it to the +screen. Then, the GPU caches the bitmap so that the system doesn’t need to +transfer the data again unless the texture gets evicted from the GPU texture +cache. +</p> + +<p class="note"><strong>Note:</strong> On Lollipop devices, this stage is +purple. +</p> + +<h4>When this segment is large</h4> + +<p> +All resources for a frame need to reside in GPU memory before they can be +used to draw a frame. This means that a high value for this metric could mean +either a large number of small resource loads or a small number of very large +resources. A common case is when an app displays a single bitmap that’s +close to the size of the screen. Another case is when an app displays a +large number of thumbnails. +</p> + +<p> +To shrink this bar, you can employ techniques such as: +</p> + +<ul> + <li> +Ensuring your bitmap resolutions are not much larger than the size at which they +will be displayed. For example, your app should avoid displaying a 1024x1024 +image as a 48x48 image. + </li> + + <li> +Taking advantage of {@link android.graphics.Bitmap#prepareToDraw()} +to asynchronously pre-upload a bitmap before the next sync phase. + </li> +</ul> + +<h3 id="ic">Issuing Commands</h3> + +<p> +The <em>Issue Commands</em> segment represents the time it takes to issue all +of the commands necessary for drawing display lists to the screen. +</p> + +<p> +For the system to draw display lists to the screen, it sends the +necessary commands to the GPU. Typically, it performs this action through the +<a href="/guide/topics/graphics/opengl.html">OpenGL ES</a> API. +</p> + +<p> +This process takes some time, as the system performs final transformation +and clipping for each command before sending the command to the GPU. Additional +overhead then arises on the GPU side, which computes the final commands. These +commands include final transformations, and additional clipping. +</p> + +<h4>When this segment is large</h4> + +<p> +The time spent in this stage is a direct measure of the complexity and +quantity of display lists that the system renders in a given +frame. For example, having many draw operations, especially in cases where +there's a small inherent cost to each draw primitive, could inflate this time. +For example: +</p> + +<pre> +for (int i = 0; i < 1000; i++) +canvas.drawPoint() +</pre> + +<p> +is a lot more expensive to issue than: +</p> + +<pre> +canvas.drawPoints(mThousandPointArray); +</pre> + +<p> +There isn’t always a 1:1 correlation between issuing commands and +actually drawing display lists. Unlike <em>Issue Commands</em>, +which captures the time it takes to send drawing commands to the GPU, +the <em>Draw</em> metric represents the time that it took to capture the issued +commands into the display list. +</p> + +<p> +This difference arises because the display lists are cached by +the system wherever possible. As a result, there are situations where a +scroll, transform, or animation requires the system to re-send a display +list, but not have to actually rebuild it—recapture the drawing +commands—from scratch. As a result, you can see a high “Issue +commands” bar without seeing a high <em>Draw commands</em> bar. +</p> + +<h3 id="psb">Processing/Swapping Buffers</h3> + +<p> +Once Android finishes submitting all its display list to the GPU, +the system issues one final command to tell the graphics driver that it's +done with the current frame. At this point, the driver can finally present +the updated image to the screen. +</p> + +<h4>When this segment is large</h4> + +<p> +It’s important to understand that the GPU executes work in parallel with the +CPU. The Android system issues draw commands to the GPU, and then moves on to +the next task. The GPU reads those draw commands from a queue and processes +them. +</p> + +<p> +In situations where the CPU issues commands faster than the GPU +consumes them, the communications queue between the processors can become +full. When this occurs, the CPU blocks, and waits until there is space in the +queue to place the next command. This full-queue state arises often during the +<em>Swap Buffers</em> stage, because at that point, a whole frame’s worth of +commands have been submitted. +</p> + +</p> +The key to mitigating this problem is to reduce the complexity of work occurring +on the GPU, in similar fashion to what you would do for the “Issue Commands” +phase. +</p> + + +<h3 id="mt">Miscellaneous</h3> + +<p> +In addition to the time it takes the rendering system to perform its work, +there’s an additional set of work that occurs on the main thread and has +nothing to do with rendering. Time that this work consumes is reported as +<em>misc time</em>. Misc time generally represents work that might be occurring +on the UI thread between two consecutive frames of rendering. +</p> + +<h4>When this segment is large</h4> + +<p> +If this value is high, it is likely that your app has callbacks, intents, or +other work that should be happening on another thread. Tools such as +<a href="/studio/profile/traceview.html">Method +Tracing</a> or <a href="/studio/profile/systrace.html">Systrace</a> can provide +visibility into the tasks that are running on +the main thread. This information can help you target performance improvements. +</p> diff --git a/docs/html/training/_book.yaml b/docs/html/training/_book.yaml index e9635be74ec3..fa50aa064204 100644 --- a/docs/html/training/_book.yaml +++ b/docs/html/training/_book.yaml @@ -1242,15 +1242,9 @@ toc: path: /training/scheduling/wakelock.html - title: Scheduling Repeating Alarms path: /training/scheduling/alarms.html - - title: Best Practices for Performance path: /training/best-performance.html section: - - title: Managing Your App's Memory - path: /training/articles/memory.html - path_attributes: - - name: description - value: How to keep your app's memory footprint small in order to improve performance on a variety of mobile devices. - title: Performance Tips path: /training/articles/perf-tips.html path_attributes: @@ -1282,23 +1276,6 @@ toc: - name: description value: How to minimize the amount of power your app requires by adapting to current power conditions and performing power-hungry tasks at proper intervals. section: - - title: Reducing Network Battery Drain - path: /training/performance/battery/network/index.html - section: - - title: Collecting Network Traffic Data - path: /training/performance/battery/network/gather-data.html - - title: Analyzing Network Traffic Data - path: /training/performance/battery/network/analyze-data.html - - title: Optimizing User-Initiated Network Use - path: /training/performance/battery/network/action-user-traffic.html - - title: Optimizing App-Initiated Network Use - path: /training/performance/battery/network/action-app-traffic.html - - title: Optimizing Server-Initiated Network Use - path: /training/performance/battery/network/action-server-traffic.html - - title: Optimizing General Network Use - path: /training/performance/battery/network/action-any-traffic.html - - title: Optimizing for Doze and App Standby - path: /training/monitoring-device-state/doze-standby.html - title: Monitoring the Battery Level and Charging State path: /training/monitoring-device-state/battery-monitoring.html path_attributes: diff --git a/docs/html/training/articles/memory.jd b/docs/html/training/articles/memory.jd deleted file mode 100644 index de7af589aefd..000000000000 --- a/docs/html/training/articles/memory.jd +++ /dev/null @@ -1,740 +0,0 @@ -page.title=Managing Your App's Memory -page.tags=ram,low memory,OutOfMemoryError,onTrimMemory -page.article=true -@jd:body - - -<div id="tb-wrapper"> -<div id="tb"> - -<h2>In this document</h2> -<ol class="nolist"> - <li><a href="#Android">How Android Manages Memory</a> - <ol> - <li><a href="#SharingRAM">Sharing Memory</a></li> - <li><a href="#AllocatingRAM">Allocating and Reclaiming App Memory</a></li> - <li><a href="#RestrictingMemory">Restricting App Memory</a></li> - <li><a href="#SwitchingApps">Switching Apps</a></li> - </ol> - </li> - <li><a href="#YourApp">How Your App Should Manage Memory</a> - <ol> - <li><a href="#Services">Use services sparingly</a></li> - <li><a href="#ReleaseMemoryAsUiGone">Release memory when your user interface becomes hidden</a></li> - <li><a href="#ReleaseMemoryAsTight">Release memory as memory becomes tight</a></li> - <li><a href="#CheckHowMuchMemory">Check how much memory you should use</a></li> - <li><a href="#Bitmaps">Avoid wasting memory with bitmaps</a></li> - <li><a href="#DataContainers">Use optimized data containers</a></li> - <li><a href="#Overhead">Be aware of memory overhead</a></li> - <li><a href="#Abstractions">Be careful with code abstractions</a></li> - <li><a href="#NanoProto">Use nano protobufs for serialized data</a></li> - <li><a href="#DependencyInjection">Avoid dependency injection frameworks</a></li> - <li><a href="#ExternalLibs">Be careful about using external libraries</a></li> - <li><a href="#OverallPerf">Optimize overall performance</a></li> - <li><a href="#Proguard">Use ProGuard to strip out any unneeded code</a></li> - <li><a href="#Zipalign">Use zipalign on your final APK</a></li> - <li><a href="#AnalyzeRam">Analyze your RAM usage</a></li> - <li><a href="#MultipleProcesses">Use multiple processes</a></li> - </ol> - </li> -</ol> -<h2>See Also</h2> -<ul> - <li><a href="{@docRoot}tools/debugging/debugging-memory.html">Investigating Your RAM Usage</a> - </li> -</ul> - -</div> -</div> - - -<p>Random-access memory (RAM) is a valuable resource in any software development environment, but -it's even more valuable on a mobile operating system where physical memory is often constrained. -Although Android's Dalvik virtual machine performs routine garbage collection, this doesn't allow -you to ignore when and where your app allocates and releases memory.</p> - -<p>In order for the garbage collector to reclaim memory from your app, you need to avoid -introducing memory leaks (usually caused by holding onto object references in global members) and -release any {@link java.lang.ref.Reference} objects at the appropriate time (as defined by -lifecycle callbacks discussed further below). For most apps, the Dalvik garbage collector takes -care of the rest: the system reclaims your memory allocations when the corresponding objects leave -the scope of your app's active threads.</p> - -<p>This document explains how Android manages app processes and memory allocation, and how you can -proactively reduce memory usage while developing for Android. For more information about general -practices to clean up your resources when programming in Java, refer to other books or online -documentation about managing resource references. If you’re looking for information about how to -analyze your app’s memory once you’ve already built it, read <a -href="{@docRoot}tools/debugging/debugging-memory.html">Investigating Your RAM Usage</a>.</p> - - - - -<h2 id="Android">How Android Manages Memory</h2> - -<p>Android does not offer swap space for memory, but it does use <a href= -"http://en.wikipedia.org/wiki/Paging" class="external-link">paging</a> and <a href= -"http://en.wikipedia.org/wiki/Memory-mapped_files" class="external-link">memory-mapping</a> -(mmapping) to manage memory. This means that any memory you modify—whether by allocating -new objects or touching mmapped pages—remains resident in RAM and cannot be paged out. -So the only way to completely release memory from your app is to release object references you may -be holding, making the memory available to the garbage collector. That is with one exception: -any files mmapped in without modification, such as code, can be paged out of RAM if the system -wants to use that memory elsewhere.</p> - - -<h3 id="SharingRAM">Sharing Memory</h3> - -<p>In order to fit everything it needs in RAM, Android tries to share RAM pages across processes. It -can do so in the following ways:</p> -<ul> -<li>Each app process is forked from an existing process called Zygote. -The Zygote process starts when the system boots and loads common framework code and resources -(such as activity themes). To start a new app process, the system forks the Zygote process then -loads and runs the app's code in the new process. This allows most of the RAM pages allocated for -framework code and resources to be shared across all app processes.</li> - -<li>Most static data is mmapped into a process. This not only allows that same data to be shared -between processes but also allows it to be paged out when needed. Example static data include: -Dalvik code (by placing it in a pre-linked {@code .odex} file for direct mmapping), app resources -(by designing the resource table to be a structure that can be mmapped and by aligning the zip -entries of the APK), and traditional project elements like native code in {@code .so} files.</li> - -<li>In many places, Android shares the same dynamic RAM across processes using explicitly allocated -shared memory regions (either with ashmem or gralloc). For example, window surfaces use shared -memory between the app and screen compositor, and cursor buffers use shared memory between the -content provider and client.</li> -</ul> - -<p>Due to the extensive use of shared memory, determining how much memory your app is using requires -care. Techniques to properly determine your app's memory use are discussed in <a -href="{@docRoot}tools/debugging/debugging-memory.html">Investigating Your RAM Usage</a>.</p> - - -<h3 id="AllocatingRAM">Allocating and Reclaiming App Memory</h3> - -<p>Here are some facts about how Android allocates then reclaims memory from your app:</p> - -<ul> -<li>The Dalvik heap for each process is constrained to a single virtual memory range. This defines -the logical heap size, which can grow as it needs to (but only up to a limit that the system defines -for each app).</li> - -<li>The logical size of the heap is not the same as the amount of physical memory used by the heap. -When inspecting your app's heap, Android computes a value called the Proportional Set Size (PSS), -which accounts for both dirty and clean pages that are shared with other processes—but only in an -amount that's proportional to how many apps share that RAM. This (PSS) total is what the system -considers to be your physical memory footprint. For more information about PSS, see the <a -href="{@docRoot}tools/debugging/debugging-memory.html#ViewingAllocations">Investigating Your -RAM Usage</a> guide.</li> - -<li>The Dalvik heap does not compact the logical size of the heap, meaning that Android does not -defragment the heap to close up space. Android can only shrink the logical heap size when there -is unused space at the end of the heap. But this doesn't mean the physical memory used by the heap -can't shrink. After garbage collection, Dalvik walks the heap and finds unused pages, then returns -those pages to the kernel using madvise. So, paired allocations and deallocations of large -chunks should result in reclaiming all (or nearly all) the physical memory used. However, -reclaiming memory from small allocations can be much less efficient because the page used -for a small allocation may still be shared with something else that has not yet been freed.</li> -</ul> - - -<h3 id="RestrictingMemory">Restricting App Memory</h3> - -<p>To maintain a functional multi-tasking environment, Android sets a hard limit on the heap size -for each app. The exact heap size limit varies between devices based on how much RAM the device -has available overall. If your app has reached the heap capacity and tries to allocate more -memory, it will receive an {@link java.lang.OutOfMemoryError}.</p> - -<p>In some cases, you might want to query the system to determine exactly how much heap space you -have available on the current device—for example, to determine how much data is safe to keep in a -cache. You can query the system for this figure by calling {@link -android.app.ActivityManager#getMemoryClass()}. This returns an integer indicating the number of -megabytes available for your app's heap. This is discussed further below, under -<a href="#CheckHowMuchMemory">Check how much memory you should use</a>.</p> - - -<h3 id="SwitchingApps">Switching Apps</h3> - -<p>Instead of using swap space when the user switches between apps, Android keeps processes that -are not hosting a foreground ("user visible") app component in a least-recently used (LRU) cache. -For example, when the user first launches an app, a process is created for it, but when the user -leaves the app, that process does <em>not</em> quit. The system keeps the process cached, so if -the user later returns to the app, the process is reused for faster app switching.</p> - -<p>If your app has a cached process and it retains memory that it currently does not need, -then your app—even while the user is not using it—is constraining the system's -overall performance. So, as the system runs low on memory, it may kill processes in the LRU cache -beginning with the process least recently used, but also giving some consideration toward -which processes are most memory intensive. To keep your process cached as long as possible, follow -the advice in the following sections about when to release your references.</p> - -<p>More information about how processes are cached while not running in the foreground and how -Android decides which ones -can be killed is available in the <a href="{@docRoot}guide/components/processes-and-threads.html" ->Processes and Threads</a> guide.</p> - - - - -<h2 id="YourApp">How Your App Should Manage Memory</h2> - -<p>You should consider RAM constraints throughout all phases of development, including during app -design (before you begin development). There are many -ways you can design and write code that lead to more efficient results, through aggregation of the -same techniques applied over and over.</p> - -<p>You should apply the following techniques while designing and implementing your app to make it -more memory efficient.</p> - - -<h3 id="Services">Use services sparingly</h3> - -<p>If your app needs a <a href="{@docRoot}guide/components/services.html">service</a> -to perform work in the background, do not keep it running unless -it's actively performing a job. Also be careful to never leak your service by failing to stop it -when its work is done.</p> - -<p>When you start a service, the system prefers to always keep the process for that service -running. This makes the process very expensive because the RAM used by the service can’t be used by -anything else or paged out. This reduces the number of cached processes that the system can keep in -the LRU cache, making app switching less efficient. It can even lead to thrashing in the system -when memory is tight and the system can’t maintain enough processes to host all the services -currently running.</p> - -<p>The best way to limit the lifespan of your service is to use an {@link -android.app.IntentService}, which finishes -itself as soon as it's done handling the intent that started it. For more information, read -<a href="{@docRoot}training/run-background-service/index.html">Running in a Background Service</a> -.</p> - -<p>Leaving a service running when it’s not needed is <strong>one of the worst memory-management -mistakes</strong> an Android app can make. So don’t be greedy by keeping a service for your app -running. Not only will it increase the risk of your app performing poorly due to RAM constraints, -but users will discover such misbehaving apps and uninstall them.</p> - - -<h3 id="ReleaseMemoryAsUiGone">Release memory when your user interface becomes hidden</h3> - -<p>When the user navigates to a different app and your UI is no longer visible, you should -release any resources that are used by only your UI. Releasing UI resources at this time can -significantly increase the system's capacity for cached processes, which has a direct impact on the -quality of the user experience.</p> - -<p>To be notified when the user exits your UI, implement the {@link -android.content.ComponentCallbacks2#onTrimMemory onTrimMemory()} callback in your {@link -android.app.Activity} classes. You should use this -method to listen for the {@link android.content.ComponentCallbacks2#TRIM_MEMORY_UI_HIDDEN} level, -which indicates your UI is now hidden from view and you should free resources that only your UI -uses.</p> - - -<p>Notice that your app receives the {@link android.content.ComponentCallbacks2#onTrimMemory -onTrimMemory()} callback with {@link android.content.ComponentCallbacks2#TRIM_MEMORY_UI_HIDDEN} -only when <em>all the UI components</em> of your app process become hidden from the user. -This is distinct -from the {@link android.app.Activity#onStop onStop()} callback, which is called when an {@link -android.app.Activity} instance becomes hidden, which occurs even when the user moves to -another activity in your app. So although you should implement {@link android.app.Activity#onStop -onStop()} to release activity resources such as a network connection or to unregister broadcast -receivers, you usually should not release your UI resources until you receive {@link -android.content.ComponentCallbacks2#onTrimMemory onTrimMemory(TRIM_MEMORY_UI_HIDDEN)}. This ensures -that if the user navigates <em>back</em> from another activity in your app, your UI resources are -still available to resume the activity quickly.</p> - - - -<h3 id="ReleaseMemoryAsTight">Release memory as memory becomes tight</h3> - -<p>During any stage of your app's lifecycle, the {@link -android.content.ComponentCallbacks2#onTrimMemory onTrimMemory()} callback also tells you when -the overall device memory is getting low. You should respond by further releasing resources based -on the following memory levels delivered by {@link android.content.ComponentCallbacks2#onTrimMemory -onTrimMemory()}:</p> - -<ul> -<li>{@link android.content.ComponentCallbacks2#TRIM_MEMORY_RUNNING_MODERATE} -<p>Your app is running and not considered killable, but the device is running low on memory and the -system is actively killing processes in the LRU cache.</p> -</li> - -<li>{@link android.content.ComponentCallbacks2#TRIM_MEMORY_RUNNING_LOW} -<p>Your app is running and not considered killable, but the device is running much lower on -memory so you should release unused resources to improve system performance (which directly -impacts your app's performance).</p> -</li> - -<li>{@link android.content.ComponentCallbacks2#TRIM_MEMORY_RUNNING_CRITICAL} -<p>Your app is still running, but the system has already killed most of the processes in the -LRU cache, so you should release all non-critical resources now. If the system cannot reclaim -sufficient amounts of RAM, it will clear all of the LRU cache and begin killing processes that -the system prefers to keep alive, such as those hosting a running service.</p> -</li> -</ul> - -<p>Also, when your app process is currently cached, you may receive one of the following -levels from {@link android.content.ComponentCallbacks2#onTrimMemory onTrimMemory()}:</p> -<ul> -<li>{@link android.content.ComponentCallbacks2#TRIM_MEMORY_BACKGROUND} -<p>The system is running low on memory and your process is near the beginning of the LRU list. -Although your app process is not at a high risk of being killed, the system may already be killing -processes in the LRU cache. You should release resources that are easy to recover so your process -will remain in the list and resume quickly when the user returns to your app.</p> -</li> - -<li>{@link android.content.ComponentCallbacks2#TRIM_MEMORY_MODERATE} -<p>The system is running low on memory and your process is near the middle of the LRU list. If the -system becomes further constrained for memory, there's a chance your process will be killed.</p> -</li> - -<li>{@link android.content.ComponentCallbacks2#TRIM_MEMORY_COMPLETE} -<p>The system is running low on memory and your process is one of the first to be killed if the -system does not recover memory now. You should release everything that's not critical to -resuming your app state.</p> - -</li> -</ul> - -<p>Because the {@link android.content.ComponentCallbacks2#onTrimMemory onTrimMemory()} callback was -added in API level 14, you can use the {@link android.content.ComponentCallbacks#onLowMemory()} -callback as a fallback for older versions, which is roughly equivalent to the {@link -android.content.ComponentCallbacks2#TRIM_MEMORY_COMPLETE} event.</p> - -<p class="note"><strong>Note:</strong> When the system begins killing processes in the LRU cache, -although it primarily works bottom-up, it does give some consideration to which processes are -consuming more memory and will thus provide the system more memory gain if killed. -So the less memory you consume while in the LRU list overall, the better your chances are -to remain in the list and be able to quickly resume.</p> - - - -<h3 id="CheckHowMuchMemory">Check how much memory you should use</h3> - -<p>As mentioned earlier, each Android-powered device has a different amount of RAM available to the -system and thus provides a different heap limit for each app. You can call {@link -android.app.ActivityManager#getMemoryClass()} to get an estimate of your app's available heap in -megabytes. If your app tries to allocate more memory than is available here, it will receive an -{@link java.lang.OutOfMemoryError}.</p> - -<p>In very special situations, you can request a larger heap size by setting the <a -href="{@docRoot}guide/topics/manifest/application-element.html#largeHeap">{@code largeHeap}</a> -attribute to "true" in the manifest <a -href="{@docRoot}guide/topics/manifest/application-element.html">{@code <application>}</a> -tag. If you do so, you can call {@link -android.app.ActivityManager#getLargeMemoryClass()} to get an estimate of the large heap size.</p> - -<p>However, the ability to request a large heap is intended only for a small set of apps that can -justify the need to consume more RAM (such as a large photo editing app). <strong>Never request a -large heap simply because you've run out of memory</strong> and you need a quick fix—you -should use it only when you know exactly where all your memory is being allocated and why it must -be retained. Yet, even when you're confident your app can justify the large heap, you should avoid -requesting it to whatever extent possible. Using the extra memory will increasingly be to the -detriment of the overall user experience because garbage collection will take longer and system -performance may be slower when task switching or performing other common operations.</p> - -<p>Additionally, the large heap size is not the same on all devices and, when running on -devices that have limited RAM, the large heap size may be exactly the same as the regular heap -size. So even if you do request the large heap size, you should call {@link -android.app.ActivityManager#getMemoryClass()} to check the regular heap size and strive to always -stay below that limit.</p> - - -<h3 id="Bitmaps">Avoid wasting memory with bitmaps</h3> - -<p>When you load a bitmap, keep it in RAM only at the resolution you need for the current device's -screen, scaling it down if the original bitmap is a higher resolution. Keep in mind that an -increase in bitmap resolution results in a corresponding (increase<sup>2</sup>) in memory needed, -because both the X and Y dimensions increase.</p> - -<p class="note"><strong>Note:</strong> On Android 2.3.x (API level 10) and below, bitmap objects -always appear as the same size in your app heap regardless of the image resolution (the actual -pixel data is stored separately in native memory). This makes it more difficult to debug the bitmap -memory allocation because most heap analysis tools do not see the native allocation. However, -beginning in Android 3.0 (API level 11), the bitmap pixel data is allocated in your app's Dalvik -heap, improving garbage collection and debuggability. So if your app uses bitmaps and you're having -trouble discovering why your app is using some memory on an older device, switch to a device -running Android 3.0 or higher to debug it.</p> - -<p>For more tips about working with bitmaps, read <a -href="{@docRoot}training/displaying-bitmaps/manage-memory.html">Managing Bitmap Memory</a>.</p> - - -<h3 id="DataContainers">Use optimized data containers</h3> - -<p>Take advantage of optimized containers in the Android framework, such as {@link -android.util.SparseArray}, {@link android.util.SparseBooleanArray}, and {@link -android.support.v4.util.LongSparseArray}. The generic {@link java.util.HashMap} -implementation can be quite memory -inefficient because it needs a separate entry object for every mapping. Additionally, the {@link -android.util.SparseArray} classes are more efficient because they avoid the system's need -to <acronym title= -"Automatic conversion from primitive types to object classes (such as int to Integer)" ->autobox</acronym> -the key and sometimes value (which creates yet another object or two per entry). And don't be -afraid of dropping down to raw arrays when that makes sense.</p> - - - -<h3 id="Overhead">Be aware of memory overhead</h3> - -<p>Be knowledgeable about the cost and overhead of the language and libraries you are using, and -keep this information in mind when you design your app, from start to finish. Often, things on the -surface that look innocuous may in fact have a large amount of overhead. Examples include:</p> -<ul> -<li>Enums often require more than twice as much memory as static constants. You should strictly -avoid using enums on Android.</li> - -<li>Every class in Java (including anonymous inner classes) uses about 500 bytes of code.</li> - -<li>Every class instance has 12-16 bytes of RAM overhead.</li> - -<li>Putting a single entry into a {@link java.util.HashMap} requires the allocation of an -additional entry object that takes 32 bytes (see the previous section about <a -href="#DataContainers">optimized data containers</a>).</li> -</ul> - -<p>A few bytes here and there quickly add up—app designs that are class- or object-heavy will suffer -from this overhead. That can leave you in the difficult position of looking at a heap analysis and -realizing your problem is a lot of small objects using up your RAM.</p> - - -<h3 id="Abstractions">Be careful with code abstractions</h3> - -<p>Often, developers use abstractions simply as a "good programming practice," because abstractions -can improve code flexibility and maintenance. However, abstractions come at a significant cost: -generally they require a fair amount more code that needs to be executed, requiring more time and -more RAM for that code to be mapped into memory. So if your abstractions aren't supplying a -significant benefit, you should avoid them.</p> - - -<h3 id="NanoProto">Use nano protobufs for serialized data</h3> - -<p><a href="https://developers.google.com/protocol-buffers/docs/overview">Protocol -buffers</a> are a language-neutral, platform-neutral, extensible mechanism designed by Google for -serializing structured data—think XML, but smaller, faster, and simpler. If you decide to use -protobufs for your data, you should always use nano protobufs in your client-side code. Regular -protobufs generate extremely verbose code, which will cause many kinds of problems in your app: -increased RAM use, significant APK size increase, slower execution, and quickly hitting the DEX -symbol limit.</p> - -<p>For more information, see the "Nano version" section in the <a -href="https://android.googlesource.com/platform/external/protobuf/+/master/java/README.txt" -class="external-link">protobuf readme</a>.</p> - - - -<h3 id="DependencyInjection">Avoid dependency injection frameworks</h3> - -<p>Using a dependency injection framework such as <a -href="https://code.google.com/p/google-guice/" class="external-link">Guice</a> or -<a href="https://github.com/roboguice/roboguice" class="external-link">RoboGuice</a> may be -attractive because they can simplify the code you write and provide an adaptive environment -that's useful for testing and other configuration changes. However, these frameworks tend to perform -a lot of process initialization by scanning your code for annotations, which can require significant -amounts of your code to be mapped into RAM even though you don't need it. These mapped pages are -allocated into clean memory so Android can drop them, but that won't happen until the pages have -been left in memory for a long period of time.</p> - - -<h3 id="ExternalLibs">Be careful about using external libraries</h3> - -<p>External library code is often not written for mobile environments and can be inefficient when used -for work on a mobile client. At the very least, when you decide to use an external library, you -should assume you are taking on a significant porting and maintenance burden to optimize the -library for mobile. Plan for that work up-front and analyze the library in terms of code size and -RAM footprint before deciding to use it at all.</p> - -<p>Even libraries supposedly designed for use on Android are potentially dangerous because each -library may do things differently. For example, one library may use nano protobufs while another -uses micro protobufs. Now you have two different protobuf implementations in your app. This can and -will also happen with different implementations of logging, analytics, image loading frameworks, -caching, and all kinds of other things you don't expect. <a -href="{@docRoot}tools/help/proguard.html">ProGuard</a> won't save you here because these -will all be lower-level dependencies that are required by the features for which you want the -library. This becomes especially problematic when you use an {@link android.app.Activity} -subclass from a library (which -will tend to have wide swaths of dependencies), when libraries use reflection (which is common and -means you need to spend a lot of time manually tweaking ProGuard to get it to work), and so on.</p> - -<p>Also be careful not to fall into the trap of using a shared library for one or two features out of -dozens of other things it does; you don't want to pull in a large amount of code and overhead that -you don't even use. At the end of the day, if there isn't an existing implementation that is a -strong match for what you need to do, it may be best if you create your own implementation.</p> - - -<h3 id="OverallPerf">Optimize overall performance</h3> - -<p>A variety of information about optimizing your app's overall performance is available -in other documents listed in <a href="{@docRoot}training/best-performance.html">Best Practices -for Performance</a>. Many of these documents include optimizations tips for CPU performance, but -many of these tips also help optimize your app's memory use, such as by reducing the number of -layout objects required by your UI.</p> - -<p>You should also read about <a href="{@docRoot}tools/debugging/debugging-ui.html">optimizing -your UI</a> with the layout debugging tools and take advantage of -the optimization suggestions provided by the <a -href="{@docRoot}tools/debugging/improving-w-lint.html">lint tool</a>.</p> - - -<h3 id="Proguard">Use ProGuard to strip out any unneeded code</h3> - -<p>The <a href="{@docRoot}tools/help/proguard.html">ProGuard</a> tool shrinks, -optimizes, and obfuscates your code by removing unused code and renaming classes, fields, and -methods with semantically obscure names. Using ProGuard can make your code more compact, requiring -fewer RAM pages to be mapped.</p> - - -<h3 id="Zipalign">Use zipalign on your final APK</h3> - -<p>If you do any post-processing of an APK generated by a build system (including signing it -with your final production certificate), then you must run <a -href="{@docRoot}tools/help/zipalign.html">zipalign</a> on it to have it re-aligned. -Failing to do so can cause your app to require significantly more RAM, because things like -resources can no longer be mmapped from the APK.</p> - -<p class="note"><strong>Note:</strong> Google Play Store does not accept APK files that -are not zipaligned.</p> - - -<h3 id="AnalyzeRam">Analyze your RAM usage</h3> - -<p>Once you achieve a relatively stable build, begin analyzing how much RAM your app is using -throughout all stages of its lifecycle. For information about how to analyze your app, read <a -href="{@docRoot}tools/debugging/debugging-memory.html">Investigating Your RAM Usage</a>.</p> - - - - -<h3 id="MultipleProcesses">Use multiple processes</h3> - -<p>If it's appropriate for your app, an advanced technique that may help you manage your app's -memory is dividing components of your app into multiple processes. This technique must always be -used carefully and <strong>most apps should not run multiple processes</strong>, as it can easily -increase—rather than decrease—your RAM footprint if done incorrectly. It is primarily -useful to apps that may run significant work in the background as well as the foreground and can -manage those operations separately.</p> - - -<p>An example of when multiple processes may be appropriate is when building a music player that -plays music from a service for long period of time. If -the entire app runs in one process, then many of the allocations performed for its activity UI must -be kept around as long as it is playing music, even if the user is currently in another app and the -service is controlling the playback. An app like this may be split into two process: one for its -UI, and the other for the work that continues running in the background service.</p> - -<p>You can specify a separate process for each app component by declaring the <a href= -"{@docRoot}guide/topics/manifest/service-element.html#proc">{@code android:process}</a> attribute -for each component in the manifest file. For example, you can specify that your service should run -in a process separate from your app's main process by declaring a new process named "background" -(but you can name the process anything you like):</p> - -<pre> -<service android:name=".PlaybackService" - android:process=":background" /> -</pre> - -<p>Your process name should begin with a colon (':') to ensure that the process remains private to -your app.</p> - -<p>Before you decide to create a new process, you need to understand the memory implications. -To illustrate the consequences of each process, consider that an empty process doing basically -nothing has an extra memory footprint of about 1.4MB, as shown by the memory information -dump below.</p> - -<pre class="no-pretty-print"> -adb shell dumpsys meminfo com.example.android.apis:empty - -** MEMINFO in pid 10172 [com.example.android.apis:empty] ** - Pss Pss Shared Private Shared Private Heap Heap Heap - Total Clean Dirty Dirty Clean Clean Size Alloc Free - ------ ------ ------ ------ ------ ------ ------ ------ ------ - Native Heap 0 0 0 0 0 0 1864 1800 63 - Dalvik Heap 764 0 5228 316 0 0 5584 5499 85 - Dalvik Other 619 0 3784 448 0 0 - Stack 28 0 8 28 0 0 - Other dev 4 0 12 0 0 4 - .so mmap 287 0 2840 212 972 0 - .apk mmap 54 0 0 0 136 0 - .dex mmap 250 148 0 0 3704 148 - Other mmap 8 0 8 8 20 0 - Unknown 403 0 600 380 0 0 - TOTAL 2417 148 12480 1392 4832 152 7448 7299 148 -</pre> - -<p class="note"><strong>Note:</strong> More information about how to read this output is provided -in <a href="{@docRoot}tools/debugging/debugging-memory.html#ViewingAllocations">Investigating -Your RAM Usage</a>. The key data here is the <em>Private Dirty</em> and <em>Private -Clean</em> memory, which shows that this process is using almost 1.4MB of non-pageable RAM -(distributed across the Dalvik heap, native allocations, book-keeping, and library-loading), -and another 150K of RAM for code that has been mapped in to execute.</p> - -<p>This memory footprint for an empty process is fairly significant and it can quickly -grow as you start doing work in that process. For -example, here is the memory use of a process that is created only to show an activity with some -text in it:</p> - -<pre class="no-pretty-print"> -** MEMINFO in pid 10226 [com.example.android.helloactivity] ** - Pss Pss Shared Private Shared Private Heap Heap Heap - Total Clean Dirty Dirty Clean Clean Size Alloc Free - ------ ------ ------ ------ ------ ------ ------ ------ ------ - Native Heap 0 0 0 0 0 0 3000 2951 48 - Dalvik Heap 1074 0 4928 776 0 0 5744 5658 86 - Dalvik Other 802 0 3612 664 0 0 - Stack 28 0 8 28 0 0 - Ashmem 6 0 16 0 0 0 - Other dev 108 0 24 104 0 4 - .so mmap 2166 0 2824 1828 3756 0 - .apk mmap 48 0 0 0 632 0 - .ttf mmap 3 0 0 0 24 0 - .dex mmap 292 4 0 0 5672 4 - Other mmap 10 0 8 8 68 0 - Unknown 632 0 412 624 0 0 - TOTAL 5169 4 11832 4032 10152 8 8744 8609 134 -</pre> - -<p>The process has now almost tripled in size, to 4MB, simply by showing some text in the UI. This -leads to an important conclusion: If you are going to split your app into multiple processes, only -one process should be responsible for UI. Other processes should avoid any UI, as this will quickly -increase the RAM required by the process (especially once you start loading bitmap assets and other -resources). It may then be hard or impossible to reduce the memory usage once the UI is drawn.</p> - -<p>Additionally, when running more than one process, it's more important than ever that you keep your -code as lean as possible, because any unnecessary RAM overhead for common implementations are now -replicated in each process. For example, if you are using enums (though <a -href="#Overhead">you should not use enums</a>), all of -the RAM needed to create and initialize those constants is duplicated in each process, and any -abstractions you have with adapters and temporaries or other overhead will likewise be replicated.</p> - -<p>Another concern with multiple processes is the dependencies that exist between them. For example, -if your app has a content provider that you have running in the default process which also hosts -your UI, then code in a background process that uses that content provider will also require that -your UI process remain in RAM. If your goal is to have a background process that can run -independently of a heavy-weight UI process, it can't have dependencies on content providers or -services that execute in the UI process.</p> - - - - - - - - - - -<!-- THE FOLLOWING IS OVERWHELMING AND NOT NECESSARY FOR MOST APPS, LEAVING OUT FOR NOW - - -<p>You can examine the dependencies between your processes with the command:</p> - -<pre class="no-pretty-print"> -adb shell dumpsys activity -</pre> - -<p>This dumps various information about the Activity Manager's state, ending with a list of all -processes in their memory management order, including the reason each process is at its given -level. For example, below is a dump with the Music app in the foreground.</p> - -<pre class="no-pretty-print"> -ACTIVITY MANAGER RUNNING PROCESSES (dumpsys activity processes) - Process LRU list (sorted by oom_adj): - PERS # 4: adj=sys /F trm= 0 20674:system/1000 (fixed) - PERS #39: adj=pers /F trm= 0 20964:com.android.nfc/1027 (fixed) - PERS # 2: adj=pers /F trm= 0 20959:com.android.phone/1001 (fixed) - PERS # 1: adj=pers /F trm= 0 20779:com.android.systemui/u0a10057 (fixed) - Proc #11: adj=fore /FA trm= 0 8663:com.google.android.music:ui/u0a10043 (top-activity) - Proc #10: adj=fore /F trm= 0 30881:com.google.android.music:main/u0a10043 (provider) - com.google.android.music/.store.MusicContentProvider<=Proc{8663:com.google.android.music:ui/u0a10043} - Proc # 6: adj=fore /F trm= 0 21014:com.google.process.gapps/u0a10023 (provider) - com.google.android.gsf/.settings.GoogleSettingsProvider<=Proc{20935:com.google.process.location/u0a10023} - Proc #38: adj=vis /F trm= 0 21028:com.android.nfc:handover/1027 (service) - com.android.nfc/.handover.HandoverService<=Proc{20964:com.android.nfc/1027} - Proc # 7: adj=vis /B trm= 0 20935:com.google.process.location/u0a10023 (service) - com.google.android.location/.GeocodeService<=Proc{20674:system/1000} - Proc # 3: adj=vis /F trm= 0 21225:com.android.bluetooth/1002 (service) - com.android.bluetooth/.hfp.HeadsetService<=Proc{20674:system/1000} - Proc # 0: adj=vis /F trm= 0 20908:com.google.android.inputmethod.latin/u0a10035 (service) - com.google.android.inputmethod.latin/com.android.inputmethod.latin.LatinIME<=Proc{20674:system/1000} - Proc #34: adj=svc /B trm= 0 16765:com.google.android.apps.currents/u0a10012 (started-services) - Proc #14: adj=svc /B trm= 0 21148:com.google.android.gms/u0a10023 (started-services) - Proc #12: adj=home /B trm= 0 20989:com.android.launcher/u0a10036 (home) - Proc #37: adj=svcb /B trm= 0 15194:com.google.android.apps.googlevoice/u0a10089 (started-services) - Proc #17: adj=svcb /B trm= 0 24537:android.process.media/u0a10016 (started-services) - Proc #35: adj=bak /B trm= 0 16087:com.android.defcontainer/u0a10013 (service) - com.android.defcontainer/.DefaultContainerService<=Proc{16050:com.android.settings/1000} - Proc #16: adj=bak /B trm= 0 7334:com.google.android.gm/u0a10022 (bg-act) - Proc #15: adj=bak /B trm= 0 22499:com.google.android.googlequicksearchbox/u0a10060 (bg-act) - Proc # 9: adj=bak /B trm= 0 20856:com.google.android.gsf.login/u0a10023 (bg-empty) - Proc #26: adj=bak+1/B trm= 0 9923:com.android.mms/u0a10042 (bg-act) - Proc #23: adj=bak+1/B trm= 0 16721:com.android.chrome/u0a10010 (bg-act) - Proc #22: adj=bak+1/B trm= 0 17596:com.android.chrome:sandboxed_process0/u0a10010i33 (service) - com.android.chrome/org.chromium.content.app.SandboxedProcessService0<=Proc{16721:com.android.chrome/u0a10010} - Proc #19: adj=bak+1/B trm= 0 17442:com.google.android.youtube/u0a10067 (bg-services) - Proc #18: adj=bak+2/B trm= 0 16740:com.google.android.apps.plus/u0a10052 (bg-empty) - Proc #13: adj=bak+2/B trm= 0 7707:com.android.musicfx/u0a10044 (bg-empty) - Proc #36: adj=bak+3/B trm= 0 16050:com.android.settings/1000 (bg-act) - Proc #33: adj=bak+3/B trm= 0 16863:com.android.dialer/u0a10015 (bg-act) -</pre> - - -<p class="note"><strong>Note:</strong> The exact details of what is shown here will vary across -platform versions as process management policies are tweaked and improved.</p> - - -<p>Details on the highlighted sections are:</p> - -<ol> -<li>Foreground app: This is the current app running in the foreground -- it is in the "fore" memory -class because it is the top activity on the activity stack.</li> - -<li>Persistent processes: These are processes that are part of the core system that must always be -running.</li> - -<li>Dependent process: This shows how the Music app is using two processes. Its UI process has a -dependency on the "main" process (through a content provider). So while the UI process is in use, -the main process must also be kept around. This means the app's memory footprint is actually the -sum of both processes. You will have this kind of connection on a content provider any time you -have active calls into it or have unclosed cursors or file streams that came from it.</li> - -<li>Visible processes: These are processes that count in some way as "visible" to the user. This -generally means that it is either something the user can literally see (such as a process hosting a -paused but visible activity that is behind a non-full-screen dialog) or is something the user might -notice if the process disappeared (such as a foreground service playing music). You should be -certain that any process you have running at the "visible" level is indeed critical to the user, -because they are very expensive to the overall RAM load.</li> - -<li>Service processes: These are processes running long-term jobs in a service. This level of the -list is the start of less-critical processes, which the system has some freedom to kill if RAM is -needed elsewhere. These services are still quite expensive because they can be killed only -temporarily and the system tries to keep them running whenever possible.</li> - -<li>Home process: A special slot for the process that hosts the current Home activity, to try to -prevent it from being killed as much as possible. Killing this process is much more damaging to the -user experience than killing other cached processes, because so much user interaction goes through -home.</li> - -<li>Secondary service processes: These are services that have been running for a relatively long time -and so should be killed more aggressively when RAM is needed elsewhere.</li> - -<li>Cached processes: These are cached processes held in the LRU cache, which allow for fast app -switching and component launching. These processes are not required and the system will kill them -as needed to reclaim memory. You will often see a process hosting a running service here—this is -part of a platform policy of allowing very long-running services to drop down into the LRU list and -eventually be killed. If the service should continue running (as defined by the {@link -android.app.Service#onStartCommand onStartCommand()} return value, such as {@link -android.app.Service#START_STICKY}), the the system eventually restarts it. This avoids issues with -such services having memory leaks that over time reduce the number of regular cached processes that -can be kept.</li> - -</ol> - -<p>This numbered list of processes is essentially the LRU list of processes that the framework -provides to the kernel to help it determine which processes it should kill as it needs more RAM. -The kernel's out of memory killer will generally begin from the bottom of this list, killing the -last process and working its way up. It may not do it in exactly this order, as it can also take -into consideration other factors such as the relative RAM footprint of processes to some degree.</p> - -<p>There are many other options you can use with the activity command to analyze further details of -your app's state—use <code>adb shell dumpsys activity -h</code> for help on its use.</p> - ---> diff --git a/docs/html/training/articles/perf-tips.jd b/docs/html/training/articles/perf-tips.jd index 82de69a55249..30cab14d5da6 100644 --- a/docs/html/training/articles/perf-tips.jd +++ b/docs/html/training/articles/perf-tips.jd @@ -28,7 +28,8 @@ when combined, but it's unlikely that these changes will result in dramatic performance effects. Choosing the right algorithms and data structures should always be your priority, but is outside the scope of this document. You should use the tips in this document as general coding practices that you can incorporate into your habits for general code -efficiency.</p> +efficiency. +</p> <p>There are two basic rules for writing efficient code:</p> <ul> @@ -49,8 +50,7 @@ code for a device with a JIT is not always the best code for a device without.</p> <p>To ensure your app performs well across a wide variety of devices, ensure -your code is efficient at all levels and agressively optimize your performance.</p> - +your code is efficient at all levels and aggressively optimize your performance.</p> <h2 id="ObjectCreation">Avoid Creating Unnecessary Objects</h2> diff --git a/docs/html/training/best-performance.jd b/docs/html/training/best-performance.jd index 8ea6fd5be4e5..bb88e990ce48 100644 --- a/docs/html/training/best-performance.jd +++ b/docs/html/training/best-performance.jd @@ -5,4 +5,9 @@ page.trainingcourse=true <p>These classes and articles help you build an app that's smooth, responsive, -and uses as little battery as possible.</p>
\ No newline at end of file +and uses as little battery as possible.</p> + +<p>Along with this section, you can find additional information about optimizing +your app in the <a href="/topic/performance/index.html">Performance and +Power</a> section.</p> + diff --git a/docs/html/training/training_toc.cs b/docs/html/training/training_toc.cs index d0dccba64d35..39ca6fb405e3 100644 --- a/docs/html/training/training_toc.cs +++ b/docs/html/training/training_toc.cs @@ -1888,6 +1888,12 @@ results." >Managing Your App's Memory</a> </li> <li> + <a href="<?cs var:toroot ?>training/articles/memory-overview.html" + description= + "How Android manages app process and memory allocation." + >Overview of Android Memory Management</a> + </li> + <li> <a href="<?cs var:toroot ?>training/articles/perf-tips.html" description= "How to optimize your app's performance in various ways to improve its diff --git a/docs/html/wear/preview/downloads.jd b/docs/html/wear/preview/downloads.jd index 08ed233afc8c..83a3f98452c8 100644 --- a/docs/html/wear/preview/downloads.jd +++ b/docs/html/wear/preview/downloads.jd @@ -626,7 +626,7 @@ This is the Android Wear SDK Preview License Agreement (the “License Agreement the accounts on the phone. </li> - <li>Choose a Google account to add and sync to your watch. + <li>Choose a Google Account to add and sync to your watch. </li> <li>Confirm the screen lock and enter the password to start the copying of @@ -647,8 +647,13 @@ This is the Android Wear SDK Preview License Agreement (the “License Agreement </h2> <p> - To test with the Android Emulator, create a virtual device in Android - Studio as follows: + To test with the Android Emulator, + confirm that you have the latest version of the <strong>Android SDK + Platform-tools</strong> from the <a href= + "{@docRoot}studio/intro/update.html#sdk-manager">SDK Manager</a>. + </p> + + <p>Create a new virtual device in Android Studio as follows: </p> <ol> @@ -659,8 +664,8 @@ This is the Android Wear SDK Preview License Agreement (the “License Agreement <li>Click <strong>Create Virtual Device</strong>. </li> - <li>In the <strong>Category</strong> pane, select Wear and - choose a hardware profile. + <li>In the <strong>Category</strong> pane, select <strong>Wear</strong> + and choose a hardware profile. The Android Wear 2.0 Developer Preview is only optimized for round devices currently, so we recommend not using the square or chin profiles for now. @@ -679,16 +684,66 @@ This is the Android Wear SDK Preview License Agreement (the “License Agreement <li>Verify the configuration of the Android Virtual Device (AVD) and click <strong>Finish</strong>. </li> + + <li>Start the emulator by selecting the new virtual device, clicking the + <strong>Play</strong> button, and waiting until + the emulator initializes and shows the Android Wear home screen. + </li> </ol> <p> - You can now test an application with a virtual preview device + Pair the phone with the emulator, and sync a Google Account, as follows: + </p> + + <ol> + <li>On the phone, install the Android Wear app from Google Play. + </li> + + <li>On the phone, enable Developer Options and USB Debugging. + </li> + + <li>Connect the phone to your computer through USB. + </li> + + <li>Forward the AVD's communication port to the connected handheld device + (each time the phone is connected):<br> + <code>adb -d forward tcp:5601 tcp:5601</code> + </li> + + <li>On the phone, in the Android Wear app, begin the standard pairing + process. For example, on the Welcome screen, tap the + <strong>Set It Up</strong> button. + Alternatively, if an existing watch already is paired, in the upper-left + drop-down, tap <strong>Add a New Watch</strong>. + </li> + + <li>On the phone, in the Android Wear app, tap the + Overflow button, and then tap + <strong>Pair with Emulator</strong>. + </li> + + <li>Tap the Settings icon. + </li> + + <li>Under Device Settings, tap <strong>Emulator</strong>. + </li> + + <li>Tap <strong>Accounts</strong> and select a Google Account, + and follow the steps in the wizard to + sync the account with the emulator. If necessary, type the screen-lock + device password, and Google Account password, to start the account sync. + </li> + </ol> + + <p> + You can now test an app with a virtual preview device in the <a href= "{@docRoot}tools/devices/emulator.html">Android Emulator</a>. For more information about using virtual devices, see <a href= - "{@docRoot}tools/devices/managing-avds.html">Managing AVDs with the AVD - Manager</a>. + "{@docRoot}tools/devices/managing-avds.html"> + Create and Manage Virtual Devices</a>. </p> + </div><!-- landing --> </div><!-- relative wrapper --> diff --git a/docs/html/wear/preview/support.jd b/docs/html/wear/preview/support.jd index 7636d863aa8c..6006627a4e16 100644 --- a/docs/html/wear/preview/support.jd +++ b/docs/html/wear/preview/support.jd @@ -319,6 +319,22 @@ page.tags="preview", "developer preview" </li> </ul> + <h4 id="account"> + Account sync + </h4> + + <ul> + <li>Account sync initiated from watch settings may not work reliably. + Instead, add accounts from the setup flow of the Android Wear app, or using + the Accounts settings for a device from the Android Wear app. + </li> + + <li>The list of accounts that can be synced is the same as the list of accounts + on the phone. So to add a new account, use the Android settings on the phone, + and then proceed to Android Wear app to sync that account. + </li> + </ul> + <h4 id="devices"> Devices </h4> diff --git a/include/androidfw/AssetManager.h b/include/androidfw/AssetManager.h index 914ac3d52421..0b2280239260 100644 --- a/include/androidfw/AssetManager.h +++ b/include/androidfw/AssetManager.h @@ -72,6 +72,13 @@ public: static const char* RESOURCES_FILENAME; static const char* IDMAP_BIN; static const char* OVERLAY_DIR; + /* + * If OVERLAY_SUBDIR_PROPERTY is set, search for runtime resource overlay + * APKs in OVERLAY_SUBDIR/<value of OVERLAY_SUBDIR_PROPERTY>/ rather than in + * OVERLAY_DIR. + */ + static const char* OVERLAY_SUBDIR; + static const char* OVERLAY_SUBDIR_PROPERTY; static const char* TARGET_PACKAGE_NAME; static const char* TARGET_APK_PATH; static const char* IDMAP_DIR; diff --git a/libs/androidfw/AssetManager.cpp b/libs/androidfw/AssetManager.cpp index f50cff4387d2..6fb57fafe5c0 100644 --- a/libs/androidfw/AssetManager.cpp +++ b/libs/androidfw/AssetManager.cpp @@ -78,6 +78,8 @@ const char* AssetManager::IDMAP_BIN = "/system/bin/idmap"; const char* AssetManager::OVERLAY_DIR = "/vendor/overlay"; const char* AssetManager::TARGET_PACKAGE_NAME = "android"; const char* AssetManager::TARGET_APK_PATH = "/system/framework/framework-res.apk"; +const char* AssetManager::OVERLAY_SUBDIR = "/system/vendor/overlay-subdir"; +const char* AssetManager::OVERLAY_SUBDIR_PROPERTY = "ro.boot.vendor.overlay.subdir"; const char* AssetManager::IDMAP_DIR = "/data/resource-cache"; namespace { diff --git a/packages/DocumentsUI/src/com/android/documentsui/BaseActivity.java b/packages/DocumentsUI/src/com/android/documentsui/BaseActivity.java index 46e7fe0b3053..1922773c9cb8 100644 --- a/packages/DocumentsUI/src/com/android/documentsui/BaseActivity.java +++ b/packages/DocumentsUI/src/com/android/documentsui/BaseActivity.java @@ -612,13 +612,23 @@ public abstract class BaseActivity extends Activity return; } - if (popDir()) { + if (!mState.hasLocationChanged()) { + super.onBackPressed(); + return; + } + + if (onBeforePopDir() || popDir()) { return; } super.onBackPressed(); } + boolean onBeforePopDir() { + // Files app overrides this with some fancy logic. + return false; + } + public void onStackPicked(DocumentStack stack) { try { // Update the restored stack to ensure we have freshest data diff --git a/packages/DocumentsUI/src/com/android/documentsui/FilesActivity.java b/packages/DocumentsUI/src/com/android/documentsui/FilesActivity.java index 3b1ca77b680a..7186339dbfa6 100644 --- a/packages/DocumentsUI/src/com/android/documentsui/FilesActivity.java +++ b/packages/DocumentsUI/src/com/android/documentsui/FilesActivity.java @@ -60,6 +60,12 @@ public class FilesActivity extends BaseActivity { public static final String TAG = "FilesActivity"; + // See comments where this const is referenced for details. + private static final int DRAWER_NO_FIDDLE_DELAY = 1500; + + // Track the time we opened the drawer in response to back being pressed. + // We use the time gap to figure out whether to close app or reopen the drawer. + private long mDrawerLastFiddled; private DocumentClipper mClipper; public FilesActivity() { @@ -389,6 +395,34 @@ public class FilesActivity extends BaseActivity { } } + // Do some "do what a I want" drawer fiddling, but don't + // do it if user already hit back recently and we recently + // did some fiddling. + @Override + boolean onBeforePopDir() { + int size = mState.stack.size(); + + if (mDrawer.isPresent() + && (System.currentTimeMillis() - mDrawerLastFiddled) > DRAWER_NO_FIDDLE_DELAY) { + // Close drawer if it is open. + if (mDrawer.isOpen()) { + mDrawer.setOpen(false); + mDrawerLastFiddled = System.currentTimeMillis(); + return true; + } + + // Open the Close drawer if it is closed and we're at the top of a root. + if (size <= 1) { + mDrawer.setOpen(true); + // Remember so we don't just close it again if back is pressed again. + mDrawerLastFiddled = System.currentTimeMillis(); + return true; + } + } + + return false; + } + // Turns out only DocumentsActivity was ever calling saveStackBlocking. // There may be a case where we want to contribute entries from // Behavior here in FilesActivity, but it isn't yet obvious. diff --git a/packages/DocumentsUI/src/com/android/documentsui/LocalPreferences.java b/packages/DocumentsUI/src/com/android/documentsui/LocalPreferences.java index b3db037697f3..d2e9885edf14 100644 --- a/packages/DocumentsUI/src/com/android/documentsui/LocalPreferences.java +++ b/packages/DocumentsUI/src/com/android/documentsui/LocalPreferences.java @@ -22,7 +22,6 @@ import android.annotation.IntDef; import android.annotation.Nullable; import android.content.Context; import android.content.SharedPreferences; -import android.content.SharedPreferences.Editor; import android.os.UserHandle; import android.preference.PreferenceManager; @@ -86,15 +85,6 @@ public class LocalPreferences { public @interface PermissionStatus {} /** - * Clears all preferences associated with a given package. - * - * <p>Typically called when a package is removed or when user asked to clear its data. - */ - static void clearPackagePreferences(Context context, String packageName) { - clearScopedAccessPreferences(context, packageName); - } - - /** * Methods below are used to keep track of denied user requests on scoped directory access so * the dialog is not offered when user checked the 'Do not ask again' box * @@ -118,23 +108,6 @@ public class LocalPreferences { getPrefs(context).edit().putInt(key, status).apply(); } - private static void clearScopedAccessPreferences(Context context, String packageName) { - final String keySubstring = "|" + packageName + "|"; - final SharedPreferences prefs = getPrefs(context); - Editor editor = null; - for (final String key : prefs.getAll().keySet()) { - if (key.contains(keySubstring)) { - if (editor == null) { - editor = prefs.edit(); - } - editor.remove(key); - } - } - if (editor != null) { - editor.apply(); - } - } - private static String getScopedAccessDenialsKey(String packageName, String uuid, String directory) { final int userId = UserHandle.myUserId(); diff --git a/packages/DocumentsUI/src/com/android/documentsui/PackageReceiver.java b/packages/DocumentsUI/src/com/android/documentsui/PackageReceiver.java index fd1183fda13d..aef63afcbcd7 100644 --- a/packages/DocumentsUI/src/com/android/documentsui/PackageReceiver.java +++ b/packages/DocumentsUI/src/com/android/documentsui/PackageReceiver.java @@ -23,7 +23,7 @@ import android.content.Intent; import android.net.Uri; /** - * Cleans up {@link RecentsProvider} and {@link LocalPreferences} when packages are removed. + * Clean up {@link RecentsProvider} when packages are removed. */ public class PackageReceiver extends BroadcastReceiver { @Override @@ -31,19 +31,15 @@ public class PackageReceiver extends BroadcastReceiver { final ContentResolver resolver = context.getContentResolver(); final String action = intent.getAction(); - final Uri data = intent.getData(); - final String packageName = data == null ? null : data.getSchemeSpecificPart(); - if (Intent.ACTION_PACKAGE_FULLY_REMOVED.equals(action)) { resolver.call(RecentsProvider.buildRecent(), RecentsProvider.METHOD_PURGE, null, null); - if (packageName != null) { - LocalPreferences.clearPackagePreferences(context, packageName); - } + } else if (Intent.ACTION_PACKAGE_DATA_CLEARED.equals(action)) { - if (packageName != null) { + final Uri data = intent.getData(); + if (data != null) { + final String packageName = data.getSchemeSpecificPart(); resolver.call(RecentsProvider.buildRecent(), RecentsProvider.METHOD_PURGE_PACKAGE, packageName, null); - LocalPreferences.clearPackagePreferences(context, packageName); } } } diff --git a/packages/PrintSpooler/res/values-zh-rCN/strings.xml b/packages/PrintSpooler/res/values-zh-rCN/strings.xml index d4e796339bc9..3debf8e60cdb 100644 --- a/packages/PrintSpooler/res/values-zh-rCN/strings.xml +++ b/packages/PrintSpooler/res/values-zh-rCN/strings.xml @@ -60,7 +60,7 @@ <item quantity="one">找到 <xliff:g id="COUNT_0">%1$s</xliff:g> 台打印机</item> </plurals> <string name="printer_extended_description_template" msgid="1366699227703381874">"<xliff:g id="PRINT_SERVICE_LABEL">%1$s</xliff:g> - <xliff:g id="PRINTER_DESCRIPTION">%2$s</xliff:g>"</string> - <string name="printer_info_desc" msgid="7181988788991581654">"此打印机的详细信息"</string> + <string name="printer_info_desc" msgid="7181988788991581654">"关于此打印机的更多信息"</string> <string name="could_not_create_file" msgid="3425025039427448443">"无法创建文件"</string> <string name="print_services_disabled_toast" msgid="9089060734685174685">"部分打印服务已停用"</string> <string name="print_searching_for_printers" msgid="6550424555079932867">"正在搜索打印机"</string> diff --git a/packages/SettingsLib/res/values-af/strings.xml b/packages/SettingsLib/res/values-af/strings.xml index 81af9415531b..c16e08a7c428 100644 --- a/packages/SettingsLib/res/values-af/strings.xml +++ b/packages/SettingsLib/res/values-af/strings.xml @@ -28,10 +28,7 @@ <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"WiFi-verbinding het misluk"</string> <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Stawingsprobleem"</string> <string name="wifi_not_in_range" msgid="1136191511238508967">"Nie binne ontvangs nie"</string> - <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) --> - <skip /> - <!-- no translation found for wifi_no_internet (5011955173375805204) --> - <skip /> + <string name="wifi_no_internet" msgid="9151470775868728896">"Geen internettoegang bespeur nie, sal nie outomaties herkoppel nie."</string> <string name="saved_network" msgid="4352716707126620811">"Gestoor deur <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="connected_via_wfa" msgid="3805736726317410714">"Gekoppel via Wi-Fi-assistent"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Gekoppel via %1$s"</string> @@ -344,5 +341,4 @@ <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Grootste"</string> <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Gepasmaak (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string> <string name="help_feedback_label" msgid="6815040660801785649">"Hulp en terugvoer"</string> - <string name="content_description_menu_button" msgid="8182594799812351266">"Kieslys"</string> </resources> diff --git a/packages/SettingsLib/res/values-am/strings.xml b/packages/SettingsLib/res/values-am/strings.xml index 792c4349e442..6e9dcd7fc193 100644 --- a/packages/SettingsLib/res/values-am/strings.xml +++ b/packages/SettingsLib/res/values-am/strings.xml @@ -28,10 +28,7 @@ <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"የWiFi ግንኙነት መሰናከል"</string> <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"የማረጋገጫ ችግር"</string> <string name="wifi_not_in_range" msgid="1136191511238508967">"በክልል ውስጥ የለም"</string> - <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) --> - <skip /> - <!-- no translation found for wifi_no_internet (5011955173375805204) --> - <skip /> + <string name="wifi_no_internet" msgid="9151470775868728896">"ምንም የበይነ መረብ መዳረሻ ተፈልጎ አልተገኘም፣ በራስ-ሰር እንደገና እንዲገናኝ አይደረግም።"</string> <string name="saved_network" msgid="4352716707126620811">"የተቀመጠው በ<xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="connected_via_wfa" msgid="3805736726317410714">"በWi‑Fi ረዳት አማካኝነት ተገናኝቷል"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"በ%1$s በኩል መገናኘት"</string> @@ -344,5 +341,4 @@ <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"በጣም ተለቅ ያለ"</string> <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"ብጁ (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string> <string name="help_feedback_label" msgid="6815040660801785649">"እገዛ እና ግብረመልስ"</string> - <string name="content_description_menu_button" msgid="8182594799812351266">"ምናሌ"</string> </resources> diff --git a/packages/SettingsLib/res/values-ar/strings.xml b/packages/SettingsLib/res/values-ar/strings.xml index db9afeebeefd..ee579dc30b00 100644 --- a/packages/SettingsLib/res/values-ar/strings.xml +++ b/packages/SettingsLib/res/values-ar/strings.xml @@ -28,10 +28,7 @@ <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"أخفق اتصال WiFi"</string> <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"حدثت مشكلة في المصادقة"</string> <string name="wifi_not_in_range" msgid="1136191511238508967">"ليست في النطاق"</string> - <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) --> - <skip /> - <!-- no translation found for wifi_no_internet (5011955173375805204) --> - <skip /> + <string name="wifi_no_internet" msgid="9151470775868728896">"لم يتم اكتشاف اتصال بالإنترنت."</string> <string name="saved_network" msgid="4352716707126620811">"تم الحفظ بواسطة <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="connected_via_wfa" msgid="3805736726317410714">"تم التوصيل عبر مساعد Wi-Fi"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"تم الاتصال عبر %1$s"</string> @@ -332,7 +329,7 @@ <string name="home" msgid="3256884684164448244">"الشاشة الرئيسية للإعدادات"</string> <string-array name="battery_labels"> <item msgid="8494684293649631252">"٠٪"</item> - <item msgid="8934126114226089439">"٥٠٪"</item> + <item msgid="8934126114226089439">"٪۵۰"</item> <item msgid="1286113608943010849">"٪۱۰۰"</item> </string-array> <string name="charge_length_format" msgid="8978516217024434156">"قبل <xliff:g id="ID_1">%1$s</xliff:g>"</string> @@ -344,5 +341,4 @@ <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"أكبر مستوى"</string> <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"مخصص (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string> <string name="help_feedback_label" msgid="6815040660801785649">"المساعدة والتعليقات"</string> - <string name="content_description_menu_button" msgid="8182594799812351266">"القائمة"</string> </resources> diff --git a/packages/SettingsLib/res/values-az-rAZ/strings.xml b/packages/SettingsLib/res/values-az-rAZ/strings.xml index 130cd7534924..60d0169be4b0 100644 --- a/packages/SettingsLib/res/values-az-rAZ/strings.xml +++ b/packages/SettingsLib/res/values-az-rAZ/strings.xml @@ -28,10 +28,7 @@ <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"WiFi Bağlantı Uğursuzluğu"</string> <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Autentifikasiya problemi"</string> <string name="wifi_not_in_range" msgid="1136191511238508967">"Diapazonda deyil"</string> - <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) --> - <skip /> - <!-- no translation found for wifi_no_internet (5011955173375805204) --> - <skip /> + <string name="wifi_no_internet" msgid="9151470775868728896">"İnternet bağlantısı tapılmadı, avtomatik olaraq yenidən qoşulmayacaq."</string> <string name="saved_network" msgid="4352716707126620811">"<xliff:g id="NAME">%1$s</xliff:g> tərəfindən saxlandı"</string> <string name="connected_via_wfa" msgid="3805736726317410714">"Wi‑Fi köməkçisi vasitəsilə qoşulub"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s vasitəsilə qoşuludur"</string> @@ -344,5 +341,4 @@ <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Ən böyük"</string> <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Fərdi (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string> <string name="help_feedback_label" msgid="6815040660801785649">"Yardım və rəy"</string> - <string name="content_description_menu_button" msgid="8182594799812351266">"Menyu"</string> </resources> diff --git a/packages/SettingsLib/res/values-b+sr+Latn/strings.xml b/packages/SettingsLib/res/values-b+sr+Latn/strings.xml index 5d7e852bf882..060a5fb15be3 100644 --- a/packages/SettingsLib/res/values-b+sr+Latn/strings.xml +++ b/packages/SettingsLib/res/values-b+sr+Latn/strings.xml @@ -28,10 +28,7 @@ <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Wi-Fi veza je otkazala"</string> <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Problem sa potvrdom autentičnosti"</string> <string name="wifi_not_in_range" msgid="1136191511238508967">"Nije u opsegu"</string> - <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) --> - <skip /> - <!-- no translation found for wifi_no_internet (5011955173375805204) --> - <skip /> + <string name="wifi_no_internet" msgid="9151470775868728896">"Pristup internetu nije otkriven, automatsko povezivanje nije moguće."</string> <string name="saved_network" msgid="4352716707126620811">"Sačuvao/la je <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="connected_via_wfa" msgid="3805736726317410714">"Povezano preko Wi‑Fi pomoćnika"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Veza je uspostavljena preko pristupne tačke %1$s"</string> @@ -344,5 +341,4 @@ <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Najveći"</string> <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Prilagođeni (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string> <string name="help_feedback_label" msgid="6815040660801785649">"Pomoć i povratne informacije"</string> - <string name="content_description_menu_button" msgid="8182594799812351266">"Meni"</string> </resources> diff --git a/packages/SettingsLib/res/values-be-rBY/strings.xml b/packages/SettingsLib/res/values-be-rBY/strings.xml index a8428f26c5e3..03de8bab32c1 100644 --- a/packages/SettingsLib/res/values-be-rBY/strings.xml +++ b/packages/SettingsLib/res/values-be-rBY/strings.xml @@ -28,10 +28,7 @@ <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Збой падлучэння Wi-Fi"</string> <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Праблема аўтэнтыфікацыі"</string> <string name="wifi_not_in_range" msgid="1136191511238508967">"Не ў зоне дасягальнасці"</string> - <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) --> - <skip /> - <!-- no translation found for wifi_no_internet (5011955173375805204) --> - <skip /> + <string name="wifi_no_internet" msgid="9151470775868728896">"Доступ да інтэрнэту не выяўлены, аўтаматычнае перападлучэнне не адбудзецца."</string> <string name="saved_network" msgid="4352716707126620811">"Хто захаваў: <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="connected_via_wfa" msgid="3805736726317410714">"Падлучана праз памочніка Wi‑Fi"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Падлучана праз %1$s"</string> @@ -344,5 +341,4 @@ <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Найвялікшы"</string> <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Карыстальніцкі (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string> <string name="help_feedback_label" msgid="6815040660801785649">"Даведка і водгукі"</string> - <string name="content_description_menu_button" msgid="8182594799812351266">"Меню"</string> </resources> diff --git a/packages/SettingsLib/res/values-bg/strings.xml b/packages/SettingsLib/res/values-bg/strings.xml index b356766cb68f..f6596dc48add 100644 --- a/packages/SettingsLib/res/values-bg/strings.xml +++ b/packages/SettingsLib/res/values-bg/strings.xml @@ -28,10 +28,7 @@ <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Неуспешна връзка с Wi-Fi"</string> <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Проблем при удостоверяването"</string> <string name="wifi_not_in_range" msgid="1136191511238508967">"Извън обхват"</string> - <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) --> - <skip /> - <!-- no translation found for wifi_no_internet (5011955173375805204) --> - <skip /> + <string name="wifi_no_internet" msgid="9151470775868728896">"Не е открит достъп до интернет. Няма да се свърже отново автоматично."</string> <string name="saved_network" msgid="4352716707126620811">"Запазено от <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="connected_via_wfa" msgid="3805736726317410714">"Установена е връзка чрез помощника за Wi-Fi"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Установена е връзка през „%1$s“"</string> @@ -344,5 +341,4 @@ <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Най-голямо"</string> <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Персонализирано (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string> <string name="help_feedback_label" msgid="6815040660801785649">"Помощ и отзиви"</string> - <string name="content_description_menu_button" msgid="8182594799812351266">"Меню"</string> </resources> diff --git a/packages/SettingsLib/res/values-bn-rBD/strings.xml b/packages/SettingsLib/res/values-bn-rBD/strings.xml index 40895629e6ad..4a11198be5f9 100644 --- a/packages/SettingsLib/res/values-bn-rBD/strings.xml +++ b/packages/SettingsLib/res/values-bn-rBD/strings.xml @@ -28,10 +28,7 @@ <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"WiFi সংযোগের ব্যর্থতা"</string> <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"প্রমাণীকরণ সমস্যা"</string> <string name="wifi_not_in_range" msgid="1136191511238508967">"পরিসরের মধ্যে নয়"</string> - <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) --> - <skip /> - <!-- no translation found for wifi_no_internet (5011955173375805204) --> - <skip /> + <string name="wifi_no_internet" msgid="9151470775868728896">"কোনো ইন্টারনেট অ্যাক্সেস শনাক্ত হয়নি, স্বয়ংক্রিয়ভাবে পুনরায় সংযোগ স্থাপন করবে না৷"</string> <string name="saved_network" msgid="4352716707126620811">"<xliff:g id="NAME">%1$s</xliff:g> দ্বারা সংরক্ষিত"</string> <string name="connected_via_wfa" msgid="3805736726317410714">"ওয়াই-ফাই সহায়ক-এর মাধ্যমে সংযুক্ত হয়েছে"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s মাধ্যমে সংযুক্ত হয়েছে"</string> @@ -344,5 +341,4 @@ <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"বৃহত্তম"</string> <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"কাস্টম (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string> <string name="help_feedback_label" msgid="6815040660801785649">"সহায়তা ও মতামত"</string> - <string name="content_description_menu_button" msgid="8182594799812351266">"মেনু"</string> </resources> diff --git a/packages/SettingsLib/res/values-bs-rBA/strings.xml b/packages/SettingsLib/res/values-bs-rBA/strings.xml index 5115bbd41592..a11bf3212836 100644 --- a/packages/SettingsLib/res/values-bs-rBA/strings.xml +++ b/packages/SettingsLib/res/values-bs-rBA/strings.xml @@ -28,10 +28,7 @@ <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Greška pri povezivanju na Wi-Fi"</string> <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Problem pri provjeri vjerodostojnosti."</string> <string name="wifi_not_in_range" msgid="1136191511238508967">"Nije u dometu"</string> - <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) --> - <skip /> - <!-- no translation found for wifi_no_internet (5011955173375805204) --> - <skip /> + <string name="wifi_no_internet" msgid="9151470775868728896">"Pristup internetu nije pronađen. Neće se ponovo povezivati automatski."</string> <string name="saved_network" msgid="4352716707126620811">"Sačuvao <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="connected_via_wfa" msgid="3805736726317410714">"Povezani preko Wi-Fi pomoćnika"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Povezani preko %1$s"</string> @@ -149,9 +146,9 @@ <string name="vpn_settings_not_available" msgid="956841430176985598">"VPN postavke nisu dostupne za ovog korisnika"</string> <string name="tethering_settings_not_available" msgid="6765770438438291012">"Postavke za privezivanje nisu dostupne za ovog korisnika"</string> <string name="apn_settings_not_available" msgid="7873729032165324000">"Postavke za naziv pristupne tačke nisu dostupne za ovog korisnika"</string> - <string name="enable_adb" msgid="7982306934419797485">"Otklanjanje grešaka putem uređaja spojenog na USB"</string> + <string name="enable_adb" msgid="7982306934419797485">"USB otklanjanje grešaka"</string> <string name="enable_adb_summary" msgid="4881186971746056635">"Način rada za uklanjanje grešaka kada je povezan USB"</string> - <string name="clear_adb_keys" msgid="4038889221503122743">"Ukini odobrenja otklanjanja grešaka putem uređaja spojenog na USB"</string> + <string name="clear_adb_keys" msgid="4038889221503122743">"Ukini odobrenja otklanjanja grešaka USB-om"</string> <string name="bugreport_in_power" msgid="7923901846375587241">"Prečica za izvještaj o greškama"</string> <string name="bugreport_in_power_summary" msgid="1778455732762984579">"Prikaži tipku za prijavu grešaka u izborniku za potrošnju energije"</string> <string name="keep_screen_on" msgid="1146389631208760344">"Ostani aktivan"</string> @@ -188,9 +185,9 @@ <string name="allow_mock_location_summary" msgid="317615105156345626">"Dozvoli lažne lokacije"</string> <string name="debug_view_attributes" msgid="6485448367803310384">"Omogući pregled atributa prikaza"</string> <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Uvijek drži mobilne podatke aktivnim, čak i kada je Wi-Fi je aktivan (za brzo prebacivanje između mreža)."</string> - <string name="adb_warning_title" msgid="6234463310896563253">"Omogućiti otklanjanje grešaka putem uređaja spojenog na USB?"</string> - <string name="adb_warning_message" msgid="7316799925425402244">"Otklanjanje grešaka putem uređaja spojenog na USB je namijenjeno samo u svrhe razvoja aplikacija. Koristite ga za kopiranje podataka između računara i uređaja, instaliranje aplikacija na uređaj bez obavještenja te čitanje podataka iz zapisnika."</string> - <string name="adb_keys_warning_message" msgid="5659849457135841625">"Opozvati pristup otklanjanju grešaka putem uređaja spojenog na USB za sve računare koje ste prethodno ovlastili?"</string> + <string name="adb_warning_title" msgid="6234463310896563253">"Omogućiti USB otklanjanje grešaka?"</string> + <string name="adb_warning_message" msgid="7316799925425402244">"USB otklanjanje grešaka je namijenjeno samo u svrhe razvoja aplikacija. Koristite ga za kopiranje podataka između računara i uređaja, instaliranje aplikacija na uređaj bez obavještenja te čitanje podataka iz zapisnika."</string> + <string name="adb_keys_warning_message" msgid="5659849457135841625">"Opozvati pristup otklanjanju grešaka USB-om za sve računare koje ste prethodno ovlastili?"</string> <string name="dev_settings_warning_title" msgid="7244607768088540165">"Dopustiti postavke za razvoj?"</string> <string name="dev_settings_warning_message" msgid="2298337781139097964">"Ove postavke su namijenjene samo za svrhe razvoja. Mogu izazvati pogrešno ponašanje uređaja i aplikacija na njemu."</string> <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Verifikuj aplikacije putem USB-a"</string> @@ -344,5 +341,4 @@ <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Najveće"</string> <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Prilagodi (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string> <string name="help_feedback_label" msgid="6815040660801785649">"Pomoć i povratne informacije"</string> - <string name="content_description_menu_button" msgid="8182594799812351266">"Meni"</string> </resources> diff --git a/packages/SettingsLib/res/values-ca/strings.xml b/packages/SettingsLib/res/values-ca/strings.xml index abc9390c7184..fb7180a0a3b8 100644 --- a/packages/SettingsLib/res/values-ca/strings.xml +++ b/packages/SettingsLib/res/values-ca/strings.xml @@ -28,10 +28,7 @@ <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Error de connexió Wi-Fi"</string> <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Problema d\'autenticació"</string> <string name="wifi_not_in_range" msgid="1136191511238508967">"Fora de l\'abast"</string> - <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) --> - <skip /> - <!-- no translation found for wifi_no_internet (5011955173375805204) --> - <skip /> + <string name="wifi_no_internet" msgid="9151470775868728896">"No s\'ha detectat accés a Internet, no s\'hi tornarà a connectar automàticament."</string> <string name="saved_network" msgid="4352716707126620811">"Desat per <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="connected_via_wfa" msgid="3805736726317410714">"Connectat mitjançant l\'assistent de Wi‑Fi"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Connectada mitjançant %1$s"</string> @@ -114,7 +111,7 @@ <string name="tts_play_example_summary" msgid="8029071615047894486">"Reprodueix una breu demostració de síntesi de veu"</string> <string name="tts_install_data_title" msgid="4264378440508149986">"Instal·la dades de veu"</string> <string name="tts_install_data_summary" msgid="5742135732511822589">"Instal·la les dades de veu necessàries per a la síntesi de veu"</string> - <string name="tts_engine_security_warning" msgid="8786238102020223650">"Pot ser que aquest motor de síntesi de la parla pugui recopilar tot el text que es dirà en veu alta, incloses les dades personals, com ara les contrasenyes i els números de les targetes de crèdit. Ve del motor <xliff:g id="TTS_PLUGIN_ENGINE_NAME">%s</xliff:g>. Vols activar l\'ús d\'aquest motor de síntesi de la parla?"</string> + <string name="tts_engine_security_warning" msgid="8786238102020223650">"Pot ser que aquest motor de síntesi de la parla pugui recopilar tot el text que es dirà en veu alta, incloses les dades personals, com ara les contrasenyes i els números de les targetes de crèdit. Ve del motor <xliff:g id="TTS_PLUGIN_ENGINE_NAME">%s</xliff:g>. Voleu activar l\'ús d\'aquest motor de síntesi de la parla?"</string> <string name="tts_engine_network_required" msgid="1190837151485314743">"Aquest idioma requereix una connexió de xarxa activa per a la sortida de síntesi de veu."</string> <string name="tts_default_sample_string" msgid="4040835213373086322">"Això és un exemple de síntesi de veu"</string> <string name="tts_status_title" msgid="7268566550242584413">"Estat de l\'idioma predeterminat"</string> @@ -344,5 +341,4 @@ <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Màxim"</string> <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Personalitzat (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string> <string name="help_feedback_label" msgid="6815040660801785649">"Ajuda i suggeriments"</string> - <string name="content_description_menu_button" msgid="8182594799812351266">"Menú"</string> </resources> diff --git a/packages/SettingsLib/res/values-cs/strings.xml b/packages/SettingsLib/res/values-cs/strings.xml index edc53ed5be37..361ba1f0cef2 100644 --- a/packages/SettingsLib/res/values-cs/strings.xml +++ b/packages/SettingsLib/res/values-cs/strings.xml @@ -28,10 +28,7 @@ <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Selhání připojení Wi-Fi"</string> <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Problém s ověřením"</string> <string name="wifi_not_in_range" msgid="1136191511238508967">"Mimo dosah"</string> - <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) --> - <skip /> - <!-- no translation found for wifi_no_internet (5011955173375805204) --> - <skip /> + <string name="wifi_no_internet" msgid="9151470775868728896">"Nebyl zjištěn žádný přístup k internetu, připojení nebude automaticky obnoveno."</string> <string name="saved_network" msgid="4352716707126620811">"Uloženo uživatelem <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="connected_via_wfa" msgid="3805736726317410714">"Připojeno pomocí asistenta připojení Wi-Fi"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Připojeno prostřednictvím %1$s"</string> @@ -344,5 +341,4 @@ <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Největší"</string> <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Vlastní (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string> <string name="help_feedback_label" msgid="6815040660801785649">"Nápověda a zpětná vazba"</string> - <string name="content_description_menu_button" msgid="8182594799812351266">"Nabídka"</string> </resources> diff --git a/packages/SettingsLib/res/values-da/strings.xml b/packages/SettingsLib/res/values-da/strings.xml index 571490174e62..98f41fc8945d 100644 --- a/packages/SettingsLib/res/values-da/strings.xml +++ b/packages/SettingsLib/res/values-da/strings.xml @@ -28,10 +28,7 @@ <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Wi-Fi-forbindelsesfejl"</string> <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Problem med godkendelse"</string> <string name="wifi_not_in_range" msgid="1136191511238508967">"Ikke inden for rækkevidde"</string> - <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) --> - <skip /> - <!-- no translation found for wifi_no_internet (5011955173375805204) --> - <skip /> + <string name="wifi_no_internet" msgid="9151470775868728896">"Der blev ikke fundet nogen internetadgang. Forbindelsen bliver ikke automatisk genoprettet."</string> <string name="saved_network" msgid="4352716707126620811">"Gemt af <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="connected_via_wfa" msgid="3805736726317410714">"Forbindelse via Wi-Fi-assistent"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Tilsluttet via %1$s"</string> @@ -344,5 +341,4 @@ <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Størst"</string> <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Tilpasset (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string> <string name="help_feedback_label" msgid="6815040660801785649">"Hjælp og feedback"</string> - <string name="content_description_menu_button" msgid="8182594799812351266">"Menu"</string> </resources> diff --git a/packages/SettingsLib/res/values-de/strings.xml b/packages/SettingsLib/res/values-de/strings.xml index 406523e7986d..c9da6c96c0ff 100644 --- a/packages/SettingsLib/res/values-de/strings.xml +++ b/packages/SettingsLib/res/values-de/strings.xml @@ -28,10 +28,7 @@ <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"WLAN-Verbindungsfehler"</string> <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Authentifizierungsproblem"</string> <string name="wifi_not_in_range" msgid="1136191511238508967">"Nicht in Reichweite"</string> - <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) --> - <skip /> - <!-- no translation found for wifi_no_internet (5011955173375805204) --> - <skip /> + <string name="wifi_no_internet" msgid="9151470775868728896">"Keine Internetverbindung erkannt, es kann nicht automatisch eine Verbindung hergestellt werden."</string> <string name="saved_network" msgid="4352716707126620811">"Gespeichert von <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="connected_via_wfa" msgid="3805736726317410714">"Über WLAN-Assistenten verbunden"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Über %1$s verbunden"</string> @@ -344,5 +341,4 @@ <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Am größten"</string> <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Benutzerdefiniert (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string> <string name="help_feedback_label" msgid="6815040660801785649">"Hilfe & Feedback"</string> - <string name="content_description_menu_button" msgid="8182594799812351266">"Menü"</string> </resources> diff --git a/packages/SettingsLib/res/values-el/strings.xml b/packages/SettingsLib/res/values-el/strings.xml index 117b9fed65c9..05e4e64c383f 100644 --- a/packages/SettingsLib/res/values-el/strings.xml +++ b/packages/SettingsLib/res/values-el/strings.xml @@ -28,10 +28,7 @@ <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Αποτυχία σύνδεσης Wi-Fi"</string> <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Πρόβλημα ελέγχου ταυτότητας"</string> <string name="wifi_not_in_range" msgid="1136191511238508967">"Εκτός εμβέλειας"</string> - <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) --> - <skip /> - <!-- no translation found for wifi_no_internet (5011955173375805204) --> - <skip /> + <string name="wifi_no_internet" msgid="9151470775868728896">"Δεν εντοπίστηκε καμία πρόσβαση στο διαδίκτυο, δεν θα γίνει αυτόματη επανασύνδεση."</string> <string name="saved_network" msgid="4352716707126620811">"Αποθηκεύτηκε από <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="connected_via_wfa" msgid="3805736726317410714">"Σύνδεση μέσω βοηθού Wi‑Fi"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Συνδέθηκε μέσω %1$s"</string> @@ -344,5 +341,4 @@ <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Μεγαλύτερα"</string> <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Προσαρμοσμένη (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string> <string name="help_feedback_label" msgid="6815040660801785649">"Βοήθεια και σχόλια"</string> - <string name="content_description_menu_button" msgid="8182594799812351266">"Μενού"</string> </resources> diff --git a/packages/SettingsLib/res/values-en-rAU/strings.xml b/packages/SettingsLib/res/values-en-rAU/strings.xml index 35ec15b6d564..799802b86b3a 100644 --- a/packages/SettingsLib/res/values-en-rAU/strings.xml +++ b/packages/SettingsLib/res/values-en-rAU/strings.xml @@ -28,10 +28,7 @@ <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Wi-Fi Connection Failure"</string> <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Authentication problem"</string> <string name="wifi_not_in_range" msgid="1136191511238508967">"Not in range"</string> - <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) --> - <skip /> - <!-- no translation found for wifi_no_internet (5011955173375805204) --> - <skip /> + <string name="wifi_no_internet" msgid="9151470775868728896">"No Internet Access Detected, won\'t automatically reconnect."</string> <string name="saved_network" msgid="4352716707126620811">"Saved by <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="connected_via_wfa" msgid="3805736726317410714">"Connected via Wi‑Fi assistant"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Connected via %1$s"</string> @@ -344,5 +341,4 @@ <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Largest"</string> <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Custom (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string> <string name="help_feedback_label" msgid="6815040660801785649">"Help & feedback"</string> - <string name="content_description_menu_button" msgid="8182594799812351266">"Menu"</string> </resources> diff --git a/packages/SettingsLib/res/values-en-rGB/strings.xml b/packages/SettingsLib/res/values-en-rGB/strings.xml index 35ec15b6d564..799802b86b3a 100644 --- a/packages/SettingsLib/res/values-en-rGB/strings.xml +++ b/packages/SettingsLib/res/values-en-rGB/strings.xml @@ -28,10 +28,7 @@ <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Wi-Fi Connection Failure"</string> <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Authentication problem"</string> <string name="wifi_not_in_range" msgid="1136191511238508967">"Not in range"</string> - <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) --> - <skip /> - <!-- no translation found for wifi_no_internet (5011955173375805204) --> - <skip /> + <string name="wifi_no_internet" msgid="9151470775868728896">"No Internet Access Detected, won\'t automatically reconnect."</string> <string name="saved_network" msgid="4352716707126620811">"Saved by <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="connected_via_wfa" msgid="3805736726317410714">"Connected via Wi‑Fi assistant"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Connected via %1$s"</string> @@ -344,5 +341,4 @@ <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Largest"</string> <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Custom (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string> <string name="help_feedback_label" msgid="6815040660801785649">"Help & feedback"</string> - <string name="content_description_menu_button" msgid="8182594799812351266">"Menu"</string> </resources> diff --git a/packages/SettingsLib/res/values-en-rIN/strings.xml b/packages/SettingsLib/res/values-en-rIN/strings.xml index 35ec15b6d564..799802b86b3a 100644 --- a/packages/SettingsLib/res/values-en-rIN/strings.xml +++ b/packages/SettingsLib/res/values-en-rIN/strings.xml @@ -28,10 +28,7 @@ <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Wi-Fi Connection Failure"</string> <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Authentication problem"</string> <string name="wifi_not_in_range" msgid="1136191511238508967">"Not in range"</string> - <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) --> - <skip /> - <!-- no translation found for wifi_no_internet (5011955173375805204) --> - <skip /> + <string name="wifi_no_internet" msgid="9151470775868728896">"No Internet Access Detected, won\'t automatically reconnect."</string> <string name="saved_network" msgid="4352716707126620811">"Saved by <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="connected_via_wfa" msgid="3805736726317410714">"Connected via Wi‑Fi assistant"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Connected via %1$s"</string> @@ -344,5 +341,4 @@ <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Largest"</string> <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Custom (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string> <string name="help_feedback_label" msgid="6815040660801785649">"Help & feedback"</string> - <string name="content_description_menu_button" msgid="8182594799812351266">"Menu"</string> </resources> diff --git a/packages/SettingsLib/res/values-es-rUS/strings.xml b/packages/SettingsLib/res/values-es-rUS/strings.xml index 2874e61fbb4f..08e739a00f50 100644 --- a/packages/SettingsLib/res/values-es-rUS/strings.xml +++ b/packages/SettingsLib/res/values-es-rUS/strings.xml @@ -28,10 +28,7 @@ <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Error de conexión Wi-Fi"</string> <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Problema de autenticación"</string> <string name="wifi_not_in_range" msgid="1136191511238508967">"Fuera de alcance"</string> - <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) --> - <skip /> - <!-- no translation found for wifi_no_internet (5011955173375805204) --> - <skip /> + <string name="wifi_no_internet" msgid="9151470775868728896">"No se detectó el acceso a Internet. No se volverá a conectar de forma automática."</string> <string name="saved_network" msgid="4352716707126620811">"Guardadas por <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="connected_via_wfa" msgid="3805736726317410714">"Conexión por asistente de Wi-Fi"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Conexión a través de %1$s"</string> @@ -344,5 +341,4 @@ <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Máximo"</string> <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Personalizado (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string> <string name="help_feedback_label" msgid="6815040660801785649">"Ayuda y comentarios"</string> - <string name="content_description_menu_button" msgid="8182594799812351266">"Menú"</string> </resources> diff --git a/packages/SettingsLib/res/values-es/strings.xml b/packages/SettingsLib/res/values-es/strings.xml index 7d0097a9e9f3..3d2f6c132da0 100644 --- a/packages/SettingsLib/res/values-es/strings.xml +++ b/packages/SettingsLib/res/values-es/strings.xml @@ -28,10 +28,7 @@ <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Error de conexión Wi-Fi"</string> <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Error de autenticación"</string> <string name="wifi_not_in_range" msgid="1136191511238508967">"Fuera de rango"</string> - <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) --> - <skip /> - <!-- no translation found for wifi_no_internet (5011955173375805204) --> - <skip /> + <string name="wifi_no_internet" msgid="9151470775868728896">"No se ha detectado acceso a Internet, no se volverá a conectar automáticamente."</string> <string name="saved_network" msgid="4352716707126620811">"Guardadas por <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="connected_via_wfa" msgid="3805736726317410714">"Conectado a través de asistente Wi‑Fi"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Conectado a través de %1$s"</string> @@ -176,7 +173,7 @@ <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Aumentar el nivel de logging de Wi-Fi, mostrar por SSID RSSI en el selector Wi-Fi"</string> <string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Si está habilitada, la conexión Wi‑Fi será más agresiva al transferir la conexión de datos al móvil (si la señal Wi‑Fi no es estable)"</string> <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"Permitir/No permitir búsquedas de Wi-Fi basadas en la cantidad de tráfico de datos presente en la interfaz"</string> - <string name="select_logd_size_title" msgid="7433137108348553508">"Tamaños de búfer de registrador"</string> + <string name="select_logd_size_title" msgid="7433137108348553508">"Tamaños del búfer de Logger"</string> <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"Elige el tamaño del Logger por búfer"</string> <string name="dev_logpersist_clear_warning_title" msgid="684806692440237967">"¿Borrar almacenamiento continuo del registrador?"</string> <string name="dev_logpersist_clear_warning_message" msgid="2256582531342994562">"Cuando ya no supervisamos la actividad con el registrador de forma continua, estamos obligados a borrar los datos del registrador almacenados en el dispositivo."</string> @@ -344,5 +341,4 @@ <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Lo más grande posible"</string> <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Personalizado (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string> <string name="help_feedback_label" msgid="6815040660801785649">"Ayuda y sugerencias"</string> - <string name="content_description_menu_button" msgid="8182594799812351266">"Menú"</string> </resources> diff --git a/packages/SettingsLib/res/values-et-rEE/strings.xml b/packages/SettingsLib/res/values-et-rEE/strings.xml index 97fe73f192a3..a7b0f64f9a4d 100644 --- a/packages/SettingsLib/res/values-et-rEE/strings.xml +++ b/packages/SettingsLib/res/values-et-rEE/strings.xml @@ -28,10 +28,7 @@ <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"WiFi-ühenduse viga"</string> <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Autentimise probleem"</string> <string name="wifi_not_in_range" msgid="1136191511238508967">"Pole vahemikus"</string> - <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) --> - <skip /> - <!-- no translation found for wifi_no_internet (5011955173375805204) --> - <skip /> + <string name="wifi_no_internet" msgid="9151470775868728896">"Interneti-ühendust ei tuvastatud, seadet ei ühendata automaatselt."</string> <string name="saved_network" msgid="4352716707126620811">"Salvestas: <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="connected_via_wfa" msgid="3805736726317410714">"Ühendatud WiFi-abi kaudu"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Ühendatud üksuse %1$s kaudu"</string> @@ -344,5 +341,4 @@ <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Suurim"</string> <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Kohandatud (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string> <string name="help_feedback_label" msgid="6815040660801785649">"Abi ja tagasiside"</string> - <string name="content_description_menu_button" msgid="8182594799812351266">"Menüü"</string> </resources> diff --git a/packages/SettingsLib/res/values-eu-rES/strings.xml b/packages/SettingsLib/res/values-eu-rES/strings.xml index 9234f24600b2..f476511b8106 100644 --- a/packages/SettingsLib/res/values-eu-rES/strings.xml +++ b/packages/SettingsLib/res/values-eu-rES/strings.xml @@ -28,10 +28,7 @@ <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Ezin izan da konektatu Wi-Fi sarera"</string> <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Autentifikazio-arazoa"</string> <string name="wifi_not_in_range" msgid="1136191511238508967">"Urrunegi"</string> - <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) --> - <skip /> - <!-- no translation found for wifi_no_internet (5011955173375805204) --> - <skip /> + <string name="wifi_no_internet" msgid="9151470775868728896">"Ez da hauteman Interneterako sarbiderik. Ez da automatikoki berriro konektatuko."</string> <string name="saved_network" msgid="4352716707126620811">"<xliff:g id="NAME">%1$s</xliff:g> aplikazioak gorde du"</string> <string name="connected_via_wfa" msgid="3805736726317410714">"Wi‑Fi laguntzailearen bidez konektatuta"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s bidez konektatuta"</string> @@ -344,5 +341,4 @@ <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Handiena"</string> <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Pertsonalizatua (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string> <string name="help_feedback_label" msgid="6815040660801785649">"Laguntza eta iritziak"</string> - <string name="content_description_menu_button" msgid="8182594799812351266">"Menua"</string> </resources> diff --git a/packages/SettingsLib/res/values-fa/strings.xml b/packages/SettingsLib/res/values-fa/strings.xml index bb2e16662555..44918513bcd7 100644 --- a/packages/SettingsLib/res/values-fa/strings.xml +++ b/packages/SettingsLib/res/values-fa/strings.xml @@ -28,10 +28,7 @@ <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"اتصال Wi-Fi برقرار نشد"</string> <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"مشکل احراز هویت"</string> <string name="wifi_not_in_range" msgid="1136191511238508967">"در محدوده نیست"</string> - <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) --> - <skip /> - <!-- no translation found for wifi_no_internet (5011955173375805204) --> - <skip /> + <string name="wifi_no_internet" msgid="9151470775868728896">"دسترسی به اینترنت شناسایی نشد، به صورت خودکار وصل نمیشود."</string> <string name="saved_network" msgid="4352716707126620811">"ذخیرهشده توسط <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="connected_via_wfa" msgid="3805736726317410714">"متصل شده از طریق دستیار Wi-Fi"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"متصل از طریق %1$s"</string> @@ -186,7 +183,7 @@ <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"انتخاب پیکربندی USB"</string> <string name="allow_mock_location" msgid="2787962564578664888">"مکانهای کاذب مجاز هستند"</string> <string name="allow_mock_location_summary" msgid="317615105156345626">"مکانهای کاذب مجاز هستند"</string> - <string name="debug_view_attributes" msgid="6485448367803310384">"فعال کردن نمایش بازبینی ویژگی"</string> + <string name="debug_view_attributes" msgid="6485448367803310384">"فعال کردن بازبینی ویژگی بازدید"</string> <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"داده سلولی همیشه فعال نگه داشته میشود، حتی وقتی Wi-Fi فعال است (برای جابهجایی سریع شبکه)."</string> <string name="adb_warning_title" msgid="6234463310896563253">"اشکالزدایی USB انجام شود؟"</string> <string name="adb_warning_message" msgid="7316799925425402244">"اشکالزدایی USB فقط برای اهداف برنامهنویسی در نظر گرفته شده است. از آن برای رونوشتبرداری داده بین رایانه و دستگاهتان، نصب برنامهها در دستگاهتان بدون اعلان و خواندن دادههای گزارش استفاده کنید."</string> @@ -344,5 +341,4 @@ <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"بزرگترین"</string> <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"سفارشی (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string> <string name="help_feedback_label" msgid="6815040660801785649">"راهنما و بازخورد"</string> - <string name="content_description_menu_button" msgid="8182594799812351266">"منو"</string> </resources> diff --git a/packages/SettingsLib/res/values-fi/strings.xml b/packages/SettingsLib/res/values-fi/strings.xml index c04c97045786..cdef968d90aa 100644 --- a/packages/SettingsLib/res/values-fi/strings.xml +++ b/packages/SettingsLib/res/values-fi/strings.xml @@ -28,10 +28,7 @@ <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Wi-Fi-yhteysvirhe"</string> <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Todennusvirhe"</string> <string name="wifi_not_in_range" msgid="1136191511238508967">"Ei kantoalueella"</string> - <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) --> - <skip /> - <!-- no translation found for wifi_no_internet (5011955173375805204) --> - <skip /> + <string name="wifi_no_internet" msgid="9151470775868728896">"Internetyhteyttä ei havaittu, yhteyttä ei muodosteta automaattisesti uudelleen."</string> <string name="saved_network" msgid="4352716707126620811">"Tallentaja: <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="connected_via_wfa" msgid="3805736726317410714">"Yhteys muodostettu Wi‑Fi-apurin kautta"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Yhdistetty seuraavan kautta: %1$s"</string> @@ -344,5 +341,4 @@ <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Suurin"</string> <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Muokattu (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string> <string name="help_feedback_label" msgid="6815040660801785649">"Ohje ja palaute"</string> - <string name="content_description_menu_button" msgid="8182594799812351266">"Valikko"</string> </resources> diff --git a/packages/SettingsLib/res/values-fr-rCA/strings.xml b/packages/SettingsLib/res/values-fr-rCA/strings.xml index 1b3490426403..958b8fd4d5d3 100644 --- a/packages/SettingsLib/res/values-fr-rCA/strings.xml +++ b/packages/SettingsLib/res/values-fr-rCA/strings.xml @@ -28,10 +28,7 @@ <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Échec de connexion Wi-Fi"</string> <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Problème d\'authentification"</string> <string name="wifi_not_in_range" msgid="1136191511238508967">"Hors de portée"</string> - <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) --> - <skip /> - <!-- no translation found for wifi_no_internet (5011955173375805204) --> - <skip /> + <string name="wifi_no_internet" msgid="9151470775868728896">"Aucun accès à Internet détecté, reconnexion automatique impossible"</string> <string name="saved_network" msgid="4352716707126620811">"Enregistrés par <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="connected_via_wfa" msgid="3805736726317410714">"Connecté à l\'aide de l\'assistant Wi-Fi"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Connecté par %1$s"</string> @@ -344,5 +341,4 @@ <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"La plus grande"</string> <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Personnalisée (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string> <string name="help_feedback_label" msgid="6815040660801785649">"Aide et commentaires"</string> - <string name="content_description_menu_button" msgid="8182594799812351266">"Menu"</string> </resources> diff --git a/packages/SettingsLib/res/values-fr/strings.xml b/packages/SettingsLib/res/values-fr/strings.xml index 07398f3d87c1..cf08f3b5f237 100644 --- a/packages/SettingsLib/res/values-fr/strings.xml +++ b/packages/SettingsLib/res/values-fr/strings.xml @@ -28,10 +28,7 @@ <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Échec de la connexion Wi-Fi"</string> <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Problème d\'authentification."</string> <string name="wifi_not_in_range" msgid="1136191511238508967">"Hors de portée"</string> - <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) --> - <skip /> - <!-- no translation found for wifi_no_internet (5011955173375805204) --> - <skip /> + <string name="wifi_no_internet" msgid="9151470775868728896">"Aucun accès à Internet détecté, reconnexion automatique impossible"</string> <string name="saved_network" msgid="4352716707126620811">"Enregistré par <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="connected_via_wfa" msgid="3805736726317410714">"Connecté via l\'assistant Wi‑Fi"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Connecté via %1$s"</string> @@ -344,5 +341,4 @@ <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Le plus grand"</string> <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Personnalisé (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string> <string name="help_feedback_label" msgid="6815040660801785649">"Aide et commentaires"</string> - <string name="content_description_menu_button" msgid="8182594799812351266">"Menu"</string> </resources> diff --git a/packages/SettingsLib/res/values-gl-rES/strings.xml b/packages/SettingsLib/res/values-gl-rES/strings.xml index 5207a731b8d9..cdc4581ca80c 100644 --- a/packages/SettingsLib/res/values-gl-rES/strings.xml +++ b/packages/SettingsLib/res/values-gl-rES/strings.xml @@ -28,10 +28,7 @@ <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Erro na conexión wifi"</string> <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Problema de autenticación"</string> <string name="wifi_not_in_range" msgid="1136191511238508967">"Non está dentro da zona de cobertura"</string> - <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) --> - <skip /> - <!-- no translation found for wifi_no_internet (5011955173375805204) --> - <skip /> + <string name="wifi_no_internet" msgid="9151470775868728896">"Non se detectou acceso a Internet e non se volverá conectar automaticamente."</string> <string name="saved_network" msgid="4352716707126620811">"Redes gardadas por <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="connected_via_wfa" msgid="3805736726317410714">"Conectado ao asistente de wifi"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Conectado a través de %1$s"</string> @@ -344,5 +341,4 @@ <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"O máis grande"</string> <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Personalizado (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string> <string name="help_feedback_label" msgid="6815040660801785649">"Axuda e suxestións"</string> - <string name="content_description_menu_button" msgid="8182594799812351266">"Menú"</string> </resources> diff --git a/packages/SettingsLib/res/values-gu-rIN/strings.xml b/packages/SettingsLib/res/values-gu-rIN/strings.xml index 3d0a02bf9ae7..1b40e01737d1 100644 --- a/packages/SettingsLib/res/values-gu-rIN/strings.xml +++ b/packages/SettingsLib/res/values-gu-rIN/strings.xml @@ -28,10 +28,7 @@ <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"WiFi કનેક્શન નિષ્ફળ"</string> <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"પ્રમાણીકરણ સમસ્યા"</string> <string name="wifi_not_in_range" msgid="1136191511238508967">"રેન્જમાં નથી"</string> - <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) --> - <skip /> - <!-- no translation found for wifi_no_internet (5011955173375805204) --> - <skip /> + <string name="wifi_no_internet" msgid="9151470775868728896">"કોઈ ઇન્ટરનેટ અૅક્સેસ શોધાયું નથી, આપમેળે ફરીથી કનેક્ટ કરશે નહીં."</string> <string name="saved_network" msgid="4352716707126620811">"<xliff:g id="NAME">%1$s</xliff:g> દ્વારા સચવાયું"</string> <string name="connected_via_wfa" msgid="3805736726317410714">"Wi-Fi સહાયક દ્વારા કનેક્ટ થયું"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s દ્વારા કનેક્ટ થયેલ"</string> @@ -344,5 +341,4 @@ <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"સૌથી મોટું"</string> <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"કસ્ટમ (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string> <string name="help_feedback_label" msgid="6815040660801785649">"સહાય અને પ્રતિસાદ"</string> - <string name="content_description_menu_button" msgid="8182594799812351266">"મેનુ"</string> </resources> diff --git a/packages/SettingsLib/res/values-hi/strings.xml b/packages/SettingsLib/res/values-hi/strings.xml index 329a67082904..8dfbb4a58780 100644 --- a/packages/SettingsLib/res/values-hi/strings.xml +++ b/packages/SettingsLib/res/values-hi/strings.xml @@ -28,10 +28,7 @@ <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"वाईफ़ाई कनेक्शन विफलता"</string> <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"प्रमाणीकरण समस्या"</string> <string name="wifi_not_in_range" msgid="1136191511238508967">"रेंज में नहीं"</string> - <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) --> - <skip /> - <!-- no translation found for wifi_no_internet (5011955173375805204) --> - <skip /> + <string name="wifi_no_internet" msgid="9151470775868728896">"किसी इंटरनेट कनेक्शन का पता नहीं चला, अपने आप पुन: कनेक्ट नहीं हो सकता."</string> <string name="saved_network" msgid="4352716707126620811">"<xliff:g id="NAME">%1$s</xliff:g> के द्वारा सहेजा गया"</string> <string name="connected_via_wfa" msgid="3805736726317410714">"वाई-फ़ाई सहायक के द्वारा कनेक्ट है"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s के द्वारा उपलब्ध"</string> @@ -344,5 +341,4 @@ <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"सबसे बड़ा"</string> <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"कस्टम (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string> <string name="help_feedback_label" msgid="6815040660801785649">"सहायता और फ़ीडबैक"</string> - <string name="content_description_menu_button" msgid="8182594799812351266">"मेनू"</string> </resources> diff --git a/packages/SettingsLib/res/values-hr/strings.xml b/packages/SettingsLib/res/values-hr/strings.xml index 89b06530cd8c..07e492581d41 100644 --- a/packages/SettingsLib/res/values-hr/strings.xml +++ b/packages/SettingsLib/res/values-hr/strings.xml @@ -28,10 +28,7 @@ <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Povezivanje s Wi-Fi-jem nije uspjelo"</string> <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Problem u autentifikaciji"</string> <string name="wifi_not_in_range" msgid="1136191511238508967">"Nije u rasponu"</string> - <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) --> - <skip /> - <!-- no translation found for wifi_no_internet (5011955173375805204) --> - <skip /> + <string name="wifi_no_internet" msgid="9151470775868728896">"Pristup internetu nije otkriven. Nema automatskog ponovnog povezivanja."</string> <string name="saved_network" msgid="4352716707126620811">"Spremljeno: <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="connected_via_wfa" msgid="3805736726317410714">"Povezani putem pomoćnika za Wi-Fi"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Povezano putem %1$s"</string> @@ -344,5 +341,4 @@ <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Najveće"</string> <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Prilagođeno (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string> <string name="help_feedback_label" msgid="6815040660801785649">"Pomoć i povratne informacije"</string> - <string name="content_description_menu_button" msgid="8182594799812351266">"Izbornik"</string> </resources> diff --git a/packages/SettingsLib/res/values-hu/strings.xml b/packages/SettingsLib/res/values-hu/strings.xml index c33943a3c3fb..0d8ec26eb668 100644 --- a/packages/SettingsLib/res/values-hu/strings.xml +++ b/packages/SettingsLib/res/values-hu/strings.xml @@ -28,10 +28,7 @@ <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Wi-Fi-kapcsolati hiba"</string> <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Azonosítási probléma"</string> <string name="wifi_not_in_range" msgid="1136191511238508967">"Hatókörön kívül"</string> - <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) --> - <skip /> - <!-- no translation found for wifi_no_internet (5011955173375805204) --> - <skip /> + <string name="wifi_no_internet" msgid="9151470775868728896">"Nincs érzékelhető internet-hozzáférés, ezért nem kapcsolódik újra automatikusan."</string> <string name="saved_network" msgid="4352716707126620811">"Mentette: <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="connected_via_wfa" msgid="3805736726317410714">"Csatlakozva Wi‑Fi-segéddel"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Csatlakozva a következőn keresztül: %1$s"</string> @@ -344,5 +341,4 @@ <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Legnagyobb"</string> <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Egyéni (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string> <string name="help_feedback_label" msgid="6815040660801785649">"Súgó és visszajelzés"</string> - <string name="content_description_menu_button" msgid="8182594799812351266">"Menü"</string> </resources> diff --git a/packages/SettingsLib/res/values-hy-rAM/strings.xml b/packages/SettingsLib/res/values-hy-rAM/strings.xml index 32b0dd6e6c94..cb12fbfaf502 100644 --- a/packages/SettingsLib/res/values-hy-rAM/strings.xml +++ b/packages/SettingsLib/res/values-hy-rAM/strings.xml @@ -28,10 +28,7 @@ <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"WiFi կապի ձախողում"</string> <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Նույնականացման խնդիր"</string> <string name="wifi_not_in_range" msgid="1136191511238508967">"Ընդգրկույթից դուրս է"</string> - <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) --> - <skip /> - <!-- no translation found for wifi_no_internet (5011955173375805204) --> - <skip /> + <string name="wifi_no_internet" msgid="9151470775868728896">"Ինտերնետի հասանելիություն չկա. ավտոմատ կերպով կրկին չի միանա:"</string> <string name="saved_network" msgid="4352716707126620811">"Պահել է հետևյալ օգտվողը՝ <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="connected_via_wfa" msgid="3805736726317410714">"Կապակցված է Wi‑Fi Օգնականի միջոցով"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Կապակցված է %1$s-ի միջոցով"</string> @@ -41,7 +38,7 @@ <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Անջատվում է..."</string> <string name="bluetooth_connecting" msgid="8555009514614320497">"Միանում է..."</string> <string name="bluetooth_connected" msgid="6038755206916626419">"Միացված է"</string> - <string name="bluetooth_pairing" msgid="1426882272690346242">"Զուգակցում..."</string> + <string name="bluetooth_pairing" msgid="1426882272690346242">"Զուգավորում..."</string> <string name="bluetooth_connected_no_headset" msgid="2866994875046035609">"Միացված (առանց հեռախոսի)"</string> <string name="bluetooth_connected_no_a2dp" msgid="4576188601581440337">"Միացված է (առանց մեդիա)"</string> <string name="bluetooth_connected_no_map" msgid="6504436917057479986">"Միացված է (հաղորդագրությանը մուտք չկա)"</string> @@ -75,7 +72,7 @@ <string name="bluetooth_pairing_accept" msgid="6163520056536604875">"Զուգավորել"</string> <string name="bluetooth_pairing_accept_all_caps" msgid="6061699265220789149">"Զուգավորել"</string> <string name="bluetooth_pairing_decline" msgid="4185420413578948140">"Չեղարկել"</string> - <string name="bluetooth_pairing_will_share_phonebook" msgid="4982239145676394429">"Զուգակցում է մուտքի թույլտվությունը դեպի ձեր կոնտակտները և զանգերի պատմությունը, երբ միացված է:"</string> + <string name="bluetooth_pairing_will_share_phonebook" msgid="4982239145676394429">"Զուգավորում է մուտքի թույլտվությունը դեպի ձեր կոնտակտները և զանգերի պատմությունը, երբ միացված է:"</string> <string name="bluetooth_pairing_error_message" msgid="3748157733635947087">"Չհաջողվեց զուգավորել <xliff:g id="DEVICE_NAME">%1$s</xliff:g>-ի հետ:"</string> <string name="bluetooth_pairing_pin_error_message" msgid="8337234855188925274">"Հնարավոր չեղավ զուգավորվել <xliff:g id="DEVICE_NAME">%1$s</xliff:g>-ի հետ սխալ PIN-ի կամ անցաբառի պատճառով:."</string> <string name="bluetooth_pairing_device_down_error_message" msgid="7870998403045801381">"Հնարավոր չէ կապ հաստատել <xliff:g id="DEVICE_NAME">%1$s</xliff:g>-ի հետ:"</string> @@ -344,5 +341,4 @@ <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Ամենամեծ"</string> <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Հատուկ (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string> <string name="help_feedback_label" msgid="6815040660801785649">"Օգնություն և հետադարձ կապ"</string> - <string name="content_description_menu_button" msgid="8182594799812351266">"Ընտրացանկ"</string> </resources> diff --git a/packages/SettingsLib/res/values-in/strings.xml b/packages/SettingsLib/res/values-in/strings.xml index 33df1fe141be..ffdb60745571 100644 --- a/packages/SettingsLib/res/values-in/strings.xml +++ b/packages/SettingsLib/res/values-in/strings.xml @@ -28,10 +28,7 @@ <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Kegagalan Sambungan Wi-Fi"</string> <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Masalah autentikasi"</string> <string name="wifi_not_in_range" msgid="1136191511238508967">"Tidak dalam jangkauan"</string> - <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) --> - <skip /> - <!-- no translation found for wifi_no_internet (5011955173375805204) --> - <skip /> + <string name="wifi_no_internet" msgid="9151470775868728896">"Akses Internet Tidak Terdeteksi, tidak akan menyambung ulang secara otomatis."</string> <string name="saved_network" msgid="4352716707126620811">"Disimpan oleh <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="connected_via_wfa" msgid="3805736726317410714">"Terhubung melalui Asisten Wi-Fi"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Terhubung melalui %1$s"</string> @@ -344,5 +341,4 @@ <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Terbesar"</string> <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"(<xliff:g id="DENSITYDPI">%d</xliff:g>) khusus"</string> <string name="help_feedback_label" msgid="6815040660801785649">"Bantuan & masukan"</string> - <string name="content_description_menu_button" msgid="8182594799812351266">"Menu"</string> </resources> diff --git a/packages/SettingsLib/res/values-is-rIS/strings.xml b/packages/SettingsLib/res/values-is-rIS/strings.xml index 8cc408f0c4e3..25e13a4d69d8 100644 --- a/packages/SettingsLib/res/values-is-rIS/strings.xml +++ b/packages/SettingsLib/res/values-is-rIS/strings.xml @@ -28,10 +28,7 @@ <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"WiFi-tengingarvilla"</string> <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Vandamál við auðkenningu"</string> <string name="wifi_not_in_range" msgid="1136191511238508967">"Ekkert samband"</string> - <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) --> - <skip /> - <!-- no translation found for wifi_no_internet (5011955173375805204) --> - <skip /> + <string name="wifi_no_internet" msgid="9151470775868728896">"Enginn netaðgangur fannst; endurtengist ekki sjálfkrafa."</string> <string name="saved_network" msgid="4352716707126620811">"<xliff:g id="NAME">%1$s</xliff:g> vistaði"</string> <string name="connected_via_wfa" msgid="3805736726317410714">"Tengt í gegnum Wi-Fi aðstoð"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Tengt í gegnum %1$s"</string> @@ -344,5 +341,4 @@ <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Stærst"</string> <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Sérsniðið (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string> <string name="help_feedback_label" msgid="6815040660801785649">"Hjálp og ábendingar"</string> - <string name="content_description_menu_button" msgid="8182594799812351266">"Valmynd"</string> </resources> diff --git a/packages/SettingsLib/res/values-it/strings.xml b/packages/SettingsLib/res/values-it/strings.xml index 0bb26e199d2f..2907fabef70e 100644 --- a/packages/SettingsLib/res/values-it/strings.xml +++ b/packages/SettingsLib/res/values-it/strings.xml @@ -28,10 +28,7 @@ <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Errore connessione Wi-Fi"</string> <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Problema di autenticazione"</string> <string name="wifi_not_in_range" msgid="1136191511238508967">"Fuori portata"</string> - <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) --> - <skip /> - <!-- no translation found for wifi_no_internet (5011955173375805204) --> - <skip /> + <string name="wifi_no_internet" msgid="9151470775868728896">"Nessun accesso a Internet rilevato, non verrà eseguita la riconnessione automatica."</string> <string name="saved_network" msgid="4352716707126620811">"Salvata da <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="connected_via_wfa" msgid="3805736726317410714">"Connesso tramite assistente Wi‑Fi"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Collegato tramite %1$s"</string> @@ -194,7 +191,7 @@ <string name="dev_settings_warning_title" msgid="7244607768088540165">"Consentire impostazioni di sviluppo?"</string> <string name="dev_settings_warning_message" msgid="2298337781139097964">"Queste impostazioni sono utilizzabili solo a scopo di sviluppo. Possono causare l\'arresto o il comportamento anomalo del dispositivo e delle applicazioni su di esso."</string> <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Verifica app tramite USB"</string> - <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Controlla che le app installate tramite ADB/ADT non abbiano un comportamento dannoso."</string> + <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Controlla che le applicazioni installate tramite ADB/ADT non abbiano un comportamento dannoso."</string> <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"Consente di disattivare la funzione del volume assoluto Bluetooth in caso di problemi con il volume dei dispositivi remoti, ad esempio un volume troppo alto o la mancanza di controllo."</string> <string name="enable_terminal_title" msgid="95572094356054120">"Terminale locale"</string> <string name="enable_terminal_summary" msgid="67667852659359206">"Abilita l\'app Terminale che offre l\'accesso alla shell locale"</string> @@ -331,9 +328,9 @@ <string name="disabled_by_admin" msgid="3669999613095206948">"Disattivata dall\'amministratore"</string> <string name="home" msgid="3256884684164448244">"Home page Impostazioni"</string> <string-array name="battery_labels"> - <item msgid="8494684293649631252">"0%"</item> - <item msgid="8934126114226089439">"50%"</item> - <item msgid="1286113608943010849">"100%"</item> + <item msgid="8494684293649631252">"0%%"</item> + <item msgid="8934126114226089439">"50%%"</item> + <item msgid="1286113608943010849">"100%%"</item> </string-array> <string name="charge_length_format" msgid="8978516217024434156">"<xliff:g id="ID_1">%1$s</xliff:g> fa"</string> <string name="remaining_length_format" msgid="7886337596669190587">"<xliff:g id="ID_1">%1$s</xliff:g> rimanenti"</string> @@ -344,5 +341,4 @@ <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Massimo"</string> <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Personalizzato (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string> <string name="help_feedback_label" msgid="6815040660801785649">"Guida e feedback"</string> - <string name="content_description_menu_button" msgid="8182594799812351266">"Menu"</string> </resources> diff --git a/packages/SettingsLib/res/values-iw/strings.xml b/packages/SettingsLib/res/values-iw/strings.xml index 75109114168d..7c16e4276347 100644 --- a/packages/SettingsLib/res/values-iw/strings.xml +++ b/packages/SettingsLib/res/values-iw/strings.xml @@ -28,10 +28,7 @@ <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"כשל בחיבור Wi-Fi"</string> <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"בעיית אימות"</string> <string name="wifi_not_in_range" msgid="1136191511238508967">"מחוץ לטווח"</string> - <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) --> - <skip /> - <!-- no translation found for wifi_no_internet (5011955173375805204) --> - <skip /> + <string name="wifi_no_internet" msgid="9151470775868728896">"אין גישה לאינטרנט. לא יתבצע חיבור מחדש באופן אוטומטי."</string> <string name="saved_network" msgid="4352716707126620811">"נשמר על ידי <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="connected_via_wfa" msgid="3805736726317410714">"מחובר באמצעות אסיסטנט ה-Wi-Fi"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"מחובר דרך %1$s"</string> @@ -344,5 +341,4 @@ <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"הכי גדול"</string> <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"מותאם אישית (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string> <string name="help_feedback_label" msgid="6815040660801785649">"עזרה ומשוב"</string> - <string name="content_description_menu_button" msgid="8182594799812351266">"תפריט"</string> </resources> diff --git a/packages/SettingsLib/res/values-ja/strings.xml b/packages/SettingsLib/res/values-ja/strings.xml index f657c1e21687..25f4152a22fa 100644 --- a/packages/SettingsLib/res/values-ja/strings.xml +++ b/packages/SettingsLib/res/values-ja/strings.xml @@ -28,8 +28,7 @@ <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"WiFi接続エラー"</string> <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"認証に問題"</string> <string name="wifi_not_in_range" msgid="1136191511238508967">"圏外"</string> - <string name="wifi_no_internet_no_reconnect" msgid="2211781637653149657">"インターネット アクセスを検出できないため、自動的に再接続されません。"</string> - <string name="wifi_no_internet" msgid="5011955173375805204">"インターネットに接続していません。"</string> + <string name="wifi_no_internet" msgid="9151470775868728896">"インターネットアクセスを検出できないため、自動的に再接続されません。"</string> <string name="saved_network" msgid="4352716707126620811">"<xliff:g id="NAME">%1$s</xliff:g>で保存"</string> <string name="connected_via_wfa" msgid="3805736726317410714">"Wi‑Fiアシスタント経由で接続"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s経由で接続"</string> @@ -344,5 +343,4 @@ <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"最大"</string> <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"カスタム(<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string> <string name="help_feedback_label" msgid="6815040660801785649">"ヘルプとフィードバック"</string> - <string name="content_description_menu_button" msgid="8182594799812351266">"メニュー"</string> </resources> diff --git a/packages/SettingsLib/res/values-ka-rGE/strings.xml b/packages/SettingsLib/res/values-ka-rGE/strings.xml index f349c4f9657b..ffe194a0bc29 100644 --- a/packages/SettingsLib/res/values-ka-rGE/strings.xml +++ b/packages/SettingsLib/res/values-ka-rGE/strings.xml @@ -28,10 +28,7 @@ <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"WiFi კავშირის შეფერხება"</string> <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"ავთენტიკაციის პრობლემა"</string> <string name="wifi_not_in_range" msgid="1136191511238508967">"არ არის დიაპაზონში"</string> - <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) --> - <skip /> - <!-- no translation found for wifi_no_internet (5011955173375805204) --> - <skip /> + <string name="wifi_no_internet" msgid="9151470775868728896">"ინტერნეტთან წვდომის ამოცნობა ვერ მოხერხდა. ავტომატურად ხელახლა დაკავშირება არ განხორციელდება."</string> <string name="saved_network" msgid="4352716707126620811">"შენახული <xliff:g id="NAME">%1$s</xliff:g>-ის მიერ"</string> <string name="connected_via_wfa" msgid="3805736726317410714">"დაკავშირებულია Wi-Fi თანაშემწით"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s-ით დაკავშირებული"</string> @@ -344,5 +341,4 @@ <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"უდიდესი"</string> <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"მორგებული (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string> <string name="help_feedback_label" msgid="6815040660801785649">"დახმარება და გამოხმაურება"</string> - <string name="content_description_menu_button" msgid="8182594799812351266">"მენიუ"</string> </resources> diff --git a/packages/SettingsLib/res/values-kk-rKZ/strings.xml b/packages/SettingsLib/res/values-kk-rKZ/strings.xml index 1141fcacb794..3dcc7eb50ced 100644 --- a/packages/SettingsLib/res/values-kk-rKZ/strings.xml +++ b/packages/SettingsLib/res/values-kk-rKZ/strings.xml @@ -28,10 +28,7 @@ <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Wi-Fi байланысының қатесі"</string> <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Растау мәселесі"</string> <string name="wifi_not_in_range" msgid="1136191511238508967">"Аумақта жоқ"</string> - <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) --> - <skip /> - <!-- no translation found for wifi_no_internet (5011955173375805204) --> - <skip /> + <string name="wifi_no_internet" msgid="9151470775868728896">"Интернетке қатынас анықталмады, автоматты түрде қайта қосылу орындалмайды."</string> <string name="saved_network" msgid="4352716707126620811">"<xliff:g id="NAME">%1$s</xliff:g> сақтаған"</string> <string name="connected_via_wfa" msgid="3805736726317410714">"Wi‑Fi көмекшісі арқылы қосылу орындалды"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s арқылы қосылған"</string> @@ -344,5 +341,4 @@ <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Ең үлкен"</string> <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Арнаулы (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string> <string name="help_feedback_label" msgid="6815040660801785649">"Анықтама және пікір"</string> - <string name="content_description_menu_button" msgid="8182594799812351266">"Mәзір"</string> </resources> diff --git a/packages/SettingsLib/res/values-km-rKH/strings.xml b/packages/SettingsLib/res/values-km-rKH/strings.xml index 7d1c7979b1e3..aa0ce2498737 100644 --- a/packages/SettingsLib/res/values-km-rKH/strings.xml +++ b/packages/SettingsLib/res/values-km-rKH/strings.xml @@ -28,10 +28,7 @@ <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"ការភ្ជាប់ WiFi បរាជ័យ"</string> <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"បញ្ហាក្នុងការផ្ទៀងផ្ទាត់"</string> <string name="wifi_not_in_range" msgid="1136191511238508967">"នៅក្រៅតំបន់"</string> - <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) --> - <skip /> - <!-- no translation found for wifi_no_internet (5011955173375805204) --> - <skip /> + <string name="wifi_no_internet" msgid="9151470775868728896">"រកមិនឃើញការចូលដំណើរការអ៊ីនធឺណិត, នឹងមិនភ្ជាប់ឡើងវិញដោយស្វ័យប្រវត្តិទេ។"</string> <string name="saved_network" msgid="4352716707126620811">"បានរក្សាទុកដោយ <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="connected_via_wfa" msgid="3805736726317410714">"បានភ្ជាប់តាមរយៈជំនួយការ Wi‑Fi"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"បានភ្ជាប់តាមរយៈ %1$s"</string> @@ -344,5 +341,4 @@ <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"ធំបំផុត"</string> <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"ផ្ទាល់ខ្លួន (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string> <string name="help_feedback_label" msgid="6815040660801785649">"ជំនួយ និងមតិស្ថាបនា"</string> - <string name="content_description_menu_button" msgid="8182594799812351266">"ម៉ឺនុយ"</string> </resources> diff --git a/packages/SettingsLib/res/values-kn-rIN/strings.xml b/packages/SettingsLib/res/values-kn-rIN/strings.xml index 9039e258b086..8578810daa2d 100644 --- a/packages/SettingsLib/res/values-kn-rIN/strings.xml +++ b/packages/SettingsLib/res/values-kn-rIN/strings.xml @@ -28,10 +28,7 @@ <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"WiFi ಸಂಪರ್ಕ ವಿಫಲತೆ"</string> <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"ಪ್ರಮಾಣೀಕರಣ ಸಮಸ್ಯೆ"</string> <string name="wifi_not_in_range" msgid="1136191511238508967">"ವ್ಯಾಪ್ತಿಯಲ್ಲಿಲ್ಲ"</string> - <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) --> - <skip /> - <!-- no translation found for wifi_no_internet (5011955173375805204) --> - <skip /> + <string name="wifi_no_internet" msgid="9151470775868728896">"ಯಾವುದೇ ಇಂಟರ್ನೆಟ್ ಪ್ರವೇಶ ಪತ್ತೆಯಾಗಿಲ್ಲ, ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಮರುಸಂಪರ್ಕಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ."</string> <string name="saved_network" msgid="4352716707126620811">"<xliff:g id="NAME">%1$s</xliff:g> ರಿಂದ ಉಳಿಸಲಾಗಿದೆ"</string> <string name="connected_via_wfa" msgid="3805736726317410714">"Wi‑Fi ಸಹಾಯಕದ ಮೂಲಕ ಸಂಪರ್ಕಿತಗೊಳಿಸಲಾಗಿದೆ"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s ಮೂಲಕ ಸಂಪರ್ಕಗೊಂಡಿದೆ"</string> @@ -96,7 +93,7 @@ <string name="tether_settings_title_all" msgid="8356136101061143841">"ಟೆಥರಿಂಗ್ & ಪೋರ್ಟಬಲ್ ಹಾಟ್ಸ್ಪಾಟ್"</string> <string name="managed_user_title" msgid="8109605045406748842">"ಎಲ್ಲ ಕೆಲಸದ ಅಪ್ಲಿಕೇಶನ್ಗಳು"</string> <string name="user_guest" msgid="8475274842845401871">"ಅತಿಥಿ"</string> - <string name="unknown" msgid="1592123443519355854">"ಅಪರಿಚಿತ"</string> + <string name="unknown" msgid="1592123443519355854">"ಅಜ್ಞಾತ"</string> <string name="running_process_item_user_label" msgid="3129887865552025943">"ಬಳಕೆದಾರ: <xliff:g id="USER_NAME">%1$s</xliff:g>"</string> <string name="launch_defaults_some" msgid="313159469856372621">"ಕೆಲವು ಡೀಫಾಲ್ಟ್ಗಳನ್ನು ಹೊಂದಿಸಲಾಗಿದೆ"</string> <string name="launch_defaults_none" msgid="4241129108140034876">"ಡೀಫಾಲ್ಟ್ಗಳನ್ನು ಹೊಂದಿಸಲಾಗಿಲ್ಲ"</string> @@ -315,7 +312,7 @@ <string name="power_charging_duration_usb_short" msgid="941854728040426399">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$s</xliff:g>"</string> <string name="power_charging_duration_wireless" msgid="1829295708243159464">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$s</xliff:g> ವೈರ್ಲೆಸ್ನಿಂದ ಪೂರ್ಣವಾಗುವವರೆಗೆ"</string> <string name="power_charging_duration_wireless_short" msgid="1642664799869599476">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$s</xliff:g>"</string> - <string name="battery_info_status_unknown" msgid="196130600938058547">"ಅಪರಿಚಿತ"</string> + <string name="battery_info_status_unknown" msgid="196130600938058547">"ಅಜ್ಞಾತ"</string> <string name="battery_info_status_charging" msgid="1705179948350365604">"ಚಾರ್ಜ್ ಆಗುತ್ತಿದೆ"</string> <string name="battery_info_status_charging_ac" msgid="2909861890674399949">"AC ನಲ್ಲಿ ಚಾರ್ಜ್"</string> <string name="battery_info_status_charging_ac_short" msgid="7431401092096415502">"ಚಾರ್ಜ್ ಆಗುತ್ತಿದೆ"</string> @@ -343,6 +340,5 @@ <string name="screen_zoom_summary_very_large" msgid="7108563375663670067">"ಸ್ವಲ್ಪ ದೊಡ್ಡ"</string> <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"ದೊಡ್ಡ"</string> <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"ಕಸ್ಟಮ್ (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string> - <string name="help_feedback_label" msgid="6815040660801785649">"ಸಹಾಯ ಮತ್ತು ಪ್ರತಿಕ್ರಿಯೆ"</string> - <string name="content_description_menu_button" msgid="8182594799812351266">"ಮೆನು"</string> + <string name="help_feedback_label" msgid="6815040660801785649">"ಸಹಾಯ & ಪ್ರತಿಕ್ರಿಯೆ"</string> </resources> diff --git a/packages/SettingsLib/res/values-ko/strings.xml b/packages/SettingsLib/res/values-ko/strings.xml index e33b989ee26b..aaf34631b7fb 100644 --- a/packages/SettingsLib/res/values-ko/strings.xml +++ b/packages/SettingsLib/res/values-ko/strings.xml @@ -28,10 +28,7 @@ <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Wi-Fi 연결 실패"</string> <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"인증 문제"</string> <string name="wifi_not_in_range" msgid="1136191511238508967">"범위 내에 없음"</string> - <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) --> - <skip /> - <!-- no translation found for wifi_no_internet (5011955173375805204) --> - <skip /> + <string name="wifi_no_internet" msgid="9151470775868728896">"감지된 인터넷 액세스가 없으며 자동으로 다시 연결되지 않습니다."</string> <string name="saved_network" msgid="4352716707126620811">"<xliff:g id="NAME">%1$s</xliff:g>(으)로 저장됨"</string> <string name="connected_via_wfa" msgid="3805736726317410714">"Wi‑Fi 도우미를 통해 연결됨"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s을(를) 통해 연결됨"</string> @@ -343,6 +340,5 @@ <string name="screen_zoom_summary_very_large" msgid="7108563375663670067">"더 크게"</string> <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"가장 크게"</string> <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"맞춤(<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string> - <string name="help_feedback_label" msgid="6815040660801785649">"고객센터"</string> - <string name="content_description_menu_button" msgid="8182594799812351266">"메뉴"</string> + <string name="help_feedback_label" msgid="6815040660801785649">"도움말 및 의견"</string> </resources> diff --git a/packages/SettingsLib/res/values-ky-rKG/strings.xml b/packages/SettingsLib/res/values-ky-rKG/strings.xml index 22622dd009fc..96c1ec024aa6 100644 --- a/packages/SettingsLib/res/values-ky-rKG/strings.xml +++ b/packages/SettingsLib/res/values-ky-rKG/strings.xml @@ -28,10 +28,7 @@ <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"WiFi туташуусу бузулду"</string> <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Аутентификация маселеси бар"</string> <string name="wifi_not_in_range" msgid="1136191511238508967">"Тейлөө аймагында эмес"</string> - <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) --> - <skip /> - <!-- no translation found for wifi_no_internet (5011955173375805204) --> - <skip /> + <string name="wifi_no_internet" msgid="9151470775868728896">"Интернетке кирүү мүмкүнчүлүгү табылган жок, андыктан автоматтык түрдө кайра туташпайт."</string> <string name="saved_network" msgid="4352716707126620811">"<xliff:g id="NAME">%1$s</xliff:g> тарабынан сакталды"</string> <string name="connected_via_wfa" msgid="3805736726317410714">"Wi‑Fi жардамчысы аркылуу туташып турат"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s аркылуу жеткиликтүү"</string> @@ -344,5 +341,4 @@ <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Эң чоң"</string> <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Ыңгайлаштырылган (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string> <string name="help_feedback_label" msgid="6815040660801785649">"Жардам жана жооп пикир"</string> - <string name="content_description_menu_button" msgid="8182594799812351266">"Меню"</string> </resources> diff --git a/packages/SettingsLib/res/values-lo-rLA/strings.xml b/packages/SettingsLib/res/values-lo-rLA/strings.xml index 716ee6fe3a57..24f0c16c4962 100644 --- a/packages/SettingsLib/res/values-lo-rLA/strings.xml +++ b/packages/SettingsLib/res/values-lo-rLA/strings.xml @@ -28,10 +28,7 @@ <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"ການເຊື່ອມຕໍ່ WiFi ລົ້ມເຫຼວ"</string> <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"ບັນຫາການພິສູດຢືນຢັນ"</string> <string name="wifi_not_in_range" msgid="1136191511238508967">"ບໍ່ຢູ່ໃນໄລຍະທີ່ເຊື່ອມຕໍ່ໄດ້"</string> - <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) --> - <skip /> - <!-- no translation found for wifi_no_internet (5011955173375805204) --> - <skip /> + <string name="wifi_no_internet" msgid="9151470775868728896">"ບໍ່ພົບການເຊື່ອມຕໍ່ອິນເຕີເນັດ, ຈະບໍ່ຖືກເຊື່ອມຕໍ່ໃໝ່ໂດຍອັດຕະໂນມັດ."</string> <string name="saved_network" msgid="4352716707126620811">"ບັນທຶກໂດຍ <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="connected_via_wfa" msgid="3805736726317410714">"ເຊື່ອມຕໍ່ຜ່ານ Wi‑Fi ຕົວຊ່ວຍແລ້ວ"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"ເຊື່ອມຕໍ່ຜ່ານ %1$s ແລ້ວ"</string> @@ -344,5 +341,4 @@ <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"ໃຫຍ່ທີ່ສຸດ"</string> <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"ປັບແຕ່ງເອງ (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string> <string name="help_feedback_label" msgid="6815040660801785649">"ຊ່ວຍເຫຼືອ & ຄຳຕິຊົມ"</string> - <string name="content_description_menu_button" msgid="8182594799812351266">"ເມນູ"</string> </resources> diff --git a/packages/SettingsLib/res/values-lt/strings.xml b/packages/SettingsLib/res/values-lt/strings.xml index 167e7568be37..4b8890d04d33 100644 --- a/packages/SettingsLib/res/values-lt/strings.xml +++ b/packages/SettingsLib/res/values-lt/strings.xml @@ -28,10 +28,7 @@ <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"„Wi-Fi“ ryšio triktis"</string> <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Autentifikavimo problema"</string> <string name="wifi_not_in_range" msgid="1136191511238508967">"Ne diapazone"</string> - <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) --> - <skip /> - <!-- no translation found for wifi_no_internet (5011955173375805204) --> - <skip /> + <string name="wifi_no_internet" msgid="9151470775868728896">"Neaptikta jokia prieiga prie interneto, nebus automatiškai iš naujo prisijungta."</string> <string name="saved_network" msgid="4352716707126620811">"Išsaugojo <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="connected_via_wfa" msgid="3805736726317410714">"Prisijungta naudojant „Wi‑Fi“ pagelbiklį"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Prisijungta naudojant „%1$s“"</string> @@ -344,5 +341,4 @@ <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Didžiausias"</string> <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Tinkintas (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string> <string name="help_feedback_label" msgid="6815040660801785649">"Pagalba ir atsiliepimai"</string> - <string name="content_description_menu_button" msgid="8182594799812351266">"Meniu"</string> </resources> diff --git a/packages/SettingsLib/res/values-lv/strings.xml b/packages/SettingsLib/res/values-lv/strings.xml index 7f5e111a741f..4d76adc3e291 100644 --- a/packages/SettingsLib/res/values-lv/strings.xml +++ b/packages/SettingsLib/res/values-lv/strings.xml @@ -28,10 +28,7 @@ <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Wi-Fi savienojuma kļūme"</string> <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Autentificēšanas problēma"</string> <string name="wifi_not_in_range" msgid="1136191511238508967">"Nav diapazona ietvaros"</string> - <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) --> - <skip /> - <!-- no translation found for wifi_no_internet (5011955173375805204) --> - <skip /> + <string name="wifi_no_internet" msgid="9151470775868728896">"Nevar noteikt interneta savienojumu. Savienojums netiks izveidots vēlreiz automātiski."</string> <string name="saved_network" msgid="4352716707126620811">"Saglabāja: <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="connected_via_wfa" msgid="3805736726317410714">"Izveidots savienojums ar Wi‑Fi palīgu"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Savienots, izmantojot %1$s"</string> @@ -344,5 +341,4 @@ <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Vislielākais"</string> <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Pielāgots (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string> <string name="help_feedback_label" msgid="6815040660801785649">"Palīdzība un atsauksmes"</string> - <string name="content_description_menu_button" msgid="8182594799812351266">"Izvēlne"</string> </resources> diff --git a/packages/SettingsLib/res/values-mk-rMK/strings.xml b/packages/SettingsLib/res/values-mk-rMK/strings.xml index 2a454d228257..953360a7aa00 100644 --- a/packages/SettingsLib/res/values-mk-rMK/strings.xml +++ b/packages/SettingsLib/res/values-mk-rMK/strings.xml @@ -28,10 +28,7 @@ <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Поврзувањето преку Wi-Fi не успеа"</string> <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Проблем со автентикација"</string> <string name="wifi_not_in_range" msgid="1136191511238508967">"Надвор од опсег"</string> - <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) --> - <skip /> - <!-- no translation found for wifi_no_internet (5011955173375805204) --> - <skip /> + <string name="wifi_no_internet" msgid="9151470775868728896">"Не е откриен пристап до интернет, нема автоматски повторно да се поврзете."</string> <string name="saved_network" msgid="4352716707126620811">"Зачувано од <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="connected_via_wfa" msgid="3805736726317410714">"Поврзано преку помошник за Wi-Fismile"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Поврзано преку %1$s"</string> @@ -344,5 +341,4 @@ <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Најголем"</string> <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Приспособен (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string> <string name="help_feedback_label" msgid="6815040660801785649">"Помош и повратни информации"</string> - <string name="content_description_menu_button" msgid="8182594799812351266">"Мени"</string> </resources> diff --git a/packages/SettingsLib/res/values-ml-rIN/strings.xml b/packages/SettingsLib/res/values-ml-rIN/strings.xml index 56d14779322f..92c04487ace2 100644 --- a/packages/SettingsLib/res/values-ml-rIN/strings.xml +++ b/packages/SettingsLib/res/values-ml-rIN/strings.xml @@ -28,10 +28,7 @@ <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"WiFi കണക്ഷൻ പരാജയം"</string> <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"ആധികാരികമാക്കുന്നതിലെ പ്രശ്നം"</string> <string name="wifi_not_in_range" msgid="1136191511238508967">"പരിധിയിലില്ല"</string> - <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) --> - <skip /> - <!-- no translation found for wifi_no_internet (5011955173375805204) --> - <skip /> + <string name="wifi_no_internet" msgid="9151470775868728896">"ഇന്റർനെറ്റ് ആക്സസ്സൊന്നും കണ്ടെത്താത്തതിനാൽ സ്വയം വീണ്ടും കണക്റ്റുചെയ്യില്ല."</string> <string name="saved_network" msgid="4352716707126620811">"<xliff:g id="NAME">%1$s</xliff:g> സംരക്ഷിച്ചത്"</string> <string name="connected_via_wfa" msgid="3805736726317410714">"വൈഫൈ അസിസ്റ്റന്റ് മുഖേന കണക്റ്റുചെയ്തു"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s വഴി ബന്ധിപ്പിച്ചു"</string> @@ -344,5 +341,4 @@ <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"ഏറ്റവും വലുത്"</string> <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"ഇഷ്ടാനുസൃതം ( <xliff:g id="DENSITYDPI">%d</xliff:g> )"</string> <string name="help_feedback_label" msgid="6815040660801785649">"സഹായവും പ്രതികരണവും"</string> - <string name="content_description_menu_button" msgid="8182594799812351266">"മെനു"</string> </resources> diff --git a/packages/SettingsLib/res/values-mn-rMN/strings.xml b/packages/SettingsLib/res/values-mn-rMN/strings.xml index 9848caedf814..4c98c04c07d4 100644 --- a/packages/SettingsLib/res/values-mn-rMN/strings.xml +++ b/packages/SettingsLib/res/values-mn-rMN/strings.xml @@ -28,10 +28,7 @@ <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"WiFi холболт амжилтгүй"</string> <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Гэрчлэлийн асуудал"</string> <string name="wifi_not_in_range" msgid="1136191511238508967">"Хүрээнд байхгүй"</string> - <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) --> - <skip /> - <!-- no translation found for wifi_no_internet (5011955173375805204) --> - <skip /> + <string name="wifi_no_internet" msgid="9151470775868728896">"Интернэт холболт илэрсэнгүй, автоматаар дахин холболт хийгдэхгүй"</string> <string name="saved_network" msgid="4352716707126620811">"<xliff:g id="NAME">%1$s</xliff:g> хадгалсан"</string> <string name="connected_via_wfa" msgid="3805736726317410714">"Wi-Fi туслагчаар дамжуулан холбогдлоо"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s-р холбогдсон"</string> @@ -344,5 +341,4 @@ <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Хамгийн том"</string> <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Тогтмол утга (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string> <string name="help_feedback_label" msgid="6815040660801785649">"Тусламж, санал хүсэлт"</string> - <string name="content_description_menu_button" msgid="8182594799812351266">"Цэс"</string> </resources> diff --git a/packages/SettingsLib/res/values-mr-rIN/strings.xml b/packages/SettingsLib/res/values-mr-rIN/strings.xml index 83ae6634430c..e3a7cc46cd44 100644 --- a/packages/SettingsLib/res/values-mr-rIN/strings.xml +++ b/packages/SettingsLib/res/values-mr-rIN/strings.xml @@ -28,10 +28,7 @@ <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"WiFi कनेक्शन अयशस्वी"</string> <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"प्रमाणीकरण समस्या"</string> <string name="wifi_not_in_range" msgid="1136191511238508967">"परिक्षेत्रामध्ये नाही"</string> - <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) --> - <skip /> - <!-- no translation found for wifi_no_internet (5011955173375805204) --> - <skip /> + <string name="wifi_no_internet" msgid="9151470775868728896">"कोणताही इंटरनेट प्रवेश आढळला नाही, स्वयंचलितपणे रीकनेक्ट करणार नाही."</string> <string name="saved_network" msgid="4352716707126620811">"<xliff:g id="NAME">%1$s</xliff:g> द्वारे जतन केले"</string> <string name="connected_via_wfa" msgid="3805736726317410714">"Wi‑Fi सहाय्यक द्वारे कनेक्ट केले"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s द्वारे कनेक्ट केले"</string> @@ -344,5 +341,4 @@ <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"सर्वात मोठा"</string> <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"सानुकूल करा (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string> <string name="help_feedback_label" msgid="6815040660801785649">"मदत आणि अभिप्राय"</string> - <string name="content_description_menu_button" msgid="8182594799812351266">"मेनू"</string> </resources> diff --git a/packages/SettingsLib/res/values-ms-rMY/strings.xml b/packages/SettingsLib/res/values-ms-rMY/strings.xml index 217d82acef53..a1caa2a94419 100644 --- a/packages/SettingsLib/res/values-ms-rMY/strings.xml +++ b/packages/SettingsLib/res/values-ms-rMY/strings.xml @@ -28,10 +28,7 @@ <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Kegagalan Sambungan WiFi"</string> <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Masalah pengesahan"</string> <string name="wifi_not_in_range" msgid="1136191511238508967">"Tidak dalam liputan"</string> - <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) --> - <skip /> - <!-- no translation found for wifi_no_internet (5011955173375805204) --> - <skip /> + <string name="wifi_no_internet" msgid="9151470775868728896">"Tiada Akses Internet Dikesan, tidak akan menyambung secara automatik."</string> <string name="saved_network" msgid="4352716707126620811">"Diselamatkan oleh <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="connected_via_wfa" msgid="3805736726317410714">"Disambungkan melalui Pembantu Wi-Fi"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Disambungkan melalui %1$s"</string> @@ -344,5 +341,4 @@ <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Terbesar"</string> <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Tersuai (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string> <string name="help_feedback_label" msgid="6815040660801785649">"Bantuan & maklum balas"</string> - <string name="content_description_menu_button" msgid="8182594799812351266">"Menu"</string> </resources> diff --git a/packages/SettingsLib/res/values-my-rMM/strings.xml b/packages/SettingsLib/res/values-my-rMM/strings.xml index fc977a9649df..6a1c33190486 100644 --- a/packages/SettingsLib/res/values-my-rMM/strings.xml +++ b/packages/SettingsLib/res/values-my-rMM/strings.xml @@ -28,10 +28,7 @@ <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"WiFi ချိတ်ဆက်မှု မအောင်မြင်ပါ"</string> <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"စစ်မှန်ကြောင်းအတည်ပြုရန်၌ ပြသနာရှိခြင်း"</string> <string name="wifi_not_in_range" msgid="1136191511238508967">"စက်ကွင်းထဲတွင် မဟုတ်ပါ"</string> - <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) --> - <skip /> - <!-- no translation found for wifi_no_internet (5011955173375805204) --> - <skip /> + <string name="wifi_no_internet" msgid="9151470775868728896">"မည်သည့် အင်တာနက်မျှမရှိပါ၊ အလိုအလျောက် ပြန်လည်မချိတ်ဆက်ပါ။"</string> <string name="saved_network" msgid="4352716707126620811">"<xliff:g id="NAME">%1$s</xliff:g> မှသိမ်းဆည်းခဲ့သည်"</string> <string name="connected_via_wfa" msgid="3805736726317410714">"ကြိုးမဲ့ကူညီသူမှတဆင့် ချိတ်ဆက်၏"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s မှတစ်ဆင့် ချိတ်ဆက်ထားသည်"</string> @@ -344,5 +341,4 @@ <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"အကြီးဆုံး"</string> <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"စိတ်ကြိုက် (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string> <string name="help_feedback_label" msgid="6815040660801785649">"အကူအညီနှင့် အကြံပြုချက်"</string> - <string name="content_description_menu_button" msgid="8182594799812351266">"မီနူး"</string> </resources> diff --git a/packages/SettingsLib/res/values-nb/strings.xml b/packages/SettingsLib/res/values-nb/strings.xml index bd6ae05766d0..5d8ae55fb592 100644 --- a/packages/SettingsLib/res/values-nb/strings.xml +++ b/packages/SettingsLib/res/values-nb/strings.xml @@ -28,10 +28,7 @@ <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Wi-Fi-tilkoblingsfeil"</string> <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Autentiseringsproblem"</string> <string name="wifi_not_in_range" msgid="1136191511238508967">"Utenfor område"</string> - <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) --> - <skip /> - <!-- no translation found for wifi_no_internet (5011955173375805204) --> - <skip /> + <string name="wifi_no_internet" msgid="9151470775868728896">"Ingen Internett-tilgang ble funnet. Kan ikke koble til på nytt automatisk."</string> <string name="saved_network" msgid="4352716707126620811">"Lagret av <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="connected_via_wfa" msgid="3805736726317410714">"Koblet til via en Wi-Fi-assistent"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Tilkoblet via %1$s"</string> @@ -344,5 +341,4 @@ <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Størst"</string> <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Egendefinert (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string> <string name="help_feedback_label" msgid="6815040660801785649">"Hjelp og tilbakemelding"</string> - <string name="content_description_menu_button" msgid="8182594799812351266">"Meny"</string> </resources> diff --git a/packages/SettingsLib/res/values-ne-rNP/strings.xml b/packages/SettingsLib/res/values-ne-rNP/strings.xml index c671f90fca9c..15cc8ea87c72 100644 --- a/packages/SettingsLib/res/values-ne-rNP/strings.xml +++ b/packages/SettingsLib/res/values-ne-rNP/strings.xml @@ -28,10 +28,7 @@ <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"वाईफाई जडान असफल"</string> <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"प्रमाणीकरण समस्या"</string> <string name="wifi_not_in_range" msgid="1136191511238508967">"दायराभित्र छैन"</string> - <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) --> - <skip /> - <!-- no translation found for wifi_no_internet (5011955173375805204) --> - <skip /> + <string name="wifi_no_internet" msgid="9151470775868728896">"कुनै इन्टरनेट पहुँच पाईएन, स्वचालित रूपमा पुन: जडान छैन।"</string> <string name="saved_network" msgid="4352716707126620811">"<xliff:g id="NAME">%1$s</xliff:g> द्वारा सुरक्षित गरियो"</string> <string name="connected_via_wfa" msgid="3805736726317410714">"Wi-Fi सहायक द्वारा जोडिएको"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s मार्फत जडित"</string> @@ -344,5 +341,4 @@ <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"सबैभन्दा ठूलो"</string> <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"अनुकूलन (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string> <string name="help_feedback_label" msgid="6815040660801785649">"मद्दत र प्रतिक्रिया"</string> - <string name="content_description_menu_button" msgid="8182594799812351266">"मेनु"</string> </resources> diff --git a/packages/SettingsLib/res/values-nl/strings.xml b/packages/SettingsLib/res/values-nl/strings.xml index 330eb3072cd4..12bdb4f30c06 100644 --- a/packages/SettingsLib/res/values-nl/strings.xml +++ b/packages/SettingsLib/res/values-nl/strings.xml @@ -28,10 +28,7 @@ <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Wifi-verbinding mislukt"</string> <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Authenticatieprobleem"</string> <string name="wifi_not_in_range" msgid="1136191511238508967">"Niet binnen bereik"</string> - <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) --> - <skip /> - <!-- no translation found for wifi_no_internet (5011955173375805204) --> - <skip /> + <string name="wifi_no_internet" msgid="9151470775868728896">"Geen internettoegang gevonden. Er wordt niet automatisch opnieuw verbinding gemaakt."</string> <string name="saved_network" msgid="4352716707126620811">"Opgeslagen door <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="connected_via_wfa" msgid="3805736726317410714">"Verbonden via wifi-assistent"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Verbonden via %1$s"</string> @@ -344,5 +341,4 @@ <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Grootst"</string> <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Aangepast (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string> <string name="help_feedback_label" msgid="6815040660801785649">"Help en feedback"</string> - <string name="content_description_menu_button" msgid="8182594799812351266">"Menu"</string> </resources> diff --git a/packages/SettingsLib/res/values-pa-rIN/strings.xml b/packages/SettingsLib/res/values-pa-rIN/strings.xml index 982602364186..21d11b00cd4b 100644 --- a/packages/SettingsLib/res/values-pa-rIN/strings.xml +++ b/packages/SettingsLib/res/values-pa-rIN/strings.xml @@ -28,10 +28,7 @@ <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"WiFi ਕਨੈਕਸ਼ਨ ਅਸਫਲਤਾ"</string> <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"ਪ੍ਰਮਾਣੀਕਰਨ ਸਮੱਸਿਆ"</string> <string name="wifi_not_in_range" msgid="1136191511238508967">"ਰੇਂਜ ਵਿੱਚ ਨਹੀਂ ਹੈ"</string> - <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) --> - <skip /> - <!-- no translation found for wifi_no_internet (5011955173375805204) --> - <skip /> + <string name="wifi_no_internet" msgid="9151470775868728896">"ਕੋਈ ਇੰਟਰਨੈਟ ਪਹੁੰਚ ਨਹੀਂ ਮਿਲੀ, ਆਟੋਮੈਟਿਕਲੀ ਰੀਕਨੈਕਟ ਨਹੀਂ ਕੀਤਾ ਜਾਏਗਾ।"</string> <string name="saved_network" msgid="4352716707126620811">"<xliff:g id="NAME">%1$s</xliff:g> ਵੱਲੋਂ ਸੁਰੱਖਿਅਤ ਕੀਤਾ"</string> <string name="connected_via_wfa" msgid="3805736726317410714">"Wi‑Fi ਸਹਾਇਕ ਰਾਹੀਂ ਕਨੈਕਟ ਕੀਤਾ"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s ਰਾਹੀਂ ਕਨੈਕਟ ਕੀਤਾ"</string> @@ -344,5 +341,4 @@ <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"ਸਭ ਤੋਂ ਵੱਡਾ"</string> <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"ਵਿਸ਼ੇਸ਼-ਵਿਉਂਤਬੱਧ (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string> <string name="help_feedback_label" msgid="6815040660801785649">"ਮਦਦ ਅਤੇ ਪ੍ਰਤੀਕਰਮ"</string> - <string name="content_description_menu_button" msgid="8182594799812351266">"ਮੀਨੂ"</string> </resources> diff --git a/packages/SettingsLib/res/values-pl/strings.xml b/packages/SettingsLib/res/values-pl/strings.xml index 4dce1a4d0ac5..d5116a2e3d7c 100644 --- a/packages/SettingsLib/res/values-pl/strings.xml +++ b/packages/SettingsLib/res/values-pl/strings.xml @@ -28,10 +28,7 @@ <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Błąd połączenia Wi-Fi"</string> <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Problem z uwierzytelnianiem"</string> <string name="wifi_not_in_range" msgid="1136191511238508967">"Poza zasięgiem"</string> - <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) --> - <skip /> - <!-- no translation found for wifi_no_internet (5011955173375805204) --> - <skip /> + <string name="wifi_no_internet" msgid="9151470775868728896">"Nie wykryto dostępu do internetu. Nie można automatycznie przywrócić połączenia."</string> <string name="saved_network" msgid="4352716707126620811">"Zapisane przez: <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="connected_via_wfa" msgid="3805736726317410714">"Połączono przez Asystenta Wi‑Fi"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Połączono przez %1$s"</string> @@ -344,5 +341,4 @@ <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Największy"</string> <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Niestandardowe (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string> <string name="help_feedback_label" msgid="6815040660801785649">"Pomoc i opinie"</string> - <string name="content_description_menu_button" msgid="8182594799812351266">"Menu"</string> </resources> diff --git a/packages/SettingsLib/res/values-pt-rBR/strings.xml b/packages/SettingsLib/res/values-pt-rBR/strings.xml index 27332f909155..f0cfa23df334 100644 --- a/packages/SettingsLib/res/values-pt-rBR/strings.xml +++ b/packages/SettingsLib/res/values-pt-rBR/strings.xml @@ -28,10 +28,7 @@ <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Falha de conexão Wi-Fi"</string> <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Problema de autenticação"</string> <string name="wifi_not_in_range" msgid="1136191511238508967">"Fora do alcance"</string> - <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) --> - <skip /> - <!-- no translation found for wifi_no_internet (5011955173375805204) --> - <skip /> + <string name="wifi_no_internet" msgid="9151470775868728896">"Nenhum acesso à Internet detectado. O dispositivo não conectará automaticamente."</string> <string name="saved_network" msgid="4352716707126620811">"Salvas por <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="connected_via_wfa" msgid="3805736726317410714">"Conectado via assistente de Wi‑Fi"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Conectado via %1$s"</string> @@ -344,5 +341,4 @@ <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Maior"</string> <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Personalizada (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string> <string name="help_feedback_label" msgid="6815040660801785649">"Ajuda e feedback"</string> - <string name="content_description_menu_button" msgid="8182594799812351266">"Menu"</string> </resources> diff --git a/packages/SettingsLib/res/values-pt-rPT/strings.xml b/packages/SettingsLib/res/values-pt-rPT/strings.xml index c48ccbad5e97..40dfc74806b3 100644 --- a/packages/SettingsLib/res/values-pt-rPT/strings.xml +++ b/packages/SettingsLib/res/values-pt-rPT/strings.xml @@ -28,10 +28,7 @@ <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Falha de ligação Wi-Fi"</string> <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Problema de autenticação"</string> <string name="wifi_not_in_range" msgid="1136191511238508967">"Fora do alcance"</string> - <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) --> - <skip /> - <!-- no translation found for wifi_no_internet (5011955173375805204) --> - <skip /> + <string name="wifi_no_internet" msgid="9151470775868728896">"Nenhum acesso à Internet detetado; não será efetuada uma nova ligação automaticamente."</string> <string name="saved_network" msgid="4352716707126620811">"Guardada por <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="connected_via_wfa" msgid="3805736726317410714">"Ligado através do Assistente de Wi‑Fi"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Ligado através de %1$s"</string> @@ -344,5 +341,4 @@ <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"O maior"</string> <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Personalizado (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string> <string name="help_feedback_label" msgid="6815040660801785649">"Ajuda e comentários"</string> - <string name="content_description_menu_button" msgid="8182594799812351266">"Menu"</string> </resources> diff --git a/packages/SettingsLib/res/values-pt/strings.xml b/packages/SettingsLib/res/values-pt/strings.xml index 27332f909155..f0cfa23df334 100644 --- a/packages/SettingsLib/res/values-pt/strings.xml +++ b/packages/SettingsLib/res/values-pt/strings.xml @@ -28,10 +28,7 @@ <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Falha de conexão Wi-Fi"</string> <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Problema de autenticação"</string> <string name="wifi_not_in_range" msgid="1136191511238508967">"Fora do alcance"</string> - <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) --> - <skip /> - <!-- no translation found for wifi_no_internet (5011955173375805204) --> - <skip /> + <string name="wifi_no_internet" msgid="9151470775868728896">"Nenhum acesso à Internet detectado. O dispositivo não conectará automaticamente."</string> <string name="saved_network" msgid="4352716707126620811">"Salvas por <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="connected_via_wfa" msgid="3805736726317410714">"Conectado via assistente de Wi‑Fi"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Conectado via %1$s"</string> @@ -344,5 +341,4 @@ <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Maior"</string> <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Personalizada (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string> <string name="help_feedback_label" msgid="6815040660801785649">"Ajuda e feedback"</string> - <string name="content_description_menu_button" msgid="8182594799812351266">"Menu"</string> </resources> diff --git a/packages/SettingsLib/res/values-ro/strings.xml b/packages/SettingsLib/res/values-ro/strings.xml index 8458557dfa00..6cc0f87e1b31 100644 --- a/packages/SettingsLib/res/values-ro/strings.xml +++ b/packages/SettingsLib/res/values-ro/strings.xml @@ -28,10 +28,7 @@ <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Eroare de conexiune Wi-Fi"</string> <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Problemă la autentificare"</string> <string name="wifi_not_in_range" msgid="1136191511238508967">"În afara ariei de acoperire"</string> - <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) --> - <skip /> - <!-- no translation found for wifi_no_internet (5011955173375805204) --> - <skip /> + <string name="wifi_no_internet" msgid="9151470775868728896">"Nu s-a detectat acces la internet, nu se va efectua reconectarea automată."</string> <string name="saved_network" msgid="4352716707126620811">"Salvată de <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="connected_via_wfa" msgid="3805736726317410714">"Conexiune realizată printr-un asistent Wi-Fi"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Conectată prin %1$s"</string> @@ -344,5 +341,4 @@ <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Cel mai mare"</string> <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Personalizat (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string> <string name="help_feedback_label" msgid="6815040660801785649">"Ajutor și feedback"</string> - <string name="content_description_menu_button" msgid="8182594799812351266">"Meniu"</string> </resources> diff --git a/packages/SettingsLib/res/values-ru/strings.xml b/packages/SettingsLib/res/values-ru/strings.xml index a89c5536de3c..ad4db89418b3 100644 --- a/packages/SettingsLib/res/values-ru/strings.xml +++ b/packages/SettingsLib/res/values-ru/strings.xml @@ -28,16 +28,13 @@ <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Ошибка подключения Wi-Fi"</string> <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Ошибка аутентификации"</string> <string name="wifi_not_in_range" msgid="1136191511238508967">"Недоступна"</string> - <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) --> - <skip /> - <!-- no translation found for wifi_no_internet (5011955173375805204) --> - <skip /> + <string name="wifi_no_internet" msgid="9151470775868728896">"Подключение к Интернету отсутствует и не будет восстановлено автоматически."</string> <string name="saved_network" msgid="4352716707126620811">"Кто сохранил: <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="connected_via_wfa" msgid="3805736726317410714">"Установлено подключение через Ассистента Wi-Fi"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Подключено к %1$s"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Доступно через %1$s"</string> <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Подключено, без Интернета"</string> - <string name="bluetooth_disconnected" msgid="6557104142667339895">"Нет подключения"</string> + <string name="bluetooth_disconnected" msgid="6557104142667339895">"Отключено"</string> <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Отключение..."</string> <string name="bluetooth_connecting" msgid="8555009514614320497">"Подключение..."</string> <string name="bluetooth_connected" msgid="6038755206916626419">"Подключено"</string> @@ -344,5 +341,4 @@ <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Максимальный"</string> <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Другой (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string> <string name="help_feedback_label" msgid="6815040660801785649">"Справка/отзыв"</string> - <string name="content_description_menu_button" msgid="8182594799812351266">"Меню"</string> </resources> diff --git a/packages/SettingsLib/res/values-si-rLK/strings.xml b/packages/SettingsLib/res/values-si-rLK/strings.xml index c8a0bad22bc1..5efb4001a638 100644 --- a/packages/SettingsLib/res/values-si-rLK/strings.xml +++ b/packages/SettingsLib/res/values-si-rLK/strings.xml @@ -28,10 +28,7 @@ <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"WiFi සම්බන්ධතාව අසාර්ථකයි"</string> <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"සත්යාපනයේ ගැටලුවකි"</string> <string name="wifi_not_in_range" msgid="1136191511238508967">"පරාසයේ නැත"</string> - <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) --> - <skip /> - <!-- no translation found for wifi_no_internet (5011955173375805204) --> - <skip /> + <string name="wifi_no_internet" msgid="9151470775868728896">"අන්තර්ජාල ප්රවේශය අනාවරණය වුයේ නැත, ස්වයංක්රිය නැවත සම්බන්ධ වීම වූ නැත"</string> <string name="saved_network" msgid="4352716707126620811">"<xliff:g id="NAME">%1$s</xliff:g> විසින් සුරකින ලදී"</string> <string name="connected_via_wfa" msgid="3805736726317410714">"Wi‑Fi සහායක හරහා සම්බන්ධ කරන ලදි"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s හරහා සම්බන්ධ විය"</string> @@ -344,5 +341,4 @@ <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"විශාලතම"</string> <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"අභිරුචි (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string> <string name="help_feedback_label" msgid="6815040660801785649">"උදව් සහ ප්රතිපෝෂණ"</string> - <string name="content_description_menu_button" msgid="8182594799812351266">"මෙනුව"</string> </resources> diff --git a/packages/SettingsLib/res/values-sk/strings.xml b/packages/SettingsLib/res/values-sk/strings.xml index 958bae645f51..7a7e3d49d12d 100644 --- a/packages/SettingsLib/res/values-sk/strings.xml +++ b/packages/SettingsLib/res/values-sk/strings.xml @@ -28,10 +28,7 @@ <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Zlyhanie pripojenia Wi-Fi"</string> <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Problém s overením totožnosti"</string> <string name="wifi_not_in_range" msgid="1136191511238508967">"Mimo dosah"</string> - <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) --> - <skip /> - <!-- no translation found for wifi_no_internet (5011955173375805204) --> - <skip /> + <string name="wifi_no_internet" msgid="9151470775868728896">"Nenašiel sa žiadny prístup k internetu, preto nedôjde k automatickému opätovnému pripojeniu"</string> <string name="saved_network" msgid="4352716707126620811">"Uložil(a) <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="connected_via_wfa" msgid="3805736726317410714">"Pripojené pomocou Asistenta Wi-Fi"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Pripojené prostredníctvom %1$s"</string> @@ -176,8 +173,8 @@ <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Zvýšiť úroveň denníkov Wi-Fi, zobrazovať podľa SSID RSSI pri výbere siete Wi-Fi"</string> <string name="wifi_aggressive_handover_summary" msgid="6328455667642570371">"Keď túto možnosť zapnete, Wi-Fi bude agresívnejšie odovzdávať dát. pripoj. na mob. sieť vtedy, keď bude slabý signál Wi-Fi"</string> <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"Povoliť alebo zakázať funkciu Wifi Roam Scans na základe objemu prenosu údajov v rozhraní"</string> - <string name="select_logd_size_title" msgid="7433137108348553508">"Vyrovnávacia pamäť nástroja denníkov"</string> - <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"Veľkosť vyrovnávacej pamäte nástroja denníkov"</string> + <string name="select_logd_size_title" msgid="7433137108348553508">"Veľkosti vyrovnávacej pamäte denníka"</string> + <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"Veľkosť na vyrovnávaciu pamäť nástroja denníkov"</string> <string name="dev_logpersist_clear_warning_title" msgid="684806692440237967">"Vymazať trvalé úložisko zapisovača do denníka?"</string> <string name="dev_logpersist_clear_warning_message" msgid="2256582531342994562">"Keď prestaneme monitorovať pomocou trvalého zapisovača do denníka, musíme vymazať jeho dáta, ktoré sa nachádzajú vo vašom zariadení."</string> <string name="select_logpersist_title" msgid="7530031344550073166">"Natrvalo ukladať dáta zapisovača do denníka na zariadení"</string> @@ -189,8 +186,8 @@ <string name="debug_view_attributes" msgid="6485448367803310384">"Kontrola atribútov zobrazenia"</string> <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Vždy ponechávať mobilné dáta aktívne, dokonca aj pri aktívnej sieti Wi‑Fi (na rýchle prepínanie sietí)"</string> <string name="adb_warning_title" msgid="6234463310896563253">"Povoliť ladenie cez USB?"</string> - <string name="adb_warning_message" msgid="7316799925425402244">"Ladenie cez USB je určené iba na účely vývoja. Možno ho použiť na kopírovanie dát medzi počítačom a zariadením, inštaláciu aplikácií do zariadenia bez upozornenia a čítanie dát denníka."</string> - <string name="adb_keys_warning_message" msgid="5659849457135841625">"Chcete všetkým v minulosti autorizovaným počítačom odvolať prístup k ladeniu cez USB?"</string> + <string name="adb_warning_message" msgid="7316799925425402244">"Ladenie prostredníctvom USB je určené iba na účely vývoja. Použite ho na kopírovanie dát medzi počítačom a zariadením, inštaláciu aplikácií do zariadenia bez upozornenia a čítanie údajov denníka."</string> + <string name="adb_keys_warning_message" msgid="5659849457135841625">"Chcete odvolať prístup k ladeniu cez USB zo všetkých počítačov, ktoré ste predtým autorizovali?"</string> <string name="dev_settings_warning_title" msgid="7244607768088540165">"Povoliť nastavenia pre vývojárov?"</string> <string name="dev_settings_warning_message" msgid="2298337781139097964">"Tieto nastavenia sú určené len pre vývojárov. Môžu spôsobiť poruchu alebo nesprávne fungovanie zariadenia a nainštalovaných aplikácií."</string> <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Overovať aplikácie z USB"</string> @@ -344,5 +341,4 @@ <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Najväčšie"</string> <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Vlastné (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string> <string name="help_feedback_label" msgid="6815040660801785649">"Pomocník a spätná väzba"</string> - <string name="content_description_menu_button" msgid="8182594799812351266">"Ponuka"</string> </resources> diff --git a/packages/SettingsLib/res/values-sl/strings.xml b/packages/SettingsLib/res/values-sl/strings.xml index d4ad8022e34c..10bff6e038a9 100644 --- a/packages/SettingsLib/res/values-sl/strings.xml +++ b/packages/SettingsLib/res/values-sl/strings.xml @@ -28,10 +28,7 @@ <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Povezava prek Wi-Fi-ja ni uspela"</string> <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Težava s preverjanjem pristnosti"</string> <string name="wifi_not_in_range" msgid="1136191511238508967">"Ni v obsegu"</string> - <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) --> - <skip /> - <!-- no translation found for wifi_no_internet (5011955173375805204) --> - <skip /> + <string name="wifi_no_internet" msgid="9151470775868728896">"Ni zaznanega dostopa do interneta; samodejna vnovična vzpostavitev povezave se ne bo izvedla."</string> <string name="saved_network" msgid="4352716707126620811">"Shranil(-a): <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="connected_via_wfa" msgid="3805736726317410714">"Povezava vzpostavljena prek pomočnika za Wi-Fi"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Vzpostavljena povezava prek: %1$s"</string> @@ -344,5 +341,4 @@ <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Največje"</string> <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Po meri (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string> <string name="help_feedback_label" msgid="6815040660801785649">"Pomoč in povratne informacije"</string> - <string name="content_description_menu_button" msgid="8182594799812351266">"Meni"</string> </resources> diff --git a/packages/SettingsLib/res/values-sq-rAL/strings.xml b/packages/SettingsLib/res/values-sq-rAL/strings.xml index ba5d2833c71f..e4f0eaa29596 100644 --- a/packages/SettingsLib/res/values-sq-rAL/strings.xml +++ b/packages/SettingsLib/res/values-sq-rAL/strings.xml @@ -28,10 +28,7 @@ <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Dështim i lidhjes WiFi"</string> <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Problem me vërtetimin"</string> <string name="wifi_not_in_range" msgid="1136191511238508967">"Nuk është brenda rrezes"</string> - <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) --> - <skip /> - <!-- no translation found for wifi_no_internet (5011955173375805204) --> - <skip /> + <string name="wifi_no_internet" msgid="9151470775868728896">"Nuk u diktua qasje në internet. Lidhja nuk do të realizohet automatikisht."</string> <string name="saved_network" msgid="4352716707126620811">"E ruajtur nga <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="connected_via_wfa" msgid="3805736726317410714">"I lidhur nëpërmjet ndihmësit të Wi‑Fi"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"E lidhur përmes %1$s"</string> @@ -344,5 +341,4 @@ <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Më i madhi"</string> <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"I personalizuar (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string> <string name="help_feedback_label" msgid="6815040660801785649">"Ndihma dhe komentet"</string> - <string name="content_description_menu_button" msgid="8182594799812351266">"Menyja"</string> </resources> diff --git a/packages/SettingsLib/res/values-sr/strings.xml b/packages/SettingsLib/res/values-sr/strings.xml index b04a4c2a1e53..fba58c50211c 100644 --- a/packages/SettingsLib/res/values-sr/strings.xml +++ b/packages/SettingsLib/res/values-sr/strings.xml @@ -28,10 +28,7 @@ <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Wi-Fi веза је отказала"</string> <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Проблем са потврдом аутентичности"</string> <string name="wifi_not_in_range" msgid="1136191511238508967">"Није у опсегу"</string> - <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) --> - <skip /> - <!-- no translation found for wifi_no_internet (5011955173375805204) --> - <skip /> + <string name="wifi_no_internet" msgid="9151470775868728896">"Приступ интернету није откривен, аутоматско повезивање није могуће."</string> <string name="saved_network" msgid="4352716707126620811">"Сачувао/ла је <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="connected_via_wfa" msgid="3805736726317410714">"Повезано преко Wi‑Fi помоћника"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Веза је успостављена преко приступне тачке %1$s"</string> @@ -344,5 +341,4 @@ <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Највећи"</string> <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Прилагођени (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string> <string name="help_feedback_label" msgid="6815040660801785649">"Помоћ и повратне информације"</string> - <string name="content_description_menu_button" msgid="8182594799812351266">"Мени"</string> </resources> diff --git a/packages/SettingsLib/res/values-sv/strings.xml b/packages/SettingsLib/res/values-sv/strings.xml index 7562ee08606a..ecc728a81eec 100644 --- a/packages/SettingsLib/res/values-sv/strings.xml +++ b/packages/SettingsLib/res/values-sv/strings.xml @@ -28,10 +28,7 @@ <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Wi-Fi-anslutningsfel"</string> <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Autentiseringsproblem"</string> <string name="wifi_not_in_range" msgid="1136191511238508967">"Utom räckhåll"</string> - <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) --> - <skip /> - <!-- no translation found for wifi_no_internet (5011955173375805204) --> - <skip /> + <string name="wifi_no_internet" msgid="9151470775868728896">"Ingen internetåtkomst hittades. Det går inte att återansluta automatiskt."</string> <string name="saved_network" msgid="4352716707126620811">"Sparades av <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="connected_via_wfa" msgid="3805736726317410714">"Ansluten via Wi-Fi-assistent"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Anslutet via %1$s"</string> @@ -344,5 +341,4 @@ <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Störst"</string> <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Anpassad (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string> <string name="help_feedback_label" msgid="6815040660801785649">"Hjälp och feedback"</string> - <string name="content_description_menu_button" msgid="8182594799812351266">"Meny"</string> </resources> diff --git a/packages/SettingsLib/res/values-sw/strings.xml b/packages/SettingsLib/res/values-sw/strings.xml index 9e64b9169a27..435a1bdd99be 100644 --- a/packages/SettingsLib/res/values-sw/strings.xml +++ b/packages/SettingsLib/res/values-sw/strings.xml @@ -28,10 +28,7 @@ <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Haikuweza Kuunganisha kwenye WiFi"</string> <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Tatizo la uthibitishaji"</string> <string name="wifi_not_in_range" msgid="1136191511238508967">"Haiko karibu"</string> - <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) --> - <skip /> - <!-- no translation found for wifi_no_internet (5011955173375805204) --> - <skip /> + <string name="wifi_no_internet" msgid="9151470775868728896">"Hakuna Ufikiaji kwa Intaneti Uliogunduliwa, haitaweza kuunganisha kiotomatiki."</string> <string name="saved_network" msgid="4352716707126620811">"Ilihifadhiwa na <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="connected_via_wfa" msgid="3805736726317410714">"Imeunganishwa kupitia Kisaidizi cha Wi-Fi"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Imeunganishwa kupitia %1$s"</string> @@ -344,5 +341,4 @@ <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Kubwa zaidi"</string> <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Kiwango maalum (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string> <string name="help_feedback_label" msgid="6815040660801785649">"Usaidizi na maoni"</string> - <string name="content_description_menu_button" msgid="8182594799812351266">"Menyu"</string> </resources> diff --git a/packages/SettingsLib/res/values-ta-rIN/strings.xml b/packages/SettingsLib/res/values-ta-rIN/strings.xml index b9ff6bc9f2dc..033955c77e91 100644 --- a/packages/SettingsLib/res/values-ta-rIN/strings.xml +++ b/packages/SettingsLib/res/values-ta-rIN/strings.xml @@ -28,10 +28,7 @@ <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"வைஃபை இணைப்பில் தோல்வி"</string> <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"அங்கீகரிப்புச் சிக்கல்"</string> <string name="wifi_not_in_range" msgid="1136191511238508967">"தொடர்பு எல்லையில் இல்லை"</string> - <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) --> - <skip /> - <!-- no translation found for wifi_no_internet (5011955173375805204) --> - <skip /> + <string name="wifi_no_internet" msgid="9151470775868728896">"இணைய அணுகல் இல்லை, மீண்டும் தானாக இணையாது."</string> <string name="saved_network" msgid="4352716707126620811">"<xliff:g id="NAME">%1$s</xliff:g> சேமித்தது"</string> <string name="connected_via_wfa" msgid="3805736726317410714">"வைஃபை அசிஸ்டண்ட் மூலம் இணைக்கப்பட்டது"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s வழியாக இணைக்கப்பட்டது"</string> @@ -344,5 +341,4 @@ <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"மிகப் பெரியது"</string> <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"தனிப்பயன் (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string> <string name="help_feedback_label" msgid="6815040660801785649">"உதவி & கருத்து"</string> - <string name="content_description_menu_button" msgid="8182594799812351266">"மெனு"</string> </resources> diff --git a/packages/SettingsLib/res/values-te-rIN/strings.xml b/packages/SettingsLib/res/values-te-rIN/strings.xml index 08bcbdaef593..57581765ae4e 100644 --- a/packages/SettingsLib/res/values-te-rIN/strings.xml +++ b/packages/SettingsLib/res/values-te-rIN/strings.xml @@ -28,10 +28,7 @@ <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"WiFi కనెక్షన్ వైఫల్యం"</string> <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"ప్రామాణీకరణ సమస్య"</string> <string name="wifi_not_in_range" msgid="1136191511238508967">"పరిధిలో లేదు"</string> - <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) --> - <skip /> - <!-- no translation found for wifi_no_internet (5011955173375805204) --> - <skip /> + <string name="wifi_no_internet" msgid="9151470775868728896">"ఇంటర్నెట్ ప్రాప్యత కనుగొనబడలేదు, స్వయంచాలకంగా మళ్లీ కనెక్ట్ చేయబడదు."</string> <string name="saved_network" msgid="4352716707126620811">"<xliff:g id="NAME">%1$s</xliff:g> ద్వారా సేవ్ చేయబడింది"</string> <string name="connected_via_wfa" msgid="3805736726317410714">"Wi‑Fi సహాయకం ద్వారా కనెక్ట్ చేయబడింది"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s ద్వారా కనెక్ట్ చేయబడింది"</string> @@ -344,5 +341,4 @@ <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"అతి పెద్దగా"</string> <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"అనుకూలం (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string> <string name="help_feedback_label" msgid="6815040660801785649">"సహాయం & అభిప్రాయం"</string> - <string name="content_description_menu_button" msgid="8182594799812351266">"మెను"</string> </resources> diff --git a/packages/SettingsLib/res/values-th/strings.xml b/packages/SettingsLib/res/values-th/strings.xml index bd9d8d52f40f..4849e1955321 100644 --- a/packages/SettingsLib/res/values-th/strings.xml +++ b/packages/SettingsLib/res/values-th/strings.xml @@ -28,10 +28,7 @@ <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"การเชื่อมต่อ Wi-Fi ล้มเหลว"</string> <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"ปัญหาในการตรวจสอบสิทธิ์"</string> <string name="wifi_not_in_range" msgid="1136191511238508967">"ไม่อยู่ในพื้นที่ให้บริการ"</string> - <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) --> - <skip /> - <!-- no translation found for wifi_no_internet (5011955173375805204) --> - <skip /> + <string name="wifi_no_internet" msgid="9151470775868728896">"ไม่พบการเข้าถึงอินเทอร์เน็ต ระบบจะไม่เชื่อมต่อใหม่โดยอัตโนมัติ"</string> <string name="saved_network" msgid="4352716707126620811">"บันทึกโดย <xliff:g id="NAME">%1$s</xliff:g> แล้ว"</string> <string name="connected_via_wfa" msgid="3805736726317410714">"เชื่อมต่อผ่านตัวช่วย Wi-Fi อยู่"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"เชื่อมต่อผ่าน %1$s แล้ว"</string> @@ -344,5 +341,4 @@ <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"ใหญ่ที่สุด"</string> <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"กำหนดเอง (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string> <string name="help_feedback_label" msgid="6815040660801785649">"ความช่วยเหลือและความคิดเห็น"</string> - <string name="content_description_menu_button" msgid="8182594799812351266">"เมนู"</string> </resources> diff --git a/packages/SettingsLib/res/values-tl/strings.xml b/packages/SettingsLib/res/values-tl/strings.xml index 9c952f594abc..24f5499d4490 100644 --- a/packages/SettingsLib/res/values-tl/strings.xml +++ b/packages/SettingsLib/res/values-tl/strings.xml @@ -28,10 +28,7 @@ <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Pagkabigo ng Koneksyon sa WiFi"</string> <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Problema sa pagpapatotoo"</string> <string name="wifi_not_in_range" msgid="1136191511238508967">"Wala sa sakop"</string> - <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) --> - <skip /> - <!-- no translation found for wifi_no_internet (5011955173375805204) --> - <skip /> + <string name="wifi_no_internet" msgid="9151470775868728896">"Walang Natukoy na Access sa Internet, hindi awtomatikong muling kumonekta."</string> <string name="saved_network" msgid="4352716707126620811">"Na-save ni <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="connected_via_wfa" msgid="3805736726317410714">"Nakakonekta sa pamamagitan ng Wi‑Fi assistant"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Nakakonekta sa pamamagitan ng %1$s"</string> @@ -149,7 +146,7 @@ <string name="vpn_settings_not_available" msgid="956841430176985598">"Hindi available ang mga setting ng VPN para sa user na ito"</string> <string name="tethering_settings_not_available" msgid="6765770438438291012">"Hindi available ang mga setting ng pagte-theter para sa user na ito"</string> <string name="apn_settings_not_available" msgid="7873729032165324000">"Hindi available ang mga setting ng Access Point Name para sa user na ito"</string> - <string name="enable_adb" msgid="7982306934419797485">"Pag-debug ng USB"</string> + <string name="enable_adb" msgid="7982306934419797485">"Pagde-debug ng USB"</string> <string name="enable_adb_summary" msgid="4881186971746056635">"Debug mode kapag nakakonekta ang USB"</string> <string name="clear_adb_keys" msgid="4038889221503122743">"Bawiin ang mga pahintulot sa pag-debug ng USB"</string> <string name="bugreport_in_power" msgid="7923901846375587241">"Shortcut ng ulat sa bug"</string> @@ -189,8 +186,8 @@ <string name="debug_view_attributes" msgid="6485448367803310384">"I-enable ang pagsisiyasat sa attribute na view"</string> <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Palaging panatilihing aktibo ang mobile data, kahit na aktibo ang Wi‑Fi (para sa mabilis na paglipat ng network)."</string> <string name="adb_warning_title" msgid="6234463310896563253">"Payagan ang pag-debug ng USB?"</string> - <string name="adb_warning_message" msgid="7316799925425402244">"Ang pag-debug ng USB ay para lang sa mga layuning pag-develop. Gamitin ito upang kumopya ng data sa pagitan ng iyong computer at iyong device, mag-install ng mga app sa iyong device nang walang notification, at magbasa ng data ng log."</string> - <string name="adb_keys_warning_message" msgid="5659849457135841625">"Bawiin ang access sa pag-debug ng USB mula sa lahat ng computer na dati mong pinahintulutan?"</string> + <string name="adb_warning_message" msgid="7316799925425402244">"Ang pag-debug ng USB ay nilalayon para sa mga layuning pagpapabuti lamang. Gamitin ito upang kumopya ng data sa pagitan ng iyong computer at iyong device, mag-install ng apps sa iyong device nang walang notification, at magbasa ng data ng log."</string> + <string name="adb_keys_warning_message" msgid="5659849457135841625">"Bawiin ang access sa pagde-debug ng USB mula sa lahat ng computer na dati mong pinahintulutan?"</string> <string name="dev_settings_warning_title" msgid="7244607768088540165">"Payagan ang mga setting ng pag-develop?"</string> <string name="dev_settings_warning_message" msgid="2298337781139097964">"Nilalayon ang mga setting na ito para sa paggamit sa pag-develop lamang. Maaaring magsanhi ang mga ito ng pagkasira o hindi paggana nang maayos ng iyong device at mga application na nandito."</string> <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"I-verify ang mga app sa USB"</string> @@ -344,5 +341,4 @@ <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Pinakamalaki"</string> <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Custom (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string> <string name="help_feedback_label" msgid="6815040660801785649">"Tulong at feedback"</string> - <string name="content_description_menu_button" msgid="8182594799812351266">"Menu"</string> </resources> diff --git a/packages/SettingsLib/res/values-tr/strings.xml b/packages/SettingsLib/res/values-tr/strings.xml index 889b6317d7e8..950e3221ff7c 100644 --- a/packages/SettingsLib/res/values-tr/strings.xml +++ b/packages/SettingsLib/res/values-tr/strings.xml @@ -28,10 +28,7 @@ <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Kablosuz Bağlantı Hatası"</string> <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Kimlik doğrulama sorunu"</string> <string name="wifi_not_in_range" msgid="1136191511238508967">"Kapsama alanı dışında"</string> - <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) --> - <skip /> - <!-- no translation found for wifi_no_internet (5011955173375805204) --> - <skip /> + <string name="wifi_no_internet" msgid="9151470775868728896">"İnternet Erişimi algılanmadı, otomatik olarak tekrar bağlanmayacak."</string> <string name="saved_network" msgid="4352716707126620811">"<xliff:g id="NAME">%1$s</xliff:g> tarafından kaydedildi"</string> <string name="connected_via_wfa" msgid="3805736726317410714">"Kablosuz bağlantı yardımcısıyla bağlandı"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s üzerinden bağlı"</string> @@ -344,5 +341,4 @@ <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"En büyük"</string> <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Özel (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string> <string name="help_feedback_label" msgid="6815040660801785649">"Yardım ve geri bildirim"</string> - <string name="content_description_menu_button" msgid="8182594799812351266">"Menü"</string> </resources> diff --git a/packages/SettingsLib/res/values-uk/strings.xml b/packages/SettingsLib/res/values-uk/strings.xml index cdf725f17465..6b49b14084e9 100644 --- a/packages/SettingsLib/res/values-uk/strings.xml +++ b/packages/SettingsLib/res/values-uk/strings.xml @@ -28,10 +28,7 @@ <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Помилка з’єднання Wi-Fi"</string> <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Проблема з автентифікацією"</string> <string name="wifi_not_in_range" msgid="1136191511238508967">"Не в діапазоні"</string> - <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) --> - <skip /> - <!-- no translation found for wifi_no_internet (5011955173375805204) --> - <skip /> + <string name="wifi_no_internet" msgid="9151470775868728896">"Немає доступу до Інтернету. Спроба під’єднання не здійснюватиметься автоматично."</string> <string name="saved_network" msgid="4352716707126620811">"Збережено додатком <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="connected_via_wfa" msgid="3805736726317410714">"Під’єднано через Диспетчер Wi-Fi-з’єднання"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Під’єднано через %1$s"</string> @@ -344,5 +341,4 @@ <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Найбільші елементи"</string> <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Спеціальний масштаб (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string> <string name="help_feedback_label" msgid="6815040660801785649">"Довідка й відгуки"</string> - <string name="content_description_menu_button" msgid="8182594799812351266">"Меню"</string> </resources> diff --git a/packages/SettingsLib/res/values-ur-rPK/strings.xml b/packages/SettingsLib/res/values-ur-rPK/strings.xml index c5aaaab7a9a5..2ac8a6145797 100644 --- a/packages/SettingsLib/res/values-ur-rPK/strings.xml +++ b/packages/SettingsLib/res/values-ur-rPK/strings.xml @@ -28,10 +28,7 @@ <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"WiFi کنکشن کی ناکامی"</string> <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"توثیق کا مسئلہ"</string> <string name="wifi_not_in_range" msgid="1136191511238508967">"رینج میں نہیں ہے"</string> - <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) --> - <skip /> - <!-- no translation found for wifi_no_internet (5011955173375805204) --> - <skip /> + <string name="wifi_no_internet" msgid="9151470775868728896">"انٹرنیٹ تک کسی رسائی کا پتہ نہیں چلا، خود بخود دوبارہ منسلک نہیں ہوگا۔"</string> <string name="saved_network" msgid="4352716707126620811">"<xliff:g id="NAME">%1$s</xliff:g> کی جانب سے محفوظ کردہ"</string> <string name="connected_via_wfa" msgid="3805736726317410714">"Wi‑Fi اسسٹنٹ کے ذریعے منسلک ہے"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"منسلک بذریعہ %1$s"</string> @@ -344,5 +341,4 @@ <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"سب سے بڑا"</string> <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"حسب ضرورت (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string> <string name="help_feedback_label" msgid="6815040660801785649">"مدد اور تاثرات"</string> - <string name="content_description_menu_button" msgid="8182594799812351266">"مینو"</string> </resources> diff --git a/packages/SettingsLib/res/values-uz-rUZ/strings.xml b/packages/SettingsLib/res/values-uz-rUZ/strings.xml index e2c58a414509..9022ad31dacf 100644 --- a/packages/SettingsLib/res/values-uz-rUZ/strings.xml +++ b/packages/SettingsLib/res/values-uz-rUZ/strings.xml @@ -28,10 +28,7 @@ <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Wi-Fi ulanishini o‘rnatib bo‘lmadi"</string> <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Tasdiqdan o‘tishda muammo"</string> <string name="wifi_not_in_range" msgid="1136191511238508967">"Aloqada emas"</string> - <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) --> - <skip /> - <!-- no translation found for wifi_no_internet (5011955173375805204) --> - <skip /> + <string name="wifi_no_internet" msgid="9151470775868728896">"Internetga ulanish aniqlanmadi, avtomatik ravishda qayta ulana olmaydi."</string> <string name="saved_network" msgid="4352716707126620811">"<xliff:g id="NAME">%1$s</xliff:g> tomonidan saqlangan"</string> <string name="connected_via_wfa" msgid="3805736726317410714">"Wi‑Fi yordamchisi orqali ulangan"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s orqali ulangan"</string> @@ -344,5 +341,4 @@ <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Eng katta"</string> <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Moslashtirilgan (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string> <string name="help_feedback_label" msgid="6815040660801785649">"Yordam va fikr-mulohaza"</string> - <string name="content_description_menu_button" msgid="8182594799812351266">"Menyu"</string> </resources> diff --git a/packages/SettingsLib/res/values-vi/strings.xml b/packages/SettingsLib/res/values-vi/strings.xml index fa4174b37046..c58f84993bb6 100644 --- a/packages/SettingsLib/res/values-vi/strings.xml +++ b/packages/SettingsLib/res/values-vi/strings.xml @@ -28,10 +28,7 @@ <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Lỗi kết nối WiFi"</string> <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Sự cố xác thực"</string> <string name="wifi_not_in_range" msgid="1136191511238508967">"Ngoài vùng phủ sóng"</string> - <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) --> - <skip /> - <!-- no translation found for wifi_no_internet (5011955173375805204) --> - <skip /> + <string name="wifi_no_internet" msgid="9151470775868728896">"Không phát hiện thấy truy cập Internet nào, mạng sẽ không được tự động kết nối lại."</string> <string name="saved_network" msgid="4352716707126620811">"Được lưu bởi <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="connected_via_wfa" msgid="3805736726317410714">"Được kết nối qua trình hỗ trợ Wi‑Fi"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Được kết nối qua %1$s"</string> @@ -344,5 +341,4 @@ <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Lớn nhất"</string> <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Tùy chỉnh (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string> <string name="help_feedback_label" msgid="6815040660801785649">"Trợ giúp và phản hồi"</string> - <string name="content_description_menu_button" msgid="8182594799812351266">"Menu"</string> </resources> diff --git a/packages/SettingsLib/res/values-zh-rCN/strings.xml b/packages/SettingsLib/res/values-zh-rCN/strings.xml index 63199e8f84c3..18ae80e3d9b6 100644 --- a/packages/SettingsLib/res/values-zh-rCN/strings.xml +++ b/packages/SettingsLib/res/values-zh-rCN/strings.xml @@ -28,10 +28,7 @@ <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"WLAN 连接失败"</string> <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"身份验证出现问题"</string> <string name="wifi_not_in_range" msgid="1136191511238508967">"不在范围内"</string> - <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) --> - <skip /> - <!-- no translation found for wifi_no_internet (5011955173375805204) --> - <skip /> + <string name="wifi_no_internet" msgid="9151470775868728896">"未检测到任何互联网连接,因此不会自动重新连接。"</string> <string name="saved_network" msgid="4352716707126620811">"已通过<xliff:g id="NAME">%1$s</xliff:g>保存"</string> <string name="connected_via_wfa" msgid="3805736726317410714">"已连接(通过 WLAN 助手)"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"已通过%1$s连接"</string> @@ -189,7 +186,7 @@ <string name="debug_view_attributes" msgid="6485448367803310384">"启用视图属性检查功能"</string> <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"始终开启移动数据网络,即使 WLAN 网络已开启(便于快速切换网络)。"</string> <string name="adb_warning_title" msgid="6234463310896563253">"是否允许USB调试?"</string> - <string name="adb_warning_message" msgid="7316799925425402244">"USB 调试仅用于开发目的。该功能可用于在您的计算机和设备之间复制数据、在您的设备上安装应用(事先不发通知)以及读取日志数据。"</string> + <string name="adb_warning_message" msgid="7316799925425402244">"USB调试仅适用于开发工作。该功能可用于在您的计算机和设备之间复制数据、在您的设备上安装应用而不发送通知以及读取日志数据。"</string> <string name="adb_keys_warning_message" msgid="5659849457135841625">"是否针对您之前授权的所有计算机撤消USB调试的访问权限?"</string> <string name="dev_settings_warning_title" msgid="7244607768088540165">"允许开发设置?"</string> <string name="dev_settings_warning_message" msgid="2298337781139097964">"这些设置仅适用于开发工作。一旦启用,会导致您的设备以及设备上的应用崩溃或出现异常。"</string> @@ -344,5 +341,4 @@ <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"最大"</string> <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"自定义 (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string> <string name="help_feedback_label" msgid="6815040660801785649">"帮助和反馈"</string> - <string name="content_description_menu_button" msgid="8182594799812351266">"菜单"</string> </resources> diff --git a/packages/SettingsLib/res/values-zh-rHK/strings.xml b/packages/SettingsLib/res/values-zh-rHK/strings.xml index edbffc19503b..660071df7073 100644 --- a/packages/SettingsLib/res/values-zh-rHK/strings.xml +++ b/packages/SettingsLib/res/values-zh-rHK/strings.xml @@ -28,10 +28,7 @@ <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"WiFi 連線失敗"</string> <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"驗證問題"</string> <string name="wifi_not_in_range" msgid="1136191511238508967">"超出可用範圍"</string> - <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) --> - <skip /> - <!-- no translation found for wifi_no_internet (5011955173375805204) --> - <skip /> + <string name="wifi_no_internet" msgid="9151470775868728896">"未能偵測到互聯網連線,因此不會自動重新連線。"</string> <string name="saved_network" msgid="4352716707126620811">"<xliff:g id="NAME">%1$s</xliff:g> 的儲存"</string> <string name="connected_via_wfa" msgid="3805736726317410714">"已透過 Wi-Fi 小幫手連線"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"已透過 %1$s 連線"</string> @@ -344,5 +341,4 @@ <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"最大"</string> <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"自訂 (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string> <string name="help_feedback_label" msgid="6815040660801785649">"說明與意見反映"</string> - <string name="content_description_menu_button" msgid="8182594799812351266">"選單"</string> </resources> diff --git a/packages/SettingsLib/res/values-zh-rTW/strings.xml b/packages/SettingsLib/res/values-zh-rTW/strings.xml index b1c5f0632a66..bce6f244d1e4 100644 --- a/packages/SettingsLib/res/values-zh-rTW/strings.xml +++ b/packages/SettingsLib/res/values-zh-rTW/strings.xml @@ -28,10 +28,7 @@ <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"WiFi 連線失敗"</string> <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"驗證問題"</string> <string name="wifi_not_in_range" msgid="1136191511238508967">"不在有效範圍內"</string> - <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) --> - <skip /> - <!-- no translation found for wifi_no_internet (5011955173375805204) --> - <skip /> + <string name="wifi_no_internet" msgid="9151470775868728896">"未偵測到可用的網際網路連線,系統無法為您自動重新連線。"</string> <string name="saved_network" msgid="4352716707126620811">"由<xliff:g id="NAME">%1$s</xliff:g>儲存"</string> <string name="connected_via_wfa" msgid="3805736726317410714">"已透過 Wi‑Fi 小幫手連線"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"已透過 %1$s 連線"</string> @@ -344,5 +341,4 @@ <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"最大"</string> <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"自訂 (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string> <string name="help_feedback_label" msgid="6815040660801785649">"說明與意見回饋"</string> - <string name="content_description_menu_button" msgid="8182594799812351266">"選單"</string> </resources> diff --git a/packages/SettingsLib/res/values-zu/strings.xml b/packages/SettingsLib/res/values-zu/strings.xml index e4f0d59bfc15..07c6fce2c3f9 100644 --- a/packages/SettingsLib/res/values-zu/strings.xml +++ b/packages/SettingsLib/res/values-zu/strings.xml @@ -28,10 +28,7 @@ <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Ukwehlulekla koxhumo le-WiFi"</string> <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Inkinga yokufakazela ubuqiniso"</string> <string name="wifi_not_in_range" msgid="1136191511238508967">"Ayikho ebubanzini"</string> - <!-- no translation found for wifi_no_internet_no_reconnect (2211781637653149657) --> - <skip /> - <!-- no translation found for wifi_no_internet (5011955173375805204) --> - <skip /> + <string name="wifi_no_internet" msgid="9151470775868728896">"Ukufinyeela okungekhona kwe-inthanethi kutholakele, ngeke kuxhumeke ngokuzenzakalelayo."</string> <string name="saved_network" msgid="4352716707126620811">"Kulondolozwe ngu-<xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="connected_via_wfa" msgid="3805736726317410714">"Ixhunywe ngomsizi we-Wi-FI"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Kuxhumeke nge-%1$s"</string> @@ -344,5 +341,4 @@ <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Okukhulu kakhulu"</string> <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Ngokwezifiso (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string> <string name="help_feedback_label" msgid="6815040660801785649">"Usizo nempendulo"</string> - <string name="content_description_menu_button" msgid="8182594799812351266">"Imenyu"</string> </resources> diff --git a/packages/SettingsProvider/res/values/defaults.xml b/packages/SettingsProvider/res/values/defaults.xml index cd2d6b337f73..08bf3a7f9f95 100644 --- a/packages/SettingsProvider/res/values/defaults.xml +++ b/packages/SettingsProvider/res/values/defaults.xml @@ -155,6 +155,9 @@ <!-- Default for Settings.Secure.LONG_PRESS_TIMEOUT_MILLIS --> <integer name="def_long_press_timeout_millis">400</integer> + <!-- Default for Settings.Secure.MULTI_PRESS_TIMEOUT --> + <integer name="def_multi_press_timeout_millis">300</integer> + <!-- Default for Settings.Secure.SHOW_IME_WITH_HARD_KEYBOARD --> <bool name="def_show_ime_with_hard_keyboard">false</bool> diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java index a43c398f04ad..e66e963c0179 100644 --- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java +++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java @@ -2102,7 +2102,7 @@ public class SettingsProvider extends ContentProvider { } private final class UpgradeController { - private static final int SETTINGS_VERSION = 130; + private static final int SETTINGS_VERSION = 131; private final int mUserId; @@ -2416,6 +2416,22 @@ public class SettingsProvider extends ContentProvider { currentVersion = 130; } + if (currentVersion == 130) { + // Initialize new multi-press timeout to default value + final SettingsState systemSecureSettings = getSecureSettingsLocked(userId); + final String oldValue = systemSecureSettings.getSettingLocked( + Settings.Secure.MULTI_PRESS_TIMEOUT).getValue(); + if (TextUtils.equals(null, oldValue)) { + systemSecureSettings.insertSettingLocked( + Settings.Secure.MULTI_PRESS_TIMEOUT, + String.valueOf(getContext().getResources().getInteger( + R.integer.def_multi_press_timeout_millis)), + SettingsState.SYSTEM_PACKAGE_NAME); + } + + currentVersion = 131; + } + if (currentVersion != newVersion) { Slog.wtf("SettingsProvider", "warning: upgrading settings database to version " + newVersion + " left it at " diff --git a/packages/Shell/AndroidManifest.xml b/packages/Shell/AndroidManifest.xml index f1789ea03682..227d0e944e6e 100644 --- a/packages/Shell/AndroidManifest.xml +++ b/packages/Shell/AndroidManifest.xml @@ -114,6 +114,8 @@ <uses-permission android:name="android.permission.CHANGE_COMPONENT_ENABLED_STATE" /> <!-- Permission needed to rename bugreport notifications (so they're not shown as Shell) --> <uses-permission android:name="android.permission.SUBSTITUTE_NOTIFICATION_APP_NAME" /> + <!-- Permission needed to hold a wakelock in dumpstate.cpp (drop_root_user()) --> + <uses-permission android:name="android.permission.WAKE_LOCK" /> <application android:label="@string/app_label" android:defaultToDeviceProtectedStorage="true" diff --git a/packages/SystemUI/res/values-bs-rBA-land/strings.xml b/packages/SystemUI/res/values-bs-rBA-land/strings.xml index 56a4ad276d08..bdc652af8f1a 100644 --- a/packages/SystemUI/res/values-bs-rBA-land/strings.xml +++ b/packages/SystemUI/res/values-bs-rBA-land/strings.xml @@ -19,5 +19,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="toast_rotation_locked" msgid="7609673011431556092">"Ekran je sada zaključan u vodoravnom prikazu."</string> + <string name="toast_rotation_locked" msgid="7609673011431556092">"Ekran je sada zaključan u pejzažnom prikazu."</string> </resources> diff --git a/packages/SystemUI/res/values-it/strings_car.xml b/packages/SystemUI/res/values-it/strings_car.xml index 19c4e2b02ad0..ae26c9e102bd 100644 --- a/packages/SystemUI/res/values-it/strings_car.xml +++ b/packages/SystemUI/res/values-it/strings_car.xml @@ -20,5 +20,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="car_lockscreen_disclaimer_title" msgid="7997539137376896441">"Guida in modo sicuro"</string> - <string name="car_lockscreen_disclaimer_text" msgid="3061224684092952864">"È necessario essere sempre pienamente informati sulle condizioni della strada e rispettare la legislazione vigente. Le indicazioni stradali potrebbero essere imprecise, incomplete, pericolose, inadatte, vietate o richiedere l\'attraversamento di aree amministrative. Anche le informazioni sugli esercizi commerciali potrebbero essere imprecise o incomplete. I dati forniti non sono aggiornati in tempo reale e non è possibile garantire la precisione della geolocalizzazione. Non maneggiare dispositivi mobili e app non destinate ad Android Auto durante la guida."</string> + <string name="car_lockscreen_disclaimer_text" msgid="3061224684092952864">"È necessario essere sempre pienamente coscienti delle condizioni di guida e rispettare le leggi vigenti. Le indicazioni stradali potrebbero essere imprecise, incomplete, pericolose, non adatte, vietate o implicare l\'attraversamento di confini. Anche le informazioni sulle attività commerciali potrebbero essere imprecise o incomplete. I dati non vengono forniti in tempo reale e non è possibile garantire la precisione della geolocalizzazione. Non maneggiare il dispositivo mobile e non utilizzare app non progettate per Android Auto durante la guida."</string> </resources> diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java index 45d51b01210e..0bc70b53ac52 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java @@ -59,6 +59,8 @@ public class NavigationBarView extends LinearLayout { // slippery nav bar when everything is disabled, e.g. during setup final static boolean SLIPPERY_WHEN_DISABLED = true; + final static boolean ALTERNATE_CAR_MODE_UI = false; + final Display mDisplay; View mCurrentView = null; View[] mRotatedViews = new View[4]; @@ -94,7 +96,8 @@ public class NavigationBarView extends LinearLayout { private OnVerticalChangedListener mOnVerticalChangedListener; private boolean mLayoutTransitionsEnabled = true; private boolean mWakeAndUnlocking; - private boolean mCarMode = false; + private boolean mUseCarModeUi = false; + private boolean mInCarMode = false; private boolean mDockedStackExists; private final SparseArray<ButtonDispatcher> mButtonDisatchers = new SparseArray<>(); @@ -290,7 +293,9 @@ public class NavigationBarView extends LinearLayout { mMenuIcon = ctx.getDrawable(R.drawable.ic_sysbar_menu); mImeIcon = ctx.getDrawable(R.drawable.ic_ime_switcher_default); - updateCarModeIcons(ctx); + if (ALTERNATE_CAR_MODE_UI) { + updateCarModeIcons(ctx); + } } } @@ -341,14 +346,14 @@ public class NavigationBarView extends LinearLayout { // carmode, respectively. Recents are not available in CarMode in nav bar so change // to recent icon is not required. Drawable backIcon = (backAlt) - ? getBackIconWithAlt(mCarMode, mVertical) - : getBackIcon(mCarMode, mVertical); + ? getBackIconWithAlt(mUseCarModeUi, mVertical) + : getBackIcon(mUseCarModeUi, mVertical); getBackButton().setImageDrawable(backIcon); updateRecentsIcon(); - if (mCarMode) { + if (mUseCarModeUi) { getHomeButton().setImageDrawable(mHomeCarModeIcon); } else { getHomeButton().setImageDrawable(mHomeDefaultIcon); @@ -376,9 +381,9 @@ public class NavigationBarView extends LinearLayout { final boolean disableHome = ((disabledFlags & View.STATUS_BAR_DISABLE_HOME) != 0); - // Disable recents always in car mode. - boolean disableRecent = ( - mCarMode || (disabledFlags & View.STATUS_BAR_DISABLE_RECENT) != 0); + // Always disable recents when alternate car mode UI is active. + boolean disableRecent = mUseCarModeUi + || ((disabledFlags & View.STATUS_BAR_DISABLE_RECENT) != 0); final boolean disableBack = ((disabledFlags & View.STATUS_BAR_DISABLE_BACK) != 0) && ((mNavigationIconHints & StatusBarManager.NAVIGATION_HINT_BACK_ALT) == 0); final boolean disableSearch = ((disabledFlags & View.STATUS_BAR_DISABLE_SEARCH) != 0); @@ -623,14 +628,19 @@ public class NavigationBarView extends LinearLayout { boolean uiCarModeChanged = false; if (newConfig != null) { int uiMode = newConfig.uiMode & Configuration.UI_MODE_TYPE_MASK; - if (mCarMode && uiMode != Configuration.UI_MODE_TYPE_CAR) { - mCarMode = false; - uiCarModeChanged = true; - getHomeButton().setCarMode(mCarMode); - } else if (uiMode == Configuration.UI_MODE_TYPE_CAR) { - mCarMode = true; - uiCarModeChanged = true; - getHomeButton().setCarMode(mCarMode); + final boolean isCarMode = (uiMode == Configuration.UI_MODE_TYPE_CAR); + + if (isCarMode != mInCarMode) { + mInCarMode = isCarMode; + getHomeButton().setCarMode(isCarMode); + + if (ALTERNATE_CAR_MODE_UI) { + mUseCarModeUi = isCarMode; + uiCarModeChanged = true; + } else { + // Don't use car mode behavior if ALTERNATE_CAR_MODE_UI not set. + mUseCarModeUi = false; + } } } return uiCarModeChanged; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java index f4b41bbf8eca..ae752293a423 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java @@ -328,7 +328,7 @@ public class NotificationPanelView extends PanelView implements } else if (!mQsExpanded) { setQsExpansion(mQsMinExpansionHeight + mLastOverscroll); } - updateStackHeight(getExpandedHeight()); + updateExpandedHeight(getExpandedHeight()); updateHeader(); // If we are running a size change animation, the animation takes care of the height of @@ -376,10 +376,7 @@ public class NotificationPanelView extends PanelView implements boolean animate = mNotificationStackScroller.isAddOrRemoveAnimationPending(); int stackScrollerPadding; if (mStatusBarState != StatusBarState.KEYGUARD) { - int bottom = mQsContainer.getHeader().getHeight(); - stackScrollerPadding = mStatusBarState == StatusBarState.SHADE - ? bottom + mQsPeekHeight - : mKeyguardStatusBar.getHeight(); + stackScrollerPadding = mQsContainer.getHeader().getHeight() + mQsPeekHeight; mTopPaddingAdjustment = 0; } else { mClockPositionAlgorithm.setup( @@ -1166,6 +1163,7 @@ public class NotificationPanelView extends PanelView implements private void updateQsState() { mQsContainer.setExpanded(mQsExpanded); + mNotificationStackScroller.setQsExpanded(mQsExpanded); mNotificationStackScroller.setScrollingEnabled( mStatusBarState != StatusBarState.KEYGUARD && (!mQsExpanded || mQsExpansionFromOverscroll)); @@ -1427,7 +1425,7 @@ public class NotificationPanelView extends PanelView implements setQsExpansion(mQsMinExpansionHeight + t * (getTempQsMaxExpansion() - mQsMinExpansionHeight)); } - updateStackHeight(expandedHeight); + updateExpandedHeight(expandedHeight); updateHeader(); updateUnlockIcon(); updateNotificationTranslucency(); @@ -1487,7 +1485,7 @@ public class NotificationPanelView extends PanelView implements maxQsHeight, mStatusBarState == StatusBarState.KEYGUARD ? mClockPositionResult.stackScrollerPadding - mTopPaddingAdjustment : 0) - + notificationHeight; + + notificationHeight + mNotificationStackScroller.getTopPaddingOverflow(); if (totalHeight > mNotificationStackScroller.getHeight()) { float fullyCollapsedHeight = maxQsHeight + mNotificationStackScroller.getLayoutMinHeight(); @@ -1730,6 +1728,14 @@ public class NotificationPanelView extends PanelView implements if (view == null && mQsExpanded) { return; } + ExpandableView firstChildNotGone = mNotificationStackScroller.getFirstChildNotGone(); + ExpandableNotificationRow firstRow = firstChildNotGone instanceof ExpandableNotificationRow + ? (ExpandableNotificationRow) firstChildNotGone + : null; + if (firstRow != null + && (view == firstRow || (firstRow.getNotificationParent() == firstRow))) { + requestScrollerTopPaddingUpdate(false); + } requestPanelHeightUpdate(); } @@ -2249,8 +2255,8 @@ public class NotificationPanelView extends PanelView implements mQsAutoReinflateContainer.setTranslationX(translation); } - protected void updateStackHeight(float stackHeight) { - mNotificationStackScroller.setStackHeight(stackHeight); + protected void updateExpandedHeight(float expandedHeight) { + mNotificationStackScroller.setExpandedHeight(expandedHeight); updateKeyguardBottomAreaAlpha(); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/stack/AmbientState.java b/packages/SystemUI/src/com/android/systemui/statusbar/stack/AmbientState.java index 50e5b886488a..81da6720828a 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/stack/AmbientState.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/stack/AmbientState.java @@ -43,6 +43,7 @@ public class AmbientState { private boolean mShadeExpanded; private float mMaxHeadsUpTranslation; private boolean mDismissAllInProgress; + private int mLayoutMinHeight; public int getScrollY() { return mScrollY; @@ -137,10 +138,6 @@ public class AmbientState { mStackTranslation = stackTranslation; } - public int getLayoutHeight() { - return mLayoutHeight; - } - public void setLayoutHeight(int layoutHeight) { mLayoutHeight = layoutHeight; } @@ -154,7 +151,7 @@ public class AmbientState { } public int getInnerHeight() { - return mLayoutHeight - mTopPadding; + return Math.max(mLayoutHeight - mTopPadding, mLayoutMinHeight); } public boolean isShadeExpanded() { @@ -180,4 +177,8 @@ public class AmbientState { public boolean isDismissAllInProgress() { return mDismissAllInProgress; } + + public void setLayoutMinHeight(int layoutMinHeight) { + mLayoutMinHeight = layoutMinHeight; + } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java b/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java index 3e339d8b2940..e87adae01b18 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java @@ -111,11 +111,7 @@ public class NotificationStackScrollLayout extends ViewGroup private int mCurrentStackHeight = Integer.MAX_VALUE; private final Paint mBackgroundPaint = new Paint(); - /** - * mCurrentStackHeight is the actual stack height, mLastSetStackHeight is the stack height set - * externally from {@link #setStackHeight} - */ - private float mLastSetStackHeight; + private float mExpandedHeight; private int mOwnScrollY; private int mMaxLayoutHeight; @@ -354,6 +350,7 @@ public class NotificationStackScrollLayout extends ViewGroup return object.getBackgroundFadeAmount(); } }; + private boolean mQsExpanded; public NotificationStackScrollLayout(Context context) { this(context, null); @@ -519,6 +516,7 @@ public class NotificationStackScrollLayout extends ViewGroup clampScrollPosition(); requestChildrenUpdate(); updateFirstAndLastBackgroundViews(); + updateAlgorithmLayoutMinHeight(); } private void requestAnimationOnViewResize(ExpandableNotificationRow row) { @@ -560,9 +558,14 @@ public class NotificationStackScrollLayout extends ViewGroup private void updateAlgorithmHeightAndPadding() { mAmbientState.setLayoutHeight(getLayoutHeight()); + updateAlgorithmLayoutMinHeight(); mAmbientState.setTopPadding(mTopPadding); } + private void updateAlgorithmLayoutMinHeight() { + mAmbientState.setLayoutMinHeight(mQsExpanded && !onKeyguard() ? getLayoutMinHeight() : 0); + } + /** * Updates the children views according to the stack scroll algorithm. Call this whenever * modifications to {@link #mOwnScrollY} are performed to reflect it in the view layout. @@ -659,19 +662,19 @@ public class NotificationStackScrollLayout extends ViewGroup } /** - * Update the height of the stack to a new height. + * Update the height of the panel. * - * @param height the new height of the stack + * @param height the expanded height of the panel */ - public void setStackHeight(float height) { - mLastSetStackHeight = height; + public void setExpandedHeight(float height) { + mExpandedHeight = height; setIsExpanded(height > 0.0f); int stackHeight; float translationY; float appearEndPosition = getAppearEndPosition(); float appearStartPosition = getAppearStartPosition(); if (height >= appearEndPosition) { - translationY = mTopPaddingOverflow; + translationY = 0; stackHeight = (int) height; } else { float appearFraction = getAppearFraction(height); @@ -698,8 +701,12 @@ public class NotificationStackScrollLayout extends ViewGroup * Measured relative to the resting position. */ private float getExpandTranslationStart() { - int startPosition = mTrackingHeadsUp || mHeadsUpManager.hasPinnedHeadsUp() - ? 0 : -getFirstChildIntrinsicHeight(); + int startPosition = 0; + if (!mTrackingHeadsUp && !mHeadsUpManager.hasPinnedHeadsUp()) { + startPosition = - Math.min(getFirstChildIntrinsicHeight(), + mMaxLayoutHeight - mIntrinsicPadding - mBottomStackSlowDownHeight + - mBottomStackPeekSize); + } return startPosition - mTopPadding; } @@ -722,7 +729,7 @@ public class NotificationStackScrollLayout extends ViewGroup ? mHeadsUpManager.getTopHeadsUpPinnedHeight() + mBottomStackPeekSize + mBottomStackSlowDownHeight : getLayoutMinHeight(); - return firstItemHeight + mTopPadding + mTopPaddingOverflow; + return firstItemHeight + (onKeyguard() ? mTopPadding : mIntrinsicPadding); } /** @@ -1152,6 +1159,10 @@ public class NotificationStackScrollLayout extends ViewGroup @Override public boolean isAntiFalsingNeeded() { + return onKeyguard(); + } + + private boolean onKeyguard() { return mPhoneStatusBar.getBarState() == StatusBarState.KEYGUARD; } @@ -1228,7 +1239,7 @@ public class NotificationStackScrollLayout extends ViewGroup if (!isScrollingEnabled()) { return false; } - if (ev.getY() < mQsContainer.getBottom()) { + if (ev.getY() < mQsContainer.getBottom() && !mIsBeingDragged) { return false; } mForcedScroll = null; @@ -2122,26 +2133,22 @@ public class NotificationStackScrollLayout extends ViewGroup */ public void updateTopPadding(float qsHeight, boolean animate, boolean ignoreIntrinsicPadding) { - float start = qsHeight; - float stackHeight = getHeight() - start; + int topPadding = (int) qsHeight; int minStackHeight = getLayoutMinHeight(); - if (stackHeight <= minStackHeight) { - float overflow = minStackHeight - stackHeight; - stackHeight = minStackHeight; - start = getHeight() - stackHeight; - mTopPaddingOverflow = overflow; + if (topPadding + minStackHeight > getHeight()) { + mTopPaddingOverflow = topPadding + minStackHeight - getHeight(); } else { mTopPaddingOverflow = 0; } - setTopPadding(ignoreIntrinsicPadding ? (int) start : clampPadding((int) start), + setTopPadding(ignoreIntrinsicPadding ? topPadding : clampPadding(topPadding), animate); - setStackHeight(mLastSetStackHeight); + setExpandedHeight(mExpandedHeight); } public int getLayoutMinHeight() { int firstChildMinHeight = getFirstChildIntrinsicHeight(); return Math.min(firstChildMinHeight + mBottomStackPeekSize + mBottomStackSlowDownHeight, - mMaxLayoutHeight - mTopPadding); + mMaxLayoutHeight - mIntrinsicPadding); } public int getFirstChildIntrinsicHeight() { @@ -3088,10 +3095,14 @@ public class NotificationStackScrollLayout extends ViewGroup updateScrollPositionOnExpandInBottom(view); clampScrollPosition(); notifyHeightChangeListener(view); + ExpandableNotificationRow row = view instanceof ExpandableNotificationRow + ? (ExpandableNotificationRow) view + : null; + if (row != null && (row == mFirstVisibleBackgroundChild + || row.getNotificationParent() == mFirstVisibleBackgroundChild)) { + updateAlgorithmLayoutMinHeight(); + } if (needsAnimation) { - ExpandableNotificationRow row = view instanceof ExpandableNotificationRow - ? (ExpandableNotificationRow) view - : null; requestAnimationOnViewResize(row); } requestChildrenUpdate(); @@ -3374,7 +3385,7 @@ public class NotificationStackScrollLayout extends ViewGroup } private int findDarkAnimationOriginIndex(@Nullable PointF screenLocation) { - if (screenLocation == null || screenLocation.y < mTopPadding + mTopPaddingOverflow) { + if (screenLocation == null || screenLocation.y < mTopPadding) { return AnimationEvent.DARK_ANIMATION_ORIGIN_INDEX_ABOVE; } if (screenLocation.y > getBottomMostNotificationBottom()) { @@ -3858,6 +3869,11 @@ public class NotificationStackScrollLayout extends ViewGroup mCurrentStackScrollState.removeViewStateForView(view); } + public void setQsExpanded(boolean qsExpanded) { + mQsExpanded = qsExpanded; + updateAlgorithmLayoutMinHeight(); + } + /** * A listener that is notified when some child locations might have changed. */ @@ -4081,7 +4097,7 @@ public class NotificationStackScrollLayout extends ViewGroup onDragCancelled(animView); // If we're on the lockscreen we want to false this. - if (mPhoneStatusBar.getBarState() == StatusBarState.KEYGUARD) { + if (isAntiFalsingNeeded()) { mHandler.removeCallbacks(mFalsingCheck); mHandler.postDelayed(mFalsingCheck, COVER_GEAR_DELAY); } diff --git a/packages/VpnDialogs/res/values-ro/strings.xml b/packages/VpnDialogs/res/values-ro/strings.xml index e2e1e44021b0..4865e964fc74 100644 --- a/packages/VpnDialogs/res/values-ro/strings.xml +++ b/packages/VpnDialogs/res/values-ro/strings.xml @@ -25,5 +25,5 @@ <string name="duration" msgid="3584782459928719435">"Durată:"</string> <string name="data_transmitted" msgid="7988167672982199061">"Trimise:"</string> <string name="data_received" msgid="4062776929376067820">"Primite:"</string> - <string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> octeți/<xliff:g id="NUMBER_1">%2$s</xliff:g> pachete"</string> + <string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> (de) octeți/<xliff:g id="NUMBER_1">%2$s</xliff:g> (de) pachete"</string> </resources> diff --git a/services/core/java/com/android/server/AnyMotionDetector.java b/services/core/java/com/android/server/AnyMotionDetector.java index f93c716ae162..d56492521276 100644 --- a/services/core/java/com/android/server/AnyMotionDetector.java +++ b/services/core/java/com/android/server/AnyMotionDetector.java @@ -97,6 +97,15 @@ public class AnyMotionDetector { /** True if an orientation measurement is in progress. */ private boolean mMeasurementInProgress; + /** True if sendMessageDelayed() for the mMeasurementTimeout callback has been scheduled */ + private boolean mMeasurementTimeoutIsActive; + + /** True if sendMessageDelayed() for the mWakelockTimeout callback has been scheduled */ + private boolean mWakelockTimeoutIsActive; + + /** True if sendMessageDelayed() for the mSensorRestart callback has been scheduled */ + private boolean mSensorRestartIsActive; + /** The most recent gravity vector. */ private Vector3 mCurrentGravityVector = null; @@ -118,6 +127,9 @@ public class AnyMotionDetector { mSensorManager = sm; mAccelSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); mMeasurementInProgress = false; + mMeasurementTimeoutIsActive = false; + mWakelockTimeoutIsActive = false; + mSensorRestartIsActive = false; mState = STATE_INACTIVE; mCallback = callback; mThresholdAngle = thresholdAngle; @@ -146,6 +158,7 @@ public class AnyMotionDetector { mWakeLock.acquire(); Message wakelockTimeoutMsg = Message.obtain(mHandler, mWakelockTimeout); mHandler.sendMessageDelayed(wakelockTimeoutMsg, WAKELOCK_TIMEOUT_MILLIS); + mWakelockTimeoutIsActive = true; startOrientationMeasurementLocked(); } } @@ -157,17 +170,20 @@ public class AnyMotionDetector { mState = STATE_INACTIVE; if (DEBUG) Slog.d(TAG, "Moved from STATE_ACTIVE to STATE_INACTIVE."); } + mHandler.removeCallbacks(mMeasurementTimeout); + mHandler.removeCallbacks(mSensorRestart); + mMeasurementTimeoutIsActive = false; + mSensorRestartIsActive = false; if (mMeasurementInProgress) { mMeasurementInProgress = false; mSensorManager.unregisterListener(mListener); } - mHandler.removeCallbacks(mMeasurementTimeout); - mHandler.removeCallbacks(mSensorRestart); mCurrentGravityVector = null; mPreviousGravityVector = null; if (mWakeLock.isHeld()) { - mWakeLock.release(); mHandler.removeCallbacks(mWakelockTimeout); + mWakelockTimeoutIsActive = false; + mWakeLock.release(); } } } @@ -183,6 +199,7 @@ public class AnyMotionDetector { } Message measurementTimeoutMsg = Message.obtain(mHandler, mMeasurementTimeout); mHandler.sendMessageDelayed(measurementTimeoutMsg, ACCELEROMETER_DATA_TIMEOUT_MILLIS); + mMeasurementTimeoutIsActive = true; } } @@ -191,8 +208,9 @@ public class AnyMotionDetector { mMeasurementInProgress); int status = RESULT_UNKNOWN; if (mMeasurementInProgress) { - mSensorManager.unregisterListener(mListener); mHandler.removeCallbacks(mMeasurementTimeout); + mMeasurementTimeoutIsActive = false; + mSensorManager.unregisterListener(mListener); mMeasurementInProgress = false; mPreviousGravityVector = mCurrentGravityVector; mCurrentGravityVector = mRunningStats.getRunningAverage(); @@ -213,8 +231,9 @@ public class AnyMotionDetector { if (DEBUG) Slog.d(TAG, "getStationaryStatus() returned " + status); if (status != RESULT_UNKNOWN) { if (mWakeLock.isHeld()) { - mWakeLock.release(); mHandler.removeCallbacks(mWakelockTimeout); + mWakelockTimeoutIsActive = false; + mWakeLock.release(); } if (DEBUG) { Slog.d(TAG, "Moved from STATE_ACTIVE to STATE_INACTIVE. status = " + status); @@ -230,6 +249,7 @@ public class AnyMotionDetector { " milliseconds."); Message msg = Message.obtain(mHandler, mSensorRestart); mHandler.sendMessageDelayed(msg, ORIENTATION_MEASUREMENT_INTERVAL_MILLIS); + mSensorRestartIsActive = true; } } return status; @@ -283,6 +303,7 @@ public class AnyMotionDetector { } if (status != RESULT_UNKNOWN) { mHandler.removeCallbacks(mWakelockTimeout); + mWakelockTimeoutIsActive = false; mCallback.onAnyMotionResult(status); } } @@ -296,7 +317,10 @@ public class AnyMotionDetector { @Override public void run() { synchronized (mLock) { - startOrientationMeasurementLocked(); + if (mSensorRestartIsActive == true) { + mSensorRestartIsActive = false; + startOrientationMeasurementLocked(); + } } } }; @@ -306,14 +330,18 @@ public class AnyMotionDetector { public void run() { int status = RESULT_UNKNOWN; synchronized (mLock) { - if (DEBUG) Slog.i(TAG, "mMeasurementTimeout. Failed to collect sufficient accel " + - "data within " + ACCELEROMETER_DATA_TIMEOUT_MILLIS + " ms. Stopping " + - "orientation measurement."); - status = stopOrientationMeasurementLocked(); - } - if (status != RESULT_UNKNOWN) { - mHandler.removeCallbacks(mWakelockTimeout); - mCallback.onAnyMotionResult(status); + if (mMeasurementTimeoutIsActive == true) { + mMeasurementTimeoutIsActive = false; + if (DEBUG) Slog.i(TAG, "mMeasurementTimeout. Failed to collect sufficient accel " + + "data within " + ACCELEROMETER_DATA_TIMEOUT_MILLIS + " ms. Stopping " + + "orientation measurement."); + status = stopOrientationMeasurementLocked(); + if (status != RESULT_UNKNOWN) { + mHandler.removeCallbacks(mWakelockTimeout); + mWakelockTimeoutIsActive = false; + mCallback.onAnyMotionResult(status); + } + } } } }; @@ -322,7 +350,10 @@ public class AnyMotionDetector { @Override public void run() { synchronized (mLock) { - stop(); + if (mWakelockTimeoutIsActive == true) { + mWakelockTimeoutIsActive = false; + stop(); + } } } }; diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index 85d2981aaa96..eccfb6d514ce 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -2313,6 +2313,9 @@ public final class ActivityManagerService extends ActivityManagerNative } break; case VR_MODE_CHANGE_MSG: { VrManagerInternal vrService = LocalServices.getService(VrManagerInternal.class); + if (vrService == null) { + break; + } final ActivityRecord r = (ActivityRecord) msg.obj; boolean vrMode; ComponentName requestedPackage; diff --git a/services/core/java/com/android/server/am/BroadcastQueue.java b/services/core/java/com/android/server/am/BroadcastQueue.java index f78f29c4ac6d..d3826acb7918 100644 --- a/services/core/java/com/android/server/am/BroadcastQueue.java +++ b/services/core/java/com/android/server/am/BroadcastQueue.java @@ -226,11 +226,12 @@ public final class BroadcastQueue { } public final boolean replaceParallelBroadcastLocked(BroadcastRecord r) { + final Intent intent = r.intent; for (int i = mParallelBroadcasts.size() - 1; i >= 0; i--) { - if (r.intent.filterEquals(mParallelBroadcasts.get(i).intent)) { + if (intent.filterEquals(mParallelBroadcasts.get(i).intent)) { if (DEBUG_BROADCAST) Slog.v(TAG_BROADCAST, "***** DROPPING PARALLEL [" - + mQueueName + "]: " + r.intent); + + mQueueName + "]: " + intent); mParallelBroadcasts.set(i, r); return true; } @@ -239,11 +240,12 @@ public final class BroadcastQueue { } public final boolean replaceOrderedBroadcastLocked(BroadcastRecord r) { + final Intent intent = r.intent; for (int i = mOrderedBroadcasts.size() - 1; i > 0; i--) { - if (r.intent.filterEquals(mOrderedBroadcasts.get(i).intent)) { + if (intent.filterEquals(mOrderedBroadcasts.get(i).intent)) { if (DEBUG_BROADCAST) Slog.v(TAG_BROADCAST, "***** DROPPING ORDERED [" - + mQueueName + "]: " + r.intent); + + mQueueName + "]: " + intent); mOrderedBroadcasts.set(i, r); return true; } diff --git a/services/core/java/com/android/server/am/CoreSettingsObserver.java b/services/core/java/com/android/server/am/CoreSettingsObserver.java index 9dd07a9a9f90..73a17c613c4d 100644 --- a/services/core/java/com/android/server/am/CoreSettingsObserver.java +++ b/services/core/java/com/android/server/am/CoreSettingsObserver.java @@ -42,6 +42,7 @@ final class CoreSettingsObserver extends ContentObserver { String, Class<?>>(); static { sSecureSettingToTypeMap.put(Settings.Secure.LONG_PRESS_TIMEOUT, int.class); + sSecureSettingToTypeMap.put(Settings.Secure.MULTI_PRESS_TIMEOUT, int.class); // add other secure settings here... sSystemSettingToTypeMap.put(Settings.System.TIME_12_24, String.class); diff --git a/services/core/java/com/android/server/display/AutomaticBrightnessController.java b/services/core/java/com/android/server/display/AutomaticBrightnessController.java index 15ae846186fa..a3febd63e2ed 100644 --- a/services/core/java/com/android/server/display/AutomaticBrightnessController.java +++ b/services/core/java/com/android/server/display/AutomaticBrightnessController.java @@ -50,13 +50,7 @@ class AutomaticBrightnessController { // If true, enables the use of the screen auto-brightness adjustment setting. private static final boolean USE_SCREEN_AUTO_BRIGHTNESS_ADJUSTMENT = true; - // Hysteresis constraints for brightening or darkening. - // The recent lux must have changed by at least this fraction relative to the - // current ambient lux before a change will be considered. - private static final float BRIGHTENING_LIGHT_HYSTERESIS = 0.10f; - private static final float DARKENING_LIGHT_HYSTERESIS = 0.20f; - - // How long the current sensor reading is assumed to be valid beyond the current time. + // How long the current sensor reading is assumed to be valid beyond the current time. // This provides a bit of prediction, as well as ensures that the weight for the last sample is // non-zero, which in turn ensures that the total weight is non-zero. private static final long AMBIENT_LIGHT_PREDICTION_TIME_MILLIS = 100; @@ -71,7 +65,7 @@ class AutomaticBrightnessController { private static final int MSG_UPDATE_AMBIENT_LUX = 1; private static final int MSG_BRIGHTNESS_ADJUSTMENT_SAMPLE = 2; - // Callbacks for requesting updates to the the display's power state + // Callbacks for requesting updates to the display's power state private final Callbacks mCallbacks; // The sensor manager. @@ -115,6 +109,9 @@ class AutomaticBrightnessController { // weighting values positive. private final int mWeightingIntercept; + // accessor object for determining thresholds to change brightness dynamically + private final HysteresisLevels mDynamicHysteresis; + // Amount of time to delay auto-brightness after screen on while waiting for // the light sensor to warm-up in milliseconds. // May be 0 if no warm-up is required. @@ -190,7 +187,8 @@ class AutomaticBrightnessController { int brightnessMin, int brightnessMax, float dozeScaleFactor, int lightSensorRate, long brighteningLightDebounceConfig, long darkeningLightDebounceConfig, boolean resetAmbientLuxAfterWarmUpConfig, - int ambientLightHorizon, float autoBrightnessAdjustmentMaxGamma ) { + int ambientLightHorizon, float autoBrightnessAdjustmentMaxGamma, + HysteresisLevels dynamicHysteresis) { mCallbacks = callbacks; mTwilight = LocalServices.getService(TwilightManager.class); mSensorManager = sensorManager; @@ -206,6 +204,7 @@ class AutomaticBrightnessController { mAmbientLightHorizon = ambientLightHorizon; mWeightingIntercept = ambientLightHorizon; mScreenAutoBrightnessAdjustmentMaxGamma = autoBrightnessAdjustmentMaxGamma; + mDynamicHysteresis = dynamicHysteresis; mHandler = new AutomaticBrightnessHandler(looper); mAmbientLightRingBuffer = @@ -344,8 +343,8 @@ class AutomaticBrightnessController { private void setAmbientLux(float lux) { mAmbientLux = lux; - mBrighteningLuxThreshold = mAmbientLux * (1.0f + BRIGHTENING_LIGHT_HYSTERESIS); - mDarkeningLuxThreshold = mAmbientLux * (1.0f - DARKENING_LIGHT_HYSTERESIS); + mBrighteningLuxThreshold = mDynamicHysteresis.getBrighteningThreshold(lux); + mDarkeningLuxThreshold = mDynamicHysteresis.getDarkeningThreshold(lux); } private float calculateAmbientLux(long now) { diff --git a/services/core/java/com/android/server/display/DisplayPowerController.java b/services/core/java/com/android/server/display/DisplayPowerController.java index 61af8edebb83..df5def9ad9b9 100644 --- a/services/core/java/com/android/server/display/DisplayPowerController.java +++ b/services/core/java/com/android/server/display/DisplayPowerController.java @@ -72,7 +72,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call private static final String TAG = "DisplayPowerController"; private static final String SCREEN_ON_BLOCKED_TRACE_NAME = "Screen on blocked"; - private static boolean DEBUG = false; + private static final boolean DEBUG = false; private static final boolean DEBUG_PRETEND_PROXIMITY_SENSOR_ABSENT = false; // If true, uses the color fade on animation. @@ -102,9 +102,6 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call // Trigger proximity if distance is less than 5 cm. private static final float TYPICAL_PROXIMITY_THRESHOLD = 5.0f; - // Brightness animation ramp rate in brightness units per second. - private static final int BRIGHTNESS_RAMP_RATE_SLOW = 40; - private static final int REPORTED_TO_POLICY_SCREEN_OFF = 0; private static final int REPORTED_TO_POLICY_SCREEN_TURNING_ON = 1; private static final int REPORTED_TO_POLICY_SCREEN_ON = 2; @@ -243,8 +240,9 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call private boolean mAppliedDimming; private boolean mAppliedLowPower; - // Brightness ramp rate fast. + // Brightness animation ramp rates in brightness units per second private final int mBrightnessRampRateFast; + private final int mBrightnessRampRateSlow; // The controller for the automatic brightness level. private AutomaticBrightnessController mAutomaticBrightnessController; @@ -307,6 +305,8 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call mBrightnessRampRateFast = resources.getInteger( com.android.internal.R.integer.config_brightness_ramp_rate_fast); + mBrightnessRampRateSlow = resources.getInteger( + com.android.internal.R.integer.config_brightness_ramp_rate_slow); int lightSensorRate = resources.getInteger( com.android.internal.R.integer.config_autoBrightnessLightSensorRate); @@ -322,6 +322,15 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call com.android.internal.R.fraction.config_autoBrightnessAdjustmentMaxGamma, 1, 1); + int[] brightLevels = resources.getIntArray( + com.android.internal.R.array.config_dynamicHysteresisBrightLevels); + int[] darkLevels = resources.getIntArray( + com.android.internal.R.array.config_dynamicHysteresisDarkLevels); + int[] luxLevels = resources.getIntArray( + com.android.internal.R.array.config_dynamicHysteresisLuxLevels); + HysteresisLevels dynamicHysteresis = new HysteresisLevels( + brightLevels, darkLevels, luxLevels); + if (mUseSoftwareAutoBrightnessConfig) { int[] lux = resources.getIntArray( com.android.internal.R.array.config_autoBrightnessLevels); @@ -358,8 +367,8 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call lightSensorWarmUpTimeConfig, screenBrightnessRangeMinimum, mScreenBrightnessRangeMaximum, dozeScaleFactor, lightSensorRate, brighteningLightDebounce, darkeningLightDebounce, - autoBrightnessResetAmbientLuxAfterWarmUp, - ambientLightHorizon, autoBrightnessAdjustmentMaxGamma); + autoBrightnessResetAmbientLuxAfterWarmUp, ambientLightHorizon, + autoBrightnessAdjustmentMaxGamma, dynamicHysteresis); } } @@ -703,7 +712,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call if (!mPendingScreenOff) { if (state == Display.STATE_ON || state == Display.STATE_DOZE) { animateScreenBrightness(brightness, - slowChange ? BRIGHTNESS_RAMP_RATE_SLOW : mBrightnessRampRateFast); + slowChange ? mBrightnessRampRateSlow : mBrightnessRampRateFast); } else { animateScreenBrightness(brightness, 0); } diff --git a/services/core/java/com/android/server/display/HysteresisLevels.java b/services/core/java/com/android/server/display/HysteresisLevels.java new file mode 100644 index 000000000000..b06222563811 --- /dev/null +++ b/services/core/java/com/android/server/display/HysteresisLevels.java @@ -0,0 +1,104 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.server.display; + +import android.util.Slog; + +/** + * A helper class for handling access to illuminance hysteresis level values. + */ +final class HysteresisLevels { + private static final String TAG = "HysteresisLevels"; + + // Default hysteresis constraints for brightening or darkening. + // The recent lux must have changed by at least this fraction relative to the + // current ambient lux before a change will be considered. + private static final float DEFAULT_BRIGHTENING_HYSTERESIS = 0.10f; + private static final float DEFAULT_DARKENING_HYSTERESIS = 0.20f; + + private static final boolean DEBUG = false; + + private final float[] mBrightLevels; + private final float[] mDarkLevels; + private final float[] mLuxLevels; + + /** + * Creates a {@code HysteresisLevels} object with the given equal-length + * integer arrays. + * @param brightLevels an array of brightening hysteresis constraint constants + * @param darkLevels an array of darkening hysteresis constraint constants + * @param luxLevels a monotonically increasing array of illuminance + * thresholds in units of lux + */ + public HysteresisLevels(int[] brightLevels, int[] darkLevels, int[] luxLevels) { + if (brightLevels.length != darkLevels.length || darkLevels.length != luxLevels.length + 1) { + throw new IllegalArgumentException("Mismatch between hysteresis array lengths."); + } + mBrightLevels = setArrayFormat(brightLevels, 1000.0f); + mDarkLevels = setArrayFormat(darkLevels, 1000.0f); + mLuxLevels = setArrayFormat(luxLevels, 1.0f); + } + + /** + * Return the brightening hysteresis threshold for the given lux level. + */ + public float getBrighteningThreshold(float lux) { + float brightConstant = getReferenceLevel(lux, mBrightLevels); + float brightThreshold = lux * (1.0f + brightConstant); + if (DEBUG) { + Slog.d(TAG, "bright hysteresis constant=: " + brightConstant + ", threshold=" + + brightThreshold + ", lux=" + lux); + } + return brightThreshold; + } + + /** + * Return the darkening hysteresis threshold for the given lux level. + */ + public float getDarkeningThreshold(float lux) { + float darkConstant = getReferenceLevel(lux, mDarkLevels); + float darkThreshold = lux * (1.0f - darkConstant); + if (DEBUG) { + Slog.d(TAG, "dark hysteresis constant=: " + darkConstant + ", threshold=" + + darkThreshold + ", lux=" + lux); + } + return darkThreshold; + } + + /** + * Return the hysteresis constant for the closest lux threshold value to the + * current illuminance from the given array. + */ + private float getReferenceLevel(float lux, float[] referenceLevels) { + int index = 0; + while (mLuxLevels.length > index && lux >= mLuxLevels[index]) { + ++index; + } + return referenceLevels[index]; + } + + /** + * Return a float array where each i-th element equals {@code configArray[i]/divideFactor}. + */ + private float[] setArrayFormat(int[] configArray, float divideFactor) { + float[] levelArray = new float[configArray.length]; + for (int index = 0; levelArray.length > index; ++index) { + levelArray[index] = (float)configArray[index] / divideFactor; + } + return levelArray; + } +} diff --git a/services/core/java/com/android/server/fingerprint/FingerprintService.java b/services/core/java/com/android/server/fingerprint/FingerprintService.java index 73c8469ca709..9e132f761087 100644 --- a/services/core/java/com/android/server/fingerprint/FingerprintService.java +++ b/services/core/java/com/android/server/fingerprint/FingerprintService.java @@ -195,6 +195,7 @@ public class FingerprintService extends SystemService implements IBinder.DeathRe public void binderDied() { Slog.v(TAG, "fingerprintd died"); mDaemon = null; + mCurrentUserId = UserHandle.USER_CURRENT; handleError(mHalDeviceId, FingerprintManager.FINGERPRINT_ERROR_HW_UNAVAILABLE); } diff --git a/services/core/java/com/android/server/lights/LightsService.java b/services/core/java/com/android/server/lights/LightsService.java index 07048a491543..ca6481792dfe 100644 --- a/services/core/java/com/android/server/lights/LightsService.java +++ b/services/core/java/com/android/server/lights/LightsService.java @@ -172,10 +172,12 @@ public class LightsService extends SystemService { if (phase == PHASE_SYSTEM_SERVICES_READY) { IVrManager vrManager = (IVrManager) getBinderService(VrManagerService.VR_MANAGER_BINDER_SERVICE); - try { - vrManager.registerListener(mVrStateCallbacks); - } catch (RemoteException e) { - Slog.e(TAG, "Failed to register VR mode state listener: " + e); + if (vrManager != null) { + try { + vrManager.registerListener(mVrStateCallbacks); + } catch (RemoteException e) { + Slog.e(TAG, "Failed to register VR mode state listener: " + e); + } } } } diff --git a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java index d479bfc181da..7545959fcce5 100644 --- a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java +++ b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java @@ -1020,7 +1020,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { */ private void notifyOverLimitNL(NetworkTemplate template) { if (!mOverLimitNotified.contains(template)) { - mContext.startActivity(buildNetworkOverLimitIntent(template)); + mContext.startActivity(buildNetworkOverLimitIntent(mContext.getResources(), template)); mOverLimitNotified.add(template); } } @@ -1066,7 +1066,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { builder.setDeleteIntent(PendingIntent.getBroadcast( mContext, 0, snoozeIntent, PendingIntent.FLAG_UPDATE_CURRENT)); - final Intent viewIntent = buildViewDataUsageIntent(policy.template); + final Intent viewIntent = buildViewDataUsageIntent(res, policy.template); builder.setContentIntent(PendingIntent.getActivity( mContext, 0, viewIntent, PendingIntent.FLAG_UPDATE_CURRENT)); @@ -1102,7 +1102,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { builder.setContentTitle(title); builder.setContentText(body); - final Intent intent = buildNetworkOverLimitIntent(policy.template); + final Intent intent = buildNetworkOverLimitIntent(res, policy.template); builder.setContentIntent(PendingIntent.getActivity( mContext, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT)); break; @@ -1137,7 +1137,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { builder.setContentTitle(title); builder.setContentText(body); - final Intent intent = buildViewDataUsageIntent(policy.template); + final Intent intent = buildViewDataUsageIntent(res, policy.template); builder.setContentIntent(PendingIntent.getActivity( mContext, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT)); break; @@ -3594,19 +3594,19 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { return intent; } - private static Intent buildNetworkOverLimitIntent(NetworkTemplate template) { + private static Intent buildNetworkOverLimitIntent(Resources res, NetworkTemplate template) { final Intent intent = new Intent(); - intent.setComponent(new ComponentName( - "com.android.systemui", "com.android.systemui.net.NetworkOverLimitActivity")); + intent.setComponent(ComponentName.unflattenFromString( + res.getString(R.string.config_networkOverLimitComponent))); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.putExtra(EXTRA_NETWORK_TEMPLATE, template); return intent; } - private static Intent buildViewDataUsageIntent(NetworkTemplate template) { + private static Intent buildViewDataUsageIntent(Resources res, NetworkTemplate template) { final Intent intent = new Intent(); - intent.setComponent(new ComponentName( - "com.android.settings", "com.android.settings.Settings$DataUsageSummaryActivity")); + intent.setComponent(ComponentName.unflattenFromString( + res.getString(R.string.config_dataUsageSummaryComponent))); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.putExtra(EXTRA_NETWORK_TEMPLATE, template); return intent; diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java index eb85f191304e..b1468f182fd3 100644 --- a/services/core/java/com/android/server/notification/NotificationManagerService.java +++ b/services/core/java/com/android/server/notification/NotificationManagerService.java @@ -140,7 +140,6 @@ import com.android.server.lights.LightsManager; import com.android.server.notification.ManagedServices.ManagedServiceInfo; import com.android.server.policy.PhoneWindowManager; import com.android.server.statusbar.StatusBarManagerInternal; -import com.android.server.vr.VrManagerInternal; import com.android.server.notification.ManagedServices.UserProfiles; import libcore.io.IoUtils; @@ -232,7 +231,6 @@ public class NotificationManagerService extends SystemService { AudioManagerInternal mAudioManagerInternal; @Nullable StatusBarManagerInternal mStatusBar; Vibrator mVibrator; - private VrManagerInternal mVrManagerInternal; private WindowManagerInternal mWindowManagerInternal; final IBinder mForegroundToken = new Binder(); @@ -1128,7 +1126,6 @@ public class NotificationManagerService extends SystemService { // Grab our optional AudioService mAudioManager = (AudioManager) getContext().getSystemService(Context.AUDIO_SERVICE); mAudioManagerInternal = getLocalService(AudioManagerInternal.class); - mVrManagerInternal = getLocalService(VrManagerInternal.class); mWindowManagerInternal = LocalServices.getService(WindowManagerInternal.class); mZenModeHelper.onSystemReady(); } else if (phase == SystemService.PHASE_THIRD_PARTY_APPS_CAN_START) { diff --git a/services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java b/services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java index ded85f3da3d6..33c297d2c907 100644 --- a/services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java +++ b/services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java @@ -150,6 +150,9 @@ final class DefaultPermissionGrantPolicy { private static final int MSG_READ_DEFAULT_PERMISSION_EXCEPTIONS = 1; + private static final String ACTION_TWINNING = + "com.google.android.clockwork.intent.TWINNING_SETTINGS"; + private final PackageManagerService mService; private final Handler mHandler; @@ -603,8 +606,9 @@ final class DefaultPermissionGrantPolicy { grantRuntimePermissionsLPw(musicPackage, STORAGE_PERMISSIONS, userId); } - // Android Wear Home + // Android Wear if (mService.hasSystemFeature(PackageManager.FEATURE_WATCH, 0)) { + // Android Wear Home Intent homeIntent = new Intent(Intent.ACTION_MAIN); homeIntent.addCategory(Intent.CATEGORY_HOME_MAIN); @@ -621,6 +625,17 @@ final class DefaultPermissionGrantPolicy { grantRuntimePermissionsLPw(wearHomePackage, LOCATION_PERMISSIONS, false, userId); } + + // Android Wear Twinning + Intent twinningIntent = new Intent(ACTION_TWINNING); + PackageParser.Package twinningPackage = getDefaultSystemHandlerActivityPackageLPr( + twinningIntent, userId); + + if (twinningPackage != null + && doesPackageSupportRuntimePermissions(twinningPackage)) { + grantRuntimePermissionsLPw(twinningPackage, PHONE_PERMISSIONS, false, userId); + grantRuntimePermissionsLPw(twinningPackage, SMS_PERMISSIONS, false, userId); + } } // Print Spooler diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index c360c901d485..8419b98d3bc9 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -463,6 +463,12 @@ public class PackageManagerService extends IPackageManager.Stub { private static final String PACKAGE_SCHEME = "package"; private static final String VENDOR_OVERLAY_DIR = "/vendor/overlay"; + /** + * If VENDOR_OVERLAY_SKU_PROPERTY is set, search for runtime resource overlay APKs in + * VENDOR_OVERLAY_DIR/<value of VENDOR_OVERLAY_SKU_PROPERTY> rather than in + * VENDOR_OVERLAY_DIR. + */ + private static final String VENDOR_OVERLAY_SKU_PROPERTY = "ro.boot.vendor.overlay.sku"; private static int DEFAULT_EPHEMERAL_HASH_PREFIX_MASK = 0xFFFFF000; private static int DEFAULT_EPHEMERAL_HASH_PREFIX_COUNT = 5; @@ -2268,8 +2274,14 @@ public class PackageManagerService extends IPackageManager.Stub { // Collect vendor overlay packages. // (Do this before scanning any apps.) // For security and version matching reason, only consider - // overlay packages if they reside in VENDOR_OVERLAY_DIR. - File vendorOverlayDir = new File(VENDOR_OVERLAY_DIR); + // overlay packages if they reside in the right directory. + File vendorOverlayDir; + String overlaySkuDir = SystemProperties.get(VENDOR_OVERLAY_SKU_PROPERTY); + if (!overlaySkuDir.isEmpty()) { + vendorOverlayDir = new File(VENDOR_OVERLAY_DIR, overlaySkuDir); + } else { + vendorOverlayDir = new File(VENDOR_OVERLAY_DIR); + } scanDirTracedLI(vendorOverlayDir, mDefParseFlags | PackageParser.PARSE_IS_SYSTEM | PackageParser.PARSE_IS_SYSTEM_DIR diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java index 7162b9466a56..46a236d331fa 100644 --- a/services/core/java/com/android/server/policy/PhoneWindowManager.java +++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java @@ -182,6 +182,8 @@ public class PhoneWindowManager implements WindowManagerPolicy { // No longer recommended for desk docks; static final boolean ENABLE_DESK_DOCK_HOME_CAPTURE = false; + static final boolean ALTERNATE_CAR_MODE_NAV_SIZE = false; + static final int SHORT_PRESS_POWER_NOTHING = 0; static final int SHORT_PRESS_POWER_GO_TO_SLEEP = 1; static final int SHORT_PRESS_POWER_REALLY_GO_TO_SLEEP = 2; @@ -200,6 +202,11 @@ public class PhoneWindowManager implements WindowManagerPolicy { static final int MULTI_PRESS_POWER_THEATER_MODE = 1; static final int MULTI_PRESS_POWER_BRIGHTNESS_BOOST = 2; + // Number of presses needed before we induce panic press behavior on the back button + static final int PANIC_PRESS_BACK_COUNT = 4; + static final int PANIC_PRESS_BACK_NOTHING = 0; + static final int PANIC_PRESS_BACK_HOME = 1; + // These need to match the documentation/constant in // core/res/res/values/config.xml static final int LONG_PRESS_HOME_NOTHING = 0; @@ -409,6 +416,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { volatile boolean mBackKeyHandled; volatile boolean mBeganFromNonInteractive; volatile int mPowerKeyPressCounter; + volatile int mBackKeyPressCounter; volatile boolean mEndCallKeyHandled; volatile boolean mCameraGestureTriggeredDuringGoingToSleep; volatile boolean mGoingToSleep; @@ -467,6 +475,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { int mDoublePressOnPowerBehavior; int mTriplePressOnPowerBehavior; int mLongPressOnBackBehavior; + int mPanicPressOnBackBehavior; int mShortPressOnSleepBehavior; int mShortPressWindowBehavior; boolean mAwake; @@ -640,6 +649,9 @@ public class PhoneWindowManager implements WindowManagerPolicy { // (See Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR.) int mIncallPowerBehavior; + // Behavior of Back button while in-call and screen on + int mIncallBackBehavior; + Display mDisplay; private int mDisplayRotation; @@ -729,6 +741,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { private static final int MSG_SHOW_TV_PICTURE_IN_PICTURE_MENU = 17; private static final int MSG_BACK_LONG_PRESS = 18; private static final int MSG_DISPOSE_INPUT_CONSUMER = 19; + private static final int MSG_BACK_DELAYED_PRESS = 20; private static final int MSG_REQUEST_TRANSIENT_BARS_ARG_STATUS = 0; private static final int MSG_REQUEST_TRANSIENT_BARS_ARG_NAVIGATION = 1; @@ -795,10 +808,15 @@ public class PhoneWindowManager implements WindowManagerPolicy { break; case MSG_BACK_LONG_PRESS: backLongPress(); + finishBackKeyPress(); break; case MSG_DISPOSE_INPUT_CONSUMER: disposeInputConsumer((InputConsumer) msg.obj); break; + case MSG_BACK_DELAYED_PRESS: + backMultiPressAction((Long) msg.obj, msg.arg1); + finishBackKeyPress(); + break; } } } @@ -825,6 +843,9 @@ public class PhoneWindowManager implements WindowManagerPolicy { Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR), false, this, UserHandle.USER_ALL); resolver.registerContentObserver(Settings.Secure.getUriFor( + Settings.Secure.INCALL_BACK_BUTTON_BEHAVIOR), false, this, + UserHandle.USER_ALL); + resolver.registerContentObserver(Settings.Secure.getUriFor( Settings.Secure.WAKE_GESTURE_ENABLED), false, this, UserHandle.USER_ALL); resolver.registerContentObserver(Settings.System.getUriFor( @@ -1013,6 +1034,73 @@ public class PhoneWindowManager implements WindowManagerPolicy { } } + private void interceptBackKeyDown() { + // Reset back key state for long press + mBackKeyHandled = false; + + // Cancel multi-press detection timeout. + if (hasPanicPressOnBackBehavior()) { + if (mBackKeyPressCounter != 0 + && mBackKeyPressCounter < PANIC_PRESS_BACK_COUNT) { + mHandler.removeMessages(MSG_BACK_DELAYED_PRESS); + } + } + + if (hasLongPressOnBackBehavior()) { + Message msg = mHandler.obtainMessage(MSG_BACK_LONG_PRESS); + msg.setAsynchronous(true); + mHandler.sendMessageDelayed(msg, + ViewConfiguration.get(mContext).getDeviceGlobalActionKeyTimeout()); + } + } + + // returns true if the key was handled and should not be passed to the user + private boolean interceptBackKeyUp(KeyEvent event) { + // Cache handled state + boolean handled = mBackKeyHandled; + + if (hasPanicPressOnBackBehavior()) { + // Check for back key panic press + ++mBackKeyPressCounter; + + final long eventTime = event.getDownTime(); + + if (mBackKeyPressCounter <= PANIC_PRESS_BACK_COUNT) { + // This could be a multi-press. Wait a little bit longer to confirm. + Message msg = mHandler.obtainMessage(MSG_BACK_DELAYED_PRESS, + mBackKeyPressCounter, 0, eventTime); + msg.setAsynchronous(true); + mHandler.sendMessageDelayed(msg, ViewConfiguration.getMultiPressTimeout()); + } + } + + // Reset back long press state + cancelPendingBackKeyAction(); + + if (mHasFeatureWatch) { + TelecomManager telecomManager = getTelecommService(); + + if (telecomManager != null) { + if (telecomManager.isRinging()) { + // Pressing back while there's a ringing incoming + // call should silence the ringer. + telecomManager.silenceRinger(); + + // It should not prevent navigating away + return false; + } else if ( + (mIncallBackBehavior & Settings.Secure.INCALL_BACK_BUTTON_BEHAVIOR_HANGUP) != 0 + && telecomManager.isInCall()) { + // Otherwise, if "Back button ends call" is enabled, + // the Back button will hang up any current active call. + return telecomManager.endCall(); + } + } + } + + return handled; + } + private void interceptPowerKeyDown(KeyEvent event, boolean interactive) { // Hold a wake lock until the power key is released. if (!mPowerKeyWakeLock.isHeld()) { @@ -1143,6 +1231,10 @@ public class PhoneWindowManager implements WindowManagerPolicy { } } + private void finishBackKeyPress() { + mBackKeyPressCounter = 0; + } + private void cancelPendingPowerKeyAction() { if (!mPowerKeyHandled) { mPowerKeyHandled = true; @@ -1157,6 +1249,18 @@ public class PhoneWindowManager implements WindowManagerPolicy { } } + private void backMultiPressAction(long eventTime, int count) { + if (count >= PANIC_PRESS_BACK_COUNT) { + switch (mPanicPressOnBackBehavior) { + case PANIC_PRESS_BACK_NOTHING: + break; + case PANIC_PRESS_BACK_HOME: + launchHomeFromHotKey(); + break; + } + } + } + private void powerPress(long eventTime, boolean interactive, int count) { if (mScreenOnEarly && !mScreenOnFully) { Slog.i(TAG, "Suppressed redundant power key press while " @@ -1271,8 +1375,13 @@ public class PhoneWindowManager implements WindowManagerPolicy { case LONG_PRESS_BACK_NOTHING: break; case LONG_PRESS_BACK_GO_TO_VOICE_ASSIST: - Intent intent = new Intent(Intent.ACTION_VOICE_ASSIST); - startActivityAsUser(intent, UserHandle.CURRENT_OR_SELF); + final boolean keyguardActive = mKeyguardDelegate == null + ? false + : mKeyguardDelegate.isShowing(); + if (!keyguardActive) { + Intent intent = new Intent(Intent.ACTION_VOICE_ASSIST); + startActivityAsUser(intent, UserHandle.CURRENT_OR_SELF); + } break; } } @@ -1315,6 +1424,10 @@ public class PhoneWindowManager implements WindowManagerPolicy { return mLongPressOnBackBehavior != LONG_PRESS_BACK_NOTHING; } + private boolean hasPanicPressOnBackBehavior() { + return mPanicPressOnBackBehavior != PANIC_PRESS_BACK_NOTHING; + } + private void interceptScreenshotChord() { if (mScreenshotChordEnabled && mScreenshotChordVolumeDownKeyTriggered && mScreenshotChordPowerKeyTriggered @@ -1642,6 +1755,8 @@ public class PhoneWindowManager implements WindowManagerPolicy { mLongPressOnBackBehavior = mContext.getResources().getInteger( com.android.internal.R.integer.config_longPressOnBackBehavior); + mPanicPressOnBackBehavior = mContext.getResources().getInteger( + com.android.internal.R.integer.config_backPanicBehavior); mShortPressOnPowerBehavior = mContext.getResources().getInteger( com.android.internal.R.integer.config_shortPressOnPowerBehavior); @@ -1939,6 +2054,10 @@ public class PhoneWindowManager implements WindowManagerPolicy { Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR, Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR_DEFAULT, UserHandle.USER_CURRENT); + mIncallBackBehavior = Settings.Secure.getIntForUser(resolver, + Settings.Secure.INCALL_BACK_BUTTON_BEHAVIOR, + Settings.Secure.INCALL_BACK_BUTTON_BEHAVIOR_DEFAULT, + UserHandle.USER_CURRENT); // Configure wake gesture. boolean wakeGestureEnabledSetting = Settings.Secure.getIntForUser(resolver, @@ -2336,22 +2455,24 @@ public class PhoneWindowManager implements WindowManagerPolicy { mNavigationBarWidthForRotationDefault[mSeascapeRotation] = res.getDimensionPixelSize(com.android.internal.R.dimen.navigation_bar_width); - // Height of the navigation bar when presented horizontally at bottom - mNavigationBarHeightForRotationInCarMode[mPortraitRotation] = - mNavigationBarHeightForRotationInCarMode[mUpsideDownRotation] = - res.getDimensionPixelSize( - com.android.internal.R.dimen.navigation_bar_height_car_mode); - mNavigationBarHeightForRotationInCarMode[mLandscapeRotation] = - mNavigationBarHeightForRotationInCarMode[mSeascapeRotation] = res.getDimensionPixelSize( - com.android.internal.R.dimen.navigation_bar_height_landscape_car_mode); + if (ALTERNATE_CAR_MODE_NAV_SIZE) { + // Height of the navigation bar when presented horizontally at bottom + mNavigationBarHeightForRotationInCarMode[mPortraitRotation] = + mNavigationBarHeightForRotationInCarMode[mUpsideDownRotation] = + res.getDimensionPixelSize( + com.android.internal.R.dimen.navigation_bar_height_car_mode); + mNavigationBarHeightForRotationInCarMode[mLandscapeRotation] = + mNavigationBarHeightForRotationInCarMode[mSeascapeRotation] = res.getDimensionPixelSize( + com.android.internal.R.dimen.navigation_bar_height_landscape_car_mode); - // Width of the navigation bar when presented vertically along one side - mNavigationBarWidthForRotationInCarMode[mPortraitRotation] = - mNavigationBarWidthForRotationInCarMode[mUpsideDownRotation] = - mNavigationBarWidthForRotationInCarMode[mLandscapeRotation] = - mNavigationBarWidthForRotationInCarMode[mSeascapeRotation] = - res.getDimensionPixelSize( - com.android.internal.R.dimen.navigation_bar_width_car_mode); + // Width of the navigation bar when presented vertically along one side + mNavigationBarWidthForRotationInCarMode[mPortraitRotation] = + mNavigationBarWidthForRotationInCarMode[mUpsideDownRotation] = + mNavigationBarWidthForRotationInCarMode[mLandscapeRotation] = + mNavigationBarWidthForRotationInCarMode[mSeascapeRotation] = + res.getDimensionPixelSize( + com.android.internal.R.dimen.navigation_bar_width_car_mode); + } } /** {@inheritDoc} */ @@ -2483,7 +2604,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { } private int getNavigationBarWidth(int rotation, int uiMode) { - if ((uiMode & UI_MODE_TYPE_MASK) == UI_MODE_TYPE_CAR) { + if (ALTERNATE_CAR_MODE_NAV_SIZE && (uiMode & UI_MODE_TYPE_MASK) == UI_MODE_TYPE_CAR) { return mNavigationBarWidthForRotationInCarMode[rotation]; } else { return mNavigationBarWidthForRotationDefault[rotation]; @@ -2504,7 +2625,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { } private int getNavigationBarHeight(int rotation, int uiMode) { - if ((uiMode & UI_MODE_TYPE_MASK) == UI_MODE_TYPE_CAR) { + if (ALTERNATE_CAR_MODE_NAV_SIZE && (uiMode & UI_MODE_TYPE_MASK) == UI_MODE_TYPE_CAR) { return mNavigationBarHeightForRotationInCarMode[rotation]; } else { return mNavigationBarHeightForRotationDefault[rotation]; @@ -5663,20 +5784,11 @@ public class PhoneWindowManager implements WindowManagerPolicy { switch (keyCode) { case KeyEvent.KEYCODE_BACK: { if (down) { - mBackKeyHandled = false; - if (hasLongPressOnBackBehavior()) { - Message msg = mHandler.obtainMessage(MSG_BACK_LONG_PRESS); - msg.setAsynchronous(true); - mHandler.sendMessageDelayed(msg, - ViewConfiguration.get(mContext).getDeviceGlobalActionKeyTimeout()); - } + interceptBackKeyDown(); } else { - boolean handled = mBackKeyHandled; - - // Reset back key state - cancelPendingBackKeyAction(); + boolean handled = interceptBackKeyUp(event); - // Don't pass back press to app if we've already handled it + // Don't pass back press to app if we've already handled it via long press if (handled) { result &= ~ACTION_PASS_TO_USER; } @@ -7992,6 +8104,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { pw.print(" mLockScreenTimerActive="); pw.println(mLockScreenTimerActive); pw.print(prefix); pw.print("mEndcallBehavior="); pw.print(mEndcallBehavior); pw.print(" mIncallPowerBehavior="); pw.print(mIncallPowerBehavior); + pw.print(" mIncallBackBehavior="); pw.print(mIncallBackBehavior); pw.print(" mLongPressOnHomeBehavior="); pw.println(mLongPressOnHomeBehavior); pw.print(prefix); pw.print("mLandscapeRotation="); pw.print(mLandscapeRotation); pw.print(" mSeascapeRotation="); pw.println(mSeascapeRotation); diff --git a/services/core/java/com/android/server/power/PowerManagerService.java b/services/core/java/com/android/server/power/PowerManagerService.java index 01288b81a6c5..554696d666c5 100644 --- a/services/core/java/com/android/server/power/PowerManagerService.java +++ b/services/core/java/com/android/server/power/PowerManagerService.java @@ -669,10 +669,12 @@ public final class PowerManagerService extends SystemService false, mSettingsObserver, UserHandle.USER_ALL); IVrManager vrManager = (IVrManager) getBinderService(VrManagerService.VR_MANAGER_BINDER_SERVICE); - try { - vrManager.registerListener(mVrStateCallbacks); - } catch (RemoteException e) { - Slog.e(TAG, "Failed to register VR mode state listener: " + e); + if (vrManager != null) { + try { + vrManager.registerListener(mVrStateCallbacks); + } catch (RemoteException e) { + Slog.e(TAG, "Failed to register VR mode state listener: " + e); + } } // Go. readConfigurationLocked(); diff --git a/services/core/java/com/android/server/wm/AppTransition.java b/services/core/java/com/android/server/wm/AppTransition.java index e4ec295fa34e..cd46165b56b3 100644 --- a/services/core/java/com/android/server/wm/AppTransition.java +++ b/services/core/java/com/android/server/wm/AppTransition.java @@ -374,6 +374,7 @@ public class AppTransition implements Dump { void goodToGo(AppWindowAnimator topOpeningAppAnimator, AppWindowAnimator topClosingAppAnimator, ArraySet<AppWindowToken> openingApps, ArraySet<AppWindowToken> closingApps) { + int appTransition = mNextAppTransition; mNextAppTransition = TRANSIT_UNSET; mAppTransitionState = APP_STATE_RUNNING; notifyAppTransitionStartingLocked( @@ -382,7 +383,7 @@ public class AppTransition implements Dump { topOpeningAppAnimator != null ? topOpeningAppAnimator.animation : null, topClosingAppAnimator != null ? topClosingAppAnimator.animation : null); mService.getDefaultDisplayContentLocked().getDockedDividerController() - .notifyAppTransitionStarting(openingApps); + .notifyAppTransitionStarting(openingApps, appTransition); // Prolong the start for the transition when docking a task from recents, unless recents // ended it already then we don't need to wait. diff --git a/services/core/java/com/android/server/wm/AppWindowToken.java b/services/core/java/com/android/server/wm/AppWindowToken.java index a8a0b0efb784..b1d2edfcbdda 100644 --- a/services/core/java/com/android/server/wm/AppWindowToken.java +++ b/services/core/java/com/android/server/wm/AppWindowToken.java @@ -846,6 +846,9 @@ class AppWindowToken extends WindowToken { void overridePlayingAppAnimations(Animation a) { if (mAppAnimator.isAnimating()) { final WindowState win = findMainWindow(); + if (win == null) { + return; + } final int width = win.mContainingFrame.width(); final int height = win.mContainingFrame.height(); mAppAnimator.setAnimation(a, width, height, false, STACK_CLIP_NONE); diff --git a/services/core/java/com/android/server/wm/DockedStackDividerController.java b/services/core/java/com/android/server/wm/DockedStackDividerController.java index f8d2ee931d04..6f0a43a20e8a 100644 --- a/services/core/java/com/android/server/wm/DockedStackDividerController.java +++ b/services/core/java/com/android/server/wm/DockedStackDividerController.java @@ -29,6 +29,7 @@ import static android.view.WindowManager.DOCKED_RIGHT; import static android.view.WindowManager.DOCKED_TOP; import static com.android.server.wm.AppTransition.DEFAULT_APP_TRANSITION_DURATION; import static com.android.server.wm.AppTransition.TOUCH_RESPONSE_INTERPOLATOR; +import static com.android.server.wm.AppTransition.TRANSIT_NONE; import static com.android.server.wm.WindowManagerDebugConfig.TAG_WITH_CLASS_NAME; import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM; import static com.android.server.wm.WindowManagerService.H.NOTIFY_DOCKED_STACK_MINIMIZED_CHANGED; @@ -493,7 +494,7 @@ public class DockedStackDividerController implements DimLayerUser { checkMinimizeChanged(false /* animate */); } - void notifyAppTransitionStarting(ArraySet<AppWindowToken> openingApps) { + void notifyAppTransitionStarting(ArraySet<AppWindowToken> openingApps, int appTransition) { final boolean wasMinimized = mMinimizedDock; checkMinimizeChanged(true /* animate */); @@ -502,7 +503,8 @@ public class DockedStackDividerController implements DimLayerUser { // any case that was missed in ActivityStarter.postStartActivityUncheckedProcessing because // we couldn't retrace the launch of the app in the docked stack to the launch from // homescreen. - if (wasMinimized && mMinimizedDock && containsAppInDockedStack(openingApps)) { + if (wasMinimized && mMinimizedDock && containsAppInDockedStack(openingApps) + && appTransition != TRANSIT_NONE) { mService.showRecentApps(true /* fromHome */); } } diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java index 45014ec07178..fc14444ba6ef 100644 --- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java +++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java @@ -6011,8 +6011,10 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { updateDeviceOwnerLocked(); disableDeviceOwnerManagedSingleUserFeaturesIfNeeded(); try { - // Reactivate backup service. - mInjector.getIBackupManager().setBackupServiceActive(UserHandle.USER_SYSTEM, true); + if (mInjector.getIBackupManager() != null) { + // Reactivate backup service. + mInjector.getIBackupManager().setBackupServiceActive(UserHandle.USER_SYSTEM, true); + } } catch (RemoteException e) { throw new IllegalStateException("Failed reactivating backup service.", e); } diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java index 7ebdd3109a2c..0de6b7790856 100644 --- a/services/java/com/android/server/SystemServer.java +++ b/services/java/com/android/server/SystemServer.java @@ -549,9 +549,15 @@ public final class SystemServer { false); boolean disableTrustManager = SystemProperties.getBoolean("config.disable_trustmanager", false); - boolean disableTextServices = SystemProperties.getBoolean("config.disable_textservices", false); + boolean disableTextServices = SystemProperties.getBoolean("config.disable_textservices", + false); boolean disableSamplingProfiler = SystemProperties.getBoolean("config.disable_samplingprof", false); + boolean disableConsumerIr = SystemProperties.getBoolean("config.disable_consumerir", false); + boolean disableVrManager = SystemProperties.getBoolean("config.disable_vrmanager", false); + boolean disableCameraService = SystemProperties.getBoolean("config.disable_cameraservice", + false); + boolean isEmulator = SystemProperties.get("ro.kernel.qemu").equals("1"); try { @@ -575,8 +581,10 @@ public final class SystemServer { mContentResolver = context.getContentResolver(); - Slog.i(TAG, "Camera Service"); - mSystemServiceManager.startService(CameraService.class); + if (!disableCameraService) { + Slog.i(TAG, "Camera Service"); + mSystemServiceManager.startService(CameraService.class); + } // The AccountManager must come before the ContentService traceBeginAndSlog("StartAccountManagerService"); @@ -596,10 +604,12 @@ public final class SystemServer { ServiceManager.addService("vibrator", vibrator); Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER); - traceBeginAndSlog("StartConsumerIrService"); - consumerIr = new ConsumerIrService(context); - ServiceManager.addService(Context.CONSUMER_IR_SERVICE, consumerIr); - Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER); + if (!disableConsumerIr) { + traceBeginAndSlog("StartConsumerIrService"); + consumerIr = new ConsumerIrService(context); + ServiceManager.addService(Context.CONSUMER_IR_SERVICE, consumerIr); + Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER); + } traceBeginAndSlog("StartAlarmManagerService"); mSystemServiceManager.startService(AlarmManagerService.class); @@ -622,9 +632,11 @@ public final class SystemServer { ServiceManager.addService(Context.INPUT_SERVICE, inputManager); Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER); - traceBeginAndSlog("StartVrManagerService"); - mSystemServiceManager.startService(VrManagerService.class); - Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER); + if (!disableVrManager) { + traceBeginAndSlog("StartVrManagerService"); + mSystemServiceManager.startService(VrManagerService.class); + Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER); + } mActivityManagerService.setWindowManager(wm); |