Merge "update HWC data structures even when a layer is marked for SKIP"
diff --git a/Android.mk b/Android.mk
index b61936f..ea8314c 100644
--- a/Android.mk
+++ b/Android.mk
@@ -116,15 +116,10 @@
core/java/android/net/INetworkPolicyListener.aidl \
core/java/android/net/INetworkPolicyManager.aidl \
core/java/android/net/INetworkStatsService.aidl \
- core/java/android/nfc/ILlcpConnectionlessSocket.aidl \
- core/java/android/nfc/ILlcpServiceSocket.aidl \
- core/java/android/nfc/ILlcpSocket.aidl \
core/java/android/nfc/INdefPushCallback.aidl \
core/java/android/nfc/INfcAdapter.aidl \
core/java/android/nfc/INfcAdapterExtras.aidl \
core/java/android/nfc/INfcTag.aidl \
- core/java/android/nfc/IP2pInitiator.aidl \
- core/java/android/nfc/IP2pTarget.aidl \
core/java/android/os/IHardwareService.aidl \
core/java/android/os/IMessenger.aidl \
core/java/android/os/INetworkManagementService.aidl \
diff --git a/CleanSpec.mk b/CleanSpec.mk
index f3eaeeb..a87293d 100644
--- a/CleanSpec.mk
+++ b/CleanSpec.mk
@@ -101,6 +101,7 @@
$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/framework_intermediates/src/core/java/android/os)
$(call add-clean-step, rm -rf $(OUT_DIR)target/common/obj/JAVA_LIBRARIES/framework_intermediates/src/keystore/java/android/security/IKeyChainAliasResponse.java)
$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/framework_intermediates/src/vpn)
+$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/framework_intermediates/src/core/java/android/nfc)
# ************************************************
# NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST
# ************************************************
diff --git a/api/current.txt b/api/current.txt
index 7cb3bfb..6cef3a7 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -183,19 +183,19 @@
public static final class R.attr {
ctor public R.attr();
field public static final int absListViewStyle = 16842858; // 0x101006a
- field public static final int accessibilityEventTypes = 16843646; // 0x101037e
- field public static final int accessibilityFeedbackType = 16843648; // 0x1010380
- field public static final int accessibilityFlags = 16843650; // 0x1010382
+ field public static final int accessibilityEventTypes = 16843644; // 0x101037c
+ field public static final int accessibilityFeedbackType = 16843646; // 0x101037e
+ field public static final int accessibilityFlags = 16843648; // 0x1010380
field public static final int accountPreferences = 16843423; // 0x101029f
field public static final int accountType = 16843407; // 0x101028f
field public static final int action = 16842797; // 0x101002d
field public static final int actionBarSize = 16843499; // 0x10102eb
- field public static final int actionBarSplitStyle = 16843668; // 0x1010394
+ field public static final int actionBarSplitStyle = 16843666; // 0x1010392
field public static final int actionBarStyle = 16843470; // 0x10102ce
field public static final int actionBarTabBarStyle = 16843508; // 0x10102f4
field public static final int actionBarTabStyle = 16843507; // 0x10102f3
field public static final int actionBarTabTextStyle = 16843509; // 0x10102f5
- field public static final int actionBarWidgetTheme = 16843683; // 0x10103a3
+ field public static final int actionBarWidgetTheme = 16843681; // 0x10103a1
field public static final int actionButtonStyle = 16843480; // 0x10102d8
field public static final int actionDropDownStyle = 16843479; // 0x10102d7
field public static final int actionLayout = 16843515; // 0x10102fb
@@ -207,10 +207,10 @@
field public static final int actionModeCopyDrawable = 16843538; // 0x1010312
field public static final int actionModeCutDrawable = 16843537; // 0x1010311
field public static final int actionModePasteDrawable = 16843539; // 0x1010313
- field public static final int actionModeSelectAllDrawable = 16843644; // 0x101037c
- field public static final int actionModeStyle = 16843680; // 0x10103a0
+ field public static final int actionModeSelectAllDrawable = 16843642; // 0x101037a
+ field public static final int actionModeStyle = 16843678; // 0x101039e
field public static final int actionOverflowButtonStyle = 16843510; // 0x10102f6
- field public static final int actionProviderClass = 16843669; // 0x1010395
+ field public static final int actionProviderClass = 16843667; // 0x1010393
field public static final int actionViewClass = 16843516; // 0x10102fc
field public static final int activatedBackgroundIndicator = 16843517; // 0x10102fd
field public static final int activityCloseEnterAnimation = 16842938; // 0x10100ba
@@ -256,8 +256,8 @@
field public static final int background = 16842964; // 0x10100d4
field public static final int backgroundDimAmount = 16842802; // 0x1010032
field public static final int backgroundDimEnabled = 16843295; // 0x101021f
- field public static final int backgroundSplit = 16843671; // 0x1010397
- field public static final int backgroundStacked = 16843670; // 0x1010396
+ field public static final int backgroundSplit = 16843669; // 0x1010395
+ field public static final int backgroundStacked = 16843668; // 0x1010394
field public static final int backupAgent = 16843391; // 0x101027f
field public static final int baseline = 16843548; // 0x101031c
field public static final int baselineAlignBottom = 16843042; // 0x1010122
@@ -266,7 +266,7 @@
field public static final int borderlessButtonStyle = 16843563; // 0x101032b
field public static final int bottom = 16843184; // 0x10101b0
field public static final int bottomBright = 16842957; // 0x10100cd
- field public static final int bottomChevronDrawable = 16843657; // 0x1010389
+ field public static final int bottomChevronDrawable = 16843655; // 0x1010387
field public static final int bottomDark = 16842953; // 0x10100c9
field public static final int bottomLeftRadius = 16843179; // 0x10101ab
field public static final int bottomMedium = 16842958; // 0x10100ce
@@ -285,7 +285,7 @@
field public static final int cacheColorHint = 16843009; // 0x1010101
field public static final int calendarViewShown = 16843596; // 0x101034c
field public static final int calendarViewStyle = 16843613; // 0x101035d
- field public static final int canRetrieveWindowContent = 16843651; // 0x1010383
+ field public static final int canRetrieveWindowContent = 16843649; // 0x1010381
field public static final int candidatesTextStyleSpans = 16843312; // 0x1010230
field public static final deprecated int capitalize = 16843113; // 0x1010169
field public static final int centerBright = 16842956; // 0x10100cc
@@ -314,15 +314,15 @@
field public static final int codes = 16843330; // 0x1010242
field public static final int collapseColumns = 16843083; // 0x101014b
field public static final int color = 16843173; // 0x10101a5
- field public static final int colorActivatedHighlight = 16843676; // 0x101039c
+ field public static final int colorActivatedHighlight = 16843674; // 0x101039a
field public static final int colorBackground = 16842801; // 0x1010031
field public static final int colorBackgroundCacheHint = 16843435; // 0x10102ab
- field public static final int colorFocusedHighlight = 16843675; // 0x101039b
+ field public static final int colorFocusedHighlight = 16843673; // 0x1010399
field public static final int colorForeground = 16842800; // 0x1010030
field public static final int colorForegroundInverse = 16843270; // 0x1010206
- field public static final int colorLongPressedHighlight = 16843674; // 0x101039a
- field public static final int colorMultiSelectHighlight = 16843677; // 0x101039d
- field public static final int colorPressedHighlight = 16843673; // 0x1010399
+ field public static final int colorLongPressedHighlight = 16843672; // 0x1010398
+ field public static final int colorMultiSelectHighlight = 16843675; // 0x101039b
+ field public static final int colorPressedHighlight = 16843671; // 0x1010397
field public static final int columnCount = 16843635; // 0x1010373
field public static final int columnDelay = 16843215; // 0x10101cf
field public static final int columnOrderPreserved = 16843636; // 0x1010374
@@ -379,11 +379,11 @@
field public static final int drawSelectorOnTop = 16843004; // 0x10100fc
field public static final int drawable = 16843161; // 0x1010199
field public static final int drawableBottom = 16843118; // 0x101016e
- field public static final int drawableEnd = 16843679; // 0x101039f
+ field public static final int drawableEnd = 16843677; // 0x101039d
field public static final int drawableLeft = 16843119; // 0x101016f
field public static final int drawablePadding = 16843121; // 0x1010171
field public static final int drawableRight = 16843120; // 0x1010170
- field public static final int drawableStart = 16843678; // 0x101039e
+ field public static final int drawableStart = 16843676; // 0x101039c
field public static final int drawableTop = 16843117; // 0x101016d
field public static final int drawingCacheQuality = 16842984; // 0x10100e8
field public static final int dropDownAnchor = 16843363; // 0x1010263
@@ -440,7 +440,7 @@
field public static final int fastScrollTextColor = 16843609; // 0x1010359
field public static final int fastScrollThumbDrawable = 16843574; // 0x1010336
field public static final int fastScrollTrackDrawable = 16843577; // 0x1010339
- field public static final int feedbackCount = 16843663; // 0x101038f
+ field public static final int feedbackCount = 16843661; // 0x101038d
field public static final int fillAfter = 16843197; // 0x10101bd
field public static final int fillBefore = 16843196; // 0x10101bc
field public static final int fillEnabled = 16843343; // 0x101024f
@@ -493,7 +493,7 @@
field public static final int hand_hour = 16843011; // 0x1010103
field public static final int hand_minute = 16843012; // 0x1010104
field public static final int handle = 16843354; // 0x101025a
- field public static final int handleDrawable = 16843653; // 0x1010385
+ field public static final int handleDrawable = 16843651; // 0x1010383
field public static final int handleProfiling = 16842786; // 0x1010022
field public static final int hapticFeedbackEnabled = 16843358; // 0x101025e
field public static final int hardwareAccelerated = 16843475; // 0x10102d3
@@ -502,12 +502,12 @@
field public static final int headerDividersEnabled = 16843310; // 0x101022e
field public static final int height = 16843093; // 0x1010155
field public static final int hint = 16843088; // 0x1010150
- field public static final int hitRadius = 16843660; // 0x101038c
+ field public static final int hitRadius = 16843658; // 0x101038a
field public static final int homeAsUpIndicator = 16843531; // 0x101030b
field public static final int homeLayout = 16843549; // 0x101031d
field public static final int horizontalDivider = 16843053; // 0x101012d
field public static final int horizontalGap = 16843327; // 0x101023f
- field public static final int horizontalOffset = 16843665; // 0x1010391
+ field public static final int horizontalOffset = 16843663; // 0x101038f
field public static final int horizontalScrollViewStyle = 16843603; // 0x1010353
field public static final int horizontalSpacing = 16843028; // 0x1010114
field public static final int host = 16842792; // 0x1010028
@@ -553,7 +553,7 @@
field public static final int installLocation = 16843447; // 0x10102b7
field public static final int interpolator = 16843073; // 0x1010141
field public static final int isAlwaysSyncable = 16843571; // 0x1010333
- field public static final int isAuxiliary = 16843645; // 0x101037d
+ field public static final int isAuxiliary = 16843643; // 0x101037b
field public static final int isDefault = 16843297; // 0x1010221
field public static final int isIndicator = 16843079; // 0x1010147
field public static final int isModifier = 16843334; // 0x1010246
@@ -606,8 +606,7 @@
field public static final int layout_centerInParent = 16843151; // 0x101018f
field public static final int layout_centerVertical = 16843153; // 0x1010191
field public static final int layout_column = 16843084; // 0x101014c
- field public static final deprecated int layout_columnFlexibility = 16843643; // 0x101037b
- field public static final int layout_columnSpan = 16843642; // 0x101037a
+ field public static final int layout_columnSpan = 16843641; // 0x1010379
field public static final int layout_gravity = 16842931; // 0x10100b3
field public static final int layout_height = 16842997; // 0x10100f5
field public static final int layout_margin = 16842998; // 0x10100f6
@@ -616,7 +615,6 @@
field public static final int layout_marginRight = 16843001; // 0x10100f9
field public static final int layout_marginTop = 16843000; // 0x10100f8
field public static final int layout_row = 16843639; // 0x1010377
- field public static final deprecated int layout_rowFlexibility = 16843641; // 0x1010379
field public static final int layout_rowSpan = 16843640; // 0x1010378
field public static final int layout_scale = 16843155; // 0x1010193
field public static final int layout_span = 16843085; // 0x101014d
@@ -627,7 +625,7 @@
field public static final int layout_x = 16843135; // 0x101017f
field public static final int layout_y = 16843136; // 0x1010180
field public static final int left = 16843181; // 0x10101ad
- field public static final int leftChevronDrawable = 16843654; // 0x1010386
+ field public static final int leftChevronDrawable = 16843652; // 0x1010384
field public static final int lineSpacingExtra = 16843287; // 0x1010217
field public static final int lineSpacingMultiplier = 16843288; // 0x1010218
field public static final int lines = 16843092; // 0x1010154
@@ -639,8 +637,8 @@
field public static final int listDividerAlertDialog = 16843525; // 0x1010305
field public static final int listPopupWindowStyle = 16843519; // 0x10102ff
field public static final int listPreferredItemHeight = 16842829; // 0x101004d
- field public static final int listPreferredItemHeightLarge = 16843666; // 0x1010392
- field public static final int listPreferredItemHeightSmall = 16843667; // 0x1010393
+ field public static final int listPreferredItemHeightLarge = 16843664; // 0x1010390
+ field public static final int listPreferredItemHeightSmall = 16843665; // 0x1010391
field public static final int listSelector = 16843003; // 0x10100fb
field public static final int listSeparatorTextViewStyle = 16843272; // 0x1010208
field public static final int listViewStyle = 16842868; // 0x1010074
@@ -671,8 +669,8 @@
field public static final int minHeight = 16843072; // 0x1010140
field public static final int minLevel = 16843185; // 0x10101b1
field public static final int minLines = 16843094; // 0x1010156
- field public static final int minResizeHeight = 16843682; // 0x10103a2
- field public static final int minResizeWidth = 16843681; // 0x10103a1
+ field public static final int minResizeHeight = 16843680; // 0x10103a0
+ field public static final int minResizeWidth = 16843679; // 0x101039f
field public static final int minSdkVersion = 16843276; // 0x101020c
field public static final int minWidth = 16843071; // 0x101013f
field public static final int mode = 16843134; // 0x101017e
@@ -688,7 +686,7 @@
field public static final int nextFocusUp = 16842979; // 0x10100e3
field public static final int noHistory = 16843309; // 0x101022d
field public static final int normalScreens = 16843397; // 0x1010285
- field public static final int notificationTimeout = 16843649; // 0x1010381
+ field public static final int notificationTimeout = 16843647; // 0x101037f
field public static final int numColumns = 16843032; // 0x1010118
field public static final int numStars = 16843076; // 0x1010144
field public static final deprecated int numeric = 16843109; // 0x1010165
@@ -702,11 +700,11 @@
field public static final int orderingFromXml = 16843239; // 0x10101e7
field public static final int orientation = 16842948; // 0x10100c4
field public static final int outAnimation = 16843128; // 0x1010178
- field public static final int outerRadius = 16843659; // 0x101038b
+ field public static final int outerRadius = 16843657; // 0x1010389
field public static final int overScrollFooter = 16843459; // 0x10102c3
field public static final int overScrollHeader = 16843458; // 0x10102c2
field public static final int overScrollMode = 16843457; // 0x10102c1
- field public static final int packageNames = 16843647; // 0x101037f
+ field public static final int packageNames = 16843645; // 0x101037d
field public static final int padding = 16842965; // 0x10100d5
field public static final int paddingBottom = 16842969; // 0x10100d9
field public static final int paddingLeft = 16842966; // 0x10100d6
@@ -791,7 +789,7 @@
field public static final int restoreAnyVersion = 16843450; // 0x10102ba
field public static final deprecated int restoreNeedsApplication = 16843421; // 0x101029d
field public static final int right = 16843183; // 0x10101af
- field public static final int rightChevronDrawable = 16843655; // 0x1010387
+ field public static final int rightChevronDrawable = 16843653; // 0x1010385
field public static final int ringtonePreferenceStyle = 16842899; // 0x1010093
field public static final int ringtoneType = 16843257; // 0x10101f9
field public static final int rotation = 16843558; // 0x1010326
@@ -867,7 +865,7 @@
field public static final int smallIcon = 16843422; // 0x101029e
field public static final int smallScreens = 16843396; // 0x1010284
field public static final int smoothScrollbar = 16843313; // 0x1010231
- field public static final int snapMargin = 16843662; // 0x101038e
+ field public static final int snapMargin = 16843660; // 0x101038c
field public static final int soundEffectsEnabled = 16843285; // 0x1010215
field public static final int spacing = 16843027; // 0x1010113
field public static final int spinnerDropDownItemStyle = 16842887; // 0x1010087
@@ -932,7 +930,7 @@
field public static final int tag = 16842961; // 0x10100d1
field public static final int targetActivity = 16843266; // 0x1010202
field public static final int targetClass = 16842799; // 0x101002f
- field public static final int targetDrawables = 16843652; // 0x1010384
+ field public static final int targetDrawables = 16843650; // 0x1010382
field public static final int targetPackage = 16842785; // 0x1010021
field public static final int targetSdkVersion = 16843376; // 0x1010270
field public static final int taskAffinity = 16842770; // 0x1010012
@@ -947,7 +945,7 @@
field public static final int tension = 16843370; // 0x101026a
field public static final int testOnly = 16843378; // 0x1010272
field public static final int text = 16843087; // 0x101014f
- field public static final int textAllCaps = 16843672; // 0x1010398
+ field public static final int textAllCaps = 16843670; // 0x1010396
field public static final int textAppearance = 16842804; // 0x1010034
field public static final int textAppearanceButton = 16843271; // 0x1010207
field public static final int textAppearanceInverse = 16842805; // 0x1010035
@@ -1021,7 +1019,7 @@
field public static final int toYScale = 16843205; // 0x10101c5
field public static final int top = 16843182; // 0x10101ae
field public static final int topBright = 16842955; // 0x10100cb
- field public static final int topChevronDrawable = 16843656; // 0x1010388
+ field public static final int topChevronDrawable = 16843654; // 0x1010386
field public static final int topDark = 16842951; // 0x10100c7
field public static final int topLeftRadius = 16843177; // 0x10101a9
field public static final int topOffset = 16843352; // 0x1010258
@@ -1051,10 +1049,10 @@
field public static final int verticalCorrection = 16843322; // 0x101023a
field public static final int verticalDivider = 16843054; // 0x101012e
field public static final int verticalGap = 16843328; // 0x1010240
- field public static final int verticalOffset = 16843664; // 0x1010390
+ field public static final int verticalOffset = 16843662; // 0x101038e
field public static final int verticalScrollbarPosition = 16843572; // 0x1010334
field public static final int verticalSpacing = 16843029; // 0x1010115
- field public static final int vibrationDuration = 16843661; // 0x101038d
+ field public static final int vibrationDuration = 16843659; // 0x101038b
field public static final int visibility = 16842972; // 0x10100dc
field public static final int visible = 16843156; // 0x1010194
field public static final int vmSafeMode = 16843448; // 0x10102b8
@@ -1071,7 +1069,7 @@
field public static final int wallpaperIntraOpenExitAnimation = 16843416; // 0x1010298
field public static final int wallpaperOpenEnterAnimation = 16843411; // 0x1010293
field public static final int wallpaperOpenExitAnimation = 16843412; // 0x1010294
- field public static final int waveDrawable = 16843658; // 0x101038a
+ field public static final int waveDrawable = 16843656; // 0x1010388
field public static final int webTextViewStyle = 16843449; // 0x10102b9
field public static final int webViewStyle = 16842885; // 0x1010085
field public static final int weekDayTextAppearance = 16843592; // 0x1010348
@@ -3072,6 +3070,7 @@
method public abstract android.app.FragmentManager.BackStackEntry getBackStackEntryAt(int);
method public abstract int getBackStackEntryCount();
method public abstract android.app.Fragment getFragment(android.os.Bundle, java.lang.String);
+ method public void invalidateOptionsMenu();
method public abstract void popBackStack();
method public abstract void popBackStack(java.lang.String, int);
method public abstract void popBackStack(int, int);
@@ -3644,6 +3643,7 @@
public class WallpaperManager {
method public void clear() throws java.io.IOException;
method public void clearWallpaperOffsets(android.os.IBinder);
+ method public void forgetLoadedWallpaper();
method public int getDesiredMinimumHeight();
method public int getDesiredMinimumWidth();
method public android.graphics.drawable.Drawable getDrawable();
@@ -16986,7 +16986,7 @@
field public static final java.lang.String VOICEMAIL_ACCESS_URI = "voicemail_access_uri";
}
- public static final class VoicemailContract.Voicemails implements android.provider.BaseColumns {
+ public static final class VoicemailContract.Voicemails implements android.provider.BaseColumns android.provider.OpenableColumns {
method public static android.net.Uri buildSourceUri(java.lang.String);
field public static final android.net.Uri CONTENT_URI;
field public static final java.lang.String DATE = "date";
@@ -18010,18 +18010,6 @@
field public static final java.lang.String SERVICE_INTERFACE = "android.service.textservice.SpellCheckerService";
}
- public class SpellCheckerSession {
- method public void close();
- method public android.view.textservice.SpellCheckerInfo getSpellChecker();
- method public void getSuggestions(android.view.textservice.TextInfo, int);
- method public void getSuggestions(android.view.textservice.TextInfo[], int, boolean);
- method public boolean isSessionDisconnected();
- }
-
- public static abstract interface SpellCheckerSession.SpellCheckerSessionListener {
- method public abstract void onGetSuggestions(android.view.textservice.SuggestionsInfo[]);
- }
-
}
package android.service.wallpaper {
@@ -24121,6 +24109,19 @@
field public static final android.os.Parcelable.Creator CREATOR;
}
+ public class SpellCheckerSession {
+ method public void close();
+ method public android.view.textservice.SpellCheckerInfo getSpellChecker();
+ method public void getSuggestions(android.view.textservice.TextInfo, int);
+ method public void getSuggestions(android.view.textservice.TextInfo[], int, boolean);
+ method public boolean isSessionDisconnected();
+ field public static final java.lang.String SERVICE_META_DATA = "android.view.textservice.scs";
+ }
+
+ public static abstract interface SpellCheckerSession.SpellCheckerSessionListener {
+ method public abstract void onGetSuggestions(android.view.textservice.SuggestionsInfo[]);
+ }
+
public final class SuggestionsInfo implements android.os.Parcelable {
ctor public SuggestionsInfo(int, java.lang.String[]);
ctor public SuggestionsInfo(int, java.lang.String[], int, int);
@@ -24151,7 +24152,7 @@
}
public final class TextServicesManager {
- method public android.service.textservice.SpellCheckerSession newSpellCheckerSession(java.util.Locale, android.service.textservice.SpellCheckerSession.SpellCheckerSessionListener, boolean);
+ method public android.view.textservice.SpellCheckerSession newSpellCheckerSession(java.util.Locale, android.view.textservice.SpellCheckerSession.SpellCheckerSessionListener, boolean);
}
}
diff --git a/core/java/android/animation/AnimatorSet.java b/core/java/android/animation/AnimatorSet.java
index e6c2a0f..61a12ee 100644
--- a/core/java/android/animation/AnimatorSet.java
+++ b/core/java/android/animation/AnimatorSet.java
@@ -445,7 +445,10 @@
// First, clear out the old listeners
ArrayList<AnimatorListener> oldListeners = node.animation.getListeners();
if (oldListeners != null && oldListeners.size() > 0) {
- for (AnimatorListener listener : oldListeners) {
+ final ArrayList<AnimatorListener> clonedListeners = new
+ ArrayList<AnimatorListener>(oldListeners);
+
+ for (AnimatorListener listener : clonedListeners) {
if (listener instanceof DependencyListener ||
listener instanceof AnimatorSetListener) {
node.animation.removeListener(listener);
diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java
index 8931675..c566104 100644
--- a/core/java/android/app/ActivityThread.java
+++ b/core/java/android/app/ActivityThread.java
@@ -2503,6 +2503,7 @@
mAvailThumbnailBitmap = thumbnail;
thumbnail = null;
}
+ cv.setBitmap(null);
}
} catch (Exception e) {
diff --git a/core/java/android/app/Fragment.java b/core/java/android/app/Fragment.java
index 371e7ad..a8621f8 100644
--- a/core/java/android/app/Fragment.java
+++ b/core/java/android/app/Fragment.java
@@ -30,14 +30,14 @@
import android.util.DebugUtils;
import android.util.SparseArray;
import android.view.ContextMenu;
+import android.view.ContextMenu.ContextMenuInfo;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
-import android.view.ViewGroup;
-import android.view.ContextMenu.ContextMenuInfo;
import android.view.View.OnCreateContextMenuListener;
+import android.view.ViewGroup;
import android.widget.AdapterView;
import java.io.FileDescriptor;
@@ -883,8 +883,8 @@
public void setHasOptionsMenu(boolean hasMenu) {
if (mHasMenu != hasMenu) {
mHasMenu = hasMenu;
- if (isAdded() && !isHidden() && isResumed()) {
- mActivity.invalidateOptionsMenu();
+ if (isAdded() && !isHidden()) {
+ mFragmentManager.invalidateOptionsMenu();
}
}
}
diff --git a/core/java/android/app/FragmentManager.java b/core/java/android/app/FragmentManager.java
index c33ab2c..712b55f 100644
--- a/core/java/android/app/FragmentManager.java
+++ b/core/java/android/app/FragmentManager.java
@@ -315,6 +315,12 @@
public static void enableDebugLogging(boolean enabled) {
FragmentManagerImpl.DEBUG = enabled;
}
+
+ /**
+ * Invalidate the attached activity's options menu as necessary.
+ * This may end up being deferred until we move to the resumed state.
+ */
+ public void invalidateOptionsMenu() { }
}
final class FragmentManagerState implements Parcelable {
@@ -1816,7 +1822,16 @@
}
}
}
-
+
+ @Override
+ public void invalidateOptionsMenu() {
+ if (mActivity != null && mCurState == Fragment.RESUMED) {
+ mActivity.invalidateOptionsMenu();
+ } else {
+ mNeedMenuInvalidate = true;
+ }
+ }
+
public static int reverseTransit(int transit) {
int rev = 0;
switch (transit) {
diff --git a/core/java/android/app/LauncherActivity.java b/core/java/android/app/LauncherActivity.java
index 7b9bd60..8eb9ba4 100644
--- a/core/java/android/app/LauncherActivity.java
+++ b/core/java/android/app/LauncherActivity.java
@@ -314,6 +314,7 @@
icon.draw(canvas);
icon.setBounds(mOldBounds);
icon = new BitmapDrawable(getResources(), thumb);
+ canvas.setBitmap(null);
} else if (iconWidth < width && iconHeight < height) {
final Bitmap.Config c = Bitmap.Config.ARGB_8888;
final Bitmap thumb = Bitmap.createBitmap(mIconWidth, mIconHeight, c);
@@ -326,6 +327,7 @@
icon.draw(canvas);
icon.setBounds(mOldBounds);
icon = new BitmapDrawable(getResources(), thumb);
+ canvas.setBitmap(null);
}
}
diff --git a/core/java/android/app/WallpaperManager.java b/core/java/android/app/WallpaperManager.java
index 8472b31..ff04757 100644
--- a/core/java/android/app/WallpaperManager.java
+++ b/core/java/android/app/WallpaperManager.java
@@ -234,14 +234,25 @@
} catch (OutOfMemoryError e) {
Log.w(TAG, "No memory load current wallpaper", e);
}
- if (mWallpaper == null && returnDefault) {
- mDefaultWallpaper = getDefaultWallpaperLocked(context);
- return mDefaultWallpaper;
+ if (returnDefault) {
+ if (mWallpaper == null) {
+ mDefaultWallpaper = getDefaultWallpaperLocked(context);
+ return mDefaultWallpaper;
+ } else {
+ mDefaultWallpaper = null;
+ }
}
return mWallpaper;
}
}
-
+
+ public void forgetLoadedWallpaper() {
+ synchronized (this) {
+ mWallpaper = null;
+ mDefaultWallpaper = null;
+ }
+ }
+
private Bitmap getCurrentWallpaperLocked(Context context) {
try {
Bundle params = new Bundle();
@@ -402,6 +413,16 @@
}
/**
+ * Remove all internal references to the last loaded wallpaper. Useful
+ * for apps that want to reduce memory usage when they only temporarily
+ * need to have the wallpaper. After calling, the next request for the
+ * wallpaper will require reloading it again from disk.
+ */
+ public void forgetLoadedWallpaper() {
+ sGlobals.forgetLoadedWallpaper();
+ }
+
+ /**
* If the current wallpaper is a live wallpaper component, return the
* information about that wallpaper. Otherwise, if it is a static image,
* simply return null.
@@ -716,6 +737,7 @@
c.drawBitmap(bm, null, targetRect, paint);
bm.recycle();
+ c.setBitmap(null);
return newbm;
} catch (OutOfMemoryError e) {
Log.w(TAG, "Can't generate default bitmap", e);
diff --git a/core/java/android/bluetooth/BluetoothDeviceProfileState.java b/core/java/android/bluetooth/BluetoothDeviceProfileState.java
index 095cd11..316c474 100644
--- a/core/java/android/bluetooth/BluetoothDeviceProfileState.java
+++ b/core/java/android/bluetooth/BluetoothDeviceProfileState.java
@@ -1048,12 +1048,12 @@
break;
case CONNECT_HID_INCOMING:
if (!accept) {
- ret = mService.allowIncomingHidConnect(mDevice, false);
+ ret = mService.allowIncomingProfileConnect(mDevice, false);
sendMessage(TRANSITION_TO_STABLE);
updateIncomingAllowedTimer();
} else {
writeTimerValue(0);
- ret = mService.allowIncomingHidConnect(mDevice, true);
+ ret = mService.allowIncomingProfileConnect(mDevice, true);
}
break;
default:
diff --git a/core/java/android/bluetooth/BluetoothInputDevice.java b/core/java/android/bluetooth/BluetoothInputDevice.java
index f6757d9..282b70a 100644
--- a/core/java/android/bluetooth/BluetoothInputDevice.java
+++ b/core/java/android/bluetooth/BluetoothInputDevice.java
@@ -308,28 +308,6 @@
return BluetoothProfile.PRIORITY_OFF;
}
- /**
- * Allow or disallow incoming connection
- * @param device Input device
- * @param allow true / false
- * @return Success or Failure of the operation
- * @hide
- */
- public boolean allowIncomingConnect(BluetoothDevice device, boolean allow) {
- if (DBG) log("allowIncomingConnect(" + device + ", " + allow + ")");
-
- if (mService == null || !isEnabled() || !isValidDevice(device)) {
- return false;
- }
- try {
- mService.allowIncomingHidConnect(device, allow);
- } catch (RemoteException e) {
- Log.e(TAG, "Stack:" + Log.getStackTraceString(new Throwable()));
- return false;
- }
- return true;
- }
-
private boolean isEnabled() {
if (mAdapter.getState() == BluetoothAdapter.STATE_ON) return true;
return false;
diff --git a/core/java/android/bluetooth/IBluetooth.aidl b/core/java/android/bluetooth/IBluetooth.aidl
index ddede9c..48dfed8 100644
--- a/core/java/android/bluetooth/IBluetooth.aidl
+++ b/core/java/android/bluetooth/IBluetooth.aidl
@@ -85,6 +85,7 @@
int addRfcommServiceRecord(in String serviceName, in ParcelUuid uuid, int channel, IBinder b);
void removeServiceRecord(int handle);
+ boolean allowIncomingProfileConnect(in BluetoothDevice device, boolean value);
boolean connectHeadset(String address);
boolean disconnectHeadset(String address);
@@ -98,7 +99,6 @@
int getInputDeviceConnectionState(in BluetoothDevice device);
boolean setInputDevicePriority(in BluetoothDevice device, int priority);
int getInputDevicePriority(in BluetoothDevice device);
- boolean allowIncomingHidConnect(in BluetoothDevice device, boolean value);
boolean isTetheringOn();
void setBluetoothTethering(boolean value);
diff --git a/core/java/android/hardware/Camera.java b/core/java/android/hardware/Camera.java
index b487764..6767747 100644
--- a/core/java/android/hardware/Camera.java
+++ b/core/java/android/hardware/Camera.java
@@ -131,7 +131,7 @@
private static final int CAMERA_MSG_RAW_IMAGE = 0x080;
private static final int CAMERA_MSG_COMPRESSED_IMAGE = 0x100;
private static final int CAMERA_MSG_RAW_IMAGE_NOTIFY = 0x200;
- private static final int CAMERA_MSG_METADATA_FACE = 0x400;
+ private static final int CAMERA_MSG_PREVIEW_METADATA = 0x400;
private static final int CAMERA_MSG_ALL_MSGS = 0x4FF;
private int mNativeContext; // accessed by native methods
@@ -721,7 +721,7 @@
}
return;
- case CAMERA_MSG_METADATA_FACE:
+ case CAMERA_MSG_PREVIEW_METADATA:
if (mFaceListener != null) {
mFaceListener.onFaceDetection((Face[])msg.obj, mCamera);
}
@@ -1156,6 +1156,9 @@
* @hide
*/
public static class Face {
+ public Face() {
+ }
+
/**
* Bounds of the face. (-1000, -1000) represents the top-left of the
* camera field of view, and (1000, 1000) represents the bottom-right of
@@ -1168,7 +1171,7 @@
*
* @see #startFaceDetection(int)
*/
- Rect rect;
+ public Rect rect;
/**
* The confidence level of the face. The range is 1 to 100. 100 is the
@@ -1177,32 +1180,32 @@
*
* @see #startFaceDetection(int)
*/
- int score;
+ public int score;
/**
* An unique id per face while the face is visible to the tracker. If
* the face leaves the field-of-view and comes back, it will get a new
* id. If the value is 0, id is not supported.
*/
- int id;
+ public int id;
/**
* The coordinates of the center of the left eye. The range is -1000 to
* 1000. null if this is not supported.
*/
- Point leftEye;
+ public Point leftEye;
/**
* The coordinates of the center of the right eye. The range is -1000 to
* 1000. null if this is not supported.
*/
- Point rightEye;
+ public Point rightEye;
/**
* The coordinates of the center of the mouth. The range is -1000 to
* 1000. null if this is not supported.
*/
- Point mouth;
+ public Point mouth;
}
// Error codes match the enum in include/ui/Camera.h
@@ -1471,6 +1474,7 @@
"preferred-preview-size-for-video";
private static final String KEY_MAX_NUM_DETECTED_FACES_HW = "max-num-detected-faces-hw";
private static final String KEY_MAX_NUM_DETECTED_FACES_SW = "max-num-detected-faces-sw";
+ private static final String KEY_RECORDING_HINT = "recording-hint";
// Parameter key suffix for supported values.
private static final String SUPPORTED_VALUES_SUFFIX = "-values";
@@ -3172,6 +3176,37 @@
throw new IllegalArgumentException("Invalid face detection type " + type);
}
+ /**
+ * Sets the hint of the recording mode. If this is true, {@link
+ * android.media.MediaRecorder#start()} may be faster or has less
+ * glitches. This should be called before starting the preview for the
+ * best result. But it is allowed to change the hint while the preview
+ * is active. The default value is false.
+ *
+ * The apps can still call {@link #takePicture(Camera.ShutterCallback,
+ * Camera.PictureCallback, Camera.PictureCallback, Camera.PictureCallback)}
+ * when the hint is true. The apps can call MediaRecorder.start() when
+ * the hint is false. But the performance may be worse.
+ *
+ * @param hint true if the apps intend to record a video using
+ * {@link android.media.MediaRecorder}.
+ * @hide
+ */
+ public void setRecordingHint(boolean hint) {
+ set(KEY_RECORDING_HINT, hint ? TRUE : FALSE);
+ }
+
+ /**
+ * Gets the current recording hint.
+ *
+ * @return the current recording hint state.
+ * @see #setRecordingHint(boolean)
+ * @hide
+ */
+ public boolean getRecordingHint() {
+ return TRUE.equals(get(KEY_RECORDING_HINT));
+ }
+
// Splits a comma delimited string to an ArrayList of String.
// Return null if the passing string is null or the size is 0.
private ArrayList<String> split(String str) {
diff --git a/core/java/android/hardware/usb/UsbManager.java b/core/java/android/hardware/usb/UsbManager.java
index b548623..551926c 100644
--- a/core/java/android/hardware/usb/UsbManager.java
+++ b/core/java/android/hardware/usb/UsbManager.java
@@ -408,6 +408,23 @@
}
/**
+ * Returns the current default USB function.
+ *
+ * @return name of the default function.
+ *
+ * {@hide}
+ */
+ public String getDefaultFunction() {
+ String functions = SystemProperties.get("persist.sys.usb.config", "");
+ int commaIndex = functions.indexOf(',');
+ if (commaIndex > 0) {
+ return functions.substring(0, commaIndex);
+ } else {
+ return functions;
+ }
+ }
+
+ /**
* Sets the current USB function.
* If function is null, then the current function is set to the default function.
*
diff --git a/core/java/android/net/MobileDataStateTracker.java b/core/java/android/net/MobileDataStateTracker.java
index f3c863f..7336550 100644
--- a/core/java/android/net/MobileDataStateTracker.java
+++ b/core/java/android/net/MobileDataStateTracker.java
@@ -95,9 +95,7 @@
mTarget = target;
mContext = context;
- HandlerThread handlerThread = new HandlerThread("ConnectivityServiceThread");
- handlerThread.start();
- mHandler = new MdstHandler(handlerThread.getLooper(), this);
+ mHandler = new MdstHandler(target.getLooper(), this);
IntentFilter filter = new IntentFilter();
filter.addAction(TelephonyIntents.ACTION_ANY_DATA_CONNECTION_STATE_CHANGED);
diff --git a/core/java/android/nfc/ILlcpConnectionlessSocket.aidl b/core/java/android/nfc/ILlcpConnectionlessSocket.aidl
deleted file mode 100644
index c6d84e5..0000000
--- a/core/java/android/nfc/ILlcpConnectionlessSocket.aidl
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright (C) 2010 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 android.nfc;
-
-import android.nfc.LlcpPacket;
-
-/**
- * @hide
- */
-interface ILlcpConnectionlessSocket
-{
- void close(int nativeHandle);
- int getSap(int nativeHandle);
- LlcpPacket receiveFrom(int nativeHandle);
- int sendTo(int nativeHandle, in LlcpPacket packet);
-}
\ No newline at end of file
diff --git a/core/java/android/nfc/ILlcpServiceSocket.aidl b/core/java/android/nfc/ILlcpServiceSocket.aidl
deleted file mode 100644
index 581c21d..0000000
--- a/core/java/android/nfc/ILlcpServiceSocket.aidl
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Copyright (C) 2010 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 android.nfc;
-
-/**
- * {@hide}
- */
-interface ILlcpServiceSocket
-{
- int accept(int nativeHandle);
- void close(int nativeHandle);
-}
diff --git a/core/java/android/nfc/ILlcpSocket.aidl b/core/java/android/nfc/ILlcpSocket.aidl
deleted file mode 100644
index 3166e72..0000000
--- a/core/java/android/nfc/ILlcpSocket.aidl
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (C) 2010 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 android.nfc;
-
-/**
- * @hide
- */
-interface ILlcpSocket
-{
- int close(int nativeHandle);
- int connect(int nativeHandle, int sap);
- int connectByName(int nativeHandle, String sn);
- int getLocalSap(int nativeHandle);
- int getLocalSocketMiu(int nativeHandle);
- int getLocalSocketRw(int nativeHandle);
- int getRemoteSocketMiu(int nativeHandle);
- int getRemoteSocketRw(int nativeHandle);
- int receive(int nativeHandle, out byte[] receiveBuffer);
- int send(int nativeHandle, in byte[] data);
-}
\ No newline at end of file
diff --git a/core/java/android/nfc/INfcAdapter.aidl b/core/java/android/nfc/INfcAdapter.aidl
index 2ed6619..83a055c 100644
--- a/core/java/android/nfc/INfcAdapter.aidl
+++ b/core/java/android/nfc/INfcAdapter.aidl
@@ -22,13 +22,8 @@
import android.nfc.NdefMessage;
import android.nfc.Tag;
import android.nfc.TechListParcel;
-import android.nfc.ILlcpSocket;
-import android.nfc.ILlcpServiceSocket;
-import android.nfc.ILlcpConnectionlessSocket;
import android.nfc.INdefPushCallback;
import android.nfc.INfcTag;
-import android.nfc.IP2pTarget;
-import android.nfc.IP2pInitiator;
import android.nfc.INfcAdapterExtras;
/**
@@ -36,12 +31,7 @@
*/
interface INfcAdapter
{
- ILlcpSocket getLlcpInterface();
- ILlcpConnectionlessSocket getLlcpConnectionlessInterface();
- ILlcpServiceSocket getLlcpServiceInterface();
INfcTag getNfcTagInterface();
- IP2pTarget getP2pTargetInterface();
- IP2pInitiator getP2pInitiatorInterface();
INfcAdapterExtras getNfcAdapterExtrasInterface();
// NfcAdapter-class related methods
@@ -54,10 +44,6 @@
void disableForegroundNdefPush(in ComponentName activity);
// Non-public methods
- // TODO: check and complete
- int createLlcpConnectionlessSocket(int sap);
- int createLlcpServiceSocket(int sap, String sn, int miu, int rw, int linearBufferLength);
- int createLlcpSocket(int sap, int miu, int rw, int linearBufferLength);
boolean disable();
boolean enable();
boolean enableZeroClick();
diff --git a/core/java/android/nfc/INfcAdapterExtras.aidl b/core/java/android/nfc/INfcAdapterExtras.aidl
old mode 100755
new mode 100644
diff --git a/core/java/android/nfc/IP2pInitiator.aidl b/core/java/android/nfc/IP2pInitiator.aidl
deleted file mode 100644
index 931f1f8..0000000
--- a/core/java/android/nfc/IP2pInitiator.aidl
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Copyright (C) 2010 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 android.nfc;
-
-/**
- * @hide
- */
-interface IP2pInitiator
-{
- byte[] getGeneralBytes(int nativeHandle);
- int getMode(int nativeHandle);
- byte[] receive(int nativeHandle);
- boolean send(int nativeHandle, in byte[] data);
-}
\ No newline at end of file
diff --git a/core/java/android/nfc/IP2pTarget.aidl b/core/java/android/nfc/IP2pTarget.aidl
deleted file mode 100644
index ddaaed42..0000000
--- a/core/java/android/nfc/IP2pTarget.aidl
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright (C) 2010 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 android.nfc;
-
-/**
- * @hide
- */
-interface IP2pTarget
-{
- byte[] getGeneralBytes(int nativeHandle);
- int getMode(int nativeHandle);
- int connect(int nativeHandle);
- boolean disconnect(int nativeHandle);
- byte[] transceive(int nativeHandle, in byte[] data);
-}
\ No newline at end of file
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index d3ff8f8..a6c3387 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -1445,17 +1445,16 @@
public static final String VOLUME_BLUETOOTH_SCO = "volume_bluetooth_sco";
/**
- * Whether the notifications should use the ring volume (value of 1) or
- * a separate notification volume (value of 0). In most cases, users
- * will have this enabled so the notification and ringer volumes will be
- * the same. However, power users can disable this and use the separate
- * notification volume control.
+ * Whether the notifications should use the ring volume (value of 1) or a separate
+ * notification volume (value of 0). In most cases, users will have this enabled so the
+ * notification and ringer volumes will be the same. However, power users can disable this
+ * and use the separate notification volume control.
* <p>
- * Note: This is a one-off setting that will be removed in the future
- * when there is profile support. For this reason, it is kept hidden
- * from the public APIs.
+ * Note: This is a one-off setting that will be removed in the future when there is profile
+ * support. For this reason, it is kept hidden from the public APIs.
*
* @hide
+ * @deprecated
*/
public static final String NOTIFICATIONS_USE_RING_VOLUME =
"notifications_use_ring_volume";
diff --git a/core/java/android/provider/VoicemailContract.java b/core/java/android/provider/VoicemailContract.java
index a31374f..5217624 100644
--- a/core/java/android/provider/VoicemailContract.java
+++ b/core/java/android/provider/VoicemailContract.java
@@ -92,7 +92,7 @@
public static final String SOURCE_PACKAGE_FIELD = "source_package";
/** Defines fields exposed through the /voicemail path of this content provider. */
- public static final class Voicemails implements BaseColumns {
+ public static final class Voicemails implements BaseColumns, OpenableColumns {
/** Not instantiable. */
private Voicemails() {
}
diff --git a/core/java/android/server/BluetoothA2dpService.java b/core/java/android/server/BluetoothA2dpService.java
index fd277d0..f498bb2 100644
--- a/core/java/android/server/BluetoothA2dpService.java
+++ b/core/java/android/server/BluetoothA2dpService.java
@@ -187,24 +187,10 @@
return false;
}
- private synchronized boolean addAudioSink(BluetoothDevice device) {
- String path = mBluetoothService.getObjectPathFromAddress(device.getAddress());
- String propValues[] = (String []) getSinkPropertiesNative(path);
- if (propValues == null) {
- Log.e(TAG, "Error while getting AudioSink properties for device: " + device);
- return false;
+ private synchronized void addAudioSink(BluetoothDevice device) {
+ if (mAudioDevices.get(device) == null) {
+ mAudioDevices.put(device, BluetoothA2dp.STATE_DISCONNECTED);
}
- Integer state = null;
- // Properties are name-value pairs
- for (int i = 0; i < propValues.length; i+=2) {
- if (propValues[i].equals(PROPERTY_STATE)) {
- state = new Integer(convertBluezSinkStringToState(propValues[i+1]));
- break;
- }
- }
- mAudioDevices.put(device, state);
- handleSinkStateChange(device, BluetoothA2dp.STATE_DISCONNECTED, state);
- return true;
}
private synchronized void onBluetoothEnable() {
@@ -259,9 +245,7 @@
return false;
}
- if (mAudioDevices.get(device) == null && !addAudioSink(device)) {
- return false;
- }
+ addAudioSink(device);
String path = mBluetoothService.getObjectPathFromAddress(device.getAddress());
if (path == null) {
@@ -495,6 +479,7 @@
// This is for an incoming connection for a device not known to us.
// We have authorized it and bluez state has changed.
addAudioSink(device);
+ handleSinkStateChange(device, BluetoothA2dp.STATE_DISCONNECTED, state);
} else {
if (state == BluetoothA2dp.STATE_PLAYING && mPlayingA2dpDevice == null) {
mPlayingA2dpDevice = device;
diff --git a/core/java/android/server/BluetoothAdapterStateMachine.java b/core/java/android/server/BluetoothAdapterStateMachine.java
index 83f5a9f..cb18ade 100644
--- a/core/java/android/server/BluetoothAdapterStateMachine.java
+++ b/core/java/android/server/BluetoothAdapterStateMachine.java
@@ -156,7 +156,7 @@
private class PowerOff extends State {
@Override
public void enter() {
- if (DBG) log("Enter PowerOff: ");
+ if (DBG) log("Enter PowerOff: " + getCurrentMessage().what);
}
@Override
public boolean processMessage(Message message) {
@@ -280,7 +280,7 @@
@Override
public void enter() {
- if (DBG) log("Enter WarmUp");
+ if (DBG) log("Enter WarmUp: " + getCurrentMessage().what);
}
@Override
@@ -319,7 +319,7 @@
private class HotOff extends State {
@Override
public void enter() {
- if (DBG) log("Enter HotOff:");
+ if (DBG) log("Enter HotOff: " + getCurrentMessage().what);
}
@Override
@@ -380,8 +380,7 @@
@Override
public void enter() {
- int what = getCurrentMessage().what;
- if (DBG) log("Enter Switching: " + what);
+ if (DBG) log("Enter Switching: " + getCurrentMessage().what);
}
@Override
public boolean processMessage(Message message) {
@@ -390,13 +389,12 @@
boolean retValue = HANDLED;
switch(message.what) {
case BECAME_PAIRABLE:
- String[] propVal = {"Pairable", mBluetoothService.getProperty("Pairable")};
- mEventLoop.onPropertyChanged(propVal);
-
- // run bluetooth now that it's turned on
- mBluetoothService.runBluetooth();
+ mBluetoothService.initBluetoothAfterTurningOn();
transitionTo(mBluetoothOn);
broadcastState(BluetoothAdapter.STATE_ON);
+ // run bluetooth now that it's turned on
+ // Note runBluetooth should be called only in adapter STATE_ON
+ mBluetoothService.runBluetooth();
break;
case BECAME_NON_PAIRABLE:
if (mBluetoothService.getAdapterConnectionState() ==
@@ -438,11 +436,10 @@
}
private class BluetoothOn extends State {
- private boolean mPersistBluetoothOff = false;
@Override
public void enter() {
- if (DBG) log("Enter BluetoothOn: " + mPersistBluetoothOff);
+ if (DBG) log("Enter BluetoothOn: " + getCurrentMessage().what);
}
@Override
public boolean processMessage(Message message) {
@@ -500,7 +497,7 @@
@Override
public void enter() {
- if (DBG) log("Enter PerProcessState");
+ if (DBG) log("Enter PerProcessState: " + getCurrentMessage().what);
}
@Override
@@ -523,14 +520,11 @@
case USER_TURN_ON:
broadcastState(BluetoothAdapter.STATE_TURNING_ON);
persistSwitchSetting(true);
-
- String[] propVal = {"Pairable", mBluetoothService.getProperty("Pairable")};
- mEventLoop.onPropertyChanged(propVal);
-
- // run bluetooth now that it's turned on
- mBluetoothService.runBluetooth();
+ mBluetoothService.initBluetoothAfterTurningOn();
transitionTo(mBluetoothOn);
broadcastState(BluetoothAdapter.STATE_ON);
+ // run bluetooth now that it's turned on
+ mBluetoothService.runBluetooth();
break;
case USER_TURN_OFF:
broadcastState(BluetoothAdapter.STATE_TURNING_OFF);
diff --git a/core/java/android/server/BluetoothBondState.java b/core/java/android/server/BluetoothBondState.java
index 30a8b2a..4e2608e 100644
--- a/core/java/android/server/BluetoothBondState.java
+++ b/core/java/android/server/BluetoothBondState.java
@@ -90,6 +90,7 @@
IntentFilter filter = new IntentFilter();
filter.addAction(BluetoothDevice.ACTION_PAIRING_REQUEST);
mContext.registerReceiver(mReceiver, filter);
+ readAutoPairingData();
}
synchronized void setPendingOutgoingBonding(String address) {
diff --git a/core/java/android/server/BluetoothEventLoop.java b/core/java/android/server/BluetoothEventLoop.java
index 9b9196a..d73f8c9 100644
--- a/core/java/android/server/BluetoothEventLoop.java
+++ b/core/java/android/server/BluetoothEventLoop.java
@@ -54,7 +54,6 @@
private final BluetoothAdapter mAdapter;
private final BluetoothAdapterStateMachine mBluetoothState;
private BluetoothA2dp mA2dp;
- private BluetoothInputDevice mInputDevice;
private final Context mContext;
// The WakeLock is used for bringing up the LCD during a pairing request
// from remote device when Android is in Suspend state.
@@ -134,15 +133,11 @@
public void onServiceConnected(int profile, BluetoothProfile proxy) {
if (profile == BluetoothProfile.A2DP) {
mA2dp = (BluetoothA2dp) proxy;
- } else if (profile == BluetoothProfile.INPUT_DEVICE) {
- mInputDevice = (BluetoothInputDevice) proxy;
}
}
public void onServiceDisconnected(int profile) {
if (profile == BluetoothProfile.A2DP) {
mA2dp = null;
- } else if (profile == BluetoothProfile.INPUT_DEVICE) {
- mInputDevice = null;
}
}
};
@@ -359,12 +354,10 @@
Intent intent;
adapterProperties.setProperty(name, propValues[1]);
if (propValues[1].equals("true")) {
- mBluetoothService.setIsDiscovering(true);
intent = new Intent(BluetoothAdapter.ACTION_DISCOVERY_STARTED);
} else {
// Stop the discovery.
mBluetoothService.cancelDiscovery();
- mBluetoothService.setIsDiscovering(false);
intent = new Intent(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
}
mContext.sendBroadcast(intent, BLUETOOTH_PERM);
@@ -803,21 +796,25 @@
"Incoming A2DP / AVRCP connection from " + address);
mA2dp.allowIncomingConnect(device, authorized);
}
- } else if (mInputDevice != null && BluetoothUuid.isInputDevice(uuid)) {
+ } else if (BluetoothUuid.isInputDevice(uuid)) {
// We can have more than 1 input device connected.
- authorized = mInputDevice.getPriority(device) > BluetoothInputDevice.PRIORITY_OFF;
- if (authorized) {
- Log.i(TAG, "First check pass for incoming HID connection from " + address);
- // notify profile state change
- mBluetoothService.notifyIncomingHidConnection(address);
- } else {
- Log.i(TAG, "Rejecting incoming HID connection from " + address);
- mBluetoothService.allowIncomingHidConnect(device, authorized);
- }
- } else if (BluetoothUuid.isBnep(uuid) && mBluetoothService.allowIncomingTethering()){
- authorized = true;
+ authorized = mBluetoothService.getInputDevicePriority(device) >
+ BluetoothInputDevice.PRIORITY_OFF;
+ if (authorized) {
+ Log.i(TAG, "First check pass for incoming HID connection from " + address);
+ // notify profile state change
+ mBluetoothService.notifyIncomingHidConnection(address);
+ } else {
+ Log.i(TAG, "Rejecting incoming HID connection from " + address);
+ mBluetoothService.allowIncomingProfileConnect(device, authorized);
+ }
+ } else if (BluetoothUuid.isBnep(uuid)) {
+ // PAN doesn't go to the state machine, accept or reject from here
+ authorized = mBluetoothService.allowIncomingTethering();
+ mBluetoothService.allowIncomingProfileConnect(device, authorized);
} else {
Log.i(TAG, "Rejecting incoming " + deviceUuid + " connection from " + address);
+ mBluetoothService.allowIncomingProfileConnect(device, authorized);
}
log("onAgentAuthorize(" + objectPath + ", " + deviceUuid + ") = " + authorized);
}
diff --git a/core/java/android/server/BluetoothService.java b/core/java/android/server/BluetoothService.java
index 0d95a58..28546dc 100755
--- a/core/java/android/server/BluetoothService.java
+++ b/core/java/android/server/BluetoothService.java
@@ -96,7 +96,6 @@
private boolean mIsAirplaneToggleable;
private BluetoothAdapterStateMachine mBluetoothState;
private boolean mRestart = false; // need to call enable() after disable()
- private boolean mIsDiscovering;
private int[] mAdapterSdpHandles;
private ParcelUuid[] mAdapterUuids;
@@ -213,8 +212,6 @@
disableNative();
}
- mIsDiscovering = false;
-
mBondState = new BluetoothBondState(context, this);
mAdapterProperties = new BluetoothAdapterProperties(context, this);
mDeviceProperties = new BluetoothDeviceProperties(this);
@@ -411,7 +408,6 @@
intent.putExtra(BluetoothAdapter.EXTRA_SCAN_MODE, BluetoothAdapter.SCAN_MODE_NONE);
mContext.sendBroadcast(intent, BLUETOOTH_PERM);
- mIsDiscovering = false;
mAdapterProperties.clear();
mServiceRecordToPid.clear();
@@ -482,8 +478,6 @@
if (!setupNativeDataNative()) {
return false;
}
- mIsDiscovering = false;
-
switchConnectable(false);
updateSdpRecords();
return true;
@@ -587,16 +581,21 @@
}
/**
+ * This method is called immediately before Bluetooth module is turned on after
+ * the adapter became pariable.
+ * It inits bond state and profile state before STATE_ON intent is broadcasted.
+ */
+ /*package*/ void initBluetoothAfterTurningOn() {
+ mBondState.initBondState();
+ initProfileState();
+ }
+
+ /**
* This method is called immediately after Bluetooth module is turned on.
* It starts auto-connection and places bluetooth on sign onto the battery
* stats
*/
/*package*/ void runBluetooth() {
- mIsDiscovering = false;
- mBondState.readAutoPairingData();
- mBondState.initBondState();
- initProfileState();
-
autoConnect();
// Log bluetooth on to battery stats.
@@ -787,12 +786,14 @@
}
if (allowOnlyInOnState) {
- setPropertyBoolean("Pairable", pairable);
setPropertyBoolean("Discoverable", discoverable);
+ setPropertyBoolean("Pairable", pairable);
} else {
// allowed to set the property through native layer directly
- setAdapterPropertyBooleanNative("Pairable", pairable ? 1 : 0);
setAdapterPropertyBooleanNative("Discoverable", discoverable ? 1 : 0);
+ // do setting pairable after setting discoverable since the adapter
+ // state machine uses pairable event for state change
+ setAdapterPropertyBooleanNative("Pairable", pairable ? 1 : 0);
}
return true;
}
@@ -949,11 +950,13 @@
public synchronized boolean isDiscovering() {
mContext.enforceCallingOrSelfPermission(BLUETOOTH_PERM, "Need BLUETOOTH permission");
- return mIsDiscovering;
- }
- /* package */ void setIsDiscovering(boolean isDiscovering) {
- mIsDiscovering = isDiscovering;
+ String discoveringProperty = mAdapterProperties.getProperty("Discovering");
+ if (discoveringProperty == null) {
+ return false;
+ }
+
+ return discoveringProperty.equals("true");
}
private boolean isBondingFeasible(String address) {
@@ -2113,7 +2116,16 @@
}
}
- public boolean allowIncomingHidConnect(BluetoothDevice device, boolean allow) {
+ /**
+ * Handle incoming profile acceptance for profiles handled by Bluetooth Service,
+ * currently PAN and HID. This also is the catch all for all rejections for profiles
+ * that is not supported.
+ *
+ * @param device - Bluetooth Device
+ * @param allow - true / false
+ * @return
+ */
+ public boolean allowIncomingProfileConnect(BluetoothDevice device, boolean allow) {
mContext.enforceCallingOrSelfPermission(BLUETOOTH_ADMIN_PERM,
"Need BLUETOOTH_ADMIN permission");
String address = device.getAddress();
@@ -2123,11 +2135,11 @@
Integer data = getAuthorizationAgentRequestData(address);
if (data == null) {
- Log.w(TAG, "allowIncomingHidConnect(" + device +
+ Log.w(TAG, "allowIncomingProfileConnect(" + device +
") called but no native data available");
return false;
}
- if (DBG) log("allowIncomingHidConnect: " + device + " : " + allow + " : " + data);
+ if (DBG) log("allowIncomingProfileConnect: " + device + " : " + allow + " : " + data);
return setAuthorizationNative(address, allow, data.intValue());
}
diff --git a/core/java/android/view/HardwareRenderer.java b/core/java/android/view/HardwareRenderer.java
index 346adc8..66d2641 100644
--- a/core/java/android/view/HardwareRenderer.java
+++ b/core/java/android/view/HardwareRenderer.java
@@ -135,7 +135,7 @@
/**
* Updates the hardware renderer for the specified surface.
*
- * @param holder The holder for the surface to hardware accelerate.
+ * @param holder The holder for the surface to hardware accelerate
*/
abstract void updateSurface(SurfaceHolder holder) throws Surface.OutOfResourcesException;
@@ -148,9 +148,11 @@
/**
* This method should be invoked whenever the current hardware renderer
- * context should be reset.
+ * context should be reset.
+ *
+ * @param holder The holder for the surface to hardware accelerate
*/
- abstract void invalidate();
+ abstract void invalidate(SurfaceHolder holder);
/**
* This method should be invoked to ensure the hardware renderer is in
@@ -685,16 +687,17 @@
if (full && mCanvas != null) {
mCanvas = null;
}
-
- if (!isEnabled() || mDestroyed) return;
- mDestroyed = true;
+ if (!isEnabled() || mDestroyed) {
+ setEnabled(false);
+ return;
+ }
destroySurface();
-
- mGl = null;
-
setEnabled(false);
+
+ mDestroyed = true;
+ mGl = null;
}
void destroySurface() {
@@ -706,13 +709,24 @@
}
@Override
- void invalidate() {
+ void invalidate(SurfaceHolder holder) {
// Cancels any existing buffer to ensure we'll get a buffer
// of the right size before we call eglSwapBuffers
- sEgl.eglMakeCurrent(sEglDisplay, EGL_NO_SURFACE,
- EGL_NO_SURFACE, EGL_NO_CONTEXT);
+ sEgl.eglMakeCurrent(sEglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
+ sEgl.eglDestroySurface(sEglDisplay, mEglSurface);
+ mEglSurface = sEgl.eglCreateWindowSurface(sEglDisplay, sEglConfig, holder, null);
+
+ if (mEglSurface == null || mEglSurface == EGL_NO_SURFACE) {
+ int error = sEgl.eglGetError();
+ if (error == EGL_BAD_NATIVE_WINDOW) {
+ Log.e(LOG_TAG, "createWindowSurface returned EGL_BAD_NATIVE_WINDOW.");
+ return;
+ }
+ throw new RuntimeException("createWindowSurface failed "
+ + getEGLErrorString(error));
+ }
}
-
+
@Override
boolean validate() {
return checkCurrent() != SURFACE_STATE_ERROR;
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index 914824c..ad76928 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -10221,6 +10221,7 @@
}
canvas.restoreToCount(restoreCount);
+ canvas.setBitmap(null);
if (attachInfo != null) {
// Restore the cached Canvas for our siblings
@@ -10289,6 +10290,7 @@
mPrivateFlags = flags;
canvas.restoreToCount(restoreCount);
+ canvas.setBitmap(null);
if (attachInfo != null) {
// Restore the cached Canvas for our siblings
diff --git a/core/java/android/view/ViewConfiguration.java b/core/java/android/view/ViewConfiguration.java
index dbcbd6e..9520958 100644
--- a/core/java/android/view/ViewConfiguration.java
+++ b/core/java/android/view/ViewConfiguration.java
@@ -220,6 +220,7 @@
private final int mMaximumDrawingCacheSize;
private final int mOverscrollDistance;
private final int mOverflingDistance;
+ private final boolean mFadingMarqueeEnabled;
private boolean sHasPermanentMenuKey;
private boolean sHasPermanentMenuKeySet;
@@ -246,6 +247,7 @@
mMaximumDrawingCacheSize = MAXIMUM_DRAWING_CACHE_SIZE;
mOverscrollDistance = OVERSCROLL_DISTANCE;
mOverflingDistance = OVERFLING_DISTANCE;
+ mFadingMarqueeEnabled = true;
}
/**
@@ -297,6 +299,9 @@
sHasPermanentMenuKey = false;
}
}
+
+ mFadingMarqueeEnabled = res.getBoolean(
+ com.android.internal.R.bool.config_ui_enableFadingMarquee);
}
/**
@@ -673,4 +678,12 @@
public boolean hasPermanentMenuKey() {
return sHasPermanentMenuKey;
}
+
+ /**
+ * @hide
+ * @return Whether or not marquee should use fading edges.
+ */
+ public boolean isFadingMarqueeEnabled() {
+ return mFadingMarqueeEnabled;
+ }
}
diff --git a/core/java/android/view/ViewDebug.java b/core/java/android/view/ViewDebug.java
index 96e550e..65e72c9 100644
--- a/core/java/android/view/ViewDebug.java
+++ b/core/java/android/view/ViewDebug.java
@@ -1094,6 +1094,9 @@
}
public void post(Object... data) {
+ if (data[1] != null) {
+ ((Canvas) data[1]).setBitmap(null);
+ }
if (data[0] != null) {
((Bitmap) data[0]).recycle();
}
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java
index b22ab7e..911bf2f 100644
--- a/core/java/android/view/ViewRootImpl.java
+++ b/core/java/android/view/ViewRootImpl.java
@@ -1344,7 +1344,7 @@
mAttachInfo.mHardwareRenderer.isEnabled())) {
mAttachInfo.mHardwareRenderer.setup(mWidth, mHeight);
if (!hwInitialized) {
- mAttachInfo.mHardwareRenderer.invalidate();
+ mAttachInfo.mHardwareRenderer.invalidate(mHolder);
}
}
diff --git a/core/java/android/view/VolumePanel.java b/core/java/android/view/VolumePanel.java
index 9e9f46f..08ccd94 100644
--- a/core/java/android/view/VolumePanel.java
+++ b/core/java/android/view/VolumePanel.java
@@ -89,30 +89,16 @@
private static final int MSG_TIMEOUT = 5;
private static final int MSG_RINGER_MODE_CHANGED = 6;
-// private static final int RINGTONE_VOLUME_TEXT = com.android.internal.R.string.volume_ringtone;
-// private static final int MUSIC_VOLUME_TEXT = com.android.internal.R.string.volume_music;
-// private static final int INCALL_VOLUME_TEXT = com.android.internal.R.string.volume_call;
-// private static final int ALARM_VOLUME_TEXT = com.android.internal.R.string.volume_alarm;
-// private static final int UNKNOWN_VOLUME_TEXT = com.android.internal.R.string.volume_unknown;
-// private static final int NOTIFICATION_VOLUME_TEXT =
-// com.android.internal.R.string.volume_notification;
-// private static final int BLUETOOTH_INCALL_VOLUME_TEXT =
-// com.android.internal.R.string.volume_bluetooth_call;
-
protected Context mContext;
private AudioManager mAudioManager;
protected AudioService mAudioService;
private boolean mRingIsSilent;
+ private boolean mShowCombinedVolumes;
/** Dialog containing all the sliders */
private final Dialog mDialog;
/** Dialog's content view */
private final View mView;
-// private final TextView mMessage;
-// private final TextView mAdditionalMessage;
-// private final ImageView mSmallStreamIcon;
-// private final ImageView mLargeStreamIcon;
-// private final ProgressBar mLevel;
/** Contains the sliders and their touchable icons */
private final ViewGroup mSliderGroup;
@@ -127,7 +113,7 @@
private HashMap<Integer,StreamControl> mStreamControls;
// List of stream types and their order
- // RING and VOICE_CALL are hidden unless explicitly requested
+ // RING, VOICE_CALL & BLUETOOTH_SCO are hidden unless explicitly requested
private static final int [] STREAM_TYPES = {
AudioManager.STREAM_BLUETOOTH_SCO,
AudioManager.STREAM_RING,
@@ -136,10 +122,18 @@
AudioManager.STREAM_NOTIFICATION
};
+ private static final int [] CONTENT_DESCRIPTIONS = {
+ R.string.volume_icon_description_bluetooth,
+ R.string.volume_icon_description_ringer,
+ R.string.volume_icon_description_incall,
+ R.string.volume_icon_description_media,
+ R.string.volume_icon_description_notification
+ };
+
// These icons need to correspond to the ones above.
private static final int [] STREAM_ICONS_NORMAL = {
R.drawable.ic_audio_bt,
- R.drawable.ic_audio_phone,
+ R.drawable.ic_audio_ring_notif,
R.drawable.ic_audio_phone,
R.drawable.ic_audio_vol,
R.drawable.ic_audio_notification,
@@ -148,7 +142,7 @@
// These icons need to correspond to the ones above.
private static final int [] STREAM_ICONS_MUTED = {
R.drawable.ic_audio_bt,
- R.drawable.ic_audio_phone,
+ R.drawable.ic_audio_ring_notif_mute,
R.drawable.ic_audio_phone,
R.drawable.ic_audio_vol_mute,
R.drawable.ic_audio_notification_mute,
@@ -184,7 +178,6 @@
});
mSliderGroup = (ViewGroup) mView.findViewById(R.id.slider_group);
mMoreButton = (ImageView) mView.findViewById(R.id.expand_button);
- mMoreButton.setOnClickListener(this);
mDivider = (ImageView) mView.findViewById(R.id.expand_button_divider);
mDialog = new Dialog(context, R.style.Theme_Panel_Volume);
@@ -205,16 +198,18 @@
window.setAttributes(lp);
window.addFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
-// mMessage = (TextView) view.findViewById(com.android.internal.R.id.message);
-// mAdditionalMessage =
-// (TextView) view.findViewById(com.android.internal.R.id.additional_message);
-// mSmallStreamIcon = (ImageView) view.findViewById(com.android.internal.R.id.other_stream_icon);
-// mLargeStreamIcon = (ImageView) view.findViewById(com.android.internal.R.id.ringer_stream_icon);
-// mLevel = (ProgressBar) view.findViewById(com.android.internal.R.id.level);
-
mToneGenerators = new ToneGenerator[AudioSystem.getNumStreamTypes()];
mVibrator = new Vibrator();
+ mShowCombinedVolumes = !context.getResources().getBoolean(R.bool.config_voice_capable);
+ // If we don't want to show multiple volumes, hide the settings button and divider
+ if (!mShowCombinedVolumes) {
+ mMoreButton.setVisibility(View.GONE);
+ mDivider.setVisibility(View.GONE);
+ } else {
+ mMoreButton.setOnClickListener(this);
+ }
+
listenToRingerMode();
}
@@ -242,6 +237,7 @@
LayoutInflater inflater = (LayoutInflater) mContext
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mStreamControls = new HashMap<Integer,StreamControl>(STREAM_TYPES.length);
+ Resources res = mContext.getResources();
for (int i = 0; i < STREAM_TYPES.length; i++) {
StreamControl sc = new StreamControl();
sc.streamType = STREAM_TYPES[i];
@@ -250,6 +246,7 @@
sc.icon = (ImageView) sc.group.findViewById(R.id.stream_icon);
sc.icon.setOnClickListener(this);
sc.icon.setTag(sc);
+ sc.icon.setContentDescription(res.getString(CONTENT_DESCRIPTIONS[i]));
sc.iconRes = STREAM_ICONS_NORMAL[i];
sc.iconMuteRes = STREAM_ICONS_MUTED[i];
sc.icon.setImageResource(sc.iconRes);
@@ -275,13 +272,19 @@
updateSlider(active);
}
+ addOtherVolumes();
+ }
+
+ private void addOtherVolumes() {
+ if (!mShowCombinedVolumes) return;
+
for (int i = 0; i < STREAM_TYPES.length; i++) {
// Skip the phone specific ones and the active one
final int streamType = STREAM_TYPES[i];
if (streamType == AudioManager.STREAM_RING
|| streamType == AudioManager.STREAM_VOICE_CALL
|| streamType == AudioManager.STREAM_BLUETOOTH_SCO
- || streamType == activeStreamType) {
+ || streamType == mActiveStreamType) {
continue;
}
StreamControl sc = mStreamControls.get(streamType);
@@ -392,31 +395,23 @@
case AudioManager.STREAM_RING: {
// setRingerIcon();
-// message = RINGTONE_VOLUME_TEXT;
Uri ringuri = RingtoneManager.getActualDefaultRingtoneUri(
mContext, RingtoneManager.TYPE_RINGTONE);
if (ringuri == null) {
-// additionalMessage =
-// com.android.internal.R.string.volume_music_hint_silent_ringtone_selected;
mRingIsSilent = true;
}
break;
}
case AudioManager.STREAM_MUSIC: {
-// message = MUSIC_VOLUME_TEXT;
// Special case for when Bluetooth is active for music
if ((mAudioManager.getDevicesForStream(AudioManager.STREAM_MUSIC) &
(AudioManager.DEVICE_OUT_BLUETOOTH_A2DP |
AudioManager.DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES |
AudioManager.DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER)) != 0) {
-// additionalMessage =
-// com.android.internal.R.string.volume_music_hint_playing_through_bluetooth;
-// setLargeIcon(com.android.internal.R.drawable.ic_volume_bluetooth_ad2p);
setMusicIcon(R.drawable.ic_audio_bt, R.drawable.ic_audio_bt_mute);
} else {
setMusicIcon(R.drawable.ic_audio_vol, R.drawable.ic_audio_vol_mute);
-// setSmallIcon(index);
}
break;
}
@@ -429,25 +424,17 @@
*/
index++;
max++;
-// message = INCALL_VOLUME_TEXT;
-// setSmallIcon(index);
break;
}
case AudioManager.STREAM_ALARM: {
-// message = ALARM_VOLUME_TEXT;
-// setSmallIcon(index);
break;
}
case AudioManager.STREAM_NOTIFICATION: {
-// message = NOTIFICATION_VOLUME_TEXT;
-// setSmallIcon(index);
Uri ringuri = RingtoneManager.getActualDefaultRingtoneUri(
mContext, RingtoneManager.TYPE_NOTIFICATION);
if (ringuri == null) {
-// additionalMessage =
-// com.android.internal.R.string.volume_music_hint_silent_ringtone_selected;
mRingIsSilent = true;
}
break;
@@ -461,29 +448,10 @@
*/
index++;
max++;
-// message = BLUETOOTH_INCALL_VOLUME_TEXT;
-// setLargeIcon(com.android.internal.R.drawable.ic_volume_bluetooth_in_call);
break;
}
}
-// String messageString = Resources.getSystem().getString(message);
-// if (!mMessage.getText().equals(messageString)) {
-// mMessage.setText(messageString);
-// }
-//
-// if (additionalMessage == 0) {
-// mAdditionalMessage.setVisibility(View.GONE);
-// } else {
-// mAdditionalMessage.setVisibility(View.VISIBLE);
-// mAdditionalMessage.setText(Resources.getSystem().getString(additionalMessage));
-// }
-
-// if (max != mLevel.getMax()) {
-// mLevel.setMax(max);
-// }
-// mLevel.setProgress(index);
-
StreamControl sc = mStreamControls.get(streamType);
if (sc != null) {
sc.seekbarView.setProgress(index);
@@ -493,7 +461,9 @@
mAudioManager.forceVolumeControlStream(streamType);
mDialog.setContentView(mView);
// Showing dialog - use collapsed state
- collapse();
+ if (mShowCombinedVolumes) {
+ collapse();
+ }
mDialog.show();
}
@@ -566,31 +536,6 @@
}
// /**
-// * Makes the small icon visible, and hides the large icon.
-// *
-// * @param index The volume index, where 0 means muted.
-// */
-// private void setSmallIcon(int index) {
-// mLargeStreamIcon.setVisibility(View.GONE);
-// mSmallStreamIcon.setVisibility(View.VISIBLE);
-//
-// mSmallStreamIcon.setImageResource(index == 0
-// ? com.android.internal.R.drawable.ic_volume_off_small
-// : com.android.internal.R.drawable.ic_volume_small);
-// }
-//
-// /**
-// * Makes the large image view visible with the given icon.
-// *
-// * @param resId The icon to display.
-// */
-// private void setLargeIcon(int resId) {
-// mSmallStreamIcon.setVisibility(View.GONE);
-// mLargeStreamIcon.setVisibility(View.VISIBLE);
-// mLargeStreamIcon.setImageResource(resId);
-// }
-//
-// /**
// * Makes the ringer icon visible with an icon that is chosen
// * based on the current ringer mode.
// */
@@ -627,11 +572,6 @@
}
protected void onFreeResources() {
- // We'll keep the views, just ditch the cached drawable and hence
- // bitmaps
-// mSmallStreamIcon.setImageDrawable(null);
-// mLargeStreamIcon.setImageDrawable(null);
-
synchronized (this) {
for (int i = mToneGenerators.length - 1; i >= 0; i--) {
if (mToneGenerators[i] != null) {
@@ -718,7 +658,7 @@
mAudioManager.setRingerMode(mAudioManager.isSilentMode()
? AudioManager.RINGER_MODE_NORMAL : AudioManager.RINGER_MODE_SILENT);
// Expand the dialog if it hasn't been expanded yet.
- if (!isExpanded()) expand();
+ if (mShowCombinedVolumes && !isExpanded()) expand();
}
resetTimeout();
}
diff --git a/core/java/android/service/textservice/SpellCheckerSession.java b/core/java/android/view/textservice/SpellCheckerSession.java
similarity index 97%
rename from core/java/android/service/textservice/SpellCheckerSession.java
rename to core/java/android/view/textservice/SpellCheckerSession.java
index 0dff3a6..bf07e71 100644
--- a/core/java/android/service/textservice/SpellCheckerSession.java
+++ b/core/java/android/view/textservice/SpellCheckerSession.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package android.service.textservice;
+package android.view.textservice;
import com.android.internal.textservice.ISpellCheckerSession;
import com.android.internal.textservice.ISpellCheckerSessionListener;
@@ -38,6 +38,12 @@
public class SpellCheckerSession {
private static final String TAG = SpellCheckerSession.class.getSimpleName();
private static final boolean DBG = false;
+ /**
+ * Name under which a SpellChecker service component publishes information about itself.
+ * This meta-data must reference an XML resource.
+ **/
+ public static final String SERVICE_META_DATA = "android.view.textservice.scs";
+
private static final int MSG_ON_GET_SUGGESTION_MULTIPLE = 1;
diff --git a/core/java/android/view/textservice/TextServicesManager.java b/core/java/android/view/textservice/TextServicesManager.java
index ae253cf..a60eb24 100644
--- a/core/java/android/view/textservice/TextServicesManager.java
+++ b/core/java/android/view/textservice/TextServicesManager.java
@@ -22,9 +22,9 @@
import android.os.IBinder;
import android.os.RemoteException;
import android.os.ServiceManager;
-import android.service.textservice.SpellCheckerSession;
-import android.service.textservice.SpellCheckerSession.SpellCheckerSessionListener;
import android.util.Log;
+import android.view.textservice.SpellCheckerSession;
+import android.view.textservice.SpellCheckerSession.SpellCheckerSessionListener;
import java.util.Locale;
@@ -81,18 +81,18 @@
}
// TODO: set a proper locale instead of the dummy locale
final String localeString = locale == null ? "en" : locale.toString();
- final SpellCheckerInfo info;
+ final SpellCheckerInfo sci;
try {
- info = sService.getCurrentSpellChecker(localeString);
+ sci = sService.getCurrentSpellChecker(localeString);
} catch (RemoteException e) {
return null;
}
- if (info == null) {
+ if (sci == null) {
return null;
}
- final SpellCheckerSession session = new SpellCheckerSession(info, sService, listener);
+ final SpellCheckerSession session = new SpellCheckerSession(sci, sService, listener);
try {
- sService.getSpellCheckerService(info, localeString,
+ sService.getSpellCheckerService(sci.getId(), localeString,
session.getTextServicesSessionListener(),
session.getSpellCheckerSessionListener());
} catch (RemoteException e) {
@@ -128,4 +128,18 @@
return null;
}
}
+
+ /**
+ * @hide
+ */
+ public void setCurrentSpellChecker(SpellCheckerInfo sci) {
+ try {
+ if (sci == null) {
+ throw new NullPointerException("SpellCheckerInfo is null");
+ }
+ sService.setCurrentSpellChecker(sci.getId());
+ } catch (RemoteException e) {
+ Log.e(TAG, "Error in setCurrentSpellChecker: " + e);
+ }
+ }
}
diff --git a/core/java/android/widget/GridLayout.java b/core/java/android/widget/GridLayout.java
index f999960..f354c6e 100644
--- a/core/java/android/widget/GridLayout.java
+++ b/core/java/android/widget/GridLayout.java
@@ -32,12 +32,13 @@
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Arrays;
-import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static android.view.Gravity.*;
+import static android.view.View.MeasureSpec.EXACTLY;
+import static android.view.View.MeasureSpec.makeMeasureSpec;
import static java.lang.Math.max;
import static java.lang.Math.min;
@@ -92,8 +93,21 @@
*
* <h4>Excess Space Distribution</h4>
*
- * A child's ability to stretch is controlled using the flexibility
- * properties of its row and column groups.
+ * A child's ability to stretch is inferred from the alignment properties of
+ * its row and column groups (which are typically set by setting the
+ * {@link LayoutParams#setGravity(int) gravity} property of the child's layout parameters).
+ * If alignment was defined along a given axis then the component
+ * is taken as flexible in along that axis. If no alignment was set,
+ * the component is instead assumed to be inflexible. Multiple components in
+ * the same row or column group are considered to act in <em>parallel</em>. Such a
+ * group is flexible only if <em>all</em> of the components
+ * within it are flexible. Row and column groups that sit either side of a common boundary
+ * are instead considered to act in <em>series</em>. The composite group made of these two
+ * elements is flexible if <em>one</em> of its elements is flexible.
+ * <p>
+ * To make a column stretch, make sure all of the components inside it define a
+ * gravity. To prevent a column from stretching, ensure that one of the components
+ * in the column does not define a gravity.
* <p>
* <p>
* See {@link GridLayout.LayoutParams} for a full description of the
@@ -175,7 +189,7 @@
private static final int DEFAULT_ORIENTATION = HORIZONTAL;
private static final int DEFAULT_COUNT = UNDEFINED;
private static final boolean DEFAULT_USE_DEFAULT_MARGINS = false;
- private static final boolean DEFAULT_ORDER_PRESERVED = false;
+ private static final boolean DEFAULT_ORDER_PRESERVED = true;
private static final int DEFAULT_ALIGNMENT_MODE = ALIGN_MARGINS;
private static final int DEFAULT_CONTAINER_MARGIN = 0;
private static final int MAX_SIZE = 100000;
@@ -198,8 +212,6 @@
private int mOrientation = DEFAULT_ORIENTATION;
private boolean mUseDefaultMargins = DEFAULT_USE_DEFAULT_MARGINS;
private int mAlignmentMode = DEFAULT_ALIGNMENT_MODE;
- private Alignment mColumnAlignment = LEFT;
- private Alignment mRowAlignment = BASELINE;
private int mDefaultGap;
// Constructors
@@ -440,22 +452,13 @@
}
/**
- * When this property is {@code false}, the default state, GridLayout
- * is at liberty to choose an order that better suits the heights of its children.
- <p>
* When this property is {@code true}, GridLayout is forced to place the row boundaries
* so that their associated grid indices are in ascending order in the view.
* <p>
- * GridLayout implements this specification by creating ordering constraints between
- * the variables that represent the locations of the row boundaries.
- *
- * When this property is {@code true}, constraints are added for each pair of consecutive
- * indices: i.e. between row boundaries: {@code [0..1], [1..2], [2..3],...} etc.
- *
- * When the property is {@code false}, the ordering constraints are placed
- * only between boundaries that separate opposing edges of the layout's children.
+ * When this property is {@code false} GridLayout is at liberty to place the vertical row
+ * boundaries in whatever order best fits the given constraints.
* <p>
- * The default value of this property is {@code false}.
+ * The default value of this property is {@code true}.
* @param rowOrderPreserved {@code true} to force GridLayout to respect the order
* of row boundaries
@@ -485,22 +488,13 @@
}
/**
- * When this property is {@code false}, the default state, GridLayout
- * is at liberty to choose an order that better suits the widths of its children.
- <p>
* When this property is {@code true}, GridLayout is forced to place the column boundaries
* so that their associated grid indices are in ascending order in the view.
* <p>
- * GridLayout implements this specification by creating ordering constraints between
- * the variables that represent the locations of the column boundaries.
- *
- * When this property is {@code true}, constraints are added for each pair of consecutive
- * indices: i.e. between column boundaries: {@code [0..1], [1..2], [2..3],...} etc.
- *
- * When the property is {@code false}, the ordering constraints are placed
- * only between boundaries that separate opposing edges of the layout's children.
+ * When this property is {@code false} GridLayout is at liberty to place the horizontal column
+ * boundaries in whatever order best fits the given constraints.
* <p>
- * The default value of this property is {@code false}.
+ * The default value of this property is {@code true}.
*
* @param columnOrderPreserved use {@code true} to force GridLayout to respect the order
* of column boundaries.
@@ -533,6 +527,7 @@
return result;
}
+ @SuppressWarnings("unchecked")
private static <T> T[] append(T[] a, T[] b) {
T[] result = (T[]) Array.newInstance(a.getClass().getComponentType(), a.length + b.length);
System.arraycopy(a, 0, result, 0, a.length);
@@ -559,6 +554,9 @@
}
private int getDefaultMargin(View c, boolean horizontal, boolean leading) {
+ if (c.getClass() == Space.class) {
+ return 0;
+ }
return mDefaultGap / 2;
}
@@ -594,72 +592,92 @@
return (value != UNDEFINED) ? value : defaultValue;
}
+ private static boolean fits(int[] a, int value, int start, int end) {
+ if (end > a.length) {
+ return false;
+ }
+ for (int i = start; i < end; i++) {
+ if (a[i] > value) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ private static void procrusteanFill(int[] a, int start, int end, int value) {
+ int length = a.length;
+ Arrays.fill(a, Math.min(start, length), Math.min(end, length), value);
+ }
+
+ private static void setCellGroup(LayoutParams lp, int row, int rowSpan, int col, int colSpan) {
+ lp.setRowSpecSpan(new Interval(row, row + rowSpan));
+ lp.setColumnSpecSpan(new Interval(col, col + colSpan));
+ }
+
+ // Logic to avert infinite loops by ensuring that the cells can be placed somewhere.
+ private static int clip(Interval minorRange, boolean minorWasDefined, int count) {
+ int size = minorRange.size();
+ if (count == 0) {
+ return size;
+ }
+ int min = minorWasDefined ? min(minorRange.min, count) : 0;
+ return min(size, count - min);
+ }
+
// install default indices for cells that don't define them
private void validateLayoutParams() {
- new Object() {
- public int maxSize = 0;
+ final boolean horizontal = (mOrientation == HORIZONTAL);
+ final int axisCount = horizontal ? mHorizontalAxis.count : mVerticalAxis.count;
+ final int count = valueIfDefined(axisCount, 0);
- private int valueIfDefined2(int value, int defaultValue) {
- if (value != UNDEFINED) {
- maxSize = 0;
- return value;
- } else {
- return defaultValue;
- }
+ int major = 0;
+ int minor = 0;
+ int[] maxSizes = new int[count];
+
+ for (int i = 0, N = getChildCount(); i < N; i++) {
+ LayoutParams lp = getLayoutParams1(getChildAt(i));
+
+ final Interval majorRange = (horizontal ? lp.rowSpec : lp.columnSpec).span;
+ final boolean majorWasDefined = (majorRange.min != UNDEFINED);
+ final int majorSpan = majorRange.size();
+ if (majorWasDefined) {
+ major = majorRange.min;
}
- {
- final boolean horizontal = (mOrientation == HORIZONTAL);
- final int axis = horizontal ? mHorizontalAxis.count : mVerticalAxis.count;
- final int count = valueIfDefined(axis, Integer.MAX_VALUE);
+ final Interval minorRange = (horizontal ? lp.columnSpec : lp.rowSpec).span;
+ final boolean minorWasDefined = (minorRange.min != UNDEFINED);
+ final int minorSpan = clip(minorRange, minorWasDefined, count);
+ if (minorWasDefined) {
+ minor = minorRange.min;
+ }
- int row = 0;
- int col = 0;
- for (int i = 0, N = getChildCount(); i < N; i++) {
- View c = getChildAt(i);
- LayoutParams lp = getLayoutParams1(c);
-
- final Spec colSpec = lp.columnSpec;
- final Interval cols = colSpec.span;
- final int colSpan = cols.size();
-
- final Spec rowSpec = lp.rowSpec;
- final Interval rows = rowSpec.span;
- final int rowSpan = rows.size();
-
- if (horizontal) {
- row = valueIfDefined2(rows.min, row);
-
- int newCol = valueIfDefined(cols.min, (col + colSpan > count) ? 0 : col);
- if (newCol < col) {
- row += maxSize;
- maxSize = 0;
+ if (count != 0) {
+ // Find suitable row/col values when at least one is undefined.
+ if (!majorWasDefined || !minorWasDefined) {
+ while (!fits(maxSizes, major, minor, minor + minorSpan)) {
+ if (minorWasDefined) {
+ major++;
+ } else {
+ if (minor + minorSpan <= count) {
+ minor++;
+ } else {
+ minor = 0;
+ major++;
+ }
}
- col = newCol;
- maxSize = max(maxSize, rowSpan);
- } else {
- col = valueIfDefined2(cols.min, col);
-
- int newRow = valueIfDefined(rows.min, (row + rowSpan > count) ? 0 : row);
- if (newRow < row) {
- col += maxSize;
- maxSize = 0;
- }
- row = newRow;
- maxSize = max(maxSize, colSpan);
- }
-
- lp.setColumnSpecSpan(new Interval(col, col + colSpan));
- lp.setRowSpecSpan(new Interval(row, row + rowSpan));
-
- if (horizontal) {
- col = col + colSpan;
- } else {
- row = row + rowSpan;
}
}
+ procrusteanFill(maxSizes, minor, minor + minorSpan, major + majorSpan);
}
- };
+
+ if (horizontal) {
+ setCellGroup(lp, major, majorSpan, minor, minorSpan);
+ } else {
+ setCellGroup(lp, minor, minorSpan, major, majorSpan);
+ }
+
+ minor = minor + minorSpan;
+ }
invalidateStructure();
}
@@ -667,7 +685,7 @@
mLayoutParamsValid = false;
mHorizontalAxis.invalidateStructure();
mVerticalAxis.invalidateStructure();
- // This can end up being done twice. But better that than not at all.
+ // This can end up being done twice. Better twice than not at all.
invalidateValues();
}
@@ -872,7 +890,7 @@
private Alignment getAlignment(Alignment alignment, boolean horizontal) {
return (alignment != UNDEFINED_ALIGNMENT) ? alignment :
- (horizontal ? mColumnAlignment : mRowAlignment);
+ (horizontal ? LEFT : BASELINE);
}
// Layout container
@@ -970,6 +988,9 @@
int cx = paddingLeft + x1 + dx;
int cy = paddingTop + y1 + dy;
+ if (width != c.getMeasuredWidth() || height != c.getMeasuredHeight()) {
+ c.measure(makeMeasureSpec(width, EXACTLY), makeMeasureSpec(height, EXACTLY));
+ }
c.layout(cx, cy, cx + width, cy + height);
}
}
@@ -1237,53 +1258,6 @@
return topologicalSort(arcs.toArray(new Arc[arcs.size()]));
}
- private boolean[] findUsed(Collection<Arc> arcs) {
- boolean[] result = new boolean[getCount()];
- for (Arc arc : arcs) {
- Interval span = arc.span;
- int min = min(span.min, span.max);
- int max = max(span.min, span.max);
- for (int i = min; i < max; i++) {
- result[i] = true;
- }
- }
- return result;
- }
-
- // todo unify with findUsed above. Both routines analyze which rows/columns are empty.
- private Collection<Interval> getSpacers() {
- List<Interval> result = new ArrayList<Interval>();
- int V = getCount() + 1;
- int[] leadingEdgeCount = new int[V];
- int[] trailingEdgeCount = new int[V];
- for (int i = 0, N = getChildCount(); i < N; i++) {
- View c = getChildAt(i);
- if (isGone(c)) continue;
- LayoutParams lp = getLayoutParams(c);
- Spec spec = horizontal ? lp.columnSpec : lp.rowSpec;
- Interval span = spec.span;
- leadingEdgeCount[span.min]++;
- trailingEdgeCount[span.max]++;
- }
-
- int lastTrailingEdge = 0;
-
- // treat the parent's edges like peer edges of the opposite type
- trailingEdgeCount[0] = 1;
- leadingEdgeCount[V - 1] = 1;
-
- for (int i = 0; i < V; i++) {
- if (trailingEdgeCount[i] > 0) {
- lastTrailingEdge = i;
- continue; // if this is also a leading edge, don't add a space of length zero
- }
- if (leadingEdgeCount[i] > 0) {
- result.add(new Interval(lastTrailingEdge, i));
- }
- }
- return result;
- }
-
private void addComponentSizes(List<Arc> result, PackedMap<Interval, MutableInt> links) {
for (int i = 0; i < links.keys.length; i++) {
Interval key = links.keys[i];
@@ -1300,28 +1274,11 @@
// Add the maximum values from the components.
addComponentSizes(maxs, getBackwardLinks());
- // Find redundant rows/cols and glue them together with 0-length arcs to link the tree
- boolean[] used = findUsed(mins);
- for (int i = 0; i < getCount(); i++) {
- if (!used[i]) {
- Interval span = new Interval(i, i + 1);
- include(mins, span, new MutableInt(0));
- include(maxs, span.inverse(), new MutableInt(0));
- }
- }
-
// Add ordering constraints to prevent row/col sizes from going negative
if (mOrderPreserved) {
// Add a constraint for every row/col
for (int i = 0; i < getCount(); i++) {
- if (used[i]) {
- include(mins, new Interval(i, i + 1), new MutableInt(0));
- }
- }
- } else {
- // Add a constraint for each row/col that separates opposing component edges
- for (Interval gap : getSpacers()) {
- include(mins, gap, new MutableInt(0));
+ include(mins, new Interval(i, i + 1), new MutableInt(0));
}
}
@@ -1658,10 +1615,8 @@
*
* @attr ref android.R.styleable#GridLayout_Layout_layout_row
* @attr ref android.R.styleable#GridLayout_Layout_layout_rowSpan
- * @attr ref android.R.styleable#GridLayout_Layout_layout_rowFlexibility
* @attr ref android.R.styleable#GridLayout_Layout_layout_column
* @attr ref android.R.styleable#GridLayout_Layout_layout_columnSpan
- * @attr ref android.R.styleable#GridLayout_Layout_layout_columnFlexibility
* @attr ref android.R.styleable#GridLayout_Layout_layout_gravity
*/
public static class LayoutParams extends MarginLayoutParams {
@@ -1688,13 +1643,9 @@
private static final int COLUMN = R.styleable.GridLayout_Layout_layout_column;
private static final int COLUMN_SPAN = R.styleable.GridLayout_Layout_layout_columnSpan;
- private static final int COLUMN_FLEXIBILITY =
- R.styleable.GridLayout_Layout_layout_columnFlexibility;
private static final int ROW = R.styleable.GridLayout_Layout_layout_row;
private static final int ROW_SPAN = R.styleable.GridLayout_Layout_layout_rowSpan;
- private static final int ROW_FLEXIBILITY =
- R.styleable.GridLayout_Layout_layout_rowFlexibility;
private static final int GRAVITY = R.styleable.GridLayout_Layout_layout_gravity;
@@ -1816,13 +1767,11 @@
int column = a.getInt(COLUMN, DEFAULT_COLUMN);
int colSpan = a.getInt(COLUMN_SPAN, DEFAULT_SPAN_SIZE);
- int hFlexibility = a.getInt(COLUMN_FLEXIBILITY, Spec.UNDEFINED_FLEXIBILITY);
- this.columnSpec = spec(column, colSpan, getAlignment(gravity, true), hFlexibility);
+ this.columnSpec = spec(column, colSpan, getAlignment(gravity, true));
int row = a.getInt(ROW, DEFAULT_ROW);
int rowSpan = a.getInt(ROW_SPAN, DEFAULT_SPAN_SIZE);
- int vFlexibility = a.getInt(ROW_FLEXIBILITY, Spec.UNDEFINED_FLEXIBILITY);
- this.rowSpec = spec(row, rowSpan, getAlignment(gravity, false), vFlexibility);
+ this.rowSpec = spec(row, rowSpan, getAlignment(gravity, false));
} finally {
a.recycle();
}
@@ -2150,19 +2099,19 @@
}
}
- /**
- * A Spec defines the horizontal or vertical characteristics of a group of
- * cells. Each spec. defines the <em>grid indices</em>, <em>alignment</em> and
- * <em>flexibility</em> along the appropriate axis.
- * <p>
- * The <em>grid indices</em> are the leading and trailing edges of this cell group.
- * See {@link GridLayout} for a description of the conventions used by GridLayout
- * for grid indices.
- * <p>
- * The <em>alignment</em> property specifies how cells should be aligned in this group.
- * For row groups, this specifies the vertical alignment.
- * For column groups, this specifies the horizontal alignment.
- */
+ /**
+ * A Spec defines the horizontal or vertical characteristics of a group of
+ * cells. Each spec. defines the <em>grid indices</em>, <em>alignment</em> and
+ * <em>flexibility</em> along the appropriate axis.
+ * <p>
+ * The <em>grid indices</em> are the leading and trailing edges of this cell group.
+ * See {@link GridLayout} for a description of the conventions used by GridLayout
+ * for grid indices.
+ * <p>
+ * The <em>alignment</em> property specifies how cells should be aligned in this group.
+ * For row groups, this specifies the vertical alignment.
+ * For column groups, this specifies the horizontal alignment.
+ */
public static class Spec {
private static final int UNDEFINED_FLEXIBILITY = UNDEFINED;
@@ -2170,18 +2119,18 @@
final Alignment alignment;
- /**
- * The <em>flexibility</em> property tells GridLayout how to derive minimum and maximum size
- * values for a component. Specifications are made with respect to a child's
- * 'measured size'. A child's measured size is, in turn, controlled by its
- * height and width layout parameters which either specify a size or, in
- * the case of {@link LayoutParams#WRAP_CONTENT WRAP_CONTENT}, defer to
- * the computed size of the component.
- * <p>
- * A cell group is flexible only if <em>all</em> of its components are flexible.
- * <p>
- * By default, flexibility is {@link #INFLEXIBLE} only when alignment/gravity is undefined.
- */
+ /**
+ * The <em>flexibility</em> property tells GridLayout how to derive minimum and maximum size
+ * values for a component. Specifications are made with respect to a child's
+ * 'measured size'. A child's measured size is, in turn, controlled by its
+ * height and width layout parameters which either specify a size or, in
+ * the case of {@link LayoutParams#WRAP_CONTENT WRAP_CONTENT}, defer to
+ * the computed size of the component.
+ * <p>
+ * A cell group is flexible only if <em>all</em> of its components are flexible.
+ * <p>
+ * By default, flexibility is {@link #INFLEXIBLE} only when alignment/gravity is undefined.
+ */
final int flexibility;
private Spec(Interval span, Alignment alignment, int flexibility) {
@@ -2190,17 +2139,13 @@
this.flexibility = flexibility;
}
- private Spec(Interval span, Alignment alignment) {
- this(span, alignment, UNDEFINED_FLEXIBILITY);
- }
-
/* Copying constructor */
private Spec(Spec that) {
this(that.span, that.alignment, that.flexibility);
}
- Spec(int start, int size, Alignment alignment, int flexibility) {
- this(new Interval(start, start + size), alignment, flexibility);
+ private Spec(int start, int size, Alignment alignment) {
+ this(new Interval(start, start + size), alignment, UNDEFINED);
}
private Spec copyWriteSpan(Interval span) {
@@ -2261,28 +2206,6 @@
}
/**
- * @deprecated Please use {@link #spec(int, int, Alignment)} instead,
- * all spec's that define alignments (gravity) are assumed to be able to stretch.
- *
- * @hide
- */
- @Deprecated
- public static Spec spec(int start, int size, Alignment alignment, int flexibility) {
- return new Spec(start, size, alignment, flexibility);
- }
-
- /**
- * @deprecated Please use {@link #spec(int, Alignment)} instead,
- * all spec's that define alignments (gravity) are assumed to be able to stretch.
- *
- * @hide
- */
- @Deprecated
- public static Spec spec(int start, Alignment alignment, int flexibility) {
- return spec(start, 1, alignment, flexibility);
- }
-
- /**
* Return a Spec, {@code spec}, where:
* <ul>
* <li> {@code spec.span = [start, start + size]} </li>
@@ -2294,7 +2217,7 @@
* @param alignment the alignment
*/
public static Spec spec(int start, int size, Alignment alignment) {
- return spec(start, size, alignment, Spec.UNDEFINED_FLEXIBILITY);
+ return new Spec(start, size, alignment);
}
/**
diff --git a/core/java/android/widget/StackView.java b/core/java/android/widget/StackView.java
index c4ba7c8..4b08f2d 100644
--- a/core/java/android/widget/StackView.java
+++ b/core/java/android/widget/StackView.java
@@ -1406,6 +1406,7 @@
v.setTranslationX(translationX);
drawOutline(mCanvas, bitmap);
+ mCanvas.setBitmap(null);
return bitmap;
}
@@ -1417,6 +1418,7 @@
dest.drawColor(0, PorterDuff.Mode.CLEAR);
dest.setMatrix(mIdentityMatrix);
dest.drawBitmap(mask, xy[0], xy[1], mHolographicPaint);
+ mMaskCanvas.setBitmap(null);
mask.recycle();
}
}
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java
index ab66676..65ee745 100644
--- a/core/java/android/widget/TextView.java
+++ b/core/java/android/widget/TextView.java
@@ -999,7 +999,8 @@
setEllipsize(TextUtils.TruncateAt.END);
break;
case 4:
- setHorizontalFadingEdgeEnabled(true);
+ setHorizontalFadingEdgeEnabled(
+ ViewConfiguration.get(context).isFadingMarqueeEnabled());
setEllipsize(TextUtils.TruncateAt.MARQUEE);
break;
}
@@ -3067,7 +3068,8 @@
if (text instanceof Spanned &&
((Spanned) text).getSpanStart(TextUtils.TruncateAt.MARQUEE) >= 0) {
- setHorizontalFadingEdgeEnabled(true);
+ setHorizontalFadingEdgeEnabled(
+ ViewConfiguration.get(mContext).isFadingMarqueeEnabled());
setEllipsize(TextUtils.TruncateAt.MARQUEE);
}
diff --git a/core/java/com/android/internal/nfc/LlcpConnectionlessSocket.java b/core/java/com/android/internal/nfc/LlcpConnectionlessSocket.java
deleted file mode 100644
index a9cf6b8..0000000
--- a/core/java/com/android/internal/nfc/LlcpConnectionlessSocket.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * Copyright (C) 2010 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.internal.nfc;
-
-import java.io.IOException;
-
-import android.nfc.ErrorCodes;
-import android.nfc.ILlcpConnectionlessSocket;
-import android.nfc.LlcpPacket;
-import android.os.RemoteException;
-import android.util.Log;
-
-public class LlcpConnectionlessSocket {
- private static final String TAG = "LlcpConnectionlessSocket";
-
- /**
- * The handle returned by the NFC service and used to identify the LLCP connectionless socket in
- * every call of this class.
- */
- protected int mHandle;
-
-
- /**
- * The entry point for LLCP Connectionless socket operations.
- */
- protected ILlcpConnectionlessSocket mService;
-
-
- /**
- * Internal constructor for the LlcpConnectionlessSocket class.
- *
- * @param service The entry point to the Nfc Service for LLCP Connectionless socket class.
- * @param handle The handle returned by the NFC service and used to identify
- * the socket in subsequent calls.
- */
- LlcpConnectionlessSocket(ILlcpConnectionlessSocket service, int handle) {
- this.mService = service;
- this.mHandle = handle;
- }
-
- /**
- * Send data to a specific LLCP Connectionless client
- *
- * @param packet Service Access Point number related to a LLCP
- * Connectionless client and a data buffer to send
- * @throws IOException if the LLCP link has been lost or deactivated.
- */
- public void sendTo(LlcpPacket packet) throws IOException {
- try {
- int result = mService.sendTo(mHandle, packet);
- // Handle potential errors
- if (ErrorCodes.isError(result)) {
- throw new IOException();
- }
- } catch (RemoteException e) {
- Log.e(TAG, "RemoteException in sendTo(): ", e);
- }
- }
-
- /**
- * Receive data from a LLCP Connectionless client
- *
- * @return data data received from a specific LLCP Connectionless client
- * @throws IOException if the LLCP link has been lost or deactivated.
- * @see LlcpPacket
- */
- public LlcpPacket receiveFrom() throws IOException {
- try {
- LlcpPacket packet = mService.receiveFrom(mHandle);
- if (packet != null) {
- return packet;
- }else{
- // Handle potential errors
- throw new IOException();
- }
- } catch (RemoteException e) {
- Log.e(TAG, "RemoteException in receiveFrom(): ", e);
- }
- return null;
- }
-
- /**
- * Close the created Connectionless socket.
- */
- public void close() {
- try {
- mService.close(mHandle);
- } catch (RemoteException e) {
- Log.e(TAG, "RemoteException in close(): ", e);
- }
- }
-
- /**
- * Returns the local Service Access Point number of the socket
- *
- * @return sap
- */
- public int getSap() {
- int sap = 0;
-
- try {
- sap = mService.getSap(mHandle);
-
- } catch (RemoteException e) {
-
- e.printStackTrace();
- }
- return sap;
- }
-}
diff --git a/core/java/com/android/internal/nfc/LlcpException.java b/core/java/com/android/internal/nfc/LlcpException.java
deleted file mode 100644
index da4e91e..0000000
--- a/core/java/com/android/internal/nfc/LlcpException.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2010 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.internal.nfc;
-
-/**
- * Generic exception thrown in case something unexpected happened during a
- * LLCP communication.
- */
-public class LlcpException extends Exception {
- /**
- * Constructs a new LlcpException with the current stack trace and the
- * specified detail message.
- *
- * @param s the detail message for this exception.
- */
- public LlcpException(String s) {
- super(s);
- }
-}
diff --git a/core/java/com/android/internal/nfc/LlcpServiceSocket.java b/core/java/com/android/internal/nfc/LlcpServiceSocket.java
deleted file mode 100644
index d616860..0000000
--- a/core/java/com/android/internal/nfc/LlcpServiceSocket.java
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * Copyright (C) 2010 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.internal.nfc;
-
-import java.io.IOException;
-
-import android.nfc.ErrorCodes;
-import android.nfc.ILlcpSocket;
-import android.nfc.ILlcpServiceSocket;
-import android.os.RemoteException;
-import android.util.Log;
-
-/**
- * LlcpServiceSocket represents a LLCP Service to be used in a
- * Connection-oriented communication
- */
-public class LlcpServiceSocket {
-
- private static final String TAG = "LlcpServiceSocket";
-
- /**
- * The handle returned by the NFC service and used to identify the LLCP
- * Service socket in every call of this class.
- */
- protected int mHandle;
-
- /**
- * The entry point for LLCP Service socket operations.
- */
- protected ILlcpServiceSocket mService;
-
- private final ILlcpSocket mLlcpSocketService;
-
- static LlcpException convertErrorToLlcpException(int errorCode) {
- return convertErrorToLlcpException(errorCode, null);
- }
-
- static LlcpException convertErrorToLlcpException(int errorCode,
- String message) {
- if (message == null) {
- message = "";
- } else {
- message = " (" + message + ")";
- }
-
- switch (errorCode) {
- case ErrorCodes.ERROR_SOCKET_CREATION:
- return new LlcpException(
- "Error during the creation of an Llcp socket" + message);
- case ErrorCodes.ERROR_INSUFFICIENT_RESOURCES:
- return new LlcpException("Not enough ressources are available"
- + message);
- default:
- return new LlcpException("Unkown error code " + errorCode + message);
- }
- }
-
- /**
- * Internal constructor for the LlcpServiceSocket class.
- *
- * @param service
- * The entry point to the Nfc Service for LlcpServiceSocket
- * class.
- * @param handle
- * The handle returned by the NFC service and used to identify
- * the socket in subsequent calls.
- * @hide
- */
- public LlcpServiceSocket(ILlcpServiceSocket service, ILlcpSocket socketService, int handle) {
- this.mService = service;
- this.mHandle = handle;
- this.mLlcpSocketService = socketService;
- }
-
- /**
- * Wait for incomming connection request from a LLCP client and accept this
- * request
- *
- * @return socket object to be used to communicate with a LLCP client
- *
- * @throws IOException
- * if the llcp link is lost or deactivated
- * @throws LlcpException
- * if not enough ressources are available
- *
- * @see LlcpSocket
- */
- public LlcpSocket accept() throws IOException, LlcpException {
-
- try {
- int handle = mService.accept(mHandle);
- // Handle potential errors
- if (ErrorCodes.isError(handle)) {
- if (handle == ErrorCodes.ERROR_IO) {
- throw new IOException();
- } else {
- throw convertErrorToLlcpException(handle);
- }
- }
-
- // Build the public LlcpSocket object
- return new LlcpSocket(mLlcpSocketService, handle);
- } catch (RemoteException e) {
- Log.e(TAG, "RemoteException in accept(): ", e);
- return null;
- }
-
- }
-
- /**
- * Close the created Llcp Service socket
- */
- public void close() {
- try {
- mService.close(mHandle);
- } catch (RemoteException e) {
- Log.e(TAG, "RemoteException in close(): ", e);
- }
- }
-}
diff --git a/core/java/com/android/internal/nfc/LlcpSocket.java b/core/java/com/android/internal/nfc/LlcpSocket.java
deleted file mode 100644
index 63888ae..0000000
--- a/core/java/com/android/internal/nfc/LlcpSocket.java
+++ /dev/null
@@ -1,289 +0,0 @@
-/*
- * Copyright (C) 2010 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.internal.nfc;
-
-import java.io.IOException;
-
-import android.nfc.ErrorCodes;
-import android.nfc.ILlcpSocket;
-import android.os.RemoteException;
-import android.util.Log;
-
-/**
- * LlcpClientSocket represents a LLCP Connection-Oriented client to be used in a
- * connection-oriented communication
- */
-public class LlcpSocket {
-
- private static final String TAG = "LlcpSocket";
-
- /**
- * The handle returned by the NFC service and used to identify the LLCP
- * socket in every call of this class.
- */
- protected int mHandle;
-
- /**
- * The entry point for LLCP socket operations.
- */
- protected ILlcpSocket mService;
-
- static LlcpException convertErrorToLlcpException(int errorCode) {
- return convertErrorToLlcpException(errorCode, null);
- }
-
- static LlcpException convertErrorToLlcpException(int errorCode,
- String message) {
- if (message == null) {
- message = "";
- } else {
- message = " (" + message + ")";
- }
-
- switch (errorCode) {
- case ErrorCodes.ERROR_SOCKET_CREATION:
- return new LlcpException(
- "Error during the creation of an Llcp socket" + message);
- case ErrorCodes.ERROR_INSUFFICIENT_RESOURCES:
- return new LlcpException("Not enough ressources are available"
- + message);
- case ErrorCodes.ERROR_SOCKET_NOT_CONNECTED:
- return new LlcpException("Socket not connected to an Llcp Service"
- + message);
- default:
- return new LlcpException("Unkown error code " + errorCode + message);
- }
- }
-
- /**
- * Internal constructor for the LlcpSocket class.
- *
- * @param service
- * The entry point to the Nfc Service for LlcpServiceSocket
- * class.
- * @param handle
- * The handle returned by the NFC service and used to identify
- * the socket in subsequent calls.
- * @hide
- */
- public LlcpSocket(ILlcpSocket service, int handle) {
- this.mService = service;
- this.mHandle = handle;
- }
-
- /**
- * Connect request to a specific LLCP Service by its SAP.
- *
- * @param sap
- * Service Access Point number of the LLCP Service
- * @throws IOException
- * if the LLCP has been lost or deactivated.
- * @throws LlcpException
- * if the connection request is rejected by the remote LLCP
- * Service
- */
- public void connect(int sap) throws IOException, LlcpException {
- try {
- int result = mService.connect(mHandle, sap);
- // Handle potential errors
- if (ErrorCodes.isError(result)) {
- if (result == ErrorCodes.ERROR_IO) {
- throw new IOException();
- } else {
- throw convertErrorToLlcpException(result);
- }
- }
- } catch (RemoteException e) {
- Log.e(TAG, "RemoteException in accept(): ", e);
- }
- }
-
- /**
- * Connect request to a specific LLCP Service by its Service Name.
- *
- * @param sn
- * Service Name of the LLCP Service
- * @throws IOException
- * if the LLCP has been lost or deactivated.
- * @throws LlcpException
- * if the connection request is rejected by the remote LLCP
- * Service
- */
- public void connect(String sn) throws IOException, LlcpException {
- try {
- int result = mService.connectByName(mHandle, sn);
- // Handle potential errors
- if (ErrorCodes.isError(result)) {
- if (result == ErrorCodes.ERROR_IO) {
- throw new IOException();
- } else {
- throw convertErrorToLlcpException(result);
- }
- }
- } catch (RemoteException e) {
- Log.e(TAG, "RemoteException in accept(): ", e);
- }
- }
-
- /**
- * Disconnect request to the connected LLCP socket and close the created
- * socket.
- *
- * @throws IOException
- * if the LLCP has been lost or deactivated.
- */
- public void close() throws IOException {
- try {
- int result = mService.close(mHandle);
- // Handle potential errors
- if (ErrorCodes.isError(result)) {
- throw new IOException();
- }
- } catch (RemoteException e) {
- Log.e(TAG, "RemoteException in close(): ", e);
- }
- }
-
- /**
- * Send data to the connected LLCP Socket.
- *
- * @throws IOException
- * if the LLCP has been lost or deactivated.
- */
- public void send(byte[] data) throws IOException {
- try {
- int result = mService.send(mHandle, data);
- // Handle potential errors
- if (ErrorCodes.isError(result)) {
- throw new IOException();
- }
- } catch (RemoteException e) {
- Log.e(TAG, "RemoteException in send(): ", e);
- }
- }
-
- /**
- * Receive data from the connected LLCP socket
- *
- * @param receiveBuffer
- * a buffer for the received data
- * @return length length of the data received
- * @throws IOException
- * if the LLCP has been lost or deactivated.
- */
- public int receive(byte[] receiveBuffer) throws IOException {
- int receivedLength = 0;
- try {
- receivedLength = mService.receive(mHandle, receiveBuffer);
- if(receivedLength == 0){
- throw new IOException();
- }
- } catch (RemoteException e) {
- Log.e(TAG, "RemoteException in receive(): ", e);
- }
-
- return receivedLength;
- }
-
- /**
- * Returns the local Service Access Point number of the socket
- *
- * @return localSap
- */
- public int getLocalSap() {
- try {
- return mService.getLocalSap(mHandle);
- } catch (RemoteException e) {
- Log.e(TAG, "RemoteException in getLocalSap(): ", e);
- return 0;
- }
- }
-
- /**
- * Returns the local Maximum Information Unit(MIU) of the socket
- *
- * @return miu
- */
- public int getLocalSocketMiu() {
- try {
- return mService.getLocalSocketMiu(mHandle);
- } catch (RemoteException e) {
- Log.e(TAG, "RemoteException in getLocalSocketMiu(): ", e);
- return 0;
- }
- }
-
- /**
- * Returns the local Receive Window(RW) of the socket
- *
- * @return rw
- */
- public int getLocalSocketRw() {
- try {
- return mService.getLocalSocketRw(mHandle);
- } catch (RemoteException e) {
- Log.e(TAG, "RemoteException in getLocalSocketRw(): ", e);
- return 0;
- }
- }
-
- /**
- * Returns the remote Maximum Information Unit(MIU) of the socket.
- * <p>
- * This method must be called when the socket is in CONNECTED_STATE
- *
- * @return remoteMiu
- * @throws LlcpException
- * if the LlcpClientSocket is not in a CONNECTED_STATE
- */
- public int getRemoteSocketMiu() throws LlcpException {
- try {
- int result = mService.getRemoteSocketMiu(mHandle);
- if(result != ErrorCodes.ERROR_SOCKET_NOT_CONNECTED){
- return result;
- }else{
- throw convertErrorToLlcpException(result);
- }
- } catch (RemoteException e) {
- Log.e(TAG, "RemoteException in getRemoteSocketMiu(): ", e);
- return 0;
- }
- }
-
- /**
- * Returns the remote Receive Window(RW) of the connected remote socket.
- * <p>
- * This method must be called when the socket is in CONNECTED_STATE
- *
- * @return rw
- * @throws LlcpException
- * if the LlcpClientSocket is not in a CONNECTED_STATE
- */
- public int getRemoteSocketRw() throws LlcpException {
- try {
- int result = mService.getRemoteSocketRw(mHandle);
- if( result != ErrorCodes.ERROR_SOCKET_NOT_CONNECTED){
- return result;
- }else{
- throw convertErrorToLlcpException(result);
- }
- } catch (RemoteException e) {
- Log.e(TAG, "RemoteException in getRemoteSocketRw(): ", e);
- return 0;
- }
- }
-}
diff --git a/core/java/com/android/internal/nfc/NfcException.java b/core/java/com/android/internal/nfc/NfcException.java
deleted file mode 100644
index 29a99c6..0000000
--- a/core/java/com/android/internal/nfc/NfcException.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2010 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.internal.nfc;
-
-/**
- * Generic exception thrown in case something unexpected happened during the
- * NFCManager operations.
- */
-public class NfcException extends Exception {
- /**
- * Constructs a new NfcException with the current stack trace and the
- * specified detail message.
- *
- * @param s the detail message for this exception.
- */
- public NfcException(String s) {
- super(s);
- }
-}
diff --git a/core/java/com/android/internal/nfc/P2pDevice.java b/core/java/com/android/internal/nfc/P2pDevice.java
deleted file mode 100644
index 8ab9aad..0000000
--- a/core/java/com/android/internal/nfc/P2pDevice.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Copyright (C) 2010 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.internal.nfc;
-
-import java.io.IOException;
-
-/**
- * P2pDevice is the abstract base class for all supported P2P targets the
- * NfcManager can handle.
- */
-public abstract class P2pDevice {
-
- /**
- * Peer-to-Peer Target.
- */
- public static final short MODE_P2P_TARGET = 0x00;
-
- /**
- * Peer-to-Peer Initiator.
- */
- public static final short MODE_P2P_INITIATOR = 0x01;
-
- /**
- * Invalid target type.
- */
- public static final short MODE_INVALID = 0xff;
-
- /**
- * Target handle, used by native calls.
- */
- protected int mHandle;
-
- /**
- * Flag set when the object is closed and thus not usable any more.
- */
- protected boolean isClosed = false;
-
- /**
- * Prevent default constructor to be public.
- */
- protected P2pDevice() {
- }
-
- /**
- * Returns the remote NFC-IP1 General Bytes.
- *
- * @return remote general bytes
- * @throws IOException
- */
- public byte[] getGeneralBytes() throws IOException {
- // Should not be called directly (use subclasses overridden method instead)
- return null;
- }
-
- /**
- * Returns target type. The value returned can be one of the TYPE_*
- * constants.
- *
- * @return target type.
- */
- public int getMode() {
- // Should not be called directly (use subclasses overridden method instead)
- return MODE_INVALID;
- }
-}
diff --git a/core/java/com/android/internal/nfc/P2pInitiator.java b/core/java/com/android/internal/nfc/P2pInitiator.java
deleted file mode 100644
index 46ae9ab..0000000
--- a/core/java/com/android/internal/nfc/P2pInitiator.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * Copyright (C) 2010 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.internal.nfc;
-
-import java.io.IOException;
-
-import android.nfc.IP2pInitiator;
-import android.os.RemoteException;
-import android.util.Log;
-
-/**
- * P2pInitiator represents the initiator in an NFC-IP1 peer-to-peer
- * communication.
- *
- * @see P2pTarget
- */
-public class P2pInitiator extends P2pDevice {
-
- private static final String TAG = "P2pInitiator";
-
- /**
- * The entry point for P2P tag operations.
- */
- private final IP2pInitiator mService;
-
- /**
- * Internal constructor for the P2pInitiator class.
- *
- * @param handle The handle returned by the NFC service and used to identify
- * the tag in subsequent calls.
- */
- P2pInitiator(IP2pInitiator service, int handle) {
- this.mService = service;
- this.mHandle = handle;
- }
-
- /**
- * Receives data from a P2pInitiator.
- *
- * @return data sent by the P2pInitiator.
- * @throws IOException if the target has been lost or if the connection has
- * been closed.
- */
- public byte[] receive() throws IOException {
- try {
- byte[] result = mService.receive(mHandle);
- if (result == null) {
- throw new IOException("Tag has been lost");
- }
- return result;
- } catch (RemoteException e) {
- Log.e(TAG, "RemoteException in receive(): ", e);
- return null;
- }
- }
-
- /**
- * Sends data to a P2pInitiator.
- *
- * @param data data to be sent to the P2pInitiator.
- * @throws IOException if the target has been lost or if the connection has
- * been closed.
- */
- public void send(byte[] data) throws IOException {
- try {
- boolean isSuccess = mService.send(mHandle, data);
- if (!isSuccess) {
- throw new IOException("Tag has been lost");
- }
- } catch (RemoteException e) {
- Log.e(TAG, "RemoteException in send(): ", e);
- }
- }
-
- @Override
- public byte[] getGeneralBytes() {
- try {
- return mService.getGeneralBytes(mHandle);
- } catch (RemoteException e) {
- Log.e(TAG, "RemoteException in getGeneralBytes(): ", e);
- return null;
- }
- }
-
- @Override
- public int getMode() {
- return P2pDevice.MODE_P2P_INITIATOR;
- }
-
-}
diff --git a/core/java/com/android/internal/nfc/P2pTarget.java b/core/java/com/android/internal/nfc/P2pTarget.java
deleted file mode 100644
index 7b59da3..0000000
--- a/core/java/com/android/internal/nfc/P2pTarget.java
+++ /dev/null
@@ -1,170 +0,0 @@
-/*
- * Copyright (C) 2010 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.internal.nfc;
-
-import java.io.IOException;
-
-import android.nfc.ErrorCodes;
-import android.nfc.IP2pTarget;
-import android.os.RemoteException;
-import android.util.Log;
-
-/**
- * P2pTarget represents the target in an NFC-IP1 peer-to-peer communication.
- *
- * @see P2pInitiator
- */
-public class P2pTarget extends P2pDevice {
-
- private static final String TAG = "P2pTarget";
-
- /**
- * The entry point for P2P tag operations.
- */
- private final IP2pTarget mService;
-
- /**
- * Flag set when the object is closed and thus not usable any more.
- */
- private final boolean isClosed = false;
-
- /**
- * Flag set when the tag is connected.
- */
- private boolean isConnected = false;
-
- /**
- * Check if tag is still opened.
- *
- * @return data sent by the P2pInitiator.
- * @throws NfcException if accessing a closed target.
- */
- public void checkState() throws NfcException {
- if(isClosed) {
- throw new NfcException("Tag has been closed.");
- }
- }
-
- /**
- * Internal constructor for the P2pTarget class.
- *
- * @param handle The handle returned by the NFC service and used to identify
- * the tag in subsequent calls.
- */
- P2pTarget(IP2pTarget service, int handle) {
- this.mService = service;
- this.mHandle = handle;
- }
-
- /**
- * Connects to the P2pTarget. This shall be called prior to any other
- * operation on the P2pTarget.
- *
- * @throws NfcException
- */
- public void connect() throws NfcException {
- // Check state
- checkState();
- if (isConnected) {
- throw new NfcException("Already connected");
- }
-
- // Perform connect
- try {
- int result = mService.connect(mHandle);
- if (ErrorCodes.isError(result)) {
- if (result == ErrorCodes.ERROR_IO) {
- throw new NfcException("Failed to connect");
- }
- else {
- // TODO(nxp)
- // throw NfcAdapter.convertErrorToNfcException(result);
- }
- }
- isConnected = true;
- } catch (RemoteException e) {
- Log.e(TAG, "RemoteException in connect(): ", e);
- }
- }
-
- /**
- * Disconnects from the P2p Target. This must be called so that other
- * targets can be discovered. It restarts the NFC discovery loop.
- *
- * @throws NFCException
- */
- public void disconnect() throws NfcException {
- checkState();
- try {
- mService.disconnect(mHandle);
- isConnected = true;
- } catch (RemoteException e) {
- Log.e(TAG, "RemoteException in disconnect(): ", e);
- }
- }
-
- /**
- * Exchanges raw data with the P2pTarget.
- *
- * @param data data to be sent to the P2pTarget
- * @return data sent in response by the P2pTarget
- * @throws IOException if the target has been lost or the connection has
- * been closed.
- * @throws NfcException in case of failure within the stack
- */
- public byte[] transceive(byte[] data) throws IOException, NfcException {
- // Check state
- checkState();
-
- // Perform transceive
- try {
- byte[] response = mService.transceive(mHandle, data);
- if (response == null) {
- throw new IOException("Transceive failed");
- }
- return response;
- } catch (RemoteException e) {
- Log.e(TAG, "RemoteException in transceive(): ", e);
- return null;
- }
- }
-
- /**
- * Get the General bytes of the connected P2P Target
- *
- * @return general bytes of the connected P2P Target
- * @throws IOException if the target in not in connected state
- */
- @Override
- public byte[] getGeneralBytes() throws IOException {
- try {
- if(isConnected){
- return mService.getGeneralBytes(mHandle);
- }else{
- throw new IOException("Target not in connected state");
- }
- } catch (RemoteException e) {
- Log.e(TAG, "RemoteException in getGeneralBytes(): ", e);
- return null;
- }
- }
-
- @Override
- public int getMode() {
- return P2pDevice.MODE_P2P_TARGET;
- }
-}
diff --git a/core/java/com/android/internal/textservice/ITextServicesManager.aidl b/core/java/com/android/internal/textservice/ITextServicesManager.aidl
index eae1ac8..4d7dfbb 100644
--- a/core/java/com/android/internal/textservice/ITextServicesManager.aidl
+++ b/core/java/com/android/internal/textservice/ITextServicesManager.aidl
@@ -28,10 +28,10 @@
*/
interface ITextServicesManager {
SpellCheckerInfo getCurrentSpellChecker(String locale);
- oneway void getSpellCheckerService(in SpellCheckerInfo info, in String locale,
+ oneway void getSpellCheckerService(String sciId, in String locale,
in ITextServicesSessionListener tsListener,
in ISpellCheckerSessionListener scListener);
oneway void finishSpellCheckerService(in ISpellCheckerSessionListener listener);
- oneway void setCurrentSpellChecker(in SpellCheckerInfo info);
+ oneway void setCurrentSpellChecker(String sciId);
SpellCheckerInfo[] getEnabledSpellCheckers();
}
diff --git a/core/jni/android/graphics/Canvas.cpp b/core/jni/android/graphics/Canvas.cpp
index 682c3c4..f8be136 100644
--- a/core/jni/android/graphics/Canvas.cpp
+++ b/core/jni/android/graphics/Canvas.cpp
@@ -88,9 +88,12 @@
return canvas->getDevice()->accessBitmap(false).height();
}
- static void setBitmap(JNIEnv* env, jobject, SkCanvas* canvas,
- SkBitmap* bitmap) {
- canvas->setBitmapDevice(*bitmap);
+ static void setBitmap(JNIEnv* env, jobject, SkCanvas* canvas, SkBitmap* bitmap) {
+ if (bitmap) {
+ canvas->setBitmapDevice(*bitmap);
+ } else {
+ canvas->setDevice(NULL);
+ }
}
static int saveAll(JNIEnv* env, jobject jcanvas) {
diff --git a/core/jni/android/graphics/NinePatchImpl.cpp b/core/jni/android/graphics/NinePatchImpl.cpp
index 579749a..a3e36ee 100644
--- a/core/jni/android/graphics/NinePatchImpl.cpp
+++ b/core/jni/android/graphics/NinePatchImpl.cpp
@@ -160,14 +160,6 @@
return;
}
- // if the nine patch is bigger than the dst on a given axis we cannot
- // stretch properly so just draw the bitmap as best as possible and return
- if (bitmap.width() >= bounds.width() || bitmap.height() >= bounds.height())
- {
- canvas->drawBitmapRect(bitmap, NULL, bounds, paint);
- return;
- }
-
// should try a quick-reject test before calling lockPixels
SkAutoLockPixels alp(bitmap);
diff --git a/core/jni/android_hardware_Camera.cpp b/core/jni/android_hardware_Camera.cpp
index 3dcaa37..884fa78 100644
--- a/core/jni/android_hardware_Camera.cpp
+++ b/core/jni/android_hardware_Camera.cpp
@@ -45,6 +45,8 @@
jfieldID rect_right;
jfieldID rect_bottom;
jmethodID post_event;
+ jmethodID rect_constructor;
+ jmethodID face_constructor;
};
static fields_t fields;
@@ -57,8 +59,10 @@
JNICameraContext(JNIEnv* env, jobject weak_this, jclass clazz, const sp<Camera>& camera);
~JNICameraContext() { release(); }
virtual void notify(int32_t msgType, int32_t ext1, int32_t ext2);
- virtual void postData(int32_t msgType, const sp<IMemory>& dataPtr);
+ virtual void postData(int32_t msgType, const sp<IMemory>& dataPtr,
+ camera_frame_metadata_t *metadata);
virtual void postDataTimestamp(nsecs_t timestamp, int32_t msgType, const sp<IMemory>& dataPtr);
+ void postMetadata(JNIEnv *env, int32_t msgType, camera_frame_metadata_t *metadata);
void addCallbackBuffer(JNIEnv *env, jbyteArray cbb, int msgType);
void setCallbackMode(JNIEnv *env, bool installed, bool manualMode);
sp<Camera> getCamera() { Mutex::Autolock _l(mLock); return mCamera; }
@@ -74,6 +78,8 @@
jobject mCameraJObjectWeak; // weak reference to java object
jclass mCameraJClass; // strong reference to java class
sp<Camera> mCamera; // strong reference to native object
+ jclass mFaceClass; // strong reference to Face class
+ jclass mRectClass; // strong reference to Rect class
Mutex mLock;
/*
@@ -124,6 +130,12 @@
mCameraJClass = (jclass)env->NewGlobalRef(clazz);
mCamera = camera;
+ jclass faceClazz = env->FindClass("android/hardware/Camera$Face");
+ mFaceClass = (jclass) env->NewGlobalRef(faceClazz);
+
+ jclass rectClazz = env->FindClass("android/graphics/Rect");
+ mRectClass = (jclass) env->NewGlobalRef(rectClazz);
+
mManualBufferMode = false;
mManualCameraCallbackSet = false;
}
@@ -142,6 +154,14 @@
env->DeleteGlobalRef(mCameraJClass);
mCameraJClass = NULL;
}
+ if (mFaceClass != NULL) {
+ env->DeleteGlobalRef(mFaceClass);
+ mFaceClass = NULL;
+ }
+ if (mRectClass != NULL) {
+ env->DeleteGlobalRef(mRectClass);
+ mRectClass = NULL;
+ }
clearCallbackBuffers_l(env);
mCamera.clear();
}
@@ -263,7 +283,8 @@
}
}
-void JNICameraContext::postData(int32_t msgType, const sp<IMemory>& dataPtr)
+void JNICameraContext::postData(int32_t msgType, const sp<IMemory>& dataPtr,
+ camera_frame_metadata_t *metadata)
{
// VM pointer will be NULL if object is released
Mutex::Autolock _l(mLock);
@@ -273,8 +294,10 @@
return;
}
+ int32_t dataMsgType = msgType & ~CAMERA_MSG_PREVIEW_METADATA;
+
// return data based on callback type
- switch (msgType) {
+ switch (dataMsgType) {
case CAMERA_MSG_VIDEO_FRAME:
// should never happen
break;
@@ -285,23 +308,63 @@
LOGV("rawCallback");
if (mRawImageCallbackBuffers.isEmpty()) {
env->CallStaticVoidMethod(mCameraJClass, fields.post_event,
- mCameraJObjectWeak, msgType, 0, 0, NULL);
+ mCameraJObjectWeak, dataMsgType, 0, 0, NULL);
} else {
- copyAndPost(env, dataPtr, msgType);
+ copyAndPost(env, dataPtr, dataMsgType);
}
break;
- default:
- LOGV("dataCallback(%d, %p)", msgType, dataPtr.get());
- copyAndPost(env, dataPtr, msgType);
+ // There is no data.
+ case 0:
break;
+
+ default:
+ LOGV("dataCallback(%d, %p)", dataMsgType, dataPtr.get());
+ copyAndPost(env, dataPtr, dataMsgType);
+ break;
+ }
+
+ // post frame metadata to Java
+ if (metadata && (msgType & CAMERA_MSG_PREVIEW_METADATA)) {
+ postMetadata(env, CAMERA_MSG_PREVIEW_METADATA, metadata);
}
}
void JNICameraContext::postDataTimestamp(nsecs_t timestamp, int32_t msgType, const sp<IMemory>& dataPtr)
{
// TODO: plumb up to Java. For now, just drop the timestamp
- postData(msgType, dataPtr);
+ postData(msgType, dataPtr, NULL);
+}
+
+void JNICameraContext::postMetadata(JNIEnv *env, int32_t msgType, camera_frame_metadata_t *metadata)
+{
+ jobjectArray obj = NULL;
+ obj = (jobjectArray) env->NewObjectArray(metadata->number_of_faces,
+ mFaceClass, NULL);
+ if (obj == NULL) {
+ LOGE("Couldn't allocate face metadata array");
+ return;
+ }
+
+ for (int i = 0; i < metadata->number_of_faces; i++) {
+ jobject face = env->NewObject(mFaceClass, fields.face_constructor);
+ env->SetObjectArrayElement(obj, i, face);
+
+ jobject rect = env->NewObject(mRectClass, fields.rect_constructor);
+ env->SetIntField(rect, fields.rect_left, metadata->faces[i].rect[0]);
+ env->SetIntField(rect, fields.rect_top, metadata->faces[i].rect[1]);
+ env->SetIntField(rect, fields.rect_right, metadata->faces[i].rect[2]);
+ env->SetIntField(rect, fields.rect_bottom, metadata->faces[i].rect[3]);
+
+ env->SetObjectField(face, fields.face_rect, rect);
+ env->SetIntField(face, fields.face_score, metadata->faces[i].score);
+
+ env->DeleteLocalRef(face);
+ env->DeleteLocalRef(rect);
+ }
+ env->CallStaticVoidMethod(mCameraJClass, fields.post_event,
+ mCameraJObjectWeak, msgType, 0, 0, obj);
+ env->DeleteLocalRef(obj);
}
void JNICameraContext::setCallbackMode(JNIEnv *env, bool installed, bool manualMode)
@@ -715,7 +778,7 @@
}
static void android_hardware_Camera_startFaceDetection(JNIEnv *env, jobject thiz,
- jint type, jobjectArray face)
+ jint type)
{
LOGV("startFaceDetection");
JNICameraContext* context;
@@ -878,6 +941,19 @@
return -1;
}
+ clazz = env->FindClass("android/graphics/Rect");
+ fields.rect_constructor = env->GetMethodID(clazz, "<init>", "()V");
+ if (fields.rect_constructor == NULL) {
+ LOGE("Can't find android/graphics/Rect.Rect()");
+ return -1;
+ }
+
+ clazz = env->FindClass("android/hardware/Camera$Face");
+ fields.face_constructor = env->GetMethodID(clazz, "<init>", "()V");
+ if (fields.face_constructor == NULL) {
+ LOGE("Can't find android/hardware/Camera$Face.Face()");
+ return -1;
+ }
// Register native functions
return AndroidRuntime::registerNativeMethods(env, "android/hardware/Camera",
diff --git a/core/jni/android_view_VelocityTracker.cpp b/core/jni/android_view_VelocityTracker.cpp
index daa0adc..01a4c09 100644
--- a/core/jni/android_view_VelocityTracker.cpp
+++ b/core/jni/android_view_VelocityTracker.cpp
@@ -69,8 +69,7 @@
mCalculatedIdBits = idBits;
for (uint32_t index = 0; !idBits.isEmpty(); index++) {
- uint32_t id = idBits.firstMarkedBit();
- idBits.clearBit(id);
+ uint32_t id = idBits.clearFirstMarkedBit();
float vx, vy;
mVelocityTracker.getVelocity(id, &vx, &vy);
diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml
index 9d0901a..f99a94c 100644
--- a/core/res/AndroidManifest.xml
+++ b/core/res/AndroidManifest.xml
@@ -1504,10 +1504,6 @@
android:excludeFromRecents="true">
</activity>
- <service android:name="com.android.internal.service.wallpaper.ImageWallpaper"
- android:permission="android.permission.BIND_WALLPAPER">
- </service>
-
<receiver android:name="com.android.server.BootReceiver" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
diff --git a/core/res/res/drawable-hdpi/btn_default_disabled_focused_holo_dark.9.png b/core/res/res/drawable-hdpi/btn_default_disabled_focused_holo_dark.9.png
index 1b34672..3239dd2 100644
--- a/core/res/res/drawable-hdpi/btn_default_disabled_focused_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/btn_default_disabled_focused_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_default_disabled_focused_holo_light.9.png b/core/res/res/drawable-hdpi/btn_default_disabled_focused_holo_light.9.png
index 1b34672..3239dd2 100644
--- a/core/res/res/drawable-hdpi/btn_default_disabled_focused_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/btn_default_disabled_focused_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_default_disabled_holo.9.png b/core/res/res/drawable-hdpi/btn_default_disabled_holo.9.png
index 71ae113..6840962 100644
--- a/core/res/res/drawable-hdpi/btn_default_disabled_holo.9.png
+++ b/core/res/res/drawable-hdpi/btn_default_disabled_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_default_disabled_holo_dark.9.png b/core/res/res/drawable-hdpi/btn_default_disabled_holo_dark.9.png
index 739dff3..45c957b 100644
--- a/core/res/res/drawable-hdpi/btn_default_disabled_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/btn_default_disabled_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_default_disabled_holo_light.9.png b/core/res/res/drawable-hdpi/btn_default_disabled_holo_light.9.png
index 26976c5..45c957b 100644
--- a/core/res/res/drawable-hdpi/btn_default_disabled_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/btn_default_disabled_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_default_focused_holo.9.png b/core/res/res/drawable-hdpi/btn_default_focused_holo.9.png
index 9d787f1..6549253 100644
--- a/core/res/res/drawable-hdpi/btn_default_focused_holo.9.png
+++ b/core/res/res/drawable-hdpi/btn_default_focused_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_default_focused_holo_dark.9.png b/core/res/res/drawable-hdpi/btn_default_focused_holo_dark.9.png
index 7699c47..ef3ec7a 100644
--- a/core/res/res/drawable-hdpi/btn_default_focused_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/btn_default_focused_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_default_focused_holo_light.9.png b/core/res/res/drawable-hdpi/btn_default_focused_holo_light.9.png
index 7699c47..ef3ec7a 100644
--- a/core/res/res/drawable-hdpi/btn_default_focused_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/btn_default_focused_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_default_normal_holo.9.png b/core/res/res/drawable-hdpi/btn_default_normal_holo.9.png
index 1e9c9d2..f4f657b 100644
--- a/core/res/res/drawable-hdpi/btn_default_normal_holo.9.png
+++ b/core/res/res/drawable-hdpi/btn_default_normal_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_default_normal_holo_dark.9.png b/core/res/res/drawable-hdpi/btn_default_normal_holo_dark.9.png
index 27e7965..ef12e72 100644
--- a/core/res/res/drawable-hdpi/btn_default_normal_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/btn_default_normal_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_default_normal_holo_light.9.png b/core/res/res/drawable-hdpi/btn_default_normal_holo_light.9.png
index 1dbabd3..ef12e72 100644
--- a/core/res/res/drawable-hdpi/btn_default_normal_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/btn_default_normal_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_default_pressed_holo.9.png b/core/res/res/drawable-hdpi/btn_default_pressed_holo.9.png
index 12eec10..ec7fa78 100644
--- a/core/res/res/drawable-hdpi/btn_default_pressed_holo.9.png
+++ b/core/res/res/drawable-hdpi/btn_default_pressed_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_default_pressed_holo_dark.9.png b/core/res/res/drawable-hdpi/btn_default_pressed_holo_dark.9.png
index 5a94b8d..93a30e3 100644
--- a/core/res/res/drawable-hdpi/btn_default_pressed_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/btn_default_pressed_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_default_pressed_holo_light.9.png b/core/res/res/drawable-hdpi/btn_default_pressed_holo_light.9.png
index 5a94b8d..93a30e3 100644
--- a/core/res/res/drawable-hdpi/btn_default_pressed_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/btn_default_pressed_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_default_small_disabled_focused_holo_dark.9.png b/core/res/res/drawable-hdpi/btn_default_small_disabled_focused_holo_dark.9.png
deleted file mode 100644
index 6781d79..0000000
--- a/core/res/res/drawable-hdpi/btn_default_small_disabled_focused_holo_dark.9.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_default_small_disabled_focused_holo_light.9.png b/core/res/res/drawable-hdpi/btn_default_small_disabled_focused_holo_light.9.png
deleted file mode 100644
index 6781d79..0000000
--- a/core/res/res/drawable-hdpi/btn_default_small_disabled_focused_holo_light.9.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_default_small_disabled_holo_dark.9.png b/core/res/res/drawable-hdpi/btn_default_small_disabled_holo_dark.9.png
deleted file mode 100644
index c8460eb..0000000
--- a/core/res/res/drawable-hdpi/btn_default_small_disabled_holo_dark.9.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_default_small_disabled_holo_light.9.png b/core/res/res/drawable-hdpi/btn_default_small_disabled_holo_light.9.png
deleted file mode 100644
index c8460eb..0000000
--- a/core/res/res/drawable-hdpi/btn_default_small_disabled_holo_light.9.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_default_small_focused_holo_dark.9.png b/core/res/res/drawable-hdpi/btn_default_small_focused_holo_dark.9.png
deleted file mode 100644
index a116400..0000000
--- a/core/res/res/drawable-hdpi/btn_default_small_focused_holo_dark.9.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_default_small_focused_holo_light.9.png b/core/res/res/drawable-hdpi/btn_default_small_focused_holo_light.9.png
deleted file mode 100644
index 0b5c05bd..0000000
--- a/core/res/res/drawable-hdpi/btn_default_small_focused_holo_light.9.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_default_small_normal_holo_dark.9.png b/core/res/res/drawable-hdpi/btn_default_small_normal_holo_dark.9.png
deleted file mode 100644
index 6a55b98..0000000
--- a/core/res/res/drawable-hdpi/btn_default_small_normal_holo_dark.9.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_default_small_normal_holo_light.9.png b/core/res/res/drawable-hdpi/btn_default_small_normal_holo_light.9.png
deleted file mode 100644
index 0371310..0000000
--- a/core/res/res/drawable-hdpi/btn_default_small_normal_holo_light.9.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_default_small_pressed_holo_dark.9.png b/core/res/res/drawable-hdpi/btn_default_small_pressed_holo_dark.9.png
deleted file mode 100644
index 4d05332..0000000
--- a/core/res/res/drawable-hdpi/btn_default_small_pressed_holo_dark.9.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_default_small_pressed_holo_light.9.png b/core/res/res/drawable-hdpi/btn_default_small_pressed_holo_light.9.png
deleted file mode 100644
index 4d05332..0000000
--- a/core/res/res/drawable-hdpi/btn_default_small_pressed_holo_light.9.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_toggle_off_disabled_focused_holo_dark.9.png b/core/res/res/drawable-hdpi/btn_toggle_off_disabled_focused_holo_dark.9.png
old mode 100755
new mode 100644
index 63a9219..3ecf008
--- a/core/res/res/drawable-hdpi/btn_toggle_off_disabled_focused_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/btn_toggle_off_disabled_focused_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_toggle_off_disabled_focused_holo_light.9.png b/core/res/res/drawable-hdpi/btn_toggle_off_disabled_focused_holo_light.9.png
old mode 100755
new mode 100644
index d977914..6e1f0dd
--- a/core/res/res/drawable-hdpi/btn_toggle_off_disabled_focused_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/btn_toggle_off_disabled_focused_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_toggle_off_disabled_holo_dark.9.png b/core/res/res/drawable-hdpi/btn_toggle_off_disabled_holo_dark.9.png
old mode 100755
new mode 100644
index c04393c..90b35b8
--- a/core/res/res/drawable-hdpi/btn_toggle_off_disabled_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/btn_toggle_off_disabled_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_toggle_off_disabled_holo_light.9.png b/core/res/res/drawable-hdpi/btn_toggle_off_disabled_holo_light.9.png
old mode 100755
new mode 100644
index 96bd351..6b4b388
--- a/core/res/res/drawable-hdpi/btn_toggle_off_disabled_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/btn_toggle_off_disabled_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_toggle_off_focused_holo_dark.9.png b/core/res/res/drawable-hdpi/btn_toggle_off_focused_holo_dark.9.png
old mode 100755
new mode 100644
index c30b993..c0ed2c6
--- a/core/res/res/drawable-hdpi/btn_toggle_off_focused_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/btn_toggle_off_focused_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_toggle_off_focused_holo_light.9.png b/core/res/res/drawable-hdpi/btn_toggle_off_focused_holo_light.9.png
old mode 100755
new mode 100644
index 730c113..fa386b8
--- a/core/res/res/drawable-hdpi/btn_toggle_off_focused_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/btn_toggle_off_focused_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_toggle_off_normal_holo_dark.9.png b/core/res/res/drawable-hdpi/btn_toggle_off_normal_holo_dark.9.png
old mode 100755
new mode 100644
index 17de0eb..9fbd1e99
--- a/core/res/res/drawable-hdpi/btn_toggle_off_normal_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/btn_toggle_off_normal_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_toggle_off_normal_holo_light.9.png b/core/res/res/drawable-hdpi/btn_toggle_off_normal_holo_light.9.png
old mode 100755
new mode 100644
index 7e62cf9..1800eb4
--- a/core/res/res/drawable-hdpi/btn_toggle_off_normal_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/btn_toggle_off_normal_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_toggle_off_pressed_holo_dark.9.png b/core/res/res/drawable-hdpi/btn_toggle_off_pressed_holo_dark.9.png
old mode 100755
new mode 100644
index a06f1fc..45d99ee
--- a/core/res/res/drawable-hdpi/btn_toggle_off_pressed_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/btn_toggle_off_pressed_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_toggle_off_pressed_holo_light.9.png b/core/res/res/drawable-hdpi/btn_toggle_off_pressed_holo_light.9.png
old mode 100755
new mode 100644
index 21ad0d8..8929825
--- a/core/res/res/drawable-hdpi/btn_toggle_off_pressed_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/btn_toggle_off_pressed_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_toggle_on_disabled_focused_holo_dark.9.png b/core/res/res/drawable-hdpi/btn_toggle_on_disabled_focused_holo_dark.9.png
old mode 100755
new mode 100644
index c0f6f74..5fc3fbd
--- a/core/res/res/drawable-hdpi/btn_toggle_on_disabled_focused_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/btn_toggle_on_disabled_focused_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_toggle_on_disabled_focused_holo_light.9.png b/core/res/res/drawable-hdpi/btn_toggle_on_disabled_focused_holo_light.9.png
old mode 100755
new mode 100644
index c0f6f74..5fc3fbd
--- a/core/res/res/drawable-hdpi/btn_toggle_on_disabled_focused_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/btn_toggle_on_disabled_focused_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_toggle_on_disabled_holo_dark.9.png b/core/res/res/drawable-hdpi/btn_toggle_on_disabled_holo_dark.9.png
old mode 100755
new mode 100644
index 44a2f8bb..b0cfa4b
--- a/core/res/res/drawable-hdpi/btn_toggle_on_disabled_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/btn_toggle_on_disabled_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_toggle_on_disabled_holo_light.9.png b/core/res/res/drawable-hdpi/btn_toggle_on_disabled_holo_light.9.png
old mode 100755
new mode 100644
index 44a2f8bb..b0cfa4b
--- a/core/res/res/drawable-hdpi/btn_toggle_on_disabled_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/btn_toggle_on_disabled_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_toggle_on_focused_holo_dark.9.png b/core/res/res/drawable-hdpi/btn_toggle_on_focused_holo_dark.9.png
old mode 100755
new mode 100644
index 53eb636f..054c18b
--- a/core/res/res/drawable-hdpi/btn_toggle_on_focused_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/btn_toggle_on_focused_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_toggle_on_focused_holo_light.9.png b/core/res/res/drawable-hdpi/btn_toggle_on_focused_holo_light.9.png
old mode 100755
new mode 100644
index 53eb636f..054c18b
--- a/core/res/res/drawable-hdpi/btn_toggle_on_focused_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/btn_toggle_on_focused_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_toggle_on_normal_holo_dark.9.png b/core/res/res/drawable-hdpi/btn_toggle_on_normal_holo_dark.9.png
old mode 100755
new mode 100644
index baab86f..a858836
--- a/core/res/res/drawable-hdpi/btn_toggle_on_normal_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/btn_toggle_on_normal_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_toggle_on_normal_holo_light.9.png b/core/res/res/drawable-hdpi/btn_toggle_on_normal_holo_light.9.png
old mode 100755
new mode 100644
index baab86f..a858836
--- a/core/res/res/drawable-hdpi/btn_toggle_on_normal_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/btn_toggle_on_normal_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_toggle_on_pressed_holo_dark.9.png b/core/res/res/drawable-hdpi/btn_toggle_on_pressed_holo_dark.9.png
old mode 100755
new mode 100644
index 6a954a6..b5aa5c1
--- a/core/res/res/drawable-hdpi/btn_toggle_on_pressed_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/btn_toggle_on_pressed_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_toggle_on_pressed_holo_light.9.png b/core/res/res/drawable-hdpi/btn_toggle_on_pressed_holo_light.9.png
old mode 100755
new mode 100644
index 6a954a6..b5aa5c1
--- a/core/res/res/drawable-hdpi/btn_toggle_on_pressed_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/btn_toggle_on_pressed_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/fastscroll_label_left_holo_dark.9.png b/core/res/res/drawable-hdpi/fastscroll_label_left_holo_dark.9.png
index 3eb81a1..0a1bca8 100644
--- a/core/res/res/drawable-hdpi/fastscroll_label_left_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/fastscroll_label_left_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/fastscroll_label_left_holo_light.9.png b/core/res/res/drawable-hdpi/fastscroll_label_left_holo_light.9.png
index cc14a63..fd5b18d 100644
--- a/core/res/res/drawable-hdpi/fastscroll_label_left_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/fastscroll_label_left_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/fastscroll_label_right_holo_dark.9.png b/core/res/res/drawable-hdpi/fastscroll_label_right_holo_dark.9.png
index c59f135..97d61f4 100644
--- a/core/res/res/drawable-hdpi/fastscroll_label_right_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/fastscroll_label_right_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/fastscroll_label_right_holo_light.9.png b/core/res/res/drawable-hdpi/fastscroll_label_right_holo_light.9.png
index 054707d..9afd6ab 100644
--- a/core/res/res/drawable-hdpi/fastscroll_label_right_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/fastscroll_label_right_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/fastscroll_thumb_default_holo.png b/core/res/res/drawable-hdpi/fastscroll_thumb_default_holo.png
index bc960ab..9233636 100644
--- a/core/res/res/drawable-hdpi/fastscroll_thumb_default_holo.png
+++ b/core/res/res/drawable-hdpi/fastscroll_thumb_default_holo.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/fastscroll_thumb_pressed_holo.png b/core/res/res/drawable-hdpi/fastscroll_thumb_pressed_holo.png
index f850e9e..396a8d6 100644
--- a/core/res/res/drawable-hdpi/fastscroll_thumb_pressed_holo.png
+++ b/core/res/res/drawable-hdpi/fastscroll_thumb_pressed_holo.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/fastscroll_track_default_holo_dark.9.png b/core/res/res/drawable-hdpi/fastscroll_track_default_holo_dark.9.png
index 9e10a29..44502db 100644
--- a/core/res/res/drawable-hdpi/fastscroll_track_default_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/fastscroll_track_default_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/fastscroll_track_default_holo_light.9.png b/core/res/res/drawable-hdpi/fastscroll_track_default_holo_light.9.png
index 9e10a29..44502db 100644
--- a/core/res/res/drawable-hdpi/fastscroll_track_default_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/fastscroll_track_default_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/fastscroll_track_pressed_holo_dark.9.png b/core/res/res/drawable-hdpi/fastscroll_track_pressed_holo_dark.9.png
index be260dd..c5637727 100644
--- a/core/res/res/drawable-hdpi/fastscroll_track_pressed_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/fastscroll_track_pressed_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/fastscroll_track_pressed_holo_light.9.png b/core/res/res/drawable-hdpi/fastscroll_track_pressed_holo_light.9.png
index be260dd..88f60b3 100644
--- a/core/res/res/drawable-hdpi/fastscroll_track_pressed_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/fastscroll_track_pressed_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_audio_ring_notif.png b/core/res/res/drawable-hdpi/ic_audio_ring_notif.png
new file mode 100644
index 0000000..3938778
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_audio_ring_notif.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_audio_ring_notif_mute.png b/core/res/res/drawable-hdpi/ic_audio_ring_notif_mute.png
new file mode 100644
index 0000000..499c0a3
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_audio_ring_notif_mute.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_bullet_key_permission.png b/core/res/res/drawable-hdpi/ic_bullet_key_permission.png
index b6b840a..a7eaec5 100644
--- a/core/res/res/drawable-hdpi/ic_bullet_key_permission.png
+++ b/core/res/res/drawable-hdpi/ic_bullet_key_permission.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/progress_primary_holo_dark.9.png b/core/res/res/drawable-hdpi/progress_primary_holo_dark.9.png
index f134a59..e2c63b0 100644
--- a/core/res/res/drawable-hdpi/progress_primary_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/progress_primary_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/progress_primary_holo_light.9.png b/core/res/res/drawable-hdpi/progress_primary_holo_light.9.png
index f134a59..e2c63b0 100644
--- a/core/res/res/drawable-hdpi/progress_primary_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/progress_primary_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/progress_secondary_holo_dark.9.png b/core/res/res/drawable-hdpi/progress_secondary_holo_dark.9.png
index 22d608a..4b204e7 100644
--- a/core/res/res/drawable-hdpi/progress_secondary_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/progress_secondary_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/progress_secondary_holo_light.9.png b/core/res/res/drawable-hdpi/progress_secondary_holo_light.9.png
index 22d608a..4b204e7 100644
--- a/core/res/res/drawable-hdpi/progress_secondary_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/progress_secondary_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/scrollbar_handle_holo_dark.9.png b/core/res/res/drawable-hdpi/scrollbar_handle_holo_dark.9.png
index 575edee..7c82955 100644
--- a/core/res/res/drawable-hdpi/scrollbar_handle_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/scrollbar_handle_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/scrollbar_handle_holo_light.9.png b/core/res/res/drawable-hdpi/scrollbar_handle_holo_light.9.png
index 575edee..7c82955 100644
--- a/core/res/res/drawable-hdpi/scrollbar_handle_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/scrollbar_handle_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/scrubber_control_disabled_holo.png b/core/res/res/drawable-hdpi/scrubber_control_disabled_holo.png
index d428e5a..822da81 100644
--- a/core/res/res/drawable-hdpi/scrubber_control_disabled_holo.png
+++ b/core/res/res/drawable-hdpi/scrubber_control_disabled_holo.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/scrubber_control_holo.png b/core/res/res/drawable-hdpi/scrubber_control_holo.png
index a5fb73c..9957851 100644
--- a/core/res/res/drawable-hdpi/scrubber_control_holo.png
+++ b/core/res/res/drawable-hdpi/scrubber_control_holo.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/scrubber_primary_holo.9.png b/core/res/res/drawable-hdpi/scrubber_primary_holo.9.png
index 3bc78a8..0fdd530 100644
--- a/core/res/res/drawable-hdpi/scrubber_primary_holo.9.png
+++ b/core/res/res/drawable-hdpi/scrubber_primary_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/scrubber_secondary_holo.9.png b/core/res/res/drawable-hdpi/scrubber_secondary_holo.9.png
index 8eadf00..a7eaf66 100644
--- a/core/res/res/drawable-hdpi/scrubber_secondary_holo.9.png
+++ b/core/res/res/drawable-hdpi/scrubber_secondary_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/spinner_16_inner_holo.png b/core/res/res/drawable-hdpi/spinner_16_inner_holo.png
index a2a6678..8c93779 100644
--- a/core/res/res/drawable-hdpi/spinner_16_inner_holo.png
+++ b/core/res/res/drawable-hdpi/spinner_16_inner_holo.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/spinner_16_outer_holo.png b/core/res/res/drawable-hdpi/spinner_16_outer_holo.png
index 733e852..d272f93 100644
--- a/core/res/res/drawable-hdpi/spinner_16_outer_holo.png
+++ b/core/res/res/drawable-hdpi/spinner_16_outer_holo.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/spinner_20_inner_holo.png b/core/res/res/drawable-hdpi/spinner_20_inner_holo.png
index e81e002..3c371b2d 100644
--- a/core/res/res/drawable-hdpi/spinner_20_inner_holo.png
+++ b/core/res/res/drawable-hdpi/spinner_20_inner_holo.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/spinner_20_outer_holo.png b/core/res/res/drawable-hdpi/spinner_20_outer_holo.png
index 1da2f90..2820b5f 100644
--- a/core/res/res/drawable-hdpi/spinner_20_outer_holo.png
+++ b/core/res/res/drawable-hdpi/spinner_20_outer_holo.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/spinner_48_inner_holo.png b/core/res/res/drawable-hdpi/spinner_48_inner_holo.png
index 8bbe6a0..a992251 100644
--- a/core/res/res/drawable-hdpi/spinner_48_inner_holo.png
+++ b/core/res/res/drawable-hdpi/spinner_48_inner_holo.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/spinner_48_outer_holo.png b/core/res/res/drawable-hdpi/spinner_48_outer_holo.png
index d023d10..27452b1 100644
--- a/core/res/res/drawable-hdpi/spinner_48_outer_holo.png
+++ b/core/res/res/drawable-hdpi/spinner_48_outer_holo.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/spinner_76_inner_holo.png b/core/res/res/drawable-hdpi/spinner_76_inner_holo.png
index fa6cb6f..3d426e0 100644
--- a/core/res/res/drawable-hdpi/spinner_76_inner_holo.png
+++ b/core/res/res/drawable-hdpi/spinner_76_inner_holo.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/spinner_76_outer_holo.png b/core/res/res/drawable-hdpi/spinner_76_outer_holo.png
index 00d577f..92f77a3 100644
--- a/core/res/res/drawable-hdpi/spinner_76_outer_holo.png
+++ b/core/res/res/drawable-hdpi/spinner_76_outer_holo.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/ic_bullet_key_permission.png b/core/res/res/drawable-ldpi/ic_bullet_key_permission.png
index 016c0f0..4aff20c 100644
--- a/core/res/res/drawable-ldpi/ic_bullet_key_permission.png
+++ b/core/res/res/drawable-ldpi/ic_bullet_key_permission.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_default_disabled_focused_holo_dark.9.png b/core/res/res/drawable-mdpi/btn_default_disabled_focused_holo_dark.9.png
index 918f972..e5197e6 100644
--- a/core/res/res/drawable-mdpi/btn_default_disabled_focused_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/btn_default_disabled_focused_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_default_disabled_focused_holo_light.9.png b/core/res/res/drawable-mdpi/btn_default_disabled_focused_holo_light.9.png
index 918f972..e5197e6 100644
--- a/core/res/res/drawable-mdpi/btn_default_disabled_focused_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/btn_default_disabled_focused_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_default_disabled_holo.9.png b/core/res/res/drawable-mdpi/btn_default_disabled_holo.9.png
index 1ae6cf2..9a24b9c 100644
--- a/core/res/res/drawable-mdpi/btn_default_disabled_holo.9.png
+++ b/core/res/res/drawable-mdpi/btn_default_disabled_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_default_disabled_holo_dark.9.png b/core/res/res/drawable-mdpi/btn_default_disabled_holo_dark.9.png
index 0514a7c..c832855 100644
--- a/core/res/res/drawable-mdpi/btn_default_disabled_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/btn_default_disabled_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_default_disabled_holo_light.9.png b/core/res/res/drawable-mdpi/btn_default_disabled_holo_light.9.png
index 8cc4daf..c832855 100644
--- a/core/res/res/drawable-mdpi/btn_default_disabled_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/btn_default_disabled_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_default_focused_holo.9.png b/core/res/res/drawable-mdpi/btn_default_focused_holo.9.png
index 6449650..8838414 100644
--- a/core/res/res/drawable-mdpi/btn_default_focused_holo.9.png
+++ b/core/res/res/drawable-mdpi/btn_default_focused_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_default_focused_holo_dark.9.png b/core/res/res/drawable-mdpi/btn_default_focused_holo_dark.9.png
index 7f44eae2..e0a1e0d 100644
--- a/core/res/res/drawable-mdpi/btn_default_focused_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/btn_default_focused_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_default_focused_holo_light.9.png b/core/res/res/drawable-mdpi/btn_default_focused_holo_light.9.png
index 7f44eae2..e0a1e0d 100644
--- a/core/res/res/drawable-mdpi/btn_default_focused_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/btn_default_focused_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_default_normal_holo.9.png b/core/res/res/drawable-mdpi/btn_default_normal_holo.9.png
index 3e9e6c3..e4864c9 100644
--- a/core/res/res/drawable-mdpi/btn_default_normal_holo.9.png
+++ b/core/res/res/drawable-mdpi/btn_default_normal_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_default_normal_holo_dark.9.png b/core/res/res/drawable-mdpi/btn_default_normal_holo_dark.9.png
index 9df36a2..3d9310a 100644
--- a/core/res/res/drawable-mdpi/btn_default_normal_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/btn_default_normal_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_default_normal_holo_light.9.png b/core/res/res/drawable-mdpi/btn_default_normal_holo_light.9.png
index 7abdfde..3d9310a 100644
--- a/core/res/res/drawable-mdpi/btn_default_normal_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/btn_default_normal_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_default_pressed_holo.9.png b/core/res/res/drawable-mdpi/btn_default_pressed_holo.9.png
index df4927f..18ec722 100644
--- a/core/res/res/drawable-mdpi/btn_default_pressed_holo.9.png
+++ b/core/res/res/drawable-mdpi/btn_default_pressed_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_default_pressed_holo_dark.9.png b/core/res/res/drawable-mdpi/btn_default_pressed_holo_dark.9.png
index cb70e35..1e3314e 100644
--- a/core/res/res/drawable-mdpi/btn_default_pressed_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/btn_default_pressed_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_default_pressed_holo_light.9.png b/core/res/res/drawable-mdpi/btn_default_pressed_holo_light.9.png
index cb70e35..1e3314e 100644
--- a/core/res/res/drawable-mdpi/btn_default_pressed_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/btn_default_pressed_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_default_small_disabled_focused_holo_dark.9.png b/core/res/res/drawable-mdpi/btn_default_small_disabled_focused_holo_dark.9.png
deleted file mode 100644
index be14b35..0000000
--- a/core/res/res/drawable-mdpi/btn_default_small_disabled_focused_holo_dark.9.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_default_small_disabled_focused_holo_light.9.png b/core/res/res/drawable-mdpi/btn_default_small_disabled_focused_holo_light.9.png
deleted file mode 100644
index be14b35..0000000
--- a/core/res/res/drawable-mdpi/btn_default_small_disabled_focused_holo_light.9.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_default_small_disabled_holo_dark.9.png b/core/res/res/drawable-mdpi/btn_default_small_disabled_holo_dark.9.png
deleted file mode 100644
index dd12fcb..0000000
--- a/core/res/res/drawable-mdpi/btn_default_small_disabled_holo_dark.9.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_default_small_disabled_holo_light.9.png b/core/res/res/drawable-mdpi/btn_default_small_disabled_holo_light.9.png
deleted file mode 100644
index dd12fcb..0000000
--- a/core/res/res/drawable-mdpi/btn_default_small_disabled_holo_light.9.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_default_small_focused_holo_dark.9.png b/core/res/res/drawable-mdpi/btn_default_small_focused_holo_dark.9.png
deleted file mode 100644
index bd9975c..0000000
--- a/core/res/res/drawable-mdpi/btn_default_small_focused_holo_dark.9.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_default_small_focused_holo_light.9.png b/core/res/res/drawable-mdpi/btn_default_small_focused_holo_light.9.png
deleted file mode 100644
index 703e394..0000000
--- a/core/res/res/drawable-mdpi/btn_default_small_focused_holo_light.9.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_default_small_normal_holo_dark.9.png b/core/res/res/drawable-mdpi/btn_default_small_normal_holo_dark.9.png
deleted file mode 100644
index b77faadc..0000000
--- a/core/res/res/drawable-mdpi/btn_default_small_normal_holo_dark.9.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_default_small_normal_holo_light.9.png b/core/res/res/drawable-mdpi/btn_default_small_normal_holo_light.9.png
deleted file mode 100644
index ead3f5e..0000000
--- a/core/res/res/drawable-mdpi/btn_default_small_normal_holo_light.9.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_default_small_pressed_holo_dark.9.png b/core/res/res/drawable-mdpi/btn_default_small_pressed_holo_dark.9.png
deleted file mode 100644
index d460d0a..0000000
--- a/core/res/res/drawable-mdpi/btn_default_small_pressed_holo_dark.9.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_default_small_pressed_holo_light.9.png b/core/res/res/drawable-mdpi/btn_default_small_pressed_holo_light.9.png
deleted file mode 100644
index d460d0a..0000000
--- a/core/res/res/drawable-mdpi/btn_default_small_pressed_holo_light.9.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_toggle_off.9.png b/core/res/res/drawable-mdpi/btn_toggle_off.9.png
index 26ee1c2..38e810c 100644
--- a/core/res/res/drawable-mdpi/btn_toggle_off.9.png
+++ b/core/res/res/drawable-mdpi/btn_toggle_off.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_toggle_off_disabled_focused_holo_dark.9.png b/core/res/res/drawable-mdpi/btn_toggle_off_disabled_focused_holo_dark.9.png
old mode 100755
new mode 100644
index 1964085..5f2017d
--- a/core/res/res/drawable-mdpi/btn_toggle_off_disabled_focused_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/btn_toggle_off_disabled_focused_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_toggle_off_disabled_focused_holo_light.9.png b/core/res/res/drawable-mdpi/btn_toggle_off_disabled_focused_holo_light.9.png
old mode 100755
new mode 100644
index d86a9e6..eab31e8
--- a/core/res/res/drawable-mdpi/btn_toggle_off_disabled_focused_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/btn_toggle_off_disabled_focused_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_toggle_off_disabled_holo_dark.9.png b/core/res/res/drawable-mdpi/btn_toggle_off_disabled_holo_dark.9.png
old mode 100755
new mode 100644
index f3f1ab2..29f9e23
--- a/core/res/res/drawable-mdpi/btn_toggle_off_disabled_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/btn_toggle_off_disabled_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_toggle_off_disabled_holo_light.9.png b/core/res/res/drawable-mdpi/btn_toggle_off_disabled_holo_light.9.png
old mode 100755
new mode 100644
index d157fed..2d3574d
--- a/core/res/res/drawable-mdpi/btn_toggle_off_disabled_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/btn_toggle_off_disabled_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_toggle_off_focused_holo_dark.9.png b/core/res/res/drawable-mdpi/btn_toggle_off_focused_holo_dark.9.png
old mode 100755
new mode 100644
index f99d946..deea02d
--- a/core/res/res/drawable-mdpi/btn_toggle_off_focused_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/btn_toggle_off_focused_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_toggle_off_focused_holo_light.9.png b/core/res/res/drawable-mdpi/btn_toggle_off_focused_holo_light.9.png
old mode 100755
new mode 100644
index a313744..d480b2e
--- a/core/res/res/drawable-mdpi/btn_toggle_off_focused_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/btn_toggle_off_focused_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_toggle_off_normal_holo_dark.9.png b/core/res/res/drawable-mdpi/btn_toggle_off_normal_holo_dark.9.png
old mode 100755
new mode 100644
index 00a589f..7f9d813
--- a/core/res/res/drawable-mdpi/btn_toggle_off_normal_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/btn_toggle_off_normal_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_toggle_off_normal_holo_light.9.png b/core/res/res/drawable-mdpi/btn_toggle_off_normal_holo_light.9.png
old mode 100755
new mode 100644
index e16e470..848621a
--- a/core/res/res/drawable-mdpi/btn_toggle_off_normal_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/btn_toggle_off_normal_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_toggle_off_pressed_holo_dark.9.png b/core/res/res/drawable-mdpi/btn_toggle_off_pressed_holo_dark.9.png
old mode 100755
new mode 100644
index 6f7dd45..2a94003
--- a/core/res/res/drawable-mdpi/btn_toggle_off_pressed_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/btn_toggle_off_pressed_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_toggle_off_pressed_holo_light.9.png b/core/res/res/drawable-mdpi/btn_toggle_off_pressed_holo_light.9.png
old mode 100755
new mode 100644
index 490c83d..75983d8
--- a/core/res/res/drawable-mdpi/btn_toggle_off_pressed_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/btn_toggle_off_pressed_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_toggle_on.9.png b/core/res/res/drawable-mdpi/btn_toggle_on.9.png
index 53e95af..ef39dec 100644
--- a/core/res/res/drawable-mdpi/btn_toggle_on.9.png
+++ b/core/res/res/drawable-mdpi/btn_toggle_on.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_toggle_on_disabled_focused_holo_dark.9.png b/core/res/res/drawable-mdpi/btn_toggle_on_disabled_focused_holo_dark.9.png
old mode 100755
new mode 100644
index 45dc08f..909586a
--- a/core/res/res/drawable-mdpi/btn_toggle_on_disabled_focused_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/btn_toggle_on_disabled_focused_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_toggle_on_disabled_focused_holo_light.9.png b/core/res/res/drawable-mdpi/btn_toggle_on_disabled_focused_holo_light.9.png
old mode 100755
new mode 100644
index 45dc08f..909586a
--- a/core/res/res/drawable-mdpi/btn_toggle_on_disabled_focused_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/btn_toggle_on_disabled_focused_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_toggle_on_disabled_holo_dark.9.png b/core/res/res/drawable-mdpi/btn_toggle_on_disabled_holo_dark.9.png
old mode 100755
new mode 100644
index 11dc01d..d64e60a
--- a/core/res/res/drawable-mdpi/btn_toggle_on_disabled_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/btn_toggle_on_disabled_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_toggle_on_disabled_holo_light.9.png b/core/res/res/drawable-mdpi/btn_toggle_on_disabled_holo_light.9.png
old mode 100755
new mode 100644
index 11dc01d..d64e60a
--- a/core/res/res/drawable-mdpi/btn_toggle_on_disabled_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/btn_toggle_on_disabled_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_toggle_on_focused_holo_dark.9.png b/core/res/res/drawable-mdpi/btn_toggle_on_focused_holo_dark.9.png
old mode 100755
new mode 100644
index 2c95ebd..3b64aa1
--- a/core/res/res/drawable-mdpi/btn_toggle_on_focused_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/btn_toggle_on_focused_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_toggle_on_focused_holo_light.9.png b/core/res/res/drawable-mdpi/btn_toggle_on_focused_holo_light.9.png
old mode 100755
new mode 100644
index 2c95ebd..3b64aa1
--- a/core/res/res/drawable-mdpi/btn_toggle_on_focused_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/btn_toggle_on_focused_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_toggle_on_normal_holo_dark.9.png b/core/res/res/drawable-mdpi/btn_toggle_on_normal_holo_dark.9.png
old mode 100755
new mode 100644
index 7c410c0..6039850
--- a/core/res/res/drawable-mdpi/btn_toggle_on_normal_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/btn_toggle_on_normal_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_toggle_on_normal_holo_light.9.png b/core/res/res/drawable-mdpi/btn_toggle_on_normal_holo_light.9.png
old mode 100755
new mode 100644
index 7c410c0..6039850
--- a/core/res/res/drawable-mdpi/btn_toggle_on_normal_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/btn_toggle_on_normal_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_toggle_on_pressed_holo_dark.9.png b/core/res/res/drawable-mdpi/btn_toggle_on_pressed_holo_dark.9.png
old mode 100755
new mode 100644
index afb31e1..21b655b
--- a/core/res/res/drawable-mdpi/btn_toggle_on_pressed_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/btn_toggle_on_pressed_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_toggle_on_pressed_holo_light.9.png b/core/res/res/drawable-mdpi/btn_toggle_on_pressed_holo_light.9.png
old mode 100755
new mode 100644
index afb31e1..21b655b
--- a/core/res/res/drawable-mdpi/btn_toggle_on_pressed_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/btn_toggle_on_pressed_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/fastscroll_label_left_holo_dark.9.png b/core/res/res/drawable-mdpi/fastscroll_label_left_holo_dark.9.png
index 0dce616..b3fd908 100644
--- a/core/res/res/drawable-mdpi/fastscroll_label_left_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/fastscroll_label_left_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/fastscroll_label_left_holo_light.9.png b/core/res/res/drawable-mdpi/fastscroll_label_left_holo_light.9.png
index e1028cc..a64d4d1 100644
--- a/core/res/res/drawable-mdpi/fastscroll_label_left_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/fastscroll_label_left_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/fastscroll_label_right_holo_dark.9.png b/core/res/res/drawable-mdpi/fastscroll_label_right_holo_dark.9.png
index b6b68ea..6469fca 100644
--- a/core/res/res/drawable-mdpi/fastscroll_label_right_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/fastscroll_label_right_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/fastscroll_label_right_holo_light.9.png b/core/res/res/drawable-mdpi/fastscroll_label_right_holo_light.9.png
index 5087013..fca2e25 100644
--- a/core/res/res/drawable-mdpi/fastscroll_label_right_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/fastscroll_label_right_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/fastscroll_thumb_default_holo.png b/core/res/res/drawable-mdpi/fastscroll_thumb_default_holo.png
index bfb55bd..fa23ea4 100644
--- a/core/res/res/drawable-mdpi/fastscroll_thumb_default_holo.png
+++ b/core/res/res/drawable-mdpi/fastscroll_thumb_default_holo.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/fastscroll_thumb_pressed_holo.png b/core/res/res/drawable-mdpi/fastscroll_thumb_pressed_holo.png
index 89d9b01..d8233d9 100644
--- a/core/res/res/drawable-mdpi/fastscroll_thumb_pressed_holo.png
+++ b/core/res/res/drawable-mdpi/fastscroll_thumb_pressed_holo.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/fastscroll_track_default_holo_dark.9.png b/core/res/res/drawable-mdpi/fastscroll_track_default_holo_dark.9.png
index cf8c4bb..8796e21 100644
--- a/core/res/res/drawable-mdpi/fastscroll_track_default_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/fastscroll_track_default_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/fastscroll_track_default_holo_light.9.png b/core/res/res/drawable-mdpi/fastscroll_track_default_holo_light.9.png
index cf8c4bb..8796e21 100644
--- a/core/res/res/drawable-mdpi/fastscroll_track_default_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/fastscroll_track_default_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/fastscroll_track_pressed_holo_dark.9.png b/core/res/res/drawable-mdpi/fastscroll_track_pressed_holo_dark.9.png
index fef2168..e74acea 100644
--- a/core/res/res/drawable-mdpi/fastscroll_track_pressed_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/fastscroll_track_pressed_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/fastscroll_track_pressed_holo_light.9.png b/core/res/res/drawable-mdpi/fastscroll_track_pressed_holo_light.9.png
index fef2168..62d80a0 100644
--- a/core/res/res/drawable-mdpi/fastscroll_track_pressed_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/fastscroll_track_pressed_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_audio_ring_notif.png b/core/res/res/drawable-mdpi/ic_audio_ring_notif.png
new file mode 100644
index 0000000..856193b
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_audio_ring_notif.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_audio_ring_notif_mute.png b/core/res/res/drawable-mdpi/ic_audio_ring_notif_mute.png
new file mode 100644
index 0000000..d5d1360
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_audio_ring_notif_mute.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_bullet_key_permission.png b/core/res/res/drawable-mdpi/ic_bullet_key_permission.png
index 68ad039..47913f6 100644
--- a/core/res/res/drawable-mdpi/ic_bullet_key_permission.png
+++ b/core/res/res/drawable-mdpi/ic_bullet_key_permission.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/progress_primary_holo_dark.9.png b/core/res/res/drawable-mdpi/progress_primary_holo_dark.9.png
index bac0a23..4bf3cb9 100644
--- a/core/res/res/drawable-mdpi/progress_primary_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/progress_primary_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/progress_primary_holo_light.9.png b/core/res/res/drawable-mdpi/progress_primary_holo_light.9.png
index bac0a23..4bf3cb9 100644
--- a/core/res/res/drawable-mdpi/progress_primary_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/progress_primary_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/progress_secondary_holo_dark.9.png b/core/res/res/drawable-mdpi/progress_secondary_holo_dark.9.png
index 8be8656..b13c878 100644
--- a/core/res/res/drawable-mdpi/progress_secondary_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/progress_secondary_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/progress_secondary_holo_light.9.png b/core/res/res/drawable-mdpi/progress_secondary_holo_light.9.png
index 8be8656..b13c878 100644
--- a/core/res/res/drawable-mdpi/progress_secondary_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/progress_secondary_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/scrollbar_handle_holo_dark.9.png b/core/res/res/drawable-mdpi/scrollbar_handle_holo_dark.9.png
index e039c4b..ca0ec0a 100644
--- a/core/res/res/drawable-mdpi/scrollbar_handle_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/scrollbar_handle_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/scrollbar_handle_holo_light.9.png b/core/res/res/drawable-mdpi/scrollbar_handle_holo_light.9.png
index e039c4b..ca0ec0a 100644
--- a/core/res/res/drawable-mdpi/scrollbar_handle_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/scrollbar_handle_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/scrubber_primary_holo.9.png b/core/res/res/drawable-mdpi/scrubber_primary_holo.9.png
index ac63e7d..c994519 100644
--- a/core/res/res/drawable-mdpi/scrubber_primary_holo.9.png
+++ b/core/res/res/drawable-mdpi/scrubber_primary_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/scrubber_secondary_holo.9.png b/core/res/res/drawable-mdpi/scrubber_secondary_holo.9.png
index 9590bdc..5e21da4 100644
--- a/core/res/res/drawable-mdpi/scrubber_secondary_holo.9.png
+++ b/core/res/res/drawable-mdpi/scrubber_secondary_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/spinner_16_inner_holo.png b/core/res/res/drawable-mdpi/spinner_16_inner_holo.png
index 537ab8c..392e1f8 100644
--- a/core/res/res/drawable-mdpi/spinner_16_inner_holo.png
+++ b/core/res/res/drawable-mdpi/spinner_16_inner_holo.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/spinner_16_outer_holo.png b/core/res/res/drawable-mdpi/spinner_16_outer_holo.png
index cee54b7..d862a25 100644
--- a/core/res/res/drawable-mdpi/spinner_16_outer_holo.png
+++ b/core/res/res/drawable-mdpi/spinner_16_outer_holo.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/spinner_20_inner_holo.png b/core/res/res/drawable-mdpi/spinner_20_inner_holo.png
index 67fb438..f5e7f73 100644
--- a/core/res/res/drawable-mdpi/spinner_20_inner_holo.png
+++ b/core/res/res/drawable-mdpi/spinner_20_inner_holo.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/spinner_20_outer_holo.png b/core/res/res/drawable-mdpi/spinner_20_outer_holo.png
index 25beedd..b7ecfff 100644
--- a/core/res/res/drawable-mdpi/spinner_20_outer_holo.png
+++ b/core/res/res/drawable-mdpi/spinner_20_outer_holo.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/spinner_48_inner_holo.png b/core/res/res/drawable-mdpi/spinner_48_inner_holo.png
index ed446d6..5231a5b 100644
--- a/core/res/res/drawable-mdpi/spinner_48_inner_holo.png
+++ b/core/res/res/drawable-mdpi/spinner_48_inner_holo.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/spinner_48_outer_holo.png b/core/res/res/drawable-mdpi/spinner_48_outer_holo.png
index 08b2dcd..e1e5b52 100644
--- a/core/res/res/drawable-mdpi/spinner_48_outer_holo.png
+++ b/core/res/res/drawable-mdpi/spinner_48_outer_holo.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/spinner_76_inner_holo.png b/core/res/res/drawable-mdpi/spinner_76_inner_holo.png
index 2d5e5a1..982f037 100644
--- a/core/res/res/drawable-mdpi/spinner_76_inner_holo.png
+++ b/core/res/res/drawable-mdpi/spinner_76_inner_holo.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/spinner_76_outer_holo.png b/core/res/res/drawable-mdpi/spinner_76_outer_holo.png
index 2edad73..01b6ab38 100644
--- a/core/res/res/drawable-mdpi/spinner_76_outer_holo.png
+++ b/core/res/res/drawable-mdpi/spinner_76_outer_holo.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_default_disabled_focused_holo_dark.9.png b/core/res/res/drawable-xhdpi/btn_default_disabled_focused_holo_dark.9.png
index eb7ce5e..8a30fab 100644
--- a/core/res/res/drawable-xhdpi/btn_default_disabled_focused_holo_dark.9.png
+++ b/core/res/res/drawable-xhdpi/btn_default_disabled_focused_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_default_disabled_focused_holo_light.9.png b/core/res/res/drawable-xhdpi/btn_default_disabled_focused_holo_light.9.png
index eb7ce5e..8a30fab 100644
--- a/core/res/res/drawable-xhdpi/btn_default_disabled_focused_holo_light.9.png
+++ b/core/res/res/drawable-xhdpi/btn_default_disabled_focused_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_default_disabled_holo.9.png b/core/res/res/drawable-xhdpi/btn_default_disabled_holo.9.png
index 4e4d3d4..bb4e7f6 100644
--- a/core/res/res/drawable-xhdpi/btn_default_disabled_holo.9.png
+++ b/core/res/res/drawable-xhdpi/btn_default_disabled_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_default_disabled_holo_dark.9.png b/core/res/res/drawable-xhdpi/btn_default_disabled_holo_dark.9.png
index ee291b6..842ea9c 100644
--- a/core/res/res/drawable-xhdpi/btn_default_disabled_holo_dark.9.png
+++ b/core/res/res/drawable-xhdpi/btn_default_disabled_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_default_disabled_holo_light.9.png b/core/res/res/drawable-xhdpi/btn_default_disabled_holo_light.9.png
index 83e5011..842ea9c 100644
--- a/core/res/res/drawable-xhdpi/btn_default_disabled_holo_light.9.png
+++ b/core/res/res/drawable-xhdpi/btn_default_disabled_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_default_focused_holo.9.png b/core/res/res/drawable-xhdpi/btn_default_focused_holo.9.png
index 67f007a..5aa02c8 100644
--- a/core/res/res/drawable-xhdpi/btn_default_focused_holo.9.png
+++ b/core/res/res/drawable-xhdpi/btn_default_focused_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_default_focused_holo_dark.9.png b/core/res/res/drawable-xhdpi/btn_default_focused_holo_dark.9.png
index 4764d1b..025fc00 100644
--- a/core/res/res/drawable-xhdpi/btn_default_focused_holo_dark.9.png
+++ b/core/res/res/drawable-xhdpi/btn_default_focused_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_default_focused_holo_light.9.png b/core/res/res/drawable-xhdpi/btn_default_focused_holo_light.9.png
index 4764d1b..025fc00 100644
--- a/core/res/res/drawable-xhdpi/btn_default_focused_holo_light.9.png
+++ b/core/res/res/drawable-xhdpi/btn_default_focused_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_default_normal_holo.9.png b/core/res/res/drawable-xhdpi/btn_default_normal_holo.9.png
index b949121..02360bd 100644
--- a/core/res/res/drawable-xhdpi/btn_default_normal_holo.9.png
+++ b/core/res/res/drawable-xhdpi/btn_default_normal_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_default_normal_holo_dark.9.png b/core/res/res/drawable-xhdpi/btn_default_normal_holo_dark.9.png
index 6a35514..5c4a2d1 100644
--- a/core/res/res/drawable-xhdpi/btn_default_normal_holo_dark.9.png
+++ b/core/res/res/drawable-xhdpi/btn_default_normal_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_default_normal_holo_light.9.png b/core/res/res/drawable-xhdpi/btn_default_normal_holo_light.9.png
index 9068d75..5c4a2d1 100644
--- a/core/res/res/drawable-xhdpi/btn_default_normal_holo_light.9.png
+++ b/core/res/res/drawable-xhdpi/btn_default_normal_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_default_pressed_holo.9.png b/core/res/res/drawable-xhdpi/btn_default_pressed_holo.9.png
index daac2e1..1833ffe 100644
--- a/core/res/res/drawable-xhdpi/btn_default_pressed_holo.9.png
+++ b/core/res/res/drawable-xhdpi/btn_default_pressed_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_default_pressed_holo_dark.9.png b/core/res/res/drawable-xhdpi/btn_default_pressed_holo_dark.9.png
index 94f1a5a..7fc5980 100644
--- a/core/res/res/drawable-xhdpi/btn_default_pressed_holo_dark.9.png
+++ b/core/res/res/drawable-xhdpi/btn_default_pressed_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_default_pressed_holo_light.9.png b/core/res/res/drawable-xhdpi/btn_default_pressed_holo_light.9.png
index 94f1a5a..7fc5980 100644
--- a/core/res/res/drawable-xhdpi/btn_default_pressed_holo_light.9.png
+++ b/core/res/res/drawable-xhdpi/btn_default_pressed_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_toggle_off.9.png b/core/res/res/drawable-xhdpi/btn_toggle_off.9.png
new file mode 100644
index 0000000..1406188
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_toggle_off.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_toggle_off_disabled_focused_holo_dark.9.png b/core/res/res/drawable-xhdpi/btn_toggle_off_disabled_focused_holo_dark.9.png
new file mode 100644
index 0000000..9d9c6f2
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_toggle_off_disabled_focused_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_toggle_off_disabled_focused_holo_light.9.png b/core/res/res/drawable-xhdpi/btn_toggle_off_disabled_focused_holo_light.9.png
new file mode 100644
index 0000000..7d9bfd1
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_toggle_off_disabled_focused_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_toggle_off_disabled_holo_dark.9.png b/core/res/res/drawable-xhdpi/btn_toggle_off_disabled_holo_dark.9.png
new file mode 100644
index 0000000..0cddd2d
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_toggle_off_disabled_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_toggle_off_disabled_holo_light.9.png b/core/res/res/drawable-xhdpi/btn_toggle_off_disabled_holo_light.9.png
new file mode 100644
index 0000000..1109fe1
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_toggle_off_disabled_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_toggle_off_focused_holo_dark.9.png b/core/res/res/drawable-xhdpi/btn_toggle_off_focused_holo_dark.9.png
new file mode 100644
index 0000000..ec33f17
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_toggle_off_focused_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_toggle_off_focused_holo_light.9.png b/core/res/res/drawable-xhdpi/btn_toggle_off_focused_holo_light.9.png
new file mode 100644
index 0000000..0b562cc
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_toggle_off_focused_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_toggle_off_normal_holo_dark.9.png b/core/res/res/drawable-xhdpi/btn_toggle_off_normal_holo_dark.9.png
new file mode 100644
index 0000000..93f565f
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_toggle_off_normal_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_toggle_off_normal_holo_light.9.png b/core/res/res/drawable-xhdpi/btn_toggle_off_normal_holo_light.9.png
new file mode 100644
index 0000000..aee803d
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_toggle_off_normal_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_toggle_off_pressed_holo_dark.9.png b/core/res/res/drawable-xhdpi/btn_toggle_off_pressed_holo_dark.9.png
new file mode 100644
index 0000000..2f56666
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_toggle_off_pressed_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_toggle_off_pressed_holo_light.9.png b/core/res/res/drawable-xhdpi/btn_toggle_off_pressed_holo_light.9.png
new file mode 100644
index 0000000..d636569
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_toggle_off_pressed_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_toggle_on.9.png b/core/res/res/drawable-xhdpi/btn_toggle_on.9.png
new file mode 100644
index 0000000..90f1e7b
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_toggle_on.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_toggle_on_disabled_focused_holo_dark.9.png b/core/res/res/drawable-xhdpi/btn_toggle_on_disabled_focused_holo_dark.9.png
new file mode 100644
index 0000000..9ec3fe0c
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_toggle_on_disabled_focused_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_toggle_on_disabled_focused_holo_light.9.png b/core/res/res/drawable-xhdpi/btn_toggle_on_disabled_focused_holo_light.9.png
new file mode 100644
index 0000000..9ec3fe0c
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_toggle_on_disabled_focused_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_toggle_on_disabled_holo_dark.9.png b/core/res/res/drawable-xhdpi/btn_toggle_on_disabled_holo_dark.9.png
new file mode 100644
index 0000000..5b8bf7b
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_toggle_on_disabled_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_toggle_on_disabled_holo_light.9.png b/core/res/res/drawable-xhdpi/btn_toggle_on_disabled_holo_light.9.png
new file mode 100644
index 0000000..5b8bf7b
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_toggle_on_disabled_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_toggle_on_focused_holo_dark.9.png b/core/res/res/drawable-xhdpi/btn_toggle_on_focused_holo_dark.9.png
new file mode 100644
index 0000000..5c3318b
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_toggle_on_focused_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_toggle_on_focused_holo_light.9.png b/core/res/res/drawable-xhdpi/btn_toggle_on_focused_holo_light.9.png
new file mode 100644
index 0000000..5c3318b
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_toggle_on_focused_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_toggle_on_normal_holo_dark.9.png b/core/res/res/drawable-xhdpi/btn_toggle_on_normal_holo_dark.9.png
new file mode 100644
index 0000000..ef7310a
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_toggle_on_normal_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_toggle_on_normal_holo_light.9.png b/core/res/res/drawable-xhdpi/btn_toggle_on_normal_holo_light.9.png
new file mode 100644
index 0000000..ef7310a
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_toggle_on_normal_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_toggle_on_pressed_holo_dark.9.png b/core/res/res/drawable-xhdpi/btn_toggle_on_pressed_holo_dark.9.png
new file mode 100644
index 0000000..c55389e
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_toggle_on_pressed_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_toggle_on_pressed_holo_light.9.png b/core/res/res/drawable-xhdpi/btn_toggle_on_pressed_holo_light.9.png
new file mode 100644
index 0000000..c55389e
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_toggle_on_pressed_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/fastscroll_label_left_holo_dark.9.png b/core/res/res/drawable-xhdpi/fastscroll_label_left_holo_dark.9.png
new file mode 100644
index 0000000..dfc5e6b
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/fastscroll_label_left_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/fastscroll_label_left_holo_light.9.png b/core/res/res/drawable-xhdpi/fastscroll_label_left_holo_light.9.png
new file mode 100644
index 0000000..eab0cb9
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/fastscroll_label_left_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/fastscroll_label_right_holo_dark.9.png b/core/res/res/drawable-xhdpi/fastscroll_label_right_holo_dark.9.png
new file mode 100644
index 0000000..e3e0cde
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/fastscroll_label_right_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/fastscroll_label_right_holo_light.9.png b/core/res/res/drawable-xhdpi/fastscroll_label_right_holo_light.9.png
new file mode 100644
index 0000000..b2bd5ca
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/fastscroll_label_right_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/fastscroll_thumb_default_holo.png b/core/res/res/drawable-xhdpi/fastscroll_thumb_default_holo.png
new file mode 100644
index 0000000..cc3fe43
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/fastscroll_thumb_default_holo.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/fastscroll_thumb_pressed_holo.png b/core/res/res/drawable-xhdpi/fastscroll_thumb_pressed_holo.png
new file mode 100644
index 0000000..ba3f566
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/fastscroll_thumb_pressed_holo.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/fastscroll_track_default_holo_dark.9.png b/core/res/res/drawable-xhdpi/fastscroll_track_default_holo_dark.9.png
new file mode 100644
index 0000000..431336a
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/fastscroll_track_default_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/fastscroll_track_default_holo_light.9.png b/core/res/res/drawable-xhdpi/fastscroll_track_default_holo_light.9.png
new file mode 100644
index 0000000..431336a
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/fastscroll_track_default_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/fastscroll_track_pressed_holo_dark.9.png b/core/res/res/drawable-xhdpi/fastscroll_track_pressed_holo_dark.9.png
new file mode 100644
index 0000000..9301f5e
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/fastscroll_track_pressed_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/fastscroll_track_pressed_holo_light.9.png b/core/res/res/drawable-xhdpi/fastscroll_track_pressed_holo_light.9.png
new file mode 100644
index 0000000..d22724a
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/fastscroll_track_pressed_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/progress_primary_holo_dark.9.png b/core/res/res/drawable-xhdpi/progress_primary_holo_dark.9.png
new file mode 100644
index 0000000..dc8711f
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/progress_primary_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/progress_primary_holo_light.9.png b/core/res/res/drawable-xhdpi/progress_primary_holo_light.9.png
new file mode 100644
index 0000000..dc8711f
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/progress_primary_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/progress_secondary_holo_dark.9.png b/core/res/res/drawable-xhdpi/progress_secondary_holo_dark.9.png
new file mode 100644
index 0000000..39a168f
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/progress_secondary_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/progress_secondary_holo_light.9.png b/core/res/res/drawable-xhdpi/progress_secondary_holo_light.9.png
new file mode 100644
index 0000000..39a168f
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/progress_secondary_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/scrollbar_handle_holo_dark.9.png b/core/res/res/drawable-xhdpi/scrollbar_handle_holo_dark.9.png
new file mode 100644
index 0000000..7a31d9d
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/scrollbar_handle_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/scrollbar_handle_holo_light.9.png b/core/res/res/drawable-xhdpi/scrollbar_handle_holo_light.9.png
new file mode 100644
index 0000000..7a31d9d
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/scrollbar_handle_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/scrubber_control_disabled_holo.png b/core/res/res/drawable-xhdpi/scrubber_control_disabled_holo.png
new file mode 100644
index 0000000..c3b9bb4
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/scrubber_control_disabled_holo.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/scrubber_control_holo.png b/core/res/res/drawable-xhdpi/scrubber_control_holo.png
new file mode 100644
index 0000000..f72e48c
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/scrubber_control_holo.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/scrubber_primary_holo.9.png b/core/res/res/drawable-xhdpi/scrubber_primary_holo.9.png
new file mode 100644
index 0000000..328bd1e
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/scrubber_primary_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/scrubber_secondary_holo.9.png b/core/res/res/drawable-xhdpi/scrubber_secondary_holo.9.png
new file mode 100644
index 0000000..dcc4221
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/scrubber_secondary_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/scrubber_track_holo_dark.9.png b/core/res/res/drawable-xhdpi/scrubber_track_holo_dark.9.png
new file mode 100644
index 0000000..80e4400
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/scrubber_track_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/scrubber_track_holo_light.9.png b/core/res/res/drawable-xhdpi/scrubber_track_holo_light.9.png
new file mode 100644
index 0000000..af96c43
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/scrubber_track_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/spinner_16_inner_holo.png b/core/res/res/drawable-xhdpi/spinner_16_inner_holo.png
index f868ff1..f5e9164 100644
--- a/core/res/res/drawable-xhdpi/spinner_16_inner_holo.png
+++ b/core/res/res/drawable-xhdpi/spinner_16_inner_holo.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/spinner_16_outer_holo.png b/core/res/res/drawable-xhdpi/spinner_16_outer_holo.png
index abd2d57..6f977a2 100644
--- a/core/res/res/drawable-xhdpi/spinner_16_outer_holo.png
+++ b/core/res/res/drawable-xhdpi/spinner_16_outer_holo.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/spinner_20_inner_holo.png b/core/res/res/drawable-xhdpi/spinner_20_inner_holo.png
index d2691d3..16c8430 100644
--- a/core/res/res/drawable-xhdpi/spinner_20_inner_holo.png
+++ b/core/res/res/drawable-xhdpi/spinner_20_inner_holo.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/spinner_20_outer_holo.png b/core/res/res/drawable-xhdpi/spinner_20_outer_holo.png
index a5c87d1..9593616 100644
--- a/core/res/res/drawable-xhdpi/spinner_20_outer_holo.png
+++ b/core/res/res/drawable-xhdpi/spinner_20_outer_holo.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/spinner_48_inner_holo.png b/core/res/res/drawable-xhdpi/spinner_48_inner_holo.png
index 24176bf..cebf1d8 100644
--- a/core/res/res/drawable-xhdpi/spinner_48_inner_holo.png
+++ b/core/res/res/drawable-xhdpi/spinner_48_inner_holo.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/spinner_48_outer_holo.png b/core/res/res/drawable-xhdpi/spinner_48_outer_holo.png
index 53b34ef..5a9e001 100644
--- a/core/res/res/drawable-xhdpi/spinner_48_outer_holo.png
+++ b/core/res/res/drawable-xhdpi/spinner_48_outer_holo.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/spinner_76_inner_holo.png b/core/res/res/drawable-xhdpi/spinner_76_inner_holo.png
index fa267b4..c68cc37 100644
--- a/core/res/res/drawable-xhdpi/spinner_76_inner_holo.png
+++ b/core/res/res/drawable-xhdpi/spinner_76_inner_holo.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/spinner_76_outer_holo.png b/core/res/res/drawable-xhdpi/spinner_76_outer_holo.png
index 2c1f879..611dc5a 100644
--- a/core/res/res/drawable-xhdpi/spinner_76_outer_holo.png
+++ b/core/res/res/drawable-xhdpi/spinner_76_outer_holo.png
Binary files differ
diff --git a/core/res/res/layout/volume_adjust.xml b/core/res/res/layout/volume_adjust.xml
index 7303003..8c580c2 100644
--- a/core/res/res/layout/volume_adjust.xml
+++ b/core/res/res/layout/volume_adjust.xml
@@ -54,6 +54,7 @@
android:padding="16dip"
android:background="?attr/selectableItemBackground"
android:src="@drawable/ic_sysbar_quicksettings"
+ android:contentDescription="@string/volume_panel_more_description"
/>
</LinearLayout>
diff --git a/core/res/res/values-af/strings.xml b/core/res/res/values-af/strings.xml
index e60af6d..93f0526 100644
--- a/core/res/res/values-af/strings.xml
+++ b/core/res/res/values-af/strings.xml
@@ -1117,7 +1117,8 @@
<skip />
<!-- no translation found for paste (5629880836805036433) -->
<skip />
- <string name="pasteDisabled" msgid="7259254654641456570">"Niks om te plak nie"</string>
+ <!-- no translation found for replace (8333608224471746584) -->
+ <skip />
<!-- no translation found for copyUrl (2538211579596067402) -->
<skip />
<string name="selectTextMode" msgid="6738556348861347240">"Kies teks..."</string>
@@ -1431,6 +1432,22 @@
<skip />
<!-- no translation found for number_picker_decrement_button (2576606679160067262) -->
<skip />
+ <!-- no translation found for checkbox_checked (7222044992652711167) -->
+ <skip />
+ <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
+ <skip />
+ <!-- no translation found for radiobutton_selected (8603599808486581511) -->
+ <skip />
+ <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
+ <skip />
+ <!-- no translation found for switch_on (551417728476977311) -->
+ <skip />
+ <!-- no translation found for switch_off (7249798614327155088) -->
+ <skip />
+ <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
+ <skip />
+ <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
+ <skip />
<!-- no translation found for action_bar_home_description (5293600496601490216) -->
<skip />
<!-- no translation found for action_bar_up_description (2237496562952152589) -->
@@ -1457,6 +1474,14 @@
<skip />
<!-- no translation found for data_usage_limit_body (2182247539226163759) -->
<skip />
+ <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
+ <skip />
+ <!-- no translation found for data_usage_4g_limit_snoozed_title (1106562779311209039) -->
+ <skip />
+ <!-- no translation found for data_usage_mobile_limit_snoozed_title (279240572165412168) -->
+ <skip />
+ <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <skip />
<!-- no translation found for ssl_certificate (6510040486049237639) -->
<skip />
<!-- no translation found for ssl_certificate_is_valid (6825263250774569373) -->
diff --git a/core/res/res/values-am/strings.xml b/core/res/res/values-am/strings.xml
index 716d19f..ac2bdd1 100644
--- a/core/res/res/values-am/strings.xml
+++ b/core/res/res/values-am/strings.xml
@@ -1117,7 +1117,8 @@
<skip />
<!-- no translation found for paste (5629880836805036433) -->
<skip />
- <string name="pasteDisabled" msgid="7259254654641456570">"ምንም የሚለጠፍ የለም"</string>
+ <!-- no translation found for replace (8333608224471746584) -->
+ <skip />
<!-- no translation found for copyUrl (2538211579596067402) -->
<skip />
<string name="selectTextMode" msgid="6738556348861347240">"ፅሁፍ ምረጥ"</string>
@@ -1431,6 +1432,22 @@
<skip />
<!-- no translation found for number_picker_decrement_button (2576606679160067262) -->
<skip />
+ <!-- no translation found for checkbox_checked (7222044992652711167) -->
+ <skip />
+ <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
+ <skip />
+ <!-- no translation found for radiobutton_selected (8603599808486581511) -->
+ <skip />
+ <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
+ <skip />
+ <!-- no translation found for switch_on (551417728476977311) -->
+ <skip />
+ <!-- no translation found for switch_off (7249798614327155088) -->
+ <skip />
+ <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
+ <skip />
+ <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
+ <skip />
<!-- no translation found for action_bar_home_description (5293600496601490216) -->
<skip />
<!-- no translation found for action_bar_up_description (2237496562952152589) -->
@@ -1457,6 +1474,14 @@
<skip />
<!-- no translation found for data_usage_limit_body (2182247539226163759) -->
<skip />
+ <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
+ <skip />
+ <!-- no translation found for data_usage_4g_limit_snoozed_title (1106562779311209039) -->
+ <skip />
+ <!-- no translation found for data_usage_mobile_limit_snoozed_title (279240572165412168) -->
+ <skip />
+ <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <skip />
<!-- no translation found for ssl_certificate (6510040486049237639) -->
<skip />
<!-- no translation found for ssl_certificate_is_valid (6825263250774569373) -->
diff --git a/core/res/res/values-ar/strings.xml b/core/res/res/values-ar/strings.xml
index 12a240a..fb313f9 100644
--- a/core/res/res/values-ar/strings.xml
+++ b/core/res/res/values-ar/strings.xml
@@ -262,10 +262,8 @@
<string name="permdesc_readInputState" msgid="5132879321450325445">"للسماح للتطبيقات بمراقبة الأحرف التي تضغط عليها حتى عند التفاعل مع تطبيق آخر (مثل إدخال كلمة مرور). لا يجب استخدامه على الإطلاق للتطبيقات العادية."</string>
<string name="permlab_bindInputMethod" msgid="3360064620230515776">"الالتزام بطريقة إرسال ما"</string>
<string name="permdesc_bindInputMethod" msgid="3734838321027317228">"للسماح للمالك بالالتزام بواجهة المستوى العلوي لطريقة الإرسال. لا يجب استخدامه على الإطلاق للتطبيقات العادية."</string>
- <!-- no translation found for permlab_bindTextService (7358378401915287938) -->
- <skip />
- <!-- no translation found for permdesc_bindTextService (172508880651909350) -->
- <skip />
+ <string name="permlab_bindTextService" msgid="7358378401915287938">"الالتزام بخدمة إدخال النصوص"</string>
+ <string name="permdesc_bindTextService" msgid="172508880651909350">"للسماح للمالك بالالتزام بواجهة المستوى العلوي لخدمة إدخال النصوص (على سبيل المثال، SpellCheckerService). لا يجب استخدامه على الإطلاق للتطبيقات العادية."</string>
<string name="permlab_bindWallpaper" msgid="8716400279937856462">"الالتزام بخلفية ما"</string>
<string name="permdesc_bindWallpaper" msgid="5287754520361915347">"للسماح للمالك بالالتزام بواجهة المستوى العلوي للخلفية. لا يجب استخدامه على الإطلاق للتطبيقات العادية."</string>
<string name="permlab_bindRemoteViews" msgid="5697987759897367099">"الالتزام بخدمة أداة"</string>
@@ -724,10 +722,8 @@
<string name="permdesc_writeHistoryBookmarks" product="default" msgid="945571990357114950">"للسماح لتطبيق ما بتعديل سجل المتصفح أو الإشارات في هاتفك. يمكن أن تستخدم التطبيقات الضارة ذلك لمسح بيانات المتصفح أو تعديلها."</string>
<string name="permlab_setAlarm" msgid="5924401328803615165">"تعيين المنبه في ساعة المنبه"</string>
<string name="permdesc_setAlarm" msgid="5966966598149875082">"للسماح للتطبيق بضبط المنبه في تطبيق ساعة منبه مثبّت. ربما لا تنفذ بعض تطبيقات المنبه هذه الميزة."</string>
- <!-- no translation found for permlab_readWriteOwnVoicemail (8861946090046059697) -->
- <skip />
- <!-- no translation found for permdesc_readWriteOwnVoicemail (7343490168272921274) -->
- <skip />
+ <string name="permlab_readWriteOwnVoicemail" msgid="8861946090046059697">"الوصول إلى رسائل البريد الصوتي التي يديرها هذا التطبيق"</string>
+ <string name="permdesc_readWriteOwnVoicemail" msgid="7343490168272921274">"للسماح للتطبيق بتخزين واسترداد رسائل البريد الصوتي التي يمكنه الوصول إلى الخدمة المرتبطة بها فقط."</string>
<string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"تعديل أذونات الموقع الجغرافي للمتصفح"</string>
<string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"للسماح لتطبيق ما بتعديل أذونات الموقع الجغرافي للمتصفح. يمكن أن تستخدم التطبيقات الضارة هذا للسماح بإرسال معلومات الموقع إلى مواقع ويب عشوائية."</string>
<string name="save_password_message" msgid="767344687139195790">"هل تريد من المتصفح تذكر كلمة المرور هذه؟"</string>
@@ -843,7 +839,8 @@
<string name="cut" msgid="3092569408438626261">"قص"</string>
<string name="copy" msgid="2681946229533511987">"نسخ"</string>
<string name="paste" msgid="5629880836805036433">"لصق"</string>
- <string name="pasteDisabled" msgid="7259254654641456570">"ليس هناك شيء للصقه"</string>
+ <!-- no translation found for replace (8333608224471746584) -->
+ <skip />
<string name="copyUrl" msgid="2538211579596067402">"نسخ عنوان URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"تحديد نص..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"تحديد النص"</string>
@@ -919,22 +916,14 @@
<item quantity="one" msgid="1634101450343277345">"هناك شبكة Wi-Fi مفتوحة متاحة"</item>
<item quantity="other" msgid="7915895323644292768">"هناك شبكات Wi-Fi مفتوحة متاحة"</item>
</plurals>
- <!-- no translation found for wifi_watchdog_network_disabled (6398650124751302012) -->
- <skip />
- <!-- no translation found for wifi_watchdog_network_disabled_detailed (4659127251774069612) -->
- <skip />
- <!-- no translation found for wifi_p2p_dialog_title (97611782659324517) -->
- <skip />
- <!-- no translation found for wifi_p2p_turnon_message (2804722042556269129) -->
- <skip />
- <!-- no translation found for wifi_p2p_failed_message (6467545523417622335) -->
- <skip />
- <!-- no translation found for wifi_p2p_pbc_go_negotiation_request_message (3170321684621420428) -->
- <skip />
- <!-- no translation found for wifi_p2p_pin_go_negotiation_request_message (5177412094633377308) -->
- <skip />
- <!-- no translation found for wifi_p2p_pin_display_message (2834049169114922902) -->
- <skip />
+ <string name="wifi_watchdog_network_disabled" msgid="6398650124751302012">"تم تعطيل شبكة Wi-Fi."</string>
+ <string name="wifi_watchdog_network_disabled_detailed" msgid="4659127251774069612">"تم تعطيل شبكة Wi-Fi مؤقتًا بسبب اتصال خاطئ."</string>
+ <string name="wifi_p2p_dialog_title" msgid="97611782659324517">"اتصال Wi-Fi مباشر"</string>
+ <string name="wifi_p2p_turnon_message" msgid="2804722042556269129">"ابدأ تشغيل اتصالWi-Fi المباشر. يؤدي ذلك إلى إيقاف تشغيل عميل/نقطة اتصال Wi-Fi."</string>
+ <string name="wifi_p2p_failed_message" msgid="6467545523417622335">"أخفق بدء اتصال Wi-Fi مباشر."</string>
+ <string name="wifi_p2p_pbc_go_negotiation_request_message" msgid="3170321684621420428">"هناك طلب اتصال Wi-Fi مباشر من <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. انقر على موافق للقبول."</string>
+ <string name="wifi_p2p_pin_go_negotiation_request_message" msgid="5177412094633377308">"هناك طلب إعداد اتصال Wi-Fi مباشر من <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. أدخل رقم التعريف الشخصي للبدء."</string>
+ <string name="wifi_p2p_pin_display_message" msgid="2834049169114922902">"يجب إدخال رقم التعريف الشخصي لـ WPS <xliff:g id="P2P_WPS_PIN">%1$s</xliff:g> في الجهاز النظير <xliff:g id="P2P_CLIENT_ADDRESS">%2$s</xliff:g> حتى يبدأ إعداد الاتصال."</string>
<string name="select_character" msgid="3365550120617701745">"إدراج حرف"</string>
<string name="sms_control_default_app_name" msgid="7630529934366549163">"تطبيق غير معروف"</string>
<string name="sms_control_title" msgid="7296612781128917719">"إرسال رسائل قصيرة SMS"</string>
@@ -983,8 +972,7 @@
<string name="usb_mtp_notification_title" msgid="3699913097391550394">"التوصيل كجهاز وسائط"</string>
<string name="usb_ptp_notification_title" msgid="1960817192216064833">"التوصيل ككاميرا"</string>
<string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"التوصيل كأداة تثبيت"</string>
- <!-- no translation found for usb_accessory_notification_title (7848236974087653666) -->
- <skip />
+ <string name="usb_accessory_notification_title" msgid="7848236974087653666">"الاتصال بجهاز USB ملحق"</string>
<string name="usb_notification_message" msgid="4447869605109736382">"المس للاطلاع على خيارات USB الأخرى"</string>
<string name="extmedia_format_title" product="nosdcard" msgid="7980995592595097841">"تهيئة وحدة تخزين USB"</string>
<string name="extmedia_format_title" product="default" msgid="8663247929551095854">"تنسيق بطاقة SD"</string>
@@ -1104,6 +1092,22 @@
<string name="choose_account_label" msgid="4191313562041125787">"حدد حسابًا."</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"زيادة"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"تناقص"</string>
+ <!-- no translation found for checkbox_checked (7222044992652711167) -->
+ <skip />
+ <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
+ <skip />
+ <!-- no translation found for radiobutton_selected (8603599808486581511) -->
+ <skip />
+ <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
+ <skip />
+ <!-- no translation found for switch_on (551417728476977311) -->
+ <skip />
+ <!-- no translation found for switch_off (7249798614327155088) -->
+ <skip />
+ <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
+ <skip />
+ <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"التنقل إلى الشاشة الرئيسية"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"التنقل إلى أعلى"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"المزيد من الخيارات"</string>
@@ -1117,6 +1121,14 @@
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"تم تعطيل بيانات شبكة الجيل الرابع"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"تم تعطيل بيانات الجوال"</string>
<string name="data_usage_limit_body" msgid="2182247539226163759">"انقر للتمكين."</string>
+ <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
+ <skip />
+ <!-- no translation found for data_usage_4g_limit_snoozed_title (1106562779311209039) -->
+ <skip />
+ <!-- no translation found for data_usage_mobile_limit_snoozed_title (279240572165412168) -->
+ <skip />
+ <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <skip />
<string name="ssl_certificate" msgid="6510040486049237639">"شهادة الأمان"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"هذه الشهادة صالحة."</string>
<string name="issued_to" msgid="454239480274921032">"إصدار لـ:"</string>
@@ -1134,6 +1146,5 @@
<string name="activity_chooser_view_see_all" msgid="180268188117163072">"عرض الكل..."</string>
<string name="activity_chooser_view_dialog_title_default" msgid="3325054276356556835">"تحديد نشاط"</string>
<string name="share_action_provider_share_with" msgid="1791316789651185229">"مشاركة مع..."</string>
- <!-- no translation found for status_bar_device_locked (3092703448690669768) -->
- <skip />
+ <string name="status_bar_device_locked" msgid="3092703448690669768">"تم قفل الجهاز."</string>
</resources>
diff --git a/core/res/res/values-bg/strings.xml b/core/res/res/values-bg/strings.xml
index f20ef1b..2707b65 100644
--- a/core/res/res/values-bg/strings.xml
+++ b/core/res/res/values-bg/strings.xml
@@ -843,7 +843,8 @@
<string name="cut" msgid="3092569408438626261">"Изрязване"</string>
<string name="copy" msgid="2681946229533511987">"Копиране"</string>
<string name="paste" msgid="5629880836805036433">"Поставяне"</string>
- <string name="pasteDisabled" msgid="7259254654641456570">"Нищо за поставяне"</string>
+ <!-- no translation found for replace (8333608224471746584) -->
+ <skip />
<string name="copyUrl" msgid="2538211579596067402">"Копиране на URL адреса"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Избиране на текст..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Избиране на текст"</string>
@@ -1104,6 +1105,22 @@
<string name="choose_account_label" msgid="4191313562041125787">"Избор на профил"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Увеличаване"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Намаляване"</string>
+ <!-- no translation found for checkbox_checked (7222044992652711167) -->
+ <skip />
+ <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
+ <skip />
+ <!-- no translation found for radiobutton_selected (8603599808486581511) -->
+ <skip />
+ <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
+ <skip />
+ <!-- no translation found for switch_on (551417728476977311) -->
+ <skip />
+ <!-- no translation found for switch_off (7249798614327155088) -->
+ <skip />
+ <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
+ <skip />
+ <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"Придвижване към „Начало“"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Придвижване нагоре"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Още опции"</string>
@@ -1117,6 +1134,14 @@
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"4G данните са деактивирани"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Мобилните данни са деактивирани"</string>
<string name="data_usage_limit_body" msgid="2182247539226163759">"докоснете за активиране"</string>
+ <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
+ <skip />
+ <!-- no translation found for data_usage_4g_limit_snoozed_title (1106562779311209039) -->
+ <skip />
+ <!-- no translation found for data_usage_mobile_limit_snoozed_title (279240572165412168) -->
+ <skip />
+ <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <skip />
<string name="ssl_certificate" msgid="6510040486049237639">"Сертификат за сигурност"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Този сертификат е валиден."</string>
<string name="issued_to" msgid="454239480274921032">"Издаден на:"</string>
@@ -1132,10 +1157,8 @@
<string name="sha256_fingerprint" msgid="4391271286477279263">"Пръстов отпечатък SHA-256:"</string>
<string name="sha1_fingerprint" msgid="7930330235269404581">"Пръстов отпечатък SHA-1:"</string>
<string name="activity_chooser_view_see_all" msgid="180268188117163072">"Вижте всички..."</string>
- <!-- no translation found for activity_chooser_view_dialog_title_default (3325054276356556835) -->
- <skip />
- <!-- no translation found for share_action_provider_share_with (1791316789651185229) -->
- <skip />
+ <string name="activity_chooser_view_dialog_title_default" msgid="3325054276356556835">"Избор на активност"</string>
+ <string name="share_action_provider_share_with" msgid="1791316789651185229">"Споделяне с..."</string>
<!-- no translation found for status_bar_device_locked (3092703448690669768) -->
<skip />
</resources>
diff --git a/core/res/res/values-ca/strings.xml b/core/res/res/values-ca/strings.xml
index cb57c33..5eb1eb9 100644
--- a/core/res/res/values-ca/strings.xml
+++ b/core/res/res/values-ca/strings.xml
@@ -843,7 +843,8 @@
<string name="cut" msgid="3092569408438626261">"Retalla"</string>
<string name="copy" msgid="2681946229533511987">"Copia"</string>
<string name="paste" msgid="5629880836805036433">"Enganxa"</string>
- <string name="pasteDisabled" msgid="7259254654641456570">"Cap elem. per engan."</string>
+ <!-- no translation found for replace (8333608224471746584) -->
+ <skip />
<string name="copyUrl" msgid="2538211579596067402">"Copia l\'URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Selecciona el text..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Selecció de text"</string>
@@ -880,12 +881,9 @@
<string name="launch_warning_title" msgid="8323761616052121936">"Aplicació redirigida"</string>
<string name="launch_warning_replace" msgid="6202498949970281412">"<xliff:g id="APP_NAME">%1$s</xliff:g> s\'està executant."</string>
<string name="launch_warning_original" msgid="188102023021668683">"<xliff:g id="APP_NAME">%1$s</xliff:g> es va iniciar originalment."</string>
- <!-- no translation found for screen_compat_mode_scale (3202955667675944499) -->
- <skip />
- <!-- no translation found for screen_compat_mode_show (4013878876486655892) -->
- <skip />
- <!-- no translation found for screen_compat_mode_hint (2953716574198046484) -->
- <skip />
+ <string name="screen_compat_mode_scale" msgid="3202955667675944499">"Escala"</string>
+ <string name="screen_compat_mode_show" msgid="4013878876486655892">"Mostra sempre"</string>
+ <string name="screen_compat_mode_hint" msgid="2953716574198046484">"Torna a activar-ho amb Configuració > Aplicacions > Gestiona les aplicacions."</string>
<string name="smv_application" msgid="295583804361236288">"L\'aplicació <xliff:g id="APPLICATION">%1$s</xliff:g> (procés <xliff:g id="PROCESS">%2$s</xliff:g>) ha incomplert la seva política autoimposada de mode estricte."</string>
<string name="smv_process" msgid="5120397012047462446">"El procés <xliff:g id="PROCESS">%1$s</xliff:g> ha incomplert la seva política de mode estricte."</string>
<string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> s\'està executant"</string>
@@ -941,18 +939,12 @@
<string name="sms_control_message" msgid="1289331457999236205">"S\'estan enviant molts missatges SMS. Seleccioneu \"D\'acord\" per continuar o \"Cancel·la\" per aturar l\'enviament."</string>
<string name="sms_control_yes" msgid="2532062172402615953">"D\'acord"</string>
<string name="sms_control_no" msgid="1715320703137199869">"Cancel·la"</string>
- <!-- no translation found for sim_removed_title (6227712319223226185) -->
- <skip />
- <!-- no translation found for sim_removed_message (2064255102770489459) -->
- <skip />
- <!-- no translation found for sim_done_button (827949989369963775) -->
- <skip />
- <!-- no translation found for sim_added_title (3719670512889674693) -->
- <skip />
- <!-- no translation found for sim_added_message (1209265974048554242) -->
- <skip />
- <!-- no translation found for sim_restart_button (4722407842815232347) -->
- <skip />
+ <string name="sim_removed_title" msgid="6227712319223226185">"Extracció de la targeta SIM"</string>
+ <string name="sim_removed_message" msgid="2064255102770489459">"La xarxa de telefonia mòbil no estarà disponible fins que no canviïs la targeta SIM."</string>
+ <string name="sim_done_button" msgid="827949989369963775">"Fet"</string>
+ <string name="sim_added_title" msgid="3719670512889674693">"Addició de la targeta SIM"</string>
+ <string name="sim_added_message" msgid="1209265974048554242">"Cal que reiniciïs el dispositiu per accedir a la xarxa de telefonia mòbil."</string>
+ <string name="sim_restart_button" msgid="4722407842815232347">"Reinicia"</string>
<string name="time_picker_dialog_title" msgid="8349362623068819295">"Estableix l\'hora"</string>
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Establiment de data"</string>
<string name="date_time_set" msgid="5777075614321087758">"Defineix"</string>
@@ -1104,6 +1096,22 @@
<string name="choose_account_label" msgid="4191313562041125787">"Selecciona un compte"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Incrementa"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Disminueix"</string>
+ <!-- no translation found for checkbox_checked (7222044992652711167) -->
+ <skip />
+ <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
+ <skip />
+ <!-- no translation found for radiobutton_selected (8603599808486581511) -->
+ <skip />
+ <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
+ <skip />
+ <!-- no translation found for switch_on (551417728476977311) -->
+ <skip />
+ <!-- no translation found for switch_off (7249798614327155088) -->
+ <skip />
+ <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
+ <skip />
+ <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"Torna a la pàgina d\'inici"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Mou cap a dalt"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Més opcions"</string>
@@ -1117,6 +1125,14 @@
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"Dades 4G desactivades"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Dades mòbils desactivades"</string>
<string name="data_usage_limit_body" msgid="2182247539226163759">"pica per activar-lo"</string>
+ <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
+ <skip />
+ <!-- no translation found for data_usage_4g_limit_snoozed_title (1106562779311209039) -->
+ <skip />
+ <!-- no translation found for data_usage_mobile_limit_snoozed_title (279240572165412168) -->
+ <skip />
+ <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <skip />
<string name="ssl_certificate" msgid="6510040486049237639">"Certificat de seguretat"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Aquest certificat és vàlid."</string>
<string name="issued_to" msgid="454239480274921032">"Emès per a:"</string>
@@ -1132,7 +1148,7 @@
<string name="sha256_fingerprint" msgid="4391271286477279263">"Empremta SHA-256:"</string>
<string name="sha1_fingerprint" msgid="7930330235269404581">"Empremta SHA-1:"</string>
<string name="activity_chooser_view_see_all" msgid="180268188117163072">"Mostra-ho tot"</string>
- <string name="activity_chooser_view_dialog_title_default" msgid="3325054276356556835">"Selecció d\'activitat"</string>
+ <string name="activity_chooser_view_dialog_title_default" msgid="3325054276356556835">"Selecció d’activitat"</string>
<string name="share_action_provider_share_with" msgid="1791316789651185229">"Ús compartit amb..."</string>
<!-- no translation found for status_bar_device_locked (3092703448690669768) -->
<skip />
diff --git a/core/res/res/values-cs/strings.xml b/core/res/res/values-cs/strings.xml
index c074e7b..edc0b41 100644
--- a/core/res/res/values-cs/strings.xml
+++ b/core/res/res/values-cs/strings.xml
@@ -843,7 +843,8 @@
<string name="cut" msgid="3092569408438626261">"Vyjmout"</string>
<string name="copy" msgid="2681946229533511987">"Kopírovat"</string>
<string name="paste" msgid="5629880836805036433">"Vložit"</string>
- <string name="pasteDisabled" msgid="7259254654641456570">"Není co vložit"</string>
+ <!-- no translation found for replace (8333608224471746584) -->
+ <skip />
<string name="copyUrl" msgid="2538211579596067402">"Kopírovat adresu URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Vybrat text..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Výběr textu"</string>
@@ -880,12 +881,9 @@
<string name="launch_warning_title" msgid="8323761616052121936">"Aplikace přesměrována"</string>
<string name="launch_warning_replace" msgid="6202498949970281412">"Je spuštěna aplikace <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
<string name="launch_warning_original" msgid="188102023021668683">"Původně byla spuštěna aplikace <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
- <!-- no translation found for screen_compat_mode_scale (3202955667675944499) -->
- <skip />
- <!-- no translation found for screen_compat_mode_show (4013878876486655892) -->
- <skip />
- <!-- no translation found for screen_compat_mode_hint (2953716574198046484) -->
- <skip />
+ <string name="screen_compat_mode_scale" msgid="3202955667675944499">"Měřítko"</string>
+ <string name="screen_compat_mode_show" msgid="4013878876486655892">"Vždy zobrazovat"</string>
+ <string name="screen_compat_mode_hint" msgid="2953716574198046484">"Tuto možnost můžete opět aktivovat v části Nastavení > Aplikace > Správa aplikací."</string>
<string name="smv_application" msgid="295583804361236288">"Aplikace <xliff:g id="APPLICATION">%1$s</xliff:g> (proces <xliff:g id="PROCESS">%2$s</xliff:g>) porušila své vlastní vynucené zásady StrictMode."</string>
<string name="smv_process" msgid="5120397012047462446">"Proces <xliff:g id="PROCESS">%1$s</xliff:g> porušil své vlastní vynucené zásady StrictMode."</string>
<string name="heavy_weight_notification" msgid="9087063985776626166">"Běží aplikace <xliff:g id="APP">%1$s</xliff:g>"</string>
@@ -941,18 +939,12 @@
<string name="sms_control_message" msgid="1289331457999236205">"Je odesílán velký počet zpráv SMS. Vyberte OK, chcete-li pokračovat, nebo Zrušit, chcete-li odesílání ukončit."</string>
<string name="sms_control_yes" msgid="2532062172402615953">"OK"</string>
<string name="sms_control_no" msgid="1715320703137199869">"Zrušit"</string>
- <!-- no translation found for sim_removed_title (6227712319223226185) -->
- <skip />
- <!-- no translation found for sim_removed_message (2064255102770489459) -->
- <skip />
- <!-- no translation found for sim_done_button (827949989369963775) -->
- <skip />
- <!-- no translation found for sim_added_title (3719670512889674693) -->
- <skip />
- <!-- no translation found for sim_added_message (1209265974048554242) -->
- <skip />
- <!-- no translation found for sim_restart_button (4722407842815232347) -->
- <skip />
+ <string name="sim_removed_title" msgid="6227712319223226185">"Karta SIM odebrána"</string>
+ <string name="sim_removed_message" msgid="2064255102770489459">"Mobilní síť bude nedostupná, dokud nevyměníte kartu SIM."</string>
+ <string name="sim_done_button" msgid="827949989369963775">"Hotovo"</string>
+ <string name="sim_added_title" msgid="3719670512889674693">"Karta SIM přidána."</string>
+ <string name="sim_added_message" msgid="1209265974048554242">"Mobilní síť bude přístupná po restartu zařízení."</string>
+ <string name="sim_restart_button" msgid="4722407842815232347">"Restartovat"</string>
<string name="time_picker_dialog_title" msgid="8349362623068819295">"Nastavení času"</string>
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Nastavení data"</string>
<string name="date_time_set" msgid="5777075614321087758">"Nastavit"</string>
@@ -1104,6 +1096,22 @@
<string name="choose_account_label" msgid="4191313562041125787">"Vybrat účet"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Zvýšení"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Snížení"</string>
+ <!-- no translation found for checkbox_checked (7222044992652711167) -->
+ <skip />
+ <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
+ <skip />
+ <!-- no translation found for radiobutton_selected (8603599808486581511) -->
+ <skip />
+ <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
+ <skip />
+ <!-- no translation found for switch_on (551417728476977311) -->
+ <skip />
+ <!-- no translation found for switch_off (7249798614327155088) -->
+ <skip />
+ <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
+ <skip />
+ <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"Přejít na plochu"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Přejít nahoru"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Další možnosti"</string>
@@ -1117,6 +1125,14 @@
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"Datové přenosy 4G jsou zakázány"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Mobilní data jsou zakázána"</string>
<string name="data_usage_limit_body" msgid="2182247539226163759">"klepnutím povolíte"</string>
+ <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
+ <skip />
+ <!-- no translation found for data_usage_4g_limit_snoozed_title (1106562779311209039) -->
+ <skip />
+ <!-- no translation found for data_usage_mobile_limit_snoozed_title (279240572165412168) -->
+ <skip />
+ <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <skip />
<string name="ssl_certificate" msgid="6510040486049237639">"Certifikát zabezpečení"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Tento certifikát je platný."</string>
<string name="issued_to" msgid="454239480274921032">"Vydáno pro:"</string>
@@ -1133,7 +1149,7 @@
<string name="sha1_fingerprint" msgid="7930330235269404581">"Digitální otisk SHA-1:"</string>
<string name="activity_chooser_view_see_all" msgid="180268188117163072">"Zobrazit vše..."</string>
<string name="activity_chooser_view_dialog_title_default" msgid="3325054276356556835">"Vybrat činnost"</string>
- <string name="share_action_provider_share_with" msgid="1791316789651185229">"Sdílet..."</string>
+ <string name="share_action_provider_share_with" msgid="1791316789651185229">"Sdílet s..."</string>
<!-- no translation found for status_bar_device_locked (3092703448690669768) -->
<skip />
</resources>
diff --git a/core/res/res/values-da/strings.xml b/core/res/res/values-da/strings.xml
index 0038b29..b8b53ad 100644
--- a/core/res/res/values-da/strings.xml
+++ b/core/res/res/values-da/strings.xml
@@ -262,10 +262,8 @@
<string name="permdesc_readInputState" msgid="5132879321450325445">"Tillader, at en applikation registrerer taster, du trykker på, selv når du interagerer med andre applikationer (f.eks. ved indtastning af adgangskode). Bør aldrig være nødvendigt til normale applikationer."</string>
<string name="permlab_bindInputMethod" msgid="3360064620230515776">"forpligt til en inputmetode"</string>
<string name="permdesc_bindInputMethod" msgid="3734838321027317228">"Tillader, at brugeren forpligter sig til en inputmetodes grænseflade på øverste niveau. Bør aldrig være nødvendig til normale applikationer."</string>
- <!-- no translation found for permlab_bindTextService (7358378401915287938) -->
- <skip />
- <!-- no translation found for permdesc_bindTextService (172508880651909350) -->
- <skip />
+ <string name="permlab_bindTextService" msgid="7358378401915287938">"forpligte sig til en sms-tjeneste"</string>
+ <string name="permdesc_bindTextService" msgid="172508880651909350">"Tillader brugeren at forpligte sig på en teksttjenestes grænseflade (f. eks. SpellCheckerService) på øverste niveau. Bør aldrig være nødvendig til almindelige programmer."</string>
<string name="permlab_bindWallpaper" msgid="8716400279937856462">"forpligt til et tapet"</string>
<string name="permdesc_bindWallpaper" msgid="5287754520361915347">"Tillader, at brugeren forpligter sig til et tapets grænseflade på øverste niveau. Bør aldrig være nødvendig til normale applikationer."</string>
<string name="permlab_bindRemoteViews" msgid="5697987759897367099">"forpligt til en widgettjeneste"</string>
@@ -724,10 +722,8 @@
<string name="permdesc_writeHistoryBookmarks" product="default" msgid="945571990357114950">"Tillader, at en applikation ændrer browseroversigten eller bogmærker, der er gemt på din telefon. Ondsindede applikationer kan bruge dette til at slette eller ændre din browsers data."</string>
<string name="permlab_setAlarm" msgid="5924401328803615165">"angiv alarm i alarmprogram"</string>
<string name="permdesc_setAlarm" msgid="5966966598149875082">"Tillader, at applikationen angiver en alarm i et installeret alarmprogram. Nogle alarmprogrammer kan ikke implementere denne funktion."</string>
- <!-- no translation found for permlab_readWriteOwnVoicemail (8861946090046059697) -->
- <skip />
- <!-- no translation found for permdesc_readWriteOwnVoicemail (7343490168272921274) -->
- <skip />
+ <string name="permlab_readWriteOwnVoicemail" msgid="8861946090046059697">"Få adgang til telefonsvarerbeskeder, der administreres af dette program"</string>
+ <string name="permdesc_readWriteOwnVoicemail" msgid="7343490168272921274">"Tillader, at applikationen kun gemmer og henter de telefonsvarerbeskeder, som dets tilknyttede tjeneste kan få adgang til."</string>
<string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"Skift browsertilladelser for geografisk placering"</string>
<string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"Giver en applikation tilladelse til at ændre browserens tilladelser for geografisk placering. Skadelige applikationer kan bruge dette til at tillade, at placeringsoplysninger sendes til vilkårlige websteder."</string>
<string name="save_password_message" msgid="767344687139195790">"Ønsker du, at browseren skal huske denne adgangskode?"</string>
@@ -843,7 +839,8 @@
<string name="cut" msgid="3092569408438626261">"Klip"</string>
<string name="copy" msgid="2681946229533511987">"Kopier"</string>
<string name="paste" msgid="5629880836805036433">"Indsæt"</string>
- <string name="pasteDisabled" msgid="7259254654641456570">"Intet at indsætte"</string>
+ <!-- no translation found for replace (8333608224471746584) -->
+ <skip />
<string name="copyUrl" msgid="2538211579596067402">"Kopier webadresse"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Marker tekst..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Tekstmarkering"</string>
@@ -919,22 +916,14 @@
<item quantity="one" msgid="1634101450343277345">"Åbent Wi-Fi-netværk tilgængeligt"</item>
<item quantity="other" msgid="7915895323644292768">"Der er åbne Wi-Fi-netværk tilgængelige"</item>
</plurals>
- <!-- no translation found for wifi_watchdog_network_disabled (6398650124751302012) -->
- <skip />
- <!-- no translation found for wifi_watchdog_network_disabled_detailed (4659127251774069612) -->
- <skip />
- <!-- no translation found for wifi_p2p_dialog_title (97611782659324517) -->
- <skip />
- <!-- no translation found for wifi_p2p_turnon_message (2804722042556269129) -->
- <skip />
- <!-- no translation found for wifi_p2p_failed_message (6467545523417622335) -->
- <skip />
- <!-- no translation found for wifi_p2p_pbc_go_negotiation_request_message (3170321684621420428) -->
- <skip />
- <!-- no translation found for wifi_p2p_pin_go_negotiation_request_message (5177412094633377308) -->
- <skip />
- <!-- no translation found for wifi_p2p_pin_display_message (2834049169114922902) -->
- <skip />
+ <string name="wifi_watchdog_network_disabled" msgid="6398650124751302012">"Et Wi-Fi-netværk blev deaktiveret"</string>
+ <string name="wifi_watchdog_network_disabled_detailed" msgid="4659127251774069612">"Et Wi-Fi-netværk blev midlertidigt deaktiveret på grund af dårlig forbindelse."</string>
+ <string name="wifi_p2p_dialog_title" msgid="97611782659324517">"Wi-Fi Direct"</string>
+ <string name="wifi_p2p_turnon_message" msgid="2804722042556269129">"Start Wi-Fi Direct-drift. Dette vil slukke for Wi-Fi-klient / hotspot-drift."</string>
+ <string name="wifi_p2p_failed_message" msgid="6467545523417622335">"Kunne ikke starte Wi-Fi Direct"</string>
+ <string name="wifi_p2p_pbc_go_negotiation_request_message" msgid="3170321684621420428">"Anmodning om konfiguration af Wi-Fi Direct-forbindelse fra <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Klik på OK for at acceptere."</string>
+ <string name="wifi_p2p_pin_go_negotiation_request_message" msgid="5177412094633377308">"Anmodning om konfiguration af Wi-Fi Direct-forbindelse fra <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Indtast pinkode for at fortsætte."</string>
+ <string name="wifi_p2p_pin_display_message" msgid="2834049169114922902">"WPS-pinkoden <xliff:g id="P2P_WPS_PIN">%1$s</xliff:g> skal angives på peer-enheden <xliff:g id="P2P_CLIENT_ADDRESS">%2$s</xliff:g> for at fortsætte konfiguration af forbindelsen"</string>
<string name="select_character" msgid="3365550120617701745">"Indsæt tegn"</string>
<string name="sms_control_default_app_name" msgid="7630529934366549163">"Ukendt applikation"</string>
<string name="sms_control_title" msgid="7296612781128917719">"Sender sms-beskeder"</string>
@@ -983,8 +972,7 @@
<string name="usb_mtp_notification_title" msgid="3699913097391550394">"Tilsluttet som en medieenhed"</string>
<string name="usb_ptp_notification_title" msgid="1960817192216064833">"Tilsluttet som et kamera"</string>
<string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"Tilsluttet som et installationsprogram"</string>
- <!-- no translation found for usb_accessory_notification_title (7848236974087653666) -->
- <skip />
+ <string name="usb_accessory_notification_title" msgid="7848236974087653666">"Tilsluttet et USB-ekstraudstyr"</string>
<string name="usb_notification_message" msgid="4447869605109736382">"Tryk for at se andre valgmuligheder for USB-tilslutning"</string>
<string name="extmedia_format_title" product="nosdcard" msgid="7980995592595097841">"Formater USB-lager"</string>
<string name="extmedia_format_title" product="default" msgid="8663247929551095854">"Formater SD-kort"</string>
@@ -1104,6 +1092,22 @@
<string name="choose_account_label" msgid="4191313562041125787">"Vælg en konto"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Optælling"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Nedtælling"</string>
+ <!-- no translation found for checkbox_checked (7222044992652711167) -->
+ <skip />
+ <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
+ <skip />
+ <!-- no translation found for radiobutton_selected (8603599808486581511) -->
+ <skip />
+ <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
+ <skip />
+ <!-- no translation found for switch_on (551417728476977311) -->
+ <skip />
+ <!-- no translation found for switch_off (7249798614327155088) -->
+ <skip />
+ <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
+ <skip />
+ <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"Naviger hjem"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Naviger op"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Flere valgmuligheder"</string>
@@ -1117,6 +1121,14 @@
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"4G-data er deaktiveret"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Mobildata er deaktiveret"</string>
<string name="data_usage_limit_body" msgid="2182247539226163759">"tryk for at aktivere"</string>
+ <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
+ <skip />
+ <!-- no translation found for data_usage_4g_limit_snoozed_title (1106562779311209039) -->
+ <skip />
+ <!-- no translation found for data_usage_mobile_limit_snoozed_title (279240572165412168) -->
+ <skip />
+ <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <skip />
<string name="ssl_certificate" msgid="6510040486049237639">"Sikkerhedscertifikat"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Dette certifikat er gyldigt."</string>
<string name="issued_to" msgid="454239480274921032">"Udstedt til:"</string>
@@ -1134,6 +1146,5 @@
<string name="activity_chooser_view_see_all" msgid="180268188117163072">"Se alle..."</string>
<string name="activity_chooser_view_dialog_title_default" msgid="3325054276356556835">"Vælg aktivitet"</string>
<string name="share_action_provider_share_with" msgid="1791316789651185229">"Del med..."</string>
- <!-- no translation found for status_bar_device_locked (3092703448690669768) -->
- <skip />
+ <string name="status_bar_device_locked" msgid="3092703448690669768">"Enhed låst."</string>
</resources>
diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml
index 508b65d..a185a0f 100644
--- a/core/res/res/values-de/strings.xml
+++ b/core/res/res/values-de/strings.xml
@@ -843,7 +843,8 @@
<string name="cut" msgid="3092569408438626261">"Ausschneiden"</string>
<string name="copy" msgid="2681946229533511987">"Kopieren"</string>
<string name="paste" msgid="5629880836805036433">"Einfügen"</string>
- <string name="pasteDisabled" msgid="7259254654641456570">"Nichts zum Einfügen"</string>
+ <!-- no translation found for replace (8333608224471746584) -->
+ <skip />
<string name="copyUrl" msgid="2538211579596067402">"URL kopieren"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Text auswählen..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Textauswahl"</string>
@@ -1104,6 +1105,22 @@
<string name="choose_account_label" msgid="4191313562041125787">"Konto auswählen"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Erhöhen"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Verringern"</string>
+ <!-- no translation found for checkbox_checked (7222044992652711167) -->
+ <skip />
+ <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
+ <skip />
+ <!-- no translation found for radiobutton_selected (8603599808486581511) -->
+ <skip />
+ <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
+ <skip />
+ <!-- no translation found for switch_on (551417728476977311) -->
+ <skip />
+ <!-- no translation found for switch_off (7249798614327155088) -->
+ <skip />
+ <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
+ <skip />
+ <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"Zur Startseite navigieren"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Nach oben navigieren"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Weitere Optionen"</string>
@@ -1117,6 +1134,14 @@
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"4G-Daten deaktiviert"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Mobile Daten deaktiviert"</string>
<string name="data_usage_limit_body" msgid="2182247539226163759">"Zum Aktivieren klicken"</string>
+ <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
+ <skip />
+ <!-- no translation found for data_usage_4g_limit_snoozed_title (1106562779311209039) -->
+ <skip />
+ <!-- no translation found for data_usage_mobile_limit_snoozed_title (279240572165412168) -->
+ <skip />
+ <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <skip />
<string name="ssl_certificate" msgid="6510040486049237639">"Sicherheitszertifikat"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Dies ist ein gültiges Zertifikat."</string>
<string name="issued_to" msgid="454239480274921032">"Ausgestellt für:"</string>
@@ -1132,10 +1157,8 @@
<string name="sha256_fingerprint" msgid="4391271286477279263">"SHA-256-Fingerabdruck:"</string>
<string name="sha1_fingerprint" msgid="7930330235269404581">"SHA-1-Fingerabdruck:"</string>
<string name="activity_chooser_view_see_all" msgid="180268188117163072">"Alle anzeigen..."</string>
- <!-- no translation found for activity_chooser_view_dialog_title_default (3325054276356556835) -->
- <skip />
- <!-- no translation found for share_action_provider_share_with (1791316789651185229) -->
- <skip />
+ <string name="activity_chooser_view_dialog_title_default" msgid="3325054276356556835">"Aktion auswählen"</string>
+ <string name="share_action_provider_share_with" msgid="1791316789651185229">"Teilen mit..."</string>
<!-- no translation found for status_bar_device_locked (3092703448690669768) -->
<skip />
</resources>
diff --git a/core/res/res/values-el/strings.xml b/core/res/res/values-el/strings.xml
index 1bf806a..7491472 100644
--- a/core/res/res/values-el/strings.xml
+++ b/core/res/res/values-el/strings.xml
@@ -262,10 +262,8 @@
<string name="permdesc_readInputState" msgid="5132879321450325445">"Επιτρέπει σε εφαρμογές να παρακολουθούν τα πλήκτρα που πατάτε, ακόμη και σε μια άλλη εφαρμογή (όπως π.χ. η καταχώρηση ενός κωδικού πρόσβασης). Δεν είναι απαραίτητο για συνήθεις εφαρμογές."</string>
<string name="permlab_bindInputMethod" msgid="3360064620230515776">"δέσμευση σε μέθοδο εισόδου"</string>
<string name="permdesc_bindInputMethod" msgid="3734838321027317228">"Επιτρέπει στον κάτοχο τη δέσμευση στη διεπαφή ανωτάτου επιπέδου μιας μεθόδου εισόδου. Δεν είναι απαραίτητο για συνήθεις εφαρμογές."</string>
- <!-- no translation found for permlab_bindTextService (7358378401915287938) -->
- <skip />
- <!-- no translation found for permdesc_bindTextService (172508880651909350) -->
- <skip />
+ <string name="permlab_bindTextService" msgid="7358378401915287938">"σύνδεση σε υπηρεσία ανταλλαγής μηνυμάτων"</string>
+ <string name="permdesc_bindTextService" msgid="172508880651909350">"Επιτρέπει στον κάτοχο τη σύνδεση με τη διεπαφή ανωτέρου επιπέδου μιας υπηρεσίας ανταλλαγής μηνυμάτων (π.χ. SpellCheckerService). Δεν είναι απαραίτητο για κανονικές εφαρμογές."</string>
<string name="permlab_bindWallpaper" msgid="8716400279937856462">"δέσμευση σε ταπετσαρία"</string>
<string name="permdesc_bindWallpaper" msgid="5287754520361915347">"Επιτρέπει στον κάτοχο τη δέσμευση στη διεπαφή ανωτάτου επιπέδου μιας ταπετσαρίας. Δεν είναι απαραίτητο για συνήθεις εφαρμογές."</string>
<string name="permlab_bindRemoteViews" msgid="5697987759897367099">"δέσμευση σε υπηρεσία γραφικών στοιχείων"</string>
@@ -724,10 +722,8 @@
<string name="permdesc_writeHistoryBookmarks" product="default" msgid="945571990357114950">"Επιτρέπει σε μια εφαρμογή να τροποποιήσει το ιστορικό ή τους σελιδοδείκτες του προγράμματος περιήγησης που βρίσκονται αποθηκευμένα στο τηλέφωνό σας. Κακόβουλες εφαρμογές μπορούν να το χρησιμοποιήσουν για να διαγράψουν ή να τροποποιήσουν τα δεδομένα του προγράμματος περιήγησης."</string>
<string name="permlab_setAlarm" msgid="5924401328803615165">"ρύθμιση ειδοποίησης σε ξυπνητήρι"</string>
<string name="permdesc_setAlarm" msgid="5966966598149875082">"Επιτρέπει στην εφαρμογή να ρυθμίσει μια ειδοποίηση σε μια εγκατεστημένη εφαρμογή ξυπνητηριού. Κάποιες εφαρμογές ξυπνητηριού ενδέχεται να μην περιλαμβάνουν αυτή τη λειτουργία."</string>
- <!-- no translation found for permlab_readWriteOwnVoicemail (8861946090046059697) -->
- <skip />
- <!-- no translation found for permdesc_readWriteOwnVoicemail (7343490168272921274) -->
- <skip />
+ <string name="permlab_readWriteOwnVoicemail" msgid="8861946090046059697">"Πρόσβαση σε μηνύματα αυτόματου τηλεφωνητή, τα οποία διαχειρίζεται αυτή η εφαρμογή"</string>
+ <string name="permdesc_readWriteOwnVoicemail" msgid="7343490168272921274">"Επιτρέπει στην εφαρμογή την αποθήκευση και την ανάκτηση μόνο μηνυμάτων αυτόματου τηλεφωνητή, στα οποία έχει πρόσβαση η σχετική υπηρεσία."</string>
<string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"Τροποποίηση δικαιωμάτων γεωγραφικής θέσης προγράμματος περιήγησης"</string>
<string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"Επιτρέπει σε μια εφαρμογή την τροποποίηση των δικαιωμάτων γεωγραφικής θέσης του προγράμματος περιήγησης. Οι κακόβουλες εφαρμογές μπορούν να το χρησιμοποιήσουν για να επιτρέψουν την αποστολή στοιχείων τοποθεσίας σε αυθαίρετους ιστότοπους."</string>
<string name="save_password_message" msgid="767344687139195790">"Θέλετε το πρόγραμμα περιήγησης να διατηρήσει αυτόν τον κωδικό πρόσβασης;"</string>
@@ -843,7 +839,8 @@
<string name="cut" msgid="3092569408438626261">"Αποκοπή"</string>
<string name="copy" msgid="2681946229533511987">"Αντιγραφή"</string>
<string name="paste" msgid="5629880836805036433">"Επικόλληση"</string>
- <string name="pasteDisabled" msgid="7259254654641456570">"Καν. στοιχ. για επικ."</string>
+ <!-- no translation found for replace (8333608224471746584) -->
+ <skip />
<string name="copyUrl" msgid="2538211579596067402">"Αντιγραφή διεύθυνσης URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Επιλογή κειμένου..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Επιλογή κειμένου"</string>
@@ -880,12 +877,9 @@
<string name="launch_warning_title" msgid="8323761616052121936">"Ανακατεύθυνση εφαρμογής"</string>
<string name="launch_warning_replace" msgid="6202498949970281412">"Η εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g> εκτελείται τώρα."</string>
<string name="launch_warning_original" msgid="188102023021668683">"Έγινε εκκίνηση πρώτα της εφαρμογής <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
- <!-- no translation found for screen_compat_mode_scale (3202955667675944499) -->
- <skip />
- <!-- no translation found for screen_compat_mode_show (4013878876486655892) -->
- <skip />
- <!-- no translation found for screen_compat_mode_hint (2953716574198046484) -->
- <skip />
+ <string name="screen_compat_mode_scale" msgid="3202955667675944499">"Κλίμακα"</string>
+ <string name="screen_compat_mode_show" msgid="4013878876486655892">"Να εμφανίζονται πάντα"</string>
+ <string name="screen_compat_mode_hint" msgid="2953716574198046484">"Ενεργοποίηση αυτής της εφαρμογής από τις Ρυθμίσεις > Εφαρμογές > Διαχείριση εφαρμογών."</string>
<string name="smv_application" msgid="295583804361236288">"Η εφαρμογή <xliff:g id="APPLICATION">%1$s</xliff:g> (διεργασία <xliff:g id="PROCESS">%2$s</xliff:g>) παραβίασε την αυτοεπιβαλόμενη πολιτική StrictMode."</string>
<string name="smv_process" msgid="5120397012047462446">"Η διεργασία <xliff:g id="PROCESS">%1$s</xliff:g> παραβίασε την αυτοεπιβαλόμενη πολιτική StrictMode."</string>
<string name="heavy_weight_notification" msgid="9087063985776626166">"Η εφαρμογή <xliff:g id="APP">%1$s</xliff:g> εκτελείται"</string>
@@ -919,40 +913,26 @@
<item quantity="one" msgid="1634101450343277345">"Υπάρχει διαθέσιμο ανοικτό δίκτυο Wi-Fi"</item>
<item quantity="other" msgid="7915895323644292768">"Υπάρχουν διαθέσιμα ανοικτά δίκτυα Wi-Fi"</item>
</plurals>
- <!-- no translation found for wifi_watchdog_network_disabled (6398650124751302012) -->
- <skip />
- <!-- no translation found for wifi_watchdog_network_disabled_detailed (4659127251774069612) -->
- <skip />
- <!-- no translation found for wifi_p2p_dialog_title (97611782659324517) -->
- <skip />
- <!-- no translation found for wifi_p2p_turnon_message (2804722042556269129) -->
- <skip />
- <!-- no translation found for wifi_p2p_failed_message (6467545523417622335) -->
- <skip />
- <!-- no translation found for wifi_p2p_pbc_go_negotiation_request_message (3170321684621420428) -->
- <skip />
- <!-- no translation found for wifi_p2p_pin_go_negotiation_request_message (5177412094633377308) -->
- <skip />
- <!-- no translation found for wifi_p2p_pin_display_message (2834049169114922902) -->
- <skip />
+ <string name="wifi_watchdog_network_disabled" msgid="6398650124751302012">"Ένα δίκτυο Wi-Fi ήταν απενεργοποιημένο."</string>
+ <string name="wifi_watchdog_network_disabled_detailed" msgid="4659127251774069612">"Ένα δίκτυο Wi-Fi ήταν προσωρινά απενεργοποιημένο λόγω κακής σύνδεσης."</string>
+ <string name="wifi_p2p_dialog_title" msgid="97611782659324517">"Wi-Fi Direct"</string>
+ <string name="wifi_p2p_turnon_message" msgid="2804722042556269129">"Ξεκινήστε τη λειτουργία Wi-Fi Direct. Θα απενεργοποιηθεί η λειτουργία πελάτη/φορητού σημείου πρόσβασης Wi-Fi."</string>
+ <string name="wifi_p2p_failed_message" msgid="6467545523417622335">"Αποτυχία έναρξης Wi-Fi Direct"</string>
+ <string name="wifi_p2p_pbc_go_negotiation_request_message" msgid="3170321684621420428">"Αίτημα για ρύθμιση σύνδεσης Wi-Fi Direct από το <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Κάντε κλικ στο κουμπί OK για αποδοχή."</string>
+ <string name="wifi_p2p_pin_go_negotiation_request_message" msgid="5177412094633377308">"Αίτημα ρύθμισης σύνδεσης Wi-Fi Direct από τη διεύθυνση <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Καταχωρίστε το pin για να συνεχίσετε."</string>
+ <string name="wifi_p2p_pin_display_message" msgid="2834049169114922902">"Το pin WPS <xliff:g id="P2P_WPS_PIN">%1$s</xliff:g> πρέπει να καταχωριστεί στην ομότιμη συσκευή <xliff:g id="P2P_CLIENT_ADDRESS">%2$s</xliff:g> για να συνεχιστεί η ρύθμιση της σύνδεσης"</string>
<string name="select_character" msgid="3365550120617701745">"Εισαγωγή χαρακτήρα"</string>
<string name="sms_control_default_app_name" msgid="7630529934366549163">"Άγνωστη εφαρμογή"</string>
<string name="sms_control_title" msgid="7296612781128917719">"Αποστολή μηνυμάτων SMS"</string>
<string name="sms_control_message" msgid="1289331457999236205">"Αποστέλλεται μεγάλος αριθμός μηνυμάτων SMS. Επιλέξτε \"OK\" για συνέχεια, ή \"Ακύρωση\" για διακοπή αποστολής."</string>
<string name="sms_control_yes" msgid="2532062172402615953">"OK"</string>
<string name="sms_control_no" msgid="1715320703137199869">"Ακύρωση"</string>
- <!-- no translation found for sim_removed_title (6227712319223226185) -->
- <skip />
- <!-- no translation found for sim_removed_message (2064255102770489459) -->
- <skip />
- <!-- no translation found for sim_done_button (827949989369963775) -->
- <skip />
- <!-- no translation found for sim_added_title (3719670512889674693) -->
- <skip />
- <!-- no translation found for sim_added_message (1209265974048554242) -->
- <skip />
- <!-- no translation found for sim_restart_button (4722407842815232347) -->
- <skip />
+ <string name="sim_removed_title" msgid="6227712319223226185">"Η κάρτα SIM αφαιρέθηκε"</string>
+ <string name="sim_removed_message" msgid="2064255102770489459">"Το δίκτυο κινητής τηλεφωνίας δεν θα είναι διαθέσιμο έως ότου αντικαταστήσετε την κάρτα SIM."</string>
+ <string name="sim_done_button" msgid="827949989369963775">"Τέλος"</string>
+ <string name="sim_added_title" msgid="3719670512889674693">"Προστέθηκε κάρτα SIM"</string>
+ <string name="sim_added_message" msgid="1209265974048554242">"Πρέπει να επανεκκινήσετε τη συσκευή σας για να αποκτήσετε πρόσβαση στο δίκτυο κινητής τηλεφωνίας"</string>
+ <string name="sim_restart_button" msgid="4722407842815232347">"Επανεκκίνηση"</string>
<string name="time_picker_dialog_title" msgid="8349362623068819295">"Ρύθμιση ώρας"</string>
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Ορισμός ημερομηνίας"</string>
<string name="date_time_set" msgid="5777075614321087758">"Ορισμός"</string>
@@ -983,8 +963,7 @@
<string name="usb_mtp_notification_title" msgid="3699913097391550394">"Συνδεδεμένο ως συσκευή πολυμέσων"</string>
<string name="usb_ptp_notification_title" msgid="1960817192216064833">"Συνδεδεμένο ως φωτογραφική μηχανή"</string>
<string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"Συνδεδεμένο ως πρόγραμμα εγκατάστασης"</string>
- <!-- no translation found for usb_accessory_notification_title (7848236974087653666) -->
- <skip />
+ <string name="usb_accessory_notification_title" msgid="7848236974087653666">"Σύνδεση σε αξεσουάρ USB"</string>
<string name="usb_notification_message" msgid="4447869605109736382">"Αγγίξτε για άλλες επιλογές USB"</string>
<string name="extmedia_format_title" product="nosdcard" msgid="7980995592595097841">"Διαγρ. απ. χώρου USB"</string>
<string name="extmedia_format_title" product="default" msgid="8663247929551095854">"Διαμόρφωση κάρτας SD"</string>
@@ -1104,6 +1083,22 @@
<string name="choose_account_label" msgid="4191313562041125787">"Επιλογή λογαριασμού"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Αύξηση"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Μείωση"</string>
+ <!-- no translation found for checkbox_checked (7222044992652711167) -->
+ <skip />
+ <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
+ <skip />
+ <!-- no translation found for radiobutton_selected (8603599808486581511) -->
+ <skip />
+ <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
+ <skip />
+ <!-- no translation found for switch_on (551417728476977311) -->
+ <skip />
+ <!-- no translation found for switch_off (7249798614327155088) -->
+ <skip />
+ <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
+ <skip />
+ <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"Πλοήγηση στην αρχική σελίδα"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Πλοήγηση προς τα επάνω"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Περισσότερες επιλογές"</string>
@@ -1117,6 +1112,14 @@
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"Τα δεδομένα 4G απενεργοποιήθηκαν"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Τα δεδομ. κιν. τηλεφ. απενεργοπ."</string>
<string name="data_usage_limit_body" msgid="2182247539226163759">"πατήστε για ενεργοποίηση"</string>
+ <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
+ <skip />
+ <!-- no translation found for data_usage_4g_limit_snoozed_title (1106562779311209039) -->
+ <skip />
+ <!-- no translation found for data_usage_mobile_limit_snoozed_title (279240572165412168) -->
+ <skip />
+ <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <skip />
<string name="ssl_certificate" msgid="6510040486049237639">"Πιστοποιητικό ασφαλείας"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Αυτό το πιστοποιητικό είναι έγκυρο."</string>
<string name="issued_to" msgid="454239480274921032">"Εκδόθηκε σε:"</string>
@@ -1132,10 +1135,7 @@
<string name="sha256_fingerprint" msgid="4391271286477279263">"Αποτύπωμα SHA-256"</string>
<string name="sha1_fingerprint" msgid="7930330235269404581">"Αποτύπωμα SHA-1"</string>
<string name="activity_chooser_view_see_all" msgid="180268188117163072">"Εμφάνιση όλων..."</string>
- <!-- no translation found for activity_chooser_view_dialog_title_default (3325054276356556835) -->
- <skip />
- <!-- no translation found for share_action_provider_share_with (1791316789651185229) -->
- <skip />
- <!-- no translation found for status_bar_device_locked (3092703448690669768) -->
- <skip />
+ <string name="activity_chooser_view_dialog_title_default" msgid="3325054276356556835">"Επιλογή δραστηριότητας"</string>
+ <string name="share_action_provider_share_with" msgid="1791316789651185229">"Κοινή χρήση με..."</string>
+ <string name="status_bar_device_locked" msgid="3092703448690669768">"Η συσκευή κλειδώθηκε."</string>
</resources>
diff --git a/core/res/res/values-en-rGB/strings.xml b/core/res/res/values-en-rGB/strings.xml
index a22fafc..39e85ed 100644
--- a/core/res/res/values-en-rGB/strings.xml
+++ b/core/res/res/values-en-rGB/strings.xml
@@ -262,10 +262,8 @@
<string name="permdesc_readInputState" msgid="5132879321450325445">"Allows applications to watch the keys that you press even when interacting with another application (such as entering a password). Should never be needed for normal applications."</string>
<string name="permlab_bindInputMethod" msgid="3360064620230515776">"bind to an input method"</string>
<string name="permdesc_bindInputMethod" msgid="3734838321027317228">"Allows the holder to bind to the top-level interface of an input method. Should never be needed for normal applications."</string>
- <!-- no translation found for permlab_bindTextService (7358378401915287938) -->
- <skip />
- <!-- no translation found for permdesc_bindTextService (172508880651909350) -->
- <skip />
+ <string name="permlab_bindTextService" msgid="7358378401915287938">"bind to a text service"</string>
+ <string name="permdesc_bindTextService" msgid="172508880651909350">"Allows the holder to bind to the top-level interface of a text service (e.g. SpellCheckerService). Should never be needed for normal applications."</string>
<string name="permlab_bindWallpaper" msgid="8716400279937856462">"bind to wallpaper"</string>
<string name="permdesc_bindWallpaper" msgid="5287754520361915347">"Allows the holder to bind to the top-level interface of wallpaper. Should never be needed for normal applications."</string>
<string name="permlab_bindRemoteViews" msgid="5697987759897367099">"bind to a widget service"</string>
@@ -724,10 +722,8 @@
<string name="permdesc_writeHistoryBookmarks" product="default" msgid="945571990357114950">"Allows an application to modify the browser\'s history or bookmarks stored on your phone. Malicious applications can use this to erase or modify your browser\'s data."</string>
<string name="permlab_setAlarm" msgid="5924401328803615165">"set alarm in alarm clock"</string>
<string name="permdesc_setAlarm" msgid="5966966598149875082">"Allows the application to set an alarm in an installed alarm clock application. Some alarm clock applications may not implement this feature."</string>
- <!-- no translation found for permlab_readWriteOwnVoicemail (8861946090046059697) -->
- <skip />
- <!-- no translation found for permdesc_readWriteOwnVoicemail (7343490168272921274) -->
- <skip />
+ <string name="permlab_readWriteOwnVoicemail" msgid="8861946090046059697">"Access voicemails managed by this application"</string>
+ <string name="permdesc_readWriteOwnVoicemail" msgid="7343490168272921274">"Allows the application to store and retrieve only voicemails that its associated service can access."</string>
<string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"Modify Browser geo-location permissions"</string>
<string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"Allows an application to modify the browser\'s geo-location permissions. Malicious applications can use this to allow the sending of location information to arbitrary websites."</string>
<string name="save_password_message" msgid="767344687139195790">"Do you want the browser to remember this password?"</string>
@@ -843,7 +839,8 @@
<string name="cut" msgid="3092569408438626261">"Cut"</string>
<string name="copy" msgid="2681946229533511987">"Copy"</string>
<string name="paste" msgid="5629880836805036433">"Paste"</string>
- <string name="pasteDisabled" msgid="7259254654641456570">"Nothing to paste"</string>
+ <!-- no translation found for replace (8333608224471746584) -->
+ <skip />
<string name="copyUrl" msgid="2538211579596067402">"Copy URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Select text..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Text selection"</string>
@@ -916,22 +913,14 @@
<item quantity="one" msgid="1634101450343277345">"Open available Wi-Fi network"</item>
<item quantity="other" msgid="7915895323644292768">"Open Wi-Fi networks available"</item>
</plurals>
- <!-- no translation found for wifi_watchdog_network_disabled (6398650124751302012) -->
- <skip />
- <!-- no translation found for wifi_watchdog_network_disabled_detailed (4659127251774069612) -->
- <skip />
- <!-- no translation found for wifi_p2p_dialog_title (97611782659324517) -->
- <skip />
- <!-- no translation found for wifi_p2p_turnon_message (2804722042556269129) -->
- <skip />
- <!-- no translation found for wifi_p2p_failed_message (6467545523417622335) -->
- <skip />
- <!-- no translation found for wifi_p2p_pbc_go_negotiation_request_message (3170321684621420428) -->
- <skip />
- <!-- no translation found for wifi_p2p_pin_go_negotiation_request_message (5177412094633377308) -->
- <skip />
- <!-- no translation found for wifi_p2p_pin_display_message (2834049169114922902) -->
- <skip />
+ <string name="wifi_watchdog_network_disabled" msgid="6398650124751302012">"A Wi-Fi network was disabled"</string>
+ <string name="wifi_watchdog_network_disabled_detailed" msgid="4659127251774069612">"A Wi-Fi network was temporarily disabled due to bad connectivity."</string>
+ <string name="wifi_p2p_dialog_title" msgid="97611782659324517">"Wi-Fi Direct"</string>
+ <string name="wifi_p2p_turnon_message" msgid="2804722042556269129">"Start Wi-Fi Direct operation. This will turn off Wi-Fi client/hotspot operation."</string>
+ <string name="wifi_p2p_failed_message" msgid="6467545523417622335">"Failed to start Wi-Fi Direct"</string>
+ <string name="wifi_p2p_pbc_go_negotiation_request_message" msgid="3170321684621420428">"Wi-Fi Direct connection setup request from <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Click OK to accept."</string>
+ <string name="wifi_p2p_pin_go_negotiation_request_message" msgid="5177412094633377308">"Wi-Fi Direct connection setup request from <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Enter PIN to proceed."</string>
+ <string name="wifi_p2p_pin_display_message" msgid="2834049169114922902">"WPS pin <xliff:g id="P2P_WPS_PIN">%1$s</xliff:g> needs to be entered on the peer device <xliff:g id="P2P_CLIENT_ADDRESS">%2$s</xliff:g> for connection setup to proceed"</string>
<string name="select_character" msgid="3365550120617701745">"Insert character"</string>
<string name="sms_control_default_app_name" msgid="7630529934366549163">"Unknown application"</string>
<string name="sms_control_title" msgid="7296612781128917719">"Sending SMS messages"</string>
@@ -974,8 +963,7 @@
<string name="usb_mtp_notification_title" msgid="3699913097391550394">"Connected as a media device"</string>
<string name="usb_ptp_notification_title" msgid="1960817192216064833">"Connected as a camera"</string>
<string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"Connected as an installer"</string>
- <!-- no translation found for usb_accessory_notification_title (7848236974087653666) -->
- <skip />
+ <string name="usb_accessory_notification_title" msgid="7848236974087653666">"Connected to a USB accessory"</string>
<string name="usb_notification_message" msgid="4447869605109736382">"Touch for other USB options"</string>
<string name="extmedia_format_title" product="nosdcard" msgid="7980995592595097841">"Format USB storage"</string>
<string name="extmedia_format_title" product="default" msgid="8663247929551095854">"Format SD card"</string>
@@ -1095,6 +1083,22 @@
<string name="choose_account_label" msgid="4191313562041125787">"Select an account"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Increment"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Decrement"</string>
+ <!-- no translation found for checkbox_checked (7222044992652711167) -->
+ <skip />
+ <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
+ <skip />
+ <!-- no translation found for radiobutton_selected (8603599808486581511) -->
+ <skip />
+ <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
+ <skip />
+ <!-- no translation found for switch_on (551417728476977311) -->
+ <skip />
+ <!-- no translation found for switch_off (7249798614327155088) -->
+ <skip />
+ <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
+ <skip />
+ <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"Navigate home"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Navigate up"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"More options"</string>
@@ -1108,6 +1112,14 @@
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"4G data disabled"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Mobile data disabled"</string>
<string name="data_usage_limit_body" msgid="2182247539226163759">"Tap to enable"</string>
+ <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
+ <skip />
+ <!-- no translation found for data_usage_4g_limit_snoozed_title (1106562779311209039) -->
+ <skip />
+ <!-- no translation found for data_usage_mobile_limit_snoozed_title (279240572165412168) -->
+ <skip />
+ <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <skip />
<string name="ssl_certificate" msgid="6510040486049237639">"Security certificate"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"This certificate is valid."</string>
<string name="issued_to" msgid="454239480274921032">"Issued to:"</string>
@@ -1125,6 +1137,5 @@
<string name="activity_chooser_view_see_all" msgid="180268188117163072">"See all..."</string>
<string name="activity_chooser_view_dialog_title_default" msgid="3325054276356556835">"Select activity"</string>
<string name="share_action_provider_share_with" msgid="1791316789651185229">"Share with..."</string>
- <!-- no translation found for status_bar_device_locked (3092703448690669768) -->
- <skip />
+ <string name="status_bar_device_locked" msgid="3092703448690669768">"Device locked."</string>
</resources>
diff --git a/core/res/res/values-es-rUS/strings.xml b/core/res/res/values-es-rUS/strings.xml
index 7c61d39..c07551e 100644
--- a/core/res/res/values-es-rUS/strings.xml
+++ b/core/res/res/values-es-rUS/strings.xml
@@ -262,10 +262,8 @@
<string name="permdesc_readInputState" msgid="5132879321450325445">"Admite que las aplicaciones observen las teclas que presionas, incluso al interactuar con otra aplicación (como el ingreso de una contraseña). Se debe evitar utilizarlo en aplicaciones normales."</string>
<string name="permlab_bindInputMethod" msgid="3360064620230515776">"vincular a un método de entrada"</string>
<string name="permdesc_bindInputMethod" msgid="3734838321027317228">"Permite al propietario vincularse a la interfaz de nivel superior de un método de entrada. Se debe evitar utilizarlo en aplicaciones normales."</string>
- <!-- no translation found for permlab_bindTextService (7358378401915287938) -->
- <skip />
- <!-- no translation found for permdesc_bindTextService (172508880651909350) -->
- <skip />
+ <string name="permlab_bindTextService" msgid="7358378401915287938">"vincular a un servicio de texto"</string>
+ <string name="permdesc_bindTextService" msgid="172508880651909350">"Permite al titular vincularse a la interfaz de nivel superior de un servicio de texto (por ejemplo, SpellCheckerService). Nunca debe ser necesario para las aplicaciones normales."</string>
<string name="permlab_bindWallpaper" msgid="8716400279937856462">"vincular a un fondo de pantalla"</string>
<string name="permdesc_bindWallpaper" msgid="5287754520361915347">"Permite al propietario vincularse a la interfaz de nivel superior de un fondo de pantalla. Se debe evitar utilizarlo en aplicaciones normales."</string>
<string name="permlab_bindRemoteViews" msgid="5697987759897367099">"vincular a un servicio de widget"</string>
@@ -724,10 +722,8 @@
<string name="permdesc_writeHistoryBookmarks" product="default" msgid="945571990357114950">"Permite a una aplicación modificar el historial y los marcadores del navegador almacenados en tu teléfono. Las aplicaciones maliciosas pueden utilizarlo para borrar o modificar tus datos."</string>
<string name="permlab_setAlarm" msgid="5924401328803615165">"configurar alarma en reloj alarma"</string>
<string name="permdesc_setAlarm" msgid="5966966598149875082">"Permite que la aplicación configure una alarma en una aplicación instalada de reloj alarma. Es posible que algunas aplicaciones de reloj alarma no implementen esta función."</string>
- <!-- no translation found for permlab_readWriteOwnVoicemail (8861946090046059697) -->
- <skip />
- <!-- no translation found for permdesc_readWriteOwnVoicemail (7343490168272921274) -->
- <skip />
+ <string name="permlab_readWriteOwnVoicemail" msgid="8861946090046059697">"Buzones de voz de acceso administrados por esta aplicación."</string>
+ <string name="permdesc_readWriteOwnVoicemail" msgid="7343490168272921274">"Permite que la aplicación almacene y recupere solo buzones de voz a los que sus servicios asociados pueden acceder."</string>
<string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"Modificar los permisos de ubicación geográfica del navegador"</string>
<string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"Permite que una aplicación modifique los permisos de ubicación geográfica del navegador. Las aplicaciones maliciosas pueden utilizarlos para permitir el envío de información sobre la ubicación a sitos web de forma arbitraria."</string>
<string name="save_password_message" msgid="767344687139195790">"¿Quieres recordar esta contraseña en el navegador?"</string>
@@ -843,7 +839,8 @@
<string name="cut" msgid="3092569408438626261">"Cortar"</string>
<string name="copy" msgid="2681946229533511987">"Copiar"</string>
<string name="paste" msgid="5629880836805036433">"Pegar"</string>
- <string name="pasteDisabled" msgid="7259254654641456570">"Nada que pegar"</string>
+ <!-- no translation found for replace (8333608224471746584) -->
+ <skip />
<string name="copyUrl" msgid="2538211579596067402">"Copiar URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Seleccionar texto..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Selección de texto"</string>
@@ -880,12 +877,9 @@
<string name="launch_warning_title" msgid="8323761616052121936">"Se redirigió la aplicación"</string>
<string name="launch_warning_replace" msgid="6202498949970281412">"<xliff:g id="APP_NAME">%1$s</xliff:g> se está ejecutando ahora."</string>
<string name="launch_warning_original" msgid="188102023021668683">"<xliff:g id="APP_NAME">%1$s</xliff:g> se inició originalmente."</string>
- <!-- no translation found for screen_compat_mode_scale (3202955667675944499) -->
- <skip />
- <!-- no translation found for screen_compat_mode_show (4013878876486655892) -->
- <skip />
- <!-- no translation found for screen_compat_mode_hint (2953716574198046484) -->
- <skip />
+ <string name="screen_compat_mode_scale" msgid="3202955667675944499">"Escala"</string>
+ <string name="screen_compat_mode_show" msgid="4013878876486655892">"Mostrar siempre"</string>
+ <string name="screen_compat_mode_hint" msgid="2953716574198046484">"Volver a habilitar esto con Configuración > Aplicaciones > Administrar aplicaciones."</string>
<string name="smv_application" msgid="295583804361236288">"La aplicación <xliff:g id="APPLICATION">%1$s</xliff:g> (proceso <xliff:g id="PROCESS">%2$s</xliff:g>) ha violado su política StrictMode autoimpuesta."</string>
<string name="smv_process" msgid="5120397012047462446">"El proceso <xliff:g id="PROCESS">%1$s</xliff:g> ha violado su política StrictMode autoimpuesta."</string>
<string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> en ejecución"</string>
@@ -919,40 +913,26 @@
<item quantity="one" msgid="1634101450343277345">"Abrir red disponible de Wi-Fi"</item>
<item quantity="other" msgid="7915895323644292768">"Abrir redes disponibles de Wi-Fi"</item>
</plurals>
- <!-- no translation found for wifi_watchdog_network_disabled (6398650124751302012) -->
- <skip />
- <!-- no translation found for wifi_watchdog_network_disabled_detailed (4659127251774069612) -->
- <skip />
- <!-- no translation found for wifi_p2p_dialog_title (97611782659324517) -->
- <skip />
- <!-- no translation found for wifi_p2p_turnon_message (2804722042556269129) -->
- <skip />
- <!-- no translation found for wifi_p2p_failed_message (6467545523417622335) -->
- <skip />
- <!-- no translation found for wifi_p2p_pbc_go_negotiation_request_message (3170321684621420428) -->
- <skip />
- <!-- no translation found for wifi_p2p_pin_go_negotiation_request_message (5177412094633377308) -->
- <skip />
- <!-- no translation found for wifi_p2p_pin_display_message (2834049169114922902) -->
- <skip />
+ <string name="wifi_watchdog_network_disabled" msgid="6398650124751302012">"Una red Wi-Fi se ha inhabilitado."</string>
+ <string name="wifi_watchdog_network_disabled_detailed" msgid="4659127251774069612">"Una red Wi-Fi ha sido temporalmente inhabilitada debido a mala conectividad."</string>
+ <string name="wifi_p2p_dialog_title" msgid="97611782659324517">"Wi-Fi Direct"</string>
+ <string name="wifi_p2p_turnon_message" msgid="2804722042556269129">"Iniciar operación de Wi-Fi Direct. Esto desactivará la operación de cliente/zona Wi-Fi."</string>
+ <string name="wifi_p2p_failed_message" msgid="6467545523417622335">"Error al iniciar el Wi-Fi Direct"</string>
+ <string name="wifi_p2p_pbc_go_negotiation_request_message" msgid="3170321684621420428">"Solicitud de configuración de conexión de Wi-Fi Direct desde <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Haz clic en Aceptar."</string>
+ <string name="wifi_p2p_pin_go_negotiation_request_message" msgid="5177412094633377308">"Solicitud de configuración de conexión de Wi-Fi Direct desde <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Ingresa el llamado para continuar."</string>
+ <string name="wifi_p2p_pin_display_message" msgid="2834049169114922902">"El llamado a WPS <xliff:g id="P2P_WPS_PIN">%1$s</xliff:g> necesita ser ingresado en el dispositivo de pares <xliff:g id="P2P_CLIENT_ADDRESS">%2$s</xliff:g> para que la configuración de la conexión continúe."</string>
<string name="select_character" msgid="3365550120617701745">"Insertar caracteres"</string>
<string name="sms_control_default_app_name" msgid="7630529934366549163">"Aplicación desconocida"</string>
<string name="sms_control_title" msgid="7296612781128917719">"Enviando mensajes SMS"</string>
<string name="sms_control_message" msgid="1289331457999236205">"Se envía una gran cantidad de mensajes SMS. Selecciona \"Aceptar\" para continuar o \"Cancelar\" para detener el envío."</string>
<string name="sms_control_yes" msgid="2532062172402615953">"Aceptar"</string>
<string name="sms_control_no" msgid="1715320703137199869">"Cancelar"</string>
- <!-- no translation found for sim_removed_title (6227712319223226185) -->
- <skip />
- <!-- no translation found for sim_removed_message (2064255102770489459) -->
- <skip />
- <!-- no translation found for sim_done_button (827949989369963775) -->
- <skip />
- <!-- no translation found for sim_added_title (3719670512889674693) -->
- <skip />
- <!-- no translation found for sim_added_message (1209265974048554242) -->
- <skip />
- <!-- no translation found for sim_restart_button (4722407842815232347) -->
- <skip />
+ <string name="sim_removed_title" msgid="6227712319223226185">"Tarjeta SIM eliminada"</string>
+ <string name="sim_removed_message" msgid="2064255102770489459">"La red para celulares no estará disponible hasta que cambies la tarjeta SIM."</string>
+ <string name="sim_done_button" msgid="827949989369963775">"Finalizado"</string>
+ <string name="sim_added_title" msgid="3719670512889674693">"Tarjeta SIM agregada"</string>
+ <string name="sim_added_message" msgid="1209265974048554242">"Debes reiniciar tu dispositivo para acceder a la red para celulares."</string>
+ <string name="sim_restart_button" msgid="4722407842815232347">"Reiniciar"</string>
<string name="time_picker_dialog_title" msgid="8349362623068819295">"Configurar hora"</string>
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Configurar fecha"</string>
<string name="date_time_set" msgid="5777075614321087758">"Establecer"</string>
@@ -983,8 +963,7 @@
<string name="usb_mtp_notification_title" msgid="3699913097391550394">"Conectado como un dispositivo de medios"</string>
<string name="usb_ptp_notification_title" msgid="1960817192216064833">"Conectado como una cámara"</string>
<string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"Conectado como un instalador"</string>
- <!-- no translation found for usb_accessory_notification_title (7848236974087653666) -->
- <skip />
+ <string name="usb_accessory_notification_title" msgid="7848236974087653666">"Conectado a un accesorio USB"</string>
<string name="usb_notification_message" msgid="4447869605109736382">"Toca para otras opciones de USB"</string>
<string name="extmedia_format_title" product="nosdcard" msgid="7980995592595097841">"Formatear almacenamiento USB"</string>
<string name="extmedia_format_title" product="default" msgid="8663247929551095854">"Formatear tarjeta SD"</string>
@@ -1104,6 +1083,22 @@
<string name="choose_account_label" msgid="4191313562041125787">"Seleccionar una cuenta"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Incremento"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Decremento"</string>
+ <!-- no translation found for checkbox_checked (7222044992652711167) -->
+ <skip />
+ <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
+ <skip />
+ <!-- no translation found for radiobutton_selected (8603599808486581511) -->
+ <skip />
+ <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
+ <skip />
+ <!-- no translation found for switch_on (551417728476977311) -->
+ <skip />
+ <!-- no translation found for switch_off (7249798614327155088) -->
+ <skip />
+ <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
+ <skip />
+ <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"Desplazarse hasta la página principal"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Desplazarse hacia arriba"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Más opciones"</string>
@@ -1117,6 +1112,14 @@
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"Datos de 4 GB desactivados"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Datos móviles desactivados"</string>
<string name="data_usage_limit_body" msgid="2182247539226163759">"pulsa para habilitarla"</string>
+ <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
+ <skip />
+ <!-- no translation found for data_usage_4g_limit_snoozed_title (1106562779311209039) -->
+ <skip />
+ <!-- no translation found for data_usage_mobile_limit_snoozed_title (279240572165412168) -->
+ <skip />
+ <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <skip />
<string name="ssl_certificate" msgid="6510040486049237639">"Certificado de seguridad"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Este certificado es válido."</string>
<string name="issued_to" msgid="454239480274921032">"Emitido a:"</string>
@@ -1134,6 +1137,5 @@
<string name="activity_chooser_view_see_all" msgid="180268188117163072">"Ver todas..."</string>
<string name="activity_chooser_view_dialog_title_default" msgid="3325054276356556835">"Seleccionar actividad"</string>
<string name="share_action_provider_share_with" msgid="1791316789651185229">"Compartir con..."</string>
- <!-- no translation found for status_bar_device_locked (3092703448690669768) -->
- <skip />
+ <string name="status_bar_device_locked" msgid="3092703448690669768">"Dispositivo bloqueado"</string>
</resources>
diff --git a/core/res/res/values-es/strings.xml b/core/res/res/values-es/strings.xml
index 1179764..c858179 100644
--- a/core/res/res/values-es/strings.xml
+++ b/core/res/res/values-es/strings.xml
@@ -843,7 +843,8 @@
<string name="cut" msgid="3092569408438626261">"Cortar"</string>
<string name="copy" msgid="2681946229533511987">"Copiar"</string>
<string name="paste" msgid="5629880836805036433">"Pegar"</string>
- <string name="pasteDisabled" msgid="7259254654641456570">"Portapapeles vacío"</string>
+ <!-- no translation found for replace (8333608224471746584) -->
+ <skip />
<string name="copyUrl" msgid="2538211579596067402">"Copiar URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Seleccionar texto..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Selección de texto"</string>
@@ -880,12 +881,9 @@
<string name="launch_warning_title" msgid="8323761616052121936">"Aplicación redireccionada"</string>
<string name="launch_warning_replace" msgid="6202498949970281412">"<xliff:g id="APP_NAME">%1$s</xliff:g> se está ejecutando."</string>
<string name="launch_warning_original" msgid="188102023021668683">"Inicialmente, se inició la aplicación <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
- <!-- no translation found for screen_compat_mode_scale (3202955667675944499) -->
- <skip />
- <!-- no translation found for screen_compat_mode_show (4013878876486655892) -->
- <skip />
- <!-- no translation found for screen_compat_mode_hint (2953716574198046484) -->
- <skip />
+ <string name="screen_compat_mode_scale" msgid="3202955667675944499">"Escala"</string>
+ <string name="screen_compat_mode_show" msgid="4013878876486655892">"Mostrar siempre"</string>
+ <string name="screen_compat_mode_hint" msgid="2953716574198046484">"Vuelve a habilitar esta opción en Ajustes > Aplicaciones > Administrar aplicaciones."</string>
<string name="smv_application" msgid="295583804361236288">"La aplicación <xliff:g id="APPLICATION">%1$s</xliff:g> (proceso <xliff:g id="PROCESS">%2$s</xliff:g>) ha infringido su política StrictMode autoaplicable."</string>
<string name="smv_process" msgid="5120397012047462446">"El proceso <xliff:g id="PROCESS">%1$s</xliff:g> ha infringido su política StrictMode autoaplicable."</string>
<string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> en ejecución"</string>
@@ -941,18 +939,12 @@
<string name="sms_control_message" msgid="1289331457999236205">"Se ha enviado un número elevado de mensajes SMS. Selecciona \"Aceptar\" para continuar o \"Cancelar\" para interrumpir el envío."</string>
<string name="sms_control_yes" msgid="2532062172402615953">"Aceptar"</string>
<string name="sms_control_no" msgid="1715320703137199869">"Cancelar"</string>
- <!-- no translation found for sim_removed_title (6227712319223226185) -->
- <skip />
- <!-- no translation found for sim_removed_message (2064255102770489459) -->
- <skip />
- <!-- no translation found for sim_done_button (827949989369963775) -->
- <skip />
- <!-- no translation found for sim_added_title (3719670512889674693) -->
- <skip />
- <!-- no translation found for sim_added_message (1209265974048554242) -->
- <skip />
- <!-- no translation found for sim_restart_button (4722407842815232347) -->
- <skip />
+ <string name="sim_removed_title" msgid="6227712319223226185">"Tarjeta SIM eliminada"</string>
+ <string name="sim_removed_message" msgid="2064255102770489459">"La red móvil volverá a estar disponible cuando sustituyas la tarjeta SIM."</string>
+ <string name="sim_done_button" msgid="827949989369963775">"Listo"</string>
+ <string name="sim_added_title" msgid="3719670512889674693">"Tarjeta SIM añadida"</string>
+ <string name="sim_added_message" msgid="1209265974048554242">"Para acceder a la red móvil, debes reiniciar el dispositivo."</string>
+ <string name="sim_restart_button" msgid="4722407842815232347">"Reiniciar"</string>
<string name="time_picker_dialog_title" msgid="8349362623068819295">"Establecer hora"</string>
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Establecer fecha"</string>
<string name="date_time_set" msgid="5777075614321087758">"Establecer"</string>
@@ -1104,6 +1096,22 @@
<string name="choose_account_label" msgid="4191313562041125787">"Seleccionar una cuenta"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Aumentar"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Disminuir"</string>
+ <!-- no translation found for checkbox_checked (7222044992652711167) -->
+ <skip />
+ <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
+ <skip />
+ <!-- no translation found for radiobutton_selected (8603599808486581511) -->
+ <skip />
+ <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
+ <skip />
+ <!-- no translation found for switch_on (551417728476977311) -->
+ <skip />
+ <!-- no translation found for switch_off (7249798614327155088) -->
+ <skip />
+ <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
+ <skip />
+ <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"Ir al escritorio"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Desplazarse hacia arriba"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Más opciones"</string>
@@ -1117,6 +1125,14 @@
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"Datos 4G inhabilitados"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Datos móviles inhabilitados"</string>
<string name="data_usage_limit_body" msgid="2182247539226163759">"tocar para habilitar"</string>
+ <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
+ <skip />
+ <!-- no translation found for data_usage_4g_limit_snoozed_title (1106562779311209039) -->
+ <skip />
+ <!-- no translation found for data_usage_mobile_limit_snoozed_title (279240572165412168) -->
+ <skip />
+ <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <skip />
<string name="ssl_certificate" msgid="6510040486049237639">"Certificado de seguridad"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Este certificado es válido."</string>
<string name="issued_to" msgid="454239480274921032">"Emitido para:"</string>
diff --git a/core/res/res/values-fa/strings.xml b/core/res/res/values-fa/strings.xml
index 35fc0b9..0a32aa4 100644
--- a/core/res/res/values-fa/strings.xml
+++ b/core/res/res/values-fa/strings.xml
@@ -843,7 +843,8 @@
<string name="cut" msgid="3092569408438626261">"برش"</string>
<string name="copy" msgid="2681946229533511987">"کپی"</string>
<string name="paste" msgid="5629880836805036433">"جای گذاری"</string>
- <string name="pasteDisabled" msgid="7259254654641456570">"چیزی برای جای گذاری نیست"</string>
+ <!-- no translation found for replace (8333608224471746584) -->
+ <skip />
<string name="copyUrl" msgid="2538211579596067402">"کپی URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"انتخاب متن..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"انتخاب متن"</string>
@@ -1104,6 +1105,22 @@
<string name="choose_account_label" msgid="4191313562041125787">"انتخاب یک حساب"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"افزایش"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"کاهش"</string>
+ <!-- no translation found for checkbox_checked (7222044992652711167) -->
+ <skip />
+ <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
+ <skip />
+ <!-- no translation found for radiobutton_selected (8603599808486581511) -->
+ <skip />
+ <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
+ <skip />
+ <!-- no translation found for switch_on (551417728476977311) -->
+ <skip />
+ <!-- no translation found for switch_off (7249798614327155088) -->
+ <skip />
+ <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
+ <skip />
+ <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"رفتن به صفحه اصلی"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"حرکت به بالا"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"سایر گزینه ها"</string>
@@ -1117,6 +1134,14 @@
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"داده 4G غیر فعال شده است"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"داده های تلفن همراه غیرفعال شد"</string>
<string name="data_usage_limit_body" msgid="2182247539226163759">"برای فعال کردن ضربه بزنید"</string>
+ <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
+ <skip />
+ <!-- no translation found for data_usage_4g_limit_snoozed_title (1106562779311209039) -->
+ <skip />
+ <!-- no translation found for data_usage_mobile_limit_snoozed_title (279240572165412168) -->
+ <skip />
+ <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <skip />
<string name="ssl_certificate" msgid="6510040486049237639">"گواهی امنیتی"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"این گواهی معتبر است."</string>
<string name="issued_to" msgid="454239480274921032">"صادر شده برای:"</string>
diff --git a/core/res/res/values-fi/strings.xml b/core/res/res/values-fi/strings.xml
index 2e3f921..c8d29eb 100644
--- a/core/res/res/values-fi/strings.xml
+++ b/core/res/res/values-fi/strings.xml
@@ -262,10 +262,8 @@
<string name="permdesc_readInputState" msgid="5132879321450325445">"Antaa sovelluksien tarkkailla painamiasi näppäimiä jopa toisten sovellusten käytön yhteydessä (kuten salasanoja syötettäessä). Ei tavallisten sovelluksien käyttöön."</string>
<string name="permlab_bindInputMethod" msgid="3360064620230515776">"sitoudu syöttötapaan"</string>
<string name="permdesc_bindInputMethod" msgid="3734838321027317228">"Antaa sovelluksen sitoutua syöttötavan ylemmän tason käyttöliittymään. Ei tavallisten sovelluksien käyttöön."</string>
- <!-- no translation found for permlab_bindTextService (7358378401915287938) -->
- <skip />
- <!-- no translation found for permdesc_bindTextService (172508880651909350) -->
- <skip />
+ <string name="permlab_bindTextService" msgid="7358378401915287938">"sitoudu tekstipalveluun"</string>
+ <string name="permdesc_bindTextService" msgid="172508880651909350">"Sovellus voi sitoutua tekstipalvelun (esim. SpellCheckerService) korkeimman tason käyttöliittymään. Ei pitäisi tarvita tavallisissa sovelluksissa."</string>
<string name="permlab_bindWallpaper" msgid="8716400279937856462">"sido taustakuvaan"</string>
<string name="permdesc_bindWallpaper" msgid="5287754520361915347">"Antaa sovelluksen sitoutua taustakuvan ylemmän tason käyttöliittymään. Ei tavallisten sovelluksien käyttöön."</string>
<string name="permlab_bindRemoteViews" msgid="5697987759897367099">"sitoudu widget-palveluun"</string>
@@ -724,10 +722,8 @@
<string name="permdesc_writeHistoryBookmarks" product="default" msgid="945571990357114950">"Antaa sovelluksen muokata puhelimeen tallennettuja selaimen historia- ja kirjanmerkkitietoja. Haitalliset sovellukset voivat käyttää tätä pyyhkiäkseen tai muokatakseen selaimen tietoja."</string>
<string name="permlab_setAlarm" msgid="5924401328803615165">"aseta herätys herätyskelloon"</string>
<string name="permdesc_setAlarm" msgid="5966966598149875082">"Antaa sovelluksen asettaa herätyksen asennettuun herätyskellosovellukseen. Kaikki herätyskellosovellukset eivät välttämättä käytä tätä ominaisuutta."</string>
- <!-- no translation found for permlab_readWriteOwnVoicemail (8861946090046059697) -->
- <skip />
- <!-- no translation found for permdesc_readWriteOwnVoicemail (7343490168272921274) -->
- <skip />
+ <string name="permlab_readWriteOwnVoicemail" msgid="8861946090046059697">"Käytä tämän sovelluksen hallinnoimia vastaajaviestejä"</string>
+ <string name="permdesc_readWriteOwnVoicemail" msgid="7343490168272921274">"Antaa sovelluksen tallentaa ja noutaa vain siihen liitetyn palvelun käyttämiä vastaajaviestejä."</string>
<string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"muokkaa selaimen maantieteellisen sijainnin lupia"</string>
<string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"Antaa sovelluksen muokata selaimen maantieteellisen sijainnin lupia. Haitalliset sovellukset saattavat käyttää tätä sijaintitietojen lähettämiseen satunnaisiin verkkosivustoihin."</string>
<string name="save_password_message" msgid="767344687139195790">"Haluatko selaimen muistavan tämän salasanan?"</string>
@@ -843,7 +839,8 @@
<string name="cut" msgid="3092569408438626261">"Leikkaa"</string>
<string name="copy" msgid="2681946229533511987">"Kopioi"</string>
<string name="paste" msgid="5629880836805036433">"Liitä"</string>
- <string name="pasteDisabled" msgid="7259254654641456570">"Ei mitään liitettävää"</string>
+ <!-- no translation found for replace (8333608224471746584) -->
+ <skip />
<string name="copyUrl" msgid="2538211579596067402">"Kopioi URL-osoite"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Tekstin valinta..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Tekstin valinta"</string>
@@ -919,22 +916,14 @@
<item quantity="one" msgid="1634101450343277345">"Avoin wifi-verkko käytettävissä"</item>
<item quantity="other" msgid="7915895323644292768">"Avoimia wifi-verkkoja käytettävissä"</item>
</plurals>
- <!-- no translation found for wifi_watchdog_network_disabled (6398650124751302012) -->
- <skip />
- <!-- no translation found for wifi_watchdog_network_disabled_detailed (4659127251774069612) -->
- <skip />
- <!-- no translation found for wifi_p2p_dialog_title (97611782659324517) -->
- <skip />
- <!-- no translation found for wifi_p2p_turnon_message (2804722042556269129) -->
- <skip />
- <!-- no translation found for wifi_p2p_failed_message (6467545523417622335) -->
- <skip />
- <!-- no translation found for wifi_p2p_pbc_go_negotiation_request_message (3170321684621420428) -->
- <skip />
- <!-- no translation found for wifi_p2p_pin_go_negotiation_request_message (5177412094633377308) -->
- <skip />
- <!-- no translation found for wifi_p2p_pin_display_message (2834049169114922902) -->
- <skip />
+ <string name="wifi_watchdog_network_disabled" msgid="6398650124751302012">"Wifi-verkko poistettu käytöstä"</string>
+ <string name="wifi_watchdog_network_disabled_detailed" msgid="4659127251774069612">"Wifi-verkko oli tilapäisesti pois käytöstä huonon yhteyden vuoksi."</string>
+ <string name="wifi_p2p_dialog_title" msgid="97611782659324517">"Suora wifi-yhteys"</string>
+ <string name="wifi_p2p_turnon_message" msgid="2804722042556269129">"Käynnistä suora wifi-toiminto. Wifi-yhteyspistetoiminto poistetaan käytöstä."</string>
+ <string name="wifi_p2p_failed_message" msgid="6467545523417622335">"Suoran wifi-yhteyden käynnistäminen epäonnistui"</string>
+ <string name="wifi_p2p_pbc_go_negotiation_request_message" msgid="3170321684621420428">"Suoran wifi-yhteyden muodostuspyyntö osoitteesta <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Hyväksy valitsemalla OK."</string>
+ <string name="wifi_p2p_pin_go_negotiation_request_message" msgid="5177412094633377308">"Suoran wifi-yhteyden muodostuspyyntö osoitteesta <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Jatka antamalla PIN-koodi."</string>
+ <string name="wifi_p2p_pin_display_message" msgid="2834049169114922902">"WPS-PIN <xliff:g id="P2P_WPS_PIN">%1$s</xliff:g> tulee merkitä vertaislaitteeseen <xliff:g id="P2P_CLIENT_ADDRESS">%2$s</xliff:g>, jotta yhteyden muodostamista voidaan jatkaa"</string>
<string name="select_character" msgid="3365550120617701745">"Lisää merkki"</string>
<string name="sms_control_default_app_name" msgid="7630529934366549163">"Tuntematon sovellus"</string>
<string name="sms_control_title" msgid="7296612781128917719">"Tekstiviestien lähettäminen"</string>
@@ -983,8 +972,7 @@
<string name="usb_mtp_notification_title" msgid="3699913097391550394">"Kytketty medialaitteena"</string>
<string name="usb_ptp_notification_title" msgid="1960817192216064833">"Kytketty kamerana"</string>
<string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"Kytketty asennusohjelmana"</string>
- <!-- no translation found for usb_accessory_notification_title (7848236974087653666) -->
- <skip />
+ <string name="usb_accessory_notification_title" msgid="7848236974087653666">"Liitetty USB-laitteeseen"</string>
<string name="usb_notification_message" msgid="4447869605109736382">"Käytä muita USB-vaihtoehtoja koskettamalla"</string>
<string name="extmedia_format_title" product="nosdcard" msgid="7980995592595097841">"Alusta USB-tila"</string>
<string name="extmedia_format_title" product="default" msgid="8663247929551095854">"Alusta SD-kortti"</string>
@@ -1104,6 +1092,22 @@
<string name="choose_account_label" msgid="4191313562041125787">"Valitse tili"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Lisää"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Vähennä"</string>
+ <!-- no translation found for checkbox_checked (7222044992652711167) -->
+ <skip />
+ <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
+ <skip />
+ <!-- no translation found for radiobutton_selected (8603599808486581511) -->
+ <skip />
+ <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
+ <skip />
+ <!-- no translation found for switch_on (551417728476977311) -->
+ <skip />
+ <!-- no translation found for switch_off (7249798614327155088) -->
+ <skip />
+ <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
+ <skip />
+ <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"Siirry etusivulle"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Siirry ylös"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Lisää asetuksia"</string>
@@ -1117,6 +1121,14 @@
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"4G-tiedonsiirto pois käytöstä"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Mobiilitiedonsiirto pois käytöstä"</string>
<string name="data_usage_limit_body" msgid="2182247539226163759">"ota käyttöön napauttamalla"</string>
+ <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
+ <skip />
+ <!-- no translation found for data_usage_4g_limit_snoozed_title (1106562779311209039) -->
+ <skip />
+ <!-- no translation found for data_usage_mobile_limit_snoozed_title (279240572165412168) -->
+ <skip />
+ <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <skip />
<string name="ssl_certificate" msgid="6510040486049237639">"Suojausvarmenne"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Varmenne on voimassa."</string>
<string name="issued_to" msgid="454239480274921032">"Varmenteen saaja:"</string>
@@ -1132,10 +1144,7 @@
<string name="sha256_fingerprint" msgid="4391271286477279263">"SHA-256-tunnistetiedosto"</string>
<string name="sha1_fingerprint" msgid="7930330235269404581">"SHA-1-tunnistetiedosto"</string>
<string name="activity_chooser_view_see_all" msgid="180268188117163072">"Näytä kaikki..."</string>
- <!-- no translation found for activity_chooser_view_dialog_title_default (3325054276356556835) -->
- <skip />
- <!-- no translation found for share_action_provider_share_with (1791316789651185229) -->
- <skip />
- <!-- no translation found for status_bar_device_locked (3092703448690669768) -->
- <skip />
+ <string name="activity_chooser_view_dialog_title_default" msgid="3325054276356556835">"Valitse toiminto"</string>
+ <string name="share_action_provider_share_with" msgid="1791316789651185229">"Jaa seuraavien kautta:"</string>
+ <string name="status_bar_device_locked" msgid="3092703448690669768">"Laite lukittu."</string>
</resources>
diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml
index a10b203..2821a9b 100644
--- a/core/res/res/values-fr/strings.xml
+++ b/core/res/res/values-fr/strings.xml
@@ -843,7 +843,8 @@
<string name="cut" msgid="3092569408438626261">"Couper"</string>
<string name="copy" msgid="2681946229533511987">"Copier"</string>
<string name="paste" msgid="5629880836805036433">"Coller"</string>
- <string name="pasteDisabled" msgid="7259254654641456570">"Presse-papiers vide"</string>
+ <!-- no translation found for replace (8333608224471746584) -->
+ <skip />
<string name="copyUrl" msgid="2538211579596067402">"Copier l\'URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Sélect. le texte..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Sélection de texte"</string>
@@ -1104,6 +1105,22 @@
<string name="choose_account_label" msgid="4191313562041125787">"Sélectionner un compte"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Augmenter"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Diminuer"</string>
+ <!-- no translation found for checkbox_checked (7222044992652711167) -->
+ <skip />
+ <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
+ <skip />
+ <!-- no translation found for radiobutton_selected (8603599808486581511) -->
+ <skip />
+ <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
+ <skip />
+ <!-- no translation found for switch_on (551417728476977311) -->
+ <skip />
+ <!-- no translation found for switch_off (7249798614327155088) -->
+ <skip />
+ <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
+ <skip />
+ <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"Retour à l\'accueil"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Parcourir vers le haut"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Plus d\'options"</string>
@@ -1117,6 +1134,14 @@
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"Données 4G désactivées"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Données mobiles désactivées"</string>
<string name="data_usage_limit_body" msgid="2182247539226163759">"appuyer pour activer"</string>
+ <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
+ <skip />
+ <!-- no translation found for data_usage_4g_limit_snoozed_title (1106562779311209039) -->
+ <skip />
+ <!-- no translation found for data_usage_mobile_limit_snoozed_title (279240572165412168) -->
+ <skip />
+ <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <skip />
<string name="ssl_certificate" msgid="6510040486049237639">"Certificat de sécurité"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Ce certificat est valide."</string>
<string name="issued_to" msgid="454239480274921032">"Délivré à :"</string>
@@ -1132,10 +1157,8 @@
<string name="sha256_fingerprint" msgid="4391271286477279263">"Empreinte SHA-256 :"</string>
<string name="sha1_fingerprint" msgid="7930330235269404581">"Empreinte SHA-1 :"</string>
<string name="activity_chooser_view_see_all" msgid="180268188117163072">"Tout afficher..."</string>
- <!-- no translation found for activity_chooser_view_dialog_title_default (3325054276356556835) -->
- <skip />
- <!-- no translation found for share_action_provider_share_with (1791316789651185229) -->
- <skip />
+ <string name="activity_chooser_view_dialog_title_default" msgid="3325054276356556835">"Sélectionner une activité"</string>
+ <string name="share_action_provider_share_with" msgid="1791316789651185229">"Partager avec..."</string>
<!-- no translation found for status_bar_device_locked (3092703448690669768) -->
<skip />
</resources>
diff --git a/core/res/res/values-hr/strings.xml b/core/res/res/values-hr/strings.xml
index 72ea506..e36e51a 100644
--- a/core/res/res/values-hr/strings.xml
+++ b/core/res/res/values-hr/strings.xml
@@ -843,7 +843,8 @@
<string name="cut" msgid="3092569408438626261">"Izreži"</string>
<string name="copy" msgid="2681946229533511987">"Kopiraj"</string>
<string name="paste" msgid="5629880836805036433">"Zalijepi"</string>
- <string name="pasteDisabled" msgid="7259254654641456570">"Ništa za lijepljenje"</string>
+ <!-- no translation found for replace (8333608224471746584) -->
+ <skip />
<string name="copyUrl" msgid="2538211579596067402">"Kopiraj URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Odabir teksta..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Odabir teksta"</string>
@@ -880,12 +881,9 @@
<string name="launch_warning_title" msgid="8323761616052121936">"Aplikacija preusmjerena"</string>
<string name="launch_warning_replace" msgid="6202498949970281412">"<xliff:g id="APP_NAME">%1$s</xliff:g> se izvodi sada."</string>
<string name="launch_warning_original" msgid="188102023021668683">"Aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> pokrenuta je prva."</string>
- <!-- no translation found for screen_compat_mode_scale (3202955667675944499) -->
- <skip />
- <!-- no translation found for screen_compat_mode_show (4013878876486655892) -->
- <skip />
- <!-- no translation found for screen_compat_mode_hint (2953716574198046484) -->
- <skip />
+ <string name="screen_compat_mode_scale" msgid="3202955667675944499">"Mjerilo"</string>
+ <string name="screen_compat_mode_show" msgid="4013878876486655892">"Uvijek prikaži"</string>
+ <string name="screen_compat_mode_hint" msgid="2953716574198046484">"Ponovno omogući ovo uz Postavke > Aplikacije > Upravljanje aplikacijama."</string>
<string name="smv_application" msgid="295583804361236288">"Aplikacija <xliff:g id="APPLICATION">%1$s</xliff:g> (proces <xliff:g id="PROCESS">%2$s</xliff:g>) prekršila je svoje vlastito pravilo StrictMode."</string>
<string name="smv_process" msgid="5120397012047462446">"Proces <xliff:g id="PROCESS">%1$s</xliff:g> prekršio je svoje vlastito pravilo StrictMode."</string>
<string name="heavy_weight_notification" msgid="9087063985776626166">"Izvodi se <xliff:g id="APP">%1$s</xliff:g>"</string>
@@ -941,18 +939,12 @@
<string name="sms_control_message" msgid="1289331457999236205">"Šalje se velika količina SMS poruka. Odaberite \"U redu\" za nastavak, ili za prekid slanja odaberite \"Odustani\"."</string>
<string name="sms_control_yes" msgid="2532062172402615953">"U redu"</string>
<string name="sms_control_no" msgid="1715320703137199869">"Odustani"</string>
- <!-- no translation found for sim_removed_title (6227712319223226185) -->
- <skip />
- <!-- no translation found for sim_removed_message (2064255102770489459) -->
- <skip />
- <!-- no translation found for sim_done_button (827949989369963775) -->
- <skip />
- <!-- no translation found for sim_added_title (3719670512889674693) -->
- <skip />
- <!-- no translation found for sim_added_message (1209265974048554242) -->
- <skip />
- <!-- no translation found for sim_restart_button (4722407842815232347) -->
- <skip />
+ <string name="sim_removed_title" msgid="6227712319223226185">"SIM kartica uklonjena"</string>
+ <string name="sim_removed_message" msgid="2064255102770489459">"Mobilna mreža neće biti dostupna sve dok ne vratite SIM karticu."</string>
+ <string name="sim_done_button" msgid="827949989369963775">"Gotovo"</string>
+ <string name="sim_added_title" msgid="3719670512889674693">"SIM kartica dodana"</string>
+ <string name="sim_added_message" msgid="1209265974048554242">"Morate ponovno pokrenuti uređaj za pristup mobilnoj mreži."</string>
+ <string name="sim_restart_button" msgid="4722407842815232347">"Ponovno pokreni"</string>
<string name="time_picker_dialog_title" msgid="8349362623068819295">"Postavljanje vremena"</string>
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Postavi datum"</string>
<string name="date_time_set" msgid="5777075614321087758">"Postavi"</string>
@@ -1104,6 +1096,22 @@
<string name="choose_account_label" msgid="4191313562041125787">"Odaberite račun"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Povećaj"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Smanji"</string>
+ <!-- no translation found for checkbox_checked (7222044992652711167) -->
+ <skip />
+ <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
+ <skip />
+ <!-- no translation found for radiobutton_selected (8603599808486581511) -->
+ <skip />
+ <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
+ <skip />
+ <!-- no translation found for switch_on (551417728476977311) -->
+ <skip />
+ <!-- no translation found for switch_off (7249798614327155088) -->
+ <skip />
+ <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
+ <skip />
+ <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"Kreni na početnu"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Kreni gore"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Više opcija"</string>
@@ -1117,6 +1125,14 @@
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"4G podaci su onemogućeni"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Mobilni podaci su onemogućeni"</string>
<string name="data_usage_limit_body" msgid="2182247539226163759">"Dotaknite za omogućivanje"</string>
+ <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
+ <skip />
+ <!-- no translation found for data_usage_4g_limit_snoozed_title (1106562779311209039) -->
+ <skip />
+ <!-- no translation found for data_usage_mobile_limit_snoozed_title (279240572165412168) -->
+ <skip />
+ <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <skip />
<string name="ssl_certificate" msgid="6510040486049237639">"Sigurnosni certifikat"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Ovaj je certifikat valjan."</string>
<string name="issued_to" msgid="454239480274921032">"Izdano za:"</string>
@@ -1132,10 +1148,8 @@
<string name="sha256_fingerprint" msgid="4391271286477279263">"SHA-256 otisak prsta:"</string>
<string name="sha1_fingerprint" msgid="7930330235269404581">"SHA-1 otisak prsta:"</string>
<string name="activity_chooser_view_see_all" msgid="180268188117163072">"Prikaži sve..."</string>
- <!-- no translation found for activity_chooser_view_dialog_title_default (3325054276356556835) -->
- <skip />
- <!-- no translation found for share_action_provider_share_with (1791316789651185229) -->
- <skip />
+ <string name="activity_chooser_view_dialog_title_default" msgid="3325054276356556835">"Odaberite aktivnost"</string>
+ <string name="share_action_provider_share_with" msgid="1791316789651185229">"Dijeli sa..."</string>
<!-- no translation found for status_bar_device_locked (3092703448690669768) -->
<skip />
</resources>
diff --git a/core/res/res/values-hu/strings.xml b/core/res/res/values-hu/strings.xml
index 3a5fd40..3c41460 100644
--- a/core/res/res/values-hu/strings.xml
+++ b/core/res/res/values-hu/strings.xml
@@ -262,10 +262,8 @@
<string name="permdesc_readInputState" msgid="5132879321450325445">"Lehetővé teszi az alkalmazások számára, hogy figyeljék a lenyomott billentyűket még másik alkalmazás használata esetén is (például jelszó beírásakor). A normál alkalmazásoknak erre soha nincs szüksége."</string>
<string name="permlab_bindInputMethod" msgid="3360064620230515776">"összekapcsolás egy beviteli módszerrel"</string>
<string name="permdesc_bindInputMethod" msgid="3734838321027317228">"Lehetővé teszi a használó számára a beviteli módszer legfelső szintű kezelőfelületéhez való csatlakozást. A normál alkalmazások soha nem használják ezt."</string>
- <!-- no translation found for permlab_bindTextService (7358378401915287938) -->
- <skip />
- <!-- no translation found for permdesc_bindTextService (172508880651909350) -->
- <skip />
+ <string name="permlab_bindTextService" msgid="7358378401915287938">"csatlakozás szövegszolgáltatáshoz"</string>
+ <string name="permdesc_bindTextService" msgid="172508880651909350">"Lehetővé teszi, hogy a tulajdonos egy szöveges szolgáltatás felső szintjéhez kapcsolódjon (pl. SpellCheckerService). A szokásos alkalmazásokhoz szinte soha nincs szükség rá."</string>
<string name="permlab_bindWallpaper" msgid="8716400279937856462">"összekapcsolás háttérképpel"</string>
<string name="permdesc_bindWallpaper" msgid="5287754520361915347">"Lehetővé teszi a használó számára, hogy csatlakozzon egy háttérkép legfelső szintű kezelőfelületéhez. A normál alkalmazásoknak erre soha nincs szüksége."</string>
<string name="permlab_bindRemoteViews" msgid="5697987759897367099">"csatlakozás modulszolgáltatáshoz"</string>
@@ -724,10 +722,8 @@
<string name="permdesc_writeHistoryBookmarks" product="default" msgid="945571990357114950">"Lehetővé teszi egy alkalmazás számára, hogy módosítsa a telefonon tárolt böngészési előzményeket és könyvjelzőket. A rosszindulatú alkalmazások felhasználhatják ezt a böngésző adatainak törlésére vagy módosítására."</string>
<string name="permlab_setAlarm" msgid="5924401328803615165">"ébresztő beállítása az ébresztőórában"</string>
<string name="permdesc_setAlarm" msgid="5966966598149875082">"Lehetővé teszi az alkalmazások számára, hogy beállítsanak egy ébresztőt egy telepített ébresztőóra alkalmazásban. Egyes ilyen alkalmazásokban lehet, hogy nem működik ez a funkció."</string>
- <!-- no translation found for permlab_readWriteOwnVoicemail (8861946090046059697) -->
- <skip />
- <!-- no translation found for permdesc_readWriteOwnVoicemail (7343490168272921274) -->
- <skip />
+ <string name="permlab_readWriteOwnVoicemail" msgid="8861946090046059697">"Hozzáférés az alkalmazás által kezelt hangüzenetekhez"</string>
+ <string name="permdesc_readWriteOwnVoicemail" msgid="7343490168272921274">"Lehetővé teszi, hogy az alkalmazás csak azokat a hangüzeneteket tárolja és kérje le, amelyekhez a kapcsolódó szolgáltatás hozzáfér."</string>
<string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"A böngésző helymeghatározási engedélyeinek módosítása"</string>
<string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"Lehetővé teszi egy alkalmazás számára, hogy módosítsa a böngésző helymeghatározási engedélyeit. A rosszindulatú alkalmazások kihasználhatják ezt arra, hogy helyadatokat küldjenek tetszőleges webhelyeknek."</string>
<string name="save_password_message" msgid="767344687139195790">"Szeretné, hogy a böngésző megjegyezze a jelszót?"</string>
@@ -843,7 +839,8 @@
<string name="cut" msgid="3092569408438626261">"Kivágás"</string>
<string name="copy" msgid="2681946229533511987">"Másolás"</string>
<string name="paste" msgid="5629880836805036433">"Beillesztés"</string>
- <string name="pasteDisabled" msgid="7259254654641456570">"Nincs mit bemásolni"</string>
+ <!-- no translation found for replace (8333608224471746584) -->
+ <skip />
<string name="copyUrl" msgid="2538211579596067402">"URL másolása"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Szöveg kijelölése..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Szöveg kijelölése"</string>
@@ -880,12 +877,9 @@
<string name="launch_warning_title" msgid="8323761616052121936">"Alk. átirányítva"</string>
<string name="launch_warning_replace" msgid="6202498949970281412">"<xliff:g id="APP_NAME">%1$s</xliff:g> éppen fut."</string>
<string name="launch_warning_original" msgid="188102023021668683">"<xliff:g id="APP_NAME">%1$s</xliff:g> volt eredetileg elindítva."</string>
- <!-- no translation found for screen_compat_mode_scale (3202955667675944499) -->
- <skip />
- <!-- no translation found for screen_compat_mode_show (4013878876486655892) -->
- <skip />
- <!-- no translation found for screen_compat_mode_hint (2953716574198046484) -->
- <skip />
+ <string name="screen_compat_mode_scale" msgid="3202955667675944499">"Skála"</string>
+ <string name="screen_compat_mode_show" msgid="4013878876486655892">"Mindig megjelenik"</string>
+ <string name="screen_compat_mode_hint" msgid="2953716574198046484">"Ismételt bekapcsolás a Beállítások > Alkalmazások > Alkalmazások kezelése alatt."</string>
<string name="smv_application" msgid="295583804361236288">"<xliff:g id="APPLICATION">%1$s</xliff:g> alkalmazás (<xliff:g id="PROCESS">%2$s</xliff:g> folyamat) megsértette az általa kényszerített Szigorú üzemmód irányelvet."</string>
<string name="smv_process" msgid="5120397012047462446">"<xliff:g id="PROCESS">%1$s</xliff:g> folyamat megsértette az általa kényszerített Szigorú üzemmód irányelvet."</string>
<string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> fut"</string>
@@ -919,40 +913,26 @@
<item quantity="one" msgid="1634101450343277345">"Nyílt Wi-Fi hálózat elérhető"</item>
<item quantity="other" msgid="7915895323644292768">"Nyílt Wi-Fi hálózatok elérhetők"</item>
</plurals>
- <!-- no translation found for wifi_watchdog_network_disabled (6398650124751302012) -->
- <skip />
- <!-- no translation found for wifi_watchdog_network_disabled_detailed (4659127251774069612) -->
- <skip />
- <!-- no translation found for wifi_p2p_dialog_title (97611782659324517) -->
- <skip />
- <!-- no translation found for wifi_p2p_turnon_message (2804722042556269129) -->
- <skip />
- <!-- no translation found for wifi_p2p_failed_message (6467545523417622335) -->
- <skip />
- <!-- no translation found for wifi_p2p_pbc_go_negotiation_request_message (3170321684621420428) -->
- <skip />
- <!-- no translation found for wifi_p2p_pin_go_negotiation_request_message (5177412094633377308) -->
- <skip />
- <!-- no translation found for wifi_p2p_pin_display_message (2834049169114922902) -->
- <skip />
+ <string name="wifi_watchdog_network_disabled" msgid="6398650124751302012">"Egy Wi-Fi hálózat le lett tiltva"</string>
+ <string name="wifi_watchdog_network_disabled_detailed" msgid="4659127251774069612">"A Wi-Fi hálózat átmenetileg letiltásra került a gyenge kapcsolat miatt."</string>
+ <string name="wifi_p2p_dialog_title" msgid="97611782659324517">"Wi-Fi Direct"</string>
+ <string name="wifi_p2p_turnon_message" msgid="2804722042556269129">"Wi-Fi Direct indítása. A Wi-Fi kliens/hotspot kikapcsol."</string>
+ <string name="wifi_p2p_failed_message" msgid="6467545523417622335">"Nem sikerült elindítani a Wi-Fi Direct kapcsolatot"</string>
+ <string name="wifi_p2p_pbc_go_negotiation_request_message" msgid="3170321684621420428">"Wi-Fi Direct kapcsolódási kérés a következőtől: <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Az elfogadáshoz kattintson az OK gombra."</string>
+ <string name="wifi_p2p_pin_go_negotiation_request_message" msgid="5177412094633377308">"Wi-Fi Direct csatlakoztatási kérés a következőtől: <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Adja meg a PIN kódot a folytatáshoz."</string>
+ <string name="wifi_p2p_pin_display_message" msgid="2834049169114922902">"A(z) <xliff:g id="P2P_WPS_PIN">%1$s</xliff:g> WPS PIN kódot kell beírni a partnereszközön (<xliff:g id="P2P_CLIENT_ADDRESS">%2$s</xliff:g>) a csatlakoztatás folytatásához"</string>
<string name="select_character" msgid="3365550120617701745">"Karakter beszúrása"</string>
<string name="sms_control_default_app_name" msgid="7630529934366549163">"Ismeretlen alkalmazás"</string>
<string name="sms_control_title" msgid="7296612781128917719">"SMS-ek küldése"</string>
<string name="sms_control_message" msgid="1289331457999236205">"Nagyszámú SMS-t kíván elküldeni. A folytatáshoz válassza az \"OK\", a küldés leállításához a \"Mégse\" lehetőséget."</string>
<string name="sms_control_yes" msgid="2532062172402615953">"OK"</string>
<string name="sms_control_no" msgid="1715320703137199869">"Mégse"</string>
- <!-- no translation found for sim_removed_title (6227712319223226185) -->
- <skip />
- <!-- no translation found for sim_removed_message (2064255102770489459) -->
- <skip />
- <!-- no translation found for sim_done_button (827949989369963775) -->
- <skip />
- <!-- no translation found for sim_added_title (3719670512889674693) -->
- <skip />
- <!-- no translation found for sim_added_message (1209265974048554242) -->
- <skip />
- <!-- no translation found for sim_restart_button (4722407842815232347) -->
- <skip />
+ <string name="sim_removed_title" msgid="6227712319223226185">"SIM-kártya eltávolítva"</string>
+ <string name="sim_removed_message" msgid="2064255102770489459">"A mobilhálózat addig nem lesz elérhető, amíg nem cseréli ki a SIM-kártyát."</string>
+ <string name="sim_done_button" msgid="827949989369963775">"Kész"</string>
+ <string name="sim_added_title" msgid="3719670512889674693">"SIM-kártya hozzáadva"</string>
+ <string name="sim_added_message" msgid="1209265974048554242">"A mobilhálózat eléréséhez újra kell indítania eszközét."</string>
+ <string name="sim_restart_button" msgid="4722407842815232347">"Újraindítás"</string>
<string name="time_picker_dialog_title" msgid="8349362623068819295">"Idő beállítása"</string>
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Dátum beállítása"</string>
<string name="date_time_set" msgid="5777075614321087758">"Beállítás"</string>
@@ -983,8 +963,7 @@
<string name="usb_mtp_notification_title" msgid="3699913097391550394">"Csatlakoztatva médiaeszközként"</string>
<string name="usb_ptp_notification_title" msgid="1960817192216064833">"Csatlakoztatva kameraként"</string>
<string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"Csatlakoztatva telepítőként"</string>
- <!-- no translation found for usb_accessory_notification_title (7848236974087653666) -->
- <skip />
+ <string name="usb_accessory_notification_title" msgid="7848236974087653666">"Csatlakoztatva egy USB-kiegészítőhöz"</string>
<string name="usb_notification_message" msgid="4447869605109736382">"Érintse meg a további USB-opciókért"</string>
<string name="extmedia_format_title" product="nosdcard" msgid="7980995592595097841">"Az USB-tár formázása"</string>
<string name="extmedia_format_title" product="default" msgid="8663247929551095854">"SD-kártya formázása"</string>
@@ -1104,6 +1083,22 @@
<string name="choose_account_label" msgid="4191313562041125787">"Fiók kiválasztása"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Növelés"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Csökkentés"</string>
+ <!-- no translation found for checkbox_checked (7222044992652711167) -->
+ <skip />
+ <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
+ <skip />
+ <!-- no translation found for radiobutton_selected (8603599808486581511) -->
+ <skip />
+ <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
+ <skip />
+ <!-- no translation found for switch_on (551417728476977311) -->
+ <skip />
+ <!-- no translation found for switch_off (7249798614327155088) -->
+ <skip />
+ <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
+ <skip />
+ <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"Ugrás a főoldalra"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Felfele mozgás"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"További lehetőségek"</string>
@@ -1117,6 +1112,14 @@
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"4G adatforgalom letiltva"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Mobil adatforgalom letiltva"</string>
<string name="data_usage_limit_body" msgid="2182247539226163759">"koppintson az engedélyezéshez"</string>
+ <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
+ <skip />
+ <!-- no translation found for data_usage_4g_limit_snoozed_title (1106562779311209039) -->
+ <skip />
+ <!-- no translation found for data_usage_mobile_limit_snoozed_title (279240572165412168) -->
+ <skip />
+ <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <skip />
<string name="ssl_certificate" msgid="6510040486049237639">"Biztonsági tanúsítvány"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"A tanúsítvány érvényes."</string>
<string name="issued_to" msgid="454239480274921032">"Kiállítva a következőnek:"</string>
@@ -1134,6 +1137,5 @@
<string name="activity_chooser_view_see_all" msgid="180268188117163072">"Összes megtekintése..."</string>
<string name="activity_chooser_view_dialog_title_default" msgid="3325054276356556835">"Tevékenység kiválasztása"</string>
<string name="share_action_provider_share_with" msgid="1791316789651185229">"Megosztás..."</string>
- <!-- no translation found for status_bar_device_locked (3092703448690669768) -->
- <skip />
+ <string name="status_bar_device_locked" msgid="3092703448690669768">"Az eszköz le van zárva."</string>
</resources>
diff --git a/core/res/res/values-in/strings.xml b/core/res/res/values-in/strings.xml
index 85b8012..66a742f 100644
--- a/core/res/res/values-in/strings.xml
+++ b/core/res/res/values-in/strings.xml
@@ -262,10 +262,8 @@
<string name="permdesc_readInputState" msgid="5132879321450325445">"Mengizinkan aplikasi melihat tombol yang Anda tekan bahkan ketika berinteraksi dengan aplikasi lain (seperti memasukkan sandi). Tidak pernah diperlukan untuk aplikasi normal."</string>
<string name="permlab_bindInputMethod" msgid="3360064620230515776">"mengikat ke metode masukan"</string>
<string name="permdesc_bindInputMethod" msgid="3734838321027317228">"Mengizinkan pemegang mengikat antarmuka tingkat tinggi pada suatu metode masukan. Tidak diperlukan untuk aplikasi normal."</string>
- <!-- no translation found for permlab_bindTextService (7358378401915287938) -->
- <skip />
- <!-- no translation found for permdesc_bindTextService (172508880651909350) -->
- <skip />
+ <string name="permlab_bindTextService" msgid="7358378401915287938">"mengikat ke layanan teks"</string>
+ <string name="permdesc_bindTextService" msgid="172508880651909350">"Mengizinkan pemegang mengikat antarmuka tingkat tinggi pada suatu layanan teks (mis. SpellCheckerService). Tidak diperlukan untuk aplikasi normal."</string>
<string name="permlab_bindWallpaper" msgid="8716400279937856462">"mengikat ke wallpaper"</string>
<string name="permdesc_bindWallpaper" msgid="5287754520361915347">"Mengizinkan pemegang mengikat antarmuka tingkat tinggi dari suatu wallpaper. Tidak diperlukan untuk aplikasi normal."</string>
<string name="permlab_bindRemoteViews" msgid="5697987759897367099">"mengikat ke layanan widget"</string>
@@ -724,10 +722,8 @@
<string name="permdesc_writeHistoryBookmarks" product="default" msgid="945571990357114950">"Mengizinkan aplikasi mengubah riwayat atau bookmark Peramban yang tersimpan pada ponsel. Aplikasi hasad dapat menggunakan ini untuk menghapus atau mengubah data Peramban."</string>
<string name="permlab_setAlarm" msgid="5924401328803615165">"setel alarm di jam alarm"</string>
<string name="permdesc_setAlarm" msgid="5966966598149875082">"Perbolehkan aplikasi untuk menyetel alarm di aplikasi jam alarm yang terpasang. Beberapa aplikasi jam alarm tidak dapat menerapkan fitur ini."</string>
- <!-- no translation found for permlab_readWriteOwnVoicemail (8861946090046059697) -->
- <skip />
- <!-- no translation found for permdesc_readWriteOwnVoicemail (7343490168272921274) -->
- <skip />
+ <string name="permlab_readWriteOwnVoicemail" msgid="8861946090046059697">"Mengakses kotak pesan yang dikelola oleh aplikasi ini"</string>
+ <string name="permdesc_readWriteOwnVoicemail" msgid="7343490168272921274">"Memungkinkan aplikasi menyimpan dan mengambil kotak pesan yang hanya dapat diakses oleh layanan terkait."</string>
<string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"Ubah izin geolokasi Peramban"</string>
<string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"Mengizinkan aplikasi mengubah izin geolokasi Peramban. Aplikasi hasad dapat menggunakan ini untuk mengizinkan pengiriman informasi lokasi ke situs web sembarangan."</string>
<string name="save_password_message" msgid="767344687139195790">"Apakah Anda ingin peramban menyimpan sandi ini?"</string>
@@ -843,7 +839,8 @@
<string name="cut" msgid="3092569408438626261">"Potong"</string>
<string name="copy" msgid="2681946229533511987">"Salin"</string>
<string name="paste" msgid="5629880836805036433">"Tempel"</string>
- <string name="pasteDisabled" msgid="7259254654641456570">"Tidak ada yang disalin"</string>
+ <!-- no translation found for replace (8333608224471746584) -->
+ <skip />
<string name="copyUrl" msgid="2538211579596067402">"Salin URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Pilih teks..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Pemilihan teks"</string>
@@ -919,22 +916,14 @@
<item quantity="one" msgid="1634101450343277345">"Jaringan Wi-Fi terbuka tersedia"</item>
<item quantity="other" msgid="7915895323644292768">"Jaringan Wi-Fi terbuka tersedia"</item>
</plurals>
- <!-- no translation found for wifi_watchdog_network_disabled (6398650124751302012) -->
- <skip />
- <!-- no translation found for wifi_watchdog_network_disabled_detailed (4659127251774069612) -->
- <skip />
- <!-- no translation found for wifi_p2p_dialog_title (97611782659324517) -->
- <skip />
- <!-- no translation found for wifi_p2p_turnon_message (2804722042556269129) -->
- <skip />
- <!-- no translation found for wifi_p2p_failed_message (6467545523417622335) -->
- <skip />
- <!-- no translation found for wifi_p2p_pbc_go_negotiation_request_message (3170321684621420428) -->
- <skip />
- <!-- no translation found for wifi_p2p_pin_go_negotiation_request_message (5177412094633377308) -->
- <skip />
- <!-- no translation found for wifi_p2p_pin_display_message (2834049169114922902) -->
- <skip />
+ <string name="wifi_watchdog_network_disabled" msgid="6398650124751302012">"Jaringan Wi-Fi sedang dinonaktifkan"</string>
+ <string name="wifi_watchdog_network_disabled_detailed" msgid="4659127251774069612">"Untuk sementara jaringan Wi-Fi dinonaktifkan karena sambungan buruk."</string>
+ <string name="wifi_p2p_dialog_title" msgid="97611782659324517">"Wi-Fi Langsung"</string>
+ <string name="wifi_p2p_turnon_message" msgid="2804722042556269129">"Mulai operasi Wi-Fi Langsung. Opsi ini akan mematikan operasi hotspot/klien WiFi."</string>
+ <string name="wifi_p2p_failed_message" msgid="6467545523417622335">"Gagal memulai Wi-Fi Langsung"</string>
+ <string name="wifi_p2p_pbc_go_negotiation_request_message" msgid="3170321684621420428">"Permintaan penyiapan sambungan WiFI Langsung dari <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Klik OK untuk menerima."</string>
+ <string name="wifi_p2p_pin_go_negotiation_request_message" msgid="5177412094633377308">"Permintaan penyiapan sambungan WiFi Langsung dari <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Masukkan pin untuk melanjutkan."</string>
+ <string name="wifi_p2p_pin_display_message" msgid="2834049169114922902">"Pin WPS <xliff:g id="P2P_WPS_PIN">%1$s</xliff:g> harus dimasukkan pada perangkat rekan <xliff:g id="P2P_CLIENT_ADDRESS">%2$s</xliff:g> agar penyiapan sambungan dapat dilanjutkan"</string>
<string name="select_character" msgid="3365550120617701745">"Sisipkan huruf"</string>
<string name="sms_control_default_app_name" msgid="7630529934366549163">"Aplikasi tidak dikenal"</string>
<string name="sms_control_title" msgid="7296612781128917719">"Mengirim pesan SMS"</string>
@@ -983,8 +972,7 @@
<string name="usb_mtp_notification_title" msgid="3699913097391550394">"Terhubung sebagai perangkat media"</string>
<string name="usb_ptp_notification_title" msgid="1960817192216064833">"Terhubung sebagai kamera"</string>
<string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"Terhubung sebagai pemasang"</string>
- <!-- no translation found for usb_accessory_notification_title (7848236974087653666) -->
- <skip />
+ <string name="usb_accessory_notification_title" msgid="7848236974087653666">"Tersambung ke aksesori USB"</string>
<string name="usb_notification_message" msgid="4447869605109736382">"Sentuh untuk opsi USB lainnya"</string>
<string name="extmedia_format_title" product="nosdcard" msgid="7980995592595097841">"Format penyimpanan USB"</string>
<string name="extmedia_format_title" product="default" msgid="8663247929551095854">"Format kartu SD"</string>
@@ -1104,6 +1092,22 @@
<string name="choose_account_label" msgid="4191313562041125787">"Pilih akun"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Penambahan"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Pengurangan"</string>
+ <!-- no translation found for checkbox_checked (7222044992652711167) -->
+ <skip />
+ <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
+ <skip />
+ <!-- no translation found for radiobutton_selected (8603599808486581511) -->
+ <skip />
+ <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
+ <skip />
+ <!-- no translation found for switch_on (551417728476977311) -->
+ <skip />
+ <!-- no translation found for switch_off (7249798614327155088) -->
+ <skip />
+ <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
+ <skip />
+ <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"Navigasi ke beranda"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Navigasi naik"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Opsi lainnya"</string>
@@ -1117,6 +1121,14 @@
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"Data 4G dinonaktifkan"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Data seluler dinonaktifkan"</string>
<string name="data_usage_limit_body" msgid="2182247539226163759">"ketuk untuk mengaktifkan"</string>
+ <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
+ <skip />
+ <!-- no translation found for data_usage_4g_limit_snoozed_title (1106562779311209039) -->
+ <skip />
+ <!-- no translation found for data_usage_mobile_limit_snoozed_title (279240572165412168) -->
+ <skip />
+ <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <skip />
<string name="ssl_certificate" msgid="6510040486049237639">"Sertifikat keamanan"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Sertifikat ini valid."</string>
<string name="issued_to" msgid="454239480274921032">"Diterbitkan ke:"</string>
@@ -1132,10 +1144,7 @@
<string name="sha256_fingerprint" msgid="4391271286477279263">"Sidik jari SHA-256:"</string>
<string name="sha1_fingerprint" msgid="7930330235269404581">"Sidik jari SHA-1:"</string>
<string name="activity_chooser_view_see_all" msgid="180268188117163072">"Lihat semua..."</string>
- <!-- no translation found for activity_chooser_view_dialog_title_default (3325054276356556835) -->
- <skip />
- <!-- no translation found for share_action_provider_share_with (1791316789651185229) -->
- <skip />
- <!-- no translation found for status_bar_device_locked (3092703448690669768) -->
- <skip />
+ <string name="activity_chooser_view_dialog_title_default" msgid="3325054276356556835">"Pilih aktivitas"</string>
+ <string name="share_action_provider_share_with" msgid="1791316789651185229">"Berbagi dengan..."</string>
+ <string name="status_bar_device_locked" msgid="3092703448690669768">"Perangkat terkunci."</string>
</resources>
diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml
index 147cb70..4137fb7 100644
--- a/core/res/res/values-it/strings.xml
+++ b/core/res/res/values-it/strings.xml
@@ -262,10 +262,8 @@
<string name="permdesc_readInputState" msgid="5132879321450325445">"Consente il rilevamento da parte delle applicazioni dei tasti premuti anche durante l\'interazione con un\'altra applicazione (come nel caso di inserimento di una password). Non dovrebbe essere mai necessario per le normali applicazioni."</string>
<string name="permlab_bindInputMethod" msgid="3360064620230515776">"associaz. a un metodo di inserimento"</string>
<string name="permdesc_bindInputMethod" msgid="3734838321027317228">"Consente l\'associazione all\'interfaccia principale di un metodo di inserimento. Non dovrebbe essere mai necessario per le normali applicazioni."</string>
- <!-- no translation found for permlab_bindTextService (7358378401915287938) -->
- <skip />
- <!-- no translation found for permdesc_bindTextService (172508880651909350) -->
- <skip />
+ <string name="permlab_bindTextService" msgid="7358378401915287938">"associazione a un servizio di testo"</string>
+ <string name="permdesc_bindTextService" msgid="172508880651909350">"Consente al titolare di collegarsi all\'interfaccia di primo livello di un servizio di testo (ad esempio SpellCheckerService). Non dovrebbe essere mai necessaria per le normali applicazioni."</string>
<string name="permlab_bindWallpaper" msgid="8716400279937856462">"associazione a sfondo"</string>
<string name="permdesc_bindWallpaper" msgid="5287754520361915347">"Consente l\'associazione di uno sfondo all\'interfaccia principale. Non dovrebbe mai essere necessario per le normali applicazioni."</string>
<string name="permlab_bindRemoteViews" msgid="5697987759897367099">"associazione a un servizio widget"</string>
@@ -724,10 +722,8 @@
<string name="permdesc_writeHistoryBookmarks" product="default" msgid="945571990357114950">"Consente a un\'applicazione di modificare la cronologia o i segnalibri del browser memorizzati sul telefono. Le applicazioni dannose possono sfruttare questa possibilità per cancellare o modificare i dati del browser."</string>
<string name="permlab_setAlarm" msgid="5924401328803615165">"impostazione allarmi nella sveglia"</string>
<string name="permdesc_setAlarm" msgid="5966966598149875082">"Consente all\'applicazione di impostare un allarme in un\'applicazione sveglia installata. Alcune applicazioni sveglia potrebbero non supportare questa funzione."</string>
- <!-- no translation found for permlab_readWriteOwnVoicemail (8861946090046059697) -->
- <skip />
- <!-- no translation found for permdesc_readWriteOwnVoicemail (7343490168272921274) -->
- <skip />
+ <string name="permlab_readWriteOwnVoicemail" msgid="8861946090046059697">"Accesso ai messaggi vocali gestiti da questa applicazione"</string>
+ <string name="permdesc_readWriteOwnVoicemail" msgid="7343490168272921274">"Consente all\'applicazione di memorizzare e recuperare soltanto i messaggi vocali a cui può accedere il suo servizio associato."</string>
<string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"Modifica le autorizzazioni di localizzazione geografica del browser"</string>
<string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"Consente a un\'applicazione di modificare le autorizzazioni di localizzazione geografica del browser. Le applicazioni dannose possono utilizzare questa autorizzazione per consentire l\'invio di informazioni sulla posizione a siti web arbitrari."</string>
<string name="save_password_message" msgid="767344687139195790">"Memorizzare la password nel browser?"</string>
@@ -843,7 +839,8 @@
<string name="cut" msgid="3092569408438626261">"Taglia"</string>
<string name="copy" msgid="2681946229533511987">"Copia"</string>
<string name="paste" msgid="5629880836805036433">"Incolla"</string>
- <string name="pasteDisabled" msgid="7259254654641456570">"Niente da incollare"</string>
+ <!-- no translation found for replace (8333608224471746584) -->
+ <skip />
<string name="copyUrl" msgid="2538211579596067402">"Copia URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Seleziona testo..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Selezione testo"</string>
@@ -880,12 +877,9 @@
<string name="launch_warning_title" msgid="8323761616052121936">"Applicazione reindirizzata"</string>
<string name="launch_warning_replace" msgid="6202498949970281412">"<xliff:g id="APP_NAME">%1$s</xliff:g> è ora in esecuzione."</string>
<string name="launch_warning_original" msgid="188102023021668683">"<xliff:g id="APP_NAME">%1$s</xliff:g> già avviata."</string>
- <!-- no translation found for screen_compat_mode_scale (3202955667675944499) -->
- <skip />
- <!-- no translation found for screen_compat_mode_show (4013878876486655892) -->
- <skip />
- <!-- no translation found for screen_compat_mode_hint (2953716574198046484) -->
- <skip />
+ <string name="screen_compat_mode_scale" msgid="3202955667675944499">"Scala"</string>
+ <string name="screen_compat_mode_show" msgid="4013878876486655892">"Mostra sempre"</string>
+ <string name="screen_compat_mode_hint" msgid="2953716574198046484">"Riattiva questa modalità utilizzando Impostazioni > Applicazioni > Gestisci applicazioni."</string>
<string name="smv_application" msgid="295583804361236288">"L\'applicazione <xliff:g id="APPLICATION">%1$s</xliff:g> (processo <xliff:g id="PROCESS">%2$s</xliff:g>) ha violato la norma StrictMode autoimposta."</string>
<string name="smv_process" msgid="5120397012047462446">"Il processo <xliff:g id="PROCESS">%1$s</xliff:g> ha violato la norma StrictMode autoimposta."</string>
<string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> in esecuzione"</string>
@@ -919,40 +913,26 @@
<item quantity="one" msgid="1634101450343277345">"Rete Wi-Fi aperta disponibile"</item>
<item quantity="other" msgid="7915895323644292768">"Reti Wi-Fi aperte disponibili"</item>
</plurals>
- <!-- no translation found for wifi_watchdog_network_disabled (6398650124751302012) -->
- <skip />
- <!-- no translation found for wifi_watchdog_network_disabled_detailed (4659127251774069612) -->
- <skip />
- <!-- no translation found for wifi_p2p_dialog_title (97611782659324517) -->
- <skip />
- <!-- no translation found for wifi_p2p_turnon_message (2804722042556269129) -->
- <skip />
- <!-- no translation found for wifi_p2p_failed_message (6467545523417622335) -->
- <skip />
- <!-- no translation found for wifi_p2p_pbc_go_negotiation_request_message (3170321684621420428) -->
- <skip />
- <!-- no translation found for wifi_p2p_pin_go_negotiation_request_message (5177412094633377308) -->
- <skip />
- <!-- no translation found for wifi_p2p_pin_display_message (2834049169114922902) -->
- <skip />
+ <string name="wifi_watchdog_network_disabled" msgid="6398650124751302012">"È stata disattivata una rete Wi-Fi"</string>
+ <string name="wifi_watchdog_network_disabled_detailed" msgid="4659127251774069612">"Una rete Wi-Fi è stata temporaneamente disattivata a causa di una pessima connessione."</string>
+ <string name="wifi_p2p_dialog_title" msgid="97611782659324517">"Wi-Fi Direct"</string>
+ <string name="wifi_p2p_turnon_message" msgid="2804722042556269129">"Avvia funzionamento Wi-Fi Direct. Verrà disattivato il funzionamento con hotspot/client Wi-Fi."</string>
+ <string name="wifi_p2p_failed_message" msgid="6467545523417622335">"Impossibile avviare Wi-Fi Direct"</string>
+ <string name="wifi_p2p_pbc_go_negotiation_request_message" msgid="3170321684621420428">"Richiesta di configurazione della connessione Wi-Fi Direct da <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Fai clic su OK per accettare."</string>
+ <string name="wifi_p2p_pin_go_negotiation_request_message" msgid="5177412094633377308">"Richiesta di configurazione della connessione Wi-Fi Direct da <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Inserisci il PIN per continuare."</string>
+ <string name="wifi_p2p_pin_display_message" msgid="2834049169114922902">"Per la continuazione della configurazione della connessione è necessario inserire un codice PIN WPS <xliff:g id="P2P_WPS_PIN">%1$s</xliff:g> sul dispositivo peer <xliff:g id="P2P_CLIENT_ADDRESS">%2$s</xliff:g>."</string>
<string name="select_character" msgid="3365550120617701745">"Inserisci carattere"</string>
<string name="sms_control_default_app_name" msgid="7630529934366549163">"Applicazione sconosciuta"</string>
<string name="sms_control_title" msgid="7296612781128917719">"Invio SMS"</string>
<string name="sms_control_message" msgid="1289331457999236205">"È in corso l\'invio di numerosi SMS. Seleziona \"OK\" per continuare, oppure \"Annulla\" per interrompere l\'invio."</string>
<string name="sms_control_yes" msgid="2532062172402615953">"OK"</string>
<string name="sms_control_no" msgid="1715320703137199869">"Annulla"</string>
- <!-- no translation found for sim_removed_title (6227712319223226185) -->
- <skip />
- <!-- no translation found for sim_removed_message (2064255102770489459) -->
- <skip />
- <!-- no translation found for sim_done_button (827949989369963775) -->
- <skip />
- <!-- no translation found for sim_added_title (3719670512889674693) -->
- <skip />
- <!-- no translation found for sim_added_message (1209265974048554242) -->
- <skip />
- <!-- no translation found for sim_restart_button (4722407842815232347) -->
- <skip />
+ <string name="sim_removed_title" msgid="6227712319223226185">"Scheda SIM rimossa"</string>
+ <string name="sim_removed_message" msgid="2064255102770489459">"La rete mobile sarà disponibile dopo la sostituzione della scheda SIM."</string>
+ <string name="sim_done_button" msgid="827949989369963775">"Fine"</string>
+ <string name="sim_added_title" msgid="3719670512889674693">"Scheda SIM aggiunta"</string>
+ <string name="sim_added_message" msgid="1209265974048554242">"Devi riavviare il dispositivo per poter accedere alla rete mobile."</string>
+ <string name="sim_restart_button" msgid="4722407842815232347">"Riavvia"</string>
<string name="time_picker_dialog_title" msgid="8349362623068819295">"Imposta ora"</string>
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Imposta data"</string>
<string name="date_time_set" msgid="5777075614321087758">"Imposta"</string>
@@ -983,8 +963,7 @@
<string name="usb_mtp_notification_title" msgid="3699913097391550394">"Collegato come dispositivo multimediale"</string>
<string name="usb_ptp_notification_title" msgid="1960817192216064833">"Collegato come fotocamera"</string>
<string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"Collegato come installer"</string>
- <!-- no translation found for usb_accessory_notification_title (7848236974087653666) -->
- <skip />
+ <string name="usb_accessory_notification_title" msgid="7848236974087653666">"Collegato a un accessorio USB"</string>
<string name="usb_notification_message" msgid="4447869605109736382">"Tocca per altre opzioni USB"</string>
<string name="extmedia_format_title" product="nosdcard" msgid="7980995592595097841">"Formatta archivio USB"</string>
<string name="extmedia_format_title" product="default" msgid="8663247929551095854">"Formatta scheda SD"</string>
@@ -1104,6 +1083,22 @@
<string name="choose_account_label" msgid="4191313562041125787">"Seleziona un account"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Aumenta"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Diminuisci"</string>
+ <!-- no translation found for checkbox_checked (7222044992652711167) -->
+ <skip />
+ <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
+ <skip />
+ <!-- no translation found for radiobutton_selected (8603599808486581511) -->
+ <skip />
+ <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
+ <skip />
+ <!-- no translation found for switch_on (551417728476977311) -->
+ <skip />
+ <!-- no translation found for switch_off (7249798614327155088) -->
+ <skip />
+ <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
+ <skip />
+ <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"Vai alla home page"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Vai in alto"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Altre opzioni"</string>
@@ -1117,6 +1112,14 @@
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"Dati 4G disattivati"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Dati mobili disattivati"</string>
<string name="data_usage_limit_body" msgid="2182247539226163759">"tocca per attivare"</string>
+ <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
+ <skip />
+ <!-- no translation found for data_usage_4g_limit_snoozed_title (1106562779311209039) -->
+ <skip />
+ <!-- no translation found for data_usage_mobile_limit_snoozed_title (279240572165412168) -->
+ <skip />
+ <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <skip />
<string name="ssl_certificate" msgid="6510040486049237639">"Certificato di protezione"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Questo certificato è valido."</string>
<string name="issued_to" msgid="454239480274921032">"Rilasciato a:"</string>
@@ -1134,6 +1137,5 @@
<string name="activity_chooser_view_see_all" msgid="180268188117163072">"Mostra tutto..."</string>
<string name="activity_chooser_view_dialog_title_default" msgid="3325054276356556835">"Seleziona attività"</string>
<string name="share_action_provider_share_with" msgid="1791316789651185229">"Condividi con..."</string>
- <!-- no translation found for status_bar_device_locked (3092703448690669768) -->
- <skip />
+ <string name="status_bar_device_locked" msgid="3092703448690669768">"Dispositivo bloccato."</string>
</resources>
diff --git a/core/res/res/values-iw/strings.xml b/core/res/res/values-iw/strings.xml
index 159af64..873e5bc 100644
--- a/core/res/res/values-iw/strings.xml
+++ b/core/res/res/values-iw/strings.xml
@@ -843,7 +843,8 @@
<string name="cut" msgid="3092569408438626261">"גזור"</string>
<string name="copy" msgid="2681946229533511987">"העתק"</string>
<string name="paste" msgid="5629880836805036433">"הדבק"</string>
- <string name="pasteDisabled" msgid="7259254654641456570">"אין מה להדביק"</string>
+ <!-- no translation found for replace (8333608224471746584) -->
+ <skip />
<string name="copyUrl" msgid="2538211579596067402">"העתק כתובת אתר"</string>
<string name="selectTextMode" msgid="6738556348861347240">"בחר טקסט..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"בחירת טקסט"</string>
@@ -1104,6 +1105,22 @@
<string name="choose_account_label" msgid="4191313562041125787">"בחר חשבון"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"הוספה"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"הפחתה"</string>
+ <!-- no translation found for checkbox_checked (7222044992652711167) -->
+ <skip />
+ <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
+ <skip />
+ <!-- no translation found for radiobutton_selected (8603599808486581511) -->
+ <skip />
+ <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
+ <skip />
+ <!-- no translation found for switch_on (551417728476977311) -->
+ <skip />
+ <!-- no translation found for switch_off (7249798614327155088) -->
+ <skip />
+ <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
+ <skip />
+ <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"נווט לדף הבית"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"נווט למעלה"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"אפשרויות נוספות"</string>
@@ -1117,6 +1134,14 @@
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"נתוני 4G מושבתים"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"נתונים לנייד מושבתים"</string>
<string name="data_usage_limit_body" msgid="2182247539226163759">"הקש כדי להפעיל"</string>
+ <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
+ <skip />
+ <!-- no translation found for data_usage_4g_limit_snoozed_title (1106562779311209039) -->
+ <skip />
+ <!-- no translation found for data_usage_mobile_limit_snoozed_title (279240572165412168) -->
+ <skip />
+ <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <skip />
<string name="ssl_certificate" msgid="6510040486049237639">"אישור אבטחה"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"אישור זה תקף."</string>
<string name="issued_to" msgid="454239480274921032">"הוקצה ל:"</string>
diff --git a/core/res/res/values-ja/strings.xml b/core/res/res/values-ja/strings.xml
index c2b6dd2..16266d0 100644
--- a/core/res/res/values-ja/strings.xml
+++ b/core/res/res/values-ja/strings.xml
@@ -262,10 +262,8 @@
<string name="permdesc_readInputState" msgid="5132879321450325445">"別のアプリケーションへの入力(パスワードなど)でもキー入力を監視することをアプリケーションに許可します。通常のアプリケーションではまったく必要ありません。"</string>
<string name="permlab_bindInputMethod" msgid="3360064620230515776">"入力方法に関連付ける"</string>
<string name="permdesc_bindInputMethod" msgid="3734838321027317228">"入力方法のトップレベルインターフェースに関連付けることを所有者に許可します。通常のアプリケーションにはまったく必要ありません。"</string>
- <!-- no translation found for permlab_bindTextService (7358378401915287938) -->
- <skip />
- <!-- no translation found for permdesc_bindTextService (172508880651909350) -->
- <skip />
+ <string name="permlab_bindTextService" msgid="7358378401915287938">"テキストサービスにバインド"</string>
+ <string name="permdesc_bindTextService" msgid="172508880651909350">"テキストサービス(SpellCheckerServiceなど)のトップレベルインターフェースへのバインドを所有者に許可します。通常のアプリケーションでは不要です。"</string>
<string name="permlab_bindWallpaper" msgid="8716400279937856462">"壁紙にバインド"</string>
<string name="permdesc_bindWallpaper" msgid="5287754520361915347">"壁紙のトップレベルインターフェースへのバインドを所有者に許可します。通常のアプリケーションでは不要です。"</string>
<string name="permlab_bindRemoteViews" msgid="5697987759897367099">"ウィジェットサービスにバインド"</string>
@@ -712,9 +710,9 @@
<string name="autofill_county" msgid="237073771020362891">"郡"</string>
<string name="autofill_island" msgid="4020100875984667025">"島"</string>
<string name="autofill_district" msgid="8400735073392267672">"地区"</string>
- <string name="autofill_department" msgid="5343279462564453309">"県"</string>
+ <string name="autofill_department" msgid="5343279462564453309">"部署"</string>
<string name="autofill_prefecture" msgid="2028499485065800419">"都道府県"</string>
- <string name="autofill_parish" msgid="8202206105468820057">"行政区"</string>
+ <string name="autofill_parish" msgid="8202206105468820057">"教区"</string>
<string name="autofill_area" msgid="3547409050889952423">"地域"</string>
<string name="autofill_emirate" msgid="2893880978835698818">"首長国"</string>
<string name="permlab_readHistoryBookmarks" msgid="1284843728203412135">"ブラウザの履歴とブックマークを読み取る"</string>
@@ -724,10 +722,8 @@
<string name="permdesc_writeHistoryBookmarks" product="default" msgid="945571990357114950">"携帯電話に保存されているブラウザの履歴やブックマークの修正をアプリケーショに許可します。これにより悪意のあるアプリケーションが、ブラウザのデータを消去または変更する恐れがあります。"</string>
<string name="permlab_setAlarm" msgid="5924401328803615165">"アラームの設定"</string>
<string name="permdesc_setAlarm" msgid="5966966598149875082">"インストール済みアラームアプリケーションのアラーム設定をアプリケーションに許可します。この機能が実装されていないアラームアプリケーションもあります。"</string>
- <!-- no translation found for permlab_readWriteOwnVoicemail (8861946090046059697) -->
- <skip />
- <!-- no translation found for permdesc_readWriteOwnVoicemail (7343490168272921274) -->
- <skip />
+ <string name="permlab_readWriteOwnVoicemail" msgid="8861946090046059697">"このアプリケーションで管理されているボイスメールにアクセス"</string>
+ <string name="permdesc_readWriteOwnVoicemail" msgid="7343490168272921274">"関連サービスでアクセス可能なボイスメールのみを保存および取得することをアプリケーションに許可します。"</string>
<string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"ブラウザの位置情報へのアクセス権を変更"</string>
<string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"ブラウザの位置情報に対するアクセス権の変更をアプリケーションに許可します。この設定では、悪意のあるアプリケーションが任意のウェブサイトに位置情報を送信する可能性があります。"</string>
<string name="save_password_message" msgid="767344687139195790">"このパスワードをブラウザで保存しますか?"</string>
@@ -843,7 +839,8 @@
<string name="cut" msgid="3092569408438626261">"切り取り"</string>
<string name="copy" msgid="2681946229533511987">"コピー"</string>
<string name="paste" msgid="5629880836805036433">"貼り付け"</string>
- <string name="pasteDisabled" msgid="7259254654641456570">"クリップボードが空です"</string>
+ <!-- no translation found for replace (8333608224471746584) -->
+ <skip />
<string name="copyUrl" msgid="2538211579596067402">"URLをコピー"</string>
<string name="selectTextMode" msgid="6738556348861347240">"テキストを選択..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"テキスト選択"</string>
@@ -880,12 +877,9 @@
<string name="launch_warning_title" msgid="8323761616052121936">"アプリのリダイレクト"</string>
<string name="launch_warning_replace" msgid="6202498949970281412">"<xliff:g id="APP_NAME">%1$s</xliff:g>が実行中です。"</string>
<string name="launch_warning_original" msgid="188102023021668683">"<xliff:g id="APP_NAME">%1$s</xliff:g>が最初に起動していました。"</string>
- <!-- no translation found for screen_compat_mode_scale (3202955667675944499) -->
- <skip />
- <!-- no translation found for screen_compat_mode_show (4013878876486655892) -->
- <skip />
- <!-- no translation found for screen_compat_mode_hint (2953716574198046484) -->
- <skip />
+ <string name="screen_compat_mode_scale" msgid="3202955667675944499">"スケール"</string>
+ <string name="screen_compat_mode_show" msgid="4013878876486655892">"常に表示"</string>
+ <string name="screen_compat_mode_hint" msgid="2953716574198046484">"[設定]>[アプリケーション]>[アプリケーションの管理]で再度有効にできます。"</string>
<string name="smv_application" msgid="295583804361236288">"アプリケーション<xliff:g id="APPLICATION">%1$s</xliff:g>(プロセス<xliff:g id="PROCESS">%2$s</xliff:g>)でStrictModeポリシー違反がありました。"</string>
<string name="smv_process" msgid="5120397012047462446">"プロセス<xliff:g id="PROCESS">%1$s</xliff:g>でStrictModeポリシー違反がありました。"</string>
<string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g>を実行中"</string>
@@ -919,40 +913,26 @@
<item quantity="one" msgid="1634101450343277345">"Wi-Fiオープンネットワークが利用できます"</item>
<item quantity="other" msgid="7915895323644292768">"Wi-Fiオープンネットワークが利用できます"</item>
</plurals>
- <!-- no translation found for wifi_watchdog_network_disabled (6398650124751302012) -->
- <skip />
- <!-- no translation found for wifi_watchdog_network_disabled_detailed (4659127251774069612) -->
- <skip />
- <!-- no translation found for wifi_p2p_dialog_title (97611782659324517) -->
- <skip />
- <!-- no translation found for wifi_p2p_turnon_message (2804722042556269129) -->
- <skip />
- <!-- no translation found for wifi_p2p_failed_message (6467545523417622335) -->
- <skip />
- <!-- no translation found for wifi_p2p_pbc_go_negotiation_request_message (3170321684621420428) -->
- <skip />
- <!-- no translation found for wifi_p2p_pin_go_negotiation_request_message (5177412094633377308) -->
- <skip />
- <!-- no translation found for wifi_p2p_pin_display_message (2834049169114922902) -->
- <skip />
+ <string name="wifi_watchdog_network_disabled" msgid="6398650124751302012">"Wi-Fiネットワークが無効になりました"</string>
+ <string name="wifi_watchdog_network_disabled_detailed" msgid="4659127251774069612">"接続の不具合によりWi-Fiネットワークは一時的に無効になりました。"</string>
+ <string name="wifi_p2p_dialog_title" msgid="97611782659324517">"Wi-Fi Direct"</string>
+ <string name="wifi_p2p_turnon_message" msgid="2804722042556269129">"Wi-Fi Directの操作を開始します。これによりWi-Fiクライアント/アクセスポイントの操作がオフになります。"</string>
+ <string name="wifi_p2p_failed_message" msgid="6467545523417622335">"Wi-Fi Directを開始できませんでした"</string>
+ <string name="wifi_p2p_pbc_go_negotiation_request_message" msgid="3170321684621420428">"<xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>からのWi-Fi Direct接続設定リクエスト。[OK]をクリックして受け入れます。"</string>
+ <string name="wifi_p2p_pin_go_negotiation_request_message" msgid="5177412094633377308">"<xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>からのWi-Fi Direct接続設定リクエスト。PINを入力して続行します。"</string>
+ <string name="wifi_p2p_pin_display_message" msgid="2834049169114922902">"接続設定を続行するには、ピアデバイス<xliff:g id="P2P_CLIENT_ADDRESS">%2$s</xliff:g>でWPS PIN <xliff:g id="P2P_WPS_PIN">%1$s</xliff:g>を入力する必要があります"</string>
<string name="select_character" msgid="3365550120617701745">"文字を挿入"</string>
<string name="sms_control_default_app_name" msgid="7630529934366549163">"不明なアプリケーション"</string>
<string name="sms_control_title" msgid="7296612781128917719">"SMSメッセージの送信中"</string>
<string name="sms_control_message" msgid="1289331457999236205">"大量のSMSメッセージを送信しようとしています。[OK]で送信、[キャンセル]で中止します。"</string>
<string name="sms_control_yes" msgid="2532062172402615953">"OK"</string>
<string name="sms_control_no" msgid="1715320703137199869">"キャンセル"</string>
- <!-- no translation found for sim_removed_title (6227712319223226185) -->
- <skip />
- <!-- no translation found for sim_removed_message (2064255102770489459) -->
- <skip />
- <!-- no translation found for sim_done_button (827949989369963775) -->
- <skip />
- <!-- no translation found for sim_added_title (3719670512889674693) -->
- <skip />
- <!-- no translation found for sim_added_message (1209265974048554242) -->
- <skip />
- <!-- no translation found for sim_restart_button (4722407842815232347) -->
- <skip />
+ <string name="sim_removed_title" msgid="6227712319223226185">"SIMカードが取り外されました"</string>
+ <string name="sim_removed_message" msgid="2064255102770489459">"モバイルネットワークはSIMカードを交換するまで利用できません。"</string>
+ <string name="sim_done_button" msgid="827949989369963775">"完了"</string>
+ <string name="sim_added_title" msgid="3719670512889674693">"SIMカードが追加されました"</string>
+ <string name="sim_added_message" msgid="1209265974048554242">"モバイルネットワークにアクセスするには端末を再起動する必要があります。"</string>
+ <string name="sim_restart_button" msgid="4722407842815232347">"再起動"</string>
<string name="time_picker_dialog_title" msgid="8349362623068819295">"時刻設定"</string>
<string name="date_picker_dialog_title" msgid="5879450659453782278">"日付設定"</string>
<string name="date_time_set" msgid="5777075614321087758">"設定"</string>
@@ -983,8 +963,7 @@
<string name="usb_mtp_notification_title" msgid="3699913097391550394">"メディアデバイスとして接続"</string>
<string name="usb_ptp_notification_title" msgid="1960817192216064833">"カメラとして接続"</string>
<string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"インストーラとして接続"</string>
- <!-- no translation found for usb_accessory_notification_title (7848236974087653666) -->
- <skip />
+ <string name="usb_accessory_notification_title" msgid="7848236974087653666">"USBアクセサリを接続しました"</string>
<string name="usb_notification_message" msgid="4447869605109736382">"他のUSBオプションをタップしてください"</string>
<string name="extmedia_format_title" product="nosdcard" msgid="7980995592595097841">"USBストレージのフォーマット"</string>
<string name="extmedia_format_title" product="default" msgid="8663247929551095854">"SDカードをフォーマット"</string>
@@ -1104,6 +1083,22 @@
<string name="choose_account_label" msgid="4191313562041125787">"アカウントを選択"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"増やす"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"減らす"</string>
+ <!-- no translation found for checkbox_checked (7222044992652711167) -->
+ <skip />
+ <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
+ <skip />
+ <!-- no translation found for radiobutton_selected (8603599808486581511) -->
+ <skip />
+ <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
+ <skip />
+ <!-- no translation found for switch_on (551417728476977311) -->
+ <skip />
+ <!-- no translation found for switch_off (7249798614327155088) -->
+ <skip />
+ <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
+ <skip />
+ <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"ホームへ移動"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"上へ移動"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"その他のオプション"</string>
@@ -1117,6 +1112,14 @@
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"4Gデータが無効になりました"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"モバイルデータが無効になりました"</string>
<string name="data_usage_limit_body" msgid="2182247539226163759">"有効にするにはタップしてください"</string>
+ <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
+ <skip />
+ <!-- no translation found for data_usage_4g_limit_snoozed_title (1106562779311209039) -->
+ <skip />
+ <!-- no translation found for data_usage_mobile_limit_snoozed_title (279240572165412168) -->
+ <skip />
+ <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <skip />
<string name="ssl_certificate" msgid="6510040486049237639">"セキュリティ証明書"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"証明書は有効です。"</string>
<string name="issued_to" msgid="454239480274921032">"発行先:"</string>
@@ -1132,10 +1135,7 @@
<string name="sha256_fingerprint" msgid="4391271286477279263">"SHA-256指紋:"</string>
<string name="sha1_fingerprint" msgid="7930330235269404581">"SHA-1指紋:"</string>
<string name="activity_chooser_view_see_all" msgid="180268188117163072">"すべて見る..."</string>
- <!-- no translation found for activity_chooser_view_dialog_title_default (3325054276356556835) -->
- <skip />
- <!-- no translation found for share_action_provider_share_with (1791316789651185229) -->
- <skip />
- <!-- no translation found for status_bar_device_locked (3092703448690669768) -->
- <skip />
+ <string name="activity_chooser_view_dialog_title_default" msgid="3325054276356556835">"操作の選択"</string>
+ <string name="share_action_provider_share_with" msgid="1791316789651185229">"共有相手..."</string>
+ <string name="status_bar_device_locked" msgid="3092703448690669768">"端末がロックされています。"</string>
</resources>
diff --git a/core/res/res/values-ko/strings.xml b/core/res/res/values-ko/strings.xml
index 0c4c4b8..08a13eb 100644
--- a/core/res/res/values-ko/strings.xml
+++ b/core/res/res/values-ko/strings.xml
@@ -262,10 +262,8 @@
<string name="permdesc_readInputState" msgid="5132879321450325445">"애플리케이션이 다른 애플리케이션과 상호작용할 때에도 사용자가 누르는 키(예: 비밀번호 입력)를 볼 수 있도록 합니다. 일반 애플리케이션에는 절대로 필요하지 않습니다."</string>
<string name="permlab_bindInputMethod" msgid="3360064620230515776">"입력 방법 연결"</string>
<string name="permdesc_bindInputMethod" msgid="3734838321027317228">"권한을 가진 프로그램이 입력 방법에 대한 최상위 인터페이스를 사용하도록 합니다. 일반 애플리케이션에는 절대로 필요하지 않습니다."</string>
- <!-- no translation found for permlab_bindTextService (7358378401915287938) -->
- <skip />
- <!-- no translation found for permdesc_bindTextService (172508880651909350) -->
- <skip />
+ <string name="permlab_bindTextService" msgid="7358378401915287938">"텍스트 서비스 연결"</string>
+ <string name="permdesc_bindTextService" msgid="172508880651909350">"사용자가 텍스트 서비스(예: SpellCheckerService)의 최상위 인터페이스에 바인딩할 수 있게 합니다. 일반 애플리케이션에는 절대로 필요하지 않습니다."</string>
<string name="permlab_bindWallpaper" msgid="8716400279937856462">"배경화면 연결"</string>
<string name="permdesc_bindWallpaper" msgid="5287754520361915347">"권한을 가진 프로그램이 배경화면에 대한 최상위 인터페이스를 사용하도록 합니다. 일반 애플리케이션에는 절대로 필요하지 않습니다."</string>
<string name="permlab_bindRemoteViews" msgid="5697987759897367099">"위젯 서비스와 연결"</string>
@@ -724,10 +722,8 @@
<string name="permdesc_writeHistoryBookmarks" product="default" msgid="945571990357114950">"애플리케이션이 휴대전화에 저장된 브라우저 기록 또는 북마크를 수정할 수 있도록 허용합니다. 이 경우 악성 애플리케이션이 브라우저의 데이터를 지우거나 수정할 수 있습니다."</string>
<string name="permlab_setAlarm" msgid="5924401328803615165">"알람 시계에 알람 설정"</string>
<string name="permdesc_setAlarm" msgid="5966966598149875082">"실치된 알람 시계 애플리케이션에 알람을 설정하도록 허용합니다. 일부 알람 시계 애플리케이션은 이 기능을 구현하지 않을 수 있습니다."</string>
- <!-- no translation found for permlab_readWriteOwnVoicemail (8861946090046059697) -->
- <skip />
- <!-- no translation found for permdesc_readWriteOwnVoicemail (7343490168272921274) -->
- <skip />
+ <string name="permlab_readWriteOwnVoicemail" msgid="8861946090046059697">"이 애플리케이션에서 관리하는 음성사서함에 액세스"</string>
+ <string name="permdesc_readWriteOwnVoicemail" msgid="7343490168272921274">"애플리케이션이 관련 서비스에서 액세스할 수 있는 음성사서함만 저장하고 검색할 수 있도록 합니다."</string>
<string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"브라우저 위치 정보 수정 권한"</string>
<string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"애플리케이션이 브라우저의 위치 정보 권한을 수정할 수 있도록 합니다. 악성 애플리케이션이 이를 사용하여 임의의 웹사이트에 위치 정보를 보낼 수도 있습니다."</string>
<string name="save_password_message" msgid="767344687139195790">"브라우저에 이 비밀번호를 저장하시겠습니까?"</string>
@@ -843,7 +839,8 @@
<string name="cut" msgid="3092569408438626261">"잘라내기"</string>
<string name="copy" msgid="2681946229533511987">"복사"</string>
<string name="paste" msgid="5629880836805036433">"붙여넣기"</string>
- <string name="pasteDisabled" msgid="7259254654641456570">"붙여넣을 내용이 없습니다."</string>
+ <!-- no translation found for replace (8333608224471746584) -->
+ <skip />
<string name="copyUrl" msgid="2538211579596067402">"URL 복사"</string>
<string name="selectTextMode" msgid="6738556348861347240">"텍스트 선택..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"텍스트 선택"</string>
@@ -919,22 +916,14 @@
<item quantity="one" msgid="1634101450343277345">"개방형 Wi-Fi 네트워크 사용 가능"</item>
<item quantity="other" msgid="7915895323644292768">"개방형 Wi-Fi 네트워크 사용 가능"</item>
</plurals>
- <!-- no translation found for wifi_watchdog_network_disabled (6398650124751302012) -->
- <skip />
- <!-- no translation found for wifi_watchdog_network_disabled_detailed (4659127251774069612) -->
- <skip />
- <!-- no translation found for wifi_p2p_dialog_title (97611782659324517) -->
- <skip />
- <!-- no translation found for wifi_p2p_turnon_message (2804722042556269129) -->
- <skip />
- <!-- no translation found for wifi_p2p_failed_message (6467545523417622335) -->
- <skip />
- <!-- no translation found for wifi_p2p_pbc_go_negotiation_request_message (3170321684621420428) -->
- <skip />
- <!-- no translation found for wifi_p2p_pin_go_negotiation_request_message (5177412094633377308) -->
- <skip />
- <!-- no translation found for wifi_p2p_pin_display_message (2834049169114922902) -->
- <skip />
+ <string name="wifi_watchdog_network_disabled" msgid="6398650124751302012">"Wi-Fi 네트워크가 사용중지되었습니다."</string>
+ <string name="wifi_watchdog_network_disabled_detailed" msgid="4659127251774069612">"Wi-Fi 네트워크가 잘못된 연결로 인해 일시적으로 사용중지되었습니다."</string>
+ <string name="wifi_p2p_dialog_title" msgid="97611782659324517">"Wi-Fi Direct"</string>
+ <string name="wifi_p2p_turnon_message" msgid="2804722042556269129">"Wi-Fi Direct 작업을 시작합니다. 이 작업으로 Wi-Fi 클라이언트/핫스팟 작업이 사용중지됩니다."</string>
+ <string name="wifi_p2p_failed_message" msgid="6467545523417622335">"Wi-Fi Direct를 시작하지 못했습니다."</string>
+ <string name="wifi_p2p_pbc_go_negotiation_request_message" msgid="3170321684621420428">"<xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>에서 Wi-Fi Direct 연결 설정을 요청합니다. 수락하려면 확인을 클릭하세요."</string>
+ <string name="wifi_p2p_pin_go_negotiation_request_message" msgid="5177412094633377308">"<xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>에서 Wi-Fi Direct 연결 설정을 요청합니다. 계속 진행하려면 PIN을 입력하세요."</string>
+ <string name="wifi_p2p_pin_display_message" msgid="2834049169114922902">"연결 설정을 계속하려면 WPS 핀(<xliff:g id="P2P_WPS_PIN">%1$s</xliff:g>)을 피어 기기(<xliff:g id="P2P_CLIENT_ADDRESS">%2$s</xliff:g>)에 입력해야 합니다."</string>
<string name="select_character" msgid="3365550120617701745">"문자 삽입"</string>
<string name="sms_control_default_app_name" msgid="7630529934366549163">"알 수 없는 애플리케이션"</string>
<string name="sms_control_title" msgid="7296612781128917719">"SMS 메시지를 보내는 중"</string>
@@ -983,8 +972,7 @@
<string name="usb_mtp_notification_title" msgid="3699913097391550394">"미디어 기기로 연결됨"</string>
<string name="usb_ptp_notification_title" msgid="1960817192216064833">"카메라로 연결됨"</string>
<string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"설치 프로그램으로 연결됨"</string>
- <!-- no translation found for usb_accessory_notification_title (7848236974087653666) -->
- <skip />
+ <string name="usb_accessory_notification_title" msgid="7848236974087653666">"USB 액세서리에 연결됨"</string>
<string name="usb_notification_message" msgid="4447869605109736382">"다른 USB 옵션을 보려면 터치하세요."</string>
<string name="extmedia_format_title" product="nosdcard" msgid="7980995592595097841">"USB 저장소 포맷"</string>
<string name="extmedia_format_title" product="default" msgid="8663247929551095854">"SD 카드 포맷"</string>
@@ -1104,6 +1092,22 @@
<string name="choose_account_label" msgid="4191313562041125787">"계정 선택"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"올리기"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"줄이기"</string>
+ <!-- no translation found for checkbox_checked (7222044992652711167) -->
+ <skip />
+ <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
+ <skip />
+ <!-- no translation found for radiobutton_selected (8603599808486581511) -->
+ <skip />
+ <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
+ <skip />
+ <!-- no translation found for switch_on (551417728476977311) -->
+ <skip />
+ <!-- no translation found for switch_off (7249798614327155088) -->
+ <skip />
+ <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
+ <skip />
+ <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"홈 탐색"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"위로 탐색"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"옵션 더보기"</string>
@@ -1117,6 +1121,14 @@
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"4G 데이터 사용중지됨"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"모바일 데이터 사용중지됨"</string>
<string name="data_usage_limit_body" msgid="2182247539226163759">"사용하려면 누르세요."</string>
+ <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
+ <skip />
+ <!-- no translation found for data_usage_4g_limit_snoozed_title (1106562779311209039) -->
+ <skip />
+ <!-- no translation found for data_usage_mobile_limit_snoozed_title (279240572165412168) -->
+ <skip />
+ <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <skip />
<string name="ssl_certificate" msgid="6510040486049237639">"보안 인증서"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"유효한 인증서입니다."</string>
<string name="issued_to" msgid="454239480274921032">"발급 대상:"</string>
@@ -1134,6 +1146,5 @@
<string name="activity_chooser_view_see_all" msgid="180268188117163072">"전체 보기..."</string>
<string name="activity_chooser_view_dialog_title_default" msgid="3325054276356556835">"활동 선택"</string>
<string name="share_action_provider_share_with" msgid="1791316789651185229">"공유 대상..."</string>
- <!-- no translation found for status_bar_device_locked (3092703448690669768) -->
- <skip />
+ <string name="status_bar_device_locked" msgid="3092703448690669768">"기기 잠김"</string>
</resources>
diff --git a/core/res/res/values-lt/strings.xml b/core/res/res/values-lt/strings.xml
index 1e18e3c..5dc26d8 100644
--- a/core/res/res/values-lt/strings.xml
+++ b/core/res/res/values-lt/strings.xml
@@ -843,7 +843,8 @@
<string name="cut" msgid="3092569408438626261">"Iškirpti"</string>
<string name="copy" msgid="2681946229533511987">"Kopijuoti"</string>
<string name="paste" msgid="5629880836805036433">"Įklijuoti"</string>
- <string name="pasteDisabled" msgid="7259254654641456570">"Nėra, ką įklijuoti"</string>
+ <!-- no translation found for replace (8333608224471746584) -->
+ <skip />
<string name="copyUrl" msgid="2538211579596067402">"Kopijuoti URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Pasirinkti tekstą..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Teksto pasirinkimas"</string>
@@ -880,12 +881,9 @@
<string name="launch_warning_title" msgid="8323761616052121936">"Programa nukreipta"</string>
<string name="launch_warning_replace" msgid="6202498949970281412">"„<xliff:g id="APP_NAME">%1$s</xliff:g>“ dabar vykdoma."</string>
<string name="launch_warning_original" msgid="188102023021668683">"„<xliff:g id="APP_NAME">%1$s</xliff:g>“ buvo iš pradžių paleista."</string>
- <!-- no translation found for screen_compat_mode_scale (3202955667675944499) -->
- <skip />
- <!-- no translation found for screen_compat_mode_show (4013878876486655892) -->
- <skip />
- <!-- no translation found for screen_compat_mode_hint (2953716574198046484) -->
- <skip />
+ <string name="screen_compat_mode_scale" msgid="3202955667675944499">"Mastelis"</string>
+ <string name="screen_compat_mode_show" msgid="4013878876486655892">"Visada rodyti"</string>
+ <string name="screen_compat_mode_hint" msgid="2953716574198046484">"Iš naujo įgalinkite tai apsilankę skiltyje „Nustatymai“ > „Programos“ > „Valdyti programas“."</string>
<string name="smv_application" msgid="295583804361236288">"Programa „<xliff:g id="APPLICATION">%1$s</xliff:g>“ (procesas „<xliff:g id="PROCESS">%2$s</xliff:g>“) pažeidė savo vykdomą „StrictMode“ politiką."</string>
<string name="smv_process" msgid="5120397012047462446">"„<xliff:g id="PROCESS">%1$s</xliff:g>“ procesas pažeidė savo vykdomą „StrictMode“ politiką."</string>
<string name="heavy_weight_notification" msgid="9087063985776626166">"Vykdoma „<xliff:g id="APP">%1$s</xliff:g>“"</string>
@@ -941,18 +939,12 @@
<string name="sms_control_message" msgid="1289331457999236205">"Siunčiama daug SMS pranešimų. Pasirinkite „Gerai“, jei norite tęsti, arba „Atšaukti“, jei norite sustabdyti siuntimą."</string>
<string name="sms_control_yes" msgid="2532062172402615953">"Gerai"</string>
<string name="sms_control_no" msgid="1715320703137199869">"Atšaukti"</string>
- <!-- no translation found for sim_removed_title (6227712319223226185) -->
- <skip />
- <!-- no translation found for sim_removed_message (2064255102770489459) -->
- <skip />
- <!-- no translation found for sim_done_button (827949989369963775) -->
- <skip />
- <!-- no translation found for sim_added_title (3719670512889674693) -->
- <skip />
- <!-- no translation found for sim_added_message (1209265974048554242) -->
- <skip />
- <!-- no translation found for sim_restart_button (4722407842815232347) -->
- <skip />
+ <string name="sim_removed_title" msgid="6227712319223226185">"SIM kortelė pašalinta"</string>
+ <string name="sim_removed_message" msgid="2064255102770489459">"Mobiliojo ryšio tinklas bus nepasiekiamas, kol pakeisite SIM kortelę."</string>
+ <string name="sim_done_button" msgid="827949989369963775">"Atlikta"</string>
+ <string name="sim_added_title" msgid="3719670512889674693">"SIM kortelė pridėta"</string>
+ <string name="sim_added_message" msgid="1209265974048554242">"Kad pasiektumėte mobiliojo ryšio tinklą, turite iš naujo paleisti įrenginį."</string>
+ <string name="sim_restart_button" msgid="4722407842815232347">"Paleisti iš naujo"</string>
<string name="time_picker_dialog_title" msgid="8349362623068819295">"Nustatyti laiką"</string>
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Nustatyti datą"</string>
<string name="date_time_set" msgid="5777075614321087758">"Nustatyti"</string>
@@ -1104,6 +1096,22 @@
<string name="choose_account_label" msgid="4191313562041125787">"Pasirinkti paskyrą"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Padidinti"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Sumažinti"</string>
+ <!-- no translation found for checkbox_checked (7222044992652711167) -->
+ <skip />
+ <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
+ <skip />
+ <!-- no translation found for radiobutton_selected (8603599808486581511) -->
+ <skip />
+ <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
+ <skip />
+ <!-- no translation found for switch_on (551417728476977311) -->
+ <skip />
+ <!-- no translation found for switch_off (7249798614327155088) -->
+ <skip />
+ <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
+ <skip />
+ <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"Naršyti pagrindinį puslapį"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Naršyti į viršų"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Daugiau parinkčių"</string>
@@ -1117,6 +1125,14 @@
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"4G duomenys neleidžiami"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Mobilieji duomenys neleidžiami"</string>
<string name="data_usage_limit_body" msgid="2182247539226163759">"jei norite įgalinti, palieskite"</string>
+ <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
+ <skip />
+ <!-- no translation found for data_usage_4g_limit_snoozed_title (1106562779311209039) -->
+ <skip />
+ <!-- no translation found for data_usage_mobile_limit_snoozed_title (279240572165412168) -->
+ <skip />
+ <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <skip />
<string name="ssl_certificate" msgid="6510040486049237639">"Saugos sertifikatas"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Šis sertifikatas galioja."</string>
<string name="issued_to" msgid="454239480274921032">"Išduota:"</string>
diff --git a/core/res/res/values-lv/strings.xml b/core/res/res/values-lv/strings.xml
index 43d640b..7d845f4 100644
--- a/core/res/res/values-lv/strings.xml
+++ b/core/res/res/values-lv/strings.xml
@@ -262,10 +262,8 @@
<string name="permdesc_readInputState" msgid="5132879321450325445">"Ļauj lietojumprogrammām sekot līdzi nospiestajiem taustiņiem, mijiedarbojoties ar citu lietojumprogrammu (piemēram, ievadot paroli). Parastajām lietojumprogrammām nekad nav nepieciešama."</string>
<string name="permlab_bindInputMethod" msgid="3360064620230515776">"saistīt ar ievades metodi"</string>
<string name="permdesc_bindInputMethod" msgid="3734838321027317228">"Ļauj īpašniekam saistīt ar ievades metodes augšējā līmeņa saskarni. Parastajām lietojumprogrammām nekad nav nepieciešama."</string>
- <!-- no translation found for permlab_bindTextService (7358378401915287938) -->
- <skip />
- <!-- no translation found for permdesc_bindTextService (172508880651909350) -->
- <skip />
+ <string name="permlab_bindTextService" msgid="7358378401915287938">"saistīt ar īsziņu pakalpojumu"</string>
+ <string name="permdesc_bindTextService" msgid="172508880651909350">"Ļauj īpašniekam veikt saistīšanu ar īsziņu pakalpojuma augstākā līmeņa interfeisu (piem., SpellCheckerService). Nekad nav nepieciešama parastām lietojumprogrammām."</string>
<string name="permlab_bindWallpaper" msgid="8716400279937856462">"saistīt ar tapeti"</string>
<string name="permdesc_bindWallpaper" msgid="5287754520361915347">"Ļauj īpašniekam saistīties ar tapetes augšējā līmeņa saskarni. Parastajās lietojumprogrammās nekad nav nepieciešama."</string>
<string name="permlab_bindRemoteViews" msgid="5697987759897367099">"saistīt ar logrīka pakalpojumu"</string>
@@ -724,10 +722,8 @@
<string name="permdesc_writeHistoryBookmarks" product="default" msgid="945571990357114950">"Ļauj lietojumprogrammai pārveidot tālrunī saglabāto pārlūkprogrammas vēsturi un grāmatzīmes. Ļaunprātīgas lietojumprogrammas var to izmantot, lai dzēstu vai pārveidotu pārlūkprogrammas datus."</string>
<string name="permlab_setAlarm" msgid="5924401328803615165">"iestatīt trauksmi modinātājpulkstenī"</string>
<string name="permdesc_setAlarm" msgid="5966966598149875082">"Ļauj lietojumprogrammai iestatīt trauksmi instalētajā modinātājpulksteņa lietojumprogrammā. Dažās modinātājpulksteņu lietojumprogrammās šī funkcija var nebūt īstenojama."</string>
- <!-- no translation found for permlab_readWriteOwnVoicemail (8861946090046059697) -->
- <skip />
- <!-- no translation found for permdesc_readWriteOwnVoicemail (7343490168272921274) -->
- <skip />
+ <string name="permlab_readWriteOwnVoicemail" msgid="8861946090046059697">"Piekļuve balss pasta ziņojumiem, kas tiek pārvaldīti šajā lietojumprogrammā"</string>
+ <string name="permdesc_readWriteOwnVoicemail" msgid="7343490168272921274">"Ļauj lietojumprogrammai glabāt un izgūt tikai tos balss pasta ziņojumus, kuriem var piekļūt no saistītā pakalpojuma."</string>
<string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"Pārveidot pārlūkprogrammas ģeogrāfiskās atrašanās vietas atļaujas"</string>
<string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"Ļauj lietojumprogrammai pārveidot pārlūkprogrammas ģeogrāfiskās atrašanās vietas atļaujas. Ļaunprātīgas lietojumprogrammas var to izmantot, lai atļautu atrašanās vietas informācijas sūtīšanu uz citām vietnēm."</string>
<string name="save_password_message" msgid="767344687139195790">"Vai vēlaties, lai pārlūkprogrammā tiktu saglabāta šī parole?"</string>
@@ -843,7 +839,8 @@
<string name="cut" msgid="3092569408438626261">"Izgriezt"</string>
<string name="copy" msgid="2681946229533511987">"Kopēt"</string>
<string name="paste" msgid="5629880836805036433">"Ielīmēt"</string>
- <string name="pasteDisabled" msgid="7259254654641456570">"Nav ielīmējamu vien."</string>
+ <!-- no translation found for replace (8333608224471746584) -->
+ <skip />
<string name="copyUrl" msgid="2538211579596067402">"Kopēt URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Atlasīt tekstu..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Teksta atlase"</string>
@@ -880,12 +877,9 @@
<string name="launch_warning_title" msgid="8323761616052121936">"Lietojumpr. ir novirzīta"</string>
<string name="launch_warning_replace" msgid="6202498949970281412">"<xliff:g id="APP_NAME">%1$s</xliff:g> tagad darbojas."</string>
<string name="launch_warning_original" msgid="188102023021668683">"Sākotnēji tika palaista lietojumprogramma <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
- <!-- no translation found for screen_compat_mode_scale (3202955667675944499) -->
- <skip />
- <!-- no translation found for screen_compat_mode_show (4013878876486655892) -->
- <skip />
- <!-- no translation found for screen_compat_mode_hint (2953716574198046484) -->
- <skip />
+ <string name="screen_compat_mode_scale" msgid="3202955667675944499">"Mērogs"</string>
+ <string name="screen_compat_mode_show" msgid="4013878876486655892">"Rādīt vienmēr"</string>
+ <string name="screen_compat_mode_hint" msgid="2953716574198046484">"Iespējojiet atkārtoti, izmantojot Iestatījumi > Lietojumprogrammas > Pārvaldīt lietojumprogrammas."</string>
<string name="smv_application" msgid="295583804361236288">"Lietojumprogramma <xliff:g id="APPLICATION">%1$s</xliff:g> (process <xliff:g id="PROCESS">%2$s</xliff:g>) ir pārkāpusi savu pašieviesto StrictMode politiku."</string>
<string name="smv_process" msgid="5120397012047462446">"Process <xliff:g id="PROCESS">%1$s</xliff:g> ir pārkāpis savu pašieviesto StrictMode politiku."</string>
<string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> darbojas"</string>
@@ -919,40 +913,26 @@
<item quantity="one" msgid="1634101450343277345">"Ir pieejams atvērts Wi-Fi tīkls"</item>
<item quantity="other" msgid="7915895323644292768">"Ir pieejami atvērti Wi-Fi tīkli."</item>
</plurals>
- <!-- no translation found for wifi_watchdog_network_disabled (6398650124751302012) -->
- <skip />
- <!-- no translation found for wifi_watchdog_network_disabled_detailed (4659127251774069612) -->
- <skip />
- <!-- no translation found for wifi_p2p_dialog_title (97611782659324517) -->
- <skip />
- <!-- no translation found for wifi_p2p_turnon_message (2804722042556269129) -->
- <skip />
- <!-- no translation found for wifi_p2p_failed_message (6467545523417622335) -->
- <skip />
- <!-- no translation found for wifi_p2p_pbc_go_negotiation_request_message (3170321684621420428) -->
- <skip />
- <!-- no translation found for wifi_p2p_pin_go_negotiation_request_message (5177412094633377308) -->
- <skip />
- <!-- no translation found for wifi_p2p_pin_display_message (2834049169114922902) -->
- <skip />
+ <string name="wifi_watchdog_network_disabled" msgid="6398650124751302012">"Wi-Fi tīkls tika atspējots."</string>
+ <string name="wifi_watchdog_network_disabled_detailed" msgid="4659127251774069612">"Wi-Fi tīkls tika īslaicīgi atspējots sliktas savienojamības dēļ."</string>
+ <string name="wifi_p2p_dialog_title" msgid="97611782659324517">"Wi-Fi Direct"</string>
+ <string name="wifi_p2p_turnon_message" msgid="2804722042556269129">"Sākt Wi-Fi Direct darbību. Tiks izslēgta Wi-Fi klienta/tīklāja darbība."</string>
+ <string name="wifi_p2p_failed_message" msgid="6467545523417622335">"Neizdevās palaist Wi-Fi Direct"</string>
+ <string name="wifi_p2p_pbc_go_negotiation_request_message" msgid="3170321684621420428">"Wi-Fi Direct savienojuma iestatīšanas pieprasījums no adreses <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Noklikšķiniet uz Labi, lai apstiprinātu."</string>
+ <string name="wifi_p2p_pin_go_negotiation_request_message" msgid="5177412094633377308">"Wi-Fi Direct savienojuma iestatīšanas pieprasījums no adreses <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Lai turpinātu, ievadiet PIN."</string>
+ <string name="wifi_p2p_pin_display_message" msgid="2834049169114922902">"Lai turpinātu savienojuma iestatīšanu, vienādranga ierīcē <xliff:g id="P2P_CLIENT_ADDRESS">%2$s</xliff:g> ir jāievada WPS PIN <xliff:g id="P2P_WPS_PIN">%1$s</xliff:g>."</string>
<string name="select_character" msgid="3365550120617701745">"Ievietojiet rakstzīmi"</string>
<string name="sms_control_default_app_name" msgid="7630529934366549163">"Nezināma lietojumprogramma"</string>
<string name="sms_control_title" msgid="7296612781128917719">"Īsziņu sūtīšana"</string>
<string name="sms_control_message" msgid="1289331457999236205">"Tiek sūtīts liels īsziņu skaits. Atlasiet Labi, lai turpinātu, vai Atcelt, lai apturētu sūtīšanu."</string>
<string name="sms_control_yes" msgid="2532062172402615953">"Labi"</string>
<string name="sms_control_no" msgid="1715320703137199869">"Atcelt"</string>
- <!-- no translation found for sim_removed_title (6227712319223226185) -->
- <skip />
- <!-- no translation found for sim_removed_message (2064255102770489459) -->
- <skip />
- <!-- no translation found for sim_done_button (827949989369963775) -->
- <skip />
- <!-- no translation found for sim_added_title (3719670512889674693) -->
- <skip />
- <!-- no translation found for sim_added_message (1209265974048554242) -->
- <skip />
- <!-- no translation found for sim_restart_button (4722407842815232347) -->
- <skip />
+ <string name="sim_removed_title" msgid="6227712319223226185">"SIM karte ir izņemta."</string>
+ <string name="sim_removed_message" msgid="2064255102770489459">"Mobilo sakaru tīkls nebūs pieejams, līdz nomainīsiet SIM karti."</string>
+ <string name="sim_done_button" msgid="827949989369963775">"Gatavs"</string>
+ <string name="sim_added_title" msgid="3719670512889674693">"SIM karte ir pievienota."</string>
+ <string name="sim_added_message" msgid="1209265974048554242">"Lai piekļūtu mobilo sakaru tīklam, restartējiet ierīci."</string>
+ <string name="sim_restart_button" msgid="4722407842815232347">"Restartēt"</string>
<string name="time_picker_dialog_title" msgid="8349362623068819295">"Laika iestatīšana"</string>
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Datuma iestatīšana"</string>
<string name="date_time_set" msgid="5777075614321087758">"Iestatīt"</string>
@@ -983,8 +963,7 @@
<string name="usb_mtp_notification_title" msgid="3699913097391550394">"Pievienots kā multivides ierīce"</string>
<string name="usb_ptp_notification_title" msgid="1960817192216064833">"Pievienots kā kamera"</string>
<string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"Pievienots kā instalēšanas programma"</string>
- <!-- no translation found for usb_accessory_notification_title (7848236974087653666) -->
- <skip />
+ <string name="usb_accessory_notification_title" msgid="7848236974087653666">"Ir izveidots savienojums ar USB piederumu."</string>
<string name="usb_notification_message" msgid="4447869605109736382">"Pieskarieties, lai skatītu citas USB opcijas."</string>
<string name="extmedia_format_title" product="nosdcard" msgid="7980995592595097841">"USB kr. formatēšana"</string>
<string name="extmedia_format_title" product="default" msgid="8663247929551095854">"SD kartes formatēšana"</string>
@@ -1104,6 +1083,22 @@
<string name="choose_account_label" msgid="4191313562041125787">"Atlasīt kontu"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Palielināt"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Samazināt"</string>
+ <!-- no translation found for checkbox_checked (7222044992652711167) -->
+ <skip />
+ <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
+ <skip />
+ <!-- no translation found for radiobutton_selected (8603599808486581511) -->
+ <skip />
+ <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
+ <skip />
+ <!-- no translation found for switch_on (551417728476977311) -->
+ <skip />
+ <!-- no translation found for switch_off (7249798614327155088) -->
+ <skip />
+ <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
+ <skip />
+ <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"Pārvietoties uz sākuma ekrānu"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Pārvietoties augšup"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Vairāk opciju"</string>
@@ -1117,6 +1112,14 @@
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"4G dati ir atspējoti"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Mobilie dati ir atspējoti"</string>
<string name="data_usage_limit_body" msgid="2182247539226163759">"pieskarieties, lai iespējotu"</string>
+ <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
+ <skip />
+ <!-- no translation found for data_usage_4g_limit_snoozed_title (1106562779311209039) -->
+ <skip />
+ <!-- no translation found for data_usage_mobile_limit_snoozed_title (279240572165412168) -->
+ <skip />
+ <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <skip />
<string name="ssl_certificate" msgid="6510040486049237639">"Drošības sertifikāts"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Sertifikāts ir derīgs."</string>
<string name="issued_to" msgid="454239480274921032">"Izdots:"</string>
@@ -1132,8 +1135,7 @@
<string name="sha256_fingerprint" msgid="4391271286477279263">"SHA-256 identifikators"</string>
<string name="sha1_fingerprint" msgid="7930330235269404581">"SHA-1 identifikators:"</string>
<string name="activity_chooser_view_see_all" msgid="180268188117163072">"Skatīt visas"</string>
- <string name="activity_chooser_view_dialog_title_default" msgid="3325054276356556835">"Darbību atlasīšana"</string>
- <string name="share_action_provider_share_with" msgid="1791316789651185229">"Kopīgot ar..."</string>
- <!-- no translation found for status_bar_device_locked (3092703448690669768) -->
- <skip />
+ <string name="activity_chooser_view_dialog_title_default" msgid="3325054276356556835">"Darbības atlase"</string>
+ <string name="share_action_provider_share_with" msgid="1791316789651185229">"Koplietot ar..."</string>
+ <string name="status_bar_device_locked" msgid="3092703448690669768">"Ierīce bloķēta"</string>
</resources>
diff --git a/core/res/res/values-ms/strings.xml b/core/res/res/values-ms/strings.xml
index 3921be9..3625fde 100644
--- a/core/res/res/values-ms/strings.xml
+++ b/core/res/res/values-ms/strings.xml
@@ -262,10 +262,8 @@
<string name="permdesc_readInputState" msgid="5132879321450325445">"Membenarkan aplikasi melihat kekunci yang anda tekan walaupun semasa berinteraksi dengan aplikasi lain (seperti memasukkan kata laluan). Seharusnya tidak sekali-kali diperlukan untuk aplikasi biasa."</string>
<string name="permlab_bindInputMethod" msgid="3360064620230515776">"terikat kepada kaedah input"</string>
<string name="permdesc_bindInputMethod" msgid="3734838321027317228">"Membenarkan pemegang terikat dengan antara muka peringkat tertinggi bagi kaedah input itu. Tidak sekali-kali diperlukan untuk aplikasi biasa."</string>
- <!-- no translation found for permlab_bindTextService (7358378401915287938) -->
- <skip />
- <!-- no translation found for permdesc_bindTextService (172508880651909350) -->
- <skip />
+ <string name="permlab_bindTextService" msgid="7358378401915287938">"terikat kepada perkhidmatan teks"</string>
+ <string name="permdesc_bindTextService" msgid="172508880651909350">"Membenarkan pemegang mengikat kepada antara muka tahap tinggi perkhidmatan teks(mis. PerkhidmatanPenyemakEjaan). Tidak seharusnya diperlukan untuk aplikasi biasa."</string>
<string name="permlab_bindWallpaper" msgid="8716400279937856462">"terikat pada kertas dinding"</string>
<string name="permdesc_bindWallpaper" msgid="5287754520361915347">"Membenarkan pemegang terikat dengan antara muka peringkat tertinggi bagi kertas dinding. Tidak sekali-kali diperlukan untuk aplikasi biasa."</string>
<string name="permlab_bindRemoteViews" msgid="5697987759897367099">"terikat kepada perkhidmatan widget"</string>
@@ -726,10 +724,8 @@
<string name="permdesc_writeHistoryBookmarks" product="default" msgid="945571990357114950">"Membenarkan aplikasi mengubah suai sejarah atau penanda halaman Penyemak Imbas yang disimpan pada telefon anda. Aplikasi berniat jahat boleh menggunakannya untuk memadamkan atau mengubah data Penyemak Imbas anda."</string>
<string name="permlab_setAlarm" msgid="5924401328803615165">"menetapkan penggera pada jam penggera"</string>
<string name="permdesc_setAlarm" msgid="5966966598149875082">"Membenarkan aplikasi menetapkan penggera dalam aplikasi jam penggera yang dipasang. Sesetengah aplikasi jam penggera mungkin tidak melaksanakan ciri ini."</string>
- <!-- no translation found for permlab_readWriteOwnVoicemail (8861946090046059697) -->
- <skip />
- <!-- no translation found for permdesc_readWriteOwnVoicemail (7343490168272921274) -->
- <skip />
+ <string name="permlab_readWriteOwnVoicemail" msgid="8861946090046059697">"Akses mel suara yang diurus oleh aplikasi ini"</string>
+ <string name="permdesc_readWriteOwnVoicemail" msgid="7343490168272921274">"Membenarkan aplikasi menyimpan dan mendapatkan semula mel suara yang boleh diakses oleh perkhidmatan berkaitan sahaja."</string>
<string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"Ubah suai kebenaran geolokasi Penyemak Imbas"</string>
<string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"Membenarkan aplikasi mengubah suai kebenaran geolokasi Penyemak Imbas. Aplikasi berniat jahat boleh menggunakannya untuk membenarkan penghantaran maklumat lokasi ke sembarangan tapak web."</string>
<string name="save_password_message" msgid="767344687139195790">"Adakah anda mahu penyemak imbas mengingati kata laluan ini?"</string>
@@ -845,7 +841,8 @@
<string name="cut" msgid="3092569408438626261">"Potong"</string>
<string name="copy" msgid="2681946229533511987">"Salin"</string>
<string name="paste" msgid="5629880836805036433">"Tampal"</string>
- <string name="pasteDisabled" msgid="7259254654641456570">"Tiada apa utk ditmpl"</string>
+ <!-- no translation found for replace (8333608224471746584) -->
+ <skip />
<string name="copyUrl" msgid="2538211579596067402">"Salin URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Pilih teks..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Pemilihan teks"</string>
@@ -921,22 +918,14 @@
<item quantity="one" msgid="1634101450343277345">"Rangkaian Wi-Fi terbuka tersedia"</item>
<item quantity="other" msgid="7915895323644292768">"Rangkaian Wi-Fi terbuka tersedia"</item>
</plurals>
- <!-- no translation found for wifi_watchdog_network_disabled (6398650124751302012) -->
- <skip />
- <!-- no translation found for wifi_watchdog_network_disabled_detailed (4659127251774069612) -->
- <skip />
- <!-- no translation found for wifi_p2p_dialog_title (97611782659324517) -->
- <skip />
- <!-- no translation found for wifi_p2p_turnon_message (2804722042556269129) -->
- <skip />
- <!-- no translation found for wifi_p2p_failed_message (6467545523417622335) -->
- <skip />
- <!-- no translation found for wifi_p2p_pbc_go_negotiation_request_message (3170321684621420428) -->
- <skip />
- <!-- no translation found for wifi_p2p_pin_go_negotiation_request_message (5177412094633377308) -->
- <skip />
- <!-- no translation found for wifi_p2p_pin_display_message (2834049169114922902) -->
- <skip />
+ <string name="wifi_watchdog_network_disabled" msgid="6398650124751302012">"Rangkaian Wi-Fi telah dilumpuhkan"</string>
+ <string name="wifi_watchdog_network_disabled_detailed" msgid="4659127251774069612">"Rangkaian Wi-Fi dilumpuhkan buat sementara waktu kerana sambungan teruk."</string>
+ <string name="wifi_p2p_dialog_title" msgid="97611782659324517">"Wi-Fi Langsung"</string>
+ <string name="wifi_p2p_turnon_message" msgid="2804722042556269129">"Mulakan pengendalian Wi-Fi Langsung. Hal ini akan mematikan pengendalian klien Wi-Fi/titik panas."</string>
+ <string name="wifi_p2p_failed_message" msgid="6467545523417622335">"Gagal memulakan Wi-Fi Langsung"</string>
+ <string name="wifi_p2p_pbc_go_negotiation_request_message" msgid="3170321684621420428">"Permintaan persediaan sambungan Wi-Fi Langsung dari <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Klik OK untuk menerima."</string>
+ <string name="wifi_p2p_pin_go_negotiation_request_message" msgid="5177412094633377308">"Permintaan persediaan sambungan Wi-Fi Langsung dari <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Buang pin untuk meneruskan."</string>
+ <string name="wifi_p2p_pin_display_message" msgid="2834049169114922902">"Pin WPS <xliff:g id="P2P_WPS_PIN">%1$s</xliff:g> perlu dimasukkan pada peranti rakan <xliff:g id="P2P_CLIENT_ADDRESS">%2$s</xliff:g> untuk penyediaan sambungan untuk meneruskan"</string>
<string name="select_character" msgid="3365550120617701745">"Masukkan aksara"</string>
<string name="sms_control_default_app_name" msgid="7630529934366549163">"Aplikasi tidak dikenali"</string>
<string name="sms_control_title" msgid="7296612781128917719">"Menghantar mesej SMS"</string>
@@ -985,8 +974,7 @@
<string name="usb_mtp_notification_title" msgid="3699913097391550394">"Disambungkan sebagai peranti media"</string>
<string name="usb_ptp_notification_title" msgid="1960817192216064833">"Disambungkan sebagai kamera"</string>
<string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"Disambungkan sebagai pemasang"</string>
- <!-- no translation found for usb_accessory_notification_title (7848236974087653666) -->
- <skip />
+ <string name="usb_accessory_notification_title" msgid="7848236974087653666">"Disambungkan kepada aksesori USB"</string>
<string name="usb_notification_message" msgid="4447869605109736382">"Sentuh untuk mendapatkan pilihan USB yang lain"</string>
<string name="extmedia_format_title" product="nosdcard" msgid="7980995592595097841">"Format storan USB"</string>
<string name="extmedia_format_title" product="default" msgid="8663247929551095854">"Format kad SD"</string>
@@ -1106,6 +1094,22 @@
<string name="choose_account_label" msgid="4191313562041125787">"Pilih akaun"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Kenaikan"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Penyusutan"</string>
+ <!-- no translation found for checkbox_checked (7222044992652711167) -->
+ <skip />
+ <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
+ <skip />
+ <!-- no translation found for radiobutton_selected (8603599808486581511) -->
+ <skip />
+ <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
+ <skip />
+ <!-- no translation found for switch_on (551417728476977311) -->
+ <skip />
+ <!-- no translation found for switch_off (7249798614327155088) -->
+ <skip />
+ <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
+ <skip />
+ <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"Navigasi laman utama"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Navigasi ke atas"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Lagi pilihan"</string>
@@ -1119,6 +1123,14 @@
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"Data 4G dilumpuhkan"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Data mudah alih dilumpuhkan"</string>
<string name="data_usage_limit_body" msgid="2182247539226163759">"ketik untuk mendayakan"</string>
+ <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
+ <skip />
+ <!-- no translation found for data_usage_4g_limit_snoozed_title (1106562779311209039) -->
+ <skip />
+ <!-- no translation found for data_usage_mobile_limit_snoozed_title (279240572165412168) -->
+ <skip />
+ <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <skip />
<string name="ssl_certificate" msgid="6510040486049237639">"Sijil keselamatan"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Sijil ini sah."</string>
<string name="issued_to" msgid="454239480274921032">"Dikeluarkan kepada:"</string>
@@ -1134,10 +1146,7 @@
<string name="sha256_fingerprint" msgid="4391271286477279263">"Cap jari SHA-256:"</string>
<string name="sha1_fingerprint" msgid="7930330235269404581">"Cap jari SHA-1:"</string>
<string name="activity_chooser_view_see_all" msgid="180268188117163072">"Lihat semua..."</string>
- <!-- no translation found for activity_chooser_view_dialog_title_default (3325054276356556835) -->
- <skip />
- <!-- no translation found for share_action_provider_share_with (1791316789651185229) -->
- <skip />
- <!-- no translation found for status_bar_device_locked (3092703448690669768) -->
- <skip />
+ <string name="activity_chooser_view_dialog_title_default" msgid="3325054276356556835">"Pilih aktiviti"</string>
+ <string name="share_action_provider_share_with" msgid="1791316789651185229">"Kongsi dengan..."</string>
+ <string name="status_bar_device_locked" msgid="3092703448690669768">"Peranti dikunci."</string>
</resources>
diff --git a/core/res/res/values-nb/strings.xml b/core/res/res/values-nb/strings.xml
index 7db3f31..2eada6e 100644
--- a/core/res/res/values-nb/strings.xml
+++ b/core/res/res/values-nb/strings.xml
@@ -262,10 +262,8 @@
<string name="permdesc_readInputState" msgid="5132879321450325445">"Lar applikasjonen overvåke tastetrykk selv når interaksjonen er med et annet program (som å skrive inn et passord). Vanlige applikasjoner bør aldri trenge dette."</string>
<string name="permlab_bindInputMethod" msgid="3360064620230515776">"binde til en inndatametode"</string>
<string name="permdesc_bindInputMethod" msgid="3734838321027317228">"Lar applikasjonen binde til toppnivågrensesnittet for en inndatametode. Vanlige applikasjoner bør aldri trenge dette."</string>
- <!-- no translation found for permlab_bindTextService (7358378401915287938) -->
- <skip />
- <!-- no translation found for permdesc_bindTextService (172508880651909350) -->
- <skip />
+ <string name="permlab_bindTextService" msgid="7358378401915287938">"binde til en teksttjeneste"</string>
+ <string name="permdesc_bindTextService" msgid="172508880651909350">"Gir innehaveren rett til å binde seg til øverste grensesnittnivå for en teksttjeneste (f.eks SpellCheckerService). Bør aldri være nødvendig for normal bruk."</string>
<string name="permlab_bindWallpaper" msgid="8716400279937856462">"bind til bakgrunnsbilde"</string>
<string name="permdesc_bindWallpaper" msgid="5287754520361915347">"Lar innehaveren binde det øverste nivået av grensesnittet til en bakgrunnsbilder. Skal ikke være nødvendig for vanlige programmer."</string>
<string name="permlab_bindRemoteViews" msgid="5697987759897367099">"bind til modultjenste"</string>
@@ -724,10 +722,8 @@
<string name="permdesc_writeHistoryBookmarks" product="default" msgid="945571990357114950">"Lar applikasjonen endre nettleserens logg og bokmerker lagret på telefonen. Ondsinnede applikasjoner kan bruke dette til å fjerne eller redigere nettleserens data."</string>
<string name="permlab_setAlarm" msgid="5924401328803615165">"angi alarm i alarmklokke"</string>
<string name="permdesc_setAlarm" msgid="5966966598149875082">"Lar programmet angi en alarm i et installert alarmklokkeprogram. Det kan hende at enkelte alarmklokkeprogrammer ikke implementerer denne funksjonen."</string>
- <!-- no translation found for permlab_readWriteOwnVoicemail (8861946090046059697) -->
- <skip />
- <!-- no translation found for permdesc_readWriteOwnVoicemail (7343490168272921274) -->
- <skip />
+ <string name="permlab_readWriteOwnVoicemail" msgid="8861946090046059697">"Tilgang til talepostmeldinger administrert av denne applikasjonen"</string>
+ <string name="permdesc_readWriteOwnVoicemail" msgid="7343490168272921274">"Gir applikasjonen mulighet til å lagre og hente bare talepostmeldinger som den tilhørende tjenesten har tilgang til."</string>
<string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"Endre nettleserens tillatelser for geografisk posisjonering"</string>
<string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"Tillater programmet å endre nettleserens tillatelser for geografisk posisjonering. Skadelige programmer kan bruke denne funksjonen til å sende posisjonsopplysninger til vilkårlige nettsteder."</string>
<string name="save_password_message" msgid="767344687139195790">"Ønsker du at nettleseren skal huske dette passordet?"</string>
@@ -843,7 +839,8 @@
<string name="cut" msgid="3092569408438626261">"Klipp ut"</string>
<string name="copy" msgid="2681946229533511987">"Kopier"</string>
<string name="paste" msgid="5629880836805036433">"Lim inn"</string>
- <string name="pasteDisabled" msgid="7259254654641456570">"Ingenting å lime inn"</string>
+ <!-- no translation found for replace (8333608224471746584) -->
+ <skip />
<string name="copyUrl" msgid="2538211579596067402">"Kopier URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Marker tekst"</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Merket tekst"</string>
@@ -919,22 +916,14 @@
<item quantity="one" msgid="1634101450343277345">"Åpent trådløsnett i nærheten"</item>
<item quantity="other" msgid="7915895323644292768">"Åpne trådløsnett i nærheten"</item>
</plurals>
- <!-- no translation found for wifi_watchdog_network_disabled (6398650124751302012) -->
- <skip />
- <!-- no translation found for wifi_watchdog_network_disabled_detailed (4659127251774069612) -->
- <skip />
- <!-- no translation found for wifi_p2p_dialog_title (97611782659324517) -->
- <skip />
- <!-- no translation found for wifi_p2p_turnon_message (2804722042556269129) -->
- <skip />
- <!-- no translation found for wifi_p2p_failed_message (6467545523417622335) -->
- <skip />
- <!-- no translation found for wifi_p2p_pbc_go_negotiation_request_message (3170321684621420428) -->
- <skip />
- <!-- no translation found for wifi_p2p_pin_go_negotiation_request_message (5177412094633377308) -->
- <skip />
- <!-- no translation found for wifi_p2p_pin_display_message (2834049169114922902) -->
- <skip />
+ <string name="wifi_watchdog_network_disabled" msgid="6398650124751302012">"Et Wi-Fi-nettverk er deaktivert"</string>
+ <string name="wifi_watchdog_network_disabled_detailed" msgid="4659127251774069612">"Et Wi-Fi-nettverk er midlertidig deaktivert på grunn av dårlig tilkobling."</string>
+ <string name="wifi_p2p_dialog_title" msgid="97611782659324517">"Wi-Fi Direct"</string>
+ <string name="wifi_p2p_turnon_message" msgid="2804722042556269129">"Start Wi-Fi Direct-handling. Dette deaktiverer Wi-Fi-klienten og -handlingen."</string>
+ <string name="wifi_p2p_failed_message" msgid="6467545523417622335">"Kan ikke starte Wi-Fi Direct"</string>
+ <string name="wifi_p2p_pbc_go_negotiation_request_message" msgid="3170321684621420428">"Forespørsel om tilkoblingskonfigurasjon for Wi-Fi Direct fra <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Klikk på OK for å godta."</string>
+ <string name="wifi_p2p_pin_go_negotiation_request_message" msgid="5177412094633377308">"Forespørsel om tilkoblingskonfigurasjon for Wi-Fi Direct fra <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Oppgi personlig kode for å fortsette."</string>
+ <string name="wifi_p2p_pin_display_message" msgid="2834049169114922902">"Personlig WPS-kode <xliff:g id="P2P_WPS_PIN">%1$s</xliff:g> må må oppgis på mottakerenheten <xliff:g id="P2P_CLIENT_ADDRESS">%2$s</xliff:g> for å fortsette tilkoblingskonfigurasjonen"</string>
<string name="select_character" msgid="3365550120617701745">"Sett inn tegn"</string>
<string name="sms_control_default_app_name" msgid="7630529934366549163">"Ukjent applikasjon"</string>
<string name="sms_control_title" msgid="7296612781128917719">"Sender SMS-meldinger"</string>
@@ -983,8 +972,7 @@
<string name="usb_mtp_notification_title" msgid="3699913097391550394">"Tilkoblet som medieenhet"</string>
<string name="usb_ptp_notification_title" msgid="1960817192216064833">"Tilkoblet som kamera"</string>
<string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"Tilkoblet som installasjonsprogram"</string>
- <!-- no translation found for usb_accessory_notification_title (7848236974087653666) -->
- <skip />
+ <string name="usb_accessory_notification_title" msgid="7848236974087653666">"Koblet til et USB-tilbehør"</string>
<string name="usb_notification_message" msgid="4447869605109736382">"Berør for andre USB-alternativer"</string>
<string name="extmedia_format_title" product="nosdcard" msgid="7980995592595097841">"Formaterer USB-lagring"</string>
<string name="extmedia_format_title" product="default" msgid="8663247929551095854">"Formatere minnekort"</string>
@@ -1104,6 +1092,22 @@
<string name="choose_account_label" msgid="4191313562041125787">"Velg en konto"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Øke"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Senke"</string>
+ <!-- no translation found for checkbox_checked (7222044992652711167) -->
+ <skip />
+ <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
+ <skip />
+ <!-- no translation found for radiobutton_selected (8603599808486581511) -->
+ <skip />
+ <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
+ <skip />
+ <!-- no translation found for switch_on (551417728476977311) -->
+ <skip />
+ <!-- no translation found for switch_off (7249798614327155088) -->
+ <skip />
+ <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
+ <skip />
+ <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"Gå til startsiden"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Gå opp"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Flere alternativer"</string>
@@ -1117,6 +1121,14 @@
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"4G-data er deaktivert"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Mobildata er deaktivert"</string>
<string name="data_usage_limit_body" msgid="2182247539226163759">"klikk for å aktivere"</string>
+ <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
+ <skip />
+ <!-- no translation found for data_usage_4g_limit_snoozed_title (1106562779311209039) -->
+ <skip />
+ <!-- no translation found for data_usage_mobile_limit_snoozed_title (279240572165412168) -->
+ <skip />
+ <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <skip />
<string name="ssl_certificate" msgid="6510040486049237639">"Sikkerhetssertifikat"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Sertifikatet er gyldig."</string>
<string name="issued_to" msgid="454239480274921032">"Utstedt til:"</string>
@@ -1132,10 +1144,7 @@
<string name="sha256_fingerprint" msgid="4391271286477279263">"SHA-256-fingeravtrykk"</string>
<string name="sha1_fingerprint" msgid="7930330235269404581">"SHA-1-fingeravtrykk"</string>
<string name="activity_chooser_view_see_all" msgid="180268188117163072">"Se alle"</string>
- <!-- no translation found for activity_chooser_view_dialog_title_default (3325054276356556835) -->
- <skip />
- <!-- no translation found for share_action_provider_share_with (1791316789651185229) -->
- <skip />
- <!-- no translation found for status_bar_device_locked (3092703448690669768) -->
- <skip />
+ <string name="activity_chooser_view_dialog_title_default" msgid="3325054276356556835">"Velg aktivitet"</string>
+ <string name="share_action_provider_share_with" msgid="1791316789651185229">"Del med"</string>
+ <string name="status_bar_device_locked" msgid="3092703448690669768">"Enheten er låst."</string>
</resources>
diff --git a/core/res/res/values-nl/strings.xml b/core/res/res/values-nl/strings.xml
index 52873e1..21ea3bd 100644
--- a/core/res/res/values-nl/strings.xml
+++ b/core/res/res/values-nl/strings.xml
@@ -262,10 +262,8 @@
<string name="permdesc_readInputState" msgid="5132879321450325445">"Hiermee kan een app uw toetsaanslagen registreren, zelfs tijdens de interactie met een andere app (zoals de invoer van een wachtwoord). Nooit vereist voor normale apps."</string>
<string name="permlab_bindInputMethod" msgid="3360064620230515776">"verbinden aan een invoermethode"</string>
<string name="permdesc_bindInputMethod" msgid="3734838321027317228">"Hiermee staat u de houder toe zich te verbinden met de hoofdinterface van een invoermethode. Nooit vereist voor normale apps."</string>
- <!-- no translation found for permlab_bindTextService (7358378401915287938) -->
- <skip />
- <!-- no translation found for permdesc_bindTextService (172508880651909350) -->
- <skip />
+ <string name="permlab_bindTextService" msgid="7358378401915287938">"koppelen aan een sms-service"</string>
+ <string name="permdesc_bindTextService" msgid="172508880651909350">"Hiermee kan de gebruiker koppelen met de hoofdinterface van een sms-service (zoals SpellCheckerService). Dit is niet nodig voor normale apps."</string>
<string name="permlab_bindWallpaper" msgid="8716400279937856462">"verbinden met een achtergrond"</string>
<string name="permdesc_bindWallpaper" msgid="5287754520361915347">"Hiermee staat u de houder toe zich te verbinden met de hoofdinterface van een achtergrond. Nooit vereist voor normale apps."</string>
<string name="permlab_bindRemoteViews" msgid="5697987759897367099">"verbinden met een widgetservice"</string>
@@ -724,10 +722,8 @@
<string name="permdesc_writeHistoryBookmarks" product="default" msgid="945571990357114950">"Hiermee kan een app de op uw telefoon opgeslagen browsergeschiedenis of bladwijzers wijzigen. Schadelijke apps kunnen hiermee uw browsergegevens verwijderen of wijzigen."</string>
<string name="permlab_setAlarm" msgid="5924401328803615165">"alarm instellen in wekker"</string>
<string name="permdesc_setAlarm" msgid="5966966598149875082">"Hiermee kan de app een alarm instellen in een geïnstalleerde wekker-app. Deze functie wordt door sommige wekker-apps niet geïmplementeerd."</string>
- <!-- no translation found for permlab_readWriteOwnVoicemail (8861946090046059697) -->
- <skip />
- <!-- no translation found for permdesc_readWriteOwnVoicemail (7343490168272921274) -->
- <skip />
+ <string name="permlab_readWriteOwnVoicemail" msgid="8861946090046059697">"Toegang tot voicemails die door deze app worden beheerd"</string>
+ <string name="permdesc_readWriteOwnVoicemail" msgid="7343490168272921274">"Hiermee kan de app alleen voicemails opslaan en ophalen waartoe de bijbehorende service toegang heeft."</string>
<string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"Geolocatierechten voor browser aanpassen"</string>
<string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"Staat een app toe de geolocatierechten van de browser aan te passen. Schadelijke apps kunnen dit gebruiken om locatiegegevens te verzenden naar willekeurige websites."</string>
<string name="save_password_message" msgid="767344687139195790">"Wilt u dat de browser dit wachtwoord onthoudt?"</string>
@@ -843,7 +839,8 @@
<string name="cut" msgid="3092569408438626261">"Knippen"</string>
<string name="copy" msgid="2681946229533511987">"Kopiëren"</string>
<string name="paste" msgid="5629880836805036433">"Plakken"</string>
- <string name="pasteDisabled" msgid="7259254654641456570">"Niets te plakken"</string>
+ <!-- no translation found for replace (8333608224471746584) -->
+ <skip />
<string name="copyUrl" msgid="2538211579596067402">"URL kopiëren"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Tekst selecteren..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Tekstselectie"</string>
@@ -880,12 +877,9 @@
<string name="launch_warning_title" msgid="8323761616052121936">"App omgeleid"</string>
<string name="launch_warning_replace" msgid="6202498949970281412">"<xliff:g id="APP_NAME">%1$s</xliff:g> is nu actief."</string>
<string name="launch_warning_original" msgid="188102023021668683">"<xliff:g id="APP_NAME">%1$s</xliff:g> was het eerst gestart."</string>
- <!-- no translation found for screen_compat_mode_scale (3202955667675944499) -->
- <skip />
- <!-- no translation found for screen_compat_mode_show (4013878876486655892) -->
- <skip />
- <!-- no translation found for screen_compat_mode_hint (2953716574198046484) -->
- <skip />
+ <string name="screen_compat_mode_scale" msgid="3202955667675944499">"Schaal"</string>
+ <string name="screen_compat_mode_show" msgid="4013878876486655892">"Altijd weergeven"</string>
+ <string name="screen_compat_mode_hint" msgid="2953716574198046484">"Dit opnieuw inschakelen via \'Instellingen\' > \'Apps\' > \'Apps beheren\'."</string>
<string name="smv_application" msgid="295583804361236288">"De app <xliff:g id="APPLICATION">%1$s</xliff:g> (proces <xliff:g id="PROCESS">%2$s</xliff:g>) heeft het zelf afgedwongen StrictMode-beleid geschonden."</string>
<string name="smv_process" msgid="5120397012047462446">"Het proces <xliff:g id="PROCESS">%1$s</xliff:g> heeft het zelf afgedwongen StrictMode-beleid geschonden."</string>
<string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> wordt uitgevoerd"</string>
@@ -919,40 +913,26 @@
<item quantity="one" msgid="1634101450343277345">"Open Wi-Fi-netwerk beschikbaar"</item>
<item quantity="other" msgid="7915895323644292768">"Open Wi-Fi-netwerken beschikbaar"</item>
</plurals>
- <!-- no translation found for wifi_watchdog_network_disabled (6398650124751302012) -->
- <skip />
- <!-- no translation found for wifi_watchdog_network_disabled_detailed (4659127251774069612) -->
- <skip />
- <!-- no translation found for wifi_p2p_dialog_title (97611782659324517) -->
- <skip />
- <!-- no translation found for wifi_p2p_turnon_message (2804722042556269129) -->
- <skip />
- <!-- no translation found for wifi_p2p_failed_message (6467545523417622335) -->
- <skip />
- <!-- no translation found for wifi_p2p_pbc_go_negotiation_request_message (3170321684621420428) -->
- <skip />
- <!-- no translation found for wifi_p2p_pin_go_negotiation_request_message (5177412094633377308) -->
- <skip />
- <!-- no translation found for wifi_p2p_pin_display_message (2834049169114922902) -->
- <skip />
+ <string name="wifi_watchdog_network_disabled" msgid="6398650124751302012">"Een Wi-Fi-netwerk is uitgeschakeld"</string>
+ <string name="wifi_watchdog_network_disabled_detailed" msgid="4659127251774069612">"Een Wi-Fi-netwerk werd wegens slechte connectiviteit tijdelijk uitgeschakeld."</string>
+ <string name="wifi_p2p_dialog_title" msgid="97611782659324517">"Wi-Fi Direct"</string>
+ <string name="wifi_p2p_turnon_message" msgid="2804722042556269129">"Bewerking van Wi-Fi Direct starten. Hierdoor wordt de bewerking van Wi-Fi-client/hotspot uitgeschakeld."</string>
+ <string name="wifi_p2p_failed_message" msgid="6467545523417622335">"Wi-Fi Direct starten is mislukt"</string>
+ <string name="wifi_p2p_pbc_go_negotiation_request_message" msgid="3170321684621420428">"Configuratieverzoek voor verbinding met Wi-Fi Direct van <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Klik op \'OK\' om te accepteren."</string>
+ <string name="wifi_p2p_pin_go_negotiation_request_message" msgid="5177412094633377308">"Configuratieverzoek van <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g> voor verbinding met Wi-Fi Direct. Geef de pincode op om door te gaan."</string>
+ <string name="wifi_p2p_pin_display_message" msgid="2834049169114922902">"WPS-pincode <xliff:g id="P2P_WPS_PIN">%1$s</xliff:g> moet worden ingevoerd op peerapparaat <xliff:g id="P2P_CLIENT_ADDRESS">%2$s</xliff:g>, zodat het instellen van de verbinding kan worden voortgezet"</string>
<string name="select_character" msgid="3365550120617701745">"Teken invoegen"</string>
<string name="sms_control_default_app_name" msgid="7630529934366549163">"Onbekende app"</string>
<string name="sms_control_title" msgid="7296612781128917719">"SMS-berichten verzenden"</string>
<string name="sms_control_message" msgid="1289331457999236205">"Er wordt een groot aantal SMS-berichten verzonden. Selecteer \'OK\' om door te gaan of \'Annuleren\' om de verzending te stoppen."</string>
<string name="sms_control_yes" msgid="2532062172402615953">"OK"</string>
<string name="sms_control_no" msgid="1715320703137199869">"Annuleren"</string>
- <!-- no translation found for sim_removed_title (6227712319223226185) -->
- <skip />
- <!-- no translation found for sim_removed_message (2064255102770489459) -->
- <skip />
- <!-- no translation found for sim_done_button (827949989369963775) -->
- <skip />
- <!-- no translation found for sim_added_title (3719670512889674693) -->
- <skip />
- <!-- no translation found for sim_added_message (1209265974048554242) -->
- <skip />
- <!-- no translation found for sim_restart_button (4722407842815232347) -->
- <skip />
+ <string name="sim_removed_title" msgid="6227712319223226185">"Simkaart verwijderd"</string>
+ <string name="sim_removed_message" msgid="2064255102770489459">"Het mobiele netwerk is niet beschikbaar totdat u de simkaart vervangt."</string>
+ <string name="sim_done_button" msgid="827949989369963775">"Gereed"</string>
+ <string name="sim_added_title" msgid="3719670512889674693">"Simkaart aangesloten"</string>
+ <string name="sim_added_message" msgid="1209265974048554242">"U moet uw apparaat opnieuw starten voor toegang tot het mobiele netwerk."</string>
+ <string name="sim_restart_button" msgid="4722407842815232347">"Opnieuw starten"</string>
<string name="time_picker_dialog_title" msgid="8349362623068819295">"Tijd instellen"</string>
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Datum instellen"</string>
<string name="date_time_set" msgid="5777075614321087758">"Instellen"</string>
@@ -983,8 +963,7 @@
<string name="usb_mtp_notification_title" msgid="3699913097391550394">"Gekoppeld als media-apparaat"</string>
<string name="usb_ptp_notification_title" msgid="1960817192216064833">"Gekoppeld als camera"</string>
<string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"Gekoppeld als installatieprogramma"</string>
- <!-- no translation found for usb_accessory_notification_title (7848236974087653666) -->
- <skip />
+ <string name="usb_accessory_notification_title" msgid="7848236974087653666">"Aangesloten op een USB-accessoire"</string>
<string name="usb_notification_message" msgid="4447869605109736382">"Raak aan voor andere USB-opties"</string>
<string name="extmedia_format_title" product="nosdcard" msgid="7980995592595097841">"USB-opslag formatt."</string>
<string name="extmedia_format_title" product="default" msgid="8663247929551095854">"SD-kaart formatteren"</string>
@@ -1104,6 +1083,22 @@
<string name="choose_account_label" msgid="4191313562041125787">"Selecteer een account"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Hoger"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Lager"</string>
+ <!-- no translation found for checkbox_checked (7222044992652711167) -->
+ <skip />
+ <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
+ <skip />
+ <!-- no translation found for radiobutton_selected (8603599808486581511) -->
+ <skip />
+ <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
+ <skip />
+ <!-- no translation found for switch_on (551417728476977311) -->
+ <skip />
+ <!-- no translation found for switch_off (7249798614327155088) -->
+ <skip />
+ <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
+ <skip />
+ <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"Navigeren naar startpositie"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Omhoog navigeren"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Meer opties"</string>
@@ -1117,6 +1112,14 @@
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"4G-gegevens uitgeschakeld"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Mobiele gegevens uitgeschakeld"</string>
<string name="data_usage_limit_body" msgid="2182247539226163759">"tik om in te schakelen"</string>
+ <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
+ <skip />
+ <!-- no translation found for data_usage_4g_limit_snoozed_title (1106562779311209039) -->
+ <skip />
+ <!-- no translation found for data_usage_mobile_limit_snoozed_title (279240572165412168) -->
+ <skip />
+ <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <skip />
<string name="ssl_certificate" msgid="6510040486049237639">"Beveiligingscertificaat"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Dit certificaat is geldig."</string>
<string name="issued_to" msgid="454239480274921032">"Uitgegeven voor:"</string>
@@ -1134,6 +1137,5 @@
<string name="activity_chooser_view_see_all" msgid="180268188117163072">"Alle bekijken..."</string>
<string name="activity_chooser_view_dialog_title_default" msgid="3325054276356556835">"Activiteit selecteren"</string>
<string name="share_action_provider_share_with" msgid="1791316789651185229">"Delen met..."</string>
- <!-- no translation found for status_bar_device_locked (3092703448690669768) -->
- <skip />
+ <string name="status_bar_device_locked" msgid="3092703448690669768">"Apparaat vergrendeld."</string>
</resources>
diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml
index eedf51a..2d99ef0 100644
--- a/core/res/res/values-pl/strings.xml
+++ b/core/res/res/values-pl/strings.xml
@@ -262,10 +262,8 @@
<string name="permdesc_readInputState" msgid="5132879321450325445">"Pozwala aplikacjom na śledzenie naciskanych klawiszy, nawet podczas pracy z innym programem (na przykład podczas wpisywania hasła). Nigdy nie powinno być potrzebne normalnym aplikacjom."</string>
<string name="permlab_bindInputMethod" msgid="3360064620230515776">"powiązanie ze sposobem wprowadzania tekstu"</string>
<string name="permdesc_bindInputMethod" msgid="3734838321027317228">"Pozwala na powiązanie wybranego sposobu wprowadzania tekstu z interfejsem najwyższego poziomu. To uprawnienie nie powinno być nigdy wymagane przez zwykłe aplikacje."</string>
- <!-- no translation found for permlab_bindTextService (7358378401915287938) -->
- <skip />
- <!-- no translation found for permdesc_bindTextService (172508880651909350) -->
- <skip />
+ <string name="permlab_bindTextService" msgid="7358378401915287938">"powiąż z usługą SMS"</string>
+ <string name="permdesc_bindTextService" msgid="172508880651909350">"Zezwala posiadaczowi na utworzenie powiązania z interfejsem najwyższego poziomu usługi tekstowej (np. SpellCheckerService). Opcja nie powinna być nigdy potrzebna w przypadku zwykłych aplikacji."</string>
<string name="permlab_bindWallpaper" msgid="8716400279937856462">"powiązanie z tapetą"</string>
<string name="permdesc_bindWallpaper" msgid="5287754520361915347">"Umożliwia posiadaczowi powiązać interfejs najwyższego poziomu dla tapety. Nie powinno być nigdy potrzebne w przypadku zwykłych aplikacji."</string>
<string name="permlab_bindRemoteViews" msgid="5697987759897367099">"powiązanie z usługą widżetów"</string>
@@ -724,10 +722,8 @@
<string name="permdesc_writeHistoryBookmarks" product="default" msgid="945571990357114950">"Umożliwia aplikacji modyfikowanie historii lub zakładek przeglądarki zapisanych w telefonie. Złośliwe aplikacje mogą używać tej opcji do usuwania lub modyfikowania danych przeglądarki."</string>
<string name="permlab_setAlarm" msgid="5924401328803615165">"ustaw alarm w budziku"</string>
<string name="permdesc_setAlarm" msgid="5966966598149875082">"Umożliwia aplikacji ustawienie alarmu w zainstalowanej aplikacji budzika. W niektórych aplikacjach budzika funkcja ta może nie być zaimplementowana."</string>
- <!-- no translation found for permlab_readWriteOwnVoicemail (8861946090046059697) -->
- <skip />
- <!-- no translation found for permdesc_readWriteOwnVoicemail (7343490168272921274) -->
- <skip />
+ <string name="permlab_readWriteOwnVoicemail" msgid="8861946090046059697">"Dostęp do wiadomości głosowych zarządzanych przez tę aplikację"</string>
+ <string name="permdesc_readWriteOwnVoicemail" msgid="7343490168272921274">"Zezwala aplikacji na przechowywanie i pobieranie tylko tych wiadomości głosowych, do których ma dostęp powiązana z nią usługa."</string>
<string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"Modyfikowanie uprawnień przeglądarki dotyczących lokalizacji geograficznej"</string>
<string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"Zezwala aplikacji na modyfikowanie uprawnień przeglądarki dotyczących lokalizacji geograficznej. Złośliwe aplikacje mogą używać tej opcji do wysyłania informacji o lokalizacji do dowolnych witryn internetowych."</string>
<string name="save_password_message" msgid="767344687139195790">"Czy chcesz, aby zapamiętać to hasło w przeglądarce?"</string>
@@ -843,7 +839,8 @@
<string name="cut" msgid="3092569408438626261">"Wytnij"</string>
<string name="copy" msgid="2681946229533511987">"Kopiuj"</string>
<string name="paste" msgid="5629880836805036433">"Wklej"</string>
- <string name="pasteDisabled" msgid="7259254654641456570">"Schowek jest pusty"</string>
+ <!-- no translation found for replace (8333608224471746584) -->
+ <skip />
<string name="copyUrl" msgid="2538211579596067402">"Kopiuj adres URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Zaznacz tekst"</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Zaznaczanie tekstu"</string>
@@ -880,12 +877,9 @@
<string name="launch_warning_title" msgid="8323761616052121936">"Aplikacja przekierowana"</string>
<string name="launch_warning_replace" msgid="6202498949970281412">"Aplikacja <xliff:g id="APP_NAME">%1$s</xliff:g> jest uruchomiona."</string>
<string name="launch_warning_original" msgid="188102023021668683">"Aplikacja <xliff:g id="APP_NAME">%1$s</xliff:g> została pierwotnie uruchomiona."</string>
- <!-- no translation found for screen_compat_mode_scale (3202955667675944499) -->
- <skip />
- <!-- no translation found for screen_compat_mode_show (4013878876486655892) -->
- <skip />
- <!-- no translation found for screen_compat_mode_hint (2953716574198046484) -->
- <skip />
+ <string name="screen_compat_mode_scale" msgid="3202955667675944499">"Skala"</string>
+ <string name="screen_compat_mode_show" msgid="4013878876486655892">"Zawsze pokazuj"</string>
+ <string name="screen_compat_mode_hint" msgid="2953716574198046484">"Aby włączyć ponownie, skorzystaj z opcji Ustawienia > Aplikacje > Zarządzaj aplikacjami."</string>
<string name="smv_application" msgid="295583804361236288">"Aplikacja <xliff:g id="APPLICATION">%1$s</xliff:g> (proces <xliff:g id="PROCESS">%2$s</xliff:g>) naruszyła wymuszone przez siebie zasady StrictMode."</string>
<string name="smv_process" msgid="5120397012047462446">"Proces <xliff:g id="PROCESS">%1$s</xliff:g> naruszył wymuszone przez siebie zasady StrictMode."</string>
<string name="heavy_weight_notification" msgid="9087063985776626166">"Działa <xliff:g id="APP">%1$s</xliff:g>"</string>
@@ -919,40 +913,26 @@
<item quantity="one" msgid="1634101450343277345">"Otwórz dostępne sieci Wi-Fi"</item>
<item quantity="other" msgid="7915895323644292768">"Otwórz dostępne sieci Wi-Fi"</item>
</plurals>
- <!-- no translation found for wifi_watchdog_network_disabled (6398650124751302012) -->
- <skip />
- <!-- no translation found for wifi_watchdog_network_disabled_detailed (4659127251774069612) -->
- <skip />
- <!-- no translation found for wifi_p2p_dialog_title (97611782659324517) -->
- <skip />
- <!-- no translation found for wifi_p2p_turnon_message (2804722042556269129) -->
- <skip />
- <!-- no translation found for wifi_p2p_failed_message (6467545523417622335) -->
- <skip />
- <!-- no translation found for wifi_p2p_pbc_go_negotiation_request_message (3170321684621420428) -->
- <skip />
- <!-- no translation found for wifi_p2p_pin_go_negotiation_request_message (5177412094633377308) -->
- <skip />
- <!-- no translation found for wifi_p2p_pin_display_message (2834049169114922902) -->
- <skip />
+ <string name="wifi_watchdog_network_disabled" msgid="6398650124751302012">"Sieć Wi-Fi została wyłączona."</string>
+ <string name="wifi_watchdog_network_disabled_detailed" msgid="4659127251774069612">"Sieć Wi-Fi została tymczasowo wyłączona z powodu niskiej jakości połączenia."</string>
+ <string name="wifi_p2p_dialog_title" msgid="97611782659324517">"Wi-Fi Direct"</string>
+ <string name="wifi_p2p_turnon_message" msgid="2804722042556269129">"Rozpocznij pracę w trybie Wi-Fi Direct. Spowoduje to wyłączenie trybu klienta lub punktu dostępu Wi-Fi."</string>
+ <string name="wifi_p2p_failed_message" msgid="6467545523417622335">"Nie można uruchomić Wi-Fi Direct."</string>
+ <string name="wifi_p2p_pbc_go_negotiation_request_message" msgid="3170321684621420428">"Odebrano żądanie konfiguracji połączenia Wi-Fi Direct z urządzenia <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Kliknij przycisk OK, aby zaakceptować."</string>
+ <string name="wifi_p2p_pin_go_negotiation_request_message" msgid="5177412094633377308">"Otrzymano żądanie konfiguracji połączenia Wi-Fi Direct z urządzenia <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Wprowadź kod PIN, aby kontynuować."</string>
+ <string name="wifi_p2p_pin_display_message" msgid="2834049169114922902">"Aby kontynuować konfigurowanie połączenia, na drugim urządzeniu <xliff:g id="P2P_CLIENT_ADDRESS">%2$s</xliff:g> należy wpisać kod PIN WPS <xliff:g id="P2P_WPS_PIN">%1$s</xliff:g>."</string>
<string name="select_character" msgid="3365550120617701745">"Wstaw znak"</string>
<string name="sms_control_default_app_name" msgid="7630529934366549163">"Nieznana aplikacja"</string>
<string name="sms_control_title" msgid="7296612781128917719">"Wysyłanie wiadomości SMS"</string>
<string name="sms_control_message" msgid="1289331457999236205">"Wysyłana jest duża liczba wiadomości SMS. Wybierz „OK”, aby kontynuować, lub „Anuluj”, aby zatrzymać wysyłanie."</string>
<string name="sms_control_yes" msgid="2532062172402615953">"OK"</string>
<string name="sms_control_no" msgid="1715320703137199869">"Anuluj"</string>
- <!-- no translation found for sim_removed_title (6227712319223226185) -->
- <skip />
- <!-- no translation found for sim_removed_message (2064255102770489459) -->
- <skip />
- <!-- no translation found for sim_done_button (827949989369963775) -->
- <skip />
- <!-- no translation found for sim_added_title (3719670512889674693) -->
- <skip />
- <!-- no translation found for sim_added_message (1209265974048554242) -->
- <skip />
- <!-- no translation found for sim_restart_button (4722407842815232347) -->
- <skip />
+ <string name="sim_removed_title" msgid="6227712319223226185">"Karta SIM wyjęta"</string>
+ <string name="sim_removed_message" msgid="2064255102770489459">"Sieć komórkowa będzie niedostępna, dopóki nie włożysz w powrotem karty SIM."</string>
+ <string name="sim_done_button" msgid="827949989369963775">"Gotowe"</string>
+ <string name="sim_added_title" msgid="3719670512889674693">"Dodano kartę SIM"</string>
+ <string name="sim_added_message" msgid="1209265974048554242">"Musisz ponownie uruchomić urządzenie, aby korzystać z sieci komórkowej."</string>
+ <string name="sim_restart_button" msgid="4722407842815232347">"Uruchom ponownie"</string>
<string name="time_picker_dialog_title" msgid="8349362623068819295">"Ustaw godzinę"</string>
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Ustaw datę"</string>
<string name="date_time_set" msgid="5777075614321087758">"Ustaw"</string>
@@ -983,8 +963,7 @@
<string name="usb_mtp_notification_title" msgid="3699913097391550394">"Podłączono jako urządzenie multimedialne."</string>
<string name="usb_ptp_notification_title" msgid="1960817192216064833">"Podłączono jako aparat."</string>
<string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"Podłączono jako nośnik instalacyjny."</string>
- <!-- no translation found for usb_accessory_notification_title (7848236974087653666) -->
- <skip />
+ <string name="usb_accessory_notification_title" msgid="7848236974087653666">"Podłączono akcesorium USB"</string>
<string name="usb_notification_message" msgid="4447869605109736382">"Dotknij, aby wyświetlić inne opcje USB."</string>
<string name="extmedia_format_title" product="nosdcard" msgid="7980995592595097841">"Formatuj nośnik USB"</string>
<string name="extmedia_format_title" product="default" msgid="8663247929551095854">"Formatuj kartę SD"</string>
@@ -1104,6 +1083,22 @@
<string name="choose_account_label" msgid="4191313562041125787">"Wybierz konto"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Zwiększ"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Zmniejsz"</string>
+ <!-- no translation found for checkbox_checked (7222044992652711167) -->
+ <skip />
+ <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
+ <skip />
+ <!-- no translation found for radiobutton_selected (8603599808486581511) -->
+ <skip />
+ <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
+ <skip />
+ <!-- no translation found for switch_on (551417728476977311) -->
+ <skip />
+ <!-- no translation found for switch_off (7249798614327155088) -->
+ <skip />
+ <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
+ <skip />
+ <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"Przejdź do strony głównej"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Przejdź wyżej"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Więcej opcji"</string>
@@ -1117,6 +1112,14 @@
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"Wyłączono transmisję danych 4G"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Wyłączono komórkową transm. danych"</string>
<string name="data_usage_limit_body" msgid="2182247539226163759">"dotknij, aby włączyć"</string>
+ <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
+ <skip />
+ <!-- no translation found for data_usage_4g_limit_snoozed_title (1106562779311209039) -->
+ <skip />
+ <!-- no translation found for data_usage_mobile_limit_snoozed_title (279240572165412168) -->
+ <skip />
+ <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <skip />
<string name="ssl_certificate" msgid="6510040486049237639">"Certyfikat zabezpieczeń"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Certyfikat jest ważny."</string>
<string name="issued_to" msgid="454239480274921032">"Wystawiony dla:"</string>
@@ -1134,6 +1137,5 @@
<string name="activity_chooser_view_see_all" msgid="180268188117163072">"Pokaż wszystkie"</string>
<string name="activity_chooser_view_dialog_title_default" msgid="3325054276356556835">"Wybierz czynność"</string>
<string name="share_action_provider_share_with" msgid="1791316789651185229">"Udostępnij..."</string>
- <!-- no translation found for status_bar_device_locked (3092703448690669768) -->
- <skip />
+ <string name="status_bar_device_locked" msgid="3092703448690669768">"Urządzenie zablokowane."</string>
</resources>
diff --git a/core/res/res/values-pt-rPT/strings.xml b/core/res/res/values-pt-rPT/strings.xml
index c89577d..cae3318 100644
--- a/core/res/res/values-pt-rPT/strings.xml
+++ b/core/res/res/values-pt-rPT/strings.xml
@@ -843,7 +843,8 @@
<string name="cut" msgid="3092569408438626261">"Cortar"</string>
<string name="copy" msgid="2681946229533511987">"Copiar"</string>
<string name="paste" msgid="5629880836805036433">"Colar"</string>
- <string name="pasteDisabled" msgid="7259254654641456570">"Nada para colar"</string>
+ <!-- no translation found for replace (8333608224471746584) -->
+ <skip />
<string name="copyUrl" msgid="2538211579596067402">"Copiar URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Seleccionar texto..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Selecção de texto"</string>
@@ -880,12 +881,9 @@
<string name="launch_warning_title" msgid="8323761616052121936">"Aplicação redireccionada"</string>
<string name="launch_warning_replace" msgid="6202498949970281412">"<xliff:g id="APP_NAME">%1$s</xliff:g> está agora a ser executado."</string>
<string name="launch_warning_original" msgid="188102023021668683">"<xliff:g id="APP_NAME">%1$s</xliff:g> foi originalmente iniciado."</string>
- <!-- no translation found for screen_compat_mode_scale (3202955667675944499) -->
- <skip />
- <!-- no translation found for screen_compat_mode_show (4013878876486655892) -->
- <skip />
- <!-- no translation found for screen_compat_mode_hint (2953716574198046484) -->
- <skip />
+ <string name="screen_compat_mode_scale" msgid="3202955667675944499">"Escala"</string>
+ <string name="screen_compat_mode_show" msgid="4013878876486655892">"Mostrar sempre"</string>
+ <string name="screen_compat_mode_hint" msgid="2953716574198046484">"Reativar modo através das Definições > Aplicações > Gerir aplicações."</string>
<string name="smv_application" msgid="295583804361236288">"A aplicação <xliff:g id="APPLICATION">%1$s</xliff:g> (processo <xliff:g id="PROCESS">%2$s</xliff:g>) violou a política StrictMode auto-imposta."</string>
<string name="smv_process" msgid="5120397012047462446">"O processo <xliff:g id="PROCESS">%1$s</xliff:g> violou a política StrictMode auto-imposta."</string>
<string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> em execução"</string>
@@ -941,18 +939,12 @@
<string name="sms_control_message" msgid="1289331457999236205">"Está a ser enviado um grande número de mensagens SMS. Seleccione \"OK\" para continuar ou \"Cancelar\" para parar o envio."</string>
<string name="sms_control_yes" msgid="2532062172402615953">"OK"</string>
<string name="sms_control_no" msgid="1715320703137199869">"Cancelar"</string>
- <!-- no translation found for sim_removed_title (6227712319223226185) -->
- <skip />
- <!-- no translation found for sim_removed_message (2064255102770489459) -->
- <skip />
- <!-- no translation found for sim_done_button (827949989369963775) -->
- <skip />
- <!-- no translation found for sim_added_title (3719670512889674693) -->
- <skip />
- <!-- no translation found for sim_added_message (1209265974048554242) -->
- <skip />
- <!-- no translation found for sim_restart_button (4722407842815232347) -->
- <skip />
+ <string name="sim_removed_title" msgid="6227712319223226185">"Cartão SIM removido"</string>
+ <string name="sim_removed_message" msgid="2064255102770489459">"A rede de telemóvel só estará disponível quando substituir o cartão SIM."</string>
+ <string name="sim_done_button" msgid="827949989369963775">"Concluído"</string>
+ <string name="sim_added_title" msgid="3719670512889674693">"Cartão SIM adicionado"</string>
+ <string name="sim_added_message" msgid="1209265974048554242">"É necessário reiniciar o aparelho para aceder à rede de telemóvel."</string>
+ <string name="sim_restart_button" msgid="4722407842815232347">"Reiniciar"</string>
<string name="time_picker_dialog_title" msgid="8349362623068819295">"Definir hora"</string>
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Definir data"</string>
<string name="date_time_set" msgid="5777075614321087758">"Definir"</string>
@@ -1104,6 +1096,22 @@
<string name="choose_account_label" msgid="4191313562041125787">"Seleccionar conta"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Aumentar"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Diminuir"</string>
+ <!-- no translation found for checkbox_checked (7222044992652711167) -->
+ <skip />
+ <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
+ <skip />
+ <!-- no translation found for radiobutton_selected (8603599808486581511) -->
+ <skip />
+ <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
+ <skip />
+ <!-- no translation found for switch_on (551417728476977311) -->
+ <skip />
+ <!-- no translation found for switch_off (7249798614327155088) -->
+ <skip />
+ <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
+ <skip />
+ <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"Navegar para página inicial"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Navegar para cima"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Mais opções"</string>
@@ -1117,6 +1125,14 @@
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"Os dados 4G estão desativados"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Os dados móveis estão desativados"</string>
<string name="data_usage_limit_body" msgid="2182247539226163759">"toque para ativar"</string>
+ <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
+ <skip />
+ <!-- no translation found for data_usage_4g_limit_snoozed_title (1106562779311209039) -->
+ <skip />
+ <!-- no translation found for data_usage_mobile_limit_snoozed_title (279240572165412168) -->
+ <skip />
+ <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <skip />
<string name="ssl_certificate" msgid="6510040486049237639">"Certificado de segurança"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Este certificado é válido."</string>
<string name="issued_to" msgid="454239480274921032">"Emitido para:"</string>
diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml
index 1a7e0a8..8f130a6 100644
--- a/core/res/res/values-pt/strings.xml
+++ b/core/res/res/values-pt/strings.xml
@@ -262,10 +262,8 @@
<string name="permdesc_readInputState" msgid="5132879321450325445">"Permite que os aplicativos vejam as teclas que você pressiona, mesmo quando estiver interagindo com outro aplicativo (como ao digitar uma senha). Aplicativos normais não devem precisar disso em momento algum."</string>
<string name="permlab_bindInputMethod" msgid="3360064620230515776">"vincular a um método de entrada"</string>
<string name="permdesc_bindInputMethod" msgid="3734838321027317228">"Permite que o detentor se sujeite à interface de nível superior de um método de entrada. Aplicativos normais não devem precisar disso em momento algum."</string>
- <!-- no translation found for permlab_bindTextService (7358378401915287938) -->
- <skip />
- <!-- no translation found for permdesc_bindTextService (172508880651909350) -->
- <skip />
+ <string name="permlab_bindTextService" msgid="7358378401915287938">"sujeitar-se a um serviço de texto"</string>
+ <string name="permdesc_bindTextService" msgid="172508880651909350">"Permite que o titular se sujeite à interface de nível superior de um serviço de texto (por exemplo, SpellCheckerService). Não deve ser necessário para aplicativos normais."</string>
<string name="permlab_bindWallpaper" msgid="8716400279937856462">"sujeitar-se a um plano de fundo"</string>
<string name="permdesc_bindWallpaper" msgid="5287754520361915347">"Permite que o detentor se sujeite à interface de nível superior de um plano de fundo. Aplicativos normais não devem precisar disso em momento algum."</string>
<string name="permlab_bindRemoteViews" msgid="5697987759897367099">"sujeitar-se a um serviço de widget"</string>
@@ -724,10 +722,8 @@
<string name="permdesc_writeHistoryBookmarks" product="default" msgid="945571990357114950">"Permite que um aplicativo modifique o histórico ou os favoritos do Navegador armazenados no seu telefone. Aplicativos maliciosos podem usar isso para apagar ou modificar os dados do seu Navegador."</string>
<string name="permlab_setAlarm" msgid="5924401328803615165">"definir alarme no despertador"</string>
<string name="permdesc_setAlarm" msgid="5966966598149875082">"Permite que o aplicativo defina um alarme em um aplicativo de despertador instalado. Talvez alguns aplicativos de despertador não implementem esse recurso."</string>
- <!-- no translation found for permlab_readWriteOwnVoicemail (8861946090046059697) -->
- <skip />
- <!-- no translation found for permdesc_readWriteOwnVoicemail (7343490168272921274) -->
- <skip />
+ <string name="permlab_readWriteOwnVoicemail" msgid="8861946090046059697">"Acessar mensagens de voz gerenciadas por este aplicativo"</string>
+ <string name="permdesc_readWriteOwnVoicemail" msgid="7343490168272921274">"Permite que o aplicativo armazene e recupere somente mensagens de voz que seu serviço associado acessa."</string>
<string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"Modifique as permissões de geolocalização do seu navegador"</string>
<string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"Permite que um aplicativo modifique as permissões de geolocalização do navegador. Aplicativos maliciosos podem usar isso para permitir o envio de informações de localização a sites arbitrários."</string>
<string name="save_password_message" msgid="767344687139195790">"Deseja que o navegador lembre desta senha?"</string>
@@ -843,7 +839,8 @@
<string name="cut" msgid="3092569408438626261">"Recortar"</string>
<string name="copy" msgid="2681946229533511987">"Copiar"</string>
<string name="paste" msgid="5629880836805036433">"Colar"</string>
- <string name="pasteDisabled" msgid="7259254654641456570">"Nada para colar"</string>
+ <!-- no translation found for replace (8333608224471746584) -->
+ <skip />
<string name="copyUrl" msgid="2538211579596067402">"Copiar URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Selecionar texto..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Seleção de texto"</string>
@@ -880,12 +877,9 @@
<string name="launch_warning_title" msgid="8323761616052121936">"Aplicativo redirecionado"</string>
<string name="launch_warning_replace" msgid="6202498949970281412">"<xliff:g id="APP_NAME">%1$s</xliff:g> não está em execução."</string>
<string name="launch_warning_original" msgid="188102023021668683">"<xliff:g id="APP_NAME">%1$s</xliff:g> foi iniciado."</string>
- <!-- no translation found for screen_compat_mode_scale (3202955667675944499) -->
- <skip />
- <!-- no translation found for screen_compat_mode_show (4013878876486655892) -->
- <skip />
- <!-- no translation found for screen_compat_mode_hint (2953716574198046484) -->
- <skip />
+ <string name="screen_compat_mode_scale" msgid="3202955667675944499">"Escala"</string>
+ <string name="screen_compat_mode_show" msgid="4013878876486655892">"Mostrar sempre"</string>
+ <string name="screen_compat_mode_hint" msgid="2953716574198046484">"Reativar em Configurações > Aplicativos > Gerenciar aplicativos."</string>
<string name="smv_application" msgid="295583804361236288">"O aplicativo <xliff:g id="APPLICATION">%1$s</xliff:g> (processo <xliff:g id="PROCESS">%2$s</xliff:g>) violou a política StrictMode imposta automaticamente."</string>
<string name="smv_process" msgid="5120397012047462446">"O processo <xliff:g id="PROCESS">%1$s</xliff:g> violou a política StrictMode imposta automaticamente."</string>
<string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> em execução"</string>
@@ -919,40 +913,26 @@
<item quantity="one" msgid="1634101450343277345">"Rede Wi-Fi aberta disponível"</item>
<item quantity="other" msgid="7915895323644292768">"Redes Wi-Fi abertas disponíveis"</item>
</plurals>
- <!-- no translation found for wifi_watchdog_network_disabled (6398650124751302012) -->
- <skip />
- <!-- no translation found for wifi_watchdog_network_disabled_detailed (4659127251774069612) -->
- <skip />
- <!-- no translation found for wifi_p2p_dialog_title (97611782659324517) -->
- <skip />
- <!-- no translation found for wifi_p2p_turnon_message (2804722042556269129) -->
- <skip />
- <!-- no translation found for wifi_p2p_failed_message (6467545523417622335) -->
- <skip />
- <!-- no translation found for wifi_p2p_pbc_go_negotiation_request_message (3170321684621420428) -->
- <skip />
- <!-- no translation found for wifi_p2p_pin_go_negotiation_request_message (5177412094633377308) -->
- <skip />
- <!-- no translation found for wifi_p2p_pin_display_message (2834049169114922902) -->
- <skip />
+ <string name="wifi_watchdog_network_disabled" msgid="6398650124751302012">"Uma rede WiFi foi desativada"</string>
+ <string name="wifi_watchdog_network_disabled_detailed" msgid="4659127251774069612">"Uma rede WiFi foi temporariamente desativada devido a conectividade ruim."</string>
+ <string name="wifi_p2p_dialog_title" msgid="97611782659324517">"WiFi Direct"</string>
+ <string name="wifi_p2p_turnon_message" msgid="2804722042556269129">"Iniciar a operação do WiFi Direct. Isso desligará a operação do ponto de acesso/cliente WiFi."</string>
+ <string name="wifi_p2p_failed_message" msgid="6467545523417622335">"Falha ao iniciar o WiFi Direct"</string>
+ <string name="wifi_p2p_pbc_go_negotiation_request_message" msgid="3170321684621420428">"Solicitação de configuração da conexão do WiFi Direct de <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Clique em OK para aceitar."</string>
+ <string name="wifi_p2p_pin_go_negotiation_request_message" msgid="5177412094633377308">"Solicitação de configuração da conexão do WiFi Direct de <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Digite o pin para prosseguir."</string>
+ <string name="wifi_p2p_pin_display_message" msgid="2834049169114922902">"É necessário inserir o pin WPS <xliff:g id="P2P_WPS_PIN">%1$s</xliff:g> no dispositivo pareado <xliff:g id="P2P_CLIENT_ADDRESS">%2$s</xliff:g> para prosseguir com a configuração da conexão"</string>
<string name="select_character" msgid="3365550120617701745">"Inserir caractere"</string>
<string name="sms_control_default_app_name" msgid="7630529934366549163">"Aplicativo desconhecido"</string>
<string name="sms_control_title" msgid="7296612781128917719">"Enviando mensagens SMS"</string>
<string name="sms_control_message" msgid="1289331457999236205">"Muitas mensagens SMS estão sendo enviadas. Selecione \"OK\" para continuar ou \"Cancelar\" para interromper o envio."</string>
<string name="sms_control_yes" msgid="2532062172402615953">"OK"</string>
<string name="sms_control_no" msgid="1715320703137199869">"Cancelar"</string>
- <!-- no translation found for sim_removed_title (6227712319223226185) -->
- <skip />
- <!-- no translation found for sim_removed_message (2064255102770489459) -->
- <skip />
- <!-- no translation found for sim_done_button (827949989369963775) -->
- <skip />
- <!-- no translation found for sim_added_title (3719670512889674693) -->
- <skip />
- <!-- no translation found for sim_added_message (1209265974048554242) -->
- <skip />
- <!-- no translation found for sim_restart_button (4722407842815232347) -->
- <skip />
+ <string name="sim_removed_title" msgid="6227712319223226185">"Cartão SIM removido"</string>
+ <string name="sim_removed_message" msgid="2064255102770489459">"A rede móvel estará indisponível até que você substitua o cartão SIM."</string>
+ <string name="sim_done_button" msgid="827949989369963775">"Concluído"</string>
+ <string name="sim_added_title" msgid="3719670512889674693">"Cartão SIM adicionado"</string>
+ <string name="sim_added_message" msgid="1209265974048554242">"Reinicie o dispositivo para acessar a rede móvel."</string>
+ <string name="sim_restart_button" msgid="4722407842815232347">"Reiniciar"</string>
<string name="time_picker_dialog_title" msgid="8349362623068819295">"Definir hora"</string>
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Definir data"</string>
<string name="date_time_set" msgid="5777075614321087758">"Definir"</string>
@@ -983,8 +963,7 @@
<string name="usb_mtp_notification_title" msgid="3699913097391550394">"Conectado como um dispositivo de mídia"</string>
<string name="usb_ptp_notification_title" msgid="1960817192216064833">"Conectadas como uma câmera"</string>
<string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"Conectados como um instalador"</string>
- <!-- no translation found for usb_accessory_notification_title (7848236974087653666) -->
- <skip />
+ <string name="usb_accessory_notification_title" msgid="7848236974087653666">"Conectado a um acessório USB"</string>
<string name="usb_notification_message" msgid="4447869605109736382">"Toque para obter outras opções USB"</string>
<string name="extmedia_format_title" product="nosdcard" msgid="7980995592595097841">"Formatar armaz. USB"</string>
<string name="extmedia_format_title" product="default" msgid="8663247929551095854">"Formatar cartão SD"</string>
@@ -1104,6 +1083,22 @@
<string name="choose_account_label" msgid="4191313562041125787">"Selecione uma conta"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Incremento"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Redução"</string>
+ <!-- no translation found for checkbox_checked (7222044992652711167) -->
+ <skip />
+ <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
+ <skip />
+ <!-- no translation found for radiobutton_selected (8603599808486581511) -->
+ <skip />
+ <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
+ <skip />
+ <!-- no translation found for switch_on (551417728476977311) -->
+ <skip />
+ <!-- no translation found for switch_off (7249798614327155088) -->
+ <skip />
+ <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
+ <skip />
+ <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"Navegar na página inicial"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Navegar para cima"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Mais opções"</string>
@@ -1117,6 +1112,14 @@
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"Dados 4G desativados"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Dados móveis desativados"</string>
<string name="data_usage_limit_body" msgid="2182247539226163759">"toque para ativar"</string>
+ <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
+ <skip />
+ <!-- no translation found for data_usage_4g_limit_snoozed_title (1106562779311209039) -->
+ <skip />
+ <!-- no translation found for data_usage_mobile_limit_snoozed_title (279240572165412168) -->
+ <skip />
+ <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <skip />
<string name="ssl_certificate" msgid="6510040486049237639">"Certificado de segurança"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Este certificado é válido."</string>
<string name="issued_to" msgid="454239480274921032">"Emitido para:"</string>
@@ -1132,10 +1135,7 @@
<string name="sha256_fingerprint" msgid="4391271286477279263">"Impressão digital SHA-256"</string>
<string name="sha1_fingerprint" msgid="7930330235269404581">"Impressão digital SHA-1"</string>
<string name="activity_chooser_view_see_all" msgid="180268188117163072">"Ver todos..."</string>
- <!-- no translation found for activity_chooser_view_dialog_title_default (3325054276356556835) -->
- <skip />
- <!-- no translation found for share_action_provider_share_with (1791316789651185229) -->
- <skip />
- <!-- no translation found for status_bar_device_locked (3092703448690669768) -->
- <skip />
+ <string name="activity_chooser_view_dialog_title_default" msgid="3325054276356556835">"Selecionar atividade"</string>
+ <string name="share_action_provider_share_with" msgid="1791316789651185229">"Compartilhar com..."</string>
+ <string name="status_bar_device_locked" msgid="3092703448690669768">"Dispositivo bloqueado."</string>
</resources>
diff --git a/core/res/res/values-rm/strings.xml b/core/res/res/values-rm/strings.xml
index 4f0e385..8e9b711 100644
--- a/core/res/res/values-rm/strings.xml
+++ b/core/res/res/values-rm/strings.xml
@@ -937,7 +937,7 @@
<string name="cut" msgid="3092569408438626261">"Tagliar ora"</string>
<string name="copy" msgid="2681946229533511987">"Copiar"</string>
<string name="paste" msgid="5629880836805036433">"Encollar"</string>
- <!-- no translation found for pasteDisabled (7259254654641456570) -->
+ <!-- no translation found for replace (8333608224471746584) -->
<skip />
<string name="copyUrl" msgid="2538211579596067402">"Copiar l\'URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Selecziunar text…"</string>
@@ -1245,6 +1245,22 @@
<skip />
<!-- no translation found for number_picker_decrement_button (2576606679160067262) -->
<skip />
+ <!-- no translation found for checkbox_checked (7222044992652711167) -->
+ <skip />
+ <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
+ <skip />
+ <!-- no translation found for radiobutton_selected (8603599808486581511) -->
+ <skip />
+ <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
+ <skip />
+ <!-- no translation found for switch_on (551417728476977311) -->
+ <skip />
+ <!-- no translation found for switch_off (7249798614327155088) -->
+ <skip />
+ <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
+ <skip />
+ <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
+ <skip />
<!-- no translation found for action_bar_home_description (5293600496601490216) -->
<skip />
<!-- no translation found for action_bar_up_description (2237496562952152589) -->
@@ -1271,6 +1287,14 @@
<skip />
<!-- no translation found for data_usage_limit_body (2182247539226163759) -->
<skip />
+ <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
+ <skip />
+ <!-- no translation found for data_usage_4g_limit_snoozed_title (1106562779311209039) -->
+ <skip />
+ <!-- no translation found for data_usage_mobile_limit_snoozed_title (279240572165412168) -->
+ <skip />
+ <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <skip />
<!-- no translation found for ssl_certificate (6510040486049237639) -->
<skip />
<!-- no translation found for ssl_certificate_is_valid (6825263250774569373) -->
diff --git a/core/res/res/values-ro/strings.xml b/core/res/res/values-ro/strings.xml
index 61a0d7b..cec0e69 100644
--- a/core/res/res/values-ro/strings.xml
+++ b/core/res/res/values-ro/strings.xml
@@ -843,7 +843,8 @@
<string name="cut" msgid="3092569408438626261">"Decupaţi"</string>
<string name="copy" msgid="2681946229533511987">"Copiaţi"</string>
<string name="paste" msgid="5629880836805036433">"Inseraţi"</string>
- <string name="pasteDisabled" msgid="7259254654641456570">"Nimic de inserat"</string>
+ <!-- no translation found for replace (8333608224471746584) -->
+ <skip />
<string name="copyUrl" msgid="2538211579596067402">"Copiaţi adresa URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Selectaţi text..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Selectare text"</string>
@@ -880,12 +881,9 @@
<string name="launch_warning_title" msgid="8323761616052121936">"Aplicaţie redirecţionată"</string>
<string name="launch_warning_replace" msgid="6202498949970281412">"<xliff:g id="APP_NAME">%1$s</xliff:g> funcţionează acum."</string>
<string name="launch_warning_original" msgid="188102023021668683">"<xliff:g id="APP_NAME">%1$s</xliff:g> a fost lansată iniţial."</string>
- <!-- no translation found for screen_compat_mode_scale (3202955667675944499) -->
- <skip />
- <!-- no translation found for screen_compat_mode_show (4013878876486655892) -->
- <skip />
- <!-- no translation found for screen_compat_mode_hint (2953716574198046484) -->
- <skip />
+ <string name="screen_compat_mode_scale" msgid="3202955667675944499">"Scară"</string>
+ <string name="screen_compat_mode_show" msgid="4013878876486655892">"Afişaţi întotdeauna"</string>
+ <string name="screen_compat_mode_hint" msgid="2953716574198046484">"Reactivaţi această funcţie din Setări > Aplicaţii > Gestionaţi aplicaţii."</string>
<string name="smv_application" msgid="295583804361236288">"Aplicaţia <xliff:g id="APPLICATION">%1$s</xliff:g> (procesul <xliff:g id="PROCESS">%2$s</xliff:g>) a încălcat propria politică StrictMode."</string>
<string name="smv_process" msgid="5120397012047462446">"Procesul <xliff:g id="PROCESS">%1$s</xliff:g> a încălcat propria politică StrictMode."</string>
<string name="heavy_weight_notification" msgid="9087063985776626166">"Rulează <xliff:g id="APP">%1$s</xliff:g>"</string>
@@ -941,18 +939,12 @@
<string name="sms_control_message" msgid="1289331457999236205">"În acest moment se trimit multe mesaje SMS. Selectaţi „OK” pentru a continua sau „Anulaţi” pentru a opri trimiterea."</string>
<string name="sms_control_yes" msgid="2532062172402615953">"OK"</string>
<string name="sms_control_no" msgid="1715320703137199869">"Anulaţi"</string>
- <!-- no translation found for sim_removed_title (6227712319223226185) -->
- <skip />
- <!-- no translation found for sim_removed_message (2064255102770489459) -->
- <skip />
- <!-- no translation found for sim_done_button (827949989369963775) -->
- <skip />
- <!-- no translation found for sim_added_title (3719670512889674693) -->
- <skip />
- <!-- no translation found for sim_added_message (1209265974048554242) -->
- <skip />
- <!-- no translation found for sim_restart_button (4722407842815232347) -->
- <skip />
+ <string name="sim_removed_title" msgid="6227712319223226185">"Card SIM eliminat"</string>
+ <string name="sim_removed_message" msgid="2064255102770489459">"Reţea mobilă va fi indisponibilă până la înlocuirea cardului SIM."</string>
+ <string name="sim_done_button" msgid="827949989369963775">"Terminat"</string>
+ <string name="sim_added_title" msgid="3719670512889674693">"Card SIM adăugat"</string>
+ <string name="sim_added_message" msgid="1209265974048554242">"Trebuie să reporniţi dispozitivul pentru a accesa reţeaua de telefonie mobilă."</string>
+ <string name="sim_restart_button" msgid="4722407842815232347">"Reporniţi"</string>
<string name="time_picker_dialog_title" msgid="8349362623068819295">"Setaţi ora"</string>
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Setaţi data"</string>
<string name="date_time_set" msgid="5777075614321087758">"Setaţi"</string>
@@ -1104,6 +1096,22 @@
<string name="choose_account_label" msgid="4191313562041125787">"Selectaţi un cont"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Incrementaţi"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Decrementaţi"</string>
+ <!-- no translation found for checkbox_checked (7222044992652711167) -->
+ <skip />
+ <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
+ <skip />
+ <!-- no translation found for radiobutton_selected (8603599808486581511) -->
+ <skip />
+ <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
+ <skip />
+ <!-- no translation found for switch_on (551417728476977311) -->
+ <skip />
+ <!-- no translation found for switch_off (7249798614327155088) -->
+ <skip />
+ <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
+ <skip />
+ <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"Navigaţi la ecranul de pornire"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Navigaţi în sus"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Mai multe opţiuni"</string>
@@ -1117,6 +1125,14 @@
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"Datele 4G au fost dezactivate"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Datele mobile au fost dezactiv."</string>
<string name="data_usage_limit_body" msgid="2182247539226163759">"atingeţi pentru activare"</string>
+ <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
+ <skip />
+ <!-- no translation found for data_usage_4g_limit_snoozed_title (1106562779311209039) -->
+ <skip />
+ <!-- no translation found for data_usage_mobile_limit_snoozed_title (279240572165412168) -->
+ <skip />
+ <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <skip />
<string name="ssl_certificate" msgid="6510040486049237639">"Certificat de securitate"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Certificatul este valid."</string>
<string name="issued_to" msgid="454239480274921032">"Emis către:"</string>
@@ -1132,10 +1148,8 @@
<string name="sha256_fingerprint" msgid="4391271286477279263">"Amprentă SHA-256:"</string>
<string name="sha1_fingerprint" msgid="7930330235269404581">"Amprentă SHA-1:"</string>
<string name="activity_chooser_view_see_all" msgid="180268188117163072">"Afişaţi-le pe toate..."</string>
- <!-- no translation found for activity_chooser_view_dialog_title_default (3325054276356556835) -->
- <skip />
- <!-- no translation found for share_action_provider_share_with (1791316789651185229) -->
- <skip />
+ <string name="activity_chooser_view_dialog_title_default" msgid="3325054276356556835">"Selectaţi o activitate"</string>
+ <string name="share_action_provider_share_with" msgid="1791316789651185229">"Distribuiţi cu..."</string>
<!-- no translation found for status_bar_device_locked (3092703448690669768) -->
<skip />
</resources>
diff --git a/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml
index d2907ae..e05039c 100644
--- a/core/res/res/values-ru/strings.xml
+++ b/core/res/res/values-ru/strings.xml
@@ -843,7 +843,8 @@
<string name="cut" msgid="3092569408438626261">"Вырезать"</string>
<string name="copy" msgid="2681946229533511987">"Копировать"</string>
<string name="paste" msgid="5629880836805036433">"Вставить"</string>
- <string name="pasteDisabled" msgid="7259254654641456570">"Текст для вставки отсутствует"</string>
+ <!-- no translation found for replace (8333608224471746584) -->
+ <skip />
<string name="copyUrl" msgid="2538211579596067402">"Копировать URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Выбрать текст..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Выбор текста"</string>
@@ -880,12 +881,9 @@
<string name="launch_warning_title" msgid="8323761616052121936">"Приложение перенаправлено"</string>
<string name="launch_warning_replace" msgid="6202498949970281412">"Приложение <xliff:g id="APP_NAME">%1$s</xliff:g> выполняется."</string>
<string name="launch_warning_original" msgid="188102023021668683">"Изначально было запущено приложение <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
- <!-- no translation found for screen_compat_mode_scale (3202955667675944499) -->
- <skip />
- <!-- no translation found for screen_compat_mode_show (4013878876486655892) -->
- <skip />
- <!-- no translation found for screen_compat_mode_hint (2953716574198046484) -->
- <skip />
+ <string name="screen_compat_mode_scale" msgid="3202955667675944499">"Масштаб"</string>
+ <string name="screen_compat_mode_show" msgid="4013878876486655892">"Всегда показывать"</string>
+ <string name="screen_compat_mode_hint" msgid="2953716574198046484">"Включите еще раз в меню \"Настройки > Приложения > Управление приложениями\"."</string>
<string name="smv_application" msgid="295583804361236288">"Приложение <xliff:g id="APPLICATION">%1$s</xliff:g> (процесс <xliff:g id="PROCESS">%2$s</xliff:g>) нарушило собственную политику StrictMode."</string>
<string name="smv_process" msgid="5120397012047462446">"Процесс <xliff:g id="PROCESS">%1$s</xliff:g> нарушил собственную политику StrictMode."</string>
<string name="heavy_weight_notification" msgid="9087063985776626166">"Приложение <xliff:g id="APP">%1$s</xliff:g> запущено"</string>
@@ -941,18 +939,12 @@
<string name="sms_control_message" msgid="1289331457999236205">"Отправляется большое количество SMS-сообщений. Нажмите \"ОК\" для продолжения или \"Отмена\" для прекращения отправки."</string>
<string name="sms_control_yes" msgid="2532062172402615953">"ОК"</string>
<string name="sms_control_no" msgid="1715320703137199869">"Отмена"</string>
- <!-- no translation found for sim_removed_title (6227712319223226185) -->
- <skip />
- <!-- no translation found for sim_removed_message (2064255102770489459) -->
- <skip />
- <!-- no translation found for sim_done_button (827949989369963775) -->
- <skip />
- <!-- no translation found for sim_added_title (3719670512889674693) -->
- <skip />
- <!-- no translation found for sim_added_message (1209265974048554242) -->
- <skip />
- <!-- no translation found for sim_restart_button (4722407842815232347) -->
- <skip />
+ <string name="sim_removed_title" msgid="6227712319223226185">"SIM-карта удалена"</string>
+ <string name="sim_removed_message" msgid="2064255102770489459">"Мобильная сеть будет недоступна, пока вы не замените SIM-карту."</string>
+ <string name="sim_done_button" msgid="827949989369963775">"Готово"</string>
+ <string name="sim_added_title" msgid="3719670512889674693">"SIM-карта добавлена"</string>
+ <string name="sim_added_message" msgid="1209265974048554242">"Для доступа к мобильной сети необходимо перезагрузить устройство."</string>
+ <string name="sim_restart_button" msgid="4722407842815232347">"Перезапуск"</string>
<string name="time_picker_dialog_title" msgid="8349362623068819295">"Настройка времени"</string>
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Настройка даты"</string>
<string name="date_time_set" msgid="5777075614321087758">"Установить"</string>
@@ -1104,6 +1096,22 @@
<string name="choose_account_label" msgid="4191313562041125787">"Выберите аккаунт"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Увеличить"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Уменьшить"</string>
+ <!-- no translation found for checkbox_checked (7222044992652711167) -->
+ <skip />
+ <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
+ <skip />
+ <!-- no translation found for radiobutton_selected (8603599808486581511) -->
+ <skip />
+ <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
+ <skip />
+ <!-- no translation found for switch_on (551417728476977311) -->
+ <skip />
+ <!-- no translation found for switch_off (7249798614327155088) -->
+ <skip />
+ <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
+ <skip />
+ <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"Перейти на главную"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Перейти вверх"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Ещё"</string>
@@ -1117,6 +1125,14 @@
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"Передача данных 4G отключена"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Мобильный Интернет отключен"</string>
<string name="data_usage_limit_body" msgid="2182247539226163759">"Нажмите, чтобы снова включить."</string>
+ <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
+ <skip />
+ <!-- no translation found for data_usage_4g_limit_snoozed_title (1106562779311209039) -->
+ <skip />
+ <!-- no translation found for data_usage_mobile_limit_snoozed_title (279240572165412168) -->
+ <skip />
+ <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <skip />
<string name="ssl_certificate" msgid="6510040486049237639">"Сертификат безопасности"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Этот сертификат действителен."</string>
<string name="issued_to" msgid="454239480274921032">"Кому выдан:"</string>
@@ -1132,10 +1148,8 @@
<string name="sha256_fingerprint" msgid="4391271286477279263">"Отпечаток SHA-256:"</string>
<string name="sha1_fingerprint" msgid="7930330235269404581">"Отпечаток SHA-1:"</string>
<string name="activity_chooser_view_see_all" msgid="180268188117163072">"Просмотреть все"</string>
- <!-- no translation found for activity_chooser_view_dialog_title_default (3325054276356556835) -->
- <skip />
- <!-- no translation found for share_action_provider_share_with (1791316789651185229) -->
- <skip />
+ <string name="activity_chooser_view_dialog_title_default" msgid="3325054276356556835">"Выбор действия"</string>
+ <string name="share_action_provider_share_with" msgid="1791316789651185229">"Поделиться с..."</string>
<!-- no translation found for status_bar_device_locked (3092703448690669768) -->
<skip />
</resources>
diff --git a/core/res/res/values-sk/strings.xml b/core/res/res/values-sk/strings.xml
index 4af1a79..ccd0d56 100644
--- a/core/res/res/values-sk/strings.xml
+++ b/core/res/res/values-sk/strings.xml
@@ -843,7 +843,8 @@
<string name="cut" msgid="3092569408438626261">"Vystrihnúť"</string>
<string name="copy" msgid="2681946229533511987">"Kopírovať"</string>
<string name="paste" msgid="5629880836805036433">"Prilepiť"</string>
- <string name="pasteDisabled" msgid="7259254654641456570">"Nie je čo vložiť"</string>
+ <!-- no translation found for replace (8333608224471746584) -->
+ <skip />
<string name="copyUrl" msgid="2538211579596067402">"Skopírovať adresu URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Vybrať text..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Výber textu"</string>
@@ -880,12 +881,9 @@
<string name="launch_warning_title" msgid="8323761616052121936">"Aplikácia bola presmerov."</string>
<string name="launch_warning_replace" msgid="6202498949970281412">"Je spustená aplikácia <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
<string name="launch_warning_original" msgid="188102023021668683">"Pôvodne bola spustená aplikácia <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
- <!-- no translation found for screen_compat_mode_scale (3202955667675944499) -->
- <skip />
- <!-- no translation found for screen_compat_mode_show (4013878876486655892) -->
- <skip />
- <!-- no translation found for screen_compat_mode_hint (2953716574198046484) -->
- <skip />
+ <string name="screen_compat_mode_scale" msgid="3202955667675944499">"Prispôsobiť veľkosť"</string>
+ <string name="screen_compat_mode_show" msgid="4013878876486655892">"Vždy zobraziť"</string>
+ <string name="screen_compat_mode_hint" msgid="2953716574198046484">"Toto nastavenie je možné znova povoliť v sekcii Nastavenia > Aplikácie > Správa aplikácií."</string>
<string name="smv_application" msgid="295583804361236288">"Aplikácia <xliff:g id="APPLICATION">%1$s</xliff:g> (proces <xliff:g id="PROCESS">%2$s</xliff:g>) porušila svoje vlastné vynútené pravidlá StrictMode."</string>
<string name="smv_process" msgid="5120397012047462446">"Proces <xliff:g id="PROCESS">%1$s</xliff:g> porušil svoje vlastné vynútené pravidlá StrictMode."</string>
<string name="heavy_weight_notification" msgid="9087063985776626166">"Spustená aplikácia: <xliff:g id="APP">%1$s</xliff:g>"</string>
@@ -941,18 +939,12 @@
<string name="sms_control_message" msgid="1289331457999236205">"Odosiela sa veľký počet správ SMS. Ak chcete pokračovať, vyberte OK. Ak chcete odosielanie ukončiť, vyberte Zrušiť."</string>
<string name="sms_control_yes" msgid="2532062172402615953">"OK"</string>
<string name="sms_control_no" msgid="1715320703137199869">"Zrušiť"</string>
- <!-- no translation found for sim_removed_title (6227712319223226185) -->
- <skip />
- <!-- no translation found for sim_removed_message (2064255102770489459) -->
- <skip />
- <!-- no translation found for sim_done_button (827949989369963775) -->
- <skip />
- <!-- no translation found for sim_added_title (3719670512889674693) -->
- <skip />
- <!-- no translation found for sim_added_message (1209265974048554242) -->
- <skip />
- <!-- no translation found for sim_restart_button (4722407842815232347) -->
- <skip />
+ <string name="sim_removed_title" msgid="6227712319223226185">"Karta SIM bola odobraná"</string>
+ <string name="sim_removed_message" msgid="2064255102770489459">"Mobilná sieť bude k dispozícii až keď vymeníte kartu SIM."</string>
+ <string name="sim_done_button" msgid="827949989369963775">"Hotovo"</string>
+ <string name="sim_added_title" msgid="3719670512889674693">"Bola pridaná karta SIM"</string>
+ <string name="sim_added_message" msgid="1209265974048554242">"Ak chcete získať prístup k mobilnej sieti, musíte zariadenie reštartovať."</string>
+ <string name="sim_restart_button" msgid="4722407842815232347">"Reštartovať"</string>
<string name="time_picker_dialog_title" msgid="8349362623068819295">"Nastaviť čas"</string>
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Nastaviť dátum"</string>
<string name="date_time_set" msgid="5777075614321087758">"Nastaviť"</string>
@@ -1104,6 +1096,22 @@
<string name="choose_account_label" msgid="4191313562041125787">"Vybrať účet"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Zvýšenie"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Zníženie"</string>
+ <!-- no translation found for checkbox_checked (7222044992652711167) -->
+ <skip />
+ <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
+ <skip />
+ <!-- no translation found for radiobutton_selected (8603599808486581511) -->
+ <skip />
+ <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
+ <skip />
+ <!-- no translation found for switch_on (551417728476977311) -->
+ <skip />
+ <!-- no translation found for switch_off (7249798614327155088) -->
+ <skip />
+ <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
+ <skip />
+ <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"Prejsť na plochu"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Prejsť na"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Viac možností"</string>
@@ -1117,6 +1125,14 @@
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"Dátové prenosy 4G zakázané"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Mobilné dátové prenosy zakázané"</string>
<string name="data_usage_limit_body" msgid="2182247539226163759">"klepnutím povolíte"</string>
+ <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
+ <skip />
+ <!-- no translation found for data_usage_4g_limit_snoozed_title (1106562779311209039) -->
+ <skip />
+ <!-- no translation found for data_usage_mobile_limit_snoozed_title (279240572165412168) -->
+ <skip />
+ <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <skip />
<string name="ssl_certificate" msgid="6510040486049237639">"Certifikát zabezpečenia"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Certifikát je platný."</string>
<string name="issued_to" msgid="454239480274921032">"Vydané pre:"</string>
@@ -1132,10 +1148,8 @@
<string name="sha256_fingerprint" msgid="4391271286477279263">"Digitálny odtlačok SHA-256:"</string>
<string name="sha1_fingerprint" msgid="7930330235269404581">"Digitálny odtlačok SHA-1:"</string>
<string name="activity_chooser_view_see_all" msgid="180268188117163072">"Zobraziť všetko..."</string>
- <!-- no translation found for activity_chooser_view_dialog_title_default (3325054276356556835) -->
- <skip />
- <!-- no translation found for share_action_provider_share_with (1791316789651185229) -->
- <skip />
+ <string name="activity_chooser_view_dialog_title_default" msgid="3325054276356556835">"Vybrať aktivitu"</string>
+ <string name="share_action_provider_share_with" msgid="1791316789651185229">"Zdieľať s..."</string>
<!-- no translation found for status_bar_device_locked (3092703448690669768) -->
<skip />
</resources>
diff --git a/core/res/res/values-sl/strings.xml b/core/res/res/values-sl/strings.xml
index 9b45470..40a1118 100644
--- a/core/res/res/values-sl/strings.xml
+++ b/core/res/res/values-sl/strings.xml
@@ -262,10 +262,8 @@
<string name="permdesc_readInputState" msgid="5132879321450325445">"Programu dovoljuje spremljanje tipk, ki jih pritisnete med interakcijo z drugim programom (na primer vnos gesla). Navadni programi tega nikoli ne potrebujejo."</string>
<string name="permlab_bindInputMethod" msgid="3360064620230515776">"povezovanje z načinom vnosa"</string>
<string name="permdesc_bindInputMethod" msgid="3734838321027317228">"Dovoljuje lastniku, da se poveže z vmesnikom načina vnosa najvišje ravni. Tega nikoli ni treba uporabiti za navadne programe."</string>
- <!-- no translation found for permlab_bindTextService (7358378401915287938) -->
- <skip />
- <!-- no translation found for permdesc_bindTextService (172508880651909350) -->
- <skip />
+ <string name="permlab_bindTextService" msgid="7358378401915287938">"poveži z besedilno storitvijo"</string>
+ <string name="permdesc_bindTextService" msgid="172508880651909350">"Dovoljuje, da se lastnik poveže z vmesnikom besedilne storitve najvišje ravni (npr. SpellCheckerService). Tega nikoli ni treba uporabiti za navadne programe."</string>
<string name="permlab_bindWallpaper" msgid="8716400279937856462">"povezovanje z ozadjem"</string>
<string name="permdesc_bindWallpaper" msgid="5287754520361915347">"Dovoljuje, da se lastnik poveže z vmesnikom ozadja najvišje ravni. Tega nikoli ni treba uporabiti za navadne programe."</string>
<string name="permlab_bindRemoteViews" msgid="5697987759897367099">"poveži s storitvijo pripomočka"</string>
@@ -724,10 +722,8 @@
<string name="permdesc_writeHistoryBookmarks" product="default" msgid="945571990357114950">"Programu dovoljuje spreminjanje zgodovine brskalnika ali zaznamkov, shranjenih v telefonu. Zlonamerni programi lahko to uporabijo za brisanje ali spreminjanje podatkov brskalnika."</string>
<string name="permlab_setAlarm" msgid="5924401328803615165">"nastavitev alarma budilke"</string>
<string name="permdesc_setAlarm" msgid="5966966598149875082">"Programu omogoča nastavitev alarma v nameščeni budilki. Nekatere budilke morda ne bodo uporabile te funkcije."</string>
- <!-- no translation found for permlab_readWriteOwnVoicemail (8861946090046059697) -->
- <skip />
- <!-- no translation found for permdesc_readWriteOwnVoicemail (7343490168272921274) -->
- <skip />
+ <string name="permlab_readWriteOwnVoicemail" msgid="8861946090046059697">"Dostop do glasovne pošte, ki jo upravlja ta program"</string>
+ <string name="permdesc_readWriteOwnVoicemail" msgid="7343490168272921274">"Programu omogoča shranjevanje in prejemanje glasovne pošte, do katere lahko dostopa povezana storitev."</string>
<string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"Spreminjanje dovoljenj za geolokacijo brskalnika"</string>
<string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"Programu dovoljuje spreminjanje dovoljenja brskalnika za geografske lokacije. Zlonamerni programi lahko s tem dovoljenjem dovolijo pošiljanje podatkov o lokaciji poljubnim spletnim mestom."</string>
<string name="save_password_message" msgid="767344687139195790">"Ali želite, da si brskalnik zapomni to geslo?"</string>
@@ -843,7 +839,8 @@
<string name="cut" msgid="3092569408438626261">"Izreži"</string>
<string name="copy" msgid="2681946229533511987">"Kopiraj"</string>
<string name="paste" msgid="5629880836805036433">"Prilepi"</string>
- <string name="pasteDisabled" msgid="7259254654641456570">"Ni elementov za lepljenje"</string>
+ <!-- no translation found for replace (8333608224471746584) -->
+ <skip />
<string name="copyUrl" msgid="2538211579596067402">"Kopiraj URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Izbiranje besedila ..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Izbrano besedilo"</string>
@@ -880,12 +877,9 @@
<string name="launch_warning_title" msgid="8323761616052121936">"Preusmeritev programa"</string>
<string name="launch_warning_replace" msgid="6202498949970281412">"<xliff:g id="APP_NAME">%1$s</xliff:g> se izvaja."</string>
<string name="launch_warning_original" msgid="188102023021668683">"Prvotno je bil zagnan program <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
- <!-- no translation found for screen_compat_mode_scale (3202955667675944499) -->
- <skip />
- <!-- no translation found for screen_compat_mode_show (4013878876486655892) -->
- <skip />
- <!-- no translation found for screen_compat_mode_hint (2953716574198046484) -->
- <skip />
+ <string name="screen_compat_mode_scale" msgid="3202955667675944499">"Lestvica"</string>
+ <string name="screen_compat_mode_show" msgid="4013878876486655892">"Vedno pokaži"</string>
+ <string name="screen_compat_mode_hint" msgid="2953716574198046484">"Znova omogočite pri možnosti Nastavitve > Programi > Upravljanje programov."</string>
<string name="smv_application" msgid="295583804361236288">"Program <xliff:g id="APPLICATION">%1$s</xliff:g> (proces <xliff:g id="PROCESS">%2$s</xliff:g>) krši svoj samoizvedljivi pravilnik o strogem načinu."</string>
<string name="smv_process" msgid="5120397012047462446">"Proces <xliff:g id="PROCESS">%1$s</xliff:g> krši svoj samoizvedljivi pravilnik o strogem načinu."</string>
<string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> se izvaja"</string>
@@ -919,40 +913,26 @@
<item quantity="one" msgid="1634101450343277345">"Odpiranje razpoložljivega brezžičnega omrežja"</item>
<item quantity="other" msgid="7915895323644292768">"Odpiranje razpoložljivih brezžičnih omrežij"</item>
</plurals>
- <!-- no translation found for wifi_watchdog_network_disabled (6398650124751302012) -->
- <skip />
- <!-- no translation found for wifi_watchdog_network_disabled_detailed (4659127251774069612) -->
- <skip />
- <!-- no translation found for wifi_p2p_dialog_title (97611782659324517) -->
- <skip />
- <!-- no translation found for wifi_p2p_turnon_message (2804722042556269129) -->
- <skip />
- <!-- no translation found for wifi_p2p_failed_message (6467545523417622335) -->
- <skip />
- <!-- no translation found for wifi_p2p_pbc_go_negotiation_request_message (3170321684621420428) -->
- <skip />
- <!-- no translation found for wifi_p2p_pin_go_negotiation_request_message (5177412094633377308) -->
- <skip />
- <!-- no translation found for wifi_p2p_pin_display_message (2834049169114922902) -->
- <skip />
+ <string name="wifi_watchdog_network_disabled" msgid="6398650124751302012">"Omrežje Wi-Fi je bilo onemogočeno"</string>
+ <string name="wifi_watchdog_network_disabled_detailed" msgid="4659127251774069612">"Omrežje Wi-Fi je bilo začasno onemogočeno zaradi slabe povezljivosti."</string>
+ <string name="wifi_p2p_dialog_title" msgid="97611782659324517">"Wi-Fi Direct"</string>
+ <string name="wifi_p2p_turnon_message" msgid="2804722042556269129">"Začnite s postopkom Wi-Fi Direct. S tem bo izklopljen postopek odjemalca/dostopne točke Wi-Fi."</string>
+ <string name="wifi_p2p_failed_message" msgid="6467545523417622335">"Napaka pri zagonu Wi-Fi Direct"</string>
+ <string name="wifi_p2p_pbc_go_negotiation_request_message" msgid="3170321684621420428">"Zahteva za nastavitev povezave Wi-Fi Direct z naslova <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Če želite sprejeti, kliknite V redu."</string>
+ <string name="wifi_p2p_pin_go_negotiation_request_message" msgid="5177412094633377308">"Zahteva za nastavitev povezave Wi-Fi Direct z naslova <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Če želite nadaljevati, vnesite PIN."</string>
+ <string name="wifi_p2p_pin_display_message" msgid="2834049169114922902">"Pred začetkom nastavitve povezave morate PIN WPS <xliff:g id="P2P_WPS_PIN">%1$s</xliff:g> vnesti v enakovredno napravo <xliff:g id="P2P_CLIENT_ADDRESS">%2$s</xliff:g>"</string>
<string name="select_character" msgid="3365550120617701745">"Vstavljanje znaka"</string>
<string name="sms_control_default_app_name" msgid="7630529934366549163">"Neznan program"</string>
<string name="sms_control_title" msgid="7296612781128917719">"Pošiljanje sporočil SMS"</string>
<string name="sms_control_message" msgid="1289331457999236205">"V pošiljanju je veliko sporočil SMS. Če želite nadaljevati, izberite »V redu«. Če želite pošiljanje ustaviti, izberite »Prekliči«."</string>
<string name="sms_control_yes" msgid="2532062172402615953">"V redu"</string>
<string name="sms_control_no" msgid="1715320703137199869">"Prekliči"</string>
- <!-- no translation found for sim_removed_title (6227712319223226185) -->
- <skip />
- <!-- no translation found for sim_removed_message (2064255102770489459) -->
- <skip />
- <!-- no translation found for sim_done_button (827949989369963775) -->
- <skip />
- <!-- no translation found for sim_added_title (3719670512889674693) -->
- <skip />
- <!-- no translation found for sim_added_message (1209265974048554242) -->
- <skip />
- <!-- no translation found for sim_restart_button (4722407842815232347) -->
- <skip />
+ <string name="sim_removed_title" msgid="6227712319223226185">"Kartica SIM odstranjena"</string>
+ <string name="sim_removed_message" msgid="2064255102770489459">"Mobilno omrežje ne bo na voljo, dokler ne zamenjate kartice SIM."</string>
+ <string name="sim_done_button" msgid="827949989369963775">"Dokončano"</string>
+ <string name="sim_added_title" msgid="3719670512889674693">"Kartica SIM dodana"</string>
+ <string name="sim_added_message" msgid="1209265974048554242">"Če želite dostopati do mobilnega omrežja, morate znova zagnati napravo."</string>
+ <string name="sim_restart_button" msgid="4722407842815232347">"Vnovičen zagon"</string>
<string name="time_picker_dialog_title" msgid="8349362623068819295">"Nastavi uro"</string>
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Nastavi datum"</string>
<string name="date_time_set" msgid="5777075614321087758">"Nastavi"</string>
@@ -983,8 +963,7 @@
<string name="usb_mtp_notification_title" msgid="3699913097391550394">"Povezan kot predstavnostna naprava"</string>
<string name="usb_ptp_notification_title" msgid="1960817192216064833">"Povezan kot fotoaparat"</string>
<string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"Povezan kot namestitveni program"</string>
- <!-- no translation found for usb_accessory_notification_title (7848236974087653666) -->
- <skip />
+ <string name="usb_accessory_notification_title" msgid="7848236974087653666">"Priključen na dodatek USB"</string>
<string name="usb_notification_message" msgid="4447869605109736382">"Dotaknite se, če želite izbrati druge možnosti za USB"</string>
<string name="extmedia_format_title" product="nosdcard" msgid="7980995592595097841">"Formatiranje pomnilnika USB"</string>
<string name="extmedia_format_title" product="default" msgid="8663247929551095854">"Formatiraj kartico SD"</string>
@@ -1104,6 +1083,22 @@
<string name="choose_account_label" msgid="4191313562041125787">"Izberite račun"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Povečaj"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Zmanjšaj"</string>
+ <!-- no translation found for checkbox_checked (7222044992652711167) -->
+ <skip />
+ <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
+ <skip />
+ <!-- no translation found for radiobutton_selected (8603599808486581511) -->
+ <skip />
+ <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
+ <skip />
+ <!-- no translation found for switch_on (551417728476977311) -->
+ <skip />
+ <!-- no translation found for switch_off (7249798614327155088) -->
+ <skip />
+ <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
+ <skip />
+ <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"Krmarjenje domov"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Krmarjenje navzgor"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Več možnosti"</string>
@@ -1117,6 +1112,14 @@
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"Podatki 4G so onemogočeni"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Mobilni podatki so onemogočeni"</string>
<string name="data_usage_limit_body" msgid="2182247539226163759">"tapnite, če želite omogočiti"</string>
+ <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
+ <skip />
+ <!-- no translation found for data_usage_4g_limit_snoozed_title (1106562779311209039) -->
+ <skip />
+ <!-- no translation found for data_usage_mobile_limit_snoozed_title (279240572165412168) -->
+ <skip />
+ <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <skip />
<string name="ssl_certificate" msgid="6510040486049237639">"Varnostno potrdilo"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"To potrdilo je veljavno."</string>
<string name="issued_to" msgid="454239480274921032">"Izdano za:"</string>
@@ -1134,6 +1137,5 @@
<string name="activity_chooser_view_see_all" msgid="180268188117163072">"Prikaži vse ..."</string>
<string name="activity_chooser_view_dialog_title_default" msgid="3325054276356556835">"Izberite dejavnost"</string>
<string name="share_action_provider_share_with" msgid="1791316789651185229">"Skupna raba z ..."</string>
- <!-- no translation found for status_bar_device_locked (3092703448690669768) -->
- <skip />
+ <string name="status_bar_device_locked" msgid="3092703448690669768">"Naprava zaklenjena."</string>
</resources>
diff --git a/core/res/res/values-sr/strings.xml b/core/res/res/values-sr/strings.xml
index 4d25343..41ee753 100644
--- a/core/res/res/values-sr/strings.xml
+++ b/core/res/res/values-sr/strings.xml
@@ -843,7 +843,8 @@
<string name="cut" msgid="3092569408438626261">"Исеци"</string>
<string name="copy" msgid="2681946229533511987">"Копирај"</string>
<string name="paste" msgid="5629880836805036433">"Налепи"</string>
- <string name="pasteDisabled" msgid="7259254654641456570">"Ништа није копирано"</string>
+ <!-- no translation found for replace (8333608224471746584) -->
+ <skip />
<string name="copyUrl" msgid="2538211579596067402">"Копирај URL адресу"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Изабери текст..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Избор текста"</string>
@@ -880,12 +881,9 @@
<string name="launch_warning_title" msgid="8323761616052121936">"Апликација је преусмерена"</string>
<string name="launch_warning_replace" msgid="6202498949970281412">"Апликација <xliff:g id="APP_NAME">%1$s</xliff:g> је сада покренута."</string>
<string name="launch_warning_original" msgid="188102023021668683">"Првобитно је покренута апликација <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
- <!-- no translation found for screen_compat_mode_scale (3202955667675944499) -->
- <skip />
- <!-- no translation found for screen_compat_mode_show (4013878876486655892) -->
- <skip />
- <!-- no translation found for screen_compat_mode_hint (2953716574198046484) -->
- <skip />
+ <string name="screen_compat_mode_scale" msgid="3202955667675944499">"Размера"</string>
+ <string name="screen_compat_mode_show" msgid="4013878876486655892">"Увек приказуј"</string>
+ <string name="screen_compat_mode_hint" msgid="2953716574198046484">"Поново ово омогућите у оквиру Подешавања > Апликације > Управљање апликацијама."</string>
<string name="smv_application" msgid="295583804361236288">"Апликација <xliff:g id="APPLICATION">%1$s</xliff:g> (процес <xliff:g id="PROCESS">%2$s</xliff:g>) је прекршила самонаметнуте StrictMode смернице."</string>
<string name="smv_process" msgid="5120397012047462446">"Процес <xliff:g id="PROCESS">%1$s</xliff:g> је прекршио самонаметнуте StrictMode смернице."</string>
<string name="heavy_weight_notification" msgid="9087063985776626166">"Апликација <xliff:g id="APP">%1$s</xliff:g> је покренута"</string>
@@ -941,18 +939,12 @@
<string name="sms_control_message" msgid="1289331457999236205">"Шаље се велики број SMS порука. Кликните на „Потврди“ да бисте наставили или на „Откажи“ да бисте зауставили слање."</string>
<string name="sms_control_yes" msgid="2532062172402615953">"Потврди"</string>
<string name="sms_control_no" msgid="1715320703137199869">"Откажи"</string>
- <!-- no translation found for sim_removed_title (6227712319223226185) -->
- <skip />
- <!-- no translation found for sim_removed_message (2064255102770489459) -->
- <skip />
- <!-- no translation found for sim_done_button (827949989369963775) -->
- <skip />
- <!-- no translation found for sim_added_title (3719670512889674693) -->
- <skip />
- <!-- no translation found for sim_added_message (1209265974048554242) -->
- <skip />
- <!-- no translation found for sim_restart_button (4722407842815232347) -->
- <skip />
+ <string name="sim_removed_title" msgid="6227712319223226185">"SIM картица је уклоњена"</string>
+ <string name="sim_removed_message" msgid="2064255102770489459">"Мобилна мрежа ће бити недоступна док не замените SIM картицу."</string>
+ <string name="sim_done_button" msgid="827949989369963775">"Готово"</string>
+ <string name="sim_added_title" msgid="3719670512889674693">"SIM картица је додата"</string>
+ <string name="sim_added_message" msgid="1209265974048554242">"Морате поново да покренете уређај да бисте могли да приступите мобилној мрежи."</string>
+ <string name="sim_restart_button" msgid="4722407842815232347">"Поново покрени"</string>
<string name="time_picker_dialog_title" msgid="8349362623068819295">"Подешавање времена"</string>
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Подешавање датума"</string>
<string name="date_time_set" msgid="5777075614321087758">"Подеси"</string>
@@ -1104,6 +1096,22 @@
<string name="choose_account_label" msgid="4191313562041125787">"Избор налога"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Повећање"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Смањење"</string>
+ <!-- no translation found for checkbox_checked (7222044992652711167) -->
+ <skip />
+ <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
+ <skip />
+ <!-- no translation found for radiobutton_selected (8603599808486581511) -->
+ <skip />
+ <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
+ <skip />
+ <!-- no translation found for switch_on (551417728476977311) -->
+ <skip />
+ <!-- no translation found for switch_off (7249798614327155088) -->
+ <skip />
+ <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
+ <skip />
+ <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"Кретање до Почетне"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Кретање нагоре"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Још опција"</string>
@@ -1117,6 +1125,14 @@
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"4G подаци су онемогућени"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Подаци мобилне мреже су онемогућени"</string>
<string name="data_usage_limit_body" msgid="2182247539226163759">"додирните да бисте омогућили"</string>
+ <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
+ <skip />
+ <!-- no translation found for data_usage_4g_limit_snoozed_title (1106562779311209039) -->
+ <skip />
+ <!-- no translation found for data_usage_mobile_limit_snoozed_title (279240572165412168) -->
+ <skip />
+ <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <skip />
<string name="ssl_certificate" msgid="6510040486049237639">"Безбедносни сертификат"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Овај сертификат је важећи."</string>
<string name="issued_to" msgid="454239480274921032">"Издато за:"</string>
@@ -1132,10 +1148,8 @@
<string name="sha256_fingerprint" msgid="4391271286477279263">"SHA-256 дигитални отисак:"</string>
<string name="sha1_fingerprint" msgid="7930330235269404581">"SHA-1 дигитални отисак:"</string>
<string name="activity_chooser_view_see_all" msgid="180268188117163072">"Прикажи све..."</string>
- <!-- no translation found for activity_chooser_view_dialog_title_default (3325054276356556835) -->
- <skip />
- <!-- no translation found for share_action_provider_share_with (1791316789651185229) -->
- <skip />
+ <string name="activity_chooser_view_dialog_title_default" msgid="3325054276356556835">"Избор активности"</string>
+ <string name="share_action_provider_share_with" msgid="1791316789651185229">"Дељење са..."</string>
<!-- no translation found for status_bar_device_locked (3092703448690669768) -->
<skip />
</resources>
diff --git a/core/res/res/values-sv/strings.xml b/core/res/res/values-sv/strings.xml
index 3de0006b..b65ab58 100644
--- a/core/res/res/values-sv/strings.xml
+++ b/core/res/res/values-sv/strings.xml
@@ -843,7 +843,8 @@
<string name="cut" msgid="3092569408438626261">"Klipp ut"</string>
<string name="copy" msgid="2681946229533511987">"Kopiera"</string>
<string name="paste" msgid="5629880836805036433">"Klistra in"</string>
- <string name="pasteDisabled" msgid="7259254654641456570">"Inget att klistra in"</string>
+ <!-- no translation found for replace (8333608224471746584) -->
+ <skip />
<string name="copyUrl" msgid="2538211579596067402">"Kopiera webbadress"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Markera text..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Textmarkering"</string>
@@ -880,12 +881,9 @@
<string name="launch_warning_title" msgid="8323761616052121936">"Programmet omdirigerades"</string>
<string name="launch_warning_replace" msgid="6202498949970281412">"<xliff:g id="APP_NAME">%1$s</xliff:g> körs."</string>
<string name="launch_warning_original" msgid="188102023021668683">"<xliff:g id="APP_NAME">%1$s</xliff:g> startades först."</string>
- <!-- no translation found for screen_compat_mode_scale (3202955667675944499) -->
- <skip />
- <!-- no translation found for screen_compat_mode_show (4013878876486655892) -->
- <skip />
- <!-- no translation found for screen_compat_mode_hint (2953716574198046484) -->
- <skip />
+ <string name="screen_compat_mode_scale" msgid="3202955667675944499">"Anpassning"</string>
+ <string name="screen_compat_mode_show" msgid="4013878876486655892">"Visa alltid"</string>
+ <string name="screen_compat_mode_hint" msgid="2953716574198046484">"Aktivera igen under Inställningar > Appar > Hantera appar."</string>
<string name="smv_application" msgid="295583804361236288">"Programmet <xliff:g id="APPLICATION">%1$s</xliff:g> (processen <xliff:g id="PROCESS">%2$s</xliff:g>) har brutit mot sin egen StrictMode-policy."</string>
<string name="smv_process" msgid="5120397012047462446">"Processen <xliff:g id="PROCESS">%1$s</xliff:g> har brutit mot sin egen StrictMode-policy."</string>
<string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> körs"</string>
@@ -941,18 +939,12 @@
<string name="sms_control_message" msgid="1289331457999236205">"Flera SMS-meddelanden skickas. Tryck på OK om du vill fortsätta eller på Avbryt om du vill avsluta sändningen."</string>
<string name="sms_control_yes" msgid="2532062172402615953">"OK"</string>
<string name="sms_control_no" msgid="1715320703137199869">"Avbryt"</string>
- <!-- no translation found for sim_removed_title (6227712319223226185) -->
- <skip />
- <!-- no translation found for sim_removed_message (2064255102770489459) -->
- <skip />
- <!-- no translation found for sim_done_button (827949989369963775) -->
- <skip />
- <!-- no translation found for sim_added_title (3719670512889674693) -->
- <skip />
- <!-- no translation found for sim_added_message (1209265974048554242) -->
- <skip />
- <!-- no translation found for sim_restart_button (4722407842815232347) -->
- <skip />
+ <string name="sim_removed_title" msgid="6227712319223226185">"SIM-kortet togs bort"</string>
+ <string name="sim_removed_message" msgid="2064255102770489459">"Det mobila nätverket kommer inte bli tillgängligt förrän du byter SIM-kortet."</string>
+ <string name="sim_done_button" msgid="827949989369963775">"Klar"</string>
+ <string name="sim_added_title" msgid="3719670512889674693">"SIM-kort lades till"</string>
+ <string name="sim_added_message" msgid="1209265974048554242">"Du måste starta om enheten för att ansluta till mobilnätet."</string>
+ <string name="sim_restart_button" msgid="4722407842815232347">"Starta om"</string>
<string name="time_picker_dialog_title" msgid="8349362623068819295">"Ange tid"</string>
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Ange datum"</string>
<string name="date_time_set" msgid="5777075614321087758">"Ställ in"</string>
@@ -1104,6 +1096,22 @@
<string name="choose_account_label" msgid="4191313562041125787">"Välj ett konto"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Öka"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Minska"</string>
+ <!-- no translation found for checkbox_checked (7222044992652711167) -->
+ <skip />
+ <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
+ <skip />
+ <!-- no translation found for radiobutton_selected (8603599808486581511) -->
+ <skip />
+ <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
+ <skip />
+ <!-- no translation found for switch_on (551417728476977311) -->
+ <skip />
+ <!-- no translation found for switch_off (7249798614327155088) -->
+ <skip />
+ <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
+ <skip />
+ <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"Visa startsidan"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Navigera uppåt"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Fler alternativ"</string>
@@ -1117,6 +1125,14 @@
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"Data via 4G har inaktiverats"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Mobildata har inaktiverats"</string>
<string name="data_usage_limit_body" msgid="2182247539226163759">"knacka lätt om du vill aktivera"</string>
+ <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
+ <skip />
+ <!-- no translation found for data_usage_4g_limit_snoozed_title (1106562779311209039) -->
+ <skip />
+ <!-- no translation found for data_usage_mobile_limit_snoozed_title (279240572165412168) -->
+ <skip />
+ <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <skip />
<string name="ssl_certificate" msgid="6510040486049237639">"Säkerhetscertifikat"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Certifikatet är giltigt."</string>
<string name="issued_to" msgid="454239480274921032">"Utfärdad till:"</string>
diff --git a/core/res/res/values-sw/strings.xml b/core/res/res/values-sw/strings.xml
index d2c62bf..d329f24 100644
--- a/core/res/res/values-sw/strings.xml
+++ b/core/res/res/values-sw/strings.xml
@@ -1117,7 +1117,8 @@
<skip />
<!-- no translation found for paste (5629880836805036433) -->
<skip />
- <string name="pasteDisabled" msgid="7259254654641456570">"Hakuna cha kubandika"</string>
+ <!-- no translation found for replace (8333608224471746584) -->
+ <skip />
<!-- no translation found for copyUrl (2538211579596067402) -->
<skip />
<string name="selectTextMode" msgid="6738556348861347240">"Chagua maandishi"</string>
@@ -1431,6 +1432,22 @@
<skip />
<!-- no translation found for number_picker_decrement_button (2576606679160067262) -->
<skip />
+ <!-- no translation found for checkbox_checked (7222044992652711167) -->
+ <skip />
+ <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
+ <skip />
+ <!-- no translation found for radiobutton_selected (8603599808486581511) -->
+ <skip />
+ <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
+ <skip />
+ <!-- no translation found for switch_on (551417728476977311) -->
+ <skip />
+ <!-- no translation found for switch_off (7249798614327155088) -->
+ <skip />
+ <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
+ <skip />
+ <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
+ <skip />
<!-- no translation found for action_bar_home_description (5293600496601490216) -->
<skip />
<!-- no translation found for action_bar_up_description (2237496562952152589) -->
@@ -1457,6 +1474,14 @@
<skip />
<!-- no translation found for data_usage_limit_body (2182247539226163759) -->
<skip />
+ <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
+ <skip />
+ <!-- no translation found for data_usage_4g_limit_snoozed_title (1106562779311209039) -->
+ <skip />
+ <!-- no translation found for data_usage_mobile_limit_snoozed_title (279240572165412168) -->
+ <skip />
+ <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <skip />
<!-- no translation found for ssl_certificate (6510040486049237639) -->
<skip />
<!-- no translation found for ssl_certificate_is_valid (6825263250774569373) -->
diff --git a/core/res/res/values-th/strings.xml b/core/res/res/values-th/strings.xml
index 0e1e8c1..dfdf1f4 100644
--- a/core/res/res/values-th/strings.xml
+++ b/core/res/res/values-th/strings.xml
@@ -262,10 +262,8 @@
<string name="permdesc_readInputState" msgid="5132879321450325445">"อนุญาตให้แอปพลิเคชันดูปุ่มที่คุณกดแม้ในระหว่างที่ทำงานร่วมกับแอปพลิเคชันอื่น (เช่น ป้อนรหัสผ่าน) ไม่ควรต้องใช้สำหรับแอปพลิเคชันทั่วไป"</string>
<string name="permlab_bindInputMethod" msgid="3360064620230515776">"เชื่อมโยงกับวิธีป้อนข้อมูล"</string>
<string name="permdesc_bindInputMethod" msgid="3734838321027317228">"อนุญาตให้ผู้ถือเชื่อมโยงกับอินเทอร์เฟซระดับสูงสุดของวิธีป้อนข้อมูล ไม่ควรต้องใช้สำหรับแอปพลิเคชันทั่วไป"</string>
- <!-- no translation found for permlab_bindTextService (7358378401915287938) -->
- <skip />
- <!-- no translation found for permdesc_bindTextService (172508880651909350) -->
- <skip />
+ <string name="permlab_bindTextService" msgid="7358378401915287938">"เชื่อมโยงกับบริการข้อความ"</string>
+ <string name="permdesc_bindTextService" msgid="172508880651909350">"อนุญาตให้ผู้ถือเชื่อมโยงกับอินเทอร์เฟซระดับสูงสุดของบริการข้อความ (เช่น บริการเครื่องตรวจตัวสะกด) ไม่ควรต้องใช้สำหรับแอปพลิเคชันทั่วไป"</string>
<string name="permlab_bindWallpaper" msgid="8716400279937856462">"เชื่อมโยงกับวอลเปเปอร์"</string>
<string name="permdesc_bindWallpaper" msgid="5287754520361915347">"อนุญาตให้ผู้ถือเชื่อมโยงกับอินเทอร์เฟซระดับสูงสุดของวอลเปเปอร์ ไม่ควรต้องใช้สำหรับแอปพลิเคชันทั่วไป"</string>
<string name="permlab_bindRemoteViews" msgid="5697987759897367099">"เชื่อมโยงกับบริการวิดเจ็ต"</string>
@@ -724,10 +722,8 @@
<string name="permdesc_writeHistoryBookmarks" product="default" msgid="945571990357114950">"อนุญาตให้แอปพลิเคชันแก้ไขประวัติหรือบุ๊กมาร์กของเบราว์เซอร์ที่จัดเก็บบนโทรศัพท์ของคุณ แอปพลิเคชันที่เป็นอันตรายอาจใช้วิธีนี้ลบหรือแก้ไขข้อมูลเบราว์เซอร์ของคุณได้"</string>
<string name="permlab_setAlarm" msgid="5924401328803615165">"ตั้งเวลาปลุกในนาฬิกาปลุก"</string>
<string name="permdesc_setAlarm" msgid="5966966598149875082">"อนุญาตให้แอปพลิเคชันนี้ตั้งเวลาปลุกในแอปพลิเคชันนาฬิกาปลุกที่ติดตั้งไว้ แอปพลิเคชันนาฬิกาปลุกบางประเภทอาจไม่ใช้คุณลักษณะนี้"</string>
- <!-- no translation found for permlab_readWriteOwnVoicemail (8861946090046059697) -->
- <skip />
- <!-- no translation found for permdesc_readWriteOwnVoicemail (7343490168272921274) -->
- <skip />
+ <string name="permlab_readWriteOwnVoicemail" msgid="8861946090046059697">"เข้าถึงข้อความเสียงที่จัดการโดยแอปพลิเคชันนี้"</string>
+ <string name="permdesc_readWriteOwnVoicemail" msgid="7343490168272921274">"อนุญาตให้แอปพลิเคชันจัดเก็บและเรียกเฉพาะข้อมูลเสียงซึ่งบริการที่เกี่ยวข้องของข้อมูลเสียงสามารถเข้าถึงได้เท่านั้น"</string>
<string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"แก้ไขการอนุญาตเกี่ยวกับการระบุตำแหน่งทางภูมิศาสตร์ของเบราว์เซอร์"</string>
<string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"อนุญาตให้แอปพลิเคชันแก้ไขการอนุญาตเกี่ยวกับการระบุตำแหน่งทางภูมิศาสตร์ของเบราว์เซอร์ แอปพลิเคชันที่เป็นอันตรายอาจใช้วิธีนี้อนุญาตให้ส่งข้อมูลตำแหน่งไปที่เว็บไซต์อื่นได้โดยพลการ"</string>
<string name="save_password_message" msgid="767344687139195790">"คุณต้องการให้เบราว์เซอร์จำรหัสผ่านนี้หรือไม่"</string>
@@ -843,7 +839,8 @@
<string name="cut" msgid="3092569408438626261">"ตัด"</string>
<string name="copy" msgid="2681946229533511987">"คัดลอก"</string>
<string name="paste" msgid="5629880836805036433">"วาง"</string>
- <string name="pasteDisabled" msgid="7259254654641456570">"ไม่มีสิ่งที่จะวาง"</string>
+ <!-- no translation found for replace (8333608224471746584) -->
+ <skip />
<string name="copyUrl" msgid="2538211579596067402">"คัดลอก URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"เลือกข้อความ..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"การเลือกข้อความ"</string>
@@ -880,12 +877,9 @@
<string name="launch_warning_title" msgid="8323761616052121936">"เปลี่ยนเส้นทางแอปพลิเคชัน"</string>
<string name="launch_warning_replace" msgid="6202498949970281412">"<xliff:g id="APP_NAME">%1$s</xliff:g> กำลังทำงานอยู่ในขณะนี้"</string>
<string name="launch_warning_original" msgid="188102023021668683">"<xliff:g id="APP_NAME">%1$s</xliff:g> เปิดใช้ไว้แล้ว"</string>
- <!-- no translation found for screen_compat_mode_scale (3202955667675944499) -->
- <skip />
- <!-- no translation found for screen_compat_mode_show (4013878876486655892) -->
- <skip />
- <!-- no translation found for screen_compat_mode_hint (2953716574198046484) -->
- <skip />
+ <string name="screen_compat_mode_scale" msgid="3202955667675944499">"สเกล"</string>
+ <string name="screen_compat_mode_show" msgid="4013878876486655892">"แสดงเสมอ"</string>
+ <string name="screen_compat_mode_hint" msgid="2953716574198046484">"เปิดใช้งานอีกครั้งด้วยการไปที่การตั้งค่า > แอปพลิเคชัน > จัดการแอปพลิเคชัน"</string>
<string name="smv_application" msgid="295583804361236288">"แอปพลิเคชัน <xliff:g id="APPLICATION">%1$s</xliff:g> (กระบวนการ <xliff:g id="PROCESS">%2$s</xliff:g>) ละเมิดนโยบาย StrictMode ที่บังคับใช้ด้วยตัวเอง"</string>
<string name="smv_process" msgid="5120397012047462446">"กระบวนการ <xliff:g id="PROCESS">%1$s</xliff:g> ละเมิดนโยบาย StrictMode ที่บังคับใช้ด้วยตัวเอง"</string>
<string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> กำลังทำงาน"</string>
@@ -919,40 +913,26 @@
<item quantity="one" msgid="1634101450343277345">"เปิดเครือข่าย Wi-Fi ที่ใช้งานได้"</item>
<item quantity="other" msgid="7915895323644292768">"เปิดเครือข่าย Wi-Fi ที่ใช้งานได้"</item>
</plurals>
- <!-- no translation found for wifi_watchdog_network_disabled (6398650124751302012) -->
- <skip />
- <!-- no translation found for wifi_watchdog_network_disabled_detailed (4659127251774069612) -->
- <skip />
- <!-- no translation found for wifi_p2p_dialog_title (97611782659324517) -->
- <skip />
- <!-- no translation found for wifi_p2p_turnon_message (2804722042556269129) -->
- <skip />
- <!-- no translation found for wifi_p2p_failed_message (6467545523417622335) -->
- <skip />
- <!-- no translation found for wifi_p2p_pbc_go_negotiation_request_message (3170321684621420428) -->
- <skip />
- <!-- no translation found for wifi_p2p_pin_go_negotiation_request_message (5177412094633377308) -->
- <skip />
- <!-- no translation found for wifi_p2p_pin_display_message (2834049169114922902) -->
- <skip />
+ <string name="wifi_watchdog_network_disabled" msgid="6398650124751302012">"เครือข่าย Wi-Fi ถูกปิดใช้งาน"</string>
+ <string name="wifi_watchdog_network_disabled_detailed" msgid="4659127251774069612">"เครือข่าย Wi-Fi ถูกปิดใช้งานชั่วคราวเนื่องจากปัญหาการเชื่อมต่อ"</string>
+ <string name="wifi_p2p_dialog_title" msgid="97611782659324517">"Wi-Fi Direct"</string>
+ <string name="wifi_p2p_turnon_message" msgid="2804722042556269129">"เริ่มการทำงาน Wi-Fi Direct ซึ่งจะเป็นการปิดการทำงาน Wi-Fi ไคลเอ็นต์/ฮอตสปอต"</string>
+ <string name="wifi_p2p_failed_message" msgid="6467545523417622335">"ไม่สามารถเริ่ม Wi-Fi Direct ได้"</string>
+ <string name="wifi_p2p_pbc_go_negotiation_request_message" msgid="3170321684621420428">"คำขอการตั้งค่าการเชื่อมต่อ Wi-Fi Direct จาก <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g> คลิก \"ตกลง\" เพื่อยอมรับ"</string>
+ <string name="wifi_p2p_pin_go_negotiation_request_message" msgid="5177412094633377308">"คำขอการตั้งค่าการเชื่อมต่อ Wi-Fi Direct จาก <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g> ป้อน PIN เพื่อดำเนินการต่อ"</string>
+ <string name="wifi_p2p_pin_display_message" msgid="2834049169114922902">"ต้องป้อน PIN WPS <xliff:g id="P2P_WPS_PIN">%1$s</xliff:g> บนอุปกรณ์เพียร์ <xliff:g id="P2P_CLIENT_ADDRESS">%2$s</xliff:g> เพื่อให้การตั้งค่าการเชื่อมต่อดำเนินการต่อ"</string>
<string name="select_character" msgid="3365550120617701745">"ใส่อักขระ"</string>
<string name="sms_control_default_app_name" msgid="7630529934366549163">"ไม่ทราบแอปพลิเคชัน"</string>
<string name="sms_control_title" msgid="7296612781128917719">"กำลังส่งข้อความ SMS"</string>
<string name="sms_control_message" msgid="1289331457999236205">"กำลังส่งข้อความ SMS จำนวนมาก เลือก \"ตกลง\" เพื่อทำงานต่อหรือ \"ยกเลิก\" เพื่อหยุดส่ง"</string>
<string name="sms_control_yes" msgid="2532062172402615953">"ตกลง"</string>
<string name="sms_control_no" msgid="1715320703137199869">"ยกเลิก"</string>
- <!-- no translation found for sim_removed_title (6227712319223226185) -->
- <skip />
- <!-- no translation found for sim_removed_message (2064255102770489459) -->
- <skip />
- <!-- no translation found for sim_done_button (827949989369963775) -->
- <skip />
- <!-- no translation found for sim_added_title (3719670512889674693) -->
- <skip />
- <!-- no translation found for sim_added_message (1209265974048554242) -->
- <skip />
- <!-- no translation found for sim_restart_button (4722407842815232347) -->
- <skip />
+ <string name="sim_removed_title" msgid="6227712319223226185">"นำซิมการ์ดออกแล้ว"</string>
+ <string name="sim_removed_message" msgid="2064255102770489459">"ไม่สามารถใช้เครือข่ายมือถือได้จนกว่าคุณจะเปลี่ยนซิมการ์ด"</string>
+ <string name="sim_done_button" msgid="827949989369963775">"เสร็จสิ้น"</string>
+ <string name="sim_added_title" msgid="3719670512889674693">"เพิ่มซิมการ์ดแล้ว"</string>
+ <string name="sim_added_message" msgid="1209265974048554242">"คุณต้องรีสตาร์ทอุปกรณ์ของคุณเพื่อเข้าถึงเครือข่ายมือถือ"</string>
+ <string name="sim_restart_button" msgid="4722407842815232347">"รีสตาร์ท"</string>
<string name="time_picker_dialog_title" msgid="8349362623068819295">"ตั้งเวลา"</string>
<string name="date_picker_dialog_title" msgid="5879450659453782278">"ตั้งวันที่"</string>
<string name="date_time_set" msgid="5777075614321087758">"ตั้งค่า"</string>
@@ -983,8 +963,7 @@
<string name="usb_mtp_notification_title" msgid="3699913097391550394">"เชื่อมต่อเป็นอุปกรณ์สื่อ"</string>
<string name="usb_ptp_notification_title" msgid="1960817192216064833">"เชื่อมต่อเป็นกล้องถ่ายรูป"</string>
<string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"เชื่อมต่อเป็นตัวติดตั้ง"</string>
- <!-- no translation found for usb_accessory_notification_title (7848236974087653666) -->
- <skip />
+ <string name="usb_accessory_notification_title" msgid="7848236974087653666">"เชื่อมต่อกับอุปกรณ์ USB"</string>
<string name="usb_notification_message" msgid="4447869605109736382">"แตะสำหรับตัวเลือก USB อื่นๆ"</string>
<string name="extmedia_format_title" product="nosdcard" msgid="7980995592595097841">"ฟอร์แมตที่เก็บข้อมูล USB"</string>
<string name="extmedia_format_title" product="default" msgid="8663247929551095854">"ฟอร์แมตการ์ด SD"</string>
@@ -1104,6 +1083,22 @@
<string name="choose_account_label" msgid="4191313562041125787">"เลือกบัญชี"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"การเพิ่ม"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"การลด"</string>
+ <!-- no translation found for checkbox_checked (7222044992652711167) -->
+ <skip />
+ <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
+ <skip />
+ <!-- no translation found for radiobutton_selected (8603599808486581511) -->
+ <skip />
+ <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
+ <skip />
+ <!-- no translation found for switch_on (551417728476977311) -->
+ <skip />
+ <!-- no translation found for switch_off (7249798614327155088) -->
+ <skip />
+ <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
+ <skip />
+ <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"นำทางไปหน้าแรก"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"นำทางขึ้น"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"ตัวเลือกเพิ่มเติม"</string>
@@ -1117,6 +1112,14 @@
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"ปิดใช้งานข้อมูล 4G"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"ปิดใช้งานข้อมูลมือถือ"</string>
<string name="data_usage_limit_body" msgid="2182247539226163759">"แตะเพื่อเปิดใช้งาน"</string>
+ <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
+ <skip />
+ <!-- no translation found for data_usage_4g_limit_snoozed_title (1106562779311209039) -->
+ <skip />
+ <!-- no translation found for data_usage_mobile_limit_snoozed_title (279240572165412168) -->
+ <skip />
+ <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <skip />
<string name="ssl_certificate" msgid="6510040486049237639">"ใบรับรองความปลอดภัย"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"ใบรับรองนี้ใช้งานได้"</string>
<string name="issued_to" msgid="454239480274921032">"ออกให้แก่:"</string>
@@ -1134,6 +1137,5 @@
<string name="activity_chooser_view_see_all" msgid="180268188117163072">"ดูทั้งหมด..."</string>
<string name="activity_chooser_view_dialog_title_default" msgid="3325054276356556835">"เลือกกิจกรรม"</string>
<string name="share_action_provider_share_with" msgid="1791316789651185229">"แบ่งปันกับ..."</string>
- <!-- no translation found for status_bar_device_locked (3092703448690669768) -->
- <skip />
+ <string name="status_bar_device_locked" msgid="3092703448690669768">"ล็อกอุปกรณ์อยู่"</string>
</resources>
diff --git a/core/res/res/values-tl/strings.xml b/core/res/res/values-tl/strings.xml
index 12c14c3..ef32418 100644
--- a/core/res/res/values-tl/strings.xml
+++ b/core/res/res/values-tl/strings.xml
@@ -262,10 +262,8 @@
<string name="permdesc_readInputState" msgid="5132879321450325445">"Pinapayagan ang mga application na panoorin ang mga pinipindot mong key maging kapag nakikipag-ugnay sa isa pang application (gaya ng pagpasok ng password). Hindi dapat na kailanganin kailanman para sa mga normal na application."</string>
<string name="permlab_bindInputMethod" msgid="3360064620230515776">"sumailalim sa isang pamamaraan ng pag-input"</string>
<string name="permdesc_bindInputMethod" msgid="3734838321027317228">"Pinapayagan ang holder na sumailalim sa nangungunang antas na interface ng pamamaraan ng pag-input. Hindi dapat kailanmang kailanganin para sa mga normal na application."</string>
- <!-- no translation found for permlab_bindTextService (7358378401915287938) -->
- <skip />
- <!-- no translation found for permdesc_bindTextService (172508880651909350) -->
- <skip />
+ <string name="permlab_bindTextService" msgid="7358378401915287938">"sumailalim sa serbisyo ng teksto"</string>
+ <string name="permdesc_bindTextService" msgid="172508880651909350">"Binibigyang-daan ang may-ari upang sumailalim sa interface sa nangungunang antas(hal. SpellCheckerService). Hindi dapat kailanman kakailanganin para sa mga normal na application."</string>
<string name="permlab_bindWallpaper" msgid="8716400279937856462">"sumailalim sa wallpaper"</string>
<string name="permdesc_bindWallpaper" msgid="5287754520361915347">"Pinapayagan ang holder na sumailalim sa interface na nasa nangungunang antas ng wallpaper. Hindi kailanman dapat na kailanganin para sa mga normal na application."</string>
<string name="permlab_bindRemoteViews" msgid="5697987759897367099">"itali sa serbisyo ng widget"</string>
@@ -724,10 +722,8 @@
<string name="permdesc_writeHistoryBookmarks" product="default" msgid="945571990357114950">"Pinapayagan ang isang application na baguhin ang kasaysayan o mga bookmark ng Browser na nakaimbak sa iyong telepono. Magagamit ito ng mga nakakahamak na application upang burahin o baguhin ang iyong data ng Browser."</string>
<string name="permlab_setAlarm" msgid="5924401328803615165">"itakda ang alarm sa alarm clock"</string>
<string name="permdesc_setAlarm" msgid="5966966598149875082">"Pinapayagan ang application na magtakda ng alarm sa isang naka-install na application ng alarm clock. Maaaring hindi ipatupad ng ilang application ng alarm clock ang tampok na ito."</string>
- <!-- no translation found for permlab_readWriteOwnVoicemail (8861946090046059697) -->
- <skip />
- <!-- no translation found for permdesc_readWriteOwnVoicemail (7343490168272921274) -->
- <skip />
+ <string name="permlab_readWriteOwnVoicemail" msgid="8861946090046059697">"I-access ang mga voicemail na pinapamahalaan ng application na ito"</string>
+ <string name="permdesc_readWriteOwnVoicemail" msgid="7343490168272921274">"Binibigyang-daan ang application upang mag-imbak at bumawi ng mga voicemail na maa-access ng nauugnay na serbisyo nito lamang."</string>
<string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"Baguhin ang mga pahintulot ng Browser geolocation"</string>
<string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"Pinapayagan ang isang application na baguhin ang mga pahintulot sa geolocation ng Browser. Magagamit ito ng mga nakakahamak na application upang payagan ang pagpapadala ng impormasyon ng lokasyon sa mga hindi saklaw na web site."</string>
<string name="save_password_message" msgid="767344687139195790">"Gusto mo bang tandaan ng browser ang password na ito?"</string>
@@ -843,7 +839,8 @@
<string name="cut" msgid="3092569408438626261">"I-cut"</string>
<string name="copy" msgid="2681946229533511987">"Kopyahin"</string>
<string name="paste" msgid="5629880836805036433">"I-paste"</string>
- <string name="pasteDisabled" msgid="7259254654641456570">"Walang ipe-paste"</string>
+ <!-- no translation found for replace (8333608224471746584) -->
+ <skip />
<string name="copyUrl" msgid="2538211579596067402">"Kopyahin ang URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Pumili ng teksto..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Pagpili ng teksto"</string>
@@ -880,12 +877,9 @@
<string name="launch_warning_title" msgid="8323761616052121936">"Ni-redirect application"</string>
<string name="launch_warning_replace" msgid="6202498949970281412">"Tumatakbo na ngayon ang <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
<string name="launch_warning_original" msgid="188102023021668683">"Orihinal na nalunsad ang <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
- <!-- no translation found for screen_compat_mode_scale (3202955667675944499) -->
- <skip />
- <!-- no translation found for screen_compat_mode_show (4013878876486655892) -->
- <skip />
- <!-- no translation found for screen_compat_mode_hint (2953716574198046484) -->
- <skip />
+ <string name="screen_compat_mode_scale" msgid="3202955667675944499">"Sukat"</string>
+ <string name="screen_compat_mode_show" msgid="4013878876486655892">"Palaging ipakita"</string>
+ <string name="screen_compat_mode_hint" msgid="2953716574198046484">"Muling paganahin ang Mga Setting > Mga Application > Pamahalaan ang mga application."</string>
<string name="smv_application" msgid="295583804361236288">"Ang application na <xliff:g id="APPLICATION">%1$s</xliff:g> (prosesong <xliff:g id="PROCESS">%2$s</xliff:g>) ay lumabag sa sarili nitong ipinapatupad na patakarang StrictMode."</string>
<string name="smv_process" msgid="5120397012047462446">"Ang prosesong <xliff:g id="PROCESS">%1$s</xliff:g> ay lumabag sa sarili nitong ipinapatupad na patakarang StrictMode."</string>
<string name="heavy_weight_notification" msgid="9087063985776626166">"Tumatakbo ang <xliff:g id="APP">%1$s</xliff:g>"</string>
@@ -919,40 +913,26 @@
<item quantity="one" msgid="1634101450343277345">"Available ang bukas na Wi-Fi network"</item>
<item quantity="other" msgid="7915895323644292768">"Buksan ang mga available na Wi-Fi network"</item>
</plurals>
- <!-- no translation found for wifi_watchdog_network_disabled (6398650124751302012) -->
- <skip />
- <!-- no translation found for wifi_watchdog_network_disabled_detailed (4659127251774069612) -->
- <skip />
- <!-- no translation found for wifi_p2p_dialog_title (97611782659324517) -->
- <skip />
- <!-- no translation found for wifi_p2p_turnon_message (2804722042556269129) -->
- <skip />
- <!-- no translation found for wifi_p2p_failed_message (6467545523417622335) -->
- <skip />
- <!-- no translation found for wifi_p2p_pbc_go_negotiation_request_message (3170321684621420428) -->
- <skip />
- <!-- no translation found for wifi_p2p_pin_go_negotiation_request_message (5177412094633377308) -->
- <skip />
- <!-- no translation found for wifi_p2p_pin_display_message (2834049169114922902) -->
- <skip />
+ <string name="wifi_watchdog_network_disabled" msgid="6398650124751302012">"Hindi pinagana ang isang Wi-Fi network"</string>
+ <string name="wifi_watchdog_network_disabled_detailed" msgid="4659127251774069612">"Pansamantalang hindi pinagana ang Wi-Fi network dahil sa hindi mahusay na connectivity."</string>
+ <string name="wifi_p2p_dialog_title" msgid="97611782659324517">"Wi-Fi Direct"</string>
+ <string name="wifi_p2p_turnon_message" msgid="2804722042556269129">"Simulan ang pagpapatakbo ng Wi-Fi Direct. I-o-off nito ang pagpapatakbo ng client/hotspot ng Wi-Fi."</string>
+ <string name="wifi_p2p_failed_message" msgid="6467545523417622335">"Nabigong simulan ang Wi-Fi Direct"</string>
+ <string name="wifi_p2p_pbc_go_negotiation_request_message" msgid="3170321684621420428">"Kahilingan sa pag-setup ng koneksyon ng Wi-Fi Direct mula sa <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. I-click ang OK upang tanggapin."</string>
+ <string name="wifi_p2p_pin_go_negotiation_request_message" msgid="5177412094633377308">"Kahilingan sa pag-setup ng koneksyon ng Wi-Fi Direct ng <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Ilagay ang pin upang magpatuloy."</string>
+ <string name="wifi_p2p_pin_display_message" msgid="2834049169114922902">"Kailangang mailagay ang WPS pin <xliff:g id="P2P_WPS_PIN">%1$s</xliff:g> sa peer device <xliff:g id="P2P_CLIENT_ADDRESS">%2$s</xliff:g> para magpatuloy ang setup ng koneksyon"</string>
<string name="select_character" msgid="3365550120617701745">"Magpasok ng character"</string>
<string name="sms_control_default_app_name" msgid="7630529934366549163">"Hindi kilalang application"</string>
<string name="sms_control_title" msgid="7296612781128917719">"Nagpapadala ng mga SMS na mensahe"</string>
<string name="sms_control_message" msgid="1289331457999236205">"Pinapadala ang malaking bilang ng mga SMS na mensahe. Piliin ang \"OK\" upang magpatuloy, o \"Kanselahin\" upang itigil ang pagpapadala."</string>
<string name="sms_control_yes" msgid="2532062172402615953">"OK"</string>
<string name="sms_control_no" msgid="1715320703137199869">"Kanselahin"</string>
- <!-- no translation found for sim_removed_title (6227712319223226185) -->
- <skip />
- <!-- no translation found for sim_removed_message (2064255102770489459) -->
- <skip />
- <!-- no translation found for sim_done_button (827949989369963775) -->
- <skip />
- <!-- no translation found for sim_added_title (3719670512889674693) -->
- <skip />
- <!-- no translation found for sim_added_message (1209265974048554242) -->
- <skip />
- <!-- no translation found for sim_restart_button (4722407842815232347) -->
- <skip />
+ <string name="sim_removed_title" msgid="6227712319223226185">"Naalis ang SIM card"</string>
+ <string name="sim_removed_message" msgid="2064255102770489459">"Hindi magiging available ang mobile network hanggang palitan mo ang SIM card."</string>
+ <string name="sim_done_button" msgid="827949989369963775">"Tapos na"</string>
+ <string name="sim_added_title" msgid="3719670512889674693">"Idinagdag ang SIM card"</string>
+ <string name="sim_added_message" msgid="1209265974048554242">"Dapat mong i-restart ang iyong device upang ma-access ang mobile network."</string>
+ <string name="sim_restart_button" msgid="4722407842815232347">"I-restart"</string>
<string name="time_picker_dialog_title" msgid="8349362623068819295">"Magtakda ng oras"</string>
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Itakda ang petsa"</string>
<string name="date_time_set" msgid="5777075614321087758">"Itakda"</string>
@@ -983,8 +963,7 @@
<string name="usb_mtp_notification_title" msgid="3699913097391550394">"Nakakonekta bilang isang media device"</string>
<string name="usb_ptp_notification_title" msgid="1960817192216064833">"Nakakonekta bilang isang camera"</string>
<string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"Nakakonekta bilang isang installer"</string>
- <!-- no translation found for usb_accessory_notification_title (7848236974087653666) -->
- <skip />
+ <string name="usb_accessory_notification_title" msgid="7848236974087653666">"Nakakonekta sa isang USB accessory"</string>
<string name="usb_notification_message" msgid="4447869605109736382">"I-touch para sa mga ibang pagpipilian sa USB"</string>
<string name="extmedia_format_title" product="nosdcard" msgid="7980995592595097841">"I-format USB storage"</string>
<string name="extmedia_format_title" product="default" msgid="8663247929551095854">"I-format ang SD card"</string>
@@ -1104,6 +1083,22 @@
<string name="choose_account_label" msgid="4191313562041125787">"Pumili ng account"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Taasan"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Babaan"</string>
+ <!-- no translation found for checkbox_checked (7222044992652711167) -->
+ <skip />
+ <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
+ <skip />
+ <!-- no translation found for radiobutton_selected (8603599808486581511) -->
+ <skip />
+ <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
+ <skip />
+ <!-- no translation found for switch_on (551417728476977311) -->
+ <skip />
+ <!-- no translation found for switch_off (7249798614327155088) -->
+ <skip />
+ <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
+ <skip />
+ <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"Magnabiga sa home"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Magnabiga pataas"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Higit pang mga pagpipilian"</string>
@@ -1117,6 +1112,14 @@
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"Di pinagana ang data ng 4G"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Di pinagana ang data ng mobile"</string>
<string name="data_usage_limit_body" msgid="2182247539226163759">"tapikin upang paganahin"</string>
+ <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
+ <skip />
+ <!-- no translation found for data_usage_4g_limit_snoozed_title (1106562779311209039) -->
+ <skip />
+ <!-- no translation found for data_usage_mobile_limit_snoozed_title (279240572165412168) -->
+ <skip />
+ <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <skip />
<string name="ssl_certificate" msgid="6510040486049237639">"Certificate ng seguridad"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"May-bisa ang certificate na ito."</string>
<string name="issued_to" msgid="454239480274921032">"Ibinigay kay:"</string>
@@ -1133,7 +1136,6 @@
<string name="sha1_fingerprint" msgid="7930330235269404581">"SHA-1 na fingerprint:"</string>
<string name="activity_chooser_view_see_all" msgid="180268188117163072">"Tingnan lahat..."</string>
<string name="activity_chooser_view_dialog_title_default" msgid="3325054276356556835">"Pumili ng aktibidad"</string>
- <string name="share_action_provider_share_with" msgid="1791316789651185229">"Ibahagi sa..."</string>
- <!-- no translation found for status_bar_device_locked (3092703448690669768) -->
- <skip />
+ <string name="share_action_provider_share_with" msgid="1791316789651185229">"Ibahagi kay..."</string>
+ <string name="status_bar_device_locked" msgid="3092703448690669768">"Naka-lock ang device."</string>
</resources>
diff --git a/core/res/res/values-tr/strings.xml b/core/res/res/values-tr/strings.xml
index ca29d65..1b5ea9a 100644
--- a/core/res/res/values-tr/strings.xml
+++ b/core/res/res/values-tr/strings.xml
@@ -262,10 +262,8 @@
<string name="permdesc_readInputState" msgid="5132879321450325445">"Uygulamaların, başka bir uygulama ile etkileşim halindeyken (örneğin bir şifre girerken) bile bastığınız tuşları izlemesine izin verir. Normal uygulamalarda hiçbir zaman gerek duyulmamalıdır."</string>
<string name="permlab_bindInputMethod" msgid="3360064620230515776">"bir giriş yöntemine bağla"</string>
<string name="permdesc_bindInputMethod" msgid="3734838321027317228">"Tutucunun bir giriş yönteminin en üst düzey arayüzüne bağlanmasına izin verir. Normal uygulamalarda hiçbir zaman gerek duyulmamalıdır."</string>
- <!-- no translation found for permlab_bindTextService (7358378401915287938) -->
- <skip />
- <!-- no translation found for permdesc_bindTextService (172508880651909350) -->
- <skip />
+ <string name="permlab_bindTextService" msgid="7358378401915287938">"kısa mesaj hizmetine bağla"</string>
+ <string name="permdesc_bindTextService" msgid="172508880651909350">"Sahibine, bir metin hizmetinin (ör. SpellCheckerService) en üst düzey arayüzüne bağlama izni verir. Normal uygulamalarda hiçbir zaman gerekmez."</string>
<string name="permlab_bindWallpaper" msgid="8716400279937856462">"bir duvar kağıdına tabi kıl"</string>
<string name="permdesc_bindWallpaper" msgid="5287754520361915347">"Hesap sahibine bir duvar kağıdının en üst düzey arayüzüne bağlanma izni verir. Normal uygulamalarda hiçbir zaman gerek duyulmamalıdır."</string>
<string name="permlab_bindRemoteViews" msgid="5697987759897367099">"bir widget hizmetine bağla"</string>
@@ -724,10 +722,8 @@
<string name="permdesc_writeHistoryBookmarks" product="default" msgid="945571990357114950">"Uygulamaya telefonunuzda depolanan Tarayıcı geçmişini veya favorileri değiştirme izni verir. Kötü amaçlı uygulamalar bunu Tarayıcı verilerinizi silmek veya değiştirmek için kullanabilir."</string>
<string name="permlab_setAlarm" msgid="5924401328803615165">"çalar saatte alarm ayarla"</string>
<string name="permdesc_setAlarm" msgid="5966966598149875082">"Uygulamanın yüklü bir çalar saat uygulamasında bir alarm ayarlamasına izin verir. Bazı çalar saat uygulamaları bu özelliği kullanmayabilir."</string>
- <!-- no translation found for permlab_readWriteOwnVoicemail (8861946090046059697) -->
- <skip />
- <!-- no translation found for permdesc_readWriteOwnVoicemail (7343490168272921274) -->
- <skip />
+ <string name="permlab_readWriteOwnVoicemail" msgid="8861946090046059697">"Bu uygulamanın yönettiği sesli mesajlara eriş"</string>
+ <string name="permdesc_readWriteOwnVoicemail" msgid="7343490168272921274">"Uygulamaya, yalnızca, ilgili hizmetin erişebildiği sesli mesajları depolama ve alma izni verir."</string>
<string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"Tarayıcı\'nın coğrafi konum izinlerini değiştir"</string>
<string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"Bir uygulamanın, Tarayıcı\'nın coğrafi konum izinlerini değiştirmesine izin verir. Kötü amaçlı uygulamalar, bu özelliği konum bilgilerini rastgele web sitelerine göndermek için kullanabilir."</string>
<string name="save_password_message" msgid="767344687139195790">"Tarayıcının bu şifreyi anımsamasını istiyor musunuz?"</string>
@@ -843,7 +839,8 @@
<string name="cut" msgid="3092569408438626261">"Kes"</string>
<string name="copy" msgid="2681946229533511987">"Kopyala"</string>
<string name="paste" msgid="5629880836805036433">"Yapıştır"</string>
- <string name="pasteDisabled" msgid="7259254654641456570">"Yapştrlck bir şy yok"</string>
+ <!-- no translation found for replace (8333608224471746584) -->
+ <skip />
<string name="copyUrl" msgid="2538211579596067402">"URL\'yi kopyala"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Metin seç..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Metin seçimi"</string>
@@ -880,12 +877,9 @@
<string name="launch_warning_title" msgid="8323761616052121936">"Uygulama yönlendirildi"</string>
<string name="launch_warning_replace" msgid="6202498949970281412">"<xliff:g id="APP_NAME">%1$s</xliff:g> şimdi çalışıyor."</string>
<string name="launch_warning_original" msgid="188102023021668683">"İlk olarak <xliff:g id="APP_NAME">%1$s</xliff:g> başlatıldı."</string>
- <!-- no translation found for screen_compat_mode_scale (3202955667675944499) -->
- <skip />
- <!-- no translation found for screen_compat_mode_show (4013878876486655892) -->
- <skip />
- <!-- no translation found for screen_compat_mode_hint (2953716574198046484) -->
- <skip />
+ <string name="screen_compat_mode_scale" msgid="3202955667675944499">"Ölçek"</string>
+ <string name="screen_compat_mode_show" msgid="4013878876486655892">"Her zaman göster"</string>
+ <string name="screen_compat_mode_hint" msgid="2953716574198046484">"Bunu Ayarlar > Uygulamalar > Uygulamaları yönet bölümünden yeniden etkinleştirebilirsiniz."</string>
<string name="smv_application" msgid="295583804361236288">"<xliff:g id="APPLICATION">%1$s</xliff:g> uygulaması (<xliff:g id="PROCESS">%2$s</xliff:g> işlemi) kendiliğinden uyguladığı StrictMode politikasını ihlal etti."</string>
<string name="smv_process" msgid="5120397012047462446">"<xliff:g id="PROCESS">%1$s</xliff:g> işlemi kendiliğinden uyguladığı StrictMode politikasını ihlal etti."</string>
<string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> çalışıyor"</string>
@@ -919,40 +913,26 @@
<item quantity="one" msgid="1634101450343277345">"Kullanılabilir kablosuz ağı aç"</item>
<item quantity="other" msgid="7915895323644292768">"Kullanılabilir kablosuz ağları aç"</item>
</plurals>
- <!-- no translation found for wifi_watchdog_network_disabled (6398650124751302012) -->
- <skip />
- <!-- no translation found for wifi_watchdog_network_disabled_detailed (4659127251774069612) -->
- <skip />
- <!-- no translation found for wifi_p2p_dialog_title (97611782659324517) -->
- <skip />
- <!-- no translation found for wifi_p2p_turnon_message (2804722042556269129) -->
- <skip />
- <!-- no translation found for wifi_p2p_failed_message (6467545523417622335) -->
- <skip />
- <!-- no translation found for wifi_p2p_pbc_go_negotiation_request_message (3170321684621420428) -->
- <skip />
- <!-- no translation found for wifi_p2p_pin_go_negotiation_request_message (5177412094633377308) -->
- <skip />
- <!-- no translation found for wifi_p2p_pin_display_message (2834049169114922902) -->
- <skip />
+ <string name="wifi_watchdog_network_disabled" msgid="6398650124751302012">"Kablosuz ağ devre dışı bırakıldı."</string>
+ <string name="wifi_watchdog_network_disabled_detailed" msgid="4659127251774069612">"Kötü bağlantı nedeniyle Kablosuz ağ geçici olarak devre dışı bırakıldı."</string>
+ <string name="wifi_p2p_dialog_title" msgid="97611782659324517">"Kablosuz Doğrudan Bağlantı"</string>
+ <string name="wifi_p2p_turnon_message" msgid="2804722042556269129">"Kablosuz Doğrudan Bağlantı işlemini başlat. Bu durumda Kablosuz istemci/hotspot işlemi kapatılacak."</string>
+ <string name="wifi_p2p_failed_message" msgid="6467545523417622335">"Kablosuz Doğrudan Bağlantı başlatılamadı"</string>
+ <string name="wifi_p2p_pbc_go_negotiation_request_message" msgid="3170321684621420428">"<xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g> tarafından gelen Kablosuz Doğrudan Bağlantı kurulum isteği. Kabul etmek için TAMAM\'ı tıklayın."</string>
+ <string name="wifi_p2p_pin_go_negotiation_request_message" msgid="5177412094633377308">"<xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g> tarafından gelen Kablosuz Doğrudan Bağlantı kurulumu isteği. Devam etmek için pin girin."</string>
+ <string name="wifi_p2p_pin_display_message" msgid="2834049169114922902">"Bağlantı kurulum işleminin devamı için <xliff:g id="P2P_CLIENT_ADDRESS">%2$s</xliff:g> eş cihazında WPS pin <xliff:g id="P2P_WPS_PIN">%1$s</xliff:g> girilmelidir."</string>
<string name="select_character" msgid="3365550120617701745">"Karakter ekle"</string>
<string name="sms_control_default_app_name" msgid="7630529934366549163">"Bilinmeyen uygulama"</string>
<string name="sms_control_title" msgid="7296612781128917719">"SMS mesajları gönderiliyor"</string>
<string name="sms_control_message" msgid="1289331457999236205">"Çok sayıda SMS mesajı gönderiliyor. Devam etmek için \"Tamam\"ı, göndermeyi durdurmak için \"İptal\"i seçin."</string>
<string name="sms_control_yes" msgid="2532062172402615953">"Tamam"</string>
<string name="sms_control_no" msgid="1715320703137199869">"İptal"</string>
- <!-- no translation found for sim_removed_title (6227712319223226185) -->
- <skip />
- <!-- no translation found for sim_removed_message (2064255102770489459) -->
- <skip />
- <!-- no translation found for sim_done_button (827949989369963775) -->
- <skip />
- <!-- no translation found for sim_added_title (3719670512889674693) -->
- <skip />
- <!-- no translation found for sim_added_message (1209265974048554242) -->
- <skip />
- <!-- no translation found for sim_restart_button (4722407842815232347) -->
- <skip />
+ <string name="sim_removed_title" msgid="6227712319223226185">"SIM card çıkarıldı"</string>
+ <string name="sim_removed_message" msgid="2064255102770489459">"SIM kartı değiştirinceye kadar mobil ağ kullanılamayacak."</string>
+ <string name="sim_done_button" msgid="827949989369963775">"Tamamlandı"</string>
+ <string name="sim_added_title" msgid="3719670512889674693">"SIM kart eklendi"</string>
+ <string name="sim_added_message" msgid="1209265974048554242">"Mobil ağa erişmek için cihazınızı yeniden başlatmanız gerekir."</string>
+ <string name="sim_restart_button" msgid="4722407842815232347">"Yeniden başlat"</string>
<string name="time_picker_dialog_title" msgid="8349362623068819295">"Saati ayarla"</string>
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Tarihi ayarla"</string>
<string name="date_time_set" msgid="5777075614321087758">"Ayarla"</string>
@@ -983,8 +963,7 @@
<string name="usb_mtp_notification_title" msgid="3699913097391550394">"Medya cihazı olarak bağlandı"</string>
<string name="usb_ptp_notification_title" msgid="1960817192216064833">"Kamera olarak bağlandı"</string>
<string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"Yükleyici olarak bağlandı"</string>
- <!-- no translation found for usb_accessory_notification_title (7848236974087653666) -->
- <skip />
+ <string name="usb_accessory_notification_title" msgid="7848236974087653666">"USB aksesuarına bağlandı"</string>
<string name="usb_notification_message" msgid="4447869605109736382">"Diğer USB seçenekleri için dokunun"</string>
<string name="extmedia_format_title" product="nosdcard" msgid="7980995592595097841">"USB\'yi biçimlendir"</string>
<string name="extmedia_format_title" product="default" msgid="8663247929551095854">"SD kartı biçimlendir"</string>
@@ -1104,6 +1083,22 @@
<string name="choose_account_label" msgid="4191313562041125787">"Bir hesap seçin"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Artır"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Azalt"</string>
+ <!-- no translation found for checkbox_checked (7222044992652711167) -->
+ <skip />
+ <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
+ <skip />
+ <!-- no translation found for radiobutton_selected (8603599808486581511) -->
+ <skip />
+ <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
+ <skip />
+ <!-- no translation found for switch_on (551417728476977311) -->
+ <skip />
+ <!-- no translation found for switch_off (7249798614327155088) -->
+ <skip />
+ <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
+ <skip />
+ <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"Ana sayfaya git"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Yukarı git"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Diğer seçenekler"</string>
@@ -1117,6 +1112,14 @@
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"4G verileri devre dışı"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Mobil veriler devre dışı"</string>
<string name="data_usage_limit_body" msgid="2182247539226163759">"etkinleştirmek içn hafifçe vurun"</string>
+ <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
+ <skip />
+ <!-- no translation found for data_usage_4g_limit_snoozed_title (1106562779311209039) -->
+ <skip />
+ <!-- no translation found for data_usage_mobile_limit_snoozed_title (279240572165412168) -->
+ <skip />
+ <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <skip />
<string name="ssl_certificate" msgid="6510040486049237639">"Güvenlik sertifikası"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Bu sertifika geçerli."</string>
<string name="issued_to" msgid="454239480274921032">"Verilen:"</string>
@@ -1132,10 +1135,7 @@
<string name="sha256_fingerprint" msgid="4391271286477279263">"SHA-256 parmak izi:"</string>
<string name="sha1_fingerprint" msgid="7930330235269404581">"SHA-1 parmak izi:"</string>
<string name="activity_chooser_view_see_all" msgid="180268188117163072">"Tümünü göster..."</string>
- <!-- no translation found for activity_chooser_view_dialog_title_default (3325054276356556835) -->
- <skip />
- <!-- no translation found for share_action_provider_share_with (1791316789651185229) -->
- <skip />
- <!-- no translation found for status_bar_device_locked (3092703448690669768) -->
- <skip />
+ <string name="activity_chooser_view_dialog_title_default" msgid="3325054276356556835">"Etkinlik seçin"</string>
+ <string name="share_action_provider_share_with" msgid="1791316789651185229">"Şununla paylaş..."</string>
+ <string name="status_bar_device_locked" msgid="3092703448690669768">"Cihaz kilitli."</string>
</resources>
diff --git a/core/res/res/values-uk/strings.xml b/core/res/res/values-uk/strings.xml
index 5a4a34c..91bd1c4 100644
--- a/core/res/res/values-uk/strings.xml
+++ b/core/res/res/values-uk/strings.xml
@@ -262,10 +262,8 @@
<string name="permdesc_readInputState" msgid="5132879321450325445">"Дозволяє програмі переглядати клавіші, які ви натискаєте, навіть під час роботи з іншою програмою (наприклад, під час вводу пароля). Ніколи не потрібний для звичайних програм."</string>
<string name="permlab_bindInputMethod" msgid="3360064620230515776">"прив\'яз. до методу введ."</string>
<string name="permdesc_bindInputMethod" msgid="3734838321027317228">"Дозволяє власнику прив\'язувати до інтерфейсу верхнього рівня методу введення. Ніколи не потрібний для звичайних програм."</string>
- <!-- no translation found for permlab_bindTextService (7358378401915287938) -->
- <skip />
- <!-- no translation found for permdesc_bindTextService (172508880651909350) -->
- <skip />
+ <string name="permlab_bindTextService" msgid="7358378401915287938">"прив’язати до текстової служби"</string>
+ <string name="permdesc_bindTextService" msgid="172508880651909350">"Дозволяє власникові прив’язувати до інтерфейсу верхнього рівня текстової служби (напр. SpellCheckerService). Ніколи не застосовується для звичайних програм."</string>
<string name="permlab_bindWallpaper" msgid="8716400279937856462">"прив\'зати до фон. мал."</string>
<string name="permdesc_bindWallpaper" msgid="5287754520361915347">"Дозволяє власнику прив\'язувати до інтерфейсу верхнього рівня фон. малюнка. Ніколи не потрібний для звичайних програм."</string>
<string name="permlab_bindRemoteViews" msgid="5697987759897367099">"прив\'язувати до служби віджетів"</string>
@@ -724,10 +722,8 @@
<string name="permdesc_writeHistoryBookmarks" product="default" msgid="945571990357114950">"Дозволяє програмі змінювати історію чи закладки переглядача, збережені у вашому тел. Шкідливі програми можуть викор. це, щоб видаляти чи змінювати дані переглядача."</string>
<string name="permlab_setAlarm" msgid="5924401328803615165">"налашт. сигнал у будильн."</string>
<string name="permdesc_setAlarm" msgid="5966966598149875082">"Дозволяє програмі налаштовувати сигнал у встановленій програмі будильника. У деяких програмах будильника ця функція може не застосовуватися."</string>
- <!-- no translation found for permlab_readWriteOwnVoicemail (8861946090046059697) -->
- <skip />
- <!-- no translation found for permdesc_readWriteOwnVoicemail (7343490168272921274) -->
- <skip />
+ <string name="permlab_readWriteOwnVoicemail" msgid="8861946090046059697">"Доступ до голосової пошти, якою керує ця програма"</string>
+ <string name="permdesc_readWriteOwnVoicemail" msgid="7343490168272921274">"Дозволяє програмі зберігати та відновлювати лише голосову пошту, доступ до якої має пов’язана з нею служба."</string>
<string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"Змін. дозволи геогр. місцезн. перегладача"</string>
<string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"Дозволяє програмі змін. дозволи географ. місцезн. переглядача. Шкідливі програми можуть використ. це, щоб дозволяти надсилати інф-ю про місцезн. випадковим веб-сайтам."</string>
<string name="save_password_message" msgid="767344687139195790">"Хочете, щоб переглядач запам\'ятав цей пароль?"</string>
@@ -843,7 +839,8 @@
<string name="cut" msgid="3092569408438626261">"Виріз."</string>
<string name="copy" msgid="2681946229533511987">"Копіюв."</string>
<string name="paste" msgid="5629880836805036433">"Вставити"</string>
- <string name="pasteDisabled" msgid="7259254654641456570">"Немає що вставити"</string>
+ <!-- no translation found for replace (8333608224471746584) -->
+ <skip />
<string name="copyUrl" msgid="2538211579596067402">"Копіюв. URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Вибрати текст..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Вибір тексту"</string>
@@ -880,12 +877,9 @@
<string name="launch_warning_title" msgid="8323761616052121936">"Програму переадресовано"</string>
<string name="launch_warning_replace" msgid="6202498949970281412">"Зараз працює <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
<string name="launch_warning_original" msgid="188102023021668683">"Спочатку було запущено <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
- <!-- no translation found for screen_compat_mode_scale (3202955667675944499) -->
- <skip />
- <!-- no translation found for screen_compat_mode_show (4013878876486655892) -->
- <skip />
- <!-- no translation found for screen_compat_mode_hint (2953716574198046484) -->
- <skip />
+ <string name="screen_compat_mode_scale" msgid="3202955667675944499">"Масштаб"</string>
+ <string name="screen_compat_mode_show" msgid="4013878876486655892">"Завжди показувати"</string>
+ <string name="screen_compat_mode_hint" msgid="2953716574198046484">"Знову ввімкнути це в розділі Налаштування > Програми > Керування програмами."</string>
<string name="smv_application" msgid="295583804361236288">"Програма <xliff:g id="APPLICATION">%1$s</xliff:g> (процес <xliff:g id="PROCESS">%2$s</xliff:g>) порушила свою самозастосовну політику StrictMode."</string>
<string name="smv_process" msgid="5120397012047462446">"Процес <xliff:g id="PROCESS">%1$s</xliff:g> порушив свою самозастосовну політику StrictMode."</string>
<string name="heavy_weight_notification" msgid="9087063985776626166">"Працює <xliff:g id="APP">%1$s</xliff:g>"</string>
@@ -919,40 +913,26 @@
<item quantity="one" msgid="1634101450343277345">"Відкрита Wi-Fi мережа доступна"</item>
<item quantity="other" msgid="7915895323644292768">"Відкриті Wi-Fi мережі доступні"</item>
</plurals>
- <!-- no translation found for wifi_watchdog_network_disabled (6398650124751302012) -->
- <skip />
- <!-- no translation found for wifi_watchdog_network_disabled_detailed (4659127251774069612) -->
- <skip />
- <!-- no translation found for wifi_p2p_dialog_title (97611782659324517) -->
- <skip />
- <!-- no translation found for wifi_p2p_turnon_message (2804722042556269129) -->
- <skip />
- <!-- no translation found for wifi_p2p_failed_message (6467545523417622335) -->
- <skip />
- <!-- no translation found for wifi_p2p_pbc_go_negotiation_request_message (3170321684621420428) -->
- <skip />
- <!-- no translation found for wifi_p2p_pin_go_negotiation_request_message (5177412094633377308) -->
- <skip />
- <!-- no translation found for wifi_p2p_pin_display_message (2834049169114922902) -->
- <skip />
+ <string name="wifi_watchdog_network_disabled" msgid="6398650124751302012">"Мережа Wi-Fi була вимкнена"</string>
+ <string name="wifi_watchdog_network_disabled_detailed" msgid="4659127251774069612">"Мережа Wi-Fi була тимчасово вимкнена через погане з’єднання."</string>
+ <string name="wifi_p2p_dialog_title" msgid="97611782659324517">"Wi-Fi Direct"</string>
+ <string name="wifi_p2p_turnon_message" msgid="2804722042556269129">"Почати операцію Wi-Fi Direct. Це вимкне Wi-Fi-операцію клієнт/точка доступу."</string>
+ <string name="wifi_p2p_failed_message" msgid="6467545523417622335">"Не вдалося запустити Wi-Fi Direct"</string>
+ <string name="wifi_p2p_pbc_go_negotiation_request_message" msgid="3170321684621420428">"Запит на налаштування з’єднання Wi-Fi Direct від пристрою <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Натисніть ОК, щоб прийняти."</string>
+ <string name="wifi_p2p_pin_go_negotiation_request_message" msgid="5177412094633377308">"Запит на налаштування з’єднання Wi-Fi Direct від пристрою <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Введіть PIN-код, щоб продовжити."</string>
+ <string name="wifi_p2p_pin_display_message" msgid="2834049169114922902">"Щоб продовжити процес налаштування з’днання, потрібно ввести PIN-код WPS <xliff:g id="P2P_WPS_PIN">%1$s</xliff:g> на пристрої однорангової мережі <xliff:g id="P2P_CLIENT_ADDRESS">%2$s</xliff:g>."</string>
<string name="select_character" msgid="3365550120617701745">"Вставл-ня символу"</string>
<string name="sms_control_default_app_name" msgid="7630529934366549163">"Невідома програма"</string>
<string name="sms_control_title" msgid="7296612781128917719">"Надсил. SMS повідомлень"</string>
<string name="sms_control_message" msgid="1289331457999236205">"Надсил-ся завелика к-сть SMS повідомл. Натисн. \"OK\", щоб продовж, або \"Скасувати\", щоб припин. надсил."</string>
<string name="sms_control_yes" msgid="2532062172402615953">"OK"</string>
<string name="sms_control_no" msgid="1715320703137199869">"Скасувати"</string>
- <!-- no translation found for sim_removed_title (6227712319223226185) -->
- <skip />
- <!-- no translation found for sim_removed_message (2064255102770489459) -->
- <skip />
- <!-- no translation found for sim_done_button (827949989369963775) -->
- <skip />
- <!-- no translation found for sim_added_title (3719670512889674693) -->
- <skip />
- <!-- no translation found for sim_added_message (1209265974048554242) -->
- <skip />
- <!-- no translation found for sim_restart_button (4722407842815232347) -->
- <skip />
+ <string name="sim_removed_title" msgid="6227712319223226185">"SIM-карту вилучено"</string>
+ <string name="sim_removed_message" msgid="2064255102770489459">"Мобільна мережа буде недоступною, поки ви не заміните SIM-карту."</string>
+ <string name="sim_done_button" msgid="827949989369963775">"Готово"</string>
+ <string name="sim_added_title" msgid="3719670512889674693">"SIM-карту додано"</string>
+ <string name="sim_added_message" msgid="1209265974048554242">"Щоб отримати доступ до мобільної мережі, потрібно перезапустити пристрій."</string>
+ <string name="sim_restart_button" msgid="4722407842815232347">"Перезапуск"</string>
<string name="time_picker_dialog_title" msgid="8349362623068819295">"Установити час"</string>
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Установити дату"</string>
<string name="date_time_set" msgid="5777075614321087758">"Устан."</string>
@@ -983,8 +963,7 @@
<string name="usb_mtp_notification_title" msgid="3699913097391550394">"Під’єднано як носій"</string>
<string name="usb_ptp_notification_title" msgid="1960817192216064833">"Під’єднано як камеру"</string>
<string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"Під’єднано як програму встановлення"</string>
- <!-- no translation found for usb_accessory_notification_title (7848236974087653666) -->
- <skip />
+ <string name="usb_accessory_notification_title" msgid="7848236974087653666">"Під’єднано до аксесуара USB"</string>
<string name="usb_notification_message" msgid="4447869605109736382">"Торкніться, щоб побачити інші параметри USB"</string>
<string name="extmedia_format_title" product="nosdcard" msgid="7980995592595097841">"Форматув. носій USB"</string>
<string name="extmedia_format_title" product="default" msgid="8663247929551095854">"Формат. карти SD"</string>
@@ -1104,6 +1083,22 @@
<string name="choose_account_label" msgid="4191313562041125787">"Вибрати обліковий запис"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Додати"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Відняти"</string>
+ <!-- no translation found for checkbox_checked (7222044992652711167) -->
+ <skip />
+ <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
+ <skip />
+ <!-- no translation found for radiobutton_selected (8603599808486581511) -->
+ <skip />
+ <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
+ <skip />
+ <!-- no translation found for switch_on (551417728476977311) -->
+ <skip />
+ <!-- no translation found for switch_off (7249798614327155088) -->
+ <skip />
+ <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
+ <skip />
+ <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"Перейти на головну"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Перейти вгору"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Інші варіанти"</string>
@@ -1117,6 +1112,14 @@
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"Дані 4G вимкнено"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Мобільне передав. даних вимкнено"</string>
<string name="data_usage_limit_body" msgid="2182247539226163759">"торкніться, щоб увімкнути"</string>
+ <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
+ <skip />
+ <!-- no translation found for data_usage_4g_limit_snoozed_title (1106562779311209039) -->
+ <skip />
+ <!-- no translation found for data_usage_mobile_limit_snoozed_title (279240572165412168) -->
+ <skip />
+ <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <skip />
<string name="ssl_certificate" msgid="6510040486049237639">"Сертифікат безпеки"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Цей сертифікат дійсний."</string>
<string name="issued_to" msgid="454239480274921032">"Кому видано:"</string>
@@ -1134,6 +1137,5 @@
<string name="activity_chooser_view_see_all" msgid="180268188117163072">"Показати всі..."</string>
<string name="activity_chooser_view_dialog_title_default" msgid="3325054276356556835">"Вибрати дію"</string>
<string name="share_action_provider_share_with" msgid="1791316789651185229">"Надіслати..."</string>
- <!-- no translation found for status_bar_device_locked (3092703448690669768) -->
- <skip />
+ <string name="status_bar_device_locked" msgid="3092703448690669768">"Пристрій заблоковано."</string>
</resources>
diff --git a/core/res/res/values-vi/strings.xml b/core/res/res/values-vi/strings.xml
index a754a5c..4205041 100644
--- a/core/res/res/values-vi/strings.xml
+++ b/core/res/res/values-vi/strings.xml
@@ -262,10 +262,8 @@
<string name="permdesc_readInputState" msgid="5132879321450325445">"Cho phép ứng dụng xem các phím bạn nhấn ngay cả khi tương tác với ứng dụng khác (chẳng hạn như nhập mật khẩu). Không cần thiết cho các ứng dụng thông thường."</string>
<string name="permlab_bindInputMethod" msgid="3360064620230515776">"liên kết với phương thức nhập"</string>
<string name="permdesc_bindInputMethod" msgid="3734838321027317228">"Cho phép chủ nhân ràng buộc với giao diện cấp cao nhất của phương thức nhập. Không cần thiết cho các ứng dụng thông thường."</string>
- <!-- no translation found for permlab_bindTextService (7358378401915287938) -->
- <skip />
- <!-- no translation found for permdesc_bindTextService (172508880651909350) -->
- <skip />
+ <string name="permlab_bindTextService" msgid="7358378401915287938">"liên kết với dịch vụ văn bản"</string>
+ <string name="permdesc_bindTextService" msgid="172508880651909350">"Cho phép chủ sở hữu nối kết với giao diện cấp cao nhất của dịch vụ văn bản (ví dụ: SpellCheckerService). Không nên sử dụng cho các ứng dụng thông thường."</string>
<string name="permlab_bindWallpaper" msgid="8716400279937856462">"liên kết với hình nền"</string>
<string name="permdesc_bindWallpaper" msgid="5287754520361915347">"Cho phép chủ nhân ràng buộc với giao diện cấp cao nhất của hình nền. Không cần thiết cho các ứng dụng thông thường."</string>
<string name="permlab_bindRemoteViews" msgid="5697987759897367099">"liên kết với dịch vụ tiện ích con"</string>
@@ -724,10 +722,8 @@
<string name="permdesc_writeHistoryBookmarks" product="default" msgid="945571990357114950">"Cho phép ứng dụng sửa đổi lịch sử hoặc dấu trang của Trình duyệt được lưu trữ trên điện thoại của bạn. Các ứng dụng độc hại có thể sử dụng quyền này để xoá hoặc sửa đổi dữ liệu Trình duyệt của bạn."</string>
<string name="permlab_setAlarm" msgid="5924401328803615165">"đặt báo thức trong đồng hồ báo thức"</string>
<string name="permdesc_setAlarm" msgid="5966966598149875082">"Cho phép ứng dụng đặt báo thức trong ứng dụng đồng hồ báo thức được cài đặt. Một số ứng dụng đồng hồ báo thức có thể không sử dụng tính năng này."</string>
- <!-- no translation found for permlab_readWriteOwnVoicemail (8861946090046059697) -->
- <skip />
- <!-- no translation found for permdesc_readWriteOwnVoicemail (7343490168272921274) -->
- <skip />
+ <string name="permlab_readWriteOwnVoicemail" msgid="8861946090046059697">"Truy cập thư thoại do ứng dụng này quản lý"</string>
+ <string name="permdesc_readWriteOwnVoicemail" msgid="7343490168272921274">"Cho phép ứng dụng lưu trữ và truy xuất chỉ các thư thoại mà dịch vụ liên quan của nó có thể truy cập."</string>
<string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"Sửa đổi quyền về vị trí địa lý của Trình duyệt"</string>
<string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"Cho phép ứng dụng sửa đổi các quyền về vị trí địa lý của Trình duyệt. Các ứng dụng độc hại có thể sử dụng quyền này để cho phép gửi thông tin vị trí đến trang web bất kỳ."</string>
<string name="save_password_message" msgid="767344687139195790">"Bạn có muốn trình duyệt nhớ mật khẩu này không?"</string>
@@ -843,7 +839,8 @@
<string name="cut" msgid="3092569408438626261">"Cắt"</string>
<string name="copy" msgid="2681946229533511987">"Sao chép"</string>
<string name="paste" msgid="5629880836805036433">"Dán"</string>
- <string name="pasteDisabled" msgid="7259254654641456570">"Không có gì để dán"</string>
+ <!-- no translation found for replace (8333608224471746584) -->
+ <skip />
<string name="copyUrl" msgid="2538211579596067402">"Sao chép URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Chọn văn bản..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Lựa chọn văn bản"</string>
@@ -880,12 +877,9 @@
<string name="launch_warning_title" msgid="8323761616052121936">"Ứng dụng đã được chuyển hướng"</string>
<string name="launch_warning_replace" msgid="6202498949970281412">"<xliff:g id="APP_NAME">%1$s</xliff:g> hiện đang chạy."</string>
<string name="launch_warning_original" msgid="188102023021668683">"<xliff:g id="APP_NAME">%1$s</xliff:g> được khởi chạy trước tiên."</string>
- <!-- no translation found for screen_compat_mode_scale (3202955667675944499) -->
- <skip />
- <!-- no translation found for screen_compat_mode_show (4013878876486655892) -->
- <skip />
- <!-- no translation found for screen_compat_mode_hint (2953716574198046484) -->
- <skip />
+ <string name="screen_compat_mode_scale" msgid="3202955667675944499">"Tỷ lệ"</string>
+ <string name="screen_compat_mode_show" msgid="4013878876486655892">"Luôn hiển thị"</string>
+ <string name="screen_compat_mode_hint" msgid="2953716574198046484">"Bật lại hộp thoại này bằng Cài đặt > Ứng dụng > Quản lý ứng dụng."</string>
<string name="smv_application" msgid="295583804361236288">"Ứng dụng <xliff:g id="APPLICATION">%1$s</xliff:g> (quá trình <xliff:g id="PROCESS">%2$s</xliff:g>) đã vi phạm chính sách StrictMode tự thi hành của mình."</string>
<string name="smv_process" msgid="5120397012047462446">"Quá trình <xliff:g id="PROCESS">%1$s</xliff:g> đã vi phạm chính sách StrictMode tự thi hành của mình."</string>
<string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> đang hoạt động"</string>
@@ -919,40 +913,26 @@
<item quantity="one" msgid="1634101450343277345">"Mở mạng Wi-Fi khả dụng"</item>
<item quantity="other" msgid="7915895323644292768">"Mở mạng Wi-Fi khả dụng"</item>
</plurals>
- <!-- no translation found for wifi_watchdog_network_disabled (6398650124751302012) -->
- <skip />
- <!-- no translation found for wifi_watchdog_network_disabled_detailed (4659127251774069612) -->
- <skip />
- <!-- no translation found for wifi_p2p_dialog_title (97611782659324517) -->
- <skip />
- <!-- no translation found for wifi_p2p_turnon_message (2804722042556269129) -->
- <skip />
- <!-- no translation found for wifi_p2p_failed_message (6467545523417622335) -->
- <skip />
- <!-- no translation found for wifi_p2p_pbc_go_negotiation_request_message (3170321684621420428) -->
- <skip />
- <!-- no translation found for wifi_p2p_pin_go_negotiation_request_message (5177412094633377308) -->
- <skip />
- <!-- no translation found for wifi_p2p_pin_display_message (2834049169114922902) -->
- <skip />
+ <string name="wifi_watchdog_network_disabled" msgid="6398650124751302012">"Mạng Wi-Fi đã bị vô hiệu"</string>
+ <string name="wifi_watchdog_network_disabled_detailed" msgid="4659127251774069612">"Mạng Wi-Fi đã tạm thời bị vô hiệu do kết nối lỗi."</string>
+ <string name="wifi_p2p_dialog_title" msgid="97611782659324517">"Wi-Fi Direct"</string>
+ <string name="wifi_p2p_turnon_message" msgid="2804722042556269129">"Bắt đầu hoạt động Wi-Fi Direct. Điều này sẽ tắt hoạt động của ứng dụng khách/điểm phát sóng Wi-Fi."</string>
+ <string name="wifi_p2p_failed_message" msgid="6467545523417622335">"Không thể khởi động Wi-Fi Direct"</string>
+ <string name="wifi_p2p_pbc_go_negotiation_request_message" msgid="3170321684621420428">"Yêu cầu thiết lập kết nối Wi-Fi Direct từ <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Nhấp vào OK để chấp nhận."</string>
+ <string name="wifi_p2p_pin_go_negotiation_request_message" msgid="5177412094633377308">"Yêu cầu thiết lập Wi-Fi Direct từ <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Nhập pin để tiếp tục."</string>
+ <string name="wifi_p2p_pin_display_message" msgid="2834049169114922902">"Cần nhập pin WPS <xliff:g id="P2P_WPS_PIN">%1$s</xliff:g> vào thiết bị ngang hàng <xliff:g id="P2P_CLIENT_ADDRESS">%2$s</xliff:g> để tiếp tục thiết lập kết nối"</string>
<string name="select_character" msgid="3365550120617701745">"Chèn ký tự"</string>
<string name="sms_control_default_app_name" msgid="7630529934366549163">"Ứng dụng không xác định"</string>
<string name="sms_control_title" msgid="7296612781128917719">"Đang gửi tin nhắn SMS"</string>
<string name="sms_control_message" msgid="1289331457999236205">"Một số lượng lớn các tin nhắn SMS đang được gửi. Chọn \"OK\" để tiếp tục hoặc \"Hủy\" để dừng gửi."</string>
<string name="sms_control_yes" msgid="2532062172402615953">"OK"</string>
<string name="sms_control_no" msgid="1715320703137199869">"Hủy"</string>
- <!-- no translation found for sim_removed_title (6227712319223226185) -->
- <skip />
- <!-- no translation found for sim_removed_message (2064255102770489459) -->
- <skip />
- <!-- no translation found for sim_done_button (827949989369963775) -->
- <skip />
- <!-- no translation found for sim_added_title (3719670512889674693) -->
- <skip />
- <!-- no translation found for sim_added_message (1209265974048554242) -->
- <skip />
- <!-- no translation found for sim_restart_button (4722407842815232347) -->
- <skip />
+ <string name="sim_removed_title" msgid="6227712319223226185">"Đã xóa thẻ SIM"</string>
+ <string name="sim_removed_message" msgid="2064255102770489459">"Mạng di động sẽ không khả dụng cho đến khi bạn thay thế thẻ SIM."</string>
+ <string name="sim_done_button" msgid="827949989369963775">"Xong"</string>
+ <string name="sim_added_title" msgid="3719670512889674693">"Đã thêm thẻ SIM"</string>
+ <string name="sim_added_message" msgid="1209265974048554242">"Bạn phải khởi động lại thiết bị của mình để truy cập mạng di động."</string>
+ <string name="sim_restart_button" msgid="4722407842815232347">"Khởi động lại"</string>
<string name="time_picker_dialog_title" msgid="8349362623068819295">"Đặt giờ"</string>
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Đặt ngày"</string>
<string name="date_time_set" msgid="5777075614321087758">"Đặt"</string>
@@ -983,8 +963,7 @@
<string name="usb_mtp_notification_title" msgid="3699913097391550394">"Đã kết nối là thiết bị truyền thông"</string>
<string name="usb_ptp_notification_title" msgid="1960817192216064833">"Đã kết nối như máy ảnh"</string>
<string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"Được kết nối như trình cài đặt"</string>
- <!-- no translation found for usb_accessory_notification_title (7848236974087653666) -->
- <skip />
+ <string name="usb_accessory_notification_title" msgid="7848236974087653666">"Đã kết nối với phụ kiện USB"</string>
<string name="usb_notification_message" msgid="4447869605109736382">"Chạm để có các tùy chọn USB khác"</string>
<string name="extmedia_format_title" product="nosdcard" msgid="7980995592595097841">"Định dạng b.nhớ USB"</string>
<string name="extmedia_format_title" product="default" msgid="8663247929551095854">"Định dạng thẻ SD"</string>
@@ -1104,6 +1083,22 @@
<string name="choose_account_label" msgid="4191313562041125787">"Chọn tài khoản"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"Tăng dần"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Giảm dần"</string>
+ <!-- no translation found for checkbox_checked (7222044992652711167) -->
+ <skip />
+ <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
+ <skip />
+ <!-- no translation found for radiobutton_selected (8603599808486581511) -->
+ <skip />
+ <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
+ <skip />
+ <!-- no translation found for switch_on (551417728476977311) -->
+ <skip />
+ <!-- no translation found for switch_off (7249798614327155088) -->
+ <skip />
+ <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
+ <skip />
+ <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"Điều hướng về trang chủ"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Điều hướng lên trên"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Tùy chọn khác"</string>
@@ -1117,6 +1112,14 @@
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"4G dữ liệu bị vô hiệu hóa"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Dữ liệu di động bị vô hiệu hóa"</string>
<string name="data_usage_limit_body" msgid="2182247539226163759">"chạm để bật"</string>
+ <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
+ <skip />
+ <!-- no translation found for data_usage_4g_limit_snoozed_title (1106562779311209039) -->
+ <skip />
+ <!-- no translation found for data_usage_mobile_limit_snoozed_title (279240572165412168) -->
+ <skip />
+ <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <skip />
<string name="ssl_certificate" msgid="6510040486049237639">"Chứng chỉ bảo mật"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Chứng chỉ này hợp lệ."</string>
<string name="issued_to" msgid="454239480274921032">"Cấp cho:"</string>
@@ -1134,6 +1137,5 @@
<string name="activity_chooser_view_see_all" msgid="180268188117163072">"Xem tất cả..."</string>
<string name="activity_chooser_view_dialog_title_default" msgid="3325054276356556835">"Chọn hoạt động"</string>
<string name="share_action_provider_share_with" msgid="1791316789651185229">"Chia sẻ với..."</string>
- <!-- no translation found for status_bar_device_locked (3092703448690669768) -->
- <skip />
+ <string name="status_bar_device_locked" msgid="3092703448690669768">"Thiết bị đã bị khóa."</string>
</resources>
diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml
index 6daa793..f7e9b6f 100644
--- a/core/res/res/values-zh-rCN/strings.xml
+++ b/core/res/res/values-zh-rCN/strings.xml
@@ -843,7 +843,8 @@
<string name="cut" msgid="3092569408438626261">"剪切"</string>
<string name="copy" msgid="2681946229533511987">"复制"</string>
<string name="paste" msgid="5629880836805036433">"粘贴"</string>
- <string name="pasteDisabled" msgid="7259254654641456570">"剪贴板无内容"</string>
+ <!-- no translation found for replace (8333608224471746584) -->
+ <skip />
<string name="copyUrl" msgid="2538211579596067402">"复制网址"</string>
<string name="selectTextMode" msgid="6738556348861347240">"选择文字..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"文字选择"</string>
@@ -1104,6 +1105,22 @@
<string name="choose_account_label" msgid="4191313562041125787">"选择帐户"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"增加"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"减少"</string>
+ <!-- no translation found for checkbox_checked (7222044992652711167) -->
+ <skip />
+ <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
+ <skip />
+ <!-- no translation found for radiobutton_selected (8603599808486581511) -->
+ <skip />
+ <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
+ <skip />
+ <!-- no translation found for switch_on (551417728476977311) -->
+ <skip />
+ <!-- no translation found for switch_off (7249798614327155088) -->
+ <skip />
+ <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
+ <skip />
+ <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"导航首页"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"向上导航"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"更多选项"</string>
@@ -1117,6 +1134,14 @@
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"4G 数据已停用"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"移动数据已停用"</string>
<string name="data_usage_limit_body" msgid="2182247539226163759">"点按即可启用"</string>
+ <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
+ <skip />
+ <!-- no translation found for data_usage_4g_limit_snoozed_title (1106562779311209039) -->
+ <skip />
+ <!-- no translation found for data_usage_mobile_limit_snoozed_title (279240572165412168) -->
+ <skip />
+ <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <skip />
<string name="ssl_certificate" msgid="6510040486049237639">"安全证书"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"该证书有效。"</string>
<string name="issued_to" msgid="454239480274921032">"颁发给:"</string>
@@ -1132,10 +1157,8 @@
<string name="sha256_fingerprint" msgid="4391271286477279263">"SHA-256 指纹:"</string>
<string name="sha1_fingerprint" msgid="7930330235269404581">"SHA-1 指纹:"</string>
<string name="activity_chooser_view_see_all" msgid="180268188117163072">"查看全部..."</string>
- <!-- no translation found for activity_chooser_view_dialog_title_default (3325054276356556835) -->
- <skip />
- <!-- no translation found for share_action_provider_share_with (1791316789651185229) -->
- <skip />
+ <string name="activity_chooser_view_dialog_title_default" msgid="3325054276356556835">"选择活动"</string>
+ <string name="share_action_provider_share_with" msgid="1791316789651185229">"分享活动…"</string>
<!-- no translation found for status_bar_device_locked (3092703448690669768) -->
<skip />
</resources>
diff --git a/core/res/res/values-zh-rTW/strings.xml b/core/res/res/values-zh-rTW/strings.xml
index 411b24f..bc3817b 100644
--- a/core/res/res/values-zh-rTW/strings.xml
+++ b/core/res/res/values-zh-rTW/strings.xml
@@ -843,7 +843,8 @@
<string name="cut" msgid="3092569408438626261">"剪下"</string>
<string name="copy" msgid="2681946229533511987">"複製"</string>
<string name="paste" msgid="5629880836805036433">"貼上"</string>
- <string name="pasteDisabled" msgid="7259254654641456570">"沒有可貼上的內容"</string>
+ <!-- no translation found for replace (8333608224471746584) -->
+ <skip />
<string name="copyUrl" msgid="2538211579596067402">"複製網址"</string>
<string name="selectTextMode" msgid="6738556348861347240">"選取文字..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"選取文字"</string>
@@ -880,12 +881,9 @@
<string name="launch_warning_title" msgid="8323761616052121936">"應用程式已重新導向"</string>
<string name="launch_warning_replace" msgid="6202498949970281412">"「<xliff:g id="APP_NAME">%1$s</xliff:g>」現在正在執行。"</string>
<string name="launch_warning_original" msgid="188102023021668683">"「<xliff:g id="APP_NAME">%1$s</xliff:g>」原先已啟動。"</string>
- <!-- no translation found for screen_compat_mode_scale (3202955667675944499) -->
- <skip />
- <!-- no translation found for screen_compat_mode_show (4013878876486655892) -->
- <skip />
- <!-- no translation found for screen_compat_mode_hint (2953716574198046484) -->
- <skip />
+ <string name="screen_compat_mode_scale" msgid="3202955667675944499">"比例"</string>
+ <string name="screen_compat_mode_show" msgid="4013878876486655892">"一律顯示"</string>
+ <string name="screen_compat_mode_hint" msgid="2953716574198046484">"如要重新啟用這個模式,請至 [設定] > [應用程式] > [管理應用程式]。"</string>
<string name="smv_application" msgid="295583804361236288">"應用程式 <xliff:g id="APPLICATION">%1$s</xliff:g> (處理程序 <xliff:g id="PROCESS">%2$s</xliff:g>) 已違反其自行強制實施的嚴格模式 (StrictMode) 政策。"</string>
<string name="smv_process" msgid="5120397012047462446">"處理程序 <xliff:g id="PROCESS">%1$s</xliff:g> 已違反其自行強制實施的嚴格模式 (StrictMode) 政策。"</string>
<string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> 執行中"</string>
@@ -941,18 +939,12 @@
<string name="sms_control_message" msgid="1289331457999236205">"即將傳送大量 SMS 簡訊。選取 [確定] 繼續或 [取消] 停止傳送。"</string>
<string name="sms_control_yes" msgid="2532062172402615953">"確定"</string>
<string name="sms_control_no" msgid="1715320703137199869">"取消"</string>
- <!-- no translation found for sim_removed_title (6227712319223226185) -->
- <skip />
- <!-- no translation found for sim_removed_message (2064255102770489459) -->
- <skip />
- <!-- no translation found for sim_done_button (827949989369963775) -->
- <skip />
- <!-- no translation found for sim_added_title (3719670512889674693) -->
- <skip />
- <!-- no translation found for sim_added_message (1209265974048554242) -->
- <skip />
- <!-- no translation found for sim_restart_button (4722407842815232347) -->
- <skip />
+ <string name="sim_removed_title" msgid="6227712319223226185">"SIM 卡已移除"</string>
+ <string name="sim_removed_message" msgid="2064255102770489459">"您必須更換 SIM 卡,否則無法使用行動網路。"</string>
+ <string name="sim_done_button" msgid="827949989369963775">"完成"</string>
+ <string name="sim_added_title" msgid="3719670512889674693">"SIM 卡已新增"</string>
+ <string name="sim_added_message" msgid="1209265974048554242">"您必須重新啟動裝置,才能使用行動網路。"</string>
+ <string name="sim_restart_button" msgid="4722407842815232347">"重新啟動"</string>
<string name="time_picker_dialog_title" msgid="8349362623068819295">"設定時間"</string>
<string name="date_picker_dialog_title" msgid="5879450659453782278">"日期設定"</string>
<string name="date_time_set" msgid="5777075614321087758">"設定"</string>
@@ -1104,6 +1096,22 @@
<string name="choose_account_label" msgid="4191313562041125787">"選取帳戶"</string>
<string name="number_picker_increment_button" msgid="4830170763103463443">"增加"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"減少"</string>
+ <!-- no translation found for checkbox_checked (7222044992652711167) -->
+ <skip />
+ <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
+ <skip />
+ <!-- no translation found for radiobutton_selected (8603599808486581511) -->
+ <skip />
+ <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
+ <skip />
+ <!-- no translation found for switch_on (551417728476977311) -->
+ <skip />
+ <!-- no translation found for switch_off (7249798614327155088) -->
+ <skip />
+ <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
+ <skip />
+ <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
+ <skip />
<string name="action_bar_home_description" msgid="5293600496601490216">"瀏覽首頁"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"向上瀏覽"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"更多選項"</string>
@@ -1117,6 +1125,14 @@
<string name="data_usage_4g_limit_title" msgid="7636489436819470761">"已停用 4G 數據"</string>
<string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"已停用行動數據"</string>
<string name="data_usage_limit_body" msgid="2182247539226163759">"輕按一下即可啟用"</string>
+ <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
+ <skip />
+ <!-- no translation found for data_usage_4g_limit_snoozed_title (1106562779311209039) -->
+ <skip />
+ <!-- no translation found for data_usage_mobile_limit_snoozed_title (279240572165412168) -->
+ <skip />
+ <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <skip />
<string name="ssl_certificate" msgid="6510040486049237639">"安全性憑證"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"憑證有效。"</string>
<string name="issued_to" msgid="454239480274921032">"發佈至:"</string>
@@ -1132,10 +1148,8 @@
<string name="sha256_fingerprint" msgid="4391271286477279263">"SHA-256 指紋"</string>
<string name="sha1_fingerprint" msgid="7930330235269404581">"SHA-1 指紋"</string>
<string name="activity_chooser_view_see_all" msgid="180268188117163072">"查看所有活動..."</string>
- <!-- no translation found for activity_chooser_view_dialog_title_default (3325054276356556835) -->
- <skip />
- <!-- no translation found for share_action_provider_share_with (1791316789651185229) -->
- <skip />
+ <string name="activity_chooser_view_dialog_title_default" msgid="3325054276356556835">"選取活動"</string>
+ <string name="share_action_provider_share_with" msgid="1791316789651185229">"分享活動..."</string>
<!-- no translation found for status_bar_device_locked (3092703448690669768) -->
<skip />
</resources>
diff --git a/core/res/res/values-zu/strings.xml b/core/res/res/values-zu/strings.xml
index f224e63..3430057 100644
--- a/core/res/res/values-zu/strings.xml
+++ b/core/res/res/values-zu/strings.xml
@@ -1117,7 +1117,8 @@
<skip />
<!-- no translation found for paste (5629880836805036433) -->
<skip />
- <string name="pasteDisabled" msgid="7259254654641456570">"Ayikho into yokunamathiselwa"</string>
+ <!-- no translation found for replace (8333608224471746584) -->
+ <skip />
<!-- no translation found for copyUrl (2538211579596067402) -->
<skip />
<string name="selectTextMode" msgid="6738556348861347240">"Khetha umbhalo..."</string>
@@ -1431,6 +1432,22 @@
<skip />
<!-- no translation found for number_picker_decrement_button (2576606679160067262) -->
<skip />
+ <!-- no translation found for checkbox_checked (7222044992652711167) -->
+ <skip />
+ <!-- no translation found for checkbox_not_checked (5174639551134444056) -->
+ <skip />
+ <!-- no translation found for radiobutton_selected (8603599808486581511) -->
+ <skip />
+ <!-- no translation found for radiobutton_not_selected (2908760184307722393) -->
+ <skip />
+ <!-- no translation found for switch_on (551417728476977311) -->
+ <skip />
+ <!-- no translation found for switch_off (7249798614327155088) -->
+ <skip />
+ <!-- no translation found for togglebutton_pressed (4180411746647422233) -->
+ <skip />
+ <!-- no translation found for togglebutton_not_pressed (4495147725636134425) -->
+ <skip />
<!-- no translation found for action_bar_home_description (5293600496601490216) -->
<skip />
<!-- no translation found for action_bar_up_description (2237496562952152589) -->
@@ -1457,6 +1474,14 @@
<skip />
<!-- no translation found for data_usage_limit_body (2182247539226163759) -->
<skip />
+ <!-- no translation found for data_usage_3g_limit_snoozed_title (7026739121138005231) -->
+ <skip />
+ <!-- no translation found for data_usage_4g_limit_snoozed_title (1106562779311209039) -->
+ <skip />
+ <!-- no translation found for data_usage_mobile_limit_snoozed_title (279240572165412168) -->
+ <skip />
+ <!-- no translation found for data_usage_limit_snoozed_body (2932736326652880660) -->
+ <skip />
<!-- no translation found for ssl_certificate (6510040486049237639) -->
<skip />
<!-- no translation found for ssl_certificate_is_valid (6825263250774569373) -->
diff --git a/core/res/res/values/arrays.xml b/core/res/res/values/arrays.xml
index bcf1991..73103a6 100644
--- a/core/res/res/values/arrays.xml
+++ b/core/res/res/values/arrays.xml
@@ -89,20 +89,10 @@
<item>@drawable/btn_radio_off</item>
<item>@drawable/btn_default_transparent_normal</item>
<item>@drawable/btn_default_small_selected</item>
- <item>@drawable/btn_default_small_pressed_holo_light</item>
- <item>@drawable/btn_default_small_pressed_holo_dark</item>
<item>@drawable/btn_default_small_pressed</item>
- <item>@drawable/btn_default_small_normal_holo_light</item>
- <item>@drawable/btn_default_small_normal_holo_dark</item>
<item>@drawable/btn_default_small_normal_disable_focused</item>
<item>@drawable/btn_default_small_normal_disable</item>
<item>@drawable/btn_default_small_normal</item>
- <item>@drawable/btn_default_small_focused_holo_light</item>
- <item>@drawable/btn_default_small_focused_holo_dark</item>
- <item>@drawable/btn_default_small_disabled_holo_light</item>
- <item>@drawable/btn_default_small_disabled_holo_dark</item>
- <item>@drawable/btn_default_small_disabled_focused_holo_light</item>
- <item>@drawable/btn_default_small_disabled_focused_holo_dark</item>
<item>@drawable/btn_default_selected</item>
<item>@drawable/btn_default_pressed_holo_light</item>
<item>@drawable/btn_default_pressed_holo_dark</item>
diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml
index f80f27d..f70319b 100755
--- a/core/res/res/values/attrs.xml
+++ b/core/res/res/values/attrs.xml
@@ -2632,12 +2632,12 @@
<attr name="alignmentMode" />
<!-- When set to true, forces row boundaries to appear in the same order
as row indices.
- The default is false.
+ The default is true.
See {@link android.widget.GridLayout#setRowOrderPreserved(boolean)}.-->
<attr name="rowOrderPreserved" format="boolean" />
<!-- When set to true, forces column boundaries to appear in the same order
as column indices.
- The default is false.
+ The default is true.
See {@link android.widget.GridLayout#setColumnOrderPreserved(boolean)}.-->
<attr name="columnOrderPreserved" format="boolean" />
</declare-styleable>
@@ -3363,18 +3363,6 @@
The default is LEFT | BASELINE.
See {@link android.widget.GridLayout.LayoutParams#setGravity(int)}. -->
<attr name="layout_gravity" />
- <!-- {@deprecated To make a column group lexible, ensure that every component in the
- group defines a horizontal gravity.} -->
- <attr name="layout_columnFlexibility" >
- <enum name="inflexible" value="0" />
- <enum name="canStretch" value="2" />
- </attr>
- <!-- {@deprecated To make a row group flexible, ensure that every component in the
- group defines a vertical gravity.} -->
- <attr name="layout_rowFlexibility" >
- <enum name="inflexible" value="0" />
- <enum name="canStretch" value="2" />
- </attr>
</declare-styleable>
<declare-styleable name="FrameLayout_Layout">
<attr name="layout_gravity" />
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index 65dce49..73443a0 100755
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -84,6 +84,9 @@
specified for -large and -xlarge configurations. -->
<dimen name="config_prefDialogWidth">320dp</dimen>
+ <!-- Enables or disables fading edges when marquee is enabled in TextView. -->
+ <bool name="config_ui_enableFadingMarquee">true</bool>
+
<!-- Whether dialogs should close automatically when the user touches outside
of them. This should not normally be modified. -->
<bool name="config_closeDialogWhenTouchOutside">false</bool>
diff --git a/core/res/res/values/public.xml b/core/res/res/values/public.xml
index 0555d10..87e9249 100644
--- a/core/res/res/values/public.xml
+++ b/core/res/res/values/public.xml
@@ -1728,10 +1728,8 @@
<public type="attr" name="layout_row" />
<public type="attr" name="layout_rowSpan" />
- <public type="attr" name="layout_rowFlexibility" />
<public type="attr" name="layout_columnSpan" />
- <public type="attr" name="layout_columnFlexibility" />
<public type="attr" name="actionModeSelectAllDrawable" />
diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml
index 147fff0..c5aa4b2 100755
--- a/core/res/res/values/strings.xml
+++ b/core/res/res/values/strings.xml
@@ -2405,6 +2405,9 @@
<!-- Item on EditText context menu. This action is used to paste from the clipboard into the eidt field -->
<string name="paste">Paste</string>
+ <!-- Text displayed in a popup dialog in TextEdit when the clipboard is empty. 'paste' is used otherwise. [CHAR LIMIT=20] -->
+ <string name="pasteDisabled">Nothing to paste</string>
+
<!-- Item on EditText context menu. This action is used to replace the current word by other suggested words, suggested by the IME or the spell checker -->
<string name="replace">Replace</string>
@@ -2552,6 +2555,19 @@
<!-- Title of the dialog where the user is adjusting the general audio volume -->
<string name="volume_unknown">Volume</string>
+ <!-- Content description for bluetooth volume icon [CHAR LIMIT=100] -->
+ <string name="volume_icon_description_bluetooth">Bluetooth volume. Tap to toggle silent mode.</string>
+ <!-- Content description for ringer volume icon [CHAR LIMIT=100] -->
+ <string name="volume_icon_description_ringer">Ringtone volume. Tap to toggle silent mode.</string>
+ <!-- Content description for in-call volume icon [CHAR LIMIT=100] -->
+ <string name="volume_icon_description_incall">Call volume. Tap to toggle silent mode.</string>
+ <!-- Content description for media volume icon [CHAR LIMIT=100] -->
+ <string name="volume_icon_description_media">Media volume. Tap to toggle silent mode.</string>
+ <!-- Content description for notification volume icon [CHAR LIMIT=100] -->
+ <string name="volume_icon_description_notification">Notification volume. Tap to toggle silent mode.</string>
+ <!-- Content description for volume settings expansion button [CHAR LIMIT=100] -->
+ <string name="volume_panel_more_description">Tap to show more audio stream volumes.</string>
+
<!-- Ringtone picker strings --> <skip />
<!-- Choice in the ringtone picker. If chosen, the default ringtone will be used. -->
<string name="ringtone_default">Default ringtone</string>
diff --git a/drm/common/IDrmManagerService.cpp b/drm/common/IDrmManagerService.cpp
index 986f32c..0b76a36 100644
--- a/drm/common/IDrmManagerService.cpp
+++ b/drm/common/IDrmManagerService.cpp
@@ -808,7 +808,9 @@
LOGV("BnDrmManagerService::onTransact :INSTALL_DRM_ENGINE");
CHECK_INTERFACE(IDrmManagerService, data, reply);
- status_t status = installDrmEngine(data.readInt32(), data.readString8());
+ const int uniqueId = data.readInt32();
+ const String8 engineFile = data.readString8();
+ status_t status = installDrmEngine(uniqueId, engineFile);
reply->writeInt32(status);
return DRM_NO_ERROR;
@@ -822,7 +824,8 @@
const int uniqueId = data.readInt32();
const String8 path = data.readString8();
- DrmConstraints* drmConstraints = getConstraints(uniqueId, &path, data.readInt32());
+ DrmConstraints* drmConstraints
+ = getConstraints(uniqueId, &path, data.readInt32());
if (NULL != drmConstraints) {
//Filling DRM Constraints contents
@@ -948,7 +951,9 @@
const int uniqueId = data.readInt32();
//Filling DRM info Request
- DrmInfoRequest* drmInfoRequest = new DrmInfoRequest(data.readInt32(), data.readString8());
+ const int infoType = data.readInt32();
+ const String8 mimeType = data.readString8();
+ DrmInfoRequest* drmInfoRequest = new DrmInfoRequest(infoType, mimeType);
const int size = data.readInt32();
for (int index = 0; index < size; ++index) {
@@ -1021,7 +1026,9 @@
LOGV("BnDrmManagerService::onTransact :GET_ORIGINAL_MIMETYPE");
CHECK_INTERFACE(IDrmManagerService, data, reply);
- const String8 originalMimeType = getOriginalMimeType(data.readInt32(), data.readString8());
+ const int uniqueId = data.readInt32();
+ const String8 path = data.readString8();
+ const String8 originalMimeType = getOriginalMimeType(uniqueId, path);
reply->writeString8(originalMimeType);
return DRM_NO_ERROR;
@@ -1032,8 +1039,10 @@
LOGV("BnDrmManagerService::onTransact :GET_DRM_OBJECT_TYPE");
CHECK_INTERFACE(IDrmManagerService, data, reply);
- const int drmObjectType
- = getDrmObjectType(data.readInt32(), data.readString8(), data.readString8());
+ const int uniqueId = data.readInt32();
+ const String8 path = data.readString8();
+ const String8 mimeType = data.readString8();
+ const int drmObjectType = getDrmObjectType(uniqueId, path, mimeType);
reply->writeInt32(drmObjectType);
return DRM_NO_ERROR;
@@ -1044,8 +1053,10 @@
LOGV("BnDrmManagerService::onTransact :CHECK_RIGHTS_STATUS");
CHECK_INTERFACE(IDrmManagerService, data, reply);
- const int result
- = checkRightsStatus(data.readInt32(), data.readString8(), data.readInt32());
+ const int uniqueId = data.readInt32();
+ const String8 path = data.readString8();
+ const int action = data.readInt32();
+ const int result = checkRightsStatus(uniqueId, path, action);
reply->writeInt32(result);
return DRM_NO_ERROR;
@@ -1061,9 +1072,10 @@
DecryptHandle handle;
readDecryptHandleFromParcelData(&handle, data);
+ const int action = data.readInt32();
+ const bool reserve = static_cast<bool>(data.readInt32());
const status_t status
- = consumeRights(uniqueId, &handle, data.readInt32(),
- static_cast<bool>(data.readInt32()));
+ = consumeRights(uniqueId, &handle, action, reserve);
reply->writeInt32(status);
clearDecryptHandle(&handle);
@@ -1080,8 +1092,10 @@
DecryptHandle handle;
readDecryptHandleFromParcelData(&handle, data);
+ const int playbackStatus = data.readInt32();
+ const int64_t position = data.readInt64();
const status_t status
- = setPlaybackStatus(uniqueId, &handle, data.readInt32(), data.readInt64());
+ = setPlaybackStatus(uniqueId, &handle, playbackStatus, position);
reply->writeInt32(status);
clearDecryptHandle(&handle);
@@ -1093,11 +1107,13 @@
LOGV("BnDrmManagerService::onTransact :VALIDATE_ACTION");
CHECK_INTERFACE(IDrmManagerService, data, reply);
- bool result = validateAction(
- data.readInt32(),
- data.readString8(),
- data.readInt32(),
- ActionDescription(data.readInt32(), data.readInt32()));
+ const int uniqueId = data.readInt32();
+ const String8 path = data.readString8();
+ const int action = data.readInt32();
+ const int outputType = data.readInt32();
+ const int configuration = data.readInt32();
+ bool result = validateAction(uniqueId, path, action,
+ ActionDescription(outputType, configuration));
reply->writeInt32(result);
return DRM_NO_ERROR;
@@ -1108,7 +1124,9 @@
LOGV("BnDrmManagerService::onTransact :REMOVE_RIGHTS");
CHECK_INTERFACE(IDrmManagerService, data, reply);
- const status_t status = removeRights(data.readInt32(), data.readString8());
+ int uniqueId = data.readInt32();
+ String8 path = data.readString8();
+ const status_t status = removeRights(uniqueId, path);
reply->writeInt32(status);
return DRM_NO_ERROR;
@@ -1130,7 +1148,9 @@
LOGV("BnDrmManagerService::onTransact :OPEN_CONVERT_SESSION");
CHECK_INTERFACE(IDrmManagerService, data, reply);
- const int convertId = openConvertSession(data.readInt32(), data.readString8());
+ const int uniqueId = data.readInt32();
+ const String8 mimeType = data.readString8();
+ const int convertId = openConvertSession(uniqueId, mimeType);
reply->writeInt32(convertId);
return DRM_NO_ERROR;
@@ -1176,8 +1196,10 @@
LOGV("BnDrmManagerService::onTransact :CLOSE_CONVERT_SESSION");
CHECK_INTERFACE(IDrmManagerService, data, reply);
- DrmConvertedStatus* drmConvertedStatus
- = closeConvertSession(data.readInt32(), data.readInt32());
+ const int uniqueId = data.readInt32();
+ const int convertId = data.readInt32();
+ DrmConvertedStatus* drmConvertedStatus
+ = closeConvertSession(uniqueId, convertId);
if (NULL != drmConvertedStatus) {
//Filling Drm Converted Ststus
@@ -1241,8 +1263,10 @@
const int uniqueId = data.readInt32();
const int fd = data.readFileDescriptor();
+ const off64_t offset = data.readInt64();
+ const off64_t length = data.readInt64();
DecryptHandle* handle
- = openDecryptSession(uniqueId, fd, data.readInt64(), data.readInt64());
+ = openDecryptSession(uniqueId, fd, offset, length);
if (NULL != handle) {
writeDecryptHandleToParcelData(handle, reply);
diff --git a/graphics/java/android/graphics/Bitmap.java b/graphics/java/android/graphics/Bitmap.java
index 40d54bb..3fc6463 100644
--- a/graphics/java/android/graphics/Bitmap.java
+++ b/graphics/java/android/graphics/Bitmap.java
@@ -567,6 +567,7 @@
canvas.setBitmap(bitmap);
canvas.drawBitmap(source, srcR, dstR, paint);
+ canvas.setBitmap(null);
return bitmap;
}
diff --git a/graphics/java/android/graphics/Canvas.java b/graphics/java/android/graphics/Canvas.java
index 35ed4d2..6ae8c9b 100644
--- a/graphics/java/android/graphics/Canvas.java
+++ b/graphics/java/android/graphics/Canvas.java
@@ -178,17 +178,22 @@
* @see #getDensity()
*/
public void setBitmap(Bitmap bitmap) {
- if (!bitmap.isMutable()) {
- throw new IllegalStateException();
- }
if (isHardwareAccelerated()) {
throw new RuntimeException("Can't set a bitmap device on a GL canvas");
}
- throwIfRecycled(bitmap);
- native_setBitmap(mNativeCanvas, bitmap.ni());
+ int pointer = 0;
+ if (bitmap != null) {
+ if (!bitmap.isMutable()) {
+ throw new IllegalStateException();
+ }
+ throwIfRecycled(bitmap);
+ mDensity = bitmap.mDensity;
+ pointer = bitmap.ni();
+ }
+
+ native_setBitmap(mNativeCanvas, pointer);
mBitmap = bitmap;
- mDensity = bitmap.mDensity;
}
/**
diff --git a/graphics/java/android/graphics/Paint.java b/graphics/java/android/graphics/Paint.java
index 962f22c..163bd4a 100644
--- a/graphics/java/android/graphics/Paint.java
+++ b/graphics/java/android/graphics/Paint.java
@@ -349,6 +349,18 @@
mCompatScaling = paint.mCompatScaling;
mInvCompatScaling = paint.mInvCompatScaling;
mBidiFlags = paint.mBidiFlags;
+ hasShadow = paint.hasShadow;
+ mColorFilter = paint.mColorFilter;
+ mMaskFilter = paint.mMaskFilter;
+ mPathEffect = paint.mPathEffect;
+ mRasterizer = paint.mRasterizer;
+ mShader = paint.mShader;
+ mTypeface = paint.mTypeface;
+ mXfermode = paint.mXfermode;
+ shadowColor = paint.shadowColor;
+ shadowDx = paint.shadowDx;
+ shadowDy = paint.shadowDy;
+ shadowRadius = paint.shadowRadius;
}
/** Restores the paint to its default settings. */
@@ -1932,7 +1944,11 @@
@Override
protected void finalize() throws Throwable {
- finalizer(mNativePaint);
+ try {
+ finalizer(mNativePaint);
+ } finally {
+ super.finalize();
+ }
}
private static native int native_init();
diff --git a/graphics/java/android/graphics/drawable/BitmapDrawable.java b/graphics/java/android/graphics/drawable/BitmapDrawable.java
index 7e03e1c..87421b1 100644
--- a/graphics/java/android/graphics/drawable/BitmapDrawable.java
+++ b/graphics/java/android/graphics/drawable/BitmapDrawable.java
@@ -20,18 +20,16 @@
import android.content.res.TypedArray;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
+import android.graphics.BitmapShader;
import android.graphics.Canvas;
import android.graphics.ColorFilter;
import android.graphics.Paint;
import android.graphics.PixelFormat;
import android.graphics.Rect;
import android.graphics.Shader;
-import android.graphics.BitmapShader;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.view.Gravity;
-import android.view.View;
-
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
diff --git a/include/camera/Camera.h b/include/camera/Camera.h
index f701280..234e165 100644
--- a/include/camera/Camera.h
+++ b/include/camera/Camera.h
@@ -59,7 +59,8 @@
{
public:
virtual void notify(int32_t msgType, int32_t ext1, int32_t ext2) = 0;
- virtual void postData(int32_t msgType, const sp<IMemory>& dataPtr) = 0;
+ virtual void postData(int32_t msgType, const sp<IMemory>& dataPtr,
+ camera_frame_metadata_t *metadata) = 0;
virtual void postDataTimestamp(nsecs_t timestamp, int32_t msgType, const sp<IMemory>& dataPtr) = 0;
};
@@ -138,7 +139,8 @@
// ICameraClient interface
virtual void notifyCallback(int32_t msgType, int32_t ext, int32_t ext2);
- virtual void dataCallback(int32_t msgType, const sp<IMemory>& dataPtr);
+ virtual void dataCallback(int32_t msgType, const sp<IMemory>& dataPtr,
+ camera_frame_metadata_t *metadata);
virtual void dataCallbackTimestamp(nsecs_t timestamp, int32_t msgType, const sp<IMemory>& dataPtr);
sp<ICamera> remote();
diff --git a/include/camera/CameraParameters.h b/include/camera/CameraParameters.h
index d2f398a..48483fd 100644
--- a/include/camera/CameraParameters.h
+++ b/include/camera/CameraParameters.h
@@ -484,6 +484,17 @@
// Example value: "yuv420sp" or PIXEL_FORMAT_XXX constants. Read only.
static const char KEY_VIDEO_FRAME_FORMAT[];
+ // Sets the hint of the recording mode. If this is true, MediaRecorder.start
+ // may be faster or has less glitches. This should be called before starting
+ // the preview for the best result. But it is allowed to change the hint
+ // while the preview is active. The default value is false.
+ //
+ // The apps can still call Camera.takePicture when the hint is true. The
+ // apps can call MediaRecorder.start when the hint is false. But the
+ // performance may be worse.
+ // Example value: "true" or "false". Read/write.
+ static const char KEY_RECORDING_HINT[];
+
// Value for KEY_ZOOM_SUPPORTED or KEY_SMOOTH_ZOOM_SUPPORTED.
static const char TRUE[];
static const char FALSE[];
diff --git a/include/camera/ICameraClient.h b/include/camera/ICameraClient.h
index 236d0f6..b30aa7a 100644
--- a/include/camera/ICameraClient.h
+++ b/include/camera/ICameraClient.h
@@ -22,6 +22,7 @@
#include <binder/Parcel.h>
#include <binder/IMemory.h>
#include <utils/Timers.h>
+#include <system/camera.h>
namespace android {
@@ -31,7 +32,8 @@
DECLARE_META_INTERFACE(CameraClient);
virtual void notifyCallback(int32_t msgType, int32_t ext1, int32_t ext2) = 0;
- virtual void dataCallback(int32_t msgType, const sp<IMemory>& data) = 0;
+ virtual void dataCallback(int32_t msgType, const sp<IMemory>& data,
+ camera_frame_metadata_t *metadata) = 0;
virtual void dataCallbackTimestamp(nsecs_t timestamp, int32_t msgType, const sp<IMemory>& data) = 0;
};
diff --git a/include/ui/Input.h b/include/ui/Input.h
index c9f694a..f1385a0 100644
--- a/include/ui/Input.h
+++ b/include/ui/Input.h
@@ -206,10 +206,17 @@
float getAxisValue(int32_t axis) const;
status_t setAxisValue(int32_t axis, float value);
- float* editAxisValue(int32_t axis);
void scale(float scale);
+ inline float getX() const {
+ return getAxisValue(AMOTION_EVENT_AXIS_X);
+ }
+
+ inline float getY() const {
+ return getAxisValue(AMOTION_EVENT_AXIS_Y);
+ }
+
#ifdef HAVE_ANDROID_OS
status_t readFromParcel(Parcel* parcel);
status_t writeToParcel(Parcel* parcel) const;
diff --git a/include/utils/BitSet.h b/include/utils/BitSet.h
index 600017e..9452e86 100644
--- a/include/utils/BitSet.h
+++ b/include/utils/BitSet.h
@@ -68,6 +68,30 @@
// Result is undefined if all bits are unmarked.
inline uint32_t lastMarkedBit() const { return 31 - __builtin_ctz(value); }
+ // Finds the first marked bit in the set and clears it. Returns the bit index.
+ // Result is undefined if all bits are unmarked.
+ inline uint32_t clearFirstMarkedBit() {
+ uint32_t n = firstMarkedBit();
+ clearBit(n);
+ return n;
+ }
+
+ // Finds the first unmarked bit in the set and marks it. Returns the bit index.
+ // Result is undefined if all bits are marked.
+ inline uint32_t markFirstUnmarkedBit() {
+ uint32_t n = firstUnmarkedBit();
+ markBit(n);
+ return n;
+ }
+
+ // Finds the last marked bit in the set and clears it. Returns the bit index.
+ // Result is undefined if all bits are unmarked.
+ inline uint32_t clearLastMarkedBit() {
+ uint32_t n = lastMarkedBit();
+ clearBit(n);
+ return n;
+ }
+
// Gets the index of the specified bit in the set, which is the number of
// marked bits that appear before the specified bit.
inline uint32_t getIndexOfBit(uint32_t n) const {
diff --git a/libs/camera/Camera.cpp b/libs/camera/Camera.cpp
index 3c00db5..7ac3cc1 100644
--- a/libs/camera/Camera.cpp
+++ b/libs/camera/Camera.cpp
@@ -360,7 +360,8 @@
}
// callback from camera service when frame or image is ready
-void Camera::dataCallback(int32_t msgType, const sp<IMemory>& dataPtr)
+void Camera::dataCallback(int32_t msgType, const sp<IMemory>& dataPtr,
+ camera_frame_metadata_t *metadata)
{
sp<CameraListener> listener;
{
@@ -368,7 +369,7 @@
listener = mListener;
}
if (listener != NULL) {
- listener->postData(msgType, dataPtr);
+ listener->postData(msgType, dataPtr, metadata);
}
}
diff --git a/libs/camera/CameraParameters.cpp b/libs/camera/CameraParameters.cpp
index d8fef09..251615d 100644
--- a/libs/camera/CameraParameters.cpp
+++ b/libs/camera/CameraParameters.cpp
@@ -86,6 +86,7 @@
const char CameraParameters::KEY_PREFERRED_PREVIEW_SIZE_FOR_VIDEO[] = "preferred-preview-size-for-video";
const char CameraParameters::KEY_MAX_NUM_DETECTED_FACES_HW[] = "max-num-detected-faces-hw";
const char CameraParameters::KEY_MAX_NUM_DETECTED_FACES_SW[] = "max-num-detected-faces-sw";
+const char CameraParameters::KEY_RECORDING_HINT[] = "recording-hint";
const char CameraParameters::TRUE[] = "true";
const char CameraParameters::FALSE[] = "false";
diff --git a/libs/camera/ICameraClient.cpp b/libs/camera/ICameraClient.cpp
index cb3bd0c..183429a 100644
--- a/libs/camera/ICameraClient.cpp
+++ b/libs/camera/ICameraClient.cpp
@@ -51,13 +51,18 @@
}
// generic data callback from camera service to app with image data
- void dataCallback(int32_t msgType, const sp<IMemory>& imageData)
+ void dataCallback(int32_t msgType, const sp<IMemory>& imageData,
+ camera_frame_metadata_t *metadata)
{
LOGV("dataCallback");
Parcel data, reply;
data.writeInterfaceToken(ICameraClient::getInterfaceDescriptor());
data.writeInt32(msgType);
data.writeStrongBinder(imageData->asBinder());
+ if (metadata) {
+ data.writeInt32(metadata->number_of_faces);
+ data.write(metadata->faces, sizeof(camera_face_t) * metadata->number_of_faces);
+ }
remote()->transact(DATA_CALLBACK, data, &reply, IBinder::FLAG_ONEWAY);
}
@@ -96,7 +101,15 @@
CHECK_INTERFACE(ICameraClient, data, reply);
int32_t msgType = data.readInt32();
sp<IMemory> imageData = interface_cast<IMemory>(data.readStrongBinder());
- dataCallback(msgType, imageData);
+ camera_frame_metadata_t *metadata = NULL;
+ if (data.dataAvail() > 0) {
+ metadata = new camera_frame_metadata_t;
+ metadata->number_of_faces = data.readInt32();
+ metadata->faces = (camera_face_t *) data.readInplace(
+ sizeof(camera_face_t) * metadata->number_of_faces);
+ }
+ dataCallback(msgType, imageData, metadata);
+ if (metadata) delete metadata;
return NO_ERROR;
} break;
case DATA_CALLBACK_TIMESTAMP: {
diff --git a/libs/hwui/Caches.cpp b/libs/hwui/Caches.cpp
index c5858e9..24ec4e8 100644
--- a/libs/hwui/Caches.cpp
+++ b/libs/hwui/Caches.cpp
@@ -142,7 +142,6 @@
void Caches::clearGarbage() {
textureCache.clearGarbage();
- gradientCache.clearGarbage();
pathCache.clearGarbage();
Mutex::Autolock _l(mGarbageLock);
diff --git a/libs/hwui/GradientCache.cpp b/libs/hwui/GradientCache.cpp
index 996acd5..aacf22a 100644
--- a/libs/hwui/GradientCache.cpp
+++ b/libs/hwui/GradientCache.cpp
@@ -35,7 +35,7 @@
///////////////////////////////////////////////////////////////////////////////
GradientCache::GradientCache():
- mCache(GenerationCache<SkShader*, Texture*>::kUnlimitedCapacity),
+ mCache(GenerationCache<GradientCacheEntry, Texture*>::kUnlimitedCapacity),
mSize(0), mMaxSize(MB(DEFAULT_GRADIENT_CACHE_SIZE)) {
char property[PROPERTY_VALUE_MAX];
if (property_get(PROPERTY_GRADIENT_CACHE_SIZE, property, NULL) > 0) {
@@ -49,7 +49,7 @@
}
GradientCache::GradientCache(uint32_t maxByteSize):
- mCache(GenerationCache<SkShader*, Texture*>::kUnlimitedCapacity),
+ mCache(GenerationCache<GradientCacheEntry, Texture*>::kUnlimitedCapacity),
mSize(0), mMaxSize(maxByteSize) {
mCache.setOnEntryRemovedListener(this);
}
@@ -81,9 +81,8 @@
// Callbacks
///////////////////////////////////////////////////////////////////////////////
-void GradientCache::operator()(SkShader*& shader, Texture*& texture) {
- // Already locked here
- if (shader) {
+void GradientCache::operator()(GradientCacheEntry& shader, Texture*& texture) {
+ if (texture) {
const uint32_t size = texture->width * texture->height * 4;
mSize -= size;
}
@@ -98,34 +97,25 @@
// Caching
///////////////////////////////////////////////////////////////////////////////
-Texture* GradientCache::get(SkShader* shader) {
- return mCache.get(shader);
-}
+Texture* GradientCache::get(uint32_t* colors, float* positions,
+ int count, SkShader::TileMode tileMode) {
-void GradientCache::remove(SkShader* shader) {
- mCache.remove(shader);
-}
+ GradientCacheEntry gradient(colors, positions, count, tileMode);
+ Texture* texture = mCache.get(gradient);
-void GradientCache::removeDeferred(SkShader* shader) {
- Mutex::Autolock _l(mLock);
- mGarbage.push(shader);
-}
-
-void GradientCache::clearGarbage() {
- Mutex::Autolock _l(mLock);
- size_t count = mGarbage.size();
- for (size_t i = 0; i < count; i++) {
- mCache.remove(mGarbage.itemAt(i));
+ if (!texture) {
+ texture = addLinearGradient(gradient, colors, positions, count, tileMode);
}
- mGarbage.clear();
+
+ return texture;
}
void GradientCache::clear() {
mCache.clear();
}
-Texture* GradientCache::addLinearGradient(SkShader* shader, uint32_t* colors,
- float* positions, int count, SkShader::TileMode tileMode) {
+Texture* GradientCache::addLinearGradient(GradientCacheEntry& gradient,
+ uint32_t* colors, float* positions, int count, SkShader::TileMode tileMode) {
SkBitmap bitmap;
bitmap.setConfig(SkBitmap::kARGB_8888_Config, 1024, 1);
bitmap.allocPixels();
@@ -156,7 +146,7 @@
generateTexture(&bitmap, texture);
mSize += size;
- mCache.put(shader, texture);
+ mCache.put(gradient, texture);
return texture;
}
diff --git a/libs/hwui/GradientCache.h b/libs/hwui/GradientCache.h
index 30da462..086921c 100644
--- a/libs/hwui/GradientCache.h
+++ b/libs/hwui/GradientCache.h
@@ -22,17 +22,74 @@
#include <utils/Vector.h>
#include "Texture.h"
+#include "utils/Compare.h"
#include "utils/GenerationCache.h"
namespace android {
namespace uirenderer {
+struct GradientCacheEntry {
+ GradientCacheEntry() {
+ count = 0;
+ colors = NULL;
+ positions = NULL;
+ tileMode = SkShader::kClamp_TileMode;
+ }
+
+ GradientCacheEntry(uint32_t* colors, float* positions, int count,
+ SkShader::TileMode tileMode) {
+ this->count = count;
+ this->colors = new uint32_t[count];
+ this->positions = new float[count];
+ this->tileMode = tileMode;
+
+ memcpy(this->colors, colors, count * sizeof(uint32_t));
+ memcpy(this->positions, positions, count * sizeof(float));
+ }
+
+ GradientCacheEntry(const GradientCacheEntry& entry) {
+ this->count = entry.count;
+ this->colors = new uint32_t[count];
+ this->positions = new float[count];
+ this->tileMode = entry.tileMode;
+
+ memcpy(this->colors, entry.colors, count * sizeof(uint32_t));
+ memcpy(this->positions, entry.positions, count * sizeof(float));
+ }
+
+ ~GradientCacheEntry() {
+ delete[] colors;
+ delete[] positions;
+ }
+
+ bool operator<(const GradientCacheEntry& r) const {
+ const GradientCacheEntry& rhs = (const GradientCacheEntry&) r;
+ LTE_INT(count) {
+ LTE_INT(tileMode) {
+ int result = memcmp(colors, rhs.colors, count * sizeof(uint32_t));
+ if (result< 0) return true;
+ else if (result == 0) {
+ result = memcmp(positions, rhs.positions, count * sizeof(float));
+ if (result < 0) return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ uint32_t* colors;
+ float* positions;
+ int count;
+ SkShader::TileMode tileMode;
+
+}; // GradientCacheEntry
+
/**
* A simple LRU gradient cache. The cache has a maximum size expressed in bytes.
* Any texture added to the cache causing the cache to grow beyond the maximum
* allowed size will also cause the oldest texture to be kicked out.
*/
-class GradientCache: public OnEntryRemoved<SkShader*, Texture*> {
+class GradientCache: public OnEntryRemoved<GradientCacheEntry, Texture*> {
public:
GradientCache();
GradientCache(uint32_t maxByteSize);
@@ -42,32 +99,13 @@
* Used as a callback when an entry is removed from the cache.
* Do not invoke directly.
*/
- void operator()(SkShader*& shader, Texture*& texture);
+ void operator()(GradientCacheEntry& shader, Texture*& texture);
/**
- * Adds a new linear gradient to the cache. The generated texture is
- * returned.
- */
- Texture* addLinearGradient(SkShader* shader, uint32_t* colors, float* positions,
- int count, SkShader::TileMode tileMode = SkShader::kClamp_TileMode);
- /**
* Returns the texture associated with the specified shader.
*/
- Texture* get(SkShader* shader);
- /**
- * Removes the texture associated with the specified shader.
- * Upon remove the texture is freed.
- */
- void remove(SkShader* shader);
- /**
- * Removes the texture associated with the specified shader. This is meant
- * to be called from threads that are not the EGL context thread.
- */
- void removeDeferred(SkShader* shader);
- /**
- * Process deferred removals.
- */
- void clearGarbage();
+ Texture* get(uint32_t* colors, float* positions,
+ int count, SkShader::TileMode tileMode = SkShader::kClamp_TileMode);
/**
* Clears the cache. This causes all textures to be deleted.
*/
@@ -87,9 +125,17 @@
uint32_t getSize();
private:
+ /**
+ * Adds a new linear gradient to the cache. The generated texture is
+ * returned.
+ */
+ Texture* addLinearGradient(GradientCacheEntry& gradient,
+ uint32_t* colors, float* positions, int count,
+ SkShader::TileMode tileMode = SkShader::kClamp_TileMode);
+
void generateTexture(SkBitmap* bitmap, Texture* texture);
- GenerationCache<SkShader*, Texture*> mCache;
+ GenerationCache<GradientCacheEntry, Texture*> mCache;
uint32_t mSize;
uint32_t mMaxSize;
diff --git a/libs/hwui/ResourceCache.cpp b/libs/hwui/ResourceCache.cpp
index cd2c405..ee73983 100644
--- a/libs/hwui/ResourceCache.cpp
+++ b/libs/hwui/ResourceCache.cpp
@@ -166,9 +166,6 @@
ResourceReference* ref = mCache->indexOfKey(resource) >= 0 ? mCache->valueFor(resource) : NULL;
if (ref == NULL) {
// If we're not tracking this resource, just delete it
- if (Caches::hasInstance()) {
- Caches::getInstance().gradientCache.removeDeferred(resource->getSkShader());
- }
delete resource;
return;
}
@@ -220,9 +217,6 @@
break;
case kShader: {
SkiaShader* shader = (SkiaShader*) resource;
- if (Caches::hasInstance()) {
- Caches::getInstance().gradientCache.removeDeferred(shader->getSkShader());
- }
delete shader;
}
break;
diff --git a/libs/hwui/SkiaShader.cpp b/libs/hwui/SkiaShader.cpp
index 06382f2..2428295 100644
--- a/libs/hwui/SkiaShader.cpp
+++ b/libs/hwui/SkiaShader.cpp
@@ -225,10 +225,7 @@
GLuint textureSlot = (*textureUnit)++;
glActiveTexture(gTextureUnitsMap[textureSlot]);
- Texture* texture = mGradientCache->get(mKey);
- if (!texture) {
- texture = mGradientCache->addLinearGradient(mKey, mColors, mPositions, mCount, mTileX);
- }
+ Texture* texture = mGradientCache->get(mColors, mPositions, mCount, mTileX);
mat4 screenSpace;
computeScreenSpaceMatrix(screenSpace, modelView);
@@ -340,10 +337,7 @@
GLuint textureSlot = (*textureUnit)++;
glActiveTexture(gTextureUnitsMap[textureSlot]);
- Texture* texture = mGradientCache->get(mKey);
- if (!texture) {
- texture = mGradientCache->addLinearGradient(mKey, mColors, mPositions, mCount);
- }
+ Texture* texture = mGradientCache->get(mColors, mPositions, mCount);
mat4 screenSpace;
computeScreenSpaceMatrix(screenSpace, modelView);
diff --git a/libs/rs/driver/rsdBcc.cpp b/libs/rs/driver/rsdBcc.cpp
index 0c0aa10..86bec6e 100644
--- a/libs/rs/driver/rsdBcc.cpp
+++ b/libs/rs/driver/rsdBcc.cpp
@@ -112,7 +112,7 @@
goto error;
}
- if (bccPrepareExecutableEx(drv->mBccScript, cacheDir, resName, 0) != 0) {
+ if (bccPrepareExecutable(drv->mBccScript, cacheDir, resName, 0) != 0) {
LOGE("bcc: FAILS to prepare executable");
goto error;
}
diff --git a/libs/ui/Input.cpp b/libs/ui/Input.cpp
index 0af7f80..688b998 100644
--- a/libs/ui/Input.cpp
+++ b/libs/ui/Input.cpp
@@ -280,6 +280,9 @@
uint64_t axisBit = 1LL << axis;
uint32_t index = __builtin_popcountll(bits & (axisBit - 1LL));
if (!(bits & axisBit)) {
+ if (value == 0) {
+ return OK; // axes with value 0 do not need to be stored
+ }
uint32_t count = __builtin_popcountll(bits);
if (count >= MAX_AXES) {
tooManyAxes(axis);
@@ -294,23 +297,10 @@
return OK;
}
-float* PointerCoords::editAxisValue(int32_t axis) {
- if (axis < 0 || axis > 63) {
- return NULL;
- }
-
- uint64_t axisBit = 1LL << axis;
- if (!(bits & axisBit)) {
- return NULL;
- }
- uint32_t index = __builtin_popcountll(bits & (axisBit - 1LL));
- return &values[index];
-}
-
static inline void scaleAxisValue(PointerCoords& c, int axis, float scaleFactor) {
- float* value = c.editAxisValue(axis);
- if (value) {
- *value *= scaleFactor;
+ float value = c.getAxisValue(axis);
+ if (value != 0) {
+ c.setAxisValue(axis, value * scaleFactor);
}
}
@@ -574,20 +564,14 @@
size_t numSamples = mSamplePointerCoords.size();
for (size_t i = 0; i < numSamples; i++) {
PointerCoords& c = mSamplePointerCoords.editItemAt(i);
- float* xPtr = c.editAxisValue(AMOTION_EVENT_AXIS_X);
- float* yPtr = c.editAxisValue(AMOTION_EVENT_AXIS_Y);
- if (xPtr && yPtr) {
- float x = *xPtr + oldXOffset;
- float y = *yPtr + oldYOffset;
- matrix->mapXY(SkFloatToScalar(x), SkFloatToScalar(y), & point);
- *xPtr = SkScalarToFloat(point.fX) - newXOffset;
- *yPtr = SkScalarToFloat(point.fY) - newYOffset;
- }
+ float x = c.getAxisValue(AMOTION_EVENT_AXIS_X) + oldXOffset;
+ float y = c.getAxisValue(AMOTION_EVENT_AXIS_Y) + oldYOffset;
+ matrix->mapXY(SkFloatToScalar(x), SkFloatToScalar(y), &point);
+ c.setAxisValue(AMOTION_EVENT_AXIS_X, SkScalarToFloat(point.fX) - newXOffset);
+ c.setAxisValue(AMOTION_EVENT_AXIS_Y, SkScalarToFloat(point.fY) - newYOffset);
- float* orientationPtr = c.editAxisValue(AMOTION_EVENT_AXIS_ORIENTATION);
- if (orientationPtr) {
- *orientationPtr = transformAngle(matrix, *orientationPtr);
- }
+ float orientation = c.getAxisValue(AMOTION_EVENT_AXIS_ORIENTATION);
+ c.setAxisValue(AMOTION_EVENT_AXIS_ORIENTATION, transformAngle(matrix, orientation));
}
}
@@ -727,7 +711,7 @@
}
while (idBits.count() > MAX_POINTERS) {
- idBits.clearBit(idBits.lastMarkedBit());
+ idBits.clearLastMarkedBit();
}
Movement& movement = mMovements[mIndex];
@@ -776,7 +760,7 @@
// We do this on down instead of on up because the client may want to query the
// final velocity for a pointer that just went up.
BitSet32 downIdBits;
- downIdBits.markBit(event->getActionIndex());
+ downIdBits.markBit(event->getPointerId(event->getActionIndex()));
clearPointers(downIdBits);
break;
}
diff --git a/libs/ui/tests/InputEvent_test.cpp b/libs/ui/tests/InputEvent_test.cpp
index e48d5b7..e21c464 100644
--- a/libs/ui/tests/InputEvent_test.cpp
+++ b/libs/ui/tests/InputEvent_test.cpp
@@ -52,9 +52,6 @@
ASSERT_EQ(0, coords.getAxisValue(1))
<< "getAxisValue should return zero because axis is not present";
- ASSERT_EQ(NULL, coords.editAxisValue(0))
- << "editAxisValue should return null because axis is not present";
-
// Set first axis.
ASSERT_EQ(OK, coords.setAxisValue(1, 5));
ASSERT_EQ(0x00000002ULL, coords.bits);
@@ -96,26 +93,17 @@
ASSERT_EQ(2, coords.getAxisValue(3))
<< "getAxisValue should return value of axis";
- // Edit an existing axis value in place.
- valuePtr = coords.editAxisValue(1);
- ASSERT_EQ(5, *valuePtr)
- << "editAxisValue should return pointer to axis value";
-
- *valuePtr = 7;
- ASSERT_EQ(7, coords.getAxisValue(1))
- << "getAxisValue should return value of axis";
-
// Set an axis with an id between the others. (inserting value in the middle)
ASSERT_EQ(OK, coords.setAxisValue(2, 1));
ASSERT_EQ(0x0000000fULL, coords.bits);
ASSERT_EQ(4, coords.values[0]);
- ASSERT_EQ(7, coords.values[1]);
+ ASSERT_EQ(5, coords.values[1]);
ASSERT_EQ(1, coords.values[2]);
ASSERT_EQ(2, coords.values[3]);
ASSERT_EQ(4, coords.getAxisValue(0))
<< "getAxisValue should return value of axis";
- ASSERT_EQ(7, coords.getAxisValue(1))
+ ASSERT_EQ(5, coords.getAxisValue(1))
<< "getAxisValue should return value of axis";
ASSERT_EQ(1, coords.getAxisValue(2))
<< "getAxisValue should return value of axis";
diff --git a/media/java/android/media/ThumbnailUtils.java b/media/java/android/media/ThumbnailUtils.java
index 7c181ee..078d4af 100644
--- a/media/java/android/media/ThumbnailUtils.java
+++ b/media/java/android/media/ThumbnailUtils.java
@@ -387,6 +387,7 @@
if (recycle) {
source.recycle();
}
+ c.setBitmap(null);
return b2;
}
float bitmapWidthF = source.getWidth();
diff --git a/media/java/android/media/videoeditor/MediaArtistNativeHelper.java b/media/java/android/media/videoeditor/MediaArtistNativeHelper.java
index 6b0fb12..5bfdcdb 100644
--- a/media/java/android/media/videoeditor/MediaArtistNativeHelper.java
+++ b/media/java/android/media/videoeditor/MediaArtistNativeHelper.java
@@ -3761,6 +3761,7 @@
final Canvas canvas = new Canvas(bitmap);
canvas.drawBitmap(tempBitmap, new Rect(0, 0, newWidth, newHeight),
new Rect(0, 0, width, height), sResizePaint);
+ canvas.setBitmap(null);
}
if (tempBitmap != null) {
@@ -3837,6 +3838,7 @@
final Canvas canvas = new Canvas(bitmaps[i]);
canvas.drawBitmap(tempBitmap, new Rect(0, 0, newWidth, newHeight),
new Rect(0, 0, width, height), sResizePaint);
+ canvas.setBitmap(null);
}
}
diff --git a/media/java/android/media/videoeditor/MediaImageItem.java b/media/java/android/media/videoeditor/MediaImageItem.java
index 73cc7e2..f0cc1fe 100755
--- a/media/java/android/media/videoeditor/MediaImageItem.java
+++ b/media/java/android/media/videoeditor/MediaImageItem.java
@@ -1008,6 +1008,7 @@
srcBitmap.getHeight()),
new Rect(0, 0, (int)bitmapWidth,
(int)bitmapHeight), sResizePaint);
+ canvas.setBitmap(null);
/**
* Release the source bitmap
*/
diff --git a/media/java/android/media/videoeditor/OverlayFrame.java b/media/java/android/media/videoeditor/OverlayFrame.java
index 131f5f0..d159df2 100755
--- a/media/java/android/media/videoeditor/OverlayFrame.java
+++ b/media/java/android/media/videoeditor/OverlayFrame.java
@@ -420,6 +420,7 @@
}
overlayCanvas.drawBitmap(overlayBitmap, srcRect, destRect, sResizePaint);
+ overlayCanvas.setBitmap(null);
/*
* Write to the dest file
diff --git a/media/libmedia/IMediaPlayer.cpp b/media/libmedia/IMediaPlayer.cpp
index 76a8a91..52885d2 100644
--- a/media/libmedia/IMediaPlayer.cpp
+++ b/media/libmedia/IMediaPlayer.cpp
@@ -352,7 +352,9 @@
} break;
case SET_VOLUME: {
CHECK_INTERFACE(IMediaPlayer, data, reply);
- reply->writeInt32(setVolume(data.readFloat(), data.readFloat()));
+ float leftVolume = data.readFloat();
+ float rightVolume = data.readFloat();
+ reply->writeInt32(setVolume(leftVolume, rightVolume));
return NO_ERROR;
} break;
case INVOKE: {
@@ -367,7 +369,9 @@
} break;
case GET_METADATA: {
CHECK_INTERFACE(IMediaPlayer, data, reply);
- const status_t retcode = getMetadata(data.readInt32(), data.readInt32(), reply);
+ bool update_only = static_cast<bool>(data.readInt32());
+ bool apply_filter = static_cast<bool>(data.readInt32());
+ const status_t retcode = getMetadata(update_only, apply_filter, reply);
reply->setDataPosition(0);
reply->writeInt32(retcode);
reply->setDataPosition(0);
diff --git a/media/libstagefright/CameraSource.cpp b/media/libstagefright/CameraSource.cpp
index de66d99..ea8eaa4 100755
--- a/media/libstagefright/CameraSource.cpp
+++ b/media/libstagefright/CameraSource.cpp
@@ -37,7 +37,8 @@
CameraSourceListener(const sp<CameraSource> &source);
virtual void notify(int32_t msgType, int32_t ext1, int32_t ext2);
- virtual void postData(int32_t msgType, const sp<IMemory> &dataPtr);
+ virtual void postData(int32_t msgType, const sp<IMemory> &dataPtr,
+ camera_frame_metadata_t *metadata);
virtual void postDataTimestamp(
nsecs_t timestamp, int32_t msgType, const sp<IMemory>& dataPtr);
@@ -63,7 +64,8 @@
LOGV("notify(%d, %d, %d)", msgType, ext1, ext2);
}
-void CameraSourceListener::postData(int32_t msgType, const sp<IMemory> &dataPtr) {
+void CameraSourceListener::postData(int32_t msgType, const sp<IMemory> &dataPtr,
+ camera_frame_metadata_t *metadata) {
LOGV("postData(%d, ptr:%p, size:%d)",
msgType, dataPtr->pointer(), dataPtr->size());
diff --git a/media/libstagefright/MP3Extractor.cpp b/media/libstagefright/MP3Extractor.cpp
index 5bbed5d..92e84c2 100644
--- a/media/libstagefright/MP3Extractor.cpp
+++ b/media/libstagefright/MP3Extractor.cpp
@@ -407,6 +407,8 @@
int64_t seekTimeUs;
ReadOptions::SeekMode mode;
+ bool seekCBR = false;
+
if (options != NULL && options->getSeekTo(&seekTimeUs, &mode)) {
int64_t actualSeekTimeUs = seekTimeUs;
if (mSeeker == NULL
@@ -421,6 +423,7 @@
mCurrentTimeUs = seekTimeUs;
mCurrentPos = mFirstFramePos + seekTimeUs * bitrate / 8000000;
+ seekCBR = true;
} else {
mCurrentTimeUs = actualSeekTimeUs;
}
@@ -454,6 +457,13 @@
&& GetMPEGAudioFrameSize(
header, &frame_size, &sample_rate, NULL,
&bitrate, &num_samples)) {
+
+ // re-calculate mCurrentTimeUs because we might have called Resync()
+ if (seekCBR) {
+ mCurrentTimeUs = (mCurrentPos - mFirstFramePos) * 8000 / bitrate;
+ mBasisTimeUs = mCurrentTimeUs;
+ }
+
break;
}
diff --git a/media/libstagefright/tests/SurfaceMediaSource_test.cpp b/media/libstagefright/tests/SurfaceMediaSource_test.cpp
index dc6f2c9..5b32b68 100644
--- a/media/libstagefright/tests/SurfaceMediaSource_test.cpp
+++ b/media/libstagefright/tests/SurfaceMediaSource_test.cpp
@@ -57,6 +57,7 @@
protected:
virtual void SetUp() {
+ android::ProcessState::self()->startThreadPool();
mSMS = new SurfaceMediaSource(mYuvTexWidth, mYuvTexHeight);
mSMS->setSynchronousMode(true);
mSTC = new SurfaceTextureClient(mSMS);
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaRecorderStressTestRunner.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaRecorderStressTestRunner.java
index 0b0d0ce..369a067 100755
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaRecorderStressTestRunner.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaRecorderStressTestRunner.java
@@ -16,24 +16,33 @@
package com.android.mediaframeworktest;
+import android.media.EncoderCapabilities.AudioEncoderCap;
+import android.media.EncoderCapabilities.VideoEncoderCap;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.test.InstrumentationTestRunner;
import android.test.InstrumentationTestSuite;
import com.android.mediaframeworktest.stress.MediaRecorderStressTest;
+import java.util.List;
import junit.framework.TestSuite;
public class MediaRecorderStressTestRunner extends InstrumentationTestRunner {
- // Default recorder settings
+ public static List<VideoEncoderCap> videoEncoders = MediaProfileReader.getVideoEncoders();
+ public static List<AudioEncoderCap> audioEncoders = MediaProfileReader.getAudioEncoders();
+
+ //Get the first capability as the default
+ public static VideoEncoderCap videoEncoder = videoEncoders.get(0);
+ public static AudioEncoderCap audioEncoder = audioEncoders.get(0);
+
public static int mIterations = 100;
- public static int mVideoEncoder = MediaRecorder.VideoEncoder.H263;
- public static int mAudioEncdoer = MediaRecorder.AudioEncoder.AMR_NB;
- public static int mFrameRate = 20;
- public static int mVideoWidth = 352;
- public static int mVideoHeight = 288;
- public static int mBitRate = 100;
+ public static int mVideoEncoder = videoEncoder.mCodec;
+ public static int mAudioEncdoer = audioEncoder.mCodec;
+ public static int mFrameRate = videoEncoder.mMaxFrameRate;
+ public static int mVideoWidth = videoEncoder.mMaxFrameWidth;
+ public static int mVideoHeight = videoEncoder.mMaxFrameHeight;
+ public static int mBitRate = audioEncoder.mMaxBitRate;
public static boolean mRemoveVideo = true;
public static int mDuration = 10000;
diff --git a/packages/SettingsProvider/res/values/defaults.xml b/packages/SettingsProvider/res/values/defaults.xml
index c61da4e..12dbdf9 100644
--- a/packages/SettingsProvider/res/values/defaults.xml
+++ b/packages/SettingsProvider/res/values/defaults.xml
@@ -67,7 +67,7 @@
<string name="def_desk_undock_sound" translatable="false">/system/media/audio/ui/Undock.ogg</string>
<string name="def_car_dock_sound" translatable="false">/system/media/audio/ui/Dock.ogg</string>
<string name="def_car_undock_sound" translatable="false">/system/media/audio/ui/Undock.ogg</string>
- <integer name="def_lockscreen_sounds_enabled">0</integer>
+ <integer name="def_lockscreen_sounds_enabled">1</integer>
<string name="def_lock_sound" translatable="false">/system/media/audio/ui/Lock.ogg</string>
<string name="def_unlock_sound" translatable="false">/system/media/audio/ui/Unlock.ogg</string>
@@ -129,4 +129,8 @@
<!-- Default for Settings.System.POINTER_SPEED -->
<integer name="def_pointer_speed">0</integer>
+ <!-- Default for DTMF tones enabled -->
+ <bool name="def_dtmf_tones_enabled">true</bool>
+ <!-- Default for UI touch sounds enabled -->
+ <bool name="def_sound_effects_enabled">true</bool>
</resources>
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java b/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
index 7fecc9c..f527447 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
@@ -63,7 +63,7 @@
// database gets upgraded properly. At a minimum, please confirm that 'upgradeVersion'
// is properly propagated through your change. Not doing so will result in a loss of user
// settings.
- private static final int DATABASE_VERSION = 68;
+ private static final int DATABASE_VERSION = 69;
private Context mContext;
@@ -862,34 +862,29 @@
}
if (upgradeVersion == 66) {
- // This upgrade makes sure that MODE_RINGER_STREAMS_AFFECTED and
- // NOTIFICATIONS_USE_RING_VOLUME settings are set according to device voice capability
- db.beginTransaction();
- try {
- int ringerModeAffectedStreams = (1 << AudioManager.STREAM_RING) |
- (1 << AudioManager.STREAM_NOTIFICATION) |
- (1 << AudioManager.STREAM_SYSTEM) |
- (1 << AudioManager.STREAM_SYSTEM_ENFORCED);
- if (!mContext.getResources().getBoolean(
- com.android.internal.R.bool.config_voice_capable)) {
- ringerModeAffectedStreams |= (1 << AudioManager.STREAM_MUSIC);
-
- db.execSQL("DELETE FROM system WHERE name='"
- + Settings.System.NOTIFICATIONS_USE_RING_VOLUME + "'");
- db.execSQL("INSERT INTO system ('name', 'value') values ('"
- + Settings.System.NOTIFICATIONS_USE_RING_VOLUME + "', '1')");
- }
- db.execSQL("DELETE FROM system WHERE name='"
- + Settings.System.MODE_RINGER_STREAMS_AFFECTED + "'");
- db.execSQL("INSERT INTO system ('name', 'value') values ('"
- + Settings.System.MODE_RINGER_STREAMS_AFFECTED + "', '"
- + String.valueOf(ringerModeAffectedStreams) + "')");
- db.setTransactionSuccessful();
- } finally {
- db.endTransaction();
- }
- upgradeVersion = 67;
- }
+ // This upgrade makes sure that MODE_RINGER_STREAMS_AFFECTED is set
+ // according to device voice capability
+ db.beginTransaction();
+ try {
+ int ringerModeAffectedStreams = (1 << AudioManager.STREAM_RING) |
+ (1 << AudioManager.STREAM_NOTIFICATION) |
+ (1 << AudioManager.STREAM_SYSTEM) |
+ (1 << AudioManager.STREAM_SYSTEM_ENFORCED);
+ if (!mContext.getResources().getBoolean(
+ com.android.internal.R.bool.config_voice_capable)) {
+ ringerModeAffectedStreams |= (1 << AudioManager.STREAM_MUSIC);
+ }
+ db.execSQL("DELETE FROM system WHERE name='"
+ + Settings.System.MODE_RINGER_STREAMS_AFFECTED + "'");
+ db.execSQL("INSERT INTO system ('name', 'value') values ('"
+ + Settings.System.MODE_RINGER_STREAMS_AFFECTED + "', '"
+ + String.valueOf(ringerModeAffectedStreams) + "')");
+ db.setTransactionSuccessful();
+ } finally {
+ db.endTransaction();
+ }
+ upgradeVersion = 67;
+ }
if (upgradeVersion == 67) {
// New setting to enable touch exploration.
@@ -909,6 +904,26 @@
upgradeVersion = 68;
}
+ if (upgradeVersion == 68) {
+ // Enable all system sounds by default
+ db.beginTransaction();
+ SQLiteStatement stmt = null;
+ try {
+ stmt = db.compileStatement("INSERT OR REPLACE INTO system(name,value)"
+ + " VALUES(?,?);");
+ loadDefaultHapticSettings(stmt);
+ loadUISoundEffectsSettings(stmt);
+ db.execSQL("DELETE FROM system WHERE name='"
+ + Settings.System.NOTIFICATIONS_USE_RING_VOLUME + "'");
+ stmt.close();
+ db.setTransactionSuccessful();
+ } finally {
+ db.endTransaction();
+ if (stmt != null)
+ stmt.close();
+ }
+ upgradeVersion = 69;
+ }
// *** Remember to update DATABASE_VERSION above!
@@ -1284,21 +1299,12 @@
loadSetting(stmt, Settings.Secure.SET_INSTALL_LOCATION, 0);
loadSetting(stmt, Settings.Secure.DEFAULT_INSTALL_LOCATION,
PackageHelper.APP_INSTALL_AUTO);
-
+
loadUISoundEffectsSettings(stmt);
-
+
loadBooleanSetting(stmt, Settings.System.VIBRATE_IN_SILENT,
R.bool.def_vibrate_in_silent);
- // Set notification volume to follow ringer volume by default
- if (mContext.getResources().getBoolean(
- com.android.internal.R.bool.config_voice_capable)) {
- loadBooleanSetting(stmt, Settings.System.NOTIFICATIONS_USE_RING_VOLUME,
- R.bool.def_notifications_use_ring_volume);
- } else {
- loadSetting(stmt, Settings.System.NOTIFICATIONS_USE_RING_VOLUME, "1");
- }
-
loadIntegerSetting(stmt, Settings.System.POINTER_SPEED,
R.integer.def_pointer_speed);
@@ -1312,6 +1318,12 @@
R.integer.def_power_sounds_enabled);
loadStringSetting(stmt, Settings.System.LOW_BATTERY_SOUND,
R.string.def_low_battery_sound);
+ loadBooleanSetting(stmt, Settings.System.DTMF_TONE_WHEN_DIALING,
+ R.bool.def_dtmf_tones_enabled);
+ loadBooleanSetting(stmt, Settings.System.SOUND_EFFECTS_ENABLED,
+ R.bool.def_sound_effects_enabled);
+ loadBooleanSetting(stmt, Settings.System.HAPTIC_FEEDBACK_ENABLED,
+ R.bool.def_haptic_feedback);
loadIntegerSetting(stmt, Settings.System.DOCK_SOUNDS_ENABLED,
R.integer.def_dock_sounds_enabled);
diff --git a/packages/SystemUI/AndroidManifest.xml b/packages/SystemUI/AndroidManifest.xml
index cf0bdd3..2080fad 100644
--- a/packages/SystemUI/AndroidManifest.xml
+++ b/packages/SystemUI/AndroidManifest.xml
@@ -34,6 +34,10 @@
<service android:name=".LoadAverageService"
android:exported="true" />
+ <service android:name=".ImageWallpaper"
+ android:permission="android.permission.BIND_WALLPAPER"
+ android:exported="true" />
+
<receiver android:name=".BootReceiver" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_notify_clear_normal.png b/packages/SystemUI/res/drawable-hdpi/ic_notify_clear_normal.png
new file mode 100644
index 0000000..d17aae6
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_notify_clear_normal.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_notify_clear_pressed.png b/packages/SystemUI/res/drawable-hdpi/ic_notify_clear_pressed.png
new file mode 100644
index 0000000..5a89d76
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_notify_clear_pressed.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/notify_panel_clock_bg_normal.9.png b/packages/SystemUI/res/drawable-hdpi/notify_panel_clock_bg_normal.9.png
deleted file mode 100644
index b7ad39c..0000000
--- a/packages/SystemUI/res/drawable-hdpi/notify_panel_clock_bg_normal.9.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/notify_panel_clock_bg_pressed.9.png b/packages/SystemUI/res/drawable-hdpi/notify_panel_clock_bg_pressed.9.png
deleted file mode 100644
index c93bd8c..0000000
--- a/packages/SystemUI/res/drawable-hdpi/notify_panel_clock_bg_pressed.9.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/notify_panel_notify_bg.9.png b/packages/SystemUI/res/drawable-hdpi/notify_panel_notify_bg.9.png
deleted file mode 100644
index 1680887..0000000
--- a/packages/SystemUI/res/drawable-hdpi/notify_panel_notify_bg.9.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/status_bar_ticker_tile.png b/packages/SystemUI/res/drawable-hdpi/status_bar_ticker_tile.png
index 772f77d..3b826a9 100644
--- a/packages/SystemUI/res/drawable-hdpi/status_bar_ticker_tile.png
+++ b/packages/SystemUI/res/drawable-hdpi/status_bar_ticker_tile.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/status_bar_veto_normal.png b/packages/SystemUI/res/drawable-hdpi/status_bar_veto_normal.png
deleted file mode 100644
index 90b4baf..0000000
--- a/packages/SystemUI/res/drawable-hdpi/status_bar_veto_normal.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/status_bar_veto_pressed.png b/packages/SystemUI/res/drawable-hdpi/status_bar_veto_pressed.png
deleted file mode 100644
index bc7034a..0000000
--- a/packages/SystemUI/res/drawable-hdpi/status_bar_veto_pressed.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-large-hdpi/notify_panel_clock_bg_normal.9.png b/packages/SystemUI/res/drawable-large-hdpi/notify_panel_clock_bg_normal.9.png
new file mode 100644
index 0000000..002a663
--- /dev/null
+++ b/packages/SystemUI/res/drawable-large-hdpi/notify_panel_clock_bg_normal.9.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-large-hdpi/notify_panel_clock_bg_pressed.9.png b/packages/SystemUI/res/drawable-large-hdpi/notify_panel_clock_bg_pressed.9.png
new file mode 100644
index 0000000..399d62e
--- /dev/null
+++ b/packages/SystemUI/res/drawable-large-hdpi/notify_panel_clock_bg_pressed.9.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-large-hdpi/notify_panel_notify_bg.9.png b/packages/SystemUI/res/drawable-large-hdpi/notify_panel_notify_bg.9.png
new file mode 100644
index 0000000..7385ecc
--- /dev/null
+++ b/packages/SystemUI/res/drawable-large-hdpi/notify_panel_notify_bg.9.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-large-mdpi/notify_panel_clock_bg_normal.9.png b/packages/SystemUI/res/drawable-large-mdpi/notify_panel_clock_bg_normal.9.png
new file mode 100644
index 0000000..5a880e75
--- /dev/null
+++ b/packages/SystemUI/res/drawable-large-mdpi/notify_panel_clock_bg_normal.9.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-large-mdpi/notify_panel_clock_bg_pressed.9.png b/packages/SystemUI/res/drawable-large-mdpi/notify_panel_clock_bg_pressed.9.png
new file mode 100644
index 0000000..489163d
--- /dev/null
+++ b/packages/SystemUI/res/drawable-large-mdpi/notify_panel_clock_bg_pressed.9.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-large-mdpi/notify_panel_notify_bg.9.png b/packages/SystemUI/res/drawable-large-mdpi/notify_panel_notify_bg.9.png
new file mode 100644
index 0000000..78900a1
--- /dev/null
+++ b/packages/SystemUI/res/drawable-large-mdpi/notify_panel_notify_bg.9.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-large-xhdpi/notify_panel_clock_bg_normal.9.png b/packages/SystemUI/res/drawable-large-xhdpi/notify_panel_clock_bg_normal.9.png
new file mode 100644
index 0000000..37e7791
--- /dev/null
+++ b/packages/SystemUI/res/drawable-large-xhdpi/notify_panel_clock_bg_normal.9.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-large-xhdpi/notify_panel_clock_bg_pressed.9.png b/packages/SystemUI/res/drawable-large-xhdpi/notify_panel_clock_bg_pressed.9.png
new file mode 100644
index 0000000..66fa4a8
--- /dev/null
+++ b/packages/SystemUI/res/drawable-large-xhdpi/notify_panel_clock_bg_pressed.9.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-large-xhdpi/notify_panel_notify_bg.9.png b/packages/SystemUI/res/drawable-large-xhdpi/notify_panel_notify_bg.9.png
new file mode 100644
index 0000000..11e36ab
--- /dev/null
+++ b/packages/SystemUI/res/drawable-large-xhdpi/notify_panel_notify_bg.9.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_notify_clear_normal.png b/packages/SystemUI/res/drawable-mdpi/ic_notify_clear_normal.png
new file mode 100644
index 0000000..9490833
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_notify_clear_normal.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_notify_clear_pressed.png b/packages/SystemUI/res/drawable-mdpi/ic_notify_clear_pressed.png
new file mode 100644
index 0000000..0ff3efd
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_notify_clear_pressed.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/notify_panel_clock_bg_normal.9.png b/packages/SystemUI/res/drawable-mdpi/notify_panel_clock_bg_normal.9.png
deleted file mode 100644
index 2dcb659..0000000
--- a/packages/SystemUI/res/drawable-mdpi/notify_panel_clock_bg_normal.9.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/notify_panel_clock_bg_pressed.9.png b/packages/SystemUI/res/drawable-mdpi/notify_panel_clock_bg_pressed.9.png
deleted file mode 100644
index e7ed68b..0000000
--- a/packages/SystemUI/res/drawable-mdpi/notify_panel_clock_bg_pressed.9.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/notify_panel_notify_bg.9.png b/packages/SystemUI/res/drawable-mdpi/notify_panel_notify_bg.9.png
deleted file mode 100644
index e346167..0000000
--- a/packages/SystemUI/res/drawable-mdpi/notify_panel_notify_bg.9.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/status_bar_ticker_tile.png b/packages/SystemUI/res/drawable-mdpi/status_bar_ticker_tile.png
index 0eb71d0..9999598 100644
--- a/packages/SystemUI/res/drawable-mdpi/status_bar_ticker_tile.png
+++ b/packages/SystemUI/res/drawable-mdpi/status_bar_ticker_tile.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/status_bar_veto_normal.png b/packages/SystemUI/res/drawable-mdpi/status_bar_veto_normal.png
deleted file mode 100644
index 90b4baf..0000000
--- a/packages/SystemUI/res/drawable-mdpi/status_bar_veto_normal.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/status_bar_veto_pressed.png b/packages/SystemUI/res/drawable-mdpi/status_bar_veto_pressed.png
deleted file mode 100644
index bc7034a..0000000
--- a/packages/SystemUI/res/drawable-mdpi/status_bar_veto_pressed.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_notify_clear_normal.png b/packages/SystemUI/res/drawable-xhdpi/ic_notify_clear_normal.png
new file mode 100644
index 0000000..6455423
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_notify_clear_normal.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_notify_clear_pressed.png b/packages/SystemUI/res/drawable-xhdpi/ic_notify_clear_pressed.png
new file mode 100644
index 0000000..bfa8bb4
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_notify_clear_pressed.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/status_bar_ticker_tile.png b/packages/SystemUI/res/drawable-xhdpi/status_bar_ticker_tile.png
new file mode 100644
index 0000000..6585ad6
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/status_bar_ticker_tile.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable/status_bar_veto.xml b/packages/SystemUI/res/drawable/ic_notify_clear.xml
similarity index 75%
rename from packages/SystemUI/res/drawable/status_bar_veto.xml
rename to packages/SystemUI/res/drawable/ic_notify_clear.xml
index 6e1b681..9c432b2 100644
--- a/packages/SystemUI/res/drawable/status_bar_veto.xml
+++ b/packages/SystemUI/res/drawable/ic_notify_clear.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 The Android Open Source Project
+<!-- Copyright (C) 2011 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.
@@ -15,7 +15,7 @@
-->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_pressed="true" android:drawable="@drawable/status_bar_veto_pressed" />
- <item android:drawable="@drawable/status_bar_veto_normal" />
+ <item android:state_pressed="true"
+ android:drawable="@drawable/ic_notify_clear_pressed" />
+ <item android:drawable="@drawable/ic_notify_clear_normal" />
</selector>
-
diff --git a/packages/SystemUI/res/layout-sw600dp/status_bar.xml b/packages/SystemUI/res/layout-sw600dp/status_bar.xml
index a204f17..55e57ab 100644
--- a/packages/SystemUI/res/layout-sw600dp/status_bar.xml
+++ b/packages/SystemUI/res/layout-sw600dp/status_bar.xml
@@ -35,6 +35,18 @@
android:clipChildren="false"
>
+ <ImageView android:id="@+id/clear_all_button"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:layout_alignParentRight="true"
+ android:layout_marginTop="1dp"
+ android:layout_marginRight="20dp"
+ android:paddingLeft="15dp"
+ android:paddingRight="15dp"
+ android:src="@drawable/ic_notify_clear"
+ android:visibility="invisible"
+ />
+
<!-- notification icons & panel access -->
<include layout="@layout/status_bar_notification_area"
android:layout_width="wrap_content"
diff --git a/packages/SystemUI/res/layout-sw600dp/status_bar_notification_panel.xml b/packages/SystemUI/res/layout-sw600dp/status_bar_notification_panel.xml
index 72519fb..9f11e08 100644
--- a/packages/SystemUI/res/layout-sw600dp/status_bar_notification_panel.xml
+++ b/packages/SystemUI/res/layout-sw600dp/status_bar_notification_panel.xml
@@ -22,7 +22,6 @@
android:layout_height="match_parent"
android:layout_width="match_parent"
android:gravity="right"
- android:background="@drawable/notify_panel_bg_protect_tiled"
>
<RelativeLayout
@@ -31,12 +30,12 @@
android:layout_width="match_parent"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
- android:layout_marginBottom="-27dip"
+ android:layout_marginBottom="8dp"
>
<include layout="@layout/status_bar_notification_panel_title"
- android:layout_width="471dp"
- android:layout_height="465dp"
+ android:layout_width="478dp"
+ android:layout_height="224dp"
android:layout_alignParentTop="true"
android:layout_alignParentRight="true"
/>
@@ -45,11 +44,11 @@
android:id="@+id/content_frame"
android:background="@drawable/notify_panel_notify_bg"
android:layout_height="wrap_content"
- android:layout_width="447dp"
+ android:layout_width="478dp"
android:orientation="vertical"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
- android:layout_marginTop="352dp"
+ android:layout_marginTop="178dp"
>
<ScrollView
android:id="@+id/notification_scroller"
diff --git a/packages/SystemUI/res/layout/status_bar_expanded.xml b/packages/SystemUI/res/layout/status_bar_expanded.xml
index 6670eff..0cfcae1 100644
--- a/packages/SystemUI/res/layout/status_bar_expanded.xml
+++ b/packages/SystemUI/res/layout/status_bar_expanded.xml
@@ -47,19 +47,13 @@
android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="?android:attr/textColorSecondary"
/>
- <TextView android:id="@+id/clear_all_button"
+ <ImageView android:id="@+id/clear_all_button"
android:layout_width="wrap_content"
- android:layout_height="wrap_content"
+ android:layout_height="match_parent"
android:layout_gravity="center_vertical"
- android:layout_marginTop="4dp"
- android:layout_marginBottom="1dp"
- android:textSize="14sp"
- android:textColor="#ff000000"
- android:text="@string/status_bar_clear_all_button"
- style="?android:attr/buttonStyle"
android:paddingLeft="15dp"
android:paddingRight="15dp"
- android:background="@drawable/btn_default_small"
+ android:src="@drawable/ic_notify_clear"
/>
</LinearLayout>
@@ -91,29 +85,6 @@
android:text="@string/status_bar_no_notifications_title"
/>
- <TextView android:id="@+id/ongoingTitle"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:background="@drawable/title_bar_portrait"
- android:paddingLeft="5dp"
- android:textAppearance="@style/TextAppearance.StatusBar.Title"
- android:text="@string/status_bar_ongoing_events_title"
- />
- <com.android.systemui.statusbar.policy.NotificationRowLayout
- android:id="@+id/ongoingItems"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- systemui:rowHeight="@dimen/notification_height"
- />
-
- <TextView android:id="@+id/latestTitle"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:background="@drawable/title_bar_portrait"
- android:paddingLeft="5dp"
- android:textAppearance="@style/TextAppearance.StatusBar.Title"
- android:text="@string/status_bar_latest_events_title"
- />
<com.android.systemui.statusbar.policy.NotificationRowLayout
android:id="@+id/latestItems"
android:layout_width="match_parent"
diff --git a/packages/SystemUI/res/layout/status_bar_notification_row.xml b/packages/SystemUI/res/layout/status_bar_notification_row.xml
index aff6a6e..ca584ab 100644
--- a/packages/SystemUI/res/layout/status_bar_notification_row.xml
+++ b/packages/SystemUI/res/layout/status_bar_notification_row.xml
@@ -3,15 +3,13 @@
android:layout_height="@dimen/notification_height"
>
- <ImageButton
+ <Button
android:id="@+id/veto"
android:layout_width="48dp"
android:layout_height="match_parent"
android:layout_centerVertical="true"
android:layout_alignParentRight="true"
android:layout_marginRight="-80dp"
- android:src="@drawable/status_bar_veto"
- android:scaleType="center"
android:background="@null"
android:paddingRight="8dp"
android:paddingLeft="8dp"
diff --git a/packages/SystemUI/res/values-af/strings.xml b/packages/SystemUI/res/values-af/strings.xml
index 116d6a0..9fbce5f 100644
--- a/packages/SystemUI/res/values-af/strings.xml
+++ b/packages/SystemUI/res/values-af/strings.xml
@@ -83,7 +83,7 @@
<skip />
<!-- no translation found for screenshot_saving_toast (8592630119048713208) -->
<skip />
- <!-- no translation found for screenshot_failed_toast (655180965533683356) -->
+ <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
<skip />
<!-- no translation found for usb_preference_title (6551050377388882787) -->
<skip />
@@ -99,6 +99,8 @@
<skip />
<!-- no translation found for accessibility_menu (316839303324695949) -->
<skip />
+ <!-- no translation found for accessibility_recent (3027675523629738534) -->
+ <skip />
<!-- no translation found for accessibility_ime_switch_button (5032926134740456424) -->
<skip />
<!-- no translation found for accessibility_compatibility_zoom_button (8461115318742350699) -->
@@ -187,4 +189,24 @@
<skip />
<!-- no translation found for accessibility_ringer_silent (9061243307939135383) -->
<skip />
+ <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
+ <skip />
+ <!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
+ <skip />
+ <!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
+ <skip />
+ <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
+ <skip />
+ <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-am/strings.xml b/packages/SystemUI/res/values-am/strings.xml
index 740fb2a..46e57e2 100644
--- a/packages/SystemUI/res/values-am/strings.xml
+++ b/packages/SystemUI/res/values-am/strings.xml
@@ -83,7 +83,7 @@
<skip />
<!-- no translation found for screenshot_saving_toast (8592630119048713208) -->
<skip />
- <!-- no translation found for screenshot_failed_toast (655180965533683356) -->
+ <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
<skip />
<!-- no translation found for usb_preference_title (6551050377388882787) -->
<skip />
@@ -99,6 +99,8 @@
<skip />
<!-- no translation found for accessibility_menu (316839303324695949) -->
<skip />
+ <!-- no translation found for accessibility_recent (3027675523629738534) -->
+ <skip />
<!-- no translation found for accessibility_ime_switch_button (5032926134740456424) -->
<skip />
<!-- no translation found for accessibility_compatibility_zoom_button (8461115318742350699) -->
@@ -187,4 +189,24 @@
<skip />
<!-- no translation found for accessibility_ringer_silent (9061243307939135383) -->
<skip />
+ <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
+ <skip />
+ <!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
+ <skip />
+ <!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
+ <skip />
+ <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
+ <skip />
+ <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-ar-large/strings.xml b/packages/SystemUI/res/values-ar-large/strings.xml
index 3f3ac96..e706028 100644
--- a/packages/SystemUI/res/values-ar-large/strings.xml
+++ b/packages/SystemUI/res/values-ar-large/strings.xml
@@ -20,10 +20,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="status_bar_clear_all_button" msgid="4661583896803349732">"محو الكل"</string>
- <string name="status_bar_settings_signal_meter_disconnected" msgid="383145178755329067">"لا يوجد اتصال بالإنترنت"</string>
- <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="2535465294437586528">"Wi-Fi متصل"</string>
- <string name="gps_notification_searching_text" msgid="4467935186864208249">"جارٍ البحث عن GPS"</string>
- <string name="gps_notification_found_text" msgid="6270628388918822956">"تم تعيين الموقع بواسطة GPS"</string>
<string name="notifications_off_title" msgid="1860117696034775851">"إيقاف التنبيهات"</string>
<string name="notifications_off_text" msgid="1439152806320786912">"انقر هنا لإعادة تشغيل التنبيهات."</string>
</resources>
diff --git a/packages/SystemUI/res/values-ar/strings.xml b/packages/SystemUI/res/values-ar/strings.xml
index 5b1d492..9451ca6 100644
--- a/packages/SystemUI/res/values-ar/strings.xml
+++ b/packages/SystemUI/res/values-ar/strings.xml
@@ -23,10 +23,8 @@
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"محو"</string>
<string name="status_bar_do_not_disturb_button" msgid="5812628897510997853">"عدم الإزعاج"</string>
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"إظهار التنبيهات"</string>
- <!-- no translation found for status_bar_recent_remove_item_title (6561944127804037619) -->
- <skip />
- <!-- no translation found for status_bar_recent_inspect_item_title (4906947311448880529) -->
- <skip />
+ <string name="status_bar_recent_remove_item_title" msgid="6561944127804037619">"إزالة"</string>
+ <string name="status_bar_recent_inspect_item_title" msgid="4906947311448880529">"فحص"</string>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"ليس هناك أي تنبيهات"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"مستمر"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"التنبيهات"</string>
@@ -62,103 +60,79 @@
<string name="compat_mode_help_header" msgid="7020175705401506719">"تكبير/تصغير التوافق"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"عند تصميم تطبيق لشاشة أصغر، سيظهر عنصر تحكم في التكبير/التصغير بجوار الساعة."</string>
<string name="screenshot_saving_toast" msgid="8592630119048713208">"تم حفظ لقطة الشاشة إلى المعرض."</string>
- <string name="screenshot_failed_toast" msgid="655180965533683356">"تعذر حفظ لقطة الشاشة."</string>
+ <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
+ <skip />
<string name="usb_preference_title" msgid="6551050377388882787">"خيارات نقل الملفات عبر USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"تحميل كمشغل وسائط (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"تحميل ككاميرا (PTP)"</string>
<string name="installer_cd_button_title" msgid="8485631662288445893">"تثبيت تطبيق Android File Transfer لـ Mac"</string>
- <!-- no translation found for accessibility_back (567011538994429120) -->
+ <string name="accessibility_back" msgid="567011538994429120">"رجوع"</string>
+ <string name="accessibility_home" msgid="8217216074895377641">"الصفحة الرئيسية"</string>
+ <string name="accessibility_menu" msgid="316839303324695949">"القائمة"</string>
+ <!-- no translation found for accessibility_recent (3027675523629738534) -->
<skip />
- <!-- no translation found for accessibility_home (8217216074895377641) -->
+ <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"زر تبديل طريقة الإدخال."</string>
+ <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"زر تكبير/تصغير للتوافق."</string>
+ <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"استخدام التكبير/التصغير لتحويل شاشة صغيرة إلى شاشة أكبر"</string>
+ <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"تم توصيل البلوتوث."</string>
+ <string name="accessibility_bluetooth_disconnected" msgid="7416648669976870175">"تم فصل البلوتوث."</string>
+ <string name="accessibility_no_battery" msgid="358343022352820946">"ليست هناك بطارية مركبة."</string>
+ <string name="accessibility_battery_one_bar" msgid="7774887721891057523">"إشارة البطارية تتكون من شريط واحد."</string>
+ <string name="accessibility_battery_two_bars" msgid="8500650438735009973">"إشارة البطارية تتكون من شريطين."</string>
+ <string name="accessibility_battery_three_bars" msgid="2302983330865040446">"إشارة البطارية تتكون من ثلاثة أشرطة."</string>
+ <string name="accessibility_battery_full" msgid="8909122401720158582">"إشارة البطارية كاملة."</string>
+ <string name="accessibility_no_phone" msgid="4894708937052611281">"ليست هناك إشارة بالهاتف."</string>
+ <string name="accessibility_phone_one_bar" msgid="687699278132664115">"إشارة الهاتف تتكون من شريط واحد."</string>
+ <string name="accessibility_phone_two_bars" msgid="8384905382804815201">"إشارة الهاتف تتكون من شريطين."</string>
+ <string name="accessibility_phone_three_bars" msgid="8521904843919971885">"إشارة الهاتف تتكون من ثلاثة أشرطة."</string>
+ <string name="accessibility_phone_signal_full" msgid="6471834868580757898">"إشارة الهاتف كاملة."</string>
+ <string name="accessibility_no_data" msgid="4791966295096867555">"لا تتوفر بيانات."</string>
+ <string name="accessibility_data_one_bar" msgid="1415625833238273628">"إشارة البيانات تتكون من شريط واحد."</string>
+ <string name="accessibility_data_two_bars" msgid="6166018492360432091">"إشارة البيانات تتكون من شريطين."</string>
+ <string name="accessibility_data_three_bars" msgid="9167670452395038520">"إشارة البيانات تتكون من ثلاثة أشرطة."</string>
+ <string name="accessibility_data_signal_full" msgid="2708384608124519369">"إشارة البيانات كاملة."</string>
+ <string name="accessibility_no_wifi" msgid="4017628918351949575">"ليست هناك إشارة WiFi."</string>
+ <string name="accessibility_wifi_one_bar" msgid="1914343229091303434">"إشارة WiFi تتكون من شريط واحد."</string>
+ <string name="accessibility_wifi_two_bars" msgid="7869150535859760698">"إشارة WiFi تتكون من شريطين."</string>
+ <string name="accessibility_wifi_three_bars" msgid="2665319332961356254">"إشارة WiFi تتكون من ثلاثة أشرطة."</string>
+ <string name="accessibility_wifi_signal_full" msgid="1275764416228473932">"إشارة WiFi كاملة."</string>
+ <string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
+ <string name="accessibility_data_connection_3g" msgid="8628562305003568260">"3G"</string>
+ <string name="accessibility_data_connection_3.5g" msgid="8664845609981692001">"3.5G"</string>
+ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string>
+ <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string>
+ <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
+ <string name="accessibility_data_connection_wifi" msgid="1127208787254436420">"WiFi"</string>
+ <string name="accessibility_no_sim" msgid="8274017118472455155">"ليست هناك بطاقة SIM."</string>
+ <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"ربط البلوتوث."</string>
+ <string name="accessibility_airplane_mode" msgid="834748999790763092">"وضع الطائرة."</string>
+ <string name="accessibility_battery_level" msgid="7451474187113371965">"مستوى البطارية <xliff:g id="NUMBER">%d</xliff:g> في المائة."</string>
+ <string name="accessibility_settings_button" msgid="7913780116850379698">"زر الإعدادات."</string>
+ <string name="accessibility_notifications_button" msgid="2933903195211483438">"زر التنبيهات."</string>
+ <string name="accessibility_remove_notification" msgid="4883990503785778699">"إزالة التنبيه."</string>
+ <string name="accessibility_gps_enabled" msgid="3511469499240123019">"تم تمكين GPS."</string>
+ <string name="accessibility_gps_acquiring" msgid="8959333351058967158">"الحصول على GPS."</string>
+ <string name="accessibility_tty_enabled" msgid="4613200365379426561">"تم تمكين المبرقة الكاتبة."</string>
+ <string name="accessibility_ringer_vibrate" msgid="666585363364155055">"رنين مع الاهتزاز."</string>
+ <string name="accessibility_ringer_silent" msgid="9061243307939135383">"رنين صامت."</string>
+ <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
<skip />
- <!-- no translation found for accessibility_menu (316839303324695949) -->
+ <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
<skip />
- <!-- no translation found for accessibility_ime_switch_button (5032926134740456424) -->
+ <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
<skip />
- <!-- no translation found for accessibility_compatibility_zoom_button (8461115318742350699) -->
+ <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
<skip />
- <!-- no translation found for accessibility_compatibility_zoom_example (4220687294564945780) -->
+ <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
<skip />
- <!-- no translation found for accessibility_bluetooth_connected (2707027633242983370) -->
+ <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
<skip />
- <!-- no translation found for accessibility_bluetooth_disconnected (7416648669976870175) -->
+ <!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
<skip />
- <!-- no translation found for accessibility_no_battery (358343022352820946) -->
+ <!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
<skip />
- <!-- no translation found for accessibility_battery_one_bar (7774887721891057523) -->
+ <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
<skip />
- <!-- no translation found for accessibility_battery_two_bars (8500650438735009973) -->
- <skip />
- <!-- no translation found for accessibility_battery_three_bars (2302983330865040446) -->
- <skip />
- <!-- no translation found for accessibility_battery_full (8909122401720158582) -->
- <skip />
- <!-- no translation found for accessibility_no_phone (4894708937052611281) -->
- <skip />
- <!-- no translation found for accessibility_phone_one_bar (687699278132664115) -->
- <skip />
- <!-- no translation found for accessibility_phone_two_bars (8384905382804815201) -->
- <skip />
- <!-- no translation found for accessibility_phone_three_bars (8521904843919971885) -->
- <skip />
- <!-- no translation found for accessibility_phone_signal_full (6471834868580757898) -->
- <skip />
- <!-- no translation found for accessibility_no_data (4791966295096867555) -->
- <skip />
- <!-- no translation found for accessibility_data_one_bar (1415625833238273628) -->
- <skip />
- <!-- no translation found for accessibility_data_two_bars (6166018492360432091) -->
- <skip />
- <!-- no translation found for accessibility_data_three_bars (9167670452395038520) -->
- <skip />
- <!-- no translation found for accessibility_data_signal_full (2708384608124519369) -->
- <skip />
- <!-- no translation found for accessibility_no_wifi (4017628918351949575) -->
- <skip />
- <!-- no translation found for accessibility_wifi_one_bar (1914343229091303434) -->
- <skip />
- <!-- no translation found for accessibility_wifi_two_bars (7869150535859760698) -->
- <skip />
- <!-- no translation found for accessibility_wifi_three_bars (2665319332961356254) -->
- <skip />
- <!-- no translation found for accessibility_wifi_signal_full (1275764416228473932) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_gprs (1606477224486747751) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_3g (8628562305003568260) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_3.5g (8664845609981692001) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_4g (7741000750630089612) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_cdma (6132648193978823023) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_edge (4477457051631979278) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_wifi (1127208787254436420) -->
- <skip />
- <!-- no translation found for accessibility_no_sim (8274017118472455155) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_tether (4102784498140271969) -->
- <skip />
- <!-- no translation found for accessibility_airplane_mode (834748999790763092) -->
- <skip />
- <!-- no translation found for accessibility_battery_level (7451474187113371965) -->
- <skip />
- <!-- no translation found for accessibility_settings_button (7913780116850379698) -->
- <skip />
- <!-- no translation found for accessibility_notifications_button (2933903195211483438) -->
- <skip />
- <!-- no translation found for accessibility_remove_notification (4883990503785778699) -->
- <skip />
- <!-- no translation found for accessibility_gps_enabled (3511469499240123019) -->
- <skip />
- <!-- no translation found for accessibility_gps_acquiring (8959333351058967158) -->
- <skip />
- <!-- no translation found for accessibility_tty_enabled (4613200365379426561) -->
- <skip />
- <!-- no translation found for accessibility_ringer_vibrate (666585363364155055) -->
- <skip />
- <!-- no translation found for accessibility_ringer_silent (9061243307939135383) -->
+ <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
<skip />
</resources>
diff --git a/packages/SystemUI/res/values-bg-large/strings.xml b/packages/SystemUI/res/values-bg-large/strings.xml
index 5563be4..5af2f99 100644
--- a/packages/SystemUI/res/values-bg-large/strings.xml
+++ b/packages/SystemUI/res/values-bg-large/strings.xml
@@ -20,10 +20,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="status_bar_clear_all_button" msgid="4661583896803349732">"Изчистване"</string>
- <string name="status_bar_settings_signal_meter_disconnected" msgid="383145178755329067">"Няма връзка с интернет"</string>
- <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="2535465294437586528">"Wi-Fi: има връзка"</string>
- <string name="gps_notification_searching_text" msgid="4467935186864208249">"Търси се GPS"</string>
- <string name="gps_notification_found_text" msgid="6270628388918822956">"Местоположението е зададено от GPS"</string>
<string name="notifications_off_title" msgid="1860117696034775851">"Известията са изключени"</string>
<string name="notifications_off_text" msgid="1439152806320786912">"Докоснете тук, за да включите отново известията."</string>
</resources>
diff --git a/packages/SystemUI/res/values-bg/strings.xml b/packages/SystemUI/res/values-bg/strings.xml
index 4890c0d..6e23d5f 100644
--- a/packages/SystemUI/res/values-bg/strings.xml
+++ b/packages/SystemUI/res/values-bg/strings.xml
@@ -62,7 +62,8 @@
<string name="compat_mode_help_header" msgid="7020175705401506719">"Промяна на мащаба за съвместимост"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Когато дадено приложение е създадено за по-малък екран, до часовника ще се покаже управление за промяна на мащаба."</string>
<string name="screenshot_saving_toast" msgid="8592630119048713208">"Екранната снимка е запазена в галерията"</string>
- <string name="screenshot_failed_toast" msgid="655180965533683356">"Екранната снимка не можа да бъде запазена"</string>
+ <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
+ <skip />
<string name="usb_preference_title" msgid="6551050377388882787">"Опции за пренос на файлове чрез USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Свързване като медиен плейър (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Свързване като камера (PTP)"</string>
@@ -73,6 +74,8 @@
<skip />
<!-- no translation found for accessibility_menu (316839303324695949) -->
<skip />
+ <!-- no translation found for accessibility_recent (3027675523629738534) -->
+ <skip />
<!-- no translation found for accessibility_ime_switch_button (5032926134740456424) -->
<skip />
<!-- no translation found for accessibility_compatibility_zoom_button (8461115318742350699) -->
@@ -161,4 +164,24 @@
<skip />
<!-- no translation found for accessibility_ringer_silent (9061243307939135383) -->
<skip />
+ <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
+ <skip />
+ <!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
+ <skip />
+ <!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
+ <skip />
+ <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
+ <skip />
+ <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-ca-large/strings.xml b/packages/SystemUI/res/values-ca-large/strings.xml
index 876dae2..d78e758 100644
--- a/packages/SystemUI/res/values-ca-large/strings.xml
+++ b/packages/SystemUI/res/values-ca-large/strings.xml
@@ -20,10 +20,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="status_bar_clear_all_button" msgid="4661583896803349732">"Esborra-ho"</string>
- <string name="status_bar_settings_signal_meter_disconnected" msgid="383145178755329067">"No hi ha connexió a Internet"</string>
- <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="2535465294437586528">"Wi-Fi: connectada"</string>
- <string name="gps_notification_searching_text" msgid="4467935186864208249">"S\'està cercant un GPS"</string>
- <string name="gps_notification_found_text" msgid="6270628388918822956">"S\'ha establert la ubicació per GPS"</string>
<string name="notifications_off_title" msgid="1860117696034775851">"Notificacions desactivades"</string>
<string name="notifications_off_text" msgid="1439152806320786912">"Pica aquí per tornar a activar les notificacions."</string>
</resources>
diff --git a/packages/SystemUI/res/values-ca/strings.xml b/packages/SystemUI/res/values-ca/strings.xml
index 417987c..3be5349 100644
--- a/packages/SystemUI/res/values-ca/strings.xml
+++ b/packages/SystemUI/res/values-ca/strings.xml
@@ -62,7 +62,8 @@
<string name="compat_mode_help_header" msgid="7020175705401506719">"Zoom de compatibilitat"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Quan una aplicació s\'hagi dissenyat per a una pantalla més petita, apareixerà un control de zoom al costat del rellotge."</string>
<string name="screenshot_saving_toast" msgid="8592630119048713208">"Captura de pantalla desada a la galeria"</string>
- <string name="screenshot_failed_toast" msgid="655180965533683356">"No es pot desar la captura de pantalla"</string>
+ <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
+ <skip />
<string name="usb_preference_title" msgid="6551050377388882787">"Opcions transf. fitxers USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Munta com a reproductor multimèdia (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Munta com a càmera (PTP)"</string>
@@ -73,6 +74,8 @@
<skip />
<!-- no translation found for accessibility_menu (316839303324695949) -->
<skip />
+ <!-- no translation found for accessibility_recent (3027675523629738534) -->
+ <skip />
<!-- no translation found for accessibility_ime_switch_button (5032926134740456424) -->
<skip />
<!-- no translation found for accessibility_compatibility_zoom_button (8461115318742350699) -->
@@ -161,4 +164,24 @@
<skip />
<!-- no translation found for accessibility_ringer_silent (9061243307939135383) -->
<skip />
+ <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
+ <skip />
+ <!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
+ <skip />
+ <!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
+ <skip />
+ <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
+ <skip />
+ <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-cs-large/strings.xml b/packages/SystemUI/res/values-cs-large/strings.xml
index 0ec142e..ef575da 100644
--- a/packages/SystemUI/res/values-cs-large/strings.xml
+++ b/packages/SystemUI/res/values-cs-large/strings.xml
@@ -20,10 +20,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="status_bar_clear_all_button" msgid="4661583896803349732">"Smazat vše"</string>
- <string name="status_bar_settings_signal_meter_disconnected" msgid="383145178755329067">"Bez internetu"</string>
- <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="2535465294437586528">"Wi-Fi: připojeno"</string>
- <string name="gps_notification_searching_text" msgid="4467935186864208249">"Vyhledávání satelitů GPS"</string>
- <string name="gps_notification_found_text" msgid="6270628388918822956">"Poloha nastavena pomocí GPS"</string>
<string name="notifications_off_title" msgid="1860117696034775851">"Oznámení jsou vypnuta"</string>
<string name="notifications_off_text" msgid="1439152806320786912">"Chcete-li oznámení znovu zapnout, klepněte sem."</string>
</resources>
diff --git a/packages/SystemUI/res/values-cs/strings.xml b/packages/SystemUI/res/values-cs/strings.xml
index 7544876..115abd5 100644
--- a/packages/SystemUI/res/values-cs/strings.xml
+++ b/packages/SystemUI/res/values-cs/strings.xml
@@ -62,7 +62,8 @@
<string name="compat_mode_help_header" msgid="7020175705401506719">"Kompatibilní přiblížení"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Pokud je aplikace navržena pro menší obrazovku, zobrazí se vedle hodin ovládací prvek přiblížení."</string>
<string name="screenshot_saving_toast" msgid="8592630119048713208">"Snímek obrazovky byl uložen do Galerie"</string>
- <string name="screenshot_failed_toast" msgid="655180965533683356">"Snímek obrazovky se nepodařilo uložit"</string>
+ <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
+ <skip />
<string name="usb_preference_title" msgid="6551050377388882787">"Možnosti přenosu souborů pomocí rozhraní USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Připojit jako přehrávač médií (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Připojit jako fotoaparát (PTP)"</string>
@@ -73,6 +74,8 @@
<skip />
<!-- no translation found for accessibility_menu (316839303324695949) -->
<skip />
+ <!-- no translation found for accessibility_recent (3027675523629738534) -->
+ <skip />
<!-- no translation found for accessibility_ime_switch_button (5032926134740456424) -->
<skip />
<!-- no translation found for accessibility_compatibility_zoom_button (8461115318742350699) -->
@@ -161,4 +164,24 @@
<skip />
<!-- no translation found for accessibility_ringer_silent (9061243307939135383) -->
<skip />
+ <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
+ <skip />
+ <!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
+ <skip />
+ <!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
+ <skip />
+ <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
+ <skip />
+ <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-da-large/strings.xml b/packages/SystemUI/res/values-da-large/strings.xml
index 116751e..eb2bc94 100644
--- a/packages/SystemUI/res/values-da-large/strings.xml
+++ b/packages/SystemUI/res/values-da-large/strings.xml
@@ -20,10 +20,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="status_bar_clear_all_button" msgid="4661583896803349732">"Ryd alt"</string>
- <string name="status_bar_settings_signal_meter_disconnected" msgid="383145178755329067">"Ingen internetforb."</string>
- <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="2535465294437586528">"Wi-Fi er forbundet"</string>
- <string name="gps_notification_searching_text" msgid="4467935186864208249">"Søger efter GPS"</string>
- <string name="gps_notification_found_text" msgid="6270628388918822956">"Placeringen er angivet ved hjælp af GPS"</string>
<string name="notifications_off_title" msgid="1860117696034775851">"Meddelelser: fra"</string>
<string name="notifications_off_text" msgid="1439152806320786912">"Tryk her for at slå meddelelser til igen."</string>
</resources>
diff --git a/packages/SystemUI/res/values-da/strings.xml b/packages/SystemUI/res/values-da/strings.xml
index 89c6b64..ea67460 100644
--- a/packages/SystemUI/res/values-da/strings.xml
+++ b/packages/SystemUI/res/values-da/strings.xml
@@ -23,10 +23,8 @@
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"Ryd"</string>
<string name="status_bar_do_not_disturb_button" msgid="5812628897510997853">"Forstyr ikke"</string>
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Vis meddelelser"</string>
- <!-- no translation found for status_bar_recent_remove_item_title (6561944127804037619) -->
- <skip />
- <!-- no translation found for status_bar_recent_inspect_item_title (4906947311448880529) -->
- <skip />
+ <string name="status_bar_recent_remove_item_title" msgid="6561944127804037619">"Fjern"</string>
+ <string name="status_bar_recent_inspect_item_title" msgid="4906947311448880529">"Inspicer"</string>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Ingen meddelelser"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"I gang"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Meddelelser"</string>
@@ -62,103 +60,79 @@
<string name="compat_mode_help_header" msgid="7020175705401506719">"Kompatibilitetszoom"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Når en app er udviklet til en mindre skærm, vises der en zoomfunktion ved uret."</string>
<string name="screenshot_saving_toast" msgid="8592630119048713208">"Skærmbilledet gemmes i Galleri"</string>
- <string name="screenshot_failed_toast" msgid="655180965533683356">"Skærmbilledet kunne ikke gemmes"</string>
+ <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
+ <skip />
<string name="usb_preference_title" msgid="6551050377388882787">"Muligheder for USB-filoverførsel"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Isæt som en medieafspiller (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Isæt som et kamera (PTP)"</string>
<string name="installer_cd_button_title" msgid="8485631662288445893">"Installer appen Android File Transfer Manager til Mac"</string>
- <!-- no translation found for accessibility_back (567011538994429120) -->
+ <string name="accessibility_back" msgid="567011538994429120">"Tilbage"</string>
+ <string name="accessibility_home" msgid="8217216074895377641">"Startside"</string>
+ <string name="accessibility_menu" msgid="316839303324695949">"Menu"</string>
+ <!-- no translation found for accessibility_recent (3027675523629738534) -->
<skip />
- <!-- no translation found for accessibility_home (8217216074895377641) -->
+ <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Skift indtastningsmetode-knappen."</string>
+ <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Knap for kompatibilitetszoom."</string>
+ <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Zoom mindre til større skærm."</string>
+ <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth tilsluttet."</string>
+ <string name="accessibility_bluetooth_disconnected" msgid="7416648669976870175">"Bluetooth afbrudt."</string>
+ <string name="accessibility_no_battery" msgid="358343022352820946">"Intet batteri."</string>
+ <string name="accessibility_battery_one_bar" msgid="7774887721891057523">"Batteri en bjælke."</string>
+ <string name="accessibility_battery_two_bars" msgid="8500650438735009973">"Batteri to bjælker."</string>
+ <string name="accessibility_battery_three_bars" msgid="2302983330865040446">"Batteri tre bjælker."</string>
+ <string name="accessibility_battery_full" msgid="8909122401720158582">"Batteri fuldt."</string>
+ <string name="accessibility_no_phone" msgid="4894708937052611281">"Ingen telefon."</string>
+ <string name="accessibility_phone_one_bar" msgid="687699278132664115">"Telefon en bjælke."</string>
+ <string name="accessibility_phone_two_bars" msgid="8384905382804815201">"Telefon to bjælker."</string>
+ <string name="accessibility_phone_three_bars" msgid="8521904843919971885">"Telefon tre bjælker."</string>
+ <string name="accessibility_phone_signal_full" msgid="6471834868580757898">"Telefonsignal fuldt."</string>
+ <string name="accessibility_no_data" msgid="4791966295096867555">"Ingen data."</string>
+ <string name="accessibility_data_one_bar" msgid="1415625833238273628">"Data en bjælke."</string>
+ <string name="accessibility_data_two_bars" msgid="6166018492360432091">"Data to bjælker."</string>
+ <string name="accessibility_data_three_bars" msgid="9167670452395038520">"Data tre bjælker."</string>
+ <string name="accessibility_data_signal_full" msgid="2708384608124519369">"Datasignal fuldt."</string>
+ <string name="accessibility_no_wifi" msgid="4017628918351949575">"Ingen Wi-Fi."</string>
+ <string name="accessibility_wifi_one_bar" msgid="1914343229091303434">"Wi-Fi en bjælke."</string>
+ <string name="accessibility_wifi_two_bars" msgid="7869150535859760698">"Wi-Fi to bjælker."</string>
+ <string name="accessibility_wifi_three_bars" msgid="2665319332961356254">"Wi-Fi tre bjælker."</string>
+ <string name="accessibility_wifi_signal_full" msgid="1275764416228473932">"Wi-Fi-signal fuldt."</string>
+ <string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
+ <string name="accessibility_data_connection_3g" msgid="8628562305003568260">"3G"</string>
+ <string name="accessibility_data_connection_3.5g" msgid="8664845609981692001">"3.5G"</string>
+ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string>
+ <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string>
+ <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
+ <string name="accessibility_data_connection_wifi" msgid="1127208787254436420">"Wi-Fi"</string>
+ <string name="accessibility_no_sim" msgid="8274017118472455155">"Intet SIM-kort."</string>
+ <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Bluetooth-netdeling."</string>
+ <string name="accessibility_airplane_mode" msgid="834748999790763092">"Flytilstand."</string>
+ <string name="accessibility_battery_level" msgid="7451474187113371965">"Batteri <xliff:g id="NUMBER">%d</xliff:g> procent."</string>
+ <string name="accessibility_settings_button" msgid="7913780116850379698">"Knappen Indstillinger."</string>
+ <string name="accessibility_notifications_button" msgid="2933903195211483438">"Knappen Meddelelser."</string>
+ <string name="accessibility_remove_notification" msgid="4883990503785778699">"Fjern meddelelse."</string>
+ <string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS aktiveret."</string>
+ <string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPS samler data."</string>
+ <string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTypewriter aktiveret."</string>
+ <string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Ringervibration."</string>
+ <string name="accessibility_ringer_silent" msgid="9061243307939135383">"Ringeren er lydløs."</string>
+ <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
<skip />
- <!-- no translation found for accessibility_menu (316839303324695949) -->
+ <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
<skip />
- <!-- no translation found for accessibility_ime_switch_button (5032926134740456424) -->
+ <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
<skip />
- <!-- no translation found for accessibility_compatibility_zoom_button (8461115318742350699) -->
+ <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
<skip />
- <!-- no translation found for accessibility_compatibility_zoom_example (4220687294564945780) -->
+ <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
<skip />
- <!-- no translation found for accessibility_bluetooth_connected (2707027633242983370) -->
+ <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
<skip />
- <!-- no translation found for accessibility_bluetooth_disconnected (7416648669976870175) -->
+ <!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
<skip />
- <!-- no translation found for accessibility_no_battery (358343022352820946) -->
+ <!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
<skip />
- <!-- no translation found for accessibility_battery_one_bar (7774887721891057523) -->
+ <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
<skip />
- <!-- no translation found for accessibility_battery_two_bars (8500650438735009973) -->
- <skip />
- <!-- no translation found for accessibility_battery_three_bars (2302983330865040446) -->
- <skip />
- <!-- no translation found for accessibility_battery_full (8909122401720158582) -->
- <skip />
- <!-- no translation found for accessibility_no_phone (4894708937052611281) -->
- <skip />
- <!-- no translation found for accessibility_phone_one_bar (687699278132664115) -->
- <skip />
- <!-- no translation found for accessibility_phone_two_bars (8384905382804815201) -->
- <skip />
- <!-- no translation found for accessibility_phone_three_bars (8521904843919971885) -->
- <skip />
- <!-- no translation found for accessibility_phone_signal_full (6471834868580757898) -->
- <skip />
- <!-- no translation found for accessibility_no_data (4791966295096867555) -->
- <skip />
- <!-- no translation found for accessibility_data_one_bar (1415625833238273628) -->
- <skip />
- <!-- no translation found for accessibility_data_two_bars (6166018492360432091) -->
- <skip />
- <!-- no translation found for accessibility_data_three_bars (9167670452395038520) -->
- <skip />
- <!-- no translation found for accessibility_data_signal_full (2708384608124519369) -->
- <skip />
- <!-- no translation found for accessibility_no_wifi (4017628918351949575) -->
- <skip />
- <!-- no translation found for accessibility_wifi_one_bar (1914343229091303434) -->
- <skip />
- <!-- no translation found for accessibility_wifi_two_bars (7869150535859760698) -->
- <skip />
- <!-- no translation found for accessibility_wifi_three_bars (2665319332961356254) -->
- <skip />
- <!-- no translation found for accessibility_wifi_signal_full (1275764416228473932) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_gprs (1606477224486747751) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_3g (8628562305003568260) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_3.5g (8664845609981692001) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_4g (7741000750630089612) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_cdma (6132648193978823023) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_edge (4477457051631979278) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_wifi (1127208787254436420) -->
- <skip />
- <!-- no translation found for accessibility_no_sim (8274017118472455155) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_tether (4102784498140271969) -->
- <skip />
- <!-- no translation found for accessibility_airplane_mode (834748999790763092) -->
- <skip />
- <!-- no translation found for accessibility_battery_level (7451474187113371965) -->
- <skip />
- <!-- no translation found for accessibility_settings_button (7913780116850379698) -->
- <skip />
- <!-- no translation found for accessibility_notifications_button (2933903195211483438) -->
- <skip />
- <!-- no translation found for accessibility_remove_notification (4883990503785778699) -->
- <skip />
- <!-- no translation found for accessibility_gps_enabled (3511469499240123019) -->
- <skip />
- <!-- no translation found for accessibility_gps_acquiring (8959333351058967158) -->
- <skip />
- <!-- no translation found for accessibility_tty_enabled (4613200365379426561) -->
- <skip />
- <!-- no translation found for accessibility_ringer_vibrate (666585363364155055) -->
- <skip />
- <!-- no translation found for accessibility_ringer_silent (9061243307939135383) -->
+ <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
<skip />
</resources>
diff --git a/packages/SystemUI/res/values-de-large/strings.xml b/packages/SystemUI/res/values-de-large/strings.xml
index 5f8c1d8..68d80a6 100644
--- a/packages/SystemUI/res/values-de-large/strings.xml
+++ b/packages/SystemUI/res/values-de-large/strings.xml
@@ -20,10 +20,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="status_bar_clear_all_button" msgid="4661583896803349732">"Löschen"</string>
- <string name="status_bar_settings_signal_meter_disconnected" msgid="383145178755329067">"Keine Internetverbindung"</string>
- <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="2535465294437586528">"WLAN verbunden"</string>
- <string name="gps_notification_searching_text" msgid="4467935186864208249">"GPS wird gesucht..."</string>
- <string name="gps_notification_found_text" msgid="6270628388918822956">"Standort durch GPS festgelegt"</string>
<string name="notifications_off_title" msgid="1860117696034775851">"Benachrichtigungen aus"</string>
<string name="notifications_off_text" msgid="1439152806320786912">"Tippen Sie hier, um die Benachrichtigungen wieder zu aktivieren."</string>
</resources>
diff --git a/packages/SystemUI/res/values-de/strings.xml b/packages/SystemUI/res/values-de/strings.xml
index dc68c22..cc06c26 100644
--- a/packages/SystemUI/res/values-de/strings.xml
+++ b/packages/SystemUI/res/values-de/strings.xml
@@ -62,7 +62,8 @@
<string name="compat_mode_help_header" msgid="7020175705401506719">"Kompatibilitätszoom"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Wenn eine App für einen kleineren Bildschirm ausgelegt ist, wird ein Zoom-Steuerelement neben der Uhr angezeigt."</string>
<string name="screenshot_saving_toast" msgid="8592630119048713208">"Screenshot in Galerie gespeichert"</string>
- <string name="screenshot_failed_toast" msgid="655180965533683356">"Screenshot konnte nicht gespeichert werden."</string>
+ <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
+ <skip />
<string name="usb_preference_title" msgid="6551050377388882787">"USB-Dateiübertragungsoptionen"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Als Medienplayer (MTP) bereitstellen"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Als Kamera (PTP) bereitstellen"</string>
@@ -73,6 +74,8 @@
<skip />
<!-- no translation found for accessibility_menu (316839303324695949) -->
<skip />
+ <!-- no translation found for accessibility_recent (3027675523629738534) -->
+ <skip />
<!-- no translation found for accessibility_ime_switch_button (5032926134740456424) -->
<skip />
<!-- no translation found for accessibility_compatibility_zoom_button (8461115318742350699) -->
@@ -161,4 +164,24 @@
<skip />
<!-- no translation found for accessibility_ringer_silent (9061243307939135383) -->
<skip />
+ <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
+ <skip />
+ <!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
+ <skip />
+ <!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
+ <skip />
+ <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
+ <skip />
+ <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-el-large/strings.xml b/packages/SystemUI/res/values-el-large/strings.xml
index a4f4ac2..57d4b1e 100644
--- a/packages/SystemUI/res/values-el-large/strings.xml
+++ b/packages/SystemUI/res/values-el-large/strings.xml
@@ -20,10 +20,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="status_bar_clear_all_button" msgid="4661583896803349732">"Εκκαθ. όλων"</string>
- <string name="status_bar_settings_signal_meter_disconnected" msgid="383145178755329067">"Χωρ. σύνδ. στο Διαδ."</string>
- <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="2535465294437586528">"Wi-Fi συνδεδεμένο"</string>
- <string name="gps_notification_searching_text" msgid="4467935186864208249">"Αναζήτηση για GPS"</string>
- <string name="gps_notification_found_text" msgid="6270628388918822956">"Ρύθμιση τοποθεσίας με GPS"</string>
<string name="notifications_off_title" msgid="1860117696034775851">"Ειδοποιήσεις ανενεργές"</string>
<string name="notifications_off_text" msgid="1439152806320786912">"Πατήστε εδώ για να ενεργοποιήσετε ξανά τις ειδοποιήσεις."</string>
</resources>
diff --git a/packages/SystemUI/res/values-el/strings.xml b/packages/SystemUI/res/values-el/strings.xml
index 29d84cb..8609c24 100644
--- a/packages/SystemUI/res/values-el/strings.xml
+++ b/packages/SystemUI/res/values-el/strings.xml
@@ -23,10 +23,8 @@
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"Εκκαθάριση"</string>
<string name="status_bar_do_not_disturb_button" msgid="5812628897510997853">"Μην ενοχλείτε"</string>
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Εμφάνιση ειδοποιήσεων"</string>
- <!-- no translation found for status_bar_recent_remove_item_title (6561944127804037619) -->
- <skip />
- <!-- no translation found for status_bar_recent_inspect_item_title (4906947311448880529) -->
- <skip />
+ <string name="status_bar_recent_remove_item_title" msgid="6561944127804037619">"Κατάργηση"</string>
+ <string name="status_bar_recent_inspect_item_title" msgid="4906947311448880529">"Επιθεώρηση"</string>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Δεν υπάρχουν ειδοποιήσεις"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Εν εξελίξει"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Ειδοποιήσεις"</string>
@@ -62,103 +60,79 @@
<string name="compat_mode_help_header" msgid="7020175705401506719">"Ζουμ για συμβατότητα"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Όταν μια εφαρμογή έχει σχεδιαστεί για προβολή σε μικρότερη οθόνη, δίπλα από το ρολόι θα εμφανιστεί ένα στοιχείο ελέγχου ζουμ."</string>
<string name="screenshot_saving_toast" msgid="8592630119048713208">"Το στιγμιότυπο οθόνης αποθηκεύτηκε στη συλλογή"</string>
- <string name="screenshot_failed_toast" msgid="655180965533683356">"Δεν ήταν δυνατή η αποθήκευση του στιγμιοτύπου οθόνης"</string>
+ <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
+ <skip />
<string name="usb_preference_title" msgid="6551050377388882787">"Επιλογές μεταφοράς αρχείων μέσω USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Προσάρτηση ως μονάδας αναπαραγωγής μέσων (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Προσάρτηση ως κάμερας (PTP)"</string>
<string name="installer_cd_button_title" msgid="8485631662288445893">"Εγκατάσταση της εφαρμογής μεταφοράς αρχείων Android για Mac"</string>
- <!-- no translation found for accessibility_back (567011538994429120) -->
+ <string name="accessibility_back" msgid="567011538994429120">"Πίσω"</string>
+ <string name="accessibility_home" msgid="8217216074895377641">"Αρχική σελίδα"</string>
+ <string name="accessibility_menu" msgid="316839303324695949">"Μενού"</string>
+ <!-- no translation found for accessibility_recent (3027675523629738534) -->
<skip />
- <!-- no translation found for accessibility_home (8217216074895377641) -->
+ <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Κουμπί εναλλαγής μεθόδου εισόδου"</string>
+ <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Κουμπί ζουμ συμβατότητας."</string>
+ <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Ζουμ από μικρότερη σε μεγαλύτερη οθόνη."</string>
+ <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Το Bluetooth είναι συνδεδεμένο."</string>
+ <string name="accessibility_bluetooth_disconnected" msgid="7416648669976870175">"Το Bluetooth αποσυνδέθηκε."</string>
+ <string name="accessibility_no_battery" msgid="358343022352820946">"Δεν υπάρχει μπαταρία."</string>
+ <string name="accessibility_battery_one_bar" msgid="7774887721891057523">"Μία γραμμή μπαταρίας."</string>
+ <string name="accessibility_battery_two_bars" msgid="8500650438735009973">"Δύο γραμμές μπαταρίας."</string>
+ <string name="accessibility_battery_three_bars" msgid="2302983330865040446">"Τρεις γραμμές μπαταρίας."</string>
+ <string name="accessibility_battery_full" msgid="8909122401720158582">"Πλήρης μπαταρία."</string>
+ <string name="accessibility_no_phone" msgid="4894708937052611281">"Δεν υπάρχει τηλέφωνο."</string>
+ <string name="accessibility_phone_one_bar" msgid="687699278132664115">"Μία γραμμή τηλεφώνου."</string>
+ <string name="accessibility_phone_two_bars" msgid="8384905382804815201">"Δύο γραμμές τηλεφώνου."</string>
+ <string name="accessibility_phone_three_bars" msgid="8521904843919971885">"Τρεις γραμμές μπαταρίας."</string>
+ <string name="accessibility_phone_signal_full" msgid="6471834868580757898">"Σήμα τηλεφώνου πλήρες."</string>
+ <string name="accessibility_no_data" msgid="4791966295096867555">"Δεν υπάρχουν δεδομένα."</string>
+ <string name="accessibility_data_one_bar" msgid="1415625833238273628">"Μία γραμμή δεδομένων."</string>
+ <string name="accessibility_data_two_bars" msgid="6166018492360432091">"Δύο γραμμές δεδομένων."</string>
+ <string name="accessibility_data_three_bars" msgid="9167670452395038520">"Τρεις γραμμές δεδομένων."</string>
+ <string name="accessibility_data_signal_full" msgid="2708384608124519369">"Πλήρες σήμα δεδομένων."</string>
+ <string name="accessibility_no_wifi" msgid="4017628918351949575">"Δεν υπάρχει WiFi."</string>
+ <string name="accessibility_wifi_one_bar" msgid="1914343229091303434">"Μία γραμμή WiFi."</string>
+ <string name="accessibility_wifi_two_bars" msgid="7869150535859760698">"Δύο γραμμές WiFi."</string>
+ <string name="accessibility_wifi_three_bars" msgid="2665319332961356254">"Τρεις γραμμές WiFi."</string>
+ <string name="accessibility_wifi_signal_full" msgid="1275764416228473932">"Πλήρες σήμα WiFi."</string>
+ <string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
+ <string name="accessibility_data_connection_3g" msgid="8628562305003568260">"3G"</string>
+ <string name="accessibility_data_connection_3.5g" msgid="8664845609981692001">"3.5G"</string>
+ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string>
+ <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string>
+ <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
+ <string name="accessibility_data_connection_wifi" msgid="1127208787254436420">"WiFi"</string>
+ <string name="accessibility_no_sim" msgid="8274017118472455155">"Δεν υπάρχει SIM."</string>
+ <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Σύνδεση Bluetooth"</string>
+ <string name="accessibility_airplane_mode" msgid="834748999790763092">"Λειτουργία πτήσης."</string>
+ <string name="accessibility_battery_level" msgid="7451474187113371965">"Μπαταρία <xliff:g id="NUMBER">%d</xliff:g> %."</string>
+ <string name="accessibility_settings_button" msgid="7913780116850379698">"Κουμπί ρυθμίσεων."</string>
+ <string name="accessibility_notifications_button" msgid="2933903195211483438">"Κουμπί ειδοοποιήσεων"</string>
+ <string name="accessibility_remove_notification" msgid="4883990503785778699">"Κατάργηση ειδοποίησης."</string>
+ <string name="accessibility_gps_enabled" msgid="3511469499240123019">"Το GPS ενεργοποιήθηκε."</string>
+ <string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Ανάκτηση GPS."</string>
+ <string name="accessibility_tty_enabled" msgid="4613200365379426561">"Το TeleTypewriter ενεργοποιήθηκε."</string>
+ <string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Δόνηση ειδοποίησης ήχου"</string>
+ <string name="accessibility_ringer_silent" msgid="9061243307939135383">"Ήχος ειδοποίησης: Αθόρυβο."</string>
+ <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
<skip />
- <!-- no translation found for accessibility_menu (316839303324695949) -->
+ <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
<skip />
- <!-- no translation found for accessibility_ime_switch_button (5032926134740456424) -->
+ <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
<skip />
- <!-- no translation found for accessibility_compatibility_zoom_button (8461115318742350699) -->
+ <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
<skip />
- <!-- no translation found for accessibility_compatibility_zoom_example (4220687294564945780) -->
+ <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
<skip />
- <!-- no translation found for accessibility_bluetooth_connected (2707027633242983370) -->
+ <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
<skip />
- <!-- no translation found for accessibility_bluetooth_disconnected (7416648669976870175) -->
+ <!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
<skip />
- <!-- no translation found for accessibility_no_battery (358343022352820946) -->
+ <!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
<skip />
- <!-- no translation found for accessibility_battery_one_bar (7774887721891057523) -->
+ <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
<skip />
- <!-- no translation found for accessibility_battery_two_bars (8500650438735009973) -->
- <skip />
- <!-- no translation found for accessibility_battery_three_bars (2302983330865040446) -->
- <skip />
- <!-- no translation found for accessibility_battery_full (8909122401720158582) -->
- <skip />
- <!-- no translation found for accessibility_no_phone (4894708937052611281) -->
- <skip />
- <!-- no translation found for accessibility_phone_one_bar (687699278132664115) -->
- <skip />
- <!-- no translation found for accessibility_phone_two_bars (8384905382804815201) -->
- <skip />
- <!-- no translation found for accessibility_phone_three_bars (8521904843919971885) -->
- <skip />
- <!-- no translation found for accessibility_phone_signal_full (6471834868580757898) -->
- <skip />
- <!-- no translation found for accessibility_no_data (4791966295096867555) -->
- <skip />
- <!-- no translation found for accessibility_data_one_bar (1415625833238273628) -->
- <skip />
- <!-- no translation found for accessibility_data_two_bars (6166018492360432091) -->
- <skip />
- <!-- no translation found for accessibility_data_three_bars (9167670452395038520) -->
- <skip />
- <!-- no translation found for accessibility_data_signal_full (2708384608124519369) -->
- <skip />
- <!-- no translation found for accessibility_no_wifi (4017628918351949575) -->
- <skip />
- <!-- no translation found for accessibility_wifi_one_bar (1914343229091303434) -->
- <skip />
- <!-- no translation found for accessibility_wifi_two_bars (7869150535859760698) -->
- <skip />
- <!-- no translation found for accessibility_wifi_three_bars (2665319332961356254) -->
- <skip />
- <!-- no translation found for accessibility_wifi_signal_full (1275764416228473932) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_gprs (1606477224486747751) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_3g (8628562305003568260) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_3.5g (8664845609981692001) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_4g (7741000750630089612) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_cdma (6132648193978823023) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_edge (4477457051631979278) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_wifi (1127208787254436420) -->
- <skip />
- <!-- no translation found for accessibility_no_sim (8274017118472455155) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_tether (4102784498140271969) -->
- <skip />
- <!-- no translation found for accessibility_airplane_mode (834748999790763092) -->
- <skip />
- <!-- no translation found for accessibility_battery_level (7451474187113371965) -->
- <skip />
- <!-- no translation found for accessibility_settings_button (7913780116850379698) -->
- <skip />
- <!-- no translation found for accessibility_notifications_button (2933903195211483438) -->
- <skip />
- <!-- no translation found for accessibility_remove_notification (4883990503785778699) -->
- <skip />
- <!-- no translation found for accessibility_gps_enabled (3511469499240123019) -->
- <skip />
- <!-- no translation found for accessibility_gps_acquiring (8959333351058967158) -->
- <skip />
- <!-- no translation found for accessibility_tty_enabled (4613200365379426561) -->
- <skip />
- <!-- no translation found for accessibility_ringer_vibrate (666585363364155055) -->
- <skip />
- <!-- no translation found for accessibility_ringer_silent (9061243307939135383) -->
+ <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
<skip />
</resources>
diff --git a/packages/SystemUI/res/values-en-rGB-large/strings.xml b/packages/SystemUI/res/values-en-rGB-large/strings.xml
index aec6899..5f7df68 100644
--- a/packages/SystemUI/res/values-en-rGB-large/strings.xml
+++ b/packages/SystemUI/res/values-en-rGB-large/strings.xml
@@ -20,10 +20,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="status_bar_clear_all_button" msgid="4661583896803349732">"Clear all"</string>
- <string name="status_bar_settings_signal_meter_disconnected" msgid="383145178755329067">"No Internet connection"</string>
- <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="2535465294437586528">"Wi-Fi connected"</string>
- <string name="gps_notification_searching_text" msgid="4467935186864208249">"Searching for GPS"</string>
- <string name="gps_notification_found_text" msgid="6270628388918822956">"Location set by GPS"</string>
<string name="notifications_off_title" msgid="1860117696034775851">"Notifications off"</string>
<string name="notifications_off_text" msgid="1439152806320786912">"Tap here to turn notifications back on."</string>
</resources>
diff --git a/packages/SystemUI/res/values-en-rGB/strings.xml b/packages/SystemUI/res/values-en-rGB/strings.xml
index 2d8c737..8e8734a 100644
--- a/packages/SystemUI/res/values-en-rGB/strings.xml
+++ b/packages/SystemUI/res/values-en-rGB/strings.xml
@@ -23,10 +23,8 @@
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"Clear"</string>
<string name="status_bar_do_not_disturb_button" msgid="5812628897510997853">"Do not disturb"</string>
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Show notifications"</string>
- <!-- no translation found for status_bar_recent_remove_item_title (6561944127804037619) -->
- <skip />
- <!-- no translation found for status_bar_recent_inspect_item_title (4906947311448880529) -->
- <skip />
+ <string name="status_bar_recent_remove_item_title" msgid="6561944127804037619">"Remove"</string>
+ <string name="status_bar_recent_inspect_item_title" msgid="4906947311448880529">"Inspect"</string>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"No notifications"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Ongoing"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Notifications"</string>
@@ -62,103 +60,79 @@
<string name="compat_mode_help_header" msgid="7020175705401506719">"Compatibility Zoom"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"When an app was designed for a smaller screen, a zoom control will appear by the clock."</string>
<string name="screenshot_saving_toast" msgid="8592630119048713208">"Screenshot saved to Gallery"</string>
- <string name="screenshot_failed_toast" msgid="655180965533683356">"Could not save screenshot"</string>
+ <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
+ <skip />
<string name="usb_preference_title" msgid="6551050377388882787">"USB file transfer options"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Mount as a media player (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Mount as a camera (PTP)"</string>
<string name="installer_cd_button_title" msgid="8485631662288445893">"Install Android File Transfer application for Mac"</string>
- <!-- no translation found for accessibility_back (567011538994429120) -->
+ <string name="accessibility_back" msgid="567011538994429120">"Back"</string>
+ <string name="accessibility_home" msgid="8217216074895377641">"Home"</string>
+ <string name="accessibility_menu" msgid="316839303324695949">"Menu"</string>
+ <!-- no translation found for accessibility_recent (3027675523629738534) -->
<skip />
- <!-- no translation found for accessibility_home (8217216074895377641) -->
+ <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Switch input method button."</string>
+ <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Compatibility zoom button."</string>
+ <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Zoom smaller to larger screen."</string>
+ <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth connected."</string>
+ <string name="accessibility_bluetooth_disconnected" msgid="7416648669976870175">"Bluetooth disconnected."</string>
+ <string name="accessibility_no_battery" msgid="358343022352820946">"No battery."</string>
+ <string name="accessibility_battery_one_bar" msgid="7774887721891057523">"Battery one bar."</string>
+ <string name="accessibility_battery_two_bars" msgid="8500650438735009973">"Battery two bars."</string>
+ <string name="accessibility_battery_three_bars" msgid="2302983330865040446">"Battery three bars."</string>
+ <string name="accessibility_battery_full" msgid="8909122401720158582">"Battery full."</string>
+ <string name="accessibility_no_phone" msgid="4894708937052611281">"No phone."</string>
+ <string name="accessibility_phone_one_bar" msgid="687699278132664115">"Phone one bar."</string>
+ <string name="accessibility_phone_two_bars" msgid="8384905382804815201">"Phone two bars."</string>
+ <string name="accessibility_phone_three_bars" msgid="8521904843919971885">"Phone three bars."</string>
+ <string name="accessibility_phone_signal_full" msgid="6471834868580757898">"Phone signal full."</string>
+ <string name="accessibility_no_data" msgid="4791966295096867555">"No data."</string>
+ <string name="accessibility_data_one_bar" msgid="1415625833238273628">"Data one bar."</string>
+ <string name="accessibility_data_two_bars" msgid="6166018492360432091">"Data two bars."</string>
+ <string name="accessibility_data_three_bars" msgid="9167670452395038520">"Data three bars."</string>
+ <string name="accessibility_data_signal_full" msgid="2708384608124519369">"Data signal full."</string>
+ <string name="accessibility_no_wifi" msgid="4017628918351949575">"No Wi-Fi."</string>
+ <string name="accessibility_wifi_one_bar" msgid="1914343229091303434">"Wi-Fi one bar."</string>
+ <string name="accessibility_wifi_two_bars" msgid="7869150535859760698">"Wi-Fi two bars."</string>
+ <string name="accessibility_wifi_three_bars" msgid="2665319332961356254">"Wi-Fi three bars."</string>
+ <string name="accessibility_wifi_signal_full" msgid="1275764416228473932">"Wi-Fi signal full."</string>
+ <string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
+ <string name="accessibility_data_connection_3g" msgid="8628562305003568260">"3G"</string>
+ <string name="accessibility_data_connection_3.5g" msgid="8664845609981692001">"3.5G"</string>
+ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string>
+ <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string>
+ <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
+ <string name="accessibility_data_connection_wifi" msgid="1127208787254436420">"Wi-Fi"</string>
+ <string name="accessibility_no_sim" msgid="8274017118472455155">"No SIM."</string>
+ <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Bluetooth tethering"</string>
+ <string name="accessibility_airplane_mode" msgid="834748999790763092">"Airplane mode"</string>
+ <string name="accessibility_battery_level" msgid="7451474187113371965">"Battery <xliff:g id="NUMBER">%d</xliff:g> per cent."</string>
+ <string name="accessibility_settings_button" msgid="7913780116850379698">"Settings button."</string>
+ <string name="accessibility_notifications_button" msgid="2933903195211483438">"Notifications button."</string>
+ <string name="accessibility_remove_notification" msgid="4883990503785778699">"Remove notification."</string>
+ <string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS enabled."</string>
+ <string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPS acquiring."</string>
+ <string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTypewriter enabled."</string>
+ <string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Ringer vibrate."</string>
+ <string name="accessibility_ringer_silent" msgid="9061243307939135383">"Ringer silent."</string>
+ <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
<skip />
- <!-- no translation found for accessibility_menu (316839303324695949) -->
+ <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
<skip />
- <!-- no translation found for accessibility_ime_switch_button (5032926134740456424) -->
+ <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
<skip />
- <!-- no translation found for accessibility_compatibility_zoom_button (8461115318742350699) -->
+ <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
<skip />
- <!-- no translation found for accessibility_compatibility_zoom_example (4220687294564945780) -->
+ <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
<skip />
- <!-- no translation found for accessibility_bluetooth_connected (2707027633242983370) -->
+ <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
<skip />
- <!-- no translation found for accessibility_bluetooth_disconnected (7416648669976870175) -->
+ <!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
<skip />
- <!-- no translation found for accessibility_no_battery (358343022352820946) -->
+ <!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
<skip />
- <!-- no translation found for accessibility_battery_one_bar (7774887721891057523) -->
+ <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
<skip />
- <!-- no translation found for accessibility_battery_two_bars (8500650438735009973) -->
- <skip />
- <!-- no translation found for accessibility_battery_three_bars (2302983330865040446) -->
- <skip />
- <!-- no translation found for accessibility_battery_full (8909122401720158582) -->
- <skip />
- <!-- no translation found for accessibility_no_phone (4894708937052611281) -->
- <skip />
- <!-- no translation found for accessibility_phone_one_bar (687699278132664115) -->
- <skip />
- <!-- no translation found for accessibility_phone_two_bars (8384905382804815201) -->
- <skip />
- <!-- no translation found for accessibility_phone_three_bars (8521904843919971885) -->
- <skip />
- <!-- no translation found for accessibility_phone_signal_full (6471834868580757898) -->
- <skip />
- <!-- no translation found for accessibility_no_data (4791966295096867555) -->
- <skip />
- <!-- no translation found for accessibility_data_one_bar (1415625833238273628) -->
- <skip />
- <!-- no translation found for accessibility_data_two_bars (6166018492360432091) -->
- <skip />
- <!-- no translation found for accessibility_data_three_bars (9167670452395038520) -->
- <skip />
- <!-- no translation found for accessibility_data_signal_full (2708384608124519369) -->
- <skip />
- <!-- no translation found for accessibility_no_wifi (4017628918351949575) -->
- <skip />
- <!-- no translation found for accessibility_wifi_one_bar (1914343229091303434) -->
- <skip />
- <!-- no translation found for accessibility_wifi_two_bars (7869150535859760698) -->
- <skip />
- <!-- no translation found for accessibility_wifi_three_bars (2665319332961356254) -->
- <skip />
- <!-- no translation found for accessibility_wifi_signal_full (1275764416228473932) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_gprs (1606477224486747751) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_3g (8628562305003568260) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_3.5g (8664845609981692001) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_4g (7741000750630089612) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_cdma (6132648193978823023) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_edge (4477457051631979278) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_wifi (1127208787254436420) -->
- <skip />
- <!-- no translation found for accessibility_no_sim (8274017118472455155) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_tether (4102784498140271969) -->
- <skip />
- <!-- no translation found for accessibility_airplane_mode (834748999790763092) -->
- <skip />
- <!-- no translation found for accessibility_battery_level (7451474187113371965) -->
- <skip />
- <!-- no translation found for accessibility_settings_button (7913780116850379698) -->
- <skip />
- <!-- no translation found for accessibility_notifications_button (2933903195211483438) -->
- <skip />
- <!-- no translation found for accessibility_remove_notification (4883990503785778699) -->
- <skip />
- <!-- no translation found for accessibility_gps_enabled (3511469499240123019) -->
- <skip />
- <!-- no translation found for accessibility_gps_acquiring (8959333351058967158) -->
- <skip />
- <!-- no translation found for accessibility_tty_enabled (4613200365379426561) -->
- <skip />
- <!-- no translation found for accessibility_ringer_vibrate (666585363364155055) -->
- <skip />
- <!-- no translation found for accessibility_ringer_silent (9061243307939135383) -->
+ <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
<skip />
</resources>
diff --git a/packages/SystemUI/res/values-es-large/strings.xml b/packages/SystemUI/res/values-es-large/strings.xml
index ba5d28a..31a82e5 100644
--- a/packages/SystemUI/res/values-es-large/strings.xml
+++ b/packages/SystemUI/res/values-es-large/strings.xml
@@ -20,10 +20,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="status_bar_clear_all_button" msgid="4661583896803349732">"Borrar todo"</string>
- <string name="status_bar_settings_signal_meter_disconnected" msgid="383145178755329067">"Sin conexión a Internet"</string>
- <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="2535465294437586528">"Con conexión Wi-Fi"</string>
- <string name="gps_notification_searching_text" msgid="4467935186864208249">"Buscando GPS"</string>
- <string name="gps_notification_found_text" msgid="6270628388918822956">"Ubicación definida por GPS"</string>
<string name="notifications_off_title" msgid="1860117696034775851">"Notificaciones desactivadas"</string>
<string name="notifications_off_text" msgid="1439152806320786912">"Toca aquí para volver a activar las notificaciones."</string>
</resources>
diff --git a/packages/SystemUI/res/values-es-rUS-large/strings.xml b/packages/SystemUI/res/values-es-rUS-large/strings.xml
index 0969d1d..3f96e87 100644
--- a/packages/SystemUI/res/values-es-rUS-large/strings.xml
+++ b/packages/SystemUI/res/values-es-rUS-large/strings.xml
@@ -20,10 +20,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="status_bar_clear_all_button" msgid="4661583896803349732">"Borrar todas"</string>
- <string name="status_bar_settings_signal_meter_disconnected" msgid="383145178755329067">"Sin conexión a Internet"</string>
- <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="2535465294437586528">"Wi-Fi conectado"</string>
- <string name="gps_notification_searching_text" msgid="4467935186864208249">"Buscando GPS"</string>
- <string name="gps_notification_found_text" msgid="6270628388918822956">"La ubicación se estableció por GPS"</string>
<string name="notifications_off_title" msgid="1860117696034775851">"Notificaciones desactivadas"</string>
<string name="notifications_off_text" msgid="1439152806320786912">"Toca aquí para volver a activar las notificaciones."</string>
</resources>
diff --git a/packages/SystemUI/res/values-es-rUS/strings.xml b/packages/SystemUI/res/values-es-rUS/strings.xml
index 7ce69b6..224eec8 100644
--- a/packages/SystemUI/res/values-es-rUS/strings.xml
+++ b/packages/SystemUI/res/values-es-rUS/strings.xml
@@ -23,10 +23,8 @@
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"Borrar"</string>
<string name="status_bar_do_not_disturb_button" msgid="5812628897510997853">"No molestar"</string>
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Mostrar notificaciones"</string>
- <!-- no translation found for status_bar_recent_remove_item_title (6561944127804037619) -->
- <skip />
- <!-- no translation found for status_bar_recent_inspect_item_title (4906947311448880529) -->
- <skip />
+ <string name="status_bar_recent_remove_item_title" msgid="6561944127804037619">"Eliminar"</string>
+ <string name="status_bar_recent_inspect_item_title" msgid="4906947311448880529">"Inspeccionar"</string>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"No hay notificaciones"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Continuo"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Notificaciones"</string>
@@ -62,103 +60,79 @@
<string name="compat_mode_help_header" msgid="7020175705401506719">"Zoom de compatibilidad"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Cuando una aplicación fue diseñada para una pantalla más pequeña, aparece un control de zoom junto al reloj."</string>
<string name="screenshot_saving_toast" msgid="8592630119048713208">"Captura de pantalla guardada en la Galería"</string>
- <string name="screenshot_failed_toast" msgid="655180965533683356">"No se pudo guardar la captura de pantalla."</string>
+ <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
+ <skip />
<string name="usb_preference_title" msgid="6551050377388882787">"Opciones de transferencia de archivos por USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Activar como reproductor de medios (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Activar como cámara (PTP)"</string>
<string name="installer_cd_button_title" msgid="8485631662288445893">"Instalar la aplicación para transferir archivos de Android para Mac"</string>
- <!-- no translation found for accessibility_back (567011538994429120) -->
+ <string name="accessibility_back" msgid="567011538994429120">"Atrás"</string>
+ <string name="accessibility_home" msgid="8217216074895377641">"Página principal"</string>
+ <string name="accessibility_menu" msgid="316839303324695949">"Menú"</string>
+ <!-- no translation found for accessibility_recent (3027675523629738534) -->
<skip />
- <!-- no translation found for accessibility_home (8217216074895377641) -->
+ <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Botón Cambiar método de entrada"</string>
+ <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Botón de zoom de compatibilidad"</string>
+ <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Zoom de pantalla más pequeña a más grande"</string>
+ <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth conectado"</string>
+ <string name="accessibility_bluetooth_disconnected" msgid="7416648669976870175">"Bluetooth desconectado"</string>
+ <string name="accessibility_no_battery" msgid="358343022352820946">"No hay batería."</string>
+ <string name="accessibility_battery_one_bar" msgid="7774887721891057523">"Una barra de batería"</string>
+ <string name="accessibility_battery_two_bars" msgid="8500650438735009973">"Dos barras de batería"</string>
+ <string name="accessibility_battery_three_bars" msgid="2302983330865040446">"Tres barras de batería"</string>
+ <string name="accessibility_battery_full" msgid="8909122401720158582">"Batería completa"</string>
+ <string name="accessibility_no_phone" msgid="4894708937052611281">"No hay teléfono."</string>
+ <string name="accessibility_phone_one_bar" msgid="687699278132664115">"Una barra de teléfono"</string>
+ <string name="accessibility_phone_two_bars" msgid="8384905382804815201">"Dos barras de teléfono"</string>
+ <string name="accessibility_phone_three_bars" msgid="8521904843919971885">"Tres barras de teléfono"</string>
+ <string name="accessibility_phone_signal_full" msgid="6471834868580757898">"Señal de teléfono completa"</string>
+ <string name="accessibility_no_data" msgid="4791966295096867555">"No hay datos."</string>
+ <string name="accessibility_data_one_bar" msgid="1415625833238273628">"Una barra de datos"</string>
+ <string name="accessibility_data_two_bars" msgid="6166018492360432091">"Dos barras de datos"</string>
+ <string name="accessibility_data_three_bars" msgid="9167670452395038520">"Tres barras de datos"</string>
+ <string name="accessibility_data_signal_full" msgid="2708384608124519369">"Señal de datos completa"</string>
+ <string name="accessibility_no_wifi" msgid="4017628918351949575">"No hay WiFi."</string>
+ <string name="accessibility_wifi_one_bar" msgid="1914343229091303434">"Una barra de WiFi"</string>
+ <string name="accessibility_wifi_two_bars" msgid="7869150535859760698">"Dos barras de WiFi"</string>
+ <string name="accessibility_wifi_three_bars" msgid="2665319332961356254">"Tres barras de WiFi"</string>
+ <string name="accessibility_wifi_signal_full" msgid="1275764416228473932">"Señal de WiFi completa"</string>
+ <string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
+ <string name="accessibility_data_connection_3g" msgid="8628562305003568260">"3G"</string>
+ <string name="accessibility_data_connection_3.5g" msgid="8664845609981692001">"3.5G"</string>
+ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string>
+ <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string>
+ <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
+ <string name="accessibility_data_connection_wifi" msgid="1127208787254436420">"WiFi"</string>
+ <string name="accessibility_no_sim" msgid="8274017118472455155">"No hay tarjeta SIM."</string>
+ <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Anclaje a red Bluetooth."</string>
+ <string name="accessibility_airplane_mode" msgid="834748999790763092">"Modo avión"</string>
+ <string name="accessibility_battery_level" msgid="7451474187113371965">"Batería <xliff:g id="NUMBER">%d</xliff:g> por ciento"</string>
+ <string name="accessibility_settings_button" msgid="7913780116850379698">"Botón de configuración"</string>
+ <string name="accessibility_notifications_button" msgid="2933903195211483438">"Botón de notificaciones"</string>
+ <string name="accessibility_remove_notification" msgid="4883990503785778699">"Eliminar notificación"</string>
+ <string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS habilitado"</string>
+ <string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Adquisición de GPS"</string>
+ <string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTypewriter habilitado"</string>
+ <string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Timbre vibrar"</string>
+ <string name="accessibility_ringer_silent" msgid="9061243307939135383">"Timbre silencio"</string>
+ <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
<skip />
- <!-- no translation found for accessibility_menu (316839303324695949) -->
+ <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
<skip />
- <!-- no translation found for accessibility_ime_switch_button (5032926134740456424) -->
+ <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
<skip />
- <!-- no translation found for accessibility_compatibility_zoom_button (8461115318742350699) -->
+ <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
<skip />
- <!-- no translation found for accessibility_compatibility_zoom_example (4220687294564945780) -->
+ <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
<skip />
- <!-- no translation found for accessibility_bluetooth_connected (2707027633242983370) -->
+ <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
<skip />
- <!-- no translation found for accessibility_bluetooth_disconnected (7416648669976870175) -->
+ <!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
<skip />
- <!-- no translation found for accessibility_no_battery (358343022352820946) -->
+ <!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
<skip />
- <!-- no translation found for accessibility_battery_one_bar (7774887721891057523) -->
+ <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
<skip />
- <!-- no translation found for accessibility_battery_two_bars (8500650438735009973) -->
- <skip />
- <!-- no translation found for accessibility_battery_three_bars (2302983330865040446) -->
- <skip />
- <!-- no translation found for accessibility_battery_full (8909122401720158582) -->
- <skip />
- <!-- no translation found for accessibility_no_phone (4894708937052611281) -->
- <skip />
- <!-- no translation found for accessibility_phone_one_bar (687699278132664115) -->
- <skip />
- <!-- no translation found for accessibility_phone_two_bars (8384905382804815201) -->
- <skip />
- <!-- no translation found for accessibility_phone_three_bars (8521904843919971885) -->
- <skip />
- <!-- no translation found for accessibility_phone_signal_full (6471834868580757898) -->
- <skip />
- <!-- no translation found for accessibility_no_data (4791966295096867555) -->
- <skip />
- <!-- no translation found for accessibility_data_one_bar (1415625833238273628) -->
- <skip />
- <!-- no translation found for accessibility_data_two_bars (6166018492360432091) -->
- <skip />
- <!-- no translation found for accessibility_data_three_bars (9167670452395038520) -->
- <skip />
- <!-- no translation found for accessibility_data_signal_full (2708384608124519369) -->
- <skip />
- <!-- no translation found for accessibility_no_wifi (4017628918351949575) -->
- <skip />
- <!-- no translation found for accessibility_wifi_one_bar (1914343229091303434) -->
- <skip />
- <!-- no translation found for accessibility_wifi_two_bars (7869150535859760698) -->
- <skip />
- <!-- no translation found for accessibility_wifi_three_bars (2665319332961356254) -->
- <skip />
- <!-- no translation found for accessibility_wifi_signal_full (1275764416228473932) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_gprs (1606477224486747751) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_3g (8628562305003568260) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_3.5g (8664845609981692001) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_4g (7741000750630089612) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_cdma (6132648193978823023) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_edge (4477457051631979278) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_wifi (1127208787254436420) -->
- <skip />
- <!-- no translation found for accessibility_no_sim (8274017118472455155) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_tether (4102784498140271969) -->
- <skip />
- <!-- no translation found for accessibility_airplane_mode (834748999790763092) -->
- <skip />
- <!-- no translation found for accessibility_battery_level (7451474187113371965) -->
- <skip />
- <!-- no translation found for accessibility_settings_button (7913780116850379698) -->
- <skip />
- <!-- no translation found for accessibility_notifications_button (2933903195211483438) -->
- <skip />
- <!-- no translation found for accessibility_remove_notification (4883990503785778699) -->
- <skip />
- <!-- no translation found for accessibility_gps_enabled (3511469499240123019) -->
- <skip />
- <!-- no translation found for accessibility_gps_acquiring (8959333351058967158) -->
- <skip />
- <!-- no translation found for accessibility_tty_enabled (4613200365379426561) -->
- <skip />
- <!-- no translation found for accessibility_ringer_vibrate (666585363364155055) -->
- <skip />
- <!-- no translation found for accessibility_ringer_silent (9061243307939135383) -->
+ <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
<skip />
</resources>
diff --git a/packages/SystemUI/res/values-es/strings.xml b/packages/SystemUI/res/values-es/strings.xml
index 1ee4fed..8149989 100644
--- a/packages/SystemUI/res/values-es/strings.xml
+++ b/packages/SystemUI/res/values-es/strings.xml
@@ -62,7 +62,8 @@
<string name="compat_mode_help_header" msgid="7020175705401506719">"Zoom de compatibilidad"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Si la aplicación se ha diseñado para una pantalla más pequeña, aparecerá un control de zoom junto al reloj."</string>
<string name="screenshot_saving_toast" msgid="8592630119048713208">"Captura de pantalla guardada en la galería"</string>
- <string name="screenshot_failed_toast" msgid="655180965533683356">"No se ha podido guardar la captura de pantalla."</string>
+ <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
+ <skip />
<string name="usb_preference_title" msgid="6551050377388882787">"Opciones de transferencia de archivos por USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Activar como reproductor de medios (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Activar como cámara (PTP)"</string>
@@ -73,6 +74,8 @@
<skip />
<!-- no translation found for accessibility_menu (316839303324695949) -->
<skip />
+ <!-- no translation found for accessibility_recent (3027675523629738534) -->
+ <skip />
<!-- no translation found for accessibility_ime_switch_button (5032926134740456424) -->
<skip />
<!-- no translation found for accessibility_compatibility_zoom_button (8461115318742350699) -->
@@ -161,4 +164,24 @@
<skip />
<!-- no translation found for accessibility_ringer_silent (9061243307939135383) -->
<skip />
+ <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
+ <skip />
+ <!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
+ <skip />
+ <!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
+ <skip />
+ <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
+ <skip />
+ <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-fa-large/strings.xml b/packages/SystemUI/res/values-fa-large/strings.xml
index 25a54dc..3d01dde 100644
--- a/packages/SystemUI/res/values-fa-large/strings.xml
+++ b/packages/SystemUI/res/values-fa-large/strings.xml
@@ -20,10 +20,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="status_bar_clear_all_button" msgid="4661583896803349732">"پاک کردن همه موارد"</string>
- <string name="status_bar_settings_signal_meter_disconnected" msgid="383145178755329067">"اتصال اینترنتی وجود ندارد"</string>
- <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="2535465294437586528">"Wi-Fi متصل شد"</string>
- <string name="gps_notification_searching_text" msgid="4467935186864208249">"جستجو برای GPS"</string>
- <string name="gps_notification_found_text" msgid="6270628388918822956">"مکان تنظیم شده توسط GPS"</string>
<string name="notifications_off_title" msgid="1860117696034775851">"اعلان ها خاموش"</string>
<string name="notifications_off_text" msgid="1439152806320786912">"برای روشن کردن مجدد اعلان ها، اینجا را ضربه بزنید."</string>
</resources>
diff --git a/packages/SystemUI/res/values-fa/strings.xml b/packages/SystemUI/res/values-fa/strings.xml
index dbdcbb6..e9a3a82 100644
--- a/packages/SystemUI/res/values-fa/strings.xml
+++ b/packages/SystemUI/res/values-fa/strings.xml
@@ -62,7 +62,8 @@
<string name="compat_mode_help_header" msgid="7020175705401506719">"بزرگنمایی سازگاری"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"اگر یک برنامه برای صفحه کوچک تری طراحی شده باشد، یک کنترل بزرگنمایی توسط ساعت نشان داده می شود."</string>
<string name="screenshot_saving_toast" msgid="8592630119048713208">"تصویر از صفحه در گالری ذخیره شد"</string>
- <string name="screenshot_failed_toast" msgid="655180965533683356">"ذخیره تصویر صفحه ممکن نیست"</string>
+ <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
+ <skip />
<string name="usb_preference_title" msgid="6551050377388882787">"گزینه های انتقال فایل USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"نصب به عنوان دستگاه پخش رسانه (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"تصب به عنوان دوربین (PTP)"</string>
@@ -73,6 +74,8 @@
<skip />
<!-- no translation found for accessibility_menu (316839303324695949) -->
<skip />
+ <!-- no translation found for accessibility_recent (3027675523629738534) -->
+ <skip />
<!-- no translation found for accessibility_ime_switch_button (5032926134740456424) -->
<skip />
<!-- no translation found for accessibility_compatibility_zoom_button (8461115318742350699) -->
@@ -161,4 +164,24 @@
<skip />
<!-- no translation found for accessibility_ringer_silent (9061243307939135383) -->
<skip />
+ <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
+ <skip />
+ <!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
+ <skip />
+ <!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
+ <skip />
+ <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
+ <skip />
+ <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-fi-large/strings.xml b/packages/SystemUI/res/values-fi-large/strings.xml
index 1f87ef5..20efe2c 100644
--- a/packages/SystemUI/res/values-fi-large/strings.xml
+++ b/packages/SystemUI/res/values-fi-large/strings.xml
@@ -20,10 +20,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="status_bar_clear_all_button" msgid="4661583896803349732">"Tyhjennä kaikki"</string>
- <string name="status_bar_settings_signal_meter_disconnected" msgid="383145178755329067">"Ei internetyhteyttä"</string>
- <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="2535465294437586528">"Wifi yhdistetty"</string>
- <string name="gps_notification_searching_text" msgid="4467935186864208249">"Haetaan GPS-yhteyttä"</string>
- <string name="gps_notification_found_text" msgid="6270628388918822956">"Sijainti määritetty GPS:n avulla"</string>
<string name="notifications_off_title" msgid="1860117696034775851">"Ilmoitukset pois käytöstä"</string>
<string name="notifications_off_text" msgid="1439152806320786912">"Ota ilmoitukset uudelleen käyttöön napauttamalla tätä."</string>
</resources>
diff --git a/packages/SystemUI/res/values-fi/strings.xml b/packages/SystemUI/res/values-fi/strings.xml
index bef79a5..02c7986 100644
--- a/packages/SystemUI/res/values-fi/strings.xml
+++ b/packages/SystemUI/res/values-fi/strings.xml
@@ -23,10 +23,8 @@
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"Tyhjennä"</string>
<string name="status_bar_do_not_disturb_button" msgid="5812628897510997853">"Varattu"</string>
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Näytä ilmoitukset"</string>
- <!-- no translation found for status_bar_recent_remove_item_title (6561944127804037619) -->
- <skip />
- <!-- no translation found for status_bar_recent_inspect_item_title (4906947311448880529) -->
- <skip />
+ <string name="status_bar_recent_remove_item_title" msgid="6561944127804037619">"Poista"</string>
+ <string name="status_bar_recent_inspect_item_title" msgid="4906947311448880529">"Tarkasta"</string>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Ei ilmoituksia"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Käynnissä olevat"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Ilmoitukset"</string>
@@ -62,103 +60,79 @@
<string name="compat_mode_help_header" msgid="7020175705401506719">"Yhteensopivuustilan zoomaus"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Jos sovellus on suunniteltu pienemmälle näytölle, kellon viereen tulee näkyviin zoomaussäädin."</string>
<string name="screenshot_saving_toast" msgid="8592630119048713208">"Kuvakaappaus on tallennettu galleriaan"</string>
- <string name="screenshot_failed_toast" msgid="655180965533683356">"Kuvakaappausta ei voitu tallentaa"</string>
+ <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
+ <skip />
<string name="usb_preference_title" msgid="6551050377388882787">"USB-tiedostonsiirtoasetukset"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Käytä mediasoittimena (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Käytä kamerana (PTP)"</string>
<string name="installer_cd_button_title" msgid="8485631662288445893">"Asenna Android File Transfer -sovellus Macille"</string>
- <!-- no translation found for accessibility_back (567011538994429120) -->
+ <string name="accessibility_back" msgid="567011538994429120">"Takaisin"</string>
+ <string name="accessibility_home" msgid="8217216074895377641">"Aloitusruutu"</string>
+ <string name="accessibility_menu" msgid="316839303324695949">"Valikko"</string>
+ <!-- no translation found for accessibility_recent (3027675523629738534) -->
<skip />
- <!-- no translation found for accessibility_home (8217216074895377641) -->
+ <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Vaihda syöttötapapainiketta."</string>
+ <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Yhteensopivuus-zoomauspainike."</string>
+ <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Zoomaa pienemmältä suuremmalle ruudulle."</string>
+ <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth yhdistetty."</string>
+ <string name="accessibility_bluetooth_disconnected" msgid="7416648669976870175">"Bluetooth-yhteys katkaistu."</string>
+ <string name="accessibility_no_battery" msgid="358343022352820946">"Ei akkua."</string>
+ <string name="accessibility_battery_one_bar" msgid="7774887721891057523">"Akun virta - yksi palkki."</string>
+ <string name="accessibility_battery_two_bars" msgid="8500650438735009973">"Akun virta - kaksi palkkia."</string>
+ <string name="accessibility_battery_three_bars" msgid="2302983330865040446">"Akun virta - kolme palkkia."</string>
+ <string name="accessibility_battery_full" msgid="8909122401720158582">"Akku täynnä."</string>
+ <string name="accessibility_no_phone" msgid="4894708937052611281">"Katvealueella."</string>
+ <string name="accessibility_phone_one_bar" msgid="687699278132664115">"Puhelinverkkosignaali - yksi palkki."</string>
+ <string name="accessibility_phone_two_bars" msgid="8384905382804815201">"Puhelinverkkosignaali - kaksi palkkia."</string>
+ <string name="accessibility_phone_three_bars" msgid="8521904843919971885">"Puhelinverkkosignaali - kolme palkkia."</string>
+ <string name="accessibility_phone_signal_full" msgid="6471834868580757898">"Vahva puhelinverkkosignaali."</string>
+ <string name="accessibility_no_data" msgid="4791966295096867555">"Ei tietoja."</string>
+ <string name="accessibility_data_one_bar" msgid="1415625833238273628">"Datasignaali - yksi palkki"</string>
+ <string name="accessibility_data_two_bars" msgid="6166018492360432091">"Datasignaali - kaksi palkkia"</string>
+ <string name="accessibility_data_three_bars" msgid="9167670452395038520">"Datasignaali - kolme palkkia"</string>
+ <string name="accessibility_data_signal_full" msgid="2708384608124519369">"Vahva datasignaali."</string>
+ <string name="accessibility_no_wifi" msgid="4017628918351949575">"Ei wifi-yhteyttä."</string>
+ <string name="accessibility_wifi_one_bar" msgid="1914343229091303434">"Wifi-signaali - yksi palkki."</string>
+ <string name="accessibility_wifi_two_bars" msgid="7869150535859760698">"Wifi-signaali - kaksi palkkia."</string>
+ <string name="accessibility_wifi_three_bars" msgid="2665319332961356254">"Wifi-signaali - kolme palkkia."</string>
+ <string name="accessibility_wifi_signal_full" msgid="1275764416228473932">"Vahva wifi-signaali."</string>
+ <string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
+ <string name="accessibility_data_connection_3g" msgid="8628562305003568260">"3G"</string>
+ <string name="accessibility_data_connection_3.5g" msgid="8664845609981692001">"3,5G"</string>
+ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string>
+ <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string>
+ <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
+ <string name="accessibility_data_connection_wifi" msgid="1127208787254436420">"Wifi"</string>
+ <string name="accessibility_no_sim" msgid="8274017118472455155">"Ei SIM-korttia."</string>
+ <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Internetyhteyden jakaminen Bluetoothin kautta"</string>
+ <string name="accessibility_airplane_mode" msgid="834748999790763092">"Lentokonetila"</string>
+ <string name="accessibility_battery_level" msgid="7451474187113371965">"Akun virta <xliff:g id="NUMBER">%d</xliff:g> prosenttia."</string>
+ <string name="accessibility_settings_button" msgid="7913780116850379698">"Asetukset-painike."</string>
+ <string name="accessibility_notifications_button" msgid="2933903195211483438">"Ilmoitukset-painike."</string>
+ <string name="accessibility_remove_notification" msgid="4883990503785778699">"Poista ilmoitus."</string>
+ <string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS käytössä."</string>
+ <string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Haetaan GPS-signaalia."</string>
+ <string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTypewriter käytössä."</string>
+ <string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Soittoääni: värinä."</string>
+ <string name="accessibility_ringer_silent" msgid="9061243307939135383">"Soittoääni: äänetön."</string>
+ <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
<skip />
- <!-- no translation found for accessibility_menu (316839303324695949) -->
+ <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
<skip />
- <!-- no translation found for accessibility_ime_switch_button (5032926134740456424) -->
+ <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
<skip />
- <!-- no translation found for accessibility_compatibility_zoom_button (8461115318742350699) -->
+ <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
<skip />
- <!-- no translation found for accessibility_compatibility_zoom_example (4220687294564945780) -->
+ <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
<skip />
- <!-- no translation found for accessibility_bluetooth_connected (2707027633242983370) -->
+ <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
<skip />
- <!-- no translation found for accessibility_bluetooth_disconnected (7416648669976870175) -->
+ <!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
<skip />
- <!-- no translation found for accessibility_no_battery (358343022352820946) -->
+ <!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
<skip />
- <!-- no translation found for accessibility_battery_one_bar (7774887721891057523) -->
+ <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
<skip />
- <!-- no translation found for accessibility_battery_two_bars (8500650438735009973) -->
- <skip />
- <!-- no translation found for accessibility_battery_three_bars (2302983330865040446) -->
- <skip />
- <!-- no translation found for accessibility_battery_full (8909122401720158582) -->
- <skip />
- <!-- no translation found for accessibility_no_phone (4894708937052611281) -->
- <skip />
- <!-- no translation found for accessibility_phone_one_bar (687699278132664115) -->
- <skip />
- <!-- no translation found for accessibility_phone_two_bars (8384905382804815201) -->
- <skip />
- <!-- no translation found for accessibility_phone_three_bars (8521904843919971885) -->
- <skip />
- <!-- no translation found for accessibility_phone_signal_full (6471834868580757898) -->
- <skip />
- <!-- no translation found for accessibility_no_data (4791966295096867555) -->
- <skip />
- <!-- no translation found for accessibility_data_one_bar (1415625833238273628) -->
- <skip />
- <!-- no translation found for accessibility_data_two_bars (6166018492360432091) -->
- <skip />
- <!-- no translation found for accessibility_data_three_bars (9167670452395038520) -->
- <skip />
- <!-- no translation found for accessibility_data_signal_full (2708384608124519369) -->
- <skip />
- <!-- no translation found for accessibility_no_wifi (4017628918351949575) -->
- <skip />
- <!-- no translation found for accessibility_wifi_one_bar (1914343229091303434) -->
- <skip />
- <!-- no translation found for accessibility_wifi_two_bars (7869150535859760698) -->
- <skip />
- <!-- no translation found for accessibility_wifi_three_bars (2665319332961356254) -->
- <skip />
- <!-- no translation found for accessibility_wifi_signal_full (1275764416228473932) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_gprs (1606477224486747751) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_3g (8628562305003568260) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_3.5g (8664845609981692001) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_4g (7741000750630089612) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_cdma (6132648193978823023) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_edge (4477457051631979278) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_wifi (1127208787254436420) -->
- <skip />
- <!-- no translation found for accessibility_no_sim (8274017118472455155) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_tether (4102784498140271969) -->
- <skip />
- <!-- no translation found for accessibility_airplane_mode (834748999790763092) -->
- <skip />
- <!-- no translation found for accessibility_battery_level (7451474187113371965) -->
- <skip />
- <!-- no translation found for accessibility_settings_button (7913780116850379698) -->
- <skip />
- <!-- no translation found for accessibility_notifications_button (2933903195211483438) -->
- <skip />
- <!-- no translation found for accessibility_remove_notification (4883990503785778699) -->
- <skip />
- <!-- no translation found for accessibility_gps_enabled (3511469499240123019) -->
- <skip />
- <!-- no translation found for accessibility_gps_acquiring (8959333351058967158) -->
- <skip />
- <!-- no translation found for accessibility_tty_enabled (4613200365379426561) -->
- <skip />
- <!-- no translation found for accessibility_ringer_vibrate (666585363364155055) -->
- <skip />
- <!-- no translation found for accessibility_ringer_silent (9061243307939135383) -->
+ <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
<skip />
</resources>
diff --git a/packages/SystemUI/res/values-fr-large/strings.xml b/packages/SystemUI/res/values-fr-large/strings.xml
index f8dd55e..ee130df 100644
--- a/packages/SystemUI/res/values-fr-large/strings.xml
+++ b/packages/SystemUI/res/values-fr-large/strings.xml
@@ -20,10 +20,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="status_bar_clear_all_button" msgid="4661583896803349732">"Tout effacer"</string>
- <string name="status_bar_settings_signal_meter_disconnected" msgid="383145178755329067">"Aucune connexion"</string>
- <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="2535465294437586528">"Connecté au Wi-Fi"</string>
- <string name="gps_notification_searching_text" msgid="4467935186864208249">"Recherche de GPS en cours"</string>
- <string name="gps_notification_found_text" msgid="6270628388918822956">"Position définie par GPS"</string>
<string name="notifications_off_title" msgid="1860117696034775851">"Notifications désactivées"</string>
<string name="notifications_off_text" msgid="1439152806320786912">"Appuyez ici pour réactiver les notifications."</string>
</resources>
diff --git a/packages/SystemUI/res/values-fr/strings.xml b/packages/SystemUI/res/values-fr/strings.xml
index 9815664..3669340 100644
--- a/packages/SystemUI/res/values-fr/strings.xml
+++ b/packages/SystemUI/res/values-fr/strings.xml
@@ -62,7 +62,8 @@
<string name="compat_mode_help_header" msgid="7020175705401506719">"Zoom de compatibilité"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Si une application a été conçue pour un écran plus petit, une commande de zoom s\'affiche à côté de l\'horloge."</string>
<string name="screenshot_saving_toast" msgid="8592630119048713208">"Capture d\'écran enregistrée dans la galerie."</string>
- <string name="screenshot_failed_toast" msgid="655180965533683356">"Impossible d\'enregistrer la capture d\'écran."</string>
+ <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
+ <skip />
<string name="usb_preference_title" msgid="6551050377388882787">"Options transfert fichiers USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Installer en tant que lecteur multimédia (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Installer en tant qu\'appareil photo (PTP)"</string>
@@ -73,6 +74,8 @@
<skip />
<!-- no translation found for accessibility_menu (316839303324695949) -->
<skip />
+ <!-- no translation found for accessibility_recent (3027675523629738534) -->
+ <skip />
<!-- no translation found for accessibility_ime_switch_button (5032926134740456424) -->
<skip />
<!-- no translation found for accessibility_compatibility_zoom_button (8461115318742350699) -->
@@ -161,4 +164,24 @@
<skip />
<!-- no translation found for accessibility_ringer_silent (9061243307939135383) -->
<skip />
+ <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
+ <skip />
+ <!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
+ <skip />
+ <!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
+ <skip />
+ <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
+ <skip />
+ <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-hr-large/strings.xml b/packages/SystemUI/res/values-hr-large/strings.xml
index f3a59b2..5033dab 100644
--- a/packages/SystemUI/res/values-hr-large/strings.xml
+++ b/packages/SystemUI/res/values-hr-large/strings.xml
@@ -20,10 +20,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="status_bar_clear_all_button" msgid="4661583896803349732">"Obriši sve"</string>
- <string name="status_bar_settings_signal_meter_disconnected" msgid="383145178755329067">"Nema internetske veze"</string>
- <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="2535465294437586528">"Wi-Fi povezan"</string>
- <string name="gps_notification_searching_text" msgid="4467935186864208249">"Traženje GPS-a"</string>
- <string name="gps_notification_found_text" msgid="6270628388918822956">"Lokaciju utvrdio GPS"</string>
<string name="notifications_off_title" msgid="1860117696034775851">"Obavijesti isključene"</string>
<string name="notifications_off_text" msgid="1439152806320786912">"Dotaknite ovdje da biste ponovo uključili obavijesti."</string>
</resources>
diff --git a/packages/SystemUI/res/values-hr/strings.xml b/packages/SystemUI/res/values-hr/strings.xml
index 45d2edc..b5b033c 100644
--- a/packages/SystemUI/res/values-hr/strings.xml
+++ b/packages/SystemUI/res/values-hr/strings.xml
@@ -62,7 +62,8 @@
<string name="compat_mode_help_header" msgid="7020175705401506719">"Kompatibilni zum"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Kada je aplikacija dizajnirana za manji zaslon, kontrole zumiranja prikazuju se pored sata."</string>
<string name="screenshot_saving_toast" msgid="8592630119048713208">"Snimak zaslona spremljen u Galeriju"</string>
- <string name="screenshot_failed_toast" msgid="655180965533683356">"Ne mogu spremiti snimak zaslona"</string>
+ <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
+ <skip />
<string name="usb_preference_title" msgid="6551050377388882787">"Opcije USB prijenosa datoteka"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Učitaj kao media player (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Učitaj kao fotoaparat (PTP)"</string>
@@ -73,6 +74,8 @@
<skip />
<!-- no translation found for accessibility_menu (316839303324695949) -->
<skip />
+ <!-- no translation found for accessibility_recent (3027675523629738534) -->
+ <skip />
<!-- no translation found for accessibility_ime_switch_button (5032926134740456424) -->
<skip />
<!-- no translation found for accessibility_compatibility_zoom_button (8461115318742350699) -->
@@ -161,4 +164,24 @@
<skip />
<!-- no translation found for accessibility_ringer_silent (9061243307939135383) -->
<skip />
+ <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
+ <skip />
+ <!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
+ <skip />
+ <!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
+ <skip />
+ <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
+ <skip />
+ <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-hu-large/strings.xml b/packages/SystemUI/res/values-hu-large/strings.xml
index 1d2fd66..d9493cf 100644
--- a/packages/SystemUI/res/values-hu-large/strings.xml
+++ b/packages/SystemUI/res/values-hu-large/strings.xml
@@ -20,10 +20,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="status_bar_clear_all_button" msgid="4661583896803349732">"Össz.törl."</string>
- <string name="status_bar_settings_signal_meter_disconnected" msgid="383145178755329067">"Nincs internetkapcs."</string>
- <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="2535465294437586528">"Wi-Fi csatlakozva"</string>
- <string name="gps_notification_searching_text" msgid="4467935186864208249">"GPS keresése"</string>
- <string name="gps_notification_found_text" msgid="6270628388918822956">"A GPS beállította a helyet"</string>
<string name="notifications_off_title" msgid="1860117696034775851">"Értesítések kikapcsolva"</string>
<string name="notifications_off_text" msgid="1439152806320786912">"Itt érintse meg az értesítések bekapcsolásához."</string>
</resources>
diff --git a/packages/SystemUI/res/values-hu/strings.xml b/packages/SystemUI/res/values-hu/strings.xml
index 468b875..cae8707 100644
--- a/packages/SystemUI/res/values-hu/strings.xml
+++ b/packages/SystemUI/res/values-hu/strings.xml
@@ -23,10 +23,8 @@
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"Törlés"</string>
<string name="status_bar_do_not_disturb_button" msgid="5812628897510997853">"Ne zavarjanak"</string>
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Értesítések megjelenítése"</string>
- <!-- no translation found for status_bar_recent_remove_item_title (6561944127804037619) -->
- <skip />
- <!-- no translation found for status_bar_recent_inspect_item_title (4906947311448880529) -->
- <skip />
+ <string name="status_bar_recent_remove_item_title" msgid="6561944127804037619">"Eltávolítás"</string>
+ <string name="status_bar_recent_inspect_item_title" msgid="4906947311448880529">"Vizsgálat"</string>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Nincs értesítés"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Folyamatban van"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Értesítések"</string>
@@ -62,103 +60,79 @@
<string name="compat_mode_help_header" msgid="7020175705401506719">"Kompatibilitás -- nagyítás/kicsinyítés"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Ha egy alkalmazást kisebb képernyőre terveztek, akkor a nagyítás/kicsinyítés vezérlője az óra mellett jelenik meg."</string>
<string name="screenshot_saving_toast" msgid="8592630119048713208">"Képernyőkép mentve a galériába"</string>
- <string name="screenshot_failed_toast" msgid="655180965533683356">"Nem sikerült menteni a képernyőképet"</string>
+ <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
+ <skip />
<string name="usb_preference_title" msgid="6551050377388882787">"USB-fájlátvitel beállításai"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Csatlakoztatás médialejátszóként (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Csatlakoztatás kameraként (PTP)"</string>
<string name="installer_cd_button_title" msgid="8485631662288445893">"Android fájlátviteli alkalmazás telepítése Machez"</string>
- <!-- no translation found for accessibility_back (567011538994429120) -->
+ <string name="accessibility_back" msgid="567011538994429120">"Vissza"</string>
+ <string name="accessibility_home" msgid="8217216074895377641">"Főoldal"</string>
+ <string name="accessibility_menu" msgid="316839303324695949">"Menü"</string>
+ <!-- no translation found for accessibility_recent (3027675523629738534) -->
<skip />
- <!-- no translation found for accessibility_home (8217216074895377641) -->
+ <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Beviteli mód váltása gomb."</string>
+ <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Kompatibilitási zoom gomb."</string>
+ <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Kicsinyítsen a nagyobb képernyőhöz."</string>
+ <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth csatlakoztatva."</string>
+ <string name="accessibility_bluetooth_disconnected" msgid="7416648669976870175">"Bluetooth leválasztva."</string>
+ <string name="accessibility_no_battery" msgid="358343022352820946">"Nincs akkumulátor."</string>
+ <string name="accessibility_battery_one_bar" msgid="7774887721891057523">"Akkumulátor egy sáv."</string>
+ <string name="accessibility_battery_two_bars" msgid="8500650438735009973">"Akkumulátor két sáv."</string>
+ <string name="accessibility_battery_three_bars" msgid="2302983330865040446">"Akkumulátor három sáv."</string>
+ <string name="accessibility_battery_full" msgid="8909122401720158582">"Akkumulátor feltöltve."</string>
+ <string name="accessibility_no_phone" msgid="4894708937052611281">"Nincs telefon."</string>
+ <string name="accessibility_phone_one_bar" msgid="687699278132664115">"Telefon egy sáv."</string>
+ <string name="accessibility_phone_two_bars" msgid="8384905382804815201">"Telefon két sáv."</string>
+ <string name="accessibility_phone_three_bars" msgid="8521904843919971885">"Telefon három sáv."</string>
+ <string name="accessibility_phone_signal_full" msgid="6471834868580757898">"Telefonjel megtelt."</string>
+ <string name="accessibility_no_data" msgid="4791966295096867555">"Nincsenek adatok."</string>
+ <string name="accessibility_data_one_bar" msgid="1415625833238273628">"Adat egy sáv."</string>
+ <string name="accessibility_data_two_bars" msgid="6166018492360432091">"Adatok két sáv."</string>
+ <string name="accessibility_data_three_bars" msgid="9167670452395038520">"Adatok három sáv."</string>
+ <string name="accessibility_data_signal_full" msgid="2708384608124519369">"Adatjel megtelt."</string>
+ <string name="accessibility_no_wifi" msgid="4017628918351949575">"Nincs Wi-Fi."</string>
+ <string name="accessibility_wifi_one_bar" msgid="1914343229091303434">"Wi-Fi egy sáv."</string>
+ <string name="accessibility_wifi_two_bars" msgid="7869150535859760698">"Wi-Fi két sáv."</string>
+ <string name="accessibility_wifi_three_bars" msgid="2665319332961356254">"Wi-Fi három sáv."</string>
+ <string name="accessibility_wifi_signal_full" msgid="1275764416228473932">"Wi-Fi jel megtelt."</string>
+ <string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
+ <string name="accessibility_data_connection_3g" msgid="8628562305003568260">"3G"</string>
+ <string name="accessibility_data_connection_3.5g" msgid="8664845609981692001">"3.5G"</string>
+ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string>
+ <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string>
+ <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
+ <string name="accessibility_data_connection_wifi" msgid="1127208787254436420">"Wi-Fi"</string>
+ <string name="accessibility_no_sim" msgid="8274017118472455155">"Nincs SIM."</string>
+ <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Bluetooth megosztása."</string>
+ <string name="accessibility_airplane_mode" msgid="834748999790763092">"Repülőgép üzemmód."</string>
+ <string name="accessibility_battery_level" msgid="7451474187113371965">"Akkumulátor <xliff:g id="NUMBER">%d</xliff:g> százalék."</string>
+ <string name="accessibility_settings_button" msgid="7913780116850379698">"Beállítások gomb."</string>
+ <string name="accessibility_notifications_button" msgid="2933903195211483438">"Értesítések gomb."</string>
+ <string name="accessibility_remove_notification" msgid="4883990503785778699">"Értesítés eltávolítása."</string>
+ <string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS engedélyezve."</string>
+ <string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPS lekérése."</string>
+ <string name="accessibility_tty_enabled" msgid="4613200365379426561">"Távgépíró engedélyezve."</string>
+ <string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Csengő rezeg."</string>
+ <string name="accessibility_ringer_silent" msgid="9061243307939135383">"Csengő néma."</string>
+ <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
<skip />
- <!-- no translation found for accessibility_menu (316839303324695949) -->
+ <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
<skip />
- <!-- no translation found for accessibility_ime_switch_button (5032926134740456424) -->
+ <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
<skip />
- <!-- no translation found for accessibility_compatibility_zoom_button (8461115318742350699) -->
+ <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
<skip />
- <!-- no translation found for accessibility_compatibility_zoom_example (4220687294564945780) -->
+ <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
<skip />
- <!-- no translation found for accessibility_bluetooth_connected (2707027633242983370) -->
+ <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
<skip />
- <!-- no translation found for accessibility_bluetooth_disconnected (7416648669976870175) -->
+ <!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
<skip />
- <!-- no translation found for accessibility_no_battery (358343022352820946) -->
+ <!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
<skip />
- <!-- no translation found for accessibility_battery_one_bar (7774887721891057523) -->
+ <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
<skip />
- <!-- no translation found for accessibility_battery_two_bars (8500650438735009973) -->
- <skip />
- <!-- no translation found for accessibility_battery_three_bars (2302983330865040446) -->
- <skip />
- <!-- no translation found for accessibility_battery_full (8909122401720158582) -->
- <skip />
- <!-- no translation found for accessibility_no_phone (4894708937052611281) -->
- <skip />
- <!-- no translation found for accessibility_phone_one_bar (687699278132664115) -->
- <skip />
- <!-- no translation found for accessibility_phone_two_bars (8384905382804815201) -->
- <skip />
- <!-- no translation found for accessibility_phone_three_bars (8521904843919971885) -->
- <skip />
- <!-- no translation found for accessibility_phone_signal_full (6471834868580757898) -->
- <skip />
- <!-- no translation found for accessibility_no_data (4791966295096867555) -->
- <skip />
- <!-- no translation found for accessibility_data_one_bar (1415625833238273628) -->
- <skip />
- <!-- no translation found for accessibility_data_two_bars (6166018492360432091) -->
- <skip />
- <!-- no translation found for accessibility_data_three_bars (9167670452395038520) -->
- <skip />
- <!-- no translation found for accessibility_data_signal_full (2708384608124519369) -->
- <skip />
- <!-- no translation found for accessibility_no_wifi (4017628918351949575) -->
- <skip />
- <!-- no translation found for accessibility_wifi_one_bar (1914343229091303434) -->
- <skip />
- <!-- no translation found for accessibility_wifi_two_bars (7869150535859760698) -->
- <skip />
- <!-- no translation found for accessibility_wifi_three_bars (2665319332961356254) -->
- <skip />
- <!-- no translation found for accessibility_wifi_signal_full (1275764416228473932) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_gprs (1606477224486747751) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_3g (8628562305003568260) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_3.5g (8664845609981692001) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_4g (7741000750630089612) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_cdma (6132648193978823023) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_edge (4477457051631979278) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_wifi (1127208787254436420) -->
- <skip />
- <!-- no translation found for accessibility_no_sim (8274017118472455155) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_tether (4102784498140271969) -->
- <skip />
- <!-- no translation found for accessibility_airplane_mode (834748999790763092) -->
- <skip />
- <!-- no translation found for accessibility_battery_level (7451474187113371965) -->
- <skip />
- <!-- no translation found for accessibility_settings_button (7913780116850379698) -->
- <skip />
- <!-- no translation found for accessibility_notifications_button (2933903195211483438) -->
- <skip />
- <!-- no translation found for accessibility_remove_notification (4883990503785778699) -->
- <skip />
- <!-- no translation found for accessibility_gps_enabled (3511469499240123019) -->
- <skip />
- <!-- no translation found for accessibility_gps_acquiring (8959333351058967158) -->
- <skip />
- <!-- no translation found for accessibility_tty_enabled (4613200365379426561) -->
- <skip />
- <!-- no translation found for accessibility_ringer_vibrate (666585363364155055) -->
- <skip />
- <!-- no translation found for accessibility_ringer_silent (9061243307939135383) -->
+ <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
<skip />
</resources>
diff --git a/packages/SystemUI/res/values-in-large/strings.xml b/packages/SystemUI/res/values-in-large/strings.xml
index ac58c58..e09a646 100644
--- a/packages/SystemUI/res/values-in-large/strings.xml
+++ b/packages/SystemUI/res/values-in-large/strings.xml
@@ -20,10 +20,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="status_bar_clear_all_button" msgid="4661583896803349732">"Hapus semua"</string>
- <string name="status_bar_settings_signal_meter_disconnected" msgid="383145178755329067">"Tidak ada sambungan internet"</string>
- <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="2535465294437586528">"Wi-Fi tersambung"</string>
- <string name="gps_notification_searching_text" msgid="4467935186864208249">"Menelusuri GPS"</string>
- <string name="gps_notification_found_text" msgid="6270628388918822956">"Lokasi yang disetel oleh GPS"</string>
<string name="notifications_off_title" msgid="1860117696034775851">"Pemberitahuan mati"</string>
<string name="notifications_off_text" msgid="1439152806320786912">"Ketuk di sini untuk menghidupkan pemberitahuan lagi."</string>
</resources>
diff --git a/packages/SystemUI/res/values-in/strings.xml b/packages/SystemUI/res/values-in/strings.xml
index 9da6e73..957c7e9 100644
--- a/packages/SystemUI/res/values-in/strings.xml
+++ b/packages/SystemUI/res/values-in/strings.xml
@@ -23,10 +23,8 @@
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"Bersihkan"</string>
<string name="status_bar_do_not_disturb_button" msgid="5812628897510997853">"Jangan ganggu"</string>
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Tampilkan pemberitahuan"</string>
- <!-- no translation found for status_bar_recent_remove_item_title (6561944127804037619) -->
- <skip />
- <!-- no translation found for status_bar_recent_inspect_item_title (4906947311448880529) -->
- <skip />
+ <string name="status_bar_recent_remove_item_title" msgid="6561944127804037619">"Hapus"</string>
+ <string name="status_bar_recent_inspect_item_title" msgid="4906947311448880529">"Memeriksa"</string>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Tidak ada pemberitahuan"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Berkelanjutan"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Pemberitahuan"</string>
@@ -62,103 +60,79 @@
<string name="compat_mode_help_header" msgid="7020175705401506719">"Zoom Kompatibilitas"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Saat apl dirancang untuk layar yang lebih kecil, kontrol zoom akan tampil di dekat jam."</string>
<string name="screenshot_saving_toast" msgid="8592630119048713208">"Tangkapan layar disimpan ke Galeri"</string>
- <string name="screenshot_failed_toast" msgid="655180965533683356">"Tidak dapat menyimpan tangkapan layar"</string>
+ <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
+ <skip />
<string name="usb_preference_title" msgid="6551050377388882787">"Opsi transfer berkas USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Pasang sebagai pemutar media (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Pasang sebagai kamera (PTP)"</string>
<string name="installer_cd_button_title" msgid="8485631662288445893">"Pasang aplikasi Transfer Berkas Android untuk Mac"</string>
- <!-- no translation found for accessibility_back (567011538994429120) -->
+ <string name="accessibility_back" msgid="567011538994429120">"Kembali"</string>
+ <string name="accessibility_home" msgid="8217216074895377641">"Beranda"</string>
+ <string name="accessibility_menu" msgid="316839303324695949">"Menu"</string>
+ <!-- no translation found for accessibility_recent (3027675523629738534) -->
<skip />
- <!-- no translation found for accessibility_home (8217216074895377641) -->
+ <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Tombol beralih metode masukan."</string>
+ <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Tombol perbesar/perkecil kompatibilitas."</string>
+ <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Perkecil untuk layar yang lebih besar."</string>
+ <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth tersambung."</string>
+ <string name="accessibility_bluetooth_disconnected" msgid="7416648669976870175">"Bluetooth terputus."</string>
+ <string name="accessibility_no_battery" msgid="358343022352820946">"Tidak ada baterai."</string>
+ <string name="accessibility_battery_one_bar" msgid="7774887721891057523">"Baterai satu batang."</string>
+ <string name="accessibility_battery_two_bars" msgid="8500650438735009973">"Baterai dua batang."</string>
+ <string name="accessibility_battery_three_bars" msgid="2302983330865040446">"Baterai tiga batang."</string>
+ <string name="accessibility_battery_full" msgid="8909122401720158582">"Baterai penuh."</string>
+ <string name="accessibility_no_phone" msgid="4894708937052611281">"Tidak dapat melakukan panggilan."</string>
+ <string name="accessibility_phone_one_bar" msgid="687699278132664115">"Ponsel satu batang."</string>
+ <string name="accessibility_phone_two_bars" msgid="8384905382804815201">"Ponsel dua batang."</string>
+ <string name="accessibility_phone_three_bars" msgid="8521904843919971885">"Ponsel tiga batang."</string>
+ <string name="accessibility_phone_signal_full" msgid="6471834868580757898">"Sinyal ponsel penuh."</string>
+ <string name="accessibility_no_data" msgid="4791966295096867555">"Tidak ada data yang diterima."</string>
+ <string name="accessibility_data_one_bar" msgid="1415625833238273628">"Data satu batang."</string>
+ <string name="accessibility_data_two_bars" msgid="6166018492360432091">"Data dua batang."</string>
+ <string name="accessibility_data_three_bars" msgid="9167670452395038520">"Data tiga batang."</string>
+ <string name="accessibility_data_signal_full" msgid="2708384608124519369">"Sinyal data penuh."</string>
+ <string name="accessibility_no_wifi" msgid="4017628918351949575">"Tidak ada WiFi."</string>
+ <string name="accessibility_wifi_one_bar" msgid="1914343229091303434">"Wifi satu batang."</string>
+ <string name="accessibility_wifi_two_bars" msgid="7869150535859760698">"WiFi dua batang."</string>
+ <string name="accessibility_wifi_three_bars" msgid="2665319332961356254">"WiFi tiga batang."</string>
+ <string name="accessibility_wifi_signal_full" msgid="1275764416228473932">"Sinyal WiFi penuh."</string>
+ <string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
+ <string name="accessibility_data_connection_3g" msgid="8628562305003568260">"3G"</string>
+ <string name="accessibility_data_connection_3.5g" msgid="8664845609981692001">"3.5G"</string>
+ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string>
+ <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string>
+ <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
+ <string name="accessibility_data_connection_wifi" msgid="1127208787254436420">"WiFi"</string>
+ <string name="accessibility_no_sim" msgid="8274017118472455155">"Tidak ada SIM."</string>
+ <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Penambatan bluetooth."</string>
+ <string name="accessibility_airplane_mode" msgid="834748999790763092">"Mode pesawat."</string>
+ <string name="accessibility_battery_level" msgid="7451474187113371965">"Baterai <xliff:g id="NUMBER">%d</xliff:g> persen."</string>
+ <string name="accessibility_settings_button" msgid="7913780116850379698">"Tombol setelan."</string>
+ <string name="accessibility_notifications_button" msgid="2933903195211483438">"Tombol pemberitahuan."</string>
+ <string name="accessibility_remove_notification" msgid="4883990503785778699">"Hapus pemberitahuan."</string>
+ <string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS diaktifkan."</string>
+ <string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Memperoleh GPS."</string>
+ <string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTypewriter diaktifkan."</string>
+ <string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Pendering bergetar."</string>
+ <string name="accessibility_ringer_silent" msgid="9061243307939135383">"Pendering senyap."</string>
+ <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
<skip />
- <!-- no translation found for accessibility_menu (316839303324695949) -->
+ <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
<skip />
- <!-- no translation found for accessibility_ime_switch_button (5032926134740456424) -->
+ <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
<skip />
- <!-- no translation found for accessibility_compatibility_zoom_button (8461115318742350699) -->
+ <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
<skip />
- <!-- no translation found for accessibility_compatibility_zoom_example (4220687294564945780) -->
+ <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
<skip />
- <!-- no translation found for accessibility_bluetooth_connected (2707027633242983370) -->
+ <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
<skip />
- <!-- no translation found for accessibility_bluetooth_disconnected (7416648669976870175) -->
+ <!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
<skip />
- <!-- no translation found for accessibility_no_battery (358343022352820946) -->
+ <!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
<skip />
- <!-- no translation found for accessibility_battery_one_bar (7774887721891057523) -->
+ <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
<skip />
- <!-- no translation found for accessibility_battery_two_bars (8500650438735009973) -->
- <skip />
- <!-- no translation found for accessibility_battery_three_bars (2302983330865040446) -->
- <skip />
- <!-- no translation found for accessibility_battery_full (8909122401720158582) -->
- <skip />
- <!-- no translation found for accessibility_no_phone (4894708937052611281) -->
- <skip />
- <!-- no translation found for accessibility_phone_one_bar (687699278132664115) -->
- <skip />
- <!-- no translation found for accessibility_phone_two_bars (8384905382804815201) -->
- <skip />
- <!-- no translation found for accessibility_phone_three_bars (8521904843919971885) -->
- <skip />
- <!-- no translation found for accessibility_phone_signal_full (6471834868580757898) -->
- <skip />
- <!-- no translation found for accessibility_no_data (4791966295096867555) -->
- <skip />
- <!-- no translation found for accessibility_data_one_bar (1415625833238273628) -->
- <skip />
- <!-- no translation found for accessibility_data_two_bars (6166018492360432091) -->
- <skip />
- <!-- no translation found for accessibility_data_three_bars (9167670452395038520) -->
- <skip />
- <!-- no translation found for accessibility_data_signal_full (2708384608124519369) -->
- <skip />
- <!-- no translation found for accessibility_no_wifi (4017628918351949575) -->
- <skip />
- <!-- no translation found for accessibility_wifi_one_bar (1914343229091303434) -->
- <skip />
- <!-- no translation found for accessibility_wifi_two_bars (7869150535859760698) -->
- <skip />
- <!-- no translation found for accessibility_wifi_three_bars (2665319332961356254) -->
- <skip />
- <!-- no translation found for accessibility_wifi_signal_full (1275764416228473932) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_gprs (1606477224486747751) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_3g (8628562305003568260) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_3.5g (8664845609981692001) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_4g (7741000750630089612) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_cdma (6132648193978823023) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_edge (4477457051631979278) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_wifi (1127208787254436420) -->
- <skip />
- <!-- no translation found for accessibility_no_sim (8274017118472455155) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_tether (4102784498140271969) -->
- <skip />
- <!-- no translation found for accessibility_airplane_mode (834748999790763092) -->
- <skip />
- <!-- no translation found for accessibility_battery_level (7451474187113371965) -->
- <skip />
- <!-- no translation found for accessibility_settings_button (7913780116850379698) -->
- <skip />
- <!-- no translation found for accessibility_notifications_button (2933903195211483438) -->
- <skip />
- <!-- no translation found for accessibility_remove_notification (4883990503785778699) -->
- <skip />
- <!-- no translation found for accessibility_gps_enabled (3511469499240123019) -->
- <skip />
- <!-- no translation found for accessibility_gps_acquiring (8959333351058967158) -->
- <skip />
- <!-- no translation found for accessibility_tty_enabled (4613200365379426561) -->
- <skip />
- <!-- no translation found for accessibility_ringer_vibrate (666585363364155055) -->
- <skip />
- <!-- no translation found for accessibility_ringer_silent (9061243307939135383) -->
+ <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
<skip />
</resources>
diff --git a/packages/SystemUI/res/values-it-large/strings.xml b/packages/SystemUI/res/values-it-large/strings.xml
index 18ccd07..7a2a9bc 100644
--- a/packages/SystemUI/res/values-it-large/strings.xml
+++ b/packages/SystemUI/res/values-it-large/strings.xml
@@ -20,10 +20,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="status_bar_clear_all_button" msgid="4661583896803349732">"Cancella"</string>
- <string name="status_bar_settings_signal_meter_disconnected" msgid="383145178755329067">"Nessuna connessione"</string>
- <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="2535465294437586528">"Wi-Fi connesso"</string>
- <string name="gps_notification_searching_text" msgid="4467935186864208249">"Ricerca del GPS"</string>
- <string name="gps_notification_found_text" msgid="6270628388918822956">"Posizione stabilita dal GPS"</string>
<string name="notifications_off_title" msgid="1860117696034775851">"Notifiche disattivate"</string>
<string name="notifications_off_text" msgid="1439152806320786912">"Tocca qui per riattivare le notifiche."</string>
</resources>
diff --git a/packages/SystemUI/res/values-it/strings.xml b/packages/SystemUI/res/values-it/strings.xml
index 476f190..1a5404e 100644
--- a/packages/SystemUI/res/values-it/strings.xml
+++ b/packages/SystemUI/res/values-it/strings.xml
@@ -23,10 +23,8 @@
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"Cancella"</string>
<string name="status_bar_do_not_disturb_button" msgid="5812628897510997853">"Non disturbare"</string>
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Mostra notifiche"</string>
- <!-- no translation found for status_bar_recent_remove_item_title (6561944127804037619) -->
- <skip />
- <!-- no translation found for status_bar_recent_inspect_item_title (4906947311448880529) -->
- <skip />
+ <string name="status_bar_recent_remove_item_title" msgid="6561944127804037619">"Rimuovi"</string>
+ <string name="status_bar_recent_inspect_item_title" msgid="4906947311448880529">"Esamina"</string>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Nessuna notifica"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"In corso"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Notifiche"</string>
@@ -62,103 +60,79 @@
<string name="compat_mode_help_header" msgid="7020175705401506719">"Zoom compatibilità"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Se un\'applicazione è stata progettata per uno schermo più piccolo, accanto all\'orologio viene visualizzato un controllo dello zoom."</string>
<string name="screenshot_saving_toast" msgid="8592630119048713208">"Screenshot salvato nella galleria"</string>
- <string name="screenshot_failed_toast" msgid="655180965533683356">"Impossibile salvare lo screenshot"</string>
+ <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
+ <skip />
<string name="usb_preference_title" msgid="6551050377388882787">"Opzioni trasferimento file USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Monta come lettore multimediale (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Monta come videocamera (PTP)"</string>
<string name="installer_cd_button_title" msgid="8485631662288445893">"Installa l\'applicazione Android File Transfer per Mac"</string>
- <!-- no translation found for accessibility_back (567011538994429120) -->
+ <string name="accessibility_back" msgid="567011538994429120">"Indietro"</string>
+ <string name="accessibility_home" msgid="8217216074895377641">"Home"</string>
+ <string name="accessibility_menu" msgid="316839303324695949">"Menu"</string>
+ <!-- no translation found for accessibility_recent (3027675523629738534) -->
<skip />
- <!-- no translation found for accessibility_home (8217216074895377641) -->
+ <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Pulsante per cambiare metodo di immissione."</string>
+ <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Pulsante zoom compatibilità."</string>
+ <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Zoom inferiore per schermo più grande."</string>
+ <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth collegato."</string>
+ <string name="accessibility_bluetooth_disconnected" msgid="7416648669976870175">"Bluetooth scollegato."</string>
+ <string name="accessibility_no_battery" msgid="358343022352820946">"Nessuna batteria."</string>
+ <string name="accessibility_battery_one_bar" msgid="7774887721891057523">"Batteria: una barra."</string>
+ <string name="accessibility_battery_two_bars" msgid="8500650438735009973">"Batteria: due barre."</string>
+ <string name="accessibility_battery_three_bars" msgid="2302983330865040446">"Batteria: tre barre."</string>
+ <string name="accessibility_battery_full" msgid="8909122401720158582">"Batteria carica."</string>
+ <string name="accessibility_no_phone" msgid="4894708937052611281">"Nessun telefono."</string>
+ <string name="accessibility_phone_one_bar" msgid="687699278132664115">"Telefono: una barra."</string>
+ <string name="accessibility_phone_two_bars" msgid="8384905382804815201">"Telefono: due barre."</string>
+ <string name="accessibility_phone_three_bars" msgid="8521904843919971885">"Telefono: tre barre."</string>
+ <string name="accessibility_phone_signal_full" msgid="6471834868580757898">"Massimo segnale telefonico."</string>
+ <string name="accessibility_no_data" msgid="4791966295096867555">"Nessun dato presente."</string>
+ <string name="accessibility_data_one_bar" msgid="1415625833238273628">"Dati: una barra."</string>
+ <string name="accessibility_data_two_bars" msgid="6166018492360432091">"Dati: due barre."</string>
+ <string name="accessibility_data_three_bars" msgid="9167670452395038520">"Dati: tre barre."</string>
+ <string name="accessibility_data_signal_full" msgid="2708384608124519369">"Massimo segnale dati."</string>
+ <string name="accessibility_no_wifi" msgid="4017628918351949575">"Nessun segnale Wi-Fi."</string>
+ <string name="accessibility_wifi_one_bar" msgid="1914343229091303434">"Wi-Fi: una barra."</string>
+ <string name="accessibility_wifi_two_bars" msgid="7869150535859760698">"Wi-Fi: due barre."</string>
+ <string name="accessibility_wifi_three_bars" msgid="2665319332961356254">"Wi-Fi: tre barre."</string>
+ <string name="accessibility_wifi_signal_full" msgid="1275764416228473932">"Massimo segnale Wi-Fi."</string>
+ <string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
+ <string name="accessibility_data_connection_3g" msgid="8628562305003568260">"3G"</string>
+ <string name="accessibility_data_connection_3.5g" msgid="8664845609981692001">"3.5G"</string>
+ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string>
+ <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string>
+ <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
+ <string name="accessibility_data_connection_wifi" msgid="1127208787254436420">"Wi-Fi"</string>
+ <string name="accessibility_no_sim" msgid="8274017118472455155">"Nessuna SIM presente."</string>
+ <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Tethering Bluetooth."</string>
+ <string name="accessibility_airplane_mode" msgid="834748999790763092">"Modalità aereo."</string>
+ <string name="accessibility_battery_level" msgid="7451474187113371965">"Batteria: <xliff:g id="NUMBER">%d</xliff:g>%."</string>
+ <string name="accessibility_settings_button" msgid="7913780116850379698">"Pulsante Impostazioni."</string>
+ <string name="accessibility_notifications_button" msgid="2933903195211483438">"Pulsante per le notifiche."</string>
+ <string name="accessibility_remove_notification" msgid="4883990503785778699">"Rimuovi la notifica."</string>
+ <string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS abilitato."</string>
+ <string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Acquisizione GPS."</string>
+ <string name="accessibility_tty_enabled" msgid="4613200365379426561">"Telescrivente abilitata."</string>
+ <string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Suoneria vibrazione."</string>
+ <string name="accessibility_ringer_silent" msgid="9061243307939135383">"Suoneria silenziosa."</string>
+ <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
<skip />
- <!-- no translation found for accessibility_menu (316839303324695949) -->
+ <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
<skip />
- <!-- no translation found for accessibility_ime_switch_button (5032926134740456424) -->
+ <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
<skip />
- <!-- no translation found for accessibility_compatibility_zoom_button (8461115318742350699) -->
+ <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
<skip />
- <!-- no translation found for accessibility_compatibility_zoom_example (4220687294564945780) -->
+ <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
<skip />
- <!-- no translation found for accessibility_bluetooth_connected (2707027633242983370) -->
+ <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
<skip />
- <!-- no translation found for accessibility_bluetooth_disconnected (7416648669976870175) -->
+ <!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
<skip />
- <!-- no translation found for accessibility_no_battery (358343022352820946) -->
+ <!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
<skip />
- <!-- no translation found for accessibility_battery_one_bar (7774887721891057523) -->
+ <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
<skip />
- <!-- no translation found for accessibility_battery_two_bars (8500650438735009973) -->
- <skip />
- <!-- no translation found for accessibility_battery_three_bars (2302983330865040446) -->
- <skip />
- <!-- no translation found for accessibility_battery_full (8909122401720158582) -->
- <skip />
- <!-- no translation found for accessibility_no_phone (4894708937052611281) -->
- <skip />
- <!-- no translation found for accessibility_phone_one_bar (687699278132664115) -->
- <skip />
- <!-- no translation found for accessibility_phone_two_bars (8384905382804815201) -->
- <skip />
- <!-- no translation found for accessibility_phone_three_bars (8521904843919971885) -->
- <skip />
- <!-- no translation found for accessibility_phone_signal_full (6471834868580757898) -->
- <skip />
- <!-- no translation found for accessibility_no_data (4791966295096867555) -->
- <skip />
- <!-- no translation found for accessibility_data_one_bar (1415625833238273628) -->
- <skip />
- <!-- no translation found for accessibility_data_two_bars (6166018492360432091) -->
- <skip />
- <!-- no translation found for accessibility_data_three_bars (9167670452395038520) -->
- <skip />
- <!-- no translation found for accessibility_data_signal_full (2708384608124519369) -->
- <skip />
- <!-- no translation found for accessibility_no_wifi (4017628918351949575) -->
- <skip />
- <!-- no translation found for accessibility_wifi_one_bar (1914343229091303434) -->
- <skip />
- <!-- no translation found for accessibility_wifi_two_bars (7869150535859760698) -->
- <skip />
- <!-- no translation found for accessibility_wifi_three_bars (2665319332961356254) -->
- <skip />
- <!-- no translation found for accessibility_wifi_signal_full (1275764416228473932) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_gprs (1606477224486747751) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_3g (8628562305003568260) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_3.5g (8664845609981692001) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_4g (7741000750630089612) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_cdma (6132648193978823023) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_edge (4477457051631979278) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_wifi (1127208787254436420) -->
- <skip />
- <!-- no translation found for accessibility_no_sim (8274017118472455155) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_tether (4102784498140271969) -->
- <skip />
- <!-- no translation found for accessibility_airplane_mode (834748999790763092) -->
- <skip />
- <!-- no translation found for accessibility_battery_level (7451474187113371965) -->
- <skip />
- <!-- no translation found for accessibility_settings_button (7913780116850379698) -->
- <skip />
- <!-- no translation found for accessibility_notifications_button (2933903195211483438) -->
- <skip />
- <!-- no translation found for accessibility_remove_notification (4883990503785778699) -->
- <skip />
- <!-- no translation found for accessibility_gps_enabled (3511469499240123019) -->
- <skip />
- <!-- no translation found for accessibility_gps_acquiring (8959333351058967158) -->
- <skip />
- <!-- no translation found for accessibility_tty_enabled (4613200365379426561) -->
- <skip />
- <!-- no translation found for accessibility_ringer_vibrate (666585363364155055) -->
- <skip />
- <!-- no translation found for accessibility_ringer_silent (9061243307939135383) -->
+ <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
<skip />
</resources>
diff --git a/packages/SystemUI/res/values-iw-large/strings.xml b/packages/SystemUI/res/values-iw-large/strings.xml
index 4aba093..0c288c3 100644
--- a/packages/SystemUI/res/values-iw-large/strings.xml
+++ b/packages/SystemUI/res/values-iw-large/strings.xml
@@ -20,10 +20,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="status_bar_clear_all_button" msgid="4661583896803349732">"נקה הכל"</string>
- <string name="status_bar_settings_signal_meter_disconnected" msgid="383145178755329067">"אין חיבור לאינטרנט"</string>
- <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="2535465294437586528">"Wi-Fi מחובר"</string>
- <string name="gps_notification_searching_text" msgid="4467935186864208249">"מחפש GPS"</string>
- <string name="gps_notification_found_text" msgid="6270628388918822956">"מיקום מוגדר על ידי GPS"</string>
<string name="notifications_off_title" msgid="1860117696034775851">"מצב התראות כבוי"</string>
<string name="notifications_off_text" msgid="1439152806320786912">"הקש כאן כדי להפעיל מחדש את ההתראות."</string>
</resources>
diff --git a/packages/SystemUI/res/values-iw/strings.xml b/packages/SystemUI/res/values-iw/strings.xml
index 4552f23..92293abb 100644
--- a/packages/SystemUI/res/values-iw/strings.xml
+++ b/packages/SystemUI/res/values-iw/strings.xml
@@ -62,7 +62,8 @@
<string name="compat_mode_help_header" msgid="7020175705401506719">"שינוי מרחק מתצוגה לתאימות"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"כאשר יישום מיועד למסך קטן יותר, פקד של מרחק מתצוגה יופיע ליד השעון."</string>
<string name="screenshot_saving_toast" msgid="8592630119048713208">"צילום המסך נשמר בגלריה"</string>
- <string name="screenshot_failed_toast" msgid="655180965533683356">"לא ניתן לשמור את צילום המסך"</string>
+ <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
+ <skip />
<string name="usb_preference_title" msgid="6551050377388882787">"אפשרויות העברת קבצים ב-USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"טען כנגן מדיה (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"טען כמצלמה (PTP)"</string>
@@ -73,6 +74,8 @@
<skip />
<!-- no translation found for accessibility_menu (316839303324695949) -->
<skip />
+ <!-- no translation found for accessibility_recent (3027675523629738534) -->
+ <skip />
<!-- no translation found for accessibility_ime_switch_button (5032926134740456424) -->
<skip />
<!-- no translation found for accessibility_compatibility_zoom_button (8461115318742350699) -->
@@ -161,4 +164,24 @@
<skip />
<!-- no translation found for accessibility_ringer_silent (9061243307939135383) -->
<skip />
+ <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
+ <skip />
+ <!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
+ <skip />
+ <!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
+ <skip />
+ <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
+ <skip />
+ <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-ja-large/strings.xml b/packages/SystemUI/res/values-ja-large/strings.xml
index 087320e..f38b84c 100644
--- a/packages/SystemUI/res/values-ja-large/strings.xml
+++ b/packages/SystemUI/res/values-ja-large/strings.xml
@@ -20,10 +20,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="status_bar_clear_all_button" msgid="4661583896803349732">"すべて消去"</string>
- <string name="status_bar_settings_signal_meter_disconnected" msgid="383145178755329067">"インターネット未接続"</string>
- <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="2535465294437586528">"Wi-Fi接続済み"</string>
- <string name="gps_notification_searching_text" msgid="4467935186864208249">"GPSで検索中"</string>
- <string name="gps_notification_found_text" msgid="6270628388918822956">"GPSにより現在地が設定されました"</string>
<string name="notifications_off_title" msgid="1860117696034775851">"通知OFF"</string>
<string name="notifications_off_text" msgid="1439152806320786912">"通知を再度ONにするにはここをタップします。"</string>
</resources>
diff --git a/packages/SystemUI/res/values-ja/strings.xml b/packages/SystemUI/res/values-ja/strings.xml
index abee692..d97b90f 100644
--- a/packages/SystemUI/res/values-ja/strings.xml
+++ b/packages/SystemUI/res/values-ja/strings.xml
@@ -23,10 +23,8 @@
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"通知を消去"</string>
<string name="status_bar_do_not_disturb_button" msgid="5812628897510997853">"通知を非表示"</string>
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"通知を表示"</string>
- <!-- no translation found for status_bar_recent_remove_item_title (6561944127804037619) -->
- <skip />
- <!-- no translation found for status_bar_recent_inspect_item_title (4906947311448880529) -->
- <skip />
+ <string name="status_bar_recent_remove_item_title" msgid="6561944127804037619">"削除"</string>
+ <string name="status_bar_recent_inspect_item_title" msgid="4906947311448880529">"検査"</string>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"通知なし"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"実行中"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"通知"</string>
@@ -62,103 +60,79 @@
<string name="compat_mode_help_header" msgid="7020175705401506719">"互換ズーム"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"より小型の画面向けのアプリの場合は、ズームコントロールが時計のそばに表示されます。"</string>
<string name="screenshot_saving_toast" msgid="8592630119048713208">"スクリーンショットがギャラリーに保存されました"</string>
- <string name="screenshot_failed_toast" msgid="655180965533683356">"スクリーンショットを保存できませんでした"</string>
+ <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
+ <skip />
<string name="usb_preference_title" msgid="6551050377388882787">"USBファイル転送オプション"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"メディアプレーヤー(MTP)としてマウント"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"カメラ(PTP)としてマウント"</string>
<string name="installer_cd_button_title" msgid="8485631662288445893">"Mac版Android File Transferアプリのインストール"</string>
- <!-- no translation found for accessibility_back (567011538994429120) -->
+ <string name="accessibility_back" msgid="567011538994429120">"戻る"</string>
+ <string name="accessibility_home" msgid="8217216074895377641">"ホーム"</string>
+ <string name="accessibility_menu" msgid="316839303324695949">"メニュー"</string>
+ <!-- no translation found for accessibility_recent (3027675523629738534) -->
<skip />
- <!-- no translation found for accessibility_home (8217216074895377641) -->
+ <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"入力方法の切り替えボタン。"</string>
+ <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"互換ズームボタン。"</string>
+ <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"小さい画面から大きい画面にズームします。"</string>
+ <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetoothに接続済みです。"</string>
+ <string name="accessibility_bluetooth_disconnected" msgid="7416648669976870175">"Bluetoothが切断されました。"</string>
+ <string name="accessibility_no_battery" msgid="358343022352820946">"電池: なし"</string>
+ <string name="accessibility_battery_one_bar" msgid="7774887721891057523">"電池: レベル1"</string>
+ <string name="accessibility_battery_two_bars" msgid="8500650438735009973">"電池: レベル2"</string>
+ <string name="accessibility_battery_three_bars" msgid="2302983330865040446">"電池: レベル3"</string>
+ <string name="accessibility_battery_full" msgid="8909122401720158582">"電池: フル"</string>
+ <string name="accessibility_no_phone" msgid="4894708937052611281">"電波状態: なし"</string>
+ <string name="accessibility_phone_one_bar" msgid="687699278132664115">"電波状態: レベル1"</string>
+ <string name="accessibility_phone_two_bars" msgid="8384905382804815201">"電波状態: レベル2"</string>
+ <string name="accessibility_phone_three_bars" msgid="8521904843919971885">"電波状態: レベル3"</string>
+ <string name="accessibility_phone_signal_full" msgid="6471834868580757898">"電波状態: フル"</string>
+ <string name="accessibility_no_data" msgid="4791966295096867555">"データ信号: なし"</string>
+ <string name="accessibility_data_one_bar" msgid="1415625833238273628">"データ信号: レベル1"</string>
+ <string name="accessibility_data_two_bars" msgid="6166018492360432091">"データ信号: レベル2"</string>
+ <string name="accessibility_data_three_bars" msgid="9167670452395038520">"データ信号: レベル3"</string>
+ <string name="accessibility_data_signal_full" msgid="2708384608124519369">"データ信号: フル"</string>
+ <string name="accessibility_no_wifi" msgid="4017628918351949575">"Wi-Fi信号: なし"</string>
+ <string name="accessibility_wifi_one_bar" msgid="1914343229091303434">"Wi-Fi信号: レベル1"</string>
+ <string name="accessibility_wifi_two_bars" msgid="7869150535859760698">"Wi-Fi信号: レベル2"</string>
+ <string name="accessibility_wifi_three_bars" msgid="2665319332961356254">"Wi-Fi信号: レベル3"</string>
+ <string name="accessibility_wifi_signal_full" msgid="1275764416228473932">"Wi-Fi信号: フル"</string>
+ <string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
+ <string name="accessibility_data_connection_3g" msgid="8628562305003568260">"3G"</string>
+ <string name="accessibility_data_connection_3.5g" msgid="8664845609981692001">"3.5G"</string>
+ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string>
+ <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string>
+ <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"EDGE"</string>
+ <string name="accessibility_data_connection_wifi" msgid="1127208787254436420">"Wi-Fi"</string>
+ <string name="accessibility_no_sim" msgid="8274017118472455155">"SIMがありません。"</string>
+ <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Bluetoothテザリング。"</string>
+ <string name="accessibility_airplane_mode" msgid="834748999790763092">"機内モード。"</string>
+ <string name="accessibility_battery_level" msgid="7451474187113371965">"電池: <xliff:g id="NUMBER">%d</xliff:g>パーセント"</string>
+ <string name="accessibility_settings_button" msgid="7913780116850379698">"設定ボタン。"</string>
+ <string name="accessibility_notifications_button" msgid="2933903195211483438">"通知ボタン。"</string>
+ <string name="accessibility_remove_notification" msgid="4883990503785778699">"通知を削除します。"</string>
+ <string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPSが有効です。"</string>
+ <string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPS取得中です。"</string>
+ <string name="accessibility_tty_enabled" msgid="4613200365379426561">"テレタイプライターが有効です。"</string>
+ <string name="accessibility_ringer_vibrate" msgid="666585363364155055">"バイブレーション着信。"</string>
+ <string name="accessibility_ringer_silent" msgid="9061243307939135383">"マナーモード着信。"</string>
+ <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
<skip />
- <!-- no translation found for accessibility_menu (316839303324695949) -->
+ <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
<skip />
- <!-- no translation found for accessibility_ime_switch_button (5032926134740456424) -->
+ <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
<skip />
- <!-- no translation found for accessibility_compatibility_zoom_button (8461115318742350699) -->
+ <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
<skip />
- <!-- no translation found for accessibility_compatibility_zoom_example (4220687294564945780) -->
+ <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
<skip />
- <!-- no translation found for accessibility_bluetooth_connected (2707027633242983370) -->
+ <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
<skip />
- <!-- no translation found for accessibility_bluetooth_disconnected (7416648669976870175) -->
+ <!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
<skip />
- <!-- no translation found for accessibility_no_battery (358343022352820946) -->
+ <!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
<skip />
- <!-- no translation found for accessibility_battery_one_bar (7774887721891057523) -->
+ <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
<skip />
- <!-- no translation found for accessibility_battery_two_bars (8500650438735009973) -->
- <skip />
- <!-- no translation found for accessibility_battery_three_bars (2302983330865040446) -->
- <skip />
- <!-- no translation found for accessibility_battery_full (8909122401720158582) -->
- <skip />
- <!-- no translation found for accessibility_no_phone (4894708937052611281) -->
- <skip />
- <!-- no translation found for accessibility_phone_one_bar (687699278132664115) -->
- <skip />
- <!-- no translation found for accessibility_phone_two_bars (8384905382804815201) -->
- <skip />
- <!-- no translation found for accessibility_phone_three_bars (8521904843919971885) -->
- <skip />
- <!-- no translation found for accessibility_phone_signal_full (6471834868580757898) -->
- <skip />
- <!-- no translation found for accessibility_no_data (4791966295096867555) -->
- <skip />
- <!-- no translation found for accessibility_data_one_bar (1415625833238273628) -->
- <skip />
- <!-- no translation found for accessibility_data_two_bars (6166018492360432091) -->
- <skip />
- <!-- no translation found for accessibility_data_three_bars (9167670452395038520) -->
- <skip />
- <!-- no translation found for accessibility_data_signal_full (2708384608124519369) -->
- <skip />
- <!-- no translation found for accessibility_no_wifi (4017628918351949575) -->
- <skip />
- <!-- no translation found for accessibility_wifi_one_bar (1914343229091303434) -->
- <skip />
- <!-- no translation found for accessibility_wifi_two_bars (7869150535859760698) -->
- <skip />
- <!-- no translation found for accessibility_wifi_three_bars (2665319332961356254) -->
- <skip />
- <!-- no translation found for accessibility_wifi_signal_full (1275764416228473932) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_gprs (1606477224486747751) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_3g (8628562305003568260) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_3.5g (8664845609981692001) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_4g (7741000750630089612) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_cdma (6132648193978823023) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_edge (4477457051631979278) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_wifi (1127208787254436420) -->
- <skip />
- <!-- no translation found for accessibility_no_sim (8274017118472455155) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_tether (4102784498140271969) -->
- <skip />
- <!-- no translation found for accessibility_airplane_mode (834748999790763092) -->
- <skip />
- <!-- no translation found for accessibility_battery_level (7451474187113371965) -->
- <skip />
- <!-- no translation found for accessibility_settings_button (7913780116850379698) -->
- <skip />
- <!-- no translation found for accessibility_notifications_button (2933903195211483438) -->
- <skip />
- <!-- no translation found for accessibility_remove_notification (4883990503785778699) -->
- <skip />
- <!-- no translation found for accessibility_gps_enabled (3511469499240123019) -->
- <skip />
- <!-- no translation found for accessibility_gps_acquiring (8959333351058967158) -->
- <skip />
- <!-- no translation found for accessibility_tty_enabled (4613200365379426561) -->
- <skip />
- <!-- no translation found for accessibility_ringer_vibrate (666585363364155055) -->
- <skip />
- <!-- no translation found for accessibility_ringer_silent (9061243307939135383) -->
+ <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
<skip />
</resources>
diff --git a/packages/SystemUI/res/values-ko-large/strings.xml b/packages/SystemUI/res/values-ko-large/strings.xml
index 97c4467..fb5efd7 100644
--- a/packages/SystemUI/res/values-ko-large/strings.xml
+++ b/packages/SystemUI/res/values-ko-large/strings.xml
@@ -20,10 +20,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="status_bar_clear_all_button" msgid="4661583896803349732">"모두 지우기"</string>
- <string name="status_bar_settings_signal_meter_disconnected" msgid="383145178755329067">"인터넷에 연결되지 않음"</string>
- <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="2535465294437586528">"Wi-Fi 연결됨"</string>
- <string name="gps_notification_searching_text" msgid="4467935186864208249">"GPS 검색 중"</string>
- <string name="gps_notification_found_text" msgid="6270628388918822956">"GPS에서 위치 설정"</string>
<string name="notifications_off_title" msgid="1860117696034775851">"알림 사용 안함"</string>
<string name="notifications_off_text" msgid="1439152806320786912">"알림을 다시 사용하려면 여기를 터치하세요."</string>
</resources>
diff --git a/packages/SystemUI/res/values-ko/strings.xml b/packages/SystemUI/res/values-ko/strings.xml
index c34f0e4..8abc288 100644
--- a/packages/SystemUI/res/values-ko/strings.xml
+++ b/packages/SystemUI/res/values-ko/strings.xml
@@ -23,10 +23,8 @@
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"지우기"</string>
<string name="status_bar_do_not_disturb_button" msgid="5812628897510997853">"응답 거부"</string>
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"알림 표시"</string>
- <!-- no translation found for status_bar_recent_remove_item_title (6561944127804037619) -->
- <skip />
- <!-- no translation found for status_bar_recent_inspect_item_title (4906947311448880529) -->
- <skip />
+ <string name="status_bar_recent_remove_item_title" msgid="6561944127804037619">"삭제"</string>
+ <string name="status_bar_recent_inspect_item_title" msgid="4906947311448880529">"조사"</string>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"알림 없음"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"진행 중"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"알림"</string>
@@ -62,103 +60,79 @@
<string name="compat_mode_help_header" msgid="7020175705401506719">"호환성 확대/축소"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"앱이 작은 화면에 맞도록 설계된 경우 시계 옆에 확대/축소 컨트롤이 표시됩니다."</string>
<string name="screenshot_saving_toast" msgid="8592630119048713208">"캡쳐화면이 갤러리에 저장되었습니다."</string>
- <string name="screenshot_failed_toast" msgid="655180965533683356">"캡쳐화면을 저장하지 못했습니다."</string>
+ <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
+ <skip />
<string name="usb_preference_title" msgid="6551050377388882787">"USB 파일 전송 옵션"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"미디어 플레이어로 마운트(MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"카메라로 마운트(PTP)"</string>
<string name="installer_cd_button_title" msgid="8485631662288445893">"Mac용 Android 파일 전송 애플리케이션 설치"</string>
- <!-- no translation found for accessibility_back (567011538994429120) -->
+ <string name="accessibility_back" msgid="567011538994429120">"뒤로"</string>
+ <string name="accessibility_home" msgid="8217216074895377641">"홈"</string>
+ <string name="accessibility_menu" msgid="316839303324695949">"메뉴"</string>
+ <!-- no translation found for accessibility_recent (3027675523629738534) -->
<skip />
- <!-- no translation found for accessibility_home (8217216074895377641) -->
+ <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"입력 방법 버튼을 전환합니다."</string>
+ <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"호환성 확대/축소 버튼"</string>
+ <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"작은 화면을 큰 화면으로 확대합니다."</string>
+ <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"블루투스가 연결되었습니다."</string>
+ <string name="accessibility_bluetooth_disconnected" msgid="7416648669976870175">"블루투스 연결이 끊어졌습니다."</string>
+ <string name="accessibility_no_battery" msgid="358343022352820946">"배터리 없음"</string>
+ <string name="accessibility_battery_one_bar" msgid="7774887721891057523">"배터리 막대가 하나입니다."</string>
+ <string name="accessibility_battery_two_bars" msgid="8500650438735009973">"배터리 막대가 두 개입니다."</string>
+ <string name="accessibility_battery_three_bars" msgid="2302983330865040446">"배터리 막대가 세 개입니다."</string>
+ <string name="accessibility_battery_full" msgid="8909122401720158582">"배터리 충전이 완료되었습니다."</string>
+ <string name="accessibility_no_phone" msgid="4894708937052611281">"휴대전화 없음"</string>
+ <string name="accessibility_phone_one_bar" msgid="687699278132664115">"휴대전화 신호 막대가 하나입니다."</string>
+ <string name="accessibility_phone_two_bars" msgid="8384905382804815201">"휴대전화 신호 막대가 두 개입니다."</string>
+ <string name="accessibility_phone_three_bars" msgid="8521904843919971885">"휴대전화 신호 막대가 세 개입니다."</string>
+ <string name="accessibility_phone_signal_full" msgid="6471834868580757898">"휴대전화의 신호가 강합니다."</string>
+ <string name="accessibility_no_data" msgid="4791966295096867555">"데이터가 없습니다."</string>
+ <string name="accessibility_data_one_bar" msgid="1415625833238273628">"데이터 신호 막대가 하나입니다."</string>
+ <string name="accessibility_data_two_bars" msgid="6166018492360432091">"데이터 신호 막대가 두 개입니다."</string>
+ <string name="accessibility_data_three_bars" msgid="9167670452395038520">"데이터 신호 막대가 세 개입니다."</string>
+ <string name="accessibility_data_signal_full" msgid="2708384608124519369">"데이터 신호가 강합니다."</string>
+ <string name="accessibility_no_wifi" msgid="4017628918351949575">"WiFi 없음"</string>
+ <string name="accessibility_wifi_one_bar" msgid="1914343229091303434">"WiFi 신호 막대가 하나입니다."</string>
+ <string name="accessibility_wifi_two_bars" msgid="7869150535859760698">"WiFi 신호 막대가 두 개입니다."</string>
+ <string name="accessibility_wifi_three_bars" msgid="2665319332961356254">"WiFi 신호 막대가 세 개입니다."</string>
+ <string name="accessibility_wifi_signal_full" msgid="1275764416228473932">"WiFi 신호가 강합니다."</string>
+ <string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
+ <string name="accessibility_data_connection_3g" msgid="8628562305003568260">"3G"</string>
+ <string name="accessibility_data_connection_3.5g" msgid="8664845609981692001">"3.5G"</string>
+ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string>
+ <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string>
+ <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
+ <string name="accessibility_data_connection_wifi" msgid="1127208787254436420">"WiFi"</string>
+ <string name="accessibility_no_sim" msgid="8274017118472455155">"SIM 없음"</string>
+ <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"블루투스 테더링"</string>
+ <string name="accessibility_airplane_mode" msgid="834748999790763092">"비행기 모드"</string>
+ <string name="accessibility_battery_level" msgid="7451474187113371965">"배터리 <xliff:g id="NUMBER">%d</xliff:g>퍼센트"</string>
+ <string name="accessibility_settings_button" msgid="7913780116850379698">"설정 버튼"</string>
+ <string name="accessibility_notifications_button" msgid="2933903195211483438">"알림 버튼"</string>
+ <string name="accessibility_remove_notification" msgid="4883990503785778699">"알림을 삭제합니다."</string>
+ <string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS를 사용합니다."</string>
+ <string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPS 가져오는 중"</string>
+ <string name="accessibility_tty_enabled" msgid="4613200365379426561">"전신 타자기 사용"</string>
+ <string name="accessibility_ringer_vibrate" msgid="666585363364155055">"벨소리 장치 진동"</string>
+ <string name="accessibility_ringer_silent" msgid="9061243307939135383">"벨소리 장치 무음"</string>
+ <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
<skip />
- <!-- no translation found for accessibility_menu (316839303324695949) -->
+ <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
<skip />
- <!-- no translation found for accessibility_ime_switch_button (5032926134740456424) -->
+ <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
<skip />
- <!-- no translation found for accessibility_compatibility_zoom_button (8461115318742350699) -->
+ <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
<skip />
- <!-- no translation found for accessibility_compatibility_zoom_example (4220687294564945780) -->
+ <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
<skip />
- <!-- no translation found for accessibility_bluetooth_connected (2707027633242983370) -->
+ <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
<skip />
- <!-- no translation found for accessibility_bluetooth_disconnected (7416648669976870175) -->
+ <!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
<skip />
- <!-- no translation found for accessibility_no_battery (358343022352820946) -->
+ <!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
<skip />
- <!-- no translation found for accessibility_battery_one_bar (7774887721891057523) -->
+ <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
<skip />
- <!-- no translation found for accessibility_battery_two_bars (8500650438735009973) -->
- <skip />
- <!-- no translation found for accessibility_battery_three_bars (2302983330865040446) -->
- <skip />
- <!-- no translation found for accessibility_battery_full (8909122401720158582) -->
- <skip />
- <!-- no translation found for accessibility_no_phone (4894708937052611281) -->
- <skip />
- <!-- no translation found for accessibility_phone_one_bar (687699278132664115) -->
- <skip />
- <!-- no translation found for accessibility_phone_two_bars (8384905382804815201) -->
- <skip />
- <!-- no translation found for accessibility_phone_three_bars (8521904843919971885) -->
- <skip />
- <!-- no translation found for accessibility_phone_signal_full (6471834868580757898) -->
- <skip />
- <!-- no translation found for accessibility_no_data (4791966295096867555) -->
- <skip />
- <!-- no translation found for accessibility_data_one_bar (1415625833238273628) -->
- <skip />
- <!-- no translation found for accessibility_data_two_bars (6166018492360432091) -->
- <skip />
- <!-- no translation found for accessibility_data_three_bars (9167670452395038520) -->
- <skip />
- <!-- no translation found for accessibility_data_signal_full (2708384608124519369) -->
- <skip />
- <!-- no translation found for accessibility_no_wifi (4017628918351949575) -->
- <skip />
- <!-- no translation found for accessibility_wifi_one_bar (1914343229091303434) -->
- <skip />
- <!-- no translation found for accessibility_wifi_two_bars (7869150535859760698) -->
- <skip />
- <!-- no translation found for accessibility_wifi_three_bars (2665319332961356254) -->
- <skip />
- <!-- no translation found for accessibility_wifi_signal_full (1275764416228473932) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_gprs (1606477224486747751) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_3g (8628562305003568260) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_3.5g (8664845609981692001) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_4g (7741000750630089612) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_cdma (6132648193978823023) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_edge (4477457051631979278) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_wifi (1127208787254436420) -->
- <skip />
- <!-- no translation found for accessibility_no_sim (8274017118472455155) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_tether (4102784498140271969) -->
- <skip />
- <!-- no translation found for accessibility_airplane_mode (834748999790763092) -->
- <skip />
- <!-- no translation found for accessibility_battery_level (7451474187113371965) -->
- <skip />
- <!-- no translation found for accessibility_settings_button (7913780116850379698) -->
- <skip />
- <!-- no translation found for accessibility_notifications_button (2933903195211483438) -->
- <skip />
- <!-- no translation found for accessibility_remove_notification (4883990503785778699) -->
- <skip />
- <!-- no translation found for accessibility_gps_enabled (3511469499240123019) -->
- <skip />
- <!-- no translation found for accessibility_gps_acquiring (8959333351058967158) -->
- <skip />
- <!-- no translation found for accessibility_tty_enabled (4613200365379426561) -->
- <skip />
- <!-- no translation found for accessibility_ringer_vibrate (666585363364155055) -->
- <skip />
- <!-- no translation found for accessibility_ringer_silent (9061243307939135383) -->
+ <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
<skip />
</resources>
diff --git a/packages/SystemUI/res/values-lt-large/strings.xml b/packages/SystemUI/res/values-lt-large/strings.xml
index 73906ea..fad3f18 100644
--- a/packages/SystemUI/res/values-lt-large/strings.xml
+++ b/packages/SystemUI/res/values-lt-large/strings.xml
@@ -20,10 +20,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="status_bar_clear_all_button" msgid="4661583896803349732">"Išv. viską"</string>
- <string name="status_bar_settings_signal_meter_disconnected" msgid="383145178755329067">"Nėra interneto r."</string>
- <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="2535465294437586528">"Pris. prie „Wi-Fi“"</string>
- <string name="gps_notification_searching_text" msgid="4467935186864208249">"Ieškoma GPS"</string>
- <string name="gps_notification_found_text" msgid="6270628388918822956">"GPS nustatyta vieta"</string>
<string name="notifications_off_title" msgid="1860117696034775851">"Pranešimai išjungti"</string>
<string name="notifications_off_text" msgid="1439152806320786912">"Jei norite įjungti pranešimus, palieskite čia."</string>
</resources>
diff --git a/packages/SystemUI/res/values-lt/strings.xml b/packages/SystemUI/res/values-lt/strings.xml
index 040c74d..aae9a98 100644
--- a/packages/SystemUI/res/values-lt/strings.xml
+++ b/packages/SystemUI/res/values-lt/strings.xml
@@ -62,7 +62,8 @@
<string name="compat_mode_help_header" msgid="7020175705401506719">"Suderinamumo mastelio keitimas"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Kai programa bus pritaikyta mažesniam ekranui, mastelio keitimo valdiklis bus parodytas šalia laikrodžio."</string>
<string name="screenshot_saving_toast" msgid="8592630119048713208">"Ekrano kopija išsaugota galerijoje"</string>
- <string name="screenshot_failed_toast" msgid="655180965533683356">"Nepavyko išsaugoti ekrano kopijos"</string>
+ <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
+ <skip />
<string name="usb_preference_title" msgid="6551050377388882787">"USB failo perdavimo parinktys"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Įmontuoti kaip medijos grotuvą (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Įmontuoti kaip fotoaparatą (PTP)"</string>
@@ -73,6 +74,8 @@
<skip />
<!-- no translation found for accessibility_menu (316839303324695949) -->
<skip />
+ <!-- no translation found for accessibility_recent (3027675523629738534) -->
+ <skip />
<!-- no translation found for accessibility_ime_switch_button (5032926134740456424) -->
<skip />
<!-- no translation found for accessibility_compatibility_zoom_button (8461115318742350699) -->
@@ -161,4 +164,24 @@
<skip />
<!-- no translation found for accessibility_ringer_silent (9061243307939135383) -->
<skip />
+ <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
+ <skip />
+ <!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
+ <skip />
+ <!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
+ <skip />
+ <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
+ <skip />
+ <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-lv-large/strings.xml b/packages/SystemUI/res/values-lv-large/strings.xml
index 24c8a45..750168c 100644
--- a/packages/SystemUI/res/values-lv-large/strings.xml
+++ b/packages/SystemUI/res/values-lv-large/strings.xml
@@ -20,10 +20,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="status_bar_clear_all_button" msgid="4661583896803349732">"Notīr.visu"</string>
- <string name="status_bar_settings_signal_meter_disconnected" msgid="383145178755329067">"Nav interneta sav."</string>
- <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="2535465294437586528">"Izv. sav. ar Wi-Fi"</string>
- <string name="gps_notification_searching_text" msgid="4467935186864208249">"Notiek GPS meklēšana..."</string>
- <string name="gps_notification_found_text" msgid="6270628388918822956">"GPS iestatītā atrašanās vieta"</string>
<string name="notifications_off_title" msgid="1860117696034775851">"Paziņojumi ir izslēgti."</string>
<string name="notifications_off_text" msgid="1439152806320786912">"Pieskarieties šeit, lai atkal ieslēgtu paziņojumus."</string>
</resources>
diff --git a/packages/SystemUI/res/values-lv/strings.xml b/packages/SystemUI/res/values-lv/strings.xml
index 4c9b4b4..6a42ba1 100644
--- a/packages/SystemUI/res/values-lv/strings.xml
+++ b/packages/SystemUI/res/values-lv/strings.xml
@@ -23,10 +23,8 @@
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"Notīrīt"</string>
<string name="status_bar_do_not_disturb_button" msgid="5812628897510997853">"Netraucēt"</string>
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Rādīt paziņojumus"</string>
- <!-- no translation found for status_bar_recent_remove_item_title (6561944127804037619) -->
- <skip />
- <!-- no translation found for status_bar_recent_inspect_item_title (4906947311448880529) -->
- <skip />
+ <string name="status_bar_recent_remove_item_title" msgid="6561944127804037619">"Noņemšana"</string>
+ <string name="status_bar_recent_inspect_item_title" msgid="4906947311448880529">"Apskatīt"</string>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Nav paziņojumu"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Notiekošs"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Paziņojumi"</string>
@@ -62,103 +60,79 @@
<string name="compat_mode_help_header" msgid="7020175705401506719">"Saderības tālummaiņa"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Ja lietotne ir paredzēta mazākam ekrānam, blakus pulkstenim tiks parādīta tālummaiņas vadīkla."</string>
<string name="screenshot_saving_toast" msgid="8592630119048713208">"Ekrānuzņēmums ir saglabāts galerijā."</string>
- <string name="screenshot_failed_toast" msgid="655180965533683356">"Nevarēja saglabāt ekrānuzņēmumu."</string>
+ <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
+ <skip />
<string name="usb_preference_title" msgid="6551050377388882787">"USB failu pārsūtīšanas opcijas"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Pievienot kā multivides atskaņotāju (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Pievienot kā kameru (PTP)"</string>
<string name="installer_cd_button_title" msgid="8485631662288445893">"Instalēt Android failu pārsūt. liet. Mac datoram"</string>
- <!-- no translation found for accessibility_back (567011538994429120) -->
+ <string name="accessibility_back" msgid="567011538994429120">"Atpakaļ"</string>
+ <string name="accessibility_home" msgid="8217216074895377641">"Sākums"</string>
+ <string name="accessibility_menu" msgid="316839303324695949">"Izvēlne"</string>
+ <!-- no translation found for accessibility_recent (3027675523629738534) -->
<skip />
- <!-- no translation found for accessibility_home (8217216074895377641) -->
+ <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Ievades metodes maiņas poga"</string>
+ <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Saderības tālummaiņas poga"</string>
+ <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Veikt tālummaiņu no mazāka ekrāna uz lielāku"</string>
+ <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth savienojums ir izveidots."</string>
+ <string name="accessibility_bluetooth_disconnected" msgid="7416648669976870175">"Bluetooth savienojums ir pārtraukts."</string>
+ <string name="accessibility_no_battery" msgid="358343022352820946">"Nav akumulatora."</string>
+ <string name="accessibility_battery_one_bar" msgid="7774887721891057523">"Akumulators: viena josla"</string>
+ <string name="accessibility_battery_two_bars" msgid="8500650438735009973">"Akumulators: divas joslas"</string>
+ <string name="accessibility_battery_three_bars" msgid="2302983330865040446">"Akumulators: trīs joslas"</string>
+ <string name="accessibility_battery_full" msgid="8909122401720158582">"Pilna piekļuve akumulatoram"</string>
+ <string name="accessibility_no_phone" msgid="4894708937052611281">"Nav tālruņa."</string>
+ <string name="accessibility_phone_one_bar" msgid="687699278132664115">"Tālrunis: viena josla"</string>
+ <string name="accessibility_phone_two_bars" msgid="8384905382804815201">"Tālrunis: divas joslas"</string>
+ <string name="accessibility_phone_three_bars" msgid="8521904843919971885">"Tālrunis: trīs joslas"</string>
+ <string name="accessibility_phone_signal_full" msgid="6471834868580757898">"Pilna piekļuve tālruņa signālam"</string>
+ <string name="accessibility_no_data" msgid="4791966295096867555">"Nav datu."</string>
+ <string name="accessibility_data_one_bar" msgid="1415625833238273628">"Dati: viena josla"</string>
+ <string name="accessibility_data_two_bars" msgid="6166018492360432091">"Dati: divas joslas"</string>
+ <string name="accessibility_data_three_bars" msgid="9167670452395038520">"Dati: trīs joslas"</string>
+ <string name="accessibility_data_signal_full" msgid="2708384608124519369">"Pilna piekļuve datu signālam"</string>
+ <string name="accessibility_no_wifi" msgid="4017628918351949575">"Nav Wi-Fi."</string>
+ <string name="accessibility_wifi_one_bar" msgid="1914343229091303434">"Wi-Fi: viena josla"</string>
+ <string name="accessibility_wifi_two_bars" msgid="7869150535859760698">"Wi-Fi: divas joslas"</string>
+ <string name="accessibility_wifi_three_bars" msgid="2665319332961356254">"Wi-Fi: trīs joslas"</string>
+ <string name="accessibility_wifi_signal_full" msgid="1275764416228473932">"Pilna piekļuve Wi-Fi signālam"</string>
+ <string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
+ <string name="accessibility_data_connection_3g" msgid="8628562305003568260">"3G"</string>
+ <string name="accessibility_data_connection_3.5g" msgid="8664845609981692001">"3.5G"</string>
+ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string>
+ <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string>
+ <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"EDGE"</string>
+ <string name="accessibility_data_connection_wifi" msgid="1127208787254436420">"Wi-Fi"</string>
+ <string name="accessibility_no_sim" msgid="8274017118472455155">"Nav SIM kartes."</string>
+ <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Bluetooth piesaiste"</string>
+ <string name="accessibility_airplane_mode" msgid="834748999790763092">"Lidmašīnas režīms"</string>
+ <string name="accessibility_battery_level" msgid="7451474187113371965">"Akumulators: <xliff:g id="NUMBER">%d</xliff:g> procenti"</string>
+ <string name="accessibility_settings_button" msgid="7913780116850379698">"Iestatījumu poga"</string>
+ <string name="accessibility_notifications_button" msgid="2933903195211483438">"Paziņojumu poga"</string>
+ <string name="accessibility_remove_notification" msgid="4883990503785778699">"Noņemt paziņojumu"</string>
+ <string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS ir iespējots."</string>
+ <string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPS iegūšana"</string>
+ <string name="accessibility_tty_enabled" msgid="4613200365379426561">"Teletaips ir iespējots."</string>
+ <string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Zvana signāls — vibrācija"</string>
+ <string name="accessibility_ringer_silent" msgid="9061243307939135383">"Zvana signāls — kluss"</string>
+ <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
<skip />
- <!-- no translation found for accessibility_menu (316839303324695949) -->
+ <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
<skip />
- <!-- no translation found for accessibility_ime_switch_button (5032926134740456424) -->
+ <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
<skip />
- <!-- no translation found for accessibility_compatibility_zoom_button (8461115318742350699) -->
+ <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
<skip />
- <!-- no translation found for accessibility_compatibility_zoom_example (4220687294564945780) -->
+ <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
<skip />
- <!-- no translation found for accessibility_bluetooth_connected (2707027633242983370) -->
+ <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
<skip />
- <!-- no translation found for accessibility_bluetooth_disconnected (7416648669976870175) -->
+ <!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
<skip />
- <!-- no translation found for accessibility_no_battery (358343022352820946) -->
+ <!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
<skip />
- <!-- no translation found for accessibility_battery_one_bar (7774887721891057523) -->
+ <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
<skip />
- <!-- no translation found for accessibility_battery_two_bars (8500650438735009973) -->
- <skip />
- <!-- no translation found for accessibility_battery_three_bars (2302983330865040446) -->
- <skip />
- <!-- no translation found for accessibility_battery_full (8909122401720158582) -->
- <skip />
- <!-- no translation found for accessibility_no_phone (4894708937052611281) -->
- <skip />
- <!-- no translation found for accessibility_phone_one_bar (687699278132664115) -->
- <skip />
- <!-- no translation found for accessibility_phone_two_bars (8384905382804815201) -->
- <skip />
- <!-- no translation found for accessibility_phone_three_bars (8521904843919971885) -->
- <skip />
- <!-- no translation found for accessibility_phone_signal_full (6471834868580757898) -->
- <skip />
- <!-- no translation found for accessibility_no_data (4791966295096867555) -->
- <skip />
- <!-- no translation found for accessibility_data_one_bar (1415625833238273628) -->
- <skip />
- <!-- no translation found for accessibility_data_two_bars (6166018492360432091) -->
- <skip />
- <!-- no translation found for accessibility_data_three_bars (9167670452395038520) -->
- <skip />
- <!-- no translation found for accessibility_data_signal_full (2708384608124519369) -->
- <skip />
- <!-- no translation found for accessibility_no_wifi (4017628918351949575) -->
- <skip />
- <!-- no translation found for accessibility_wifi_one_bar (1914343229091303434) -->
- <skip />
- <!-- no translation found for accessibility_wifi_two_bars (7869150535859760698) -->
- <skip />
- <!-- no translation found for accessibility_wifi_three_bars (2665319332961356254) -->
- <skip />
- <!-- no translation found for accessibility_wifi_signal_full (1275764416228473932) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_gprs (1606477224486747751) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_3g (8628562305003568260) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_3.5g (8664845609981692001) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_4g (7741000750630089612) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_cdma (6132648193978823023) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_edge (4477457051631979278) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_wifi (1127208787254436420) -->
- <skip />
- <!-- no translation found for accessibility_no_sim (8274017118472455155) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_tether (4102784498140271969) -->
- <skip />
- <!-- no translation found for accessibility_airplane_mode (834748999790763092) -->
- <skip />
- <!-- no translation found for accessibility_battery_level (7451474187113371965) -->
- <skip />
- <!-- no translation found for accessibility_settings_button (7913780116850379698) -->
- <skip />
- <!-- no translation found for accessibility_notifications_button (2933903195211483438) -->
- <skip />
- <!-- no translation found for accessibility_remove_notification (4883990503785778699) -->
- <skip />
- <!-- no translation found for accessibility_gps_enabled (3511469499240123019) -->
- <skip />
- <!-- no translation found for accessibility_gps_acquiring (8959333351058967158) -->
- <skip />
- <!-- no translation found for accessibility_tty_enabled (4613200365379426561) -->
- <skip />
- <!-- no translation found for accessibility_ringer_vibrate (666585363364155055) -->
- <skip />
- <!-- no translation found for accessibility_ringer_silent (9061243307939135383) -->
+ <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
<skip />
</resources>
diff --git a/packages/SystemUI/res/values-ms-large/strings.xml b/packages/SystemUI/res/values-ms-large/strings.xml
index 4897656..bdb5e7e 100644
--- a/packages/SystemUI/res/values-ms-large/strings.xml
+++ b/packages/SystemUI/res/values-ms-large/strings.xml
@@ -20,10 +20,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="status_bar_clear_all_button" msgid="4661583896803349732">"Ksgkn smua"</string>
- <string name="status_bar_settings_signal_meter_disconnected" msgid="383145178755329067">"Tiada smbg Internet"</string>
- <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="2535465294437586528">"Wi-Fi disambungkan"</string>
- <string name="gps_notification_searching_text" msgid="4467935186864208249">"Mencari GPS"</string>
- <string name="gps_notification_found_text" msgid="6270628388918822956">"Lokasi ditetapkan oleh GPS"</string>
<string name="notifications_off_title" msgid="1860117696034775851">"Pemberitahuan dimatikan"</string>
<string name="notifications_off_text" msgid="1439152806320786912">"Ketik di sini untuk menghidupkan kembali pemberitahuan."</string>
</resources>
diff --git a/packages/SystemUI/res/values-ms/strings.xml b/packages/SystemUI/res/values-ms/strings.xml
index eef7926..eafa653 100644
--- a/packages/SystemUI/res/values-ms/strings.xml
+++ b/packages/SystemUI/res/values-ms/strings.xml
@@ -23,10 +23,8 @@
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"Pdm bersih"</string>
<string name="status_bar_do_not_disturb_button" msgid="5812628897510997853">"Jangan ganggu"</string>
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Tunjukkan pemberitahuan"</string>
- <!-- no translation found for status_bar_recent_remove_item_title (6561944127804037619) -->
- <skip />
- <!-- no translation found for status_bar_recent_inspect_item_title (4906947311448880529) -->
- <skip />
+ <string name="status_bar_recent_remove_item_title" msgid="6561944127804037619">"Alih keluar"</string>
+ <string name="status_bar_recent_inspect_item_title" msgid="4906947311448880529">"Periksa"</string>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Tiada pemberitahuan"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Sedang berlangsung"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Pemberitahuan"</string>
@@ -62,103 +60,79 @@
<string name="compat_mode_help_header" msgid="7020175705401506719">"Keserasian Zum"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Apabila apl direka untuk skrin yang lebih kecil, kawalan zum akan muncul di tepi jam."</string>
<string name="screenshot_saving_toast" msgid="8592630119048713208">"Tangkapan skrin disimpan ke Galeri"</string>
- <string name="screenshot_failed_toast" msgid="655180965533683356">"Tidak boleh menyimpan tangkapan skrin"</string>
+ <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
+ <skip />
<string name="usb_preference_title" msgid="6551050377388882787">"Pilihan pemindahan fail USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Lekapkan sebagai pemain media (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Lekapkan sebagai kamera (PTP)"</string>
<string name="installer_cd_button_title" msgid="8485631662288445893">"Pasang aplikasi Pemindahan Fail Android untuk Mac"</string>
- <!-- no translation found for accessibility_back (567011538994429120) -->
+ <string name="accessibility_back" msgid="567011538994429120">"Kembali"</string>
+ <string name="accessibility_home" msgid="8217216074895377641">"Laman Utama"</string>
+ <string name="accessibility_menu" msgid="316839303324695949">"Menu"</string>
+ <!-- no translation found for accessibility_recent (3027675523629738534) -->
<skip />
- <!-- no translation found for accessibility_home (8217216074895377641) -->
+ <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Butang tukar kaedah masukan."</string>
+ <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Butang zum keserasian."</string>
+ <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Skrin zum lebih kecil kepada lebih besar."</string>
+ <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth disambungkan."</string>
+ <string name="accessibility_bluetooth_disconnected" msgid="7416648669976870175">"Bluetooth diputuskan sambungan."</string>
+ <string name="accessibility_no_battery" msgid="358343022352820946">"Tiada bateri."</string>
+ <string name="accessibility_battery_one_bar" msgid="7774887721891057523">"Bateri satu bar."</string>
+ <string name="accessibility_battery_two_bars" msgid="8500650438735009973">"Bateri dua bar."</string>
+ <string name="accessibility_battery_three_bars" msgid="2302983330865040446">"Bateri tiga bar."</string>
+ <string name="accessibility_battery_full" msgid="8909122401720158582">"Bateri penuh."</string>
+ <string name="accessibility_no_phone" msgid="4894708937052611281">"Tiada telefon."</string>
+ <string name="accessibility_phone_one_bar" msgid="687699278132664115">"Telefon satu bar."</string>
+ <string name="accessibility_phone_two_bars" msgid="8384905382804815201">"Telefon dua bar."</string>
+ <string name="accessibility_phone_three_bars" msgid="8521904843919971885">"Telefon tiga bar."</string>
+ <string name="accessibility_phone_signal_full" msgid="6471834868580757898">"Isyarat telefon penuh."</string>
+ <string name="accessibility_no_data" msgid="4791966295096867555">"Tiada data."</string>
+ <string name="accessibility_data_one_bar" msgid="1415625833238273628">"Data satu bar."</string>
+ <string name="accessibility_data_two_bars" msgid="6166018492360432091">"Data dua bar."</string>
+ <string name="accessibility_data_three_bars" msgid="9167670452395038520">"Data tiga bar."</string>
+ <string name="accessibility_data_signal_full" msgid="2708384608124519369">"Isyarat data penuh."</string>
+ <string name="accessibility_no_wifi" msgid="4017628918351949575">"Tiada WiFi."</string>
+ <string name="accessibility_wifi_one_bar" msgid="1914343229091303434">"WiFi satu bar."</string>
+ <string name="accessibility_wifi_two_bars" msgid="7869150535859760698">"WiFi dua bar."</string>
+ <string name="accessibility_wifi_three_bars" msgid="2665319332961356254">"WiFi tiga bar."</string>
+ <string name="accessibility_wifi_signal_full" msgid="1275764416228473932">"Isyarat WiFi penuh."</string>
+ <string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
+ <string name="accessibility_data_connection_3g" msgid="8628562305003568260">"3G"</string>
+ <string name="accessibility_data_connection_3.5g" msgid="8664845609981692001">"3.5G"</string>
+ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string>
+ <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string>
+ <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
+ <string name="accessibility_data_connection_wifi" msgid="1127208787254436420">"WiFi"</string>
+ <string name="accessibility_no_sim" msgid="8274017118472455155">"Tiada SIM."</string>
+ <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Penambatan Bluetooth."</string>
+ <string name="accessibility_airplane_mode" msgid="834748999790763092">"Mod pesawat"</string>
+ <string name="accessibility_battery_level" msgid="7451474187113371965">"Bateri <xliff:g id="NUMBER">%d</xliff:g> peratus."</string>
+ <string name="accessibility_settings_button" msgid="7913780116850379698">"Butang tetapan."</string>
+ <string name="accessibility_notifications_button" msgid="2933903195211483438">"Butang pemberitahuan."</string>
+ <string name="accessibility_remove_notification" msgid="4883990503785778699">"Alih keluar pemberitahuan."</string>
+ <string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS didayakan."</string>
+ <string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPS sedang mendapatkan."</string>
+ <string name="accessibility_tty_enabled" msgid="4613200365379426561">"Mesin Teletaip didayakan."</string>
+ <string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Pendering bergetar."</string>
+ <string name="accessibility_ringer_silent" msgid="9061243307939135383">"Pendering senyap."</string>
+ <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
<skip />
- <!-- no translation found for accessibility_menu (316839303324695949) -->
+ <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
<skip />
- <!-- no translation found for accessibility_ime_switch_button (5032926134740456424) -->
+ <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
<skip />
- <!-- no translation found for accessibility_compatibility_zoom_button (8461115318742350699) -->
+ <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
<skip />
- <!-- no translation found for accessibility_compatibility_zoom_example (4220687294564945780) -->
+ <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
<skip />
- <!-- no translation found for accessibility_bluetooth_connected (2707027633242983370) -->
+ <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
<skip />
- <!-- no translation found for accessibility_bluetooth_disconnected (7416648669976870175) -->
+ <!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
<skip />
- <!-- no translation found for accessibility_no_battery (358343022352820946) -->
+ <!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
<skip />
- <!-- no translation found for accessibility_battery_one_bar (7774887721891057523) -->
+ <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
<skip />
- <!-- no translation found for accessibility_battery_two_bars (8500650438735009973) -->
- <skip />
- <!-- no translation found for accessibility_battery_three_bars (2302983330865040446) -->
- <skip />
- <!-- no translation found for accessibility_battery_full (8909122401720158582) -->
- <skip />
- <!-- no translation found for accessibility_no_phone (4894708937052611281) -->
- <skip />
- <!-- no translation found for accessibility_phone_one_bar (687699278132664115) -->
- <skip />
- <!-- no translation found for accessibility_phone_two_bars (8384905382804815201) -->
- <skip />
- <!-- no translation found for accessibility_phone_three_bars (8521904843919971885) -->
- <skip />
- <!-- no translation found for accessibility_phone_signal_full (6471834868580757898) -->
- <skip />
- <!-- no translation found for accessibility_no_data (4791966295096867555) -->
- <skip />
- <!-- no translation found for accessibility_data_one_bar (1415625833238273628) -->
- <skip />
- <!-- no translation found for accessibility_data_two_bars (6166018492360432091) -->
- <skip />
- <!-- no translation found for accessibility_data_three_bars (9167670452395038520) -->
- <skip />
- <!-- no translation found for accessibility_data_signal_full (2708384608124519369) -->
- <skip />
- <!-- no translation found for accessibility_no_wifi (4017628918351949575) -->
- <skip />
- <!-- no translation found for accessibility_wifi_one_bar (1914343229091303434) -->
- <skip />
- <!-- no translation found for accessibility_wifi_two_bars (7869150535859760698) -->
- <skip />
- <!-- no translation found for accessibility_wifi_three_bars (2665319332961356254) -->
- <skip />
- <!-- no translation found for accessibility_wifi_signal_full (1275764416228473932) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_gprs (1606477224486747751) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_3g (8628562305003568260) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_3.5g (8664845609981692001) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_4g (7741000750630089612) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_cdma (6132648193978823023) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_edge (4477457051631979278) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_wifi (1127208787254436420) -->
- <skip />
- <!-- no translation found for accessibility_no_sim (8274017118472455155) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_tether (4102784498140271969) -->
- <skip />
- <!-- no translation found for accessibility_airplane_mode (834748999790763092) -->
- <skip />
- <!-- no translation found for accessibility_battery_level (7451474187113371965) -->
- <skip />
- <!-- no translation found for accessibility_settings_button (7913780116850379698) -->
- <skip />
- <!-- no translation found for accessibility_notifications_button (2933903195211483438) -->
- <skip />
- <!-- no translation found for accessibility_remove_notification (4883990503785778699) -->
- <skip />
- <!-- no translation found for accessibility_gps_enabled (3511469499240123019) -->
- <skip />
- <!-- no translation found for accessibility_gps_acquiring (8959333351058967158) -->
- <skip />
- <!-- no translation found for accessibility_tty_enabled (4613200365379426561) -->
- <skip />
- <!-- no translation found for accessibility_ringer_vibrate (666585363364155055) -->
- <skip />
- <!-- no translation found for accessibility_ringer_silent (9061243307939135383) -->
+ <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
<skip />
</resources>
diff --git a/packages/SystemUI/res/values-nb-large/strings.xml b/packages/SystemUI/res/values-nb-large/strings.xml
index 053abd4..09e6443 100644
--- a/packages/SystemUI/res/values-nb-large/strings.xml
+++ b/packages/SystemUI/res/values-nb-large/strings.xml
@@ -20,10 +20,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="status_bar_clear_all_button" msgid="4661583896803349732">"Tøm alle"</string>
- <string name="status_bar_settings_signal_meter_disconnected" msgid="383145178755329067">"Ingen Internett-tilkobling"</string>
- <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="2535465294437586528">"Wi-Fi tilkoblet"</string>
- <string name="gps_notification_searching_text" msgid="4467935186864208249">"Søker etter GPS"</string>
- <string name="gps_notification_found_text" msgid="6270628388918822956">"Posisjon angitt av GPS"</string>
<string name="notifications_off_title" msgid="1860117696034775851">"Varslinger er deaktivert"</string>
<string name="notifications_off_text" msgid="1439152806320786912">"Trykk her for å aktivere varslinger på nytt."</string>
</resources>
diff --git a/packages/SystemUI/res/values-nb/strings.xml b/packages/SystemUI/res/values-nb/strings.xml
index 589a6ab..10743e5 100644
--- a/packages/SystemUI/res/values-nb/strings.xml
+++ b/packages/SystemUI/res/values-nb/strings.xml
@@ -23,10 +23,8 @@
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"Fjern"</string>
<string name="status_bar_do_not_disturb_button" msgid="5812628897510997853">"Ikke forstyrr"</string>
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Vis varslinger"</string>
- <!-- no translation found for status_bar_recent_remove_item_title (6561944127804037619) -->
- <skip />
- <!-- no translation found for status_bar_recent_inspect_item_title (4906947311448880529) -->
- <skip />
+ <string name="status_bar_recent_remove_item_title" msgid="6561944127804037619">"Fjern"</string>
+ <string name="status_bar_recent_inspect_item_title" msgid="4906947311448880529">"Inspiser"</string>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Ingen varslinger"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Aktiviteter"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Varslinger"</string>
@@ -62,103 +60,79 @@
<string name="compat_mode_help_header" msgid="7020175705401506719">"Kompatibilitets-zooming"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Når en app er utformet for en mindre skjerm, vises det en zoomkontroll ved klokken."</string>
<string name="screenshot_saving_toast" msgid="8592630119048713208">"Skjermdump ble lagret i galleriet"</string>
- <string name="screenshot_failed_toast" msgid="655180965533683356">"Lagring av skjermdump mislyktes"</string>
+ <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
+ <skip />
<string name="usb_preference_title" msgid="6551050377388882787">"Altern. for USB-filoverføring"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Sett inn som mediespiller (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Sett inn som kamera (PTP)"</string>
<string name="installer_cd_button_title" msgid="8485631662288445893">"Installer Android File Transfer for Mac"</string>
- <!-- no translation found for accessibility_back (567011538994429120) -->
+ <string name="accessibility_back" msgid="567011538994429120">"Tilbake"</string>
+ <string name="accessibility_home" msgid="8217216074895377641">"Startside"</string>
+ <string name="accessibility_menu" msgid="316839303324695949">"Meny"</string>
+ <!-- no translation found for accessibility_recent (3027675523629738534) -->
<skip />
- <!-- no translation found for accessibility_home (8217216074895377641) -->
+ <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Bytt knapp for inndatametode."</string>
+ <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Zoomknapp for kompatibilitet."</string>
+ <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Zoom mindre til større skjerm."</string>
+ <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth er tilkoblet."</string>
+ <string name="accessibility_bluetooth_disconnected" msgid="7416648669976870175">"Bluetooth frakoblet."</string>
+ <string name="accessibility_no_battery" msgid="358343022352820946">"Uten batteri."</string>
+ <string name="accessibility_battery_one_bar" msgid="7774887721891057523">"Batteri – én stolpe."</string>
+ <string name="accessibility_battery_two_bars" msgid="8500650438735009973">"Batteri – to stolper."</string>
+ <string name="accessibility_battery_three_bars" msgid="2302983330865040446">"Batteri – tre stolper."</string>
+ <string name="accessibility_battery_full" msgid="8909122401720158582">"Batteri er fullt."</string>
+ <string name="accessibility_no_phone" msgid="4894708937052611281">"Ingen telefon."</string>
+ <string name="accessibility_phone_one_bar" msgid="687699278132664115">"Telefon – én stolpe."</string>
+ <string name="accessibility_phone_two_bars" msgid="8384905382804815201">"Telefon – to stolper."</string>
+ <string name="accessibility_phone_three_bars" msgid="8521904843919971885">"Telefon – tre stolper."</string>
+ <string name="accessibility_phone_signal_full" msgid="6471834868580757898">"Telefonsignal er fullt."</string>
+ <string name="accessibility_no_data" msgid="4791966295096867555">"Ingen data."</string>
+ <string name="accessibility_data_one_bar" msgid="1415625833238273628">"Data – én stolpe"</string>
+ <string name="accessibility_data_two_bars" msgid="6166018492360432091">"Data – to stolper."</string>
+ <string name="accessibility_data_three_bars" msgid="9167670452395038520">"Data – tre stolper."</string>
+ <string name="accessibility_data_signal_full" msgid="2708384608124519369">"Datasignal er fullt."</string>
+ <string name="accessibility_no_wifi" msgid="4017628918351949575">"Ingen Wi-Fi."</string>
+ <string name="accessibility_wifi_one_bar" msgid="1914343229091303434">"Wi-Fi – én stolpe."</string>
+ <string name="accessibility_wifi_two_bars" msgid="7869150535859760698">"Wi-Fi – to stolper."</string>
+ <string name="accessibility_wifi_three_bars" msgid="2665319332961356254">"WiFi – tre stolper."</string>
+ <string name="accessibility_wifi_signal_full" msgid="1275764416228473932">"WiFi-signal er fullt."</string>
+ <string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
+ <string name="accessibility_data_connection_3g" msgid="8628562305003568260">"3G"</string>
+ <string name="accessibility_data_connection_3.5g" msgid="8664845609981692001">"3.5G"</string>
+ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string>
+ <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string>
+ <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
+ <string name="accessibility_data_connection_wifi" msgid="1127208787254436420">"Wi-Fi"</string>
+ <string name="accessibility_no_sim" msgid="8274017118472455155">"Uten SIM"</string>
+ <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Bluetooth-tilknytning"</string>
+ <string name="accessibility_airplane_mode" msgid="834748999790763092">"Flymodus."</string>
+ <string name="accessibility_battery_level" msgid="7451474187113371965">"Batteri – <xliff:g id="NUMBER">%d</xliff:g> prosent."</string>
+ <string name="accessibility_settings_button" msgid="7913780116850379698">"Innstillinger-knapp."</string>
+ <string name="accessibility_notifications_button" msgid="2933903195211483438">"Varslingsknapp."</string>
+ <string name="accessibility_remove_notification" msgid="4883990503785778699">"Fjern varsling."</string>
+ <string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS aktivert."</string>
+ <string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Henting av GPS-signal."</string>
+ <string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTypewriter aktivert."</string>
+ <string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Vibreringsmodus."</string>
+ <string name="accessibility_ringer_silent" msgid="9061243307939135383">"Stille modus."</string>
+ <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
<skip />
- <!-- no translation found for accessibility_menu (316839303324695949) -->
+ <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
<skip />
- <!-- no translation found for accessibility_ime_switch_button (5032926134740456424) -->
+ <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
<skip />
- <!-- no translation found for accessibility_compatibility_zoom_button (8461115318742350699) -->
+ <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
<skip />
- <!-- no translation found for accessibility_compatibility_zoom_example (4220687294564945780) -->
+ <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
<skip />
- <!-- no translation found for accessibility_bluetooth_connected (2707027633242983370) -->
+ <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
<skip />
- <!-- no translation found for accessibility_bluetooth_disconnected (7416648669976870175) -->
+ <!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
<skip />
- <!-- no translation found for accessibility_no_battery (358343022352820946) -->
+ <!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
<skip />
- <!-- no translation found for accessibility_battery_one_bar (7774887721891057523) -->
+ <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
<skip />
- <!-- no translation found for accessibility_battery_two_bars (8500650438735009973) -->
- <skip />
- <!-- no translation found for accessibility_battery_three_bars (2302983330865040446) -->
- <skip />
- <!-- no translation found for accessibility_battery_full (8909122401720158582) -->
- <skip />
- <!-- no translation found for accessibility_no_phone (4894708937052611281) -->
- <skip />
- <!-- no translation found for accessibility_phone_one_bar (687699278132664115) -->
- <skip />
- <!-- no translation found for accessibility_phone_two_bars (8384905382804815201) -->
- <skip />
- <!-- no translation found for accessibility_phone_three_bars (8521904843919971885) -->
- <skip />
- <!-- no translation found for accessibility_phone_signal_full (6471834868580757898) -->
- <skip />
- <!-- no translation found for accessibility_no_data (4791966295096867555) -->
- <skip />
- <!-- no translation found for accessibility_data_one_bar (1415625833238273628) -->
- <skip />
- <!-- no translation found for accessibility_data_two_bars (6166018492360432091) -->
- <skip />
- <!-- no translation found for accessibility_data_three_bars (9167670452395038520) -->
- <skip />
- <!-- no translation found for accessibility_data_signal_full (2708384608124519369) -->
- <skip />
- <!-- no translation found for accessibility_no_wifi (4017628918351949575) -->
- <skip />
- <!-- no translation found for accessibility_wifi_one_bar (1914343229091303434) -->
- <skip />
- <!-- no translation found for accessibility_wifi_two_bars (7869150535859760698) -->
- <skip />
- <!-- no translation found for accessibility_wifi_three_bars (2665319332961356254) -->
- <skip />
- <!-- no translation found for accessibility_wifi_signal_full (1275764416228473932) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_gprs (1606477224486747751) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_3g (8628562305003568260) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_3.5g (8664845609981692001) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_4g (7741000750630089612) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_cdma (6132648193978823023) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_edge (4477457051631979278) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_wifi (1127208787254436420) -->
- <skip />
- <!-- no translation found for accessibility_no_sim (8274017118472455155) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_tether (4102784498140271969) -->
- <skip />
- <!-- no translation found for accessibility_airplane_mode (834748999790763092) -->
- <skip />
- <!-- no translation found for accessibility_battery_level (7451474187113371965) -->
- <skip />
- <!-- no translation found for accessibility_settings_button (7913780116850379698) -->
- <skip />
- <!-- no translation found for accessibility_notifications_button (2933903195211483438) -->
- <skip />
- <!-- no translation found for accessibility_remove_notification (4883990503785778699) -->
- <skip />
- <!-- no translation found for accessibility_gps_enabled (3511469499240123019) -->
- <skip />
- <!-- no translation found for accessibility_gps_acquiring (8959333351058967158) -->
- <skip />
- <!-- no translation found for accessibility_tty_enabled (4613200365379426561) -->
- <skip />
- <!-- no translation found for accessibility_ringer_vibrate (666585363364155055) -->
- <skip />
- <!-- no translation found for accessibility_ringer_silent (9061243307939135383) -->
+ <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
<skip />
</resources>
diff --git a/packages/SystemUI/res/values-nl-large/strings.xml b/packages/SystemUI/res/values-nl-large/strings.xml
index cc2147c..4e55664 100644
--- a/packages/SystemUI/res/values-nl-large/strings.xml
+++ b/packages/SystemUI/res/values-nl-large/strings.xml
@@ -20,10 +20,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="status_bar_clear_all_button" msgid="4661583896803349732">"Alles wissen"</string>
- <string name="status_bar_settings_signal_meter_disconnected" msgid="383145178755329067">"Geen internetverbinding"</string>
- <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="2535465294437586528">"Verbonden via Wi-Fi"</string>
- <string name="gps_notification_searching_text" msgid="4467935186864208249">"Zoeken naar GPS"</string>
- <string name="gps_notification_found_text" msgid="6270628388918822956">"Locatie bepaald met GPS"</string>
<string name="notifications_off_title" msgid="1860117696034775851">"Meldingen uit"</string>
<string name="notifications_off_text" msgid="1439152806320786912">"Tik hier om meldingen weer in te schakelen."</string>
</resources>
diff --git a/packages/SystemUI/res/values-nl/strings.xml b/packages/SystemUI/res/values-nl/strings.xml
index ab44aaf..c3afe27 100644
--- a/packages/SystemUI/res/values-nl/strings.xml
+++ b/packages/SystemUI/res/values-nl/strings.xml
@@ -23,10 +23,8 @@
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"Wissen"</string>
<string name="status_bar_do_not_disturb_button" msgid="5812628897510997853">"Niet storen"</string>
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Meldingen weergeven"</string>
- <!-- no translation found for status_bar_recent_remove_item_title (6561944127804037619) -->
- <skip />
- <!-- no translation found for status_bar_recent_inspect_item_title (4906947311448880529) -->
- <skip />
+ <string name="status_bar_recent_remove_item_title" msgid="6561944127804037619">"Verwijderen"</string>
+ <string name="status_bar_recent_inspect_item_title" msgid="4906947311448880529">"Inspecteren"</string>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Geen meldingen"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Actief"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Meldingen"</string>
@@ -62,103 +60,79 @@
<string name="compat_mode_help_header" msgid="7020175705401506719">"Compatibiliteitszoom"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Wanneer een app is ontworpen voor een kleiner scherm, wordt naast de klok een zoomknop weergegeven."</string>
<string name="screenshot_saving_toast" msgid="8592630119048713208">"Schermafbeelding is opgeslagen in de galerij"</string>
- <string name="screenshot_failed_toast" msgid="655180965533683356">"Schermafbeelding is niet opgeslagen"</string>
+ <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
+ <skip />
<string name="usb_preference_title" msgid="6551050377388882787">"Opties voor USB-bestandsoverdracht"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Koppelen als mediaspeler (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Koppelen als camera (PTP)"</string>
<string name="installer_cd_button_title" msgid="8485631662288445893">"Applicatie Android File Transfer voor Mac installeren"</string>
- <!-- no translation found for accessibility_back (567011538994429120) -->
+ <string name="accessibility_back" msgid="567011538994429120">"Terug"</string>
+ <string name="accessibility_home" msgid="8217216074895377641">"Startpagina"</string>
+ <string name="accessibility_menu" msgid="316839303324695949">"Menu"</string>
+ <!-- no translation found for accessibility_recent (3027675523629738534) -->
<skip />
- <!-- no translation found for accessibility_home (8217216074895377641) -->
+ <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Knop voor wijzigen invoermethode."</string>
+ <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Knop voor compatibiliteitszoom."</string>
+ <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Kleiner scherm uitzoomen naar groter scherm."</string>
+ <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth-verbinding ingesteld."</string>
+ <string name="accessibility_bluetooth_disconnected" msgid="7416648669976870175">"Bluetooth-verbinding verbroken."</string>
+ <string name="accessibility_no_battery" msgid="358343022352820946">"Geen accu."</string>
+ <string name="accessibility_battery_one_bar" msgid="7774887721891057523">"Accu: één streepje."</string>
+ <string name="accessibility_battery_two_bars" msgid="8500650438735009973">"Accu: twee streepjes."</string>
+ <string name="accessibility_battery_three_bars" msgid="2302983330865040446">"Accu: drie streepjes."</string>
+ <string name="accessibility_battery_full" msgid="8909122401720158582">"Accu is vol."</string>
+ <string name="accessibility_no_phone" msgid="4894708937052611281">"Geen telefoonsignaal."</string>
+ <string name="accessibility_phone_one_bar" msgid="687699278132664115">"Telefoon: één streepje."</string>
+ <string name="accessibility_phone_two_bars" msgid="8384905382804815201">"Telefoon: twee streepjes."</string>
+ <string name="accessibility_phone_three_bars" msgid="8521904843919971885">"Telefoon: drie streepjes."</string>
+ <string name="accessibility_phone_signal_full" msgid="6471834868580757898">"Telefoonsignaal is op volledige sterkte."</string>
+ <string name="accessibility_no_data" msgid="4791966295096867555">"Geen gegevens."</string>
+ <string name="accessibility_data_one_bar" msgid="1415625833238273628">"Gegevens: één streepje."</string>
+ <string name="accessibility_data_two_bars" msgid="6166018492360432091">"Gegevens: twee streepjes."</string>
+ <string name="accessibility_data_three_bars" msgid="9167670452395038520">"Gegevens: drie streepjes."</string>
+ <string name="accessibility_data_signal_full" msgid="2708384608124519369">"Gegevenssignaal is op volledige sterkte."</string>
+ <string name="accessibility_no_wifi" msgid="4017628918351949575">"Geen Wi-Fi."</string>
+ <string name="accessibility_wifi_one_bar" msgid="1914343229091303434">"Wi-Fi: één streepje."</string>
+ <string name="accessibility_wifi_two_bars" msgid="7869150535859760698">"Wi-Fi: twee streepjes."</string>
+ <string name="accessibility_wifi_three_bars" msgid="2665319332961356254">"Wi-Fi: drie streepjes."</string>
+ <string name="accessibility_wifi_signal_full" msgid="1275764416228473932">"Wi-Fi-signaal is op volledige sterkte."</string>
+ <string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
+ <string name="accessibility_data_connection_3g" msgid="8628562305003568260">"3G"</string>
+ <string name="accessibility_data_connection_3.5g" msgid="8664845609981692001">"3.5G"</string>
+ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string>
+ <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string>
+ <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
+ <string name="accessibility_data_connection_wifi" msgid="1127208787254436420">"Wi-Fi"</string>
+ <string name="accessibility_no_sim" msgid="8274017118472455155">"Geen simkaart."</string>
+ <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Bluetooth-tethering."</string>
+ <string name="accessibility_airplane_mode" msgid="834748999790763092">"Vliegmodus."</string>
+ <string name="accessibility_battery_level" msgid="7451474187113371965">"Accu: <xliff:g id="NUMBER">%d</xliff:g> procent."</string>
+ <string name="accessibility_settings_button" msgid="7913780116850379698">"De knop \'Instellingen\'."</string>
+ <string name="accessibility_notifications_button" msgid="2933903195211483438">"Knop voor meldingen."</string>
+ <string name="accessibility_remove_notification" msgid="4883990503785778699">"Melding verwijderen."</string>
+ <string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS ingeschakeld."</string>
+ <string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Verbinding maken met GPS."</string>
+ <string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTypewriter ingeschakeld."</string>
+ <string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Belsoftware trilt."</string>
+ <string name="accessibility_ringer_silent" msgid="9061243307939135383">"Belsoftware stil."</string>
+ <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
<skip />
- <!-- no translation found for accessibility_menu (316839303324695949) -->
+ <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
<skip />
- <!-- no translation found for accessibility_ime_switch_button (5032926134740456424) -->
+ <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
<skip />
- <!-- no translation found for accessibility_compatibility_zoom_button (8461115318742350699) -->
+ <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
<skip />
- <!-- no translation found for accessibility_compatibility_zoom_example (4220687294564945780) -->
+ <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
<skip />
- <!-- no translation found for accessibility_bluetooth_connected (2707027633242983370) -->
+ <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
<skip />
- <!-- no translation found for accessibility_bluetooth_disconnected (7416648669976870175) -->
+ <!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
<skip />
- <!-- no translation found for accessibility_no_battery (358343022352820946) -->
+ <!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
<skip />
- <!-- no translation found for accessibility_battery_one_bar (7774887721891057523) -->
+ <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
<skip />
- <!-- no translation found for accessibility_battery_two_bars (8500650438735009973) -->
- <skip />
- <!-- no translation found for accessibility_battery_three_bars (2302983330865040446) -->
- <skip />
- <!-- no translation found for accessibility_battery_full (8909122401720158582) -->
- <skip />
- <!-- no translation found for accessibility_no_phone (4894708937052611281) -->
- <skip />
- <!-- no translation found for accessibility_phone_one_bar (687699278132664115) -->
- <skip />
- <!-- no translation found for accessibility_phone_two_bars (8384905382804815201) -->
- <skip />
- <!-- no translation found for accessibility_phone_three_bars (8521904843919971885) -->
- <skip />
- <!-- no translation found for accessibility_phone_signal_full (6471834868580757898) -->
- <skip />
- <!-- no translation found for accessibility_no_data (4791966295096867555) -->
- <skip />
- <!-- no translation found for accessibility_data_one_bar (1415625833238273628) -->
- <skip />
- <!-- no translation found for accessibility_data_two_bars (6166018492360432091) -->
- <skip />
- <!-- no translation found for accessibility_data_three_bars (9167670452395038520) -->
- <skip />
- <!-- no translation found for accessibility_data_signal_full (2708384608124519369) -->
- <skip />
- <!-- no translation found for accessibility_no_wifi (4017628918351949575) -->
- <skip />
- <!-- no translation found for accessibility_wifi_one_bar (1914343229091303434) -->
- <skip />
- <!-- no translation found for accessibility_wifi_two_bars (7869150535859760698) -->
- <skip />
- <!-- no translation found for accessibility_wifi_three_bars (2665319332961356254) -->
- <skip />
- <!-- no translation found for accessibility_wifi_signal_full (1275764416228473932) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_gprs (1606477224486747751) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_3g (8628562305003568260) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_3.5g (8664845609981692001) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_4g (7741000750630089612) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_cdma (6132648193978823023) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_edge (4477457051631979278) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_wifi (1127208787254436420) -->
- <skip />
- <!-- no translation found for accessibility_no_sim (8274017118472455155) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_tether (4102784498140271969) -->
- <skip />
- <!-- no translation found for accessibility_airplane_mode (834748999790763092) -->
- <skip />
- <!-- no translation found for accessibility_battery_level (7451474187113371965) -->
- <skip />
- <!-- no translation found for accessibility_settings_button (7913780116850379698) -->
- <skip />
- <!-- no translation found for accessibility_notifications_button (2933903195211483438) -->
- <skip />
- <!-- no translation found for accessibility_remove_notification (4883990503785778699) -->
- <skip />
- <!-- no translation found for accessibility_gps_enabled (3511469499240123019) -->
- <skip />
- <!-- no translation found for accessibility_gps_acquiring (8959333351058967158) -->
- <skip />
- <!-- no translation found for accessibility_tty_enabled (4613200365379426561) -->
- <skip />
- <!-- no translation found for accessibility_ringer_vibrate (666585363364155055) -->
- <skip />
- <!-- no translation found for accessibility_ringer_silent (9061243307939135383) -->
+ <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
<skip />
</resources>
diff --git a/packages/SystemUI/res/values-pl-large/strings.xml b/packages/SystemUI/res/values-pl-large/strings.xml
index d81e030..9070c83 100644
--- a/packages/SystemUI/res/values-pl-large/strings.xml
+++ b/packages/SystemUI/res/values-pl-large/strings.xml
@@ -20,10 +20,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="status_bar_clear_all_button" msgid="4661583896803349732">"Wyczyść"</string>
- <string name="status_bar_settings_signal_meter_disconnected" msgid="383145178755329067">"Brak połączenia internetowego"</string>
- <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="2535465294437586528">"Wi-Fi: połączono"</string>
- <string name="gps_notification_searching_text" msgid="4467935186864208249">"Wyszukiwanie sygnału GPS"</string>
- <string name="gps_notification_found_text" msgid="6270628388918822956">"Lokalizacja ustawiona wg GPS"</string>
<string name="notifications_off_title" msgid="1860117696034775851">"Powiadomienia wyłączone"</string>
<string name="notifications_off_text" msgid="1439152806320786912">"Dotknij tutaj, aby z powrotem włączyć powiadomienia."</string>
</resources>
diff --git a/packages/SystemUI/res/values-pl/strings.xml b/packages/SystemUI/res/values-pl/strings.xml
index 977ba60..184ae8d 100644
--- a/packages/SystemUI/res/values-pl/strings.xml
+++ b/packages/SystemUI/res/values-pl/strings.xml
@@ -23,10 +23,8 @@
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"Wyczyść"</string>
<string name="status_bar_do_not_disturb_button" msgid="5812628897510997853">"Nie przeszkadzać"</string>
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Pokaż powiadomienia"</string>
- <!-- no translation found for status_bar_recent_remove_item_title (6561944127804037619) -->
- <skip />
- <!-- no translation found for status_bar_recent_inspect_item_title (4906947311448880529) -->
- <skip />
+ <string name="status_bar_recent_remove_item_title" msgid="6561944127804037619">"Usuń"</string>
+ <string name="status_bar_recent_inspect_item_title" msgid="4906947311448880529">"Sprawdź"</string>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Brak powiadomień"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Bieżące"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Powiadomienia"</string>
@@ -62,103 +60,79 @@
<string name="compat_mode_help_header" msgid="7020175705401506719">"Powiększenie w trybie zgodności"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Jeśli aplikacja została przystosowana do mniejszego ekranu, obok zegara zostanie wyświetlony element sterujący powiększeniem."</string>
<string name="screenshot_saving_toast" msgid="8592630119048713208">"Zrzut ekranu został zapisany w galerii."</string>
- <string name="screenshot_failed_toast" msgid="655180965533683356">"Nie można zapisać zrzutu ekranu."</string>
+ <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
+ <skip />
<string name="usb_preference_title" msgid="6551050377388882787">"USB – opcje przesyłania plików"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Podłącz jako odtwarzacz multimedialny (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Podłącz jako aparat (PTP)"</string>
<string name="installer_cd_button_title" msgid="8485631662288445893">"Zainstaluj aplikację Android File Transfer dla Mac OS"</string>
- <!-- no translation found for accessibility_back (567011538994429120) -->
+ <string name="accessibility_back" msgid="567011538994429120">"Wróć"</string>
+ <string name="accessibility_home" msgid="8217216074895377641">"Ekran główny"</string>
+ <string name="accessibility_menu" msgid="316839303324695949">"Menu"</string>
+ <!-- no translation found for accessibility_recent (3027675523629738534) -->
<skip />
- <!-- no translation found for accessibility_home (8217216074895377641) -->
+ <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Przycisk przełączania metody wprowadzania."</string>
+ <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Przycisk powiększenia na potrzeby zgodności."</string>
+ <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Powiększa mniejszy ekran na większy."</string>
+ <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth podłączony."</string>
+ <string name="accessibility_bluetooth_disconnected" msgid="7416648669976870175">"Bluetooth rozłączony."</string>
+ <string name="accessibility_no_battery" msgid="358343022352820946">"Brak baterii."</string>
+ <string name="accessibility_battery_one_bar" msgid="7774887721891057523">"Bateria: jeden pasek."</string>
+ <string name="accessibility_battery_two_bars" msgid="8500650438735009973">"Bateria: dwa paski."</string>
+ <string name="accessibility_battery_three_bars" msgid="2302983330865040446">"Bateria: trzy paski."</string>
+ <string name="accessibility_battery_full" msgid="8909122401720158582">"Bateria naładowana."</string>
+ <string name="accessibility_no_phone" msgid="4894708937052611281">"Brak sygnału telefonu."</string>
+ <string name="accessibility_phone_one_bar" msgid="687699278132664115">"Telefon: jeden pasek."</string>
+ <string name="accessibility_phone_two_bars" msgid="8384905382804815201">"Telefon: dwa paski."</string>
+ <string name="accessibility_phone_three_bars" msgid="8521904843919971885">"Telefon: trzy paski."</string>
+ <string name="accessibility_phone_signal_full" msgid="6471834868580757898">"Sygnał telefonu: pełny."</string>
+ <string name="accessibility_no_data" msgid="4791966295096867555">"Brak danych."</string>
+ <string name="accessibility_data_one_bar" msgid="1415625833238273628">"Jeden pasek sygnału danych."</string>
+ <string name="accessibility_data_two_bars" msgid="6166018492360432091">"Dane: dwa paski."</string>
+ <string name="accessibility_data_three_bars" msgid="9167670452395038520">"Dane: trzy paski."</string>
+ <string name="accessibility_data_signal_full" msgid="2708384608124519369">"Pełna moc sygnału danych."</string>
+ <string name="accessibility_no_wifi" msgid="4017628918351949575">"Brak Wi-Fi."</string>
+ <string name="accessibility_wifi_one_bar" msgid="1914343229091303434">"Sieć Wi-Fi: jeden pasek."</string>
+ <string name="accessibility_wifi_two_bars" msgid="7869150535859760698">"Sieć Wi-Fi: dwa paski."</string>
+ <string name="accessibility_wifi_three_bars" msgid="2665319332961356254">"Sieć Wi-Fi: trzy paski."</string>
+ <string name="accessibility_wifi_signal_full" msgid="1275764416228473932">"Pełna moc sygnału Wi-Fi."</string>
+ <string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
+ <string name="accessibility_data_connection_3g" msgid="8628562305003568260">"3G"</string>
+ <string name="accessibility_data_connection_3.5g" msgid="8664845609981692001">"3.5G"</string>
+ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string>
+ <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string>
+ <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
+ <string name="accessibility_data_connection_wifi" msgid="1127208787254436420">"Wi-Fi"</string>
+ <string name="accessibility_no_sim" msgid="8274017118472455155">"Brak karty SIM."</string>
+ <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Powiązanie Bluetooth."</string>
+ <string name="accessibility_airplane_mode" msgid="834748999790763092">"Tryb samolotowy."</string>
+ <string name="accessibility_battery_level" msgid="7451474187113371965">"Bateria <xliff:g id="NUMBER">%d</xliff:g> procent."</string>
+ <string name="accessibility_settings_button" msgid="7913780116850379698">"Przycisk Ustawienia."</string>
+ <string name="accessibility_notifications_button" msgid="2933903195211483438">"Przycisk powiadomień."</string>
+ <string name="accessibility_remove_notification" msgid="4883990503785778699">"Usuń powiadomienie."</string>
+ <string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS włączony."</string>
+ <string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Pobieranie danych GPS."</string>
+ <string name="accessibility_tty_enabled" msgid="4613200365379426561">"Dalekopis (TTY) włączony."</string>
+ <string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Dzwonek z wibracjami."</string>
+ <string name="accessibility_ringer_silent" msgid="9061243307939135383">"Dzwonek wyciszony."</string>
+ <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
<skip />
- <!-- no translation found for accessibility_menu (316839303324695949) -->
+ <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
<skip />
- <!-- no translation found for accessibility_ime_switch_button (5032926134740456424) -->
+ <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
<skip />
- <!-- no translation found for accessibility_compatibility_zoom_button (8461115318742350699) -->
+ <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
<skip />
- <!-- no translation found for accessibility_compatibility_zoom_example (4220687294564945780) -->
+ <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
<skip />
- <!-- no translation found for accessibility_bluetooth_connected (2707027633242983370) -->
+ <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
<skip />
- <!-- no translation found for accessibility_bluetooth_disconnected (7416648669976870175) -->
+ <!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
<skip />
- <!-- no translation found for accessibility_no_battery (358343022352820946) -->
+ <!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
<skip />
- <!-- no translation found for accessibility_battery_one_bar (7774887721891057523) -->
+ <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
<skip />
- <!-- no translation found for accessibility_battery_two_bars (8500650438735009973) -->
- <skip />
- <!-- no translation found for accessibility_battery_three_bars (2302983330865040446) -->
- <skip />
- <!-- no translation found for accessibility_battery_full (8909122401720158582) -->
- <skip />
- <!-- no translation found for accessibility_no_phone (4894708937052611281) -->
- <skip />
- <!-- no translation found for accessibility_phone_one_bar (687699278132664115) -->
- <skip />
- <!-- no translation found for accessibility_phone_two_bars (8384905382804815201) -->
- <skip />
- <!-- no translation found for accessibility_phone_three_bars (8521904843919971885) -->
- <skip />
- <!-- no translation found for accessibility_phone_signal_full (6471834868580757898) -->
- <skip />
- <!-- no translation found for accessibility_no_data (4791966295096867555) -->
- <skip />
- <!-- no translation found for accessibility_data_one_bar (1415625833238273628) -->
- <skip />
- <!-- no translation found for accessibility_data_two_bars (6166018492360432091) -->
- <skip />
- <!-- no translation found for accessibility_data_three_bars (9167670452395038520) -->
- <skip />
- <!-- no translation found for accessibility_data_signal_full (2708384608124519369) -->
- <skip />
- <!-- no translation found for accessibility_no_wifi (4017628918351949575) -->
- <skip />
- <!-- no translation found for accessibility_wifi_one_bar (1914343229091303434) -->
- <skip />
- <!-- no translation found for accessibility_wifi_two_bars (7869150535859760698) -->
- <skip />
- <!-- no translation found for accessibility_wifi_three_bars (2665319332961356254) -->
- <skip />
- <!-- no translation found for accessibility_wifi_signal_full (1275764416228473932) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_gprs (1606477224486747751) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_3g (8628562305003568260) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_3.5g (8664845609981692001) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_4g (7741000750630089612) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_cdma (6132648193978823023) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_edge (4477457051631979278) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_wifi (1127208787254436420) -->
- <skip />
- <!-- no translation found for accessibility_no_sim (8274017118472455155) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_tether (4102784498140271969) -->
- <skip />
- <!-- no translation found for accessibility_airplane_mode (834748999790763092) -->
- <skip />
- <!-- no translation found for accessibility_battery_level (7451474187113371965) -->
- <skip />
- <!-- no translation found for accessibility_settings_button (7913780116850379698) -->
- <skip />
- <!-- no translation found for accessibility_notifications_button (2933903195211483438) -->
- <skip />
- <!-- no translation found for accessibility_remove_notification (4883990503785778699) -->
- <skip />
- <!-- no translation found for accessibility_gps_enabled (3511469499240123019) -->
- <skip />
- <!-- no translation found for accessibility_gps_acquiring (8959333351058967158) -->
- <skip />
- <!-- no translation found for accessibility_tty_enabled (4613200365379426561) -->
- <skip />
- <!-- no translation found for accessibility_ringer_vibrate (666585363364155055) -->
- <skip />
- <!-- no translation found for accessibility_ringer_silent (9061243307939135383) -->
+ <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
<skip />
</resources>
diff --git a/packages/SystemUI/res/values-pt-large/strings.xml b/packages/SystemUI/res/values-pt-large/strings.xml
index 92615fd..654b3c6 100644
--- a/packages/SystemUI/res/values-pt-large/strings.xml
+++ b/packages/SystemUI/res/values-pt-large/strings.xml
@@ -20,10 +20,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="status_bar_clear_all_button" msgid="4661583896803349732">"Limpar tudo"</string>
- <string name="status_bar_settings_signal_meter_disconnected" msgid="383145178755329067">"Sem conexão à Internet"</string>
- <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="2535465294437586528">"Conectado à Wi-Fi"</string>
- <string name="gps_notification_searching_text" msgid="4467935186864208249">"Buscando GPS"</string>
- <string name="gps_notification_found_text" msgid="6270628388918822956">"Localização definida por GPS"</string>
<string name="notifications_off_title" msgid="1860117696034775851">"Notificações desativadas"</string>
<string name="notifications_off_text" msgid="1439152806320786912">"Toque aqui para ativar as notificações novamente."</string>
</resources>
diff --git a/packages/SystemUI/res/values-pt-rPT-large/strings.xml b/packages/SystemUI/res/values-pt-rPT-large/strings.xml
index 5ceeae2..6fa5af3 100644
--- a/packages/SystemUI/res/values-pt-rPT-large/strings.xml
+++ b/packages/SystemUI/res/values-pt-rPT-large/strings.xml
@@ -20,10 +20,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="status_bar_clear_all_button" msgid="4661583896803349732">"Limpar td"</string>
- <string name="status_bar_settings_signal_meter_disconnected" msgid="383145178755329067">"Sem ligação internet"</string>
- <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="2535465294437586528">"Wi-Fi ligado"</string>
- <string name="gps_notification_searching_text" msgid="4467935186864208249">"A procurar GPS"</string>
- <string name="gps_notification_found_text" msgid="6270628388918822956">"Localização definida por GPS"</string>
<string name="notifications_off_title" msgid="1860117696034775851">"Notificações desativadas"</string>
<string name="notifications_off_text" msgid="1439152806320786912">"Toque aqui para voltar a ativar as notificações."</string>
</resources>
diff --git a/packages/SystemUI/res/values-pt-rPT/strings.xml b/packages/SystemUI/res/values-pt-rPT/strings.xml
index 2c6d283..ae3ce7e 100644
--- a/packages/SystemUI/res/values-pt-rPT/strings.xml
+++ b/packages/SystemUI/res/values-pt-rPT/strings.xml
@@ -62,7 +62,8 @@
<string name="compat_mode_help_header" msgid="7020175705401506719">"Compatibilidade de zoom"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Sempre que uma aplicação tiver sido concebida para ecrãs mais pequenos, aparecerá um controlo de zoom junto ao relógio."</string>
<string name="screenshot_saving_toast" msgid="8592630119048713208">"Captura de ecrã guardada na Galeria"</string>
- <string name="screenshot_failed_toast" msgid="655180965533683356">"Não foi possível guardar a captura de ecrã"</string>
+ <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
+ <skip />
<string name="usb_preference_title" msgid="6551050377388882787">"Opções de transm. de fich. USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Montar como leitor de multimédia (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Montar como câmara (PTP)"</string>
@@ -73,6 +74,8 @@
<skip />
<!-- no translation found for accessibility_menu (316839303324695949) -->
<skip />
+ <!-- no translation found for accessibility_recent (3027675523629738534) -->
+ <skip />
<!-- no translation found for accessibility_ime_switch_button (5032926134740456424) -->
<skip />
<!-- no translation found for accessibility_compatibility_zoom_button (8461115318742350699) -->
@@ -161,4 +164,24 @@
<skip />
<!-- no translation found for accessibility_ringer_silent (9061243307939135383) -->
<skip />
+ <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
+ <skip />
+ <!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
+ <skip />
+ <!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
+ <skip />
+ <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
+ <skip />
+ <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-pt/strings.xml b/packages/SystemUI/res/values-pt/strings.xml
index 29aa510..681455a 100644
--- a/packages/SystemUI/res/values-pt/strings.xml
+++ b/packages/SystemUI/res/values-pt/strings.xml
@@ -23,10 +23,8 @@
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"Limpar"</string>
<string name="status_bar_do_not_disturb_button" msgid="5812628897510997853">"Não perturbe"</string>
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Mostrar notificações"</string>
- <!-- no translation found for status_bar_recent_remove_item_title (6561944127804037619) -->
- <skip />
- <!-- no translation found for status_bar_recent_inspect_item_title (4906947311448880529) -->
- <skip />
+ <string name="status_bar_recent_remove_item_title" msgid="6561944127804037619">"Remover"</string>
+ <string name="status_bar_recent_inspect_item_title" msgid="4906947311448880529">"Inspecionar"</string>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Sem notificações"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Em andamento"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Notificações"</string>
@@ -62,103 +60,79 @@
<string name="compat_mode_help_header" msgid="7020175705401506719">"Zoom em modo de compatibilidade"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Quando um aplicativo é desenvolvido para uma tela menor, um controle de zoom é exibido perto do relógio."</string>
<string name="screenshot_saving_toast" msgid="8592630119048713208">"A captura de tela foi salva na Galeria"</string>
- <string name="screenshot_failed_toast" msgid="655180965533683356">"Não foi possível salvar a captura de tela"</string>
+ <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
+ <skip />
<string name="usb_preference_title" msgid="6551050377388882787">"Opções transf. arq. por USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Conectar como media player (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Montar como uma câmera (PTP)"</string>
<string name="installer_cd_button_title" msgid="8485631662288445893">"Instalar aplic. Android File Transfer para Mac"</string>
- <!-- no translation found for accessibility_back (567011538994429120) -->
+ <string name="accessibility_back" msgid="567011538994429120">"Voltar"</string>
+ <string name="accessibility_home" msgid="8217216074895377641">"Página inicial"</string>
+ <string name="accessibility_menu" msgid="316839303324695949">"Menu"</string>
+ <!-- no translation found for accessibility_recent (3027675523629738534) -->
<skip />
- <!-- no translation found for accessibility_home (8217216074895377641) -->
+ <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Alterar botão do método de entrada."</string>
+ <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Compatibilidade do botão de zoom."</string>
+ <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Aumentar a tela com zoom."</string>
+ <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth conectado."</string>
+ <string name="accessibility_bluetooth_disconnected" msgid="7416648669976870175">"Bluetooth desconectado."</string>
+ <string name="accessibility_no_battery" msgid="358343022352820946">"Sem bateria."</string>
+ <string name="accessibility_battery_one_bar" msgid="7774887721891057523">"Uma barra de bateria."</string>
+ <string name="accessibility_battery_two_bars" msgid="8500650438735009973">"Duas barras de bateria."</string>
+ <string name="accessibility_battery_three_bars" msgid="2302983330865040446">"Três barras de bateria."</string>
+ <string name="accessibility_battery_full" msgid="8909122401720158582">"Bateria cheia."</string>
+ <string name="accessibility_no_phone" msgid="4894708937052611281">"Sem telefone."</string>
+ <string name="accessibility_phone_one_bar" msgid="687699278132664115">"Uma barra de sinal do telefone."</string>
+ <string name="accessibility_phone_two_bars" msgid="8384905382804815201">"Duas barras de sinal do telefone."</string>
+ <string name="accessibility_phone_three_bars" msgid="8521904843919971885">"Três barras de sinal do telefone."</string>
+ <string name="accessibility_phone_signal_full" msgid="6471834868580757898">"Sinal do telefone cheio."</string>
+ <string name="accessibility_no_data" msgid="4791966295096867555">"Nenhum dado."</string>
+ <string name="accessibility_data_one_bar" msgid="1415625833238273628">"Uma barra de sinal de dados."</string>
+ <string name="accessibility_data_two_bars" msgid="6166018492360432091">"Duas barras de sinal de dados."</string>
+ <string name="accessibility_data_three_bars" msgid="9167670452395038520">"Três barras de sinal de dados."</string>
+ <string name="accessibility_data_signal_full" msgid="2708384608124519369">"Sinal de dados cheio."</string>
+ <string name="accessibility_no_wifi" msgid="4017628918351949575">"Sem WiFi."</string>
+ <string name="accessibility_wifi_one_bar" msgid="1914343229091303434">"Uma barra de sinal WiFi."</string>
+ <string name="accessibility_wifi_two_bars" msgid="7869150535859760698">"Duas barras de sinal WiFi."</string>
+ <string name="accessibility_wifi_three_bars" msgid="2665319332961356254">"Três barras de sinal WiFi."</string>
+ <string name="accessibility_wifi_signal_full" msgid="1275764416228473932">"Sinal do WiFi cheio."</string>
+ <string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
+ <string name="accessibility_data_connection_3g" msgid="8628562305003568260">"3G"</string>
+ <string name="accessibility_data_connection_3.5g" msgid="8664845609981692001">"3.5G"</string>
+ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string>
+ <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string>
+ <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
+ <string name="accessibility_data_connection_wifi" msgid="1127208787254436420">"WiFi"</string>
+ <string name="accessibility_no_sim" msgid="8274017118472455155">"Sem SIM."</string>
+ <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Vínculo Bluetooth."</string>
+ <string name="accessibility_airplane_mode" msgid="834748999790763092">"Modo para avião."</string>
+ <string name="accessibility_battery_level" msgid="7451474187113371965">"Bateria em <xliff:g id="NUMBER">%d</xliff:g>%."</string>
+ <string name="accessibility_settings_button" msgid="7913780116850379698">"Botão Configurações."</string>
+ <string name="accessibility_notifications_button" msgid="2933903195211483438">"Botão de notificação."</string>
+ <string name="accessibility_remove_notification" msgid="4883990503785778699">"Remover notificação."</string>
+ <string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS ativado."</string>
+ <string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Aquisição de GPS."</string>
+ <string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTYpewriter ativado."</string>
+ <string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Vibrar campainha."</string>
+ <string name="accessibility_ringer_silent" msgid="9061243307939135383">"Campainha silenciosa."</string>
+ <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
<skip />
- <!-- no translation found for accessibility_menu (316839303324695949) -->
+ <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
<skip />
- <!-- no translation found for accessibility_ime_switch_button (5032926134740456424) -->
+ <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
<skip />
- <!-- no translation found for accessibility_compatibility_zoom_button (8461115318742350699) -->
+ <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
<skip />
- <!-- no translation found for accessibility_compatibility_zoom_example (4220687294564945780) -->
+ <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
<skip />
- <!-- no translation found for accessibility_bluetooth_connected (2707027633242983370) -->
+ <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
<skip />
- <!-- no translation found for accessibility_bluetooth_disconnected (7416648669976870175) -->
+ <!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
<skip />
- <!-- no translation found for accessibility_no_battery (358343022352820946) -->
+ <!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
<skip />
- <!-- no translation found for accessibility_battery_one_bar (7774887721891057523) -->
+ <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
<skip />
- <!-- no translation found for accessibility_battery_two_bars (8500650438735009973) -->
- <skip />
- <!-- no translation found for accessibility_battery_three_bars (2302983330865040446) -->
- <skip />
- <!-- no translation found for accessibility_battery_full (8909122401720158582) -->
- <skip />
- <!-- no translation found for accessibility_no_phone (4894708937052611281) -->
- <skip />
- <!-- no translation found for accessibility_phone_one_bar (687699278132664115) -->
- <skip />
- <!-- no translation found for accessibility_phone_two_bars (8384905382804815201) -->
- <skip />
- <!-- no translation found for accessibility_phone_three_bars (8521904843919971885) -->
- <skip />
- <!-- no translation found for accessibility_phone_signal_full (6471834868580757898) -->
- <skip />
- <!-- no translation found for accessibility_no_data (4791966295096867555) -->
- <skip />
- <!-- no translation found for accessibility_data_one_bar (1415625833238273628) -->
- <skip />
- <!-- no translation found for accessibility_data_two_bars (6166018492360432091) -->
- <skip />
- <!-- no translation found for accessibility_data_three_bars (9167670452395038520) -->
- <skip />
- <!-- no translation found for accessibility_data_signal_full (2708384608124519369) -->
- <skip />
- <!-- no translation found for accessibility_no_wifi (4017628918351949575) -->
- <skip />
- <!-- no translation found for accessibility_wifi_one_bar (1914343229091303434) -->
- <skip />
- <!-- no translation found for accessibility_wifi_two_bars (7869150535859760698) -->
- <skip />
- <!-- no translation found for accessibility_wifi_three_bars (2665319332961356254) -->
- <skip />
- <!-- no translation found for accessibility_wifi_signal_full (1275764416228473932) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_gprs (1606477224486747751) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_3g (8628562305003568260) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_3.5g (8664845609981692001) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_4g (7741000750630089612) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_cdma (6132648193978823023) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_edge (4477457051631979278) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_wifi (1127208787254436420) -->
- <skip />
- <!-- no translation found for accessibility_no_sim (8274017118472455155) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_tether (4102784498140271969) -->
- <skip />
- <!-- no translation found for accessibility_airplane_mode (834748999790763092) -->
- <skip />
- <!-- no translation found for accessibility_battery_level (7451474187113371965) -->
- <skip />
- <!-- no translation found for accessibility_settings_button (7913780116850379698) -->
- <skip />
- <!-- no translation found for accessibility_notifications_button (2933903195211483438) -->
- <skip />
- <!-- no translation found for accessibility_remove_notification (4883990503785778699) -->
- <skip />
- <!-- no translation found for accessibility_gps_enabled (3511469499240123019) -->
- <skip />
- <!-- no translation found for accessibility_gps_acquiring (8959333351058967158) -->
- <skip />
- <!-- no translation found for accessibility_tty_enabled (4613200365379426561) -->
- <skip />
- <!-- no translation found for accessibility_ringer_vibrate (666585363364155055) -->
- <skip />
- <!-- no translation found for accessibility_ringer_silent (9061243307939135383) -->
+ <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
<skip />
</resources>
diff --git a/packages/SystemUI/res/values-rm/strings.xml b/packages/SystemUI/res/values-rm/strings.xml
index b2c8b50..cd6b41a 100644
--- a/packages/SystemUI/res/values-rm/strings.xml
+++ b/packages/SystemUI/res/values-rm/strings.xml
@@ -93,7 +93,7 @@
<skip />
<!-- no translation found for screenshot_saving_toast (8592630119048713208) -->
<skip />
- <!-- no translation found for screenshot_failed_toast (655180965533683356) -->
+ <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
<skip />
<!-- no translation found for usb_preference_title (6551050377388882787) -->
<skip />
@@ -109,6 +109,8 @@
<skip />
<!-- no translation found for accessibility_menu (316839303324695949) -->
<skip />
+ <!-- no translation found for accessibility_recent (3027675523629738534) -->
+ <skip />
<!-- no translation found for accessibility_ime_switch_button (5032926134740456424) -->
<skip />
<!-- no translation found for accessibility_compatibility_zoom_button (8461115318742350699) -->
@@ -197,4 +199,24 @@
<skip />
<!-- no translation found for accessibility_ringer_silent (9061243307939135383) -->
<skip />
+ <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
+ <skip />
+ <!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
+ <skip />
+ <!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
+ <skip />
+ <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
+ <skip />
+ <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-ro-large/strings.xml b/packages/SystemUI/res/values-ro-large/strings.xml
index 55b2b3e..d4983bc 100644
--- a/packages/SystemUI/res/values-ro-large/strings.xml
+++ b/packages/SystemUI/res/values-ro-large/strings.xml
@@ -20,10 +20,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="status_bar_clear_all_button" msgid="4661583896803349732">"Şterg. tot"</string>
- <string name="status_bar_settings_signal_meter_disconnected" msgid="383145178755329067">"Fără conex. internet"</string>
- <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="2535465294437586528">"Wi-Fi conectat"</string>
- <string name="gps_notification_searching_text" msgid="4467935186864208249">"Se caută GPS"</string>
- <string name="gps_notification_found_text" msgid="6270628388918822956">"Locaţie setată prin GPS"</string>
<string name="notifications_off_title" msgid="1860117696034775851">"Notificările sunt dezactivate"</string>
<string name="notifications_off_text" msgid="1439152806320786912">"Apăsaţi aici pentru a reactiva notificările."</string>
</resources>
diff --git a/packages/SystemUI/res/values-ro/strings.xml b/packages/SystemUI/res/values-ro/strings.xml
index 5128088..add141c 100644
--- a/packages/SystemUI/res/values-ro/strings.xml
+++ b/packages/SystemUI/res/values-ro/strings.xml
@@ -62,7 +62,8 @@
<string name="compat_mode_help_header" msgid="7020175705401506719">"Zoom de compatibilitate"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Atunci când o aplicaţie a fost concepută pentru un ecran mai mic, o comandă pentru mărire/micşorare va apărea alături de ceas."</string>
<string name="screenshot_saving_toast" msgid="8592630119048713208">"Captura de ecran a fost salvată în Galerie"</string>
- <string name="screenshot_failed_toast" msgid="655180965533683356">"Captura de ecran nu a putut fi salvată"</string>
+ <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
+ <skip />
<string name="usb_preference_title" msgid="6551050377388882787">"Opţiuni pentru transferul de fişiere prin USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Montaţi ca player media (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Montaţi drept cameră foto (PTP)"</string>
@@ -73,6 +74,8 @@
<skip />
<!-- no translation found for accessibility_menu (316839303324695949) -->
<skip />
+ <!-- no translation found for accessibility_recent (3027675523629738534) -->
+ <skip />
<!-- no translation found for accessibility_ime_switch_button (5032926134740456424) -->
<skip />
<!-- no translation found for accessibility_compatibility_zoom_button (8461115318742350699) -->
@@ -161,4 +164,24 @@
<skip />
<!-- no translation found for accessibility_ringer_silent (9061243307939135383) -->
<skip />
+ <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
+ <skip />
+ <!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
+ <skip />
+ <!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
+ <skip />
+ <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
+ <skip />
+ <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-ru-large/strings.xml b/packages/SystemUI/res/values-ru-large/strings.xml
index bafb97f..79e80a6 100644
--- a/packages/SystemUI/res/values-ru-large/strings.xml
+++ b/packages/SystemUI/res/values-ru-large/strings.xml
@@ -20,10 +20,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="status_bar_clear_all_button" msgid="4661583896803349732">"Очистить все"</string>
- <string name="status_bar_settings_signal_meter_disconnected" msgid="383145178755329067">"Нет подключения к Интернету"</string>
- <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="2535465294437586528">"Wi-Fi подключено"</string>
- <string name="gps_notification_searching_text" msgid="4467935186864208249">"Поиск GPS"</string>
- <string name="gps_notification_found_text" msgid="6270628388918822956">"Местоположение установлено с помощью GPS"</string>
<string name="notifications_off_title" msgid="1860117696034775851">"Уведомления отключены"</string>
<string name="notifications_off_text" msgid="1439152806320786912">"Нажмите здесь, чтобы снова включить уведомления."</string>
</resources>
diff --git a/packages/SystemUI/res/values-ru/strings.xml b/packages/SystemUI/res/values-ru/strings.xml
index 2f22ab4..eee42e2 100644
--- a/packages/SystemUI/res/values-ru/strings.xml
+++ b/packages/SystemUI/res/values-ru/strings.xml
@@ -62,7 +62,8 @@
<string name="compat_mode_help_header" msgid="7020175705401506719">"Масштаб и совместимость"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Если приложение рассчитано на экран меньших размеров, рядом с часами появятся средства масштабирования."</string>
<string name="screenshot_saving_toast" msgid="8592630119048713208">"Скриншот сохранен в галерее"</string>
- <string name="screenshot_failed_toast" msgid="655180965533683356">"Не удалось сохранить скриншот"</string>
+ <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
+ <skip />
<string name="usb_preference_title" msgid="6551050377388882787">"Параметры передачи через USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Подключить как мультимедийный проигрыватель (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Установить как камеру (PTP)"</string>
@@ -73,6 +74,8 @@
<skip />
<!-- no translation found for accessibility_menu (316839303324695949) -->
<skip />
+ <!-- no translation found for accessibility_recent (3027675523629738534) -->
+ <skip />
<!-- no translation found for accessibility_ime_switch_button (5032926134740456424) -->
<skip />
<!-- no translation found for accessibility_compatibility_zoom_button (8461115318742350699) -->
@@ -161,4 +164,24 @@
<skip />
<!-- no translation found for accessibility_ringer_silent (9061243307939135383) -->
<skip />
+ <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
+ <skip />
+ <!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
+ <skip />
+ <!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
+ <skip />
+ <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
+ <skip />
+ <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-sk-large/strings.xml b/packages/SystemUI/res/values-sk-large/strings.xml
index 8de74a1..ccf7543 100644
--- a/packages/SystemUI/res/values-sk-large/strings.xml
+++ b/packages/SystemUI/res/values-sk-large/strings.xml
@@ -20,10 +20,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="status_bar_clear_all_button" msgid="4661583896803349732">"Vymazať všetko"</string>
- <string name="status_bar_settings_signal_meter_disconnected" msgid="383145178755329067">"Bez prip. na Internet"</string>
- <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="2535465294437586528">"Wi-Fi: pripojené"</string>
- <string name="gps_notification_searching_text" msgid="4467935186864208249">"Vyhľadávanie satelitov GPS"</string>
- <string name="gps_notification_found_text" msgid="6270628388918822956">"Poloha nastavená pomocou GPS"</string>
<string name="notifications_off_title" msgid="1860117696034775851">"Upozornenia sú vypnuté"</string>
<string name="notifications_off_text" msgid="1439152806320786912">"Klepnutím sem upozornenia znova povolíte."</string>
</resources>
diff --git a/packages/SystemUI/res/values-sk/strings.xml b/packages/SystemUI/res/values-sk/strings.xml
index 9701572..946f426 100644
--- a/packages/SystemUI/res/values-sk/strings.xml
+++ b/packages/SystemUI/res/values-sk/strings.xml
@@ -62,7 +62,8 @@
<string name="compat_mode_help_header" msgid="7020175705401506719">"Kompatibilné priblíženie"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Ak je aplikácia navrhnutá pre menšiu obrazovku, zobrazí sa vedľa hodín ovládací prvok priblíženia."</string>
<string name="screenshot_saving_toast" msgid="8592630119048713208">"Snímka obrazovky bola uložená do Galérie"</string>
- <string name="screenshot_failed_toast" msgid="655180965533683356">"Snímku obrazovky sa nepodarilo uložiť"</string>
+ <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
+ <skip />
<string name="usb_preference_title" msgid="6551050377388882787">"Možnosti prenosu súborov USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Pripojiť ako prehrávač médií (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Pripojiť ako fotoaparát (PTP)"</string>
@@ -73,6 +74,8 @@
<skip />
<!-- no translation found for accessibility_menu (316839303324695949) -->
<skip />
+ <!-- no translation found for accessibility_recent (3027675523629738534) -->
+ <skip />
<!-- no translation found for accessibility_ime_switch_button (5032926134740456424) -->
<skip />
<!-- no translation found for accessibility_compatibility_zoom_button (8461115318742350699) -->
@@ -161,4 +164,24 @@
<skip />
<!-- no translation found for accessibility_ringer_silent (9061243307939135383) -->
<skip />
+ <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
+ <skip />
+ <!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
+ <skip />
+ <!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
+ <skip />
+ <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
+ <skip />
+ <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-sl-large/strings.xml b/packages/SystemUI/res/values-sl-large/strings.xml
index d4c7e61..3790716 100644
--- a/packages/SystemUI/res/values-sl-large/strings.xml
+++ b/packages/SystemUI/res/values-sl-large/strings.xml
@@ -20,10 +20,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="status_bar_clear_all_button" msgid="4661583896803349732">"Izbriši vse"</string>
- <string name="status_bar_settings_signal_meter_disconnected" msgid="383145178755329067">"Ni internetne pov."</string>
- <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="2535465294437586528">"Wi-Fi povezan"</string>
- <string name="gps_notification_searching_text" msgid="4467935186864208249">"Iskanje GPS-a"</string>
- <string name="gps_notification_found_text" msgid="6270628388918822956">"Lokacija nastavljena z GPS-om"</string>
<string name="notifications_off_title" msgid="1860117696034775851">"Obvestila so izklopljena"</string>
<string name="notifications_off_text" msgid="1439152806320786912">"Tapnite tukaj, da spet vklopite obvestila."</string>
</resources>
diff --git a/packages/SystemUI/res/values-sl/strings.xml b/packages/SystemUI/res/values-sl/strings.xml
index 2b89f88..bb2781d 100644
--- a/packages/SystemUI/res/values-sl/strings.xml
+++ b/packages/SystemUI/res/values-sl/strings.xml
@@ -23,10 +23,8 @@
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"Počisti"</string>
<string name="status_bar_do_not_disturb_button" msgid="5812628897510997853">"Ne moti"</string>
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Pokaži obvestila"</string>
- <!-- no translation found for status_bar_recent_remove_item_title (6561944127804037619) -->
- <skip />
- <!-- no translation found for status_bar_recent_inspect_item_title (4906947311448880529) -->
- <skip />
+ <string name="status_bar_recent_remove_item_title" msgid="6561944127804037619">"Odstrani"</string>
+ <string name="status_bar_recent_inspect_item_title" msgid="4906947311448880529">"Preverite"</string>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Ni obvestil"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Trenutno"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Obvestila"</string>
@@ -62,103 +60,79 @@
<string name="compat_mode_help_header" msgid="7020175705401506719">"Povečava združljivosti"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Če je program izdelan za manjše zaslone, se ob uri pokaže kontrolnik za povečavo."</string>
<string name="screenshot_saving_toast" msgid="8592630119048713208">"Posnetek zaslona je shranjen v galerijo"</string>
- <string name="screenshot_failed_toast" msgid="655180965533683356">"Posnetka zaslona ni bilo mogoče shraniti"</string>
+ <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
+ <skip />
<string name="usb_preference_title" msgid="6551050377388882787">"Možnosti prenosa datotek prek USB-ja"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Vpni kot predvajalnik (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Vpni kot fotoaparat (PTP)"</string>
<string name="installer_cd_button_title" msgid="8485631662288445893">"Namestite program Android File Transfer za Mac"</string>
- <!-- no translation found for accessibility_back (567011538994429120) -->
+ <string name="accessibility_back" msgid="567011538994429120">"Nazaj"</string>
+ <string name="accessibility_home" msgid="8217216074895377641">"Domača stran"</string>
+ <string name="accessibility_menu" msgid="316839303324695949">"Meni"</string>
+ <!-- no translation found for accessibility_recent (3027675523629738534) -->
<skip />
- <!-- no translation found for accessibility_home (8217216074895377641) -->
+ <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Gumb za preklo načina vnosa."</string>
+ <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Gumb povečave za združljivost."</string>
+ <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Povečava manjšega na večji zaslon."</string>
+ <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Povezava Bluetooth vzpostavljena."</string>
+ <string name="accessibility_bluetooth_disconnected" msgid="7416648669976870175">"Povezava Bluetooth prekinjena."</string>
+ <string name="accessibility_no_battery" msgid="358343022352820946">"Ni baterije."</string>
+ <string name="accessibility_battery_one_bar" msgid="7774887721891057523">"Baterija z eno črtico."</string>
+ <string name="accessibility_battery_two_bars" msgid="8500650438735009973">"Baterija z dvema črticama."</string>
+ <string name="accessibility_battery_three_bars" msgid="2302983330865040446">"Baterija s tremi črticami."</string>
+ <string name="accessibility_battery_full" msgid="8909122401720158582">"Baterija je polna."</string>
+ <string name="accessibility_no_phone" msgid="4894708937052611281">"Ni telefona."</string>
+ <string name="accessibility_phone_one_bar" msgid="687699278132664115">"Telefon z eno črtico."</string>
+ <string name="accessibility_phone_two_bars" msgid="8384905382804815201">"Telefon z dvema črticama."</string>
+ <string name="accessibility_phone_three_bars" msgid="8521904843919971885">"Telefon s tremi črticami."</string>
+ <string name="accessibility_phone_signal_full" msgid="6471834868580757898">"Signal telefona je poln."</string>
+ <string name="accessibility_no_data" msgid="4791966295096867555">"Ni podatkov."</string>
+ <string name="accessibility_data_one_bar" msgid="1415625833238273628">"Podatkovni signal z eno črtico."</string>
+ <string name="accessibility_data_two_bars" msgid="6166018492360432091">"Podatki z dvema črticama."</string>
+ <string name="accessibility_data_three_bars" msgid="9167670452395038520">"Podatki s tremi črticami."</string>
+ <string name="accessibility_data_signal_full" msgid="2708384608124519369">"Podatkovni signal poln."</string>
+ <string name="accessibility_no_wifi" msgid="4017628918351949575">"Ni povezave Wi-Fi."</string>
+ <string name="accessibility_wifi_one_bar" msgid="1914343229091303434">"WiFi z eno črtico."</string>
+ <string name="accessibility_wifi_two_bars" msgid="7869150535859760698">"Wi-Fi z dvema črticama."</string>
+ <string name="accessibility_wifi_three_bars" msgid="2665319332961356254">"WiFi s tremi črticami."</string>
+ <string name="accessibility_wifi_signal_full" msgid="1275764416228473932">"Signal Wi-Fi poln."</string>
+ <string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
+ <string name="accessibility_data_connection_3g" msgid="8628562305003568260">"3G"</string>
+ <string name="accessibility_data_connection_3.5g" msgid="8664845609981692001">"3.5G"</string>
+ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string>
+ <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string>
+ <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
+ <string name="accessibility_data_connection_wifi" msgid="1127208787254436420">"WiFi"</string>
+ <string name="accessibility_no_sim" msgid="8274017118472455155">"Ni kartice SIM."</string>
+ <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Internet prek Bluetootha."</string>
+ <string name="accessibility_airplane_mode" msgid="834748999790763092">"Način za letalo."</string>
+ <string name="accessibility_battery_level" msgid="7451474187113371965">"Baterija <xliff:g id="NUMBER">%d</xliff:g> odstotkov."</string>
+ <string name="accessibility_settings_button" msgid="7913780116850379698">"Gumb za nastavitve."</string>
+ <string name="accessibility_notifications_button" msgid="2933903195211483438">"Gumb za obvestila."</string>
+ <string name="accessibility_remove_notification" msgid="4883990503785778699">"Odstranite obvestilo."</string>
+ <string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS omogočen."</string>
+ <string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Pridobivanje GPS."</string>
+ <string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTypewriter omogočen."</string>
+ <string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Zvonjenje z vibriranjem."</string>
+ <string name="accessibility_ringer_silent" msgid="9061243307939135383">"Zvonjenje izklopljeno."</string>
+ <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
<skip />
- <!-- no translation found for accessibility_menu (316839303324695949) -->
+ <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
<skip />
- <!-- no translation found for accessibility_ime_switch_button (5032926134740456424) -->
+ <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
<skip />
- <!-- no translation found for accessibility_compatibility_zoom_button (8461115318742350699) -->
+ <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
<skip />
- <!-- no translation found for accessibility_compatibility_zoom_example (4220687294564945780) -->
+ <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
<skip />
- <!-- no translation found for accessibility_bluetooth_connected (2707027633242983370) -->
+ <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
<skip />
- <!-- no translation found for accessibility_bluetooth_disconnected (7416648669976870175) -->
+ <!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
<skip />
- <!-- no translation found for accessibility_no_battery (358343022352820946) -->
+ <!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
<skip />
- <!-- no translation found for accessibility_battery_one_bar (7774887721891057523) -->
+ <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
<skip />
- <!-- no translation found for accessibility_battery_two_bars (8500650438735009973) -->
- <skip />
- <!-- no translation found for accessibility_battery_three_bars (2302983330865040446) -->
- <skip />
- <!-- no translation found for accessibility_battery_full (8909122401720158582) -->
- <skip />
- <!-- no translation found for accessibility_no_phone (4894708937052611281) -->
- <skip />
- <!-- no translation found for accessibility_phone_one_bar (687699278132664115) -->
- <skip />
- <!-- no translation found for accessibility_phone_two_bars (8384905382804815201) -->
- <skip />
- <!-- no translation found for accessibility_phone_three_bars (8521904843919971885) -->
- <skip />
- <!-- no translation found for accessibility_phone_signal_full (6471834868580757898) -->
- <skip />
- <!-- no translation found for accessibility_no_data (4791966295096867555) -->
- <skip />
- <!-- no translation found for accessibility_data_one_bar (1415625833238273628) -->
- <skip />
- <!-- no translation found for accessibility_data_two_bars (6166018492360432091) -->
- <skip />
- <!-- no translation found for accessibility_data_three_bars (9167670452395038520) -->
- <skip />
- <!-- no translation found for accessibility_data_signal_full (2708384608124519369) -->
- <skip />
- <!-- no translation found for accessibility_no_wifi (4017628918351949575) -->
- <skip />
- <!-- no translation found for accessibility_wifi_one_bar (1914343229091303434) -->
- <skip />
- <!-- no translation found for accessibility_wifi_two_bars (7869150535859760698) -->
- <skip />
- <!-- no translation found for accessibility_wifi_three_bars (2665319332961356254) -->
- <skip />
- <!-- no translation found for accessibility_wifi_signal_full (1275764416228473932) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_gprs (1606477224486747751) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_3g (8628562305003568260) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_3.5g (8664845609981692001) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_4g (7741000750630089612) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_cdma (6132648193978823023) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_edge (4477457051631979278) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_wifi (1127208787254436420) -->
- <skip />
- <!-- no translation found for accessibility_no_sim (8274017118472455155) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_tether (4102784498140271969) -->
- <skip />
- <!-- no translation found for accessibility_airplane_mode (834748999790763092) -->
- <skip />
- <!-- no translation found for accessibility_battery_level (7451474187113371965) -->
- <skip />
- <!-- no translation found for accessibility_settings_button (7913780116850379698) -->
- <skip />
- <!-- no translation found for accessibility_notifications_button (2933903195211483438) -->
- <skip />
- <!-- no translation found for accessibility_remove_notification (4883990503785778699) -->
- <skip />
- <!-- no translation found for accessibility_gps_enabled (3511469499240123019) -->
- <skip />
- <!-- no translation found for accessibility_gps_acquiring (8959333351058967158) -->
- <skip />
- <!-- no translation found for accessibility_tty_enabled (4613200365379426561) -->
- <skip />
- <!-- no translation found for accessibility_ringer_vibrate (666585363364155055) -->
- <skip />
- <!-- no translation found for accessibility_ringer_silent (9061243307939135383) -->
+ <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
<skip />
</resources>
diff --git a/packages/SystemUI/res/values-sr-large/strings.xml b/packages/SystemUI/res/values-sr-large/strings.xml
index 3080a90..37b03d1 100644
--- a/packages/SystemUI/res/values-sr-large/strings.xml
+++ b/packages/SystemUI/res/values-sr-large/strings.xml
@@ -20,10 +20,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="status_bar_clear_all_button" msgid="4661583896803349732">"Обриши све"</string>
- <string name="status_bar_settings_signal_meter_disconnected" msgid="383145178755329067">"Нема интернет везе"</string>
- <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="2535465294437586528">"Wi-Fi је повезан"</string>
- <string name="gps_notification_searching_text" msgid="4467935186864208249">"Тражи се GPS"</string>
- <string name="gps_notification_found_text" msgid="6270628388918822956">"Локацију је подесио GPS"</string>
<string name="notifications_off_title" msgid="1860117696034775851">"Обавештења су искључена"</string>
<string name="notifications_off_text" msgid="1439152806320786912">"Додирните овде да бисте поново укључили обавештења."</string>
</resources>
diff --git a/packages/SystemUI/res/values-sr/strings.xml b/packages/SystemUI/res/values-sr/strings.xml
index fcd612f..8d1721c 100644
--- a/packages/SystemUI/res/values-sr/strings.xml
+++ b/packages/SystemUI/res/values-sr/strings.xml
@@ -62,7 +62,8 @@
<string name="compat_mode_help_header" msgid="7020175705401506719">"Компатибилно зумирање"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Када је апликација намењена мањем екрану, контрола зумирања приказује се поред сата."</string>
<string name="screenshot_saving_toast" msgid="8592630119048713208">"Снимак екрана је сачуван у Галерији"</string>
- <string name="screenshot_failed_toast" msgid="655180965533683356">"Није могуће сачувати снимак екрана"</string>
+ <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
+ <skip />
<string name="usb_preference_title" msgid="6551050377388882787">"Опције USB преноса датотека"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Прикључи као медија плејер (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Прикључи као камеру (PTP)"</string>
@@ -73,6 +74,8 @@
<skip />
<!-- no translation found for accessibility_menu (316839303324695949) -->
<skip />
+ <!-- no translation found for accessibility_recent (3027675523629738534) -->
+ <skip />
<!-- no translation found for accessibility_ime_switch_button (5032926134740456424) -->
<skip />
<!-- no translation found for accessibility_compatibility_zoom_button (8461115318742350699) -->
@@ -161,4 +164,24 @@
<skip />
<!-- no translation found for accessibility_ringer_silent (9061243307939135383) -->
<skip />
+ <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
+ <skip />
+ <!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
+ <skip />
+ <!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
+ <skip />
+ <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
+ <skip />
+ <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-sv-large/strings.xml b/packages/SystemUI/res/values-sv-large/strings.xml
index b978cb9..ddea0d4 100644
--- a/packages/SystemUI/res/values-sv-large/strings.xml
+++ b/packages/SystemUI/res/values-sv-large/strings.xml
@@ -20,10 +20,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="status_bar_clear_all_button" msgid="4661583896803349732">"Rensa alla"</string>
- <string name="status_bar_settings_signal_meter_disconnected" msgid="383145178755329067">"Ingen anslutning"</string>
- <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="2535465294437586528">"Wi-Fi-ansluten"</string>
- <string name="gps_notification_searching_text" msgid="4467935186864208249">"Sökning efter GPS pågår"</string>
- <string name="gps_notification_found_text" msgid="6270628388918822956">"Platsen har identifierats av GPS"</string>
<string name="notifications_off_title" msgid="1860117696034775851">"Meddelanden inaktiverade"</string>
<string name="notifications_off_text" msgid="1439152806320786912">"Knacka lätt här om du vill aktivera meddelanden igen."</string>
</resources>
diff --git a/packages/SystemUI/res/values-sv/strings.xml b/packages/SystemUI/res/values-sv/strings.xml
index 6f3b2bb..5f81255 100644
--- a/packages/SystemUI/res/values-sv/strings.xml
+++ b/packages/SystemUI/res/values-sv/strings.xml
@@ -62,7 +62,8 @@
<string name="compat_mode_help_header" msgid="7020175705401506719">"Zoom i kompatibilitetsläge"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"När en app är anpassad för en mindre skärm visas ett zoomreglage vid klockan."</string>
<string name="screenshot_saving_toast" msgid="8592630119048713208">"Skärmdumpen sparades i galleriet"</string>
- <string name="screenshot_failed_toast" msgid="655180965533683356">"Det gick inte att spara skärmdumpen"</string>
+ <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
+ <skip />
<string name="usb_preference_title" msgid="6551050377388882787">"Överföringsalternativ"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Montera som mediaspelare (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Montera som kamera (PTP)"</string>
@@ -73,6 +74,8 @@
<skip />
<!-- no translation found for accessibility_menu (316839303324695949) -->
<skip />
+ <!-- no translation found for accessibility_recent (3027675523629738534) -->
+ <skip />
<!-- no translation found for accessibility_ime_switch_button (5032926134740456424) -->
<skip />
<!-- no translation found for accessibility_compatibility_zoom_button (8461115318742350699) -->
@@ -161,4 +164,24 @@
<skip />
<!-- no translation found for accessibility_ringer_silent (9061243307939135383) -->
<skip />
+ <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
+ <skip />
+ <!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
+ <skip />
+ <!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
+ <skip />
+ <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
+ <skip />
+ <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-sw/strings.xml b/packages/SystemUI/res/values-sw/strings.xml
index 450157c..e944ced 100644
--- a/packages/SystemUI/res/values-sw/strings.xml
+++ b/packages/SystemUI/res/values-sw/strings.xml
@@ -83,7 +83,7 @@
<skip />
<!-- no translation found for screenshot_saving_toast (8592630119048713208) -->
<skip />
- <!-- no translation found for screenshot_failed_toast (655180965533683356) -->
+ <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
<skip />
<!-- no translation found for usb_preference_title (6551050377388882787) -->
<skip />
@@ -99,6 +99,8 @@
<skip />
<!-- no translation found for accessibility_menu (316839303324695949) -->
<skip />
+ <!-- no translation found for accessibility_recent (3027675523629738534) -->
+ <skip />
<!-- no translation found for accessibility_ime_switch_button (5032926134740456424) -->
<skip />
<!-- no translation found for accessibility_compatibility_zoom_button (8461115318742350699) -->
@@ -187,4 +189,24 @@
<skip />
<!-- no translation found for accessibility_ringer_silent (9061243307939135383) -->
<skip />
+ <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
+ <skip />
+ <!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
+ <skip />
+ <!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
+ <skip />
+ <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
+ <skip />
+ <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-th-large/strings.xml b/packages/SystemUI/res/values-th-large/strings.xml
index 1158f81..76bd846 100644
--- a/packages/SystemUI/res/values-th-large/strings.xml
+++ b/packages/SystemUI/res/values-th-large/strings.xml
@@ -20,10 +20,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="status_bar_clear_all_button" msgid="4661583896803349732">"ล้างทั้งหมด"</string>
- <string name="status_bar_settings_signal_meter_disconnected" msgid="383145178755329067">"ไม่มีการเชื่อมต่ออินเทอร์เน็ต"</string>
- <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="2535465294437586528">"เชื่อมต่อ Wi-Fi แล้ว"</string>
- <string name="gps_notification_searching_text" msgid="4467935186864208249">"กำลังค้นหา GPS"</string>
- <string name="gps_notification_found_text" msgid="6270628388918822956">"ตำแหน่งที่กำหนดโดย GPS"</string>
<string name="notifications_off_title" msgid="1860117696034775851">"การแจ้งเตือนปิดอยู่"</string>
<string name="notifications_off_text" msgid="1439152806320786912">"แตะที่นี่เพื่อเปิดการแจ้งเตือนอีกครั้ง"</string>
</resources>
diff --git a/packages/SystemUI/res/values-th/strings.xml b/packages/SystemUI/res/values-th/strings.xml
index a5315c6..2be5544 100644
--- a/packages/SystemUI/res/values-th/strings.xml
+++ b/packages/SystemUI/res/values-th/strings.xml
@@ -23,10 +23,8 @@
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"ล้างข้อมูล"</string>
<string name="status_bar_do_not_disturb_button" msgid="5812628897510997853">"ห้ามรบกวน"</string>
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"แสดงการแจ้งเตือน"</string>
- <!-- no translation found for status_bar_recent_remove_item_title (6561944127804037619) -->
- <skip />
- <!-- no translation found for status_bar_recent_inspect_item_title (4906947311448880529) -->
- <skip />
+ <string name="status_bar_recent_remove_item_title" msgid="6561944127804037619">"นำออก"</string>
+ <string name="status_bar_recent_inspect_item_title" msgid="4906947311448880529">"ตรวจสอบ"</string>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"ไม่มีการแจ้งเตือน"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"ดำเนินอยู่"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"การแจ้งเตือน"</string>
@@ -62,103 +60,79 @@
<string name="compat_mode_help_header" msgid="7020175705401506719">"ความเข้ากันได้ของการย่อ/ขยาย"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"สำหรับแอปพลิเคชันที่ออกแบบมาสำหรับหน้าจอขนาดเล็ก ตัวควบคุมการย่อ/ขยายจะปรากฏขึ้นข้างนาฬิกา"</string>
<string name="screenshot_saving_toast" msgid="8592630119048713208">"บันทึกภาพหน้าจอในแกลเลอรีแล้ว"</string>
- <string name="screenshot_failed_toast" msgid="655180965533683356">"ไม่สามารถบันทึกภาพหน้าจอ"</string>
+ <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
+ <skip />
<string name="usb_preference_title" msgid="6551050377388882787">"ตัวเลือกการถ่ายโอนไฟล์ USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"ต่อเชื่อมเป็นโปรแกรมเล่นสื่อ (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"ต่อเชื่อมเป็นกล้องถ่ายรูป (PTP)"</string>
<string name="installer_cd_button_title" msgid="8485631662288445893">"ติดตั้งแอปพลิเคชัน Android File Transfer ของ Mac"</string>
- <!-- no translation found for accessibility_back (567011538994429120) -->
+ <string name="accessibility_back" msgid="567011538994429120">"ย้อนกลับ"</string>
+ <string name="accessibility_home" msgid="8217216074895377641">"หน้าแรก"</string>
+ <string name="accessibility_menu" msgid="316839303324695949">"เมนู"</string>
+ <!-- no translation found for accessibility_recent (3027675523629738534) -->
<skip />
- <!-- no translation found for accessibility_home (8217216074895377641) -->
+ <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"ปุ่มสลับวิธีการป้อนข้อมูล"</string>
+ <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"ปุ่มซูมที่ใช้งานร่วมกันได้"</string>
+ <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"ซูมหน้าจอให้มีขนาดใหญ่ขึ้น"</string>
+ <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"เชื่อมต่อบลูทูธอยู่"</string>
+ <string name="accessibility_bluetooth_disconnected" msgid="7416648669976870175">"ไม่ได้เชื่อมต่อบลูทูธ"</string>
+ <string name="accessibility_no_battery" msgid="358343022352820946">"ไม่มีแบตเตอรี่"</string>
+ <string name="accessibility_battery_one_bar" msgid="7774887721891057523">"แบตเตอรี่หนึ่งขีด"</string>
+ <string name="accessibility_battery_two_bars" msgid="8500650438735009973">"แบตเตอรี่สองขีด"</string>
+ <string name="accessibility_battery_three_bars" msgid="2302983330865040446">"แบตเตอรี่สามขีด"</string>
+ <string name="accessibility_battery_full" msgid="8909122401720158582">"แบตเตอรี่เต็ม"</string>
+ <string name="accessibility_no_phone" msgid="4894708937052611281">"ไม่มีสัญญาณ"</string>
+ <string name="accessibility_phone_one_bar" msgid="687699278132664115">"สัญญาณโทรศัพท์หนึ่งขีด"</string>
+ <string name="accessibility_phone_two_bars" msgid="8384905382804815201">"สัญญาณโทรศัพท์สองขีด"</string>
+ <string name="accessibility_phone_three_bars" msgid="8521904843919971885">"สัญญาณโทรศัพท์สามขีด"</string>
+ <string name="accessibility_phone_signal_full" msgid="6471834868580757898">"สัญญาณโทรศัพท์เต็ม"</string>
+ <string name="accessibility_no_data" msgid="4791966295096867555">"ไม่มีข้อมูล"</string>
+ <string name="accessibility_data_one_bar" msgid="1415625833238273628">"สัญญาณข้อมูลหนึ่งขีด"</string>
+ <string name="accessibility_data_two_bars" msgid="6166018492360432091">"สัญญาณข้อมูลสองขีด"</string>
+ <string name="accessibility_data_three_bars" msgid="9167670452395038520">"สัญญาณข้อมูลสามขีด"</string>
+ <string name="accessibility_data_signal_full" msgid="2708384608124519369">"สัญญาณข้อมูลเต็ม"</string>
+ <string name="accessibility_no_wifi" msgid="4017628918351949575">"ไม่มี Wi-Fi"</string>
+ <string name="accessibility_wifi_one_bar" msgid="1914343229091303434">"สัญญาณ Wi-Fi หนึ่งขีด"</string>
+ <string name="accessibility_wifi_two_bars" msgid="7869150535859760698">"สัญญาณ Wi-Fi สองขีด"</string>
+ <string name="accessibility_wifi_three_bars" msgid="2665319332961356254">"สัญญาณ Wi-Fi สามขีด"</string>
+ <string name="accessibility_wifi_signal_full" msgid="1275764416228473932">"สัญญาณ Wi-Fi เต็ม"</string>
+ <string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
+ <string name="accessibility_data_connection_3g" msgid="8628562305003568260">"3G"</string>
+ <string name="accessibility_data_connection_3.5g" msgid="8664845609981692001">"3.5G"</string>
+ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string>
+ <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string>
+ <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"EDGE"</string>
+ <string name="accessibility_data_connection_wifi" msgid="1127208787254436420">"Wi-Fi"</string>
+ <string name="accessibility_no_sim" msgid="8274017118472455155">"ไม่มีซิมการ์ด"</string>
+ <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"การปล่อยสัญญาณบลูทูธ"</string>
+ <string name="accessibility_airplane_mode" msgid="834748999790763092">"โหมดใช้งานบนเครื่องบิน"</string>
+ <string name="accessibility_battery_level" msgid="7451474187113371965">"แบตเตอรี่ <xliff:g id="NUMBER">%d</xliff:g> เปอร์เซ็นต์"</string>
+ <string name="accessibility_settings_button" msgid="7913780116850379698">"ปุ่มการตั้งค่า"</string>
+ <string name="accessibility_notifications_button" msgid="2933903195211483438">"ปุ่มแจ้งเตือน"</string>
+ <string name="accessibility_remove_notification" msgid="4883990503785778699">"นำการแจ้งเตือนออก"</string>
+ <string name="accessibility_gps_enabled" msgid="3511469499240123019">"เปิดใช้งาน GPS อยู่"</string>
+ <string name="accessibility_gps_acquiring" msgid="8959333351058967158">"การดึงข้อมูล GPS"</string>
+ <string name="accessibility_tty_enabled" msgid="4613200365379426561">"เปิดใช้งาน TeleTypewriter อยู่"</string>
+ <string name="accessibility_ringer_vibrate" msgid="666585363364155055">"เสียงเรียกเข้าแบบสั่น"</string>
+ <string name="accessibility_ringer_silent" msgid="9061243307939135383">"เสียงเรียกเข้าแบบปิดเสียง"</string>
+ <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
<skip />
- <!-- no translation found for accessibility_menu (316839303324695949) -->
+ <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
<skip />
- <!-- no translation found for accessibility_ime_switch_button (5032926134740456424) -->
+ <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
<skip />
- <!-- no translation found for accessibility_compatibility_zoom_button (8461115318742350699) -->
+ <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
<skip />
- <!-- no translation found for accessibility_compatibility_zoom_example (4220687294564945780) -->
+ <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
<skip />
- <!-- no translation found for accessibility_bluetooth_connected (2707027633242983370) -->
+ <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
<skip />
- <!-- no translation found for accessibility_bluetooth_disconnected (7416648669976870175) -->
+ <!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
<skip />
- <!-- no translation found for accessibility_no_battery (358343022352820946) -->
+ <!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
<skip />
- <!-- no translation found for accessibility_battery_one_bar (7774887721891057523) -->
+ <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
<skip />
- <!-- no translation found for accessibility_battery_two_bars (8500650438735009973) -->
- <skip />
- <!-- no translation found for accessibility_battery_three_bars (2302983330865040446) -->
- <skip />
- <!-- no translation found for accessibility_battery_full (8909122401720158582) -->
- <skip />
- <!-- no translation found for accessibility_no_phone (4894708937052611281) -->
- <skip />
- <!-- no translation found for accessibility_phone_one_bar (687699278132664115) -->
- <skip />
- <!-- no translation found for accessibility_phone_two_bars (8384905382804815201) -->
- <skip />
- <!-- no translation found for accessibility_phone_three_bars (8521904843919971885) -->
- <skip />
- <!-- no translation found for accessibility_phone_signal_full (6471834868580757898) -->
- <skip />
- <!-- no translation found for accessibility_no_data (4791966295096867555) -->
- <skip />
- <!-- no translation found for accessibility_data_one_bar (1415625833238273628) -->
- <skip />
- <!-- no translation found for accessibility_data_two_bars (6166018492360432091) -->
- <skip />
- <!-- no translation found for accessibility_data_three_bars (9167670452395038520) -->
- <skip />
- <!-- no translation found for accessibility_data_signal_full (2708384608124519369) -->
- <skip />
- <!-- no translation found for accessibility_no_wifi (4017628918351949575) -->
- <skip />
- <!-- no translation found for accessibility_wifi_one_bar (1914343229091303434) -->
- <skip />
- <!-- no translation found for accessibility_wifi_two_bars (7869150535859760698) -->
- <skip />
- <!-- no translation found for accessibility_wifi_three_bars (2665319332961356254) -->
- <skip />
- <!-- no translation found for accessibility_wifi_signal_full (1275764416228473932) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_gprs (1606477224486747751) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_3g (8628562305003568260) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_3.5g (8664845609981692001) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_4g (7741000750630089612) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_cdma (6132648193978823023) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_edge (4477457051631979278) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_wifi (1127208787254436420) -->
- <skip />
- <!-- no translation found for accessibility_no_sim (8274017118472455155) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_tether (4102784498140271969) -->
- <skip />
- <!-- no translation found for accessibility_airplane_mode (834748999790763092) -->
- <skip />
- <!-- no translation found for accessibility_battery_level (7451474187113371965) -->
- <skip />
- <!-- no translation found for accessibility_settings_button (7913780116850379698) -->
- <skip />
- <!-- no translation found for accessibility_notifications_button (2933903195211483438) -->
- <skip />
- <!-- no translation found for accessibility_remove_notification (4883990503785778699) -->
- <skip />
- <!-- no translation found for accessibility_gps_enabled (3511469499240123019) -->
- <skip />
- <!-- no translation found for accessibility_gps_acquiring (8959333351058967158) -->
- <skip />
- <!-- no translation found for accessibility_tty_enabled (4613200365379426561) -->
- <skip />
- <!-- no translation found for accessibility_ringer_vibrate (666585363364155055) -->
- <skip />
- <!-- no translation found for accessibility_ringer_silent (9061243307939135383) -->
+ <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
<skip />
</resources>
diff --git a/packages/SystemUI/res/values-tl-large/strings.xml b/packages/SystemUI/res/values-tl-large/strings.xml
index 5049fb2..821121f 100644
--- a/packages/SystemUI/res/values-tl-large/strings.xml
+++ b/packages/SystemUI/res/values-tl-large/strings.xml
@@ -20,10 +20,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="status_bar_clear_all_button" msgid="4661583896803349732">"I-clear"</string>
- <string name="status_bar_settings_signal_meter_disconnected" msgid="383145178755329067">"Wala koneksyon net"</string>
- <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="2535465294437586528">"Konektado ang Wi-Fi"</string>
- <string name="gps_notification_searching_text" msgid="4467935186864208249">"Naghahanap ng GPS"</string>
- <string name="gps_notification_found_text" msgid="6270628388918822956">"Lokasyong itinatakda ng GPS"</string>
<string name="notifications_off_title" msgid="1860117696034775851">"Naka-off ang mga notification"</string>
<string name="notifications_off_text" msgid="1439152806320786912">"Mag-tap dito upang i-on muli ang mga notification."</string>
</resources>
diff --git a/packages/SystemUI/res/values-tl/strings.xml b/packages/SystemUI/res/values-tl/strings.xml
index d44f82e..736231d 100644
--- a/packages/SystemUI/res/values-tl/strings.xml
+++ b/packages/SystemUI/res/values-tl/strings.xml
@@ -23,10 +23,8 @@
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"I-clear"</string>
<string name="status_bar_do_not_disturb_button" msgid="5812628897510997853">"Huwag gambalain"</string>
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Magpakita ng notification"</string>
- <!-- no translation found for status_bar_recent_remove_item_title (6561944127804037619) -->
- <skip />
- <!-- no translation found for status_bar_recent_inspect_item_title (4906947311448880529) -->
- <skip />
+ <string name="status_bar_recent_remove_item_title" msgid="6561944127804037619">"Alisin"</string>
+ <string name="status_bar_recent_inspect_item_title" msgid="4906947311448880529">"Siyasatin"</string>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Walang mga notification"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Nagpapatuloy"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Mga Notification"</string>
@@ -62,103 +60,79 @@
<string name="compat_mode_help_header" msgid="7020175705401506719">"Zoom sa Pagiging Tugma"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Kapag nakadisenyo ang isang app para sa mas maliit na screen, isang kontrol ng zoom ang lalabas sa may orasan."</string>
<string name="screenshot_saving_toast" msgid="8592630119048713208">"Na-save ang screenshot sa Gallery"</string>
- <string name="screenshot_failed_toast" msgid="655180965533683356">"Hindi ma-save ang screenshot"</string>
+ <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
+ <skip />
<string name="usb_preference_title" msgid="6551050377388882787">"Opsyon paglipat ng USB file"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"I-mount bilang isang media player (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"I-mount bilang camera (PTP)"</string>
<string name="installer_cd_button_title" msgid="8485631662288445893">"I-install Android File Transfer para sa Mac"</string>
- <!-- no translation found for accessibility_back (567011538994429120) -->
+ <string name="accessibility_back" msgid="567011538994429120">"Bumalik"</string>
+ <string name="accessibility_home" msgid="8217216074895377641">"Home"</string>
+ <string name="accessibility_menu" msgid="316839303324695949">"Menu"</string>
+ <!-- no translation found for accessibility_recent (3027675523629738534) -->
<skip />
- <!-- no translation found for accessibility_home (8217216074895377641) -->
+ <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Ilipat ang button ng pamamaraan ng pag-input."</string>
+ <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Button ng zoom ng compatibility."</string>
+ <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Mag-zoom nang mas maliit sa mas malaking screen."</string>
+ <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Nakakonekta ang Bluetooth."</string>
+ <string name="accessibility_bluetooth_disconnected" msgid="7416648669976870175">"Nadiskonekta ang Bluetooth."</string>
+ <string name="accessibility_no_battery" msgid="358343022352820946">"Walang baterya."</string>
+ <string name="accessibility_battery_one_bar" msgid="7774887721891057523">"Baterya isang bar."</string>
+ <string name="accessibility_battery_two_bars" msgid="8500650438735009973">"Baterya dalawang bar."</string>
+ <string name="accessibility_battery_three_bars" msgid="2302983330865040446">"Baterya tatlong bar."</string>
+ <string name="accessibility_battery_full" msgid="8909122401720158582">"Puno na ang baterya."</string>
+ <string name="accessibility_no_phone" msgid="4894708937052611281">"Walang telepono."</string>
+ <string name="accessibility_phone_one_bar" msgid="687699278132664115">"Telepono isang bar."</string>
+ <string name="accessibility_phone_two_bars" msgid="8384905382804815201">"Telepono dalawang bar."</string>
+ <string name="accessibility_phone_three_bars" msgid="8521904843919971885">"Telepono tatlong bar."</string>
+ <string name="accessibility_phone_signal_full" msgid="6471834868580757898">"Puno ang signal ng telepono."</string>
+ <string name="accessibility_no_data" msgid="4791966295096867555">"Walang data."</string>
+ <string name="accessibility_data_one_bar" msgid="1415625833238273628">"Data isang bar."</string>
+ <string name="accessibility_data_two_bars" msgid="6166018492360432091">"Data dalawang bar."</string>
+ <string name="accessibility_data_three_bars" msgid="9167670452395038520">"Data tatlong bar."</string>
+ <string name="accessibility_data_signal_full" msgid="2708384608124519369">"Puno ang signal ng data."</string>
+ <string name="accessibility_no_wifi" msgid="4017628918351949575">"Walang WiFi."</string>
+ <string name="accessibility_wifi_one_bar" msgid="1914343229091303434">"WiFi isang bar."</string>
+ <string name="accessibility_wifi_two_bars" msgid="7869150535859760698">"WiFi dalawang bar."</string>
+ <string name="accessibility_wifi_three_bars" msgid="2665319332961356254">"WiFi tatlong bar."</string>
+ <string name="accessibility_wifi_signal_full" msgid="1275764416228473932">"Puno ang signal ng WiFi."</string>
+ <string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
+ <string name="accessibility_data_connection_3g" msgid="8628562305003568260">"3G"</string>
+ <string name="accessibility_data_connection_3.5g" msgid="8664845609981692001">"3.5G"</string>
+ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string>
+ <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string>
+ <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
+ <string name="accessibility_data_connection_wifi" msgid="1127208787254436420">"WiFi"</string>
+ <string name="accessibility_no_sim" msgid="8274017118472455155">"Walang SIM."</string>
+ <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Pag-tether ng Bluetooth."</string>
+ <string name="accessibility_airplane_mode" msgid="834748999790763092">"Airplane mode"</string>
+ <string name="accessibility_battery_level" msgid="7451474187113371965">"Baterya <xliff:g id="NUMBER">%d</xliff:g> (na) porsyento."</string>
+ <string name="accessibility_settings_button" msgid="7913780116850379698">"Button ng mga setting."</string>
+ <string name="accessibility_notifications_button" msgid="2933903195211483438">"Button ng mga notification."</string>
+ <string name="accessibility_remove_notification" msgid="4883990503785778699">"Alisin ang notification."</string>
+ <string name="accessibility_gps_enabled" msgid="3511469499240123019">"Pinagana ang GPS."</string>
+ <string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Nag-a-acquire ang GPS."</string>
+ <string name="accessibility_tty_enabled" msgid="4613200365379426561">"Pinagana ang TeleTypewriter."</string>
+ <string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Naka-vibrate ang ringer."</string>
+ <string name="accessibility_ringer_silent" msgid="9061243307939135383">"Naka-silent ang ringer."</string>
+ <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
<skip />
- <!-- no translation found for accessibility_menu (316839303324695949) -->
+ <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
<skip />
- <!-- no translation found for accessibility_ime_switch_button (5032926134740456424) -->
+ <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
<skip />
- <!-- no translation found for accessibility_compatibility_zoom_button (8461115318742350699) -->
+ <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
<skip />
- <!-- no translation found for accessibility_compatibility_zoom_example (4220687294564945780) -->
+ <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
<skip />
- <!-- no translation found for accessibility_bluetooth_connected (2707027633242983370) -->
+ <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
<skip />
- <!-- no translation found for accessibility_bluetooth_disconnected (7416648669976870175) -->
+ <!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
<skip />
- <!-- no translation found for accessibility_no_battery (358343022352820946) -->
+ <!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
<skip />
- <!-- no translation found for accessibility_battery_one_bar (7774887721891057523) -->
+ <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
<skip />
- <!-- no translation found for accessibility_battery_two_bars (8500650438735009973) -->
- <skip />
- <!-- no translation found for accessibility_battery_three_bars (2302983330865040446) -->
- <skip />
- <!-- no translation found for accessibility_battery_full (8909122401720158582) -->
- <skip />
- <!-- no translation found for accessibility_no_phone (4894708937052611281) -->
- <skip />
- <!-- no translation found for accessibility_phone_one_bar (687699278132664115) -->
- <skip />
- <!-- no translation found for accessibility_phone_two_bars (8384905382804815201) -->
- <skip />
- <!-- no translation found for accessibility_phone_three_bars (8521904843919971885) -->
- <skip />
- <!-- no translation found for accessibility_phone_signal_full (6471834868580757898) -->
- <skip />
- <!-- no translation found for accessibility_no_data (4791966295096867555) -->
- <skip />
- <!-- no translation found for accessibility_data_one_bar (1415625833238273628) -->
- <skip />
- <!-- no translation found for accessibility_data_two_bars (6166018492360432091) -->
- <skip />
- <!-- no translation found for accessibility_data_three_bars (9167670452395038520) -->
- <skip />
- <!-- no translation found for accessibility_data_signal_full (2708384608124519369) -->
- <skip />
- <!-- no translation found for accessibility_no_wifi (4017628918351949575) -->
- <skip />
- <!-- no translation found for accessibility_wifi_one_bar (1914343229091303434) -->
- <skip />
- <!-- no translation found for accessibility_wifi_two_bars (7869150535859760698) -->
- <skip />
- <!-- no translation found for accessibility_wifi_three_bars (2665319332961356254) -->
- <skip />
- <!-- no translation found for accessibility_wifi_signal_full (1275764416228473932) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_gprs (1606477224486747751) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_3g (8628562305003568260) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_3.5g (8664845609981692001) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_4g (7741000750630089612) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_cdma (6132648193978823023) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_edge (4477457051631979278) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_wifi (1127208787254436420) -->
- <skip />
- <!-- no translation found for accessibility_no_sim (8274017118472455155) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_tether (4102784498140271969) -->
- <skip />
- <!-- no translation found for accessibility_airplane_mode (834748999790763092) -->
- <skip />
- <!-- no translation found for accessibility_battery_level (7451474187113371965) -->
- <skip />
- <!-- no translation found for accessibility_settings_button (7913780116850379698) -->
- <skip />
- <!-- no translation found for accessibility_notifications_button (2933903195211483438) -->
- <skip />
- <!-- no translation found for accessibility_remove_notification (4883990503785778699) -->
- <skip />
- <!-- no translation found for accessibility_gps_enabled (3511469499240123019) -->
- <skip />
- <!-- no translation found for accessibility_gps_acquiring (8959333351058967158) -->
- <skip />
- <!-- no translation found for accessibility_tty_enabled (4613200365379426561) -->
- <skip />
- <!-- no translation found for accessibility_ringer_vibrate (666585363364155055) -->
- <skip />
- <!-- no translation found for accessibility_ringer_silent (9061243307939135383) -->
+ <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
<skip />
</resources>
diff --git a/packages/SystemUI/res/values-tr-large/strings.xml b/packages/SystemUI/res/values-tr-large/strings.xml
index f38e962..8149970 100644
--- a/packages/SystemUI/res/values-tr-large/strings.xml
+++ b/packages/SystemUI/res/values-tr-large/strings.xml
@@ -20,10 +20,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="status_bar_clear_all_button" msgid="4661583896803349732">"Tümü temzl"</string>
- <string name="status_bar_settings_signal_meter_disconnected" msgid="383145178755329067">"İnternet bağlantısı yok"</string>
- <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="2535465294437586528">"Kablosuz bağlandı"</string>
- <string name="gps_notification_searching_text" msgid="4467935186864208249">"GPS aranıyor"</string>
- <string name="gps_notification_found_text" msgid="6270628388918822956">"Konum GPS ile belirlendi"</string>
<string name="notifications_off_title" msgid="1860117696034775851">"Bildirimler kapalı"</string>
<string name="notifications_off_text" msgid="1439152806320786912">"Bildirimleri tekrar açmak için buraya hafifçe vurun."</string>
</resources>
diff --git a/packages/SystemUI/res/values-tr/strings.xml b/packages/SystemUI/res/values-tr/strings.xml
index 308c434..6028181 100644
--- a/packages/SystemUI/res/values-tr/strings.xml
+++ b/packages/SystemUI/res/values-tr/strings.xml
@@ -23,10 +23,8 @@
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"Temizle"</string>
<string name="status_bar_do_not_disturb_button" msgid="5812628897510997853">"Rahatsız etmeyin"</string>
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Bildirimleri göster"</string>
- <!-- no translation found for status_bar_recent_remove_item_title (6561944127804037619) -->
- <skip />
- <!-- no translation found for status_bar_recent_inspect_item_title (4906947311448880529) -->
- <skip />
+ <string name="status_bar_recent_remove_item_title" msgid="6561944127804037619">"Kaldır"</string>
+ <string name="status_bar_recent_inspect_item_title" msgid="4906947311448880529">"Araştır"</string>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Bildirim yok"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Sürüyor"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Bildirimler"</string>
@@ -62,103 +60,79 @@
<string name="compat_mode_help_header" msgid="7020175705401506719">"Uyumluluk Zum\'u"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Uygulama küçük bir ekran için tasarlanmışsa saatin yanında bir yakınlaştırma denetimi görünür."</string>
<string name="screenshot_saving_toast" msgid="8592630119048713208">"Ekran görüntüsü Galeri\'ye kaydedildi"</string>
- <string name="screenshot_failed_toast" msgid="655180965533683356">"Ekran görüntüsü kaydedilemedi"</string>
+ <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
+ <skip />
<string name="usb_preference_title" msgid="6551050377388882787">"USB dosya aktarım seçenekleri"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Medya oynatıcı olarak ekle (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Kamera olarak ekle (PTP)"</string>
<string name="installer_cd_button_title" msgid="8485631662288445893">"Mac için Android Dosya Aktarımı uygulamasını yükle"</string>
- <!-- no translation found for accessibility_back (567011538994429120) -->
+ <string name="accessibility_back" msgid="567011538994429120">"Geri"</string>
+ <string name="accessibility_home" msgid="8217216074895377641">"Ana Sayfa"</string>
+ <string name="accessibility_menu" msgid="316839303324695949">"Menü"</string>
+ <!-- no translation found for accessibility_recent (3027675523629738534) -->
<skip />
- <!-- no translation found for accessibility_home (8217216074895377641) -->
+ <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Giriş yöntemini değiştirme düğmesi."</string>
+ <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Uyumluluk yakınlaştırma düğmesi."</string>
+ <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Daha büyük ekrana daha küçük yakınlaştır."</string>
+ <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth bağlandı."</string>
+ <string name="accessibility_bluetooth_disconnected" msgid="7416648669976870175">"Bluetooth bağlantısı kesildi."</string>
+ <string name="accessibility_no_battery" msgid="358343022352820946">"Pil yok."</string>
+ <string name="accessibility_battery_one_bar" msgid="7774887721891057523">"Pil gücü bir çubuk."</string>
+ <string name="accessibility_battery_two_bars" msgid="8500650438735009973">"Pil gücü iki çubuk."</string>
+ <string name="accessibility_battery_three_bars" msgid="2302983330865040446">"Pil gücü üç çubuk."</string>
+ <string name="accessibility_battery_full" msgid="8909122401720158582">"Pil tam dolu."</string>
+ <string name="accessibility_no_phone" msgid="4894708937052611281">"Telefon sinyali yok."</string>
+ <string name="accessibility_phone_one_bar" msgid="687699278132664115">"Telefon sinyali bir çubuk."</string>
+ <string name="accessibility_phone_two_bars" msgid="8384905382804815201">"Telefon sinyali iki çubuk."</string>
+ <string name="accessibility_phone_three_bars" msgid="8521904843919971885">"Telefon sinyali üç çubuk."</string>
+ <string name="accessibility_phone_signal_full" msgid="6471834868580757898">"Telefon sinyali tam."</string>
+ <string name="accessibility_no_data" msgid="4791966295096867555">"Veri yok."</string>
+ <string name="accessibility_data_one_bar" msgid="1415625833238273628">"Veri sinyali bir çubuk."</string>
+ <string name="accessibility_data_two_bars" msgid="6166018492360432091">"Veri sinyali iki çubuk."</string>
+ <string name="accessibility_data_three_bars" msgid="9167670452395038520">"Veri sinyali üç çubuk."</string>
+ <string name="accessibility_data_signal_full" msgid="2708384608124519369">"Veri sinyali tam."</string>
+ <string name="accessibility_no_wifi" msgid="4017628918351949575">"Kablosuz sinyali yok"</string>
+ <string name="accessibility_wifi_one_bar" msgid="1914343229091303434">"Kablosuz sinyali bir çubuk."</string>
+ <string name="accessibility_wifi_two_bars" msgid="7869150535859760698">"Kablosuz sinyali iki çubuk."</string>
+ <string name="accessibility_wifi_three_bars" msgid="2665319332961356254">"Kablosuz sinyali üç çubuk."</string>
+ <string name="accessibility_wifi_signal_full" msgid="1275764416228473932">"Kablosuz sinyali tam."</string>
+ <string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
+ <string name="accessibility_data_connection_3g" msgid="8628562305003568260">"3G"</string>
+ <string name="accessibility_data_connection_3.5g" msgid="8664845609981692001">"3.5G"</string>
+ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string>
+ <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string>
+ <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
+ <string name="accessibility_data_connection_wifi" msgid="1127208787254436420">"Kablosuz"</string>
+ <string name="accessibility_no_sim" msgid="8274017118472455155">"SIM kart yok."</string>
+ <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Bluetooth tethering."</string>
+ <string name="accessibility_airplane_mode" msgid="834748999790763092">"Uçak modu."</string>
+ <string name="accessibility_battery_level" msgid="7451474187113371965">"Pil yüzdesi: <xliff:g id="NUMBER">%d</xliff:g>"</string>
+ <string name="accessibility_settings_button" msgid="7913780116850379698">"Ayarlar düğmesi"</string>
+ <string name="accessibility_notifications_button" msgid="2933903195211483438">"Bildirim düğmesi."</string>
+ <string name="accessibility_remove_notification" msgid="4883990503785778699">"Bildirimi kaldır."</string>
+ <string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS etkin."</string>
+ <string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPS alınıyor."</string>
+ <string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTypewriter etkin."</string>
+ <string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Zil programı titreşim."</string>
+ <string name="accessibility_ringer_silent" msgid="9061243307939135383">"Zil programı sessiz."</string>
+ <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
<skip />
- <!-- no translation found for accessibility_menu (316839303324695949) -->
+ <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
<skip />
- <!-- no translation found for accessibility_ime_switch_button (5032926134740456424) -->
+ <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
<skip />
- <!-- no translation found for accessibility_compatibility_zoom_button (8461115318742350699) -->
+ <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
<skip />
- <!-- no translation found for accessibility_compatibility_zoom_example (4220687294564945780) -->
+ <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
<skip />
- <!-- no translation found for accessibility_bluetooth_connected (2707027633242983370) -->
+ <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
<skip />
- <!-- no translation found for accessibility_bluetooth_disconnected (7416648669976870175) -->
+ <!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
<skip />
- <!-- no translation found for accessibility_no_battery (358343022352820946) -->
+ <!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
<skip />
- <!-- no translation found for accessibility_battery_one_bar (7774887721891057523) -->
+ <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
<skip />
- <!-- no translation found for accessibility_battery_two_bars (8500650438735009973) -->
- <skip />
- <!-- no translation found for accessibility_battery_three_bars (2302983330865040446) -->
- <skip />
- <!-- no translation found for accessibility_battery_full (8909122401720158582) -->
- <skip />
- <!-- no translation found for accessibility_no_phone (4894708937052611281) -->
- <skip />
- <!-- no translation found for accessibility_phone_one_bar (687699278132664115) -->
- <skip />
- <!-- no translation found for accessibility_phone_two_bars (8384905382804815201) -->
- <skip />
- <!-- no translation found for accessibility_phone_three_bars (8521904843919971885) -->
- <skip />
- <!-- no translation found for accessibility_phone_signal_full (6471834868580757898) -->
- <skip />
- <!-- no translation found for accessibility_no_data (4791966295096867555) -->
- <skip />
- <!-- no translation found for accessibility_data_one_bar (1415625833238273628) -->
- <skip />
- <!-- no translation found for accessibility_data_two_bars (6166018492360432091) -->
- <skip />
- <!-- no translation found for accessibility_data_three_bars (9167670452395038520) -->
- <skip />
- <!-- no translation found for accessibility_data_signal_full (2708384608124519369) -->
- <skip />
- <!-- no translation found for accessibility_no_wifi (4017628918351949575) -->
- <skip />
- <!-- no translation found for accessibility_wifi_one_bar (1914343229091303434) -->
- <skip />
- <!-- no translation found for accessibility_wifi_two_bars (7869150535859760698) -->
- <skip />
- <!-- no translation found for accessibility_wifi_three_bars (2665319332961356254) -->
- <skip />
- <!-- no translation found for accessibility_wifi_signal_full (1275764416228473932) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_gprs (1606477224486747751) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_3g (8628562305003568260) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_3.5g (8664845609981692001) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_4g (7741000750630089612) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_cdma (6132648193978823023) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_edge (4477457051631979278) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_wifi (1127208787254436420) -->
- <skip />
- <!-- no translation found for accessibility_no_sim (8274017118472455155) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_tether (4102784498140271969) -->
- <skip />
- <!-- no translation found for accessibility_airplane_mode (834748999790763092) -->
- <skip />
- <!-- no translation found for accessibility_battery_level (7451474187113371965) -->
- <skip />
- <!-- no translation found for accessibility_settings_button (7913780116850379698) -->
- <skip />
- <!-- no translation found for accessibility_notifications_button (2933903195211483438) -->
- <skip />
- <!-- no translation found for accessibility_remove_notification (4883990503785778699) -->
- <skip />
- <!-- no translation found for accessibility_gps_enabled (3511469499240123019) -->
- <skip />
- <!-- no translation found for accessibility_gps_acquiring (8959333351058967158) -->
- <skip />
- <!-- no translation found for accessibility_tty_enabled (4613200365379426561) -->
- <skip />
- <!-- no translation found for accessibility_ringer_vibrate (666585363364155055) -->
- <skip />
- <!-- no translation found for accessibility_ringer_silent (9061243307939135383) -->
+ <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
<skip />
</resources>
diff --git a/packages/SystemUI/res/values-uk-large/strings.xml b/packages/SystemUI/res/values-uk-large/strings.xml
index 367dd5c..5cf696e 100644
--- a/packages/SystemUI/res/values-uk-large/strings.xml
+++ b/packages/SystemUI/res/values-uk-large/strings.xml
@@ -20,10 +20,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="status_bar_clear_all_button" msgid="4661583896803349732">"Очист. все"</string>
- <string name="status_bar_settings_signal_meter_disconnected" msgid="383145178755329067">"Немає з’єднання"</string>
- <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="2535465294437586528">"Wi-Fi під’єднано"</string>
- <string name="gps_notification_searching_text" msgid="4467935186864208249">"Виконується пошук за допомогою GPS"</string>
- <string name="gps_notification_found_text" msgid="6270628388918822956">"Місцезнаходження встановлено за допомогою GPS"</string>
<string name="notifications_off_title" msgid="1860117696034775851">"Сповіщення вимкнено"</string>
<string name="notifications_off_text" msgid="1439152806320786912">"Торкніться тут, щоб знову ввімкнути сповіщення."</string>
</resources>
diff --git a/packages/SystemUI/res/values-uk/strings.xml b/packages/SystemUI/res/values-uk/strings.xml
index 6687d0c..d1ec471 100644
--- a/packages/SystemUI/res/values-uk/strings.xml
+++ b/packages/SystemUI/res/values-uk/strings.xml
@@ -23,10 +23,8 @@
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"Очист."</string>
<string name="status_bar_do_not_disturb_button" msgid="5812628897510997853">"Не турбувати"</string>
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Показувати сповіщення"</string>
- <!-- no translation found for status_bar_recent_remove_item_title (6561944127804037619) -->
- <skip />
- <!-- no translation found for status_bar_recent_inspect_item_title (4906947311448880529) -->
- <skip />
+ <string name="status_bar_recent_remove_item_title" msgid="6561944127804037619">"Видалити"</string>
+ <string name="status_bar_recent_inspect_item_title" msgid="4906947311448880529">"Перевірити"</string>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Немає сповіщень"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Поточні"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Сповіщення"</string>
@@ -62,103 +60,79 @@
<string name="compat_mode_help_header" msgid="7020175705401506719">"Елемент керування масштабом для сумісності"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Якщо програму призначено для менших екранів, елемент керування масштабом буде відображатися біля годинника."</string>
<string name="screenshot_saving_toast" msgid="8592630119048713208">"Знімок екрана збережено в Галереї"</string>
- <string name="screenshot_failed_toast" msgid="655180965533683356">"Неможливо зберегти знімок екрана"</string>
+ <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
+ <skip />
<string name="usb_preference_title" msgid="6551050377388882787">"Парам.передав.файлів через USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Підключити як медіапрогравач (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Підключити як камеру (PTP)"</string>
<string name="installer_cd_button_title" msgid="8485631662288445893">"Установити програму Android File Transfer для Mac"</string>
- <!-- no translation found for accessibility_back (567011538994429120) -->
+ <string name="accessibility_back" msgid="567011538994429120">"Назад"</string>
+ <string name="accessibility_home" msgid="8217216074895377641">"Домашня сторінка"</string>
+ <string name="accessibility_menu" msgid="316839303324695949">"Меню"</string>
+ <!-- no translation found for accessibility_recent (3027675523629738534) -->
<skip />
- <!-- no translation found for accessibility_home (8217216074895377641) -->
+ <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Кнопка перемикання методу введення."</string>
+ <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Кнопка масштабування сумісності."</string>
+ <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Збільшення екрана."</string>
+ <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth під’єднано."</string>
+ <string name="accessibility_bluetooth_disconnected" msgid="7416648669976870175">"Bluetooth від’єднано."</string>
+ <string name="accessibility_no_battery" msgid="358343022352820946">"Немає заряду батареї."</string>
+ <string name="accessibility_battery_one_bar" msgid="7774887721891057523">"Одна смужка заряду батареї."</string>
+ <string name="accessibility_battery_two_bars" msgid="8500650438735009973">"Дві смужки заряду батареї."</string>
+ <string name="accessibility_battery_three_bars" msgid="2302983330865040446">"Три смужки заряду баратеї."</string>
+ <string name="accessibility_battery_full" msgid="8909122401720158582">"Повний заряд батареї."</string>
+ <string name="accessibility_no_phone" msgid="4894708937052611281">"Немає сигналу телефону."</string>
+ <string name="accessibility_phone_one_bar" msgid="687699278132664115">"Одна смужка сигналу телефону."</string>
+ <string name="accessibility_phone_two_bars" msgid="8384905382804815201">"Дві смужки сигналу телефону."</string>
+ <string name="accessibility_phone_three_bars" msgid="8521904843919971885">"Три смужки сигналу телефону."</string>
+ <string name="accessibility_phone_signal_full" msgid="6471834868580757898">"Максимальний сигнал телефону."</string>
+ <string name="accessibility_no_data" msgid="4791966295096867555">"Немає сигналу даних."</string>
+ <string name="accessibility_data_one_bar" msgid="1415625833238273628">"Одна смужка сигналу даних."</string>
+ <string name="accessibility_data_two_bars" msgid="6166018492360432091">"Дві смужки сигналу даних."</string>
+ <string name="accessibility_data_three_bars" msgid="9167670452395038520">"Три смужки сигналу даних."</string>
+ <string name="accessibility_data_signal_full" msgid="2708384608124519369">"Максимальний сигнал даних."</string>
+ <string name="accessibility_no_wifi" msgid="4017628918351949575">"Немає сигналу Wi-Fi."</string>
+ <string name="accessibility_wifi_one_bar" msgid="1914343229091303434">"Одна смужка сигналу WiFi."</string>
+ <string name="accessibility_wifi_two_bars" msgid="7869150535859760698">"Дві смужки сигналу WiFi."</string>
+ <string name="accessibility_wifi_three_bars" msgid="2665319332961356254">"Три смужки сигналу WiFi."</string>
+ <string name="accessibility_wifi_signal_full" msgid="1275764416228473932">"Максимальний сигнал Wi-Fi."</string>
+ <string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
+ <string name="accessibility_data_connection_3g" msgid="8628562305003568260">"3G"</string>
+ <string name="accessibility_data_connection_3.5g" msgid="8664845609981692001">"3.5G"</string>
+ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string>
+ <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string>
+ <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
+ <string name="accessibility_data_connection_wifi" msgid="1127208787254436420">"WiFi"</string>
+ <string name="accessibility_no_sim" msgid="8274017118472455155">"Немає SIM-карти."</string>
+ <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Прив’язка Bluetooth."</string>
+ <string name="accessibility_airplane_mode" msgid="834748999790763092">"Режим польоту."</string>
+ <string name="accessibility_battery_level" msgid="7451474187113371965">"Відсотків батареї: <xliff:g id="NUMBER">%d</xliff:g>."</string>
+ <string name="accessibility_settings_button" msgid="7913780116850379698">"Кнопка налаштувань."</string>
+ <string name="accessibility_notifications_button" msgid="2933903195211483438">"Кнопка сповіщень."</string>
+ <string name="accessibility_remove_notification" msgid="4883990503785778699">"Видалити сповіщення."</string>
+ <string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS увімкнено."</string>
+ <string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Отримання GPS."</string>
+ <string name="accessibility_tty_enabled" msgid="4613200365379426561">"Телетайп увімкнено."</string>
+ <string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Дзвінок на вібросигналі."</string>
+ <string name="accessibility_ringer_silent" msgid="9061243307939135383">"Дзвінок беззвучний."</string>
+ <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
<skip />
- <!-- no translation found for accessibility_menu (316839303324695949) -->
+ <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
<skip />
- <!-- no translation found for accessibility_ime_switch_button (5032926134740456424) -->
+ <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
<skip />
- <!-- no translation found for accessibility_compatibility_zoom_button (8461115318742350699) -->
+ <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
<skip />
- <!-- no translation found for accessibility_compatibility_zoom_example (4220687294564945780) -->
+ <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
<skip />
- <!-- no translation found for accessibility_bluetooth_connected (2707027633242983370) -->
+ <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
<skip />
- <!-- no translation found for accessibility_bluetooth_disconnected (7416648669976870175) -->
+ <!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
<skip />
- <!-- no translation found for accessibility_no_battery (358343022352820946) -->
+ <!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
<skip />
- <!-- no translation found for accessibility_battery_one_bar (7774887721891057523) -->
+ <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
<skip />
- <!-- no translation found for accessibility_battery_two_bars (8500650438735009973) -->
- <skip />
- <!-- no translation found for accessibility_battery_three_bars (2302983330865040446) -->
- <skip />
- <!-- no translation found for accessibility_battery_full (8909122401720158582) -->
- <skip />
- <!-- no translation found for accessibility_no_phone (4894708937052611281) -->
- <skip />
- <!-- no translation found for accessibility_phone_one_bar (687699278132664115) -->
- <skip />
- <!-- no translation found for accessibility_phone_two_bars (8384905382804815201) -->
- <skip />
- <!-- no translation found for accessibility_phone_three_bars (8521904843919971885) -->
- <skip />
- <!-- no translation found for accessibility_phone_signal_full (6471834868580757898) -->
- <skip />
- <!-- no translation found for accessibility_no_data (4791966295096867555) -->
- <skip />
- <!-- no translation found for accessibility_data_one_bar (1415625833238273628) -->
- <skip />
- <!-- no translation found for accessibility_data_two_bars (6166018492360432091) -->
- <skip />
- <!-- no translation found for accessibility_data_three_bars (9167670452395038520) -->
- <skip />
- <!-- no translation found for accessibility_data_signal_full (2708384608124519369) -->
- <skip />
- <!-- no translation found for accessibility_no_wifi (4017628918351949575) -->
- <skip />
- <!-- no translation found for accessibility_wifi_one_bar (1914343229091303434) -->
- <skip />
- <!-- no translation found for accessibility_wifi_two_bars (7869150535859760698) -->
- <skip />
- <!-- no translation found for accessibility_wifi_three_bars (2665319332961356254) -->
- <skip />
- <!-- no translation found for accessibility_wifi_signal_full (1275764416228473932) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_gprs (1606477224486747751) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_3g (8628562305003568260) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_3.5g (8664845609981692001) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_4g (7741000750630089612) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_cdma (6132648193978823023) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_edge (4477457051631979278) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_wifi (1127208787254436420) -->
- <skip />
- <!-- no translation found for accessibility_no_sim (8274017118472455155) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_tether (4102784498140271969) -->
- <skip />
- <!-- no translation found for accessibility_airplane_mode (834748999790763092) -->
- <skip />
- <!-- no translation found for accessibility_battery_level (7451474187113371965) -->
- <skip />
- <!-- no translation found for accessibility_settings_button (7913780116850379698) -->
- <skip />
- <!-- no translation found for accessibility_notifications_button (2933903195211483438) -->
- <skip />
- <!-- no translation found for accessibility_remove_notification (4883990503785778699) -->
- <skip />
- <!-- no translation found for accessibility_gps_enabled (3511469499240123019) -->
- <skip />
- <!-- no translation found for accessibility_gps_acquiring (8959333351058967158) -->
- <skip />
- <!-- no translation found for accessibility_tty_enabled (4613200365379426561) -->
- <skip />
- <!-- no translation found for accessibility_ringer_vibrate (666585363364155055) -->
- <skip />
- <!-- no translation found for accessibility_ringer_silent (9061243307939135383) -->
+ <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
<skip />
</resources>
diff --git a/packages/SystemUI/res/values-vi-large/strings.xml b/packages/SystemUI/res/values-vi-large/strings.xml
index 569d70f..bb2393d 100644
--- a/packages/SystemUI/res/values-vi-large/strings.xml
+++ b/packages/SystemUI/res/values-vi-large/strings.xml
@@ -20,10 +20,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="status_bar_clear_all_button" msgid="4661583896803349732">"Xóa tất cả"</string>
- <string name="status_bar_settings_signal_meter_disconnected" msgid="383145178755329067">"Không có k.nối Internet"</string>
- <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="2535465294437586528">"Đã kết nối Wi-Fi"</string>
- <string name="gps_notification_searching_text" msgid="4467935186864208249">"Đang tìm kiếm GPS"</string>
- <string name="gps_notification_found_text" msgid="6270628388918822956">"Vị trí đặt bởi GPS"</string>
<string name="notifications_off_title" msgid="1860117696034775851">"Tắt thông báo"</string>
<string name="notifications_off_text" msgid="1439152806320786912">"Chạm vào đây để bật lại thông báo."</string>
</resources>
diff --git a/packages/SystemUI/res/values-vi/strings.xml b/packages/SystemUI/res/values-vi/strings.xml
index 5bca34b..1ec6fd6 100644
--- a/packages/SystemUI/res/values-vi/strings.xml
+++ b/packages/SystemUI/res/values-vi/strings.xml
@@ -23,10 +23,8 @@
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"Xoá"</string>
<string name="status_bar_do_not_disturb_button" msgid="5812628897510997853">"Không làm phiền"</string>
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Hiển thị thông báo"</string>
- <!-- no translation found for status_bar_recent_remove_item_title (6561944127804037619) -->
- <skip />
- <!-- no translation found for status_bar_recent_inspect_item_title (4906947311448880529) -->
- <skip />
+ <string name="status_bar_recent_remove_item_title" msgid="6561944127804037619">"Xóa"</string>
+ <string name="status_bar_recent_inspect_item_title" msgid="4906947311448880529">"Kiểm tra"</string>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Không có thông báo nào"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Đang diễn ra"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Thông báo"</string>
@@ -62,103 +60,79 @@
<string name="compat_mode_help_header" msgid="7020175705401506719">"Thu phóng tương thích"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Khi ứng dụng được thiết kế cho một màn hình nhỏ hơn, điều khiển thu phóng sẽ xuất hiện bên cạnh đồng hồ."</string>
<string name="screenshot_saving_toast" msgid="8592630119048713208">"Đã lưu ảnh chụp màn hình vào Thư viện"</string>
- <string name="screenshot_failed_toast" msgid="655180965533683356">"Không thể lưu ảnh chụp màn hình"</string>
+ <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
+ <skip />
<string name="usb_preference_title" msgid="6551050377388882787">"Tùy chọn truyền tệp USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Gắn như một trình phát đa phương tiện (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Gắn như một máy ảnh (PTP)"</string>
<string name="installer_cd_button_title" msgid="8485631662288445893">"Cài đặt ứng dụng Truyền tệp của Android dành cho Mac"</string>
- <!-- no translation found for accessibility_back (567011538994429120) -->
+ <string name="accessibility_back" msgid="567011538994429120">"Quay lại"</string>
+ <string name="accessibility_home" msgid="8217216074895377641">"Trang chủ"</string>
+ <string name="accessibility_menu" msgid="316839303324695949">"Trình đơn"</string>
+ <!-- no translation found for accessibility_recent (3027675523629738534) -->
<skip />
- <!-- no translation found for accessibility_home (8217216074895377641) -->
+ <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Nút chuyển phương thức nhập."</string>
+ <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Nút thu phóng khả năng tương thích."</string>
+ <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Thu phóng màn hình lớn hơn hoặc nhỏ hơn."</string>
+ <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Đã kết nối bluetooth."</string>
+ <string name="accessibility_bluetooth_disconnected" msgid="7416648669976870175">"Bluetooth bị ngắt kết nối."</string>
+ <string name="accessibility_no_battery" msgid="358343022352820946">"Không có pin."</string>
+ <string name="accessibility_battery_one_bar" msgid="7774887721891057523">"Mức pin một vạch."</string>
+ <string name="accessibility_battery_two_bars" msgid="8500650438735009973">"Mức pin hai vạch."</string>
+ <string name="accessibility_battery_three_bars" msgid="2302983330865040446">"Mức pin ba vạch."</string>
+ <string name="accessibility_battery_full" msgid="8909122401720158582">"Mức pin đầy."</string>
+ <string name="accessibility_no_phone" msgid="4894708937052611281">"Không có điện thoại nào."</string>
+ <string name="accessibility_phone_one_bar" msgid="687699278132664115">"Tín hiệu điện thoại một vạch."</string>
+ <string name="accessibility_phone_two_bars" msgid="8384905382804815201">"Tín hiệu điện thoại hai vạch."</string>
+ <string name="accessibility_phone_three_bars" msgid="8521904843919971885">"Tín hiệu điện thoại ba vạch."</string>
+ <string name="accessibility_phone_signal_full" msgid="6471834868580757898">"Tín hiệu điện thoại đầy đủ."</string>
+ <string name="accessibility_no_data" msgid="4791966295096867555">"Không có dữ liệu."</string>
+ <string name="accessibility_data_one_bar" msgid="1415625833238273628">"Tín hiệu dữ liệu một vạch."</string>
+ <string name="accessibility_data_two_bars" msgid="6166018492360432091">"Tín hiệu dữ liệu hai vạch."</string>
+ <string name="accessibility_data_three_bars" msgid="9167670452395038520">"Tín hiệu dữ liệu ba vạch."</string>
+ <string name="accessibility_data_signal_full" msgid="2708384608124519369">"Tín hiệu dữ liệu đầy đủ."</string>
+ <string name="accessibility_no_wifi" msgid="4017628918351949575">"Không có WiFi."</string>
+ <string name="accessibility_wifi_one_bar" msgid="1914343229091303434">"Tín hiệu WiFi một vạch."</string>
+ <string name="accessibility_wifi_two_bars" msgid="7869150535859760698">"Tín hiệu WiFi hai vạch."</string>
+ <string name="accessibility_wifi_three_bars" msgid="2665319332961356254">"Tín hiệu WiFi ba vạch."</string>
+ <string name="accessibility_wifi_signal_full" msgid="1275764416228473932">"Tín hiệu WiFi đầy đủ."</string>
+ <string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
+ <string name="accessibility_data_connection_3g" msgid="8628562305003568260">"3G"</string>
+ <string name="accessibility_data_connection_3.5g" msgid="8664845609981692001">"3.5G"</string>
+ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string>
+ <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string>
+ <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
+ <string name="accessibility_data_connection_wifi" msgid="1127208787254436420">"WiFi"</string>
+ <string name="accessibility_no_sim" msgid="8274017118472455155">"Không có SIM nào."</string>
+ <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Chia sẻ kết nối Bluetooth."</string>
+ <string name="accessibility_airplane_mode" msgid="834748999790763092">"Chế độ trên máy bay."</string>
+ <string name="accessibility_battery_level" msgid="7451474187113371965">"<xliff:g id="NUMBER">%d</xliff:g> phần trăm pin."</string>
+ <string name="accessibility_settings_button" msgid="7913780116850379698">"Nút cài đặt."</string>
+ <string name="accessibility_notifications_button" msgid="2933903195211483438">"Nút thông báo."</string>
+ <string name="accessibility_remove_notification" msgid="4883990503785778699">"Xóa thông báo."</string>
+ <string name="accessibility_gps_enabled" msgid="3511469499240123019">"Đã bật GPS."</string>
+ <string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Giành được GPS."</string>
+ <string name="accessibility_tty_enabled" msgid="4613200365379426561">"Đã bật TeleTypewriter."</string>
+ <string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Chuông rung."</string>
+ <string name="accessibility_ringer_silent" msgid="9061243307939135383">"Chuông im lặng."</string>
+ <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
<skip />
- <!-- no translation found for accessibility_menu (316839303324695949) -->
+ <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
<skip />
- <!-- no translation found for accessibility_ime_switch_button (5032926134740456424) -->
+ <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
<skip />
- <!-- no translation found for accessibility_compatibility_zoom_button (8461115318742350699) -->
+ <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
<skip />
- <!-- no translation found for accessibility_compatibility_zoom_example (4220687294564945780) -->
+ <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
<skip />
- <!-- no translation found for accessibility_bluetooth_connected (2707027633242983370) -->
+ <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
<skip />
- <!-- no translation found for accessibility_bluetooth_disconnected (7416648669976870175) -->
+ <!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
<skip />
- <!-- no translation found for accessibility_no_battery (358343022352820946) -->
+ <!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
<skip />
- <!-- no translation found for accessibility_battery_one_bar (7774887721891057523) -->
+ <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
<skip />
- <!-- no translation found for accessibility_battery_two_bars (8500650438735009973) -->
- <skip />
- <!-- no translation found for accessibility_battery_three_bars (2302983330865040446) -->
- <skip />
- <!-- no translation found for accessibility_battery_full (8909122401720158582) -->
- <skip />
- <!-- no translation found for accessibility_no_phone (4894708937052611281) -->
- <skip />
- <!-- no translation found for accessibility_phone_one_bar (687699278132664115) -->
- <skip />
- <!-- no translation found for accessibility_phone_two_bars (8384905382804815201) -->
- <skip />
- <!-- no translation found for accessibility_phone_three_bars (8521904843919971885) -->
- <skip />
- <!-- no translation found for accessibility_phone_signal_full (6471834868580757898) -->
- <skip />
- <!-- no translation found for accessibility_no_data (4791966295096867555) -->
- <skip />
- <!-- no translation found for accessibility_data_one_bar (1415625833238273628) -->
- <skip />
- <!-- no translation found for accessibility_data_two_bars (6166018492360432091) -->
- <skip />
- <!-- no translation found for accessibility_data_three_bars (9167670452395038520) -->
- <skip />
- <!-- no translation found for accessibility_data_signal_full (2708384608124519369) -->
- <skip />
- <!-- no translation found for accessibility_no_wifi (4017628918351949575) -->
- <skip />
- <!-- no translation found for accessibility_wifi_one_bar (1914343229091303434) -->
- <skip />
- <!-- no translation found for accessibility_wifi_two_bars (7869150535859760698) -->
- <skip />
- <!-- no translation found for accessibility_wifi_three_bars (2665319332961356254) -->
- <skip />
- <!-- no translation found for accessibility_wifi_signal_full (1275764416228473932) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_gprs (1606477224486747751) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_3g (8628562305003568260) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_3.5g (8664845609981692001) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_4g (7741000750630089612) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_cdma (6132648193978823023) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_edge (4477457051631979278) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_wifi (1127208787254436420) -->
- <skip />
- <!-- no translation found for accessibility_no_sim (8274017118472455155) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_tether (4102784498140271969) -->
- <skip />
- <!-- no translation found for accessibility_airplane_mode (834748999790763092) -->
- <skip />
- <!-- no translation found for accessibility_battery_level (7451474187113371965) -->
- <skip />
- <!-- no translation found for accessibility_settings_button (7913780116850379698) -->
- <skip />
- <!-- no translation found for accessibility_notifications_button (2933903195211483438) -->
- <skip />
- <!-- no translation found for accessibility_remove_notification (4883990503785778699) -->
- <skip />
- <!-- no translation found for accessibility_gps_enabled (3511469499240123019) -->
- <skip />
- <!-- no translation found for accessibility_gps_acquiring (8959333351058967158) -->
- <skip />
- <!-- no translation found for accessibility_tty_enabled (4613200365379426561) -->
- <skip />
- <!-- no translation found for accessibility_ringer_vibrate (666585363364155055) -->
- <skip />
- <!-- no translation found for accessibility_ringer_silent (9061243307939135383) -->
+ <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
<skip />
</resources>
diff --git a/packages/SystemUI/res/values-zh-rCN-large/strings.xml b/packages/SystemUI/res/values-zh-rCN-large/strings.xml
index fcd4dbc..2eccba9 100644
--- a/packages/SystemUI/res/values-zh-rCN-large/strings.xml
+++ b/packages/SystemUI/res/values-zh-rCN-large/strings.xml
@@ -20,10 +20,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="status_bar_clear_all_button" msgid="4661583896803349732">"全部清除"</string>
- <string name="status_bar_settings_signal_meter_disconnected" msgid="383145178755329067">"未连接互联网"</string>
- <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="2535465294437586528">"Wi-Fi 已连接"</string>
- <string name="gps_notification_searching_text" msgid="4467935186864208249">"正在搜索 GPS"</string>
- <string name="gps_notification_found_text" msgid="6270628388918822956">"已通过 GPS 确定位置"</string>
<string name="notifications_off_title" msgid="1860117696034775851">"通知功能已停用"</string>
<string name="notifications_off_text" msgid="1439152806320786912">"点按此处可重新启用通知功能。"</string>
</resources>
diff --git a/packages/SystemUI/res/values-zh-rCN/strings.xml b/packages/SystemUI/res/values-zh-rCN/strings.xml
index dfab6d7..5ffaaab 100644
--- a/packages/SystemUI/res/values-zh-rCN/strings.xml
+++ b/packages/SystemUI/res/values-zh-rCN/strings.xml
@@ -62,7 +62,8 @@
<string name="compat_mode_help_header" msgid="7020175705401506719">"兼容性缩放"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"如果应用程序是针对较小屏幕设计的,则时钟旁会显示缩放控件。"</string>
<string name="screenshot_saving_toast" msgid="8592630119048713208">"屏幕截图已保存到“图库”"</string>
- <string name="screenshot_failed_toast" msgid="655180965533683356">"无法保存屏幕截图"</string>
+ <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
+ <skip />
<string name="usb_preference_title" msgid="6551050377388882787">"USB 文件传输选项"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"作为媒体播放器 (MTP) 装载"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"作为摄像头 (PTP) 装载"</string>
@@ -73,6 +74,8 @@
<skip />
<!-- no translation found for accessibility_menu (316839303324695949) -->
<skip />
+ <!-- no translation found for accessibility_recent (3027675523629738534) -->
+ <skip />
<!-- no translation found for accessibility_ime_switch_button (5032926134740456424) -->
<skip />
<!-- no translation found for accessibility_compatibility_zoom_button (8461115318742350699) -->
@@ -161,4 +164,24 @@
<skip />
<!-- no translation found for accessibility_ringer_silent (9061243307939135383) -->
<skip />
+ <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
+ <skip />
+ <!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
+ <skip />
+ <!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
+ <skip />
+ <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
+ <skip />
+ <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-zh-rTW-large/strings.xml b/packages/SystemUI/res/values-zh-rTW-large/strings.xml
index aba7453..bf1c0a0 100644
--- a/packages/SystemUI/res/values-zh-rTW-large/strings.xml
+++ b/packages/SystemUI/res/values-zh-rTW-large/strings.xml
@@ -20,10 +20,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="status_bar_clear_all_button" msgid="4661583896803349732">"全部清除"</string>
- <string name="status_bar_settings_signal_meter_disconnected" msgid="383145178755329067">"沒有網際網路連線"</string>
- <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="2535465294437586528">"Wi-Fi 已連線"</string>
- <string name="gps_notification_searching_text" msgid="4467935186864208249">"正在搜尋 GPS"</string>
- <string name="gps_notification_found_text" msgid="6270628388918822956">"GPS 已定位"</string>
<string name="notifications_off_title" msgid="1860117696034775851">"關閉通知"</string>
<string name="notifications_off_text" msgid="1439152806320786912">"輕按這裡即可重新開啟通知。"</string>
</resources>
diff --git a/packages/SystemUI/res/values-zh-rTW/strings.xml b/packages/SystemUI/res/values-zh-rTW/strings.xml
index 854d89d..032df88 100644
--- a/packages/SystemUI/res/values-zh-rTW/strings.xml
+++ b/packages/SystemUI/res/values-zh-rTW/strings.xml
@@ -62,7 +62,8 @@
<string name="compat_mode_help_header" msgid="7020175705401506719">"相容性縮放"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"執行專為較小螢幕設計的應用程式時,系統會在時鐘旁顯示縮放控制項。"</string>
<string name="screenshot_saving_toast" msgid="8592630119048713208">"螢幕擷取畫面已儲存至圖片庫"</string>
- <string name="screenshot_failed_toast" msgid="655180965533683356">"無法儲存螢幕擷取畫面"</string>
+ <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
+ <skip />
<string name="usb_preference_title" msgid="6551050377388882787">"USB 檔案傳輸選項"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"掛接為媒體播放器 (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"掛接為相機 (PTP)"</string>
@@ -73,6 +74,8 @@
<skip />
<!-- no translation found for accessibility_menu (316839303324695949) -->
<skip />
+ <!-- no translation found for accessibility_recent (3027675523629738534) -->
+ <skip />
<!-- no translation found for accessibility_ime_switch_button (5032926134740456424) -->
<skip />
<!-- no translation found for accessibility_compatibility_zoom_button (8461115318742350699) -->
@@ -161,4 +164,24 @@
<skip />
<!-- no translation found for accessibility_ringer_silent (9061243307939135383) -->
<skip />
+ <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
+ <skip />
+ <!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
+ <skip />
+ <!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
+ <skip />
+ <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
+ <skip />
+ <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-zu/strings.xml b/packages/SystemUI/res/values-zu/strings.xml
index 05268bf..a114b69 100644
--- a/packages/SystemUI/res/values-zu/strings.xml
+++ b/packages/SystemUI/res/values-zu/strings.xml
@@ -83,7 +83,7 @@
<skip />
<!-- no translation found for screenshot_saving_toast (8592630119048713208) -->
<skip />
- <!-- no translation found for screenshot_failed_toast (655180965533683356) -->
+ <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
<skip />
<!-- no translation found for usb_preference_title (6551050377388882787) -->
<skip />
@@ -99,6 +99,8 @@
<skip />
<!-- no translation found for accessibility_menu (316839303324695949) -->
<skip />
+ <!-- no translation found for accessibility_recent (3027675523629738534) -->
+ <skip />
<!-- no translation found for accessibility_ime_switch_button (5032926134740456424) -->
<skip />
<!-- no translation found for accessibility_compatibility_zoom_button (8461115318742350699) -->
@@ -187,4 +189,24 @@
<skip />
<!-- no translation found for accessibility_ringer_silent (9061243307939135383) -->
<skip />
+ <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_mobile_title (1046047248844821202) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_title (2086815304858964954) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog (6524467913290900042) -->
+ <skip />
+ <!-- no translation found for data_usage_disabled_dialog_enable (7729772039208664606) -->
+ <skip />
+ <!-- no translation found for status_bar_settings_signal_meter_disconnected (1940231521274147771) -->
+ <skip />
+ <!-- no translation found for status_bar_settings_signal_meter_wifi_nossid (6557486452774597820) -->
+ <skip />
+ <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
+ <skip />
+ <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml
index b02015d..ba1aea3 100644
--- a/packages/SystemUI/res/values/dimens.xml
+++ b/packages/SystemUI/res/values/dimens.xml
@@ -57,4 +57,7 @@
<!-- opacity at which Notification icons will be drawn in the status bar -->
<item type="dimen" name="status_bar_icon_drawing_alpha">40%</item>
+
+ <!-- gap on either side of status bar notification icons -->
+ <dimen name="status_bar_icon_padding">0dp</dimen>
</resources>
diff --git a/core/java/com/android/internal/service/wallpaper/ImageWallpaper.java b/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java
similarity index 78%
rename from core/java/com/android/internal/service/wallpaper/ImageWallpaper.java
rename to packages/SystemUI/src/com/android/systemui/ImageWallpaper.java
index 45f3bc1..7cc5ff7 100644
--- a/core/java/com/android/internal/service/wallpaper/ImageWallpaper.java
+++ b/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java
@@ -14,23 +14,19 @@
* limitations under the License.
*/
-package com.android.internal.service.wallpaper;
+package com.android.systemui;
import java.io.IOException;
-import com.android.internal.view.WindowManagerPolicyThread;
-
import android.app.WallpaperManager;
import android.graphics.Canvas;
import android.graphics.Rect;
import android.graphics.Region.Op;
import android.graphics.drawable.Drawable;
import android.os.Handler;
-import android.os.HandlerThread;
-import android.os.Looper;
-import android.os.Process;
import android.service.wallpaper.WallpaperService;
import android.util.Log;
+import android.util.Slog;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.content.Context;
@@ -45,40 +41,27 @@
private static final String TAG = "ImageWallpaper";
private static final boolean DEBUG = false;
+ static final boolean FIXED_SIZED_SURFACE = true;
+
WallpaperManager mWallpaperManager;
- private HandlerThread mThread;
private Handler mHandler;
@Override
public void onCreate() {
super.onCreate();
mWallpaperManager = (WallpaperManager) getSystemService(WALLPAPER_SERVICE);
- Looper looper = WindowManagerPolicyThread.getLooper();
- if (looper == null) {
- mThread = new HandlerThread("Wallpaper", Process.THREAD_PRIORITY_FOREGROUND);
- mThread.start();
- looper = mThread.getLooper();
- }
- setCallbackLooper(looper);
- mHandler = new Handler(looper);
+ mHandler = new Handler();
}
public Engine onCreateEngine() {
return new DrawableEngine();
}
- @Override
- public void onDestroy() {
- super.onDestroy();
- if (mThread != null) {
- mThread.quit();
- }
- }
-
class DrawableEngine extends Engine {
private final Object mLock = new Object();
private WallpaperObserver mReceiver;
Drawable mBackground;
+ int mBackgroundWidth = -1, mBackgroundHeight = -1;
float mXOffset;
float mYOffset;
@@ -95,7 +78,9 @@
}
synchronized (mLock) {
- updateWallpaperLocked();
+ mBackgroundWidth = mBackgroundHeight = -1;
+ mBackground = null;
+ mRedrawNeeded = true;
drawFrameLocked();
}
}
@@ -113,10 +98,6 @@
registerReceiver(mReceiver, filter, null, mHandler);
updateSurfaceSize(surfaceHolder);
-
- synchronized (mLock) {
- updateWallpaperLocked();
- }
}
@Override
@@ -135,11 +116,14 @@
}
void updateSurfaceSize(SurfaceHolder surfaceHolder) {
- surfaceHolder.setFixedSize(getDesiredMinimumWidth(), getDesiredMinimumHeight());
- // Used a fixed size surface, because we are special. We can do
- // this because we know the current design of window animations doesn't
- // cause this to break.
- //surfaceHolder.setSizeFromLayout();
+ if (FIXED_SIZED_SURFACE) {
+ // Used a fixed size surface, because we are special. We can do
+ // this because we know the current design of window animations doesn't
+ // cause this to break.
+ surfaceHolder.setFixedSize(getDesiredMinimumWidth(), getDesiredMinimumHeight());
+ } else {
+ surfaceHolder.setSizeFromLayout();
+ }
}
@Override
@@ -216,15 +200,18 @@
return;
}
+ if (mBackgroundWidth < 0 || mBackgroundHeight < 0) {
+ // If we don't yet know the size of the wallpaper bitmap,
+ // we need to get it now.
+ updateWallpaperLocked();
+ }
+
SurfaceHolder sh = getSurfaceHolder();
final Rect frame = sh.getSurfaceFrame();
- final Drawable background = mBackground;
final int dw = frame.width();
final int dh = frame.height();
- final int bw = background != null ? background.getIntrinsicWidth() : 0;
- final int bh = background != null ? background.getIntrinsicHeight() : 0;
- final int availw = dw - bw;
- final int availh = dh - bh;
+ final int availw = dw - mBackgroundWidth;
+ final int availh = dh - mBackgroundHeight;
int xPixels = availw < 0 ? (int)(availw * mXOffset + .5f) : (availw / 2);
int yPixels = availh < 0 ? (int)(availh * mYOffset + .5f) : (availh / 2);
@@ -241,6 +228,14 @@
mLastXTranslation = xPixels;
mLastYTranslation = yPixels;
+ if (mBackground == null) {
+ // If we somehow got to this point after we have last flushed
+ // the wallpaper, well we really need it to draw again. So
+ // seems like we need to reload it. Ouch.
+ updateWallpaperLocked();
+ }
+
+ //Slog.i(TAG, "************** DRAWING WALLAPER ******************");
Canvas c = sh.lockCanvas();
if (c != null) {
try {
@@ -251,20 +246,30 @@
c.translate(xPixels, yPixels);
if (availw < 0 || availh < 0) {
c.save(Canvas.CLIP_SAVE_FLAG);
- c.clipRect(0, 0, bw, bh, Op.DIFFERENCE);
+ c.clipRect(0, 0, mBackgroundWidth, mBackgroundHeight, Op.DIFFERENCE);
c.drawColor(0xff000000);
c.restore();
}
- if (background != null) {
- background.draw(c);
+ if (mBackground != null) {
+ mBackground.draw(c);
}
} finally {
sh.unlockCanvasAndPost(c);
}
}
+
+ if (FIXED_SIZED_SURFACE) {
+ // If the surface is fixed-size, we should only need to
+ // draw it once and then we'll let the window manager
+ // position it appropriately. As such, we no longer needed
+ // the loaded bitmap. Yay!
+ mBackground = null;
+ mWallpaperManager.forgetLoadedWallpaper();
+ }
}
void updateWallpaperLocked() {
+ //Slog.i(TAG, "************** LOADING WALLAPER ******************");
Throwable exception = null;
try {
mBackground = mWallpaperManager.getFastDrawable();
@@ -286,7 +291,8 @@
Log.w(TAG, "Unable reset to default wallpaper!", ex);
}
}
- mRedrawNeeded = true;
+ mBackgroundWidth = mBackground != null ? mBackground.getIntrinsicWidth() : 0;
+ mBackgroundHeight = mBackground != null ? mBackground.getIntrinsicHeight() : 0;
}
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/recent/RecentsPanelView.java b/packages/SystemUI/src/com/android/systemui/recent/RecentsPanelView.java
index c896046..d74b548 100644
--- a/packages/SystemUI/src/com/android/systemui/recent/RecentsPanelView.java
+++ b/packages/SystemUI/src/com/android/systemui/recent/RecentsPanelView.java
@@ -501,6 +501,7 @@
new RectF(mGlowBitmapPaddingLeftPx, mGlowBitmapPaddingTopPx,
outBitmap.getWidth() - mGlowBitmapPaddingRightPx,
outBitmap.getHeight() - mGlowBitmapPaddingBottomPx), paint);
+ canvas.setBitmap(null);
}
return outBitmap;
}
diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java b/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java
index 3a47e6e..fc21929 100644
--- a/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java
+++ b/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java
@@ -294,6 +294,7 @@
c.rotate(360f - degrees);
c.translate(-dims[0] / 2, -dims[1] / 2);
c.drawBitmap(mScreenBitmap, 0, 0, null);
+ c.setBitmap(null);
mScreenBitmap = ss;
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/IconMerger.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/IconMerger.java
index f6aa159..20215bd 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/IconMerger.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/IconMerger.java
@@ -44,14 +44,15 @@
mMoreView = new StatusBarIconView(context, "more", null);
mMoreView.set(mMoreIcon);
- addView(mMoreView, 0, new LinearLayout.LayoutParams(mIconSize, mIconSize));
+ super.addView(mMoreView, 0, new LinearLayout.LayoutParams(mIconSize, mIconSize));
+ }
+
+ public void addView(StatusBarIconView v, int index, LinearLayout.LayoutParams p) {
+ super.addView(v, index+1, p);
}
public void addView(StatusBarIconView v, int index) {
- if (index == 0) {
- throw new RuntimeException("Attempt to put view before the more view: " + v);
- }
- addView(v, index, new LinearLayout.LayoutParams(mIconSize, mIconSize));
+ super.addView(v, index+1, new LinearLayout.LayoutParams(mIconSize, mIconSize));
}
@Override
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
index f8ceb8f..18026f1 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
@@ -32,6 +32,7 @@
import android.graphics.PixelFormat;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
+import android.graphics.drawable.LayerDrawable;
import android.net.Uri;
import android.os.Bundle;
import android.os.IBinder;
@@ -114,7 +115,9 @@
LocationController mLocationController;
NetworkController mNetworkController;
- int mIconSize;
+ int mNaturalBarHeight = -1;
+ int mIconSize = -1;
+ int mIconHPadding = -1;
Display mDisplay;
IWindowManager mWindowManager;
@@ -138,17 +141,14 @@
View mExpandedContents;
// top bar
TextView mNoNotificationsTitle;
- TextView mClearButton;
+ View mClearButton;
// drag bar
CloseDragHandle mCloseView;
- // ongoing
- NotificationData mOngoing = new NotificationData();
- TextView mOngoingTitle;
- ViewGroup mOngoingItems;
- // latest
- NotificationData mLatest = new NotificationData();
- TextView mLatestTitle;
- ViewGroup mLatestItems;
+
+ // all notifications
+ NotificationData mNotificationData = new NotificationData();
+ ViewGroup mPile;
+
// position
int[] mPositionTmp = new int[2];
boolean mExpanded;
@@ -246,7 +246,7 @@
Resources res = context.getResources();
- mIconSize = res.getDimensionPixelSize(com.android.internal.R.dimen.status_bar_icon_size);
+ loadDimens();
ExpandedView expanded = (ExpandedView)View.inflate(context,
R.layout.status_bar_expanded, null);
@@ -299,19 +299,13 @@
mExpandedDialog = new ExpandedDialog(context);
mExpandedView = expanded;
mExpandedContents = expanded.findViewById(R.id.notificationLinearLayout);
- mOngoingTitle = (TextView)expanded.findViewById(R.id.ongoingTitle);
- mOngoingItems = (ViewGroup)expanded.findViewById(R.id.ongoingItems);
- mLatestTitle = (TextView)expanded.findViewById(R.id.latestTitle);
- mLatestItems = (ViewGroup)expanded.findViewById(R.id.latestItems);
+ mPile = (ViewGroup)expanded.findViewById(R.id.latestItems);
mNoNotificationsTitle = (TextView)expanded.findViewById(R.id.noNotificationsTitle);
- mClearButton = (TextView)expanded.findViewById(R.id.clear_all_button);
+ mClearButton = expanded.findViewById(R.id.clear_all_button);
mClearButton.setOnClickListener(mClearButtonListener);
mScrollView = (ScrollView)expanded.findViewById(R.id.scroll);
mNotificationLinearLayout = expanded.findViewById(R.id.notificationLinearLayout);
- mOngoingTitle.setVisibility(View.GONE);
- mLatestTitle.setVisibility(View.GONE);
-
mTicker = new MyTicker(context, sb);
TickerView tickerView = (TickerView)sb.findViewById(R.id.tickerText);
@@ -563,7 +557,7 @@
View button = mIntruderAlertView.findViewById(R.id.intruder_alert_content);
button.setOnClickListener(
- new Launcher(notification.notification.contentIntent,
+ new NotificationClicker(notification.notification.contentIntent,
notification.pkg, notification.tag, notification.id));
// 2. Animate mIntruderAlertView in
@@ -594,25 +588,20 @@
}
public void updateNotification(IBinder key, StatusBarNotification notification) {
- Slog.d(TAG, "updateNotification key=" + key + " notification=" + notification);
+ if (DEBUG) Slog.d(TAG, "updateNotification(" + key + " -> " + notification + ")");
- NotificationData oldList;
- NotificationData.Entry oldEntry = mOngoing.findByKey(key);
- if (oldEntry != null) {
- oldList = mOngoing;
- } else {
- oldEntry = mLatest.findByKey(key);
- if (oldEntry == null) {
- Slog.w(TAG, "updateNotification for unknown key: " + key);
- return;
- }
- oldList = mLatest;
+ final NotificationData.Entry oldEntry = mNotificationData.findByKey(key);
+ if (oldEntry == null) {
+ Slog.w(TAG, "updateNotification for unknown key: " + key);
+ return;
}
+
final StatusBarNotification oldNotification = oldEntry.notification;
final RemoteViews oldContentView = oldNotification.notification.contentView;
final RemoteViews contentView = notification.notification.contentView;
+
if (DEBUG) {
Slog.d(TAG, "old notification: when=" + oldNotification.notification.when
+ " ongoing=" + oldNotification.isOngoing()
@@ -637,8 +626,8 @@
boolean orderUnchanged = notification.notification.when==oldNotification.notification.when
&& notification.priority == oldNotification.priority;
// priority now encompasses isOngoing()
- boolean isLastAnyway = rowParent.indexOfChild(oldEntry.row) == rowParent.getChildCount()-1;
- if (contentsUnchanged && (orderUnchanged || isLastAnyway)) {
+ boolean isFirstAnyway = rowParent.indexOfChild(oldEntry.row) == 0;
+ if (contentsUnchanged && (orderUnchanged || isFirstAnyway)) {
if (DEBUG) Slog.d(TAG, "reusing notification for key: " + key);
oldEntry.notification = notification;
try {
@@ -647,7 +636,7 @@
// update the contentIntent
final PendingIntent contentIntent = notification.notification.contentIntent;
if (contentIntent != null) {
- oldEntry.content.setOnClickListener(new Launcher(contentIntent,
+ oldEntry.content.setOnClickListener(new NotificationClicker(contentIntent,
notification.pkg, notification.tag, notification.id));
} else {
oldEntry.content.setOnClickListener(null);
@@ -655,7 +644,8 @@
// Update the icon.
final StatusBarIcon ic = new StatusBarIcon(notification.pkg,
notification.notification.icon, notification.notification.iconLevel,
- notification.notification.number, notification.notification.tickerText);
+ notification.notification.number,
+ notification.notification.tickerText);
if (!oldEntry.icon.set(ic)) {
handleNotificationError(key, notification, "Couldn't update icon: " + ic);
return;
@@ -664,12 +654,9 @@
if (notification.notification.largeIcon != null) {
oldEntry.largeIcon.setImageBitmap(notification.notification.largeIcon);
} else {
- if (oldEntry.largeIcon != null) {
- oldEntry.largeIcon.getLayoutParams().width = 0;
- oldEntry.largeIcon.setVisibility(View.INVISIBLE);
- }
+ oldEntry.largeIcon.getLayoutParams().width = 0;
+ oldEntry.largeIcon.setVisibility(View.INVISIBLE);
}
-
}
catch (RuntimeException e) {
// It failed to add cleanly. Log, and remove the view from the panel.
@@ -709,15 +696,6 @@
}
}
- private int chooseIconIndex(boolean isOngoing, int viewIndex) {
- final int latestSize = mLatest.size();
- if (isOngoing) {
- return latestSize + (mOngoing.size() - viewIndex);
- } else {
- return latestSize - viewIndex;
- }
- }
-
@Override
protected void onConfigurationChanged(Configuration newConfig) {
updateRecentsPanel();
@@ -774,7 +752,7 @@
content.setOnFocusChangeListener(mFocusChangeListener);
PendingIntent contentIntent = n.contentIntent;
if (contentIntent != null) {
- content.setOnClickListener(new Launcher(contentIntent, notification.pkg,
+ content.setOnClickListener(new NotificationClicker(contentIntent, notification.pkg,
notification.tag, notification.id));
} else {
content.setOnClickListener(null);
@@ -801,82 +779,232 @@
}
StatusBarIconView addNotificationViews(IBinder key, StatusBarNotification notification) {
- NotificationData list;
- ViewGroup parent;
- final boolean isOngoing = notification.isOngoing();
- if (isOngoing) {
- list = mOngoing;
- parent = mOngoingItems;
- } else {
- list = mLatest;
- parent = mLatestItems;
+ if (DEBUG) {
+ Slog.d(TAG, "addNotificationViews(key=" + key + ", notification=" + notification);
}
- // Construct the expanded view.
- final View[] views = makeNotificationView(notification, parent);
- if (views == null) {
- handleNotificationError(key, notification, "Couldn't expand RemoteViews for: "
- + notification);
- return null;
- }
- final View row = views[0];
- final View content = views[1];
- final View expanded = views[2];
// Construct the icon.
final StatusBarIconView iconView = new StatusBarIconView(mContext,
notification.pkg + "/0x" + Integer.toHexString(notification.id),
notification.notification);
- final StatusBarIcon ic = new StatusBarIcon(notification.pkg, notification.notification.icon,
- notification.notification.iconLevel, notification.notification.number,
+ iconView.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
+
+ final StatusBarIcon ic = new StatusBarIcon(notification.pkg,
+ notification.notification.icon,
+ notification.notification.iconLevel,
+ notification.notification.number,
notification.notification.tickerText);
if (!iconView.set(ic)) {
- handleNotificationError(key, notification, "Coulding create icon: " + ic);
+ handleNotificationError(key, notification, "Couldn't create icon: " + ic);
return null;
}
- // Add the expanded view.
- final int viewIndex = list.add(key, notification, row, content, expanded, iconView);
- parent.addView(row, viewIndex);
- // Add the icon.
- final int iconIndex = chooseIconIndex(isOngoing, viewIndex);
- mNotificationIcons.addView(iconView, iconIndex);
+ // Construct the expanded view.
+ NotificationData.Entry entry = new NotificationData.Entry(key, notification, iconView);
+ if (!inflateViews(entry, mPile)) {
+ handleNotificationError(key, notification, "Couldn't expand RemoteViews for: "
+ + notification);
+ return null;
+ }
+
+ // Add the expanded view and icon.
+ int pos = mNotificationData.add(entry);
+ if (DEBUG) {
+ Slog.d(TAG, "addNotificationViews: added at " + pos);
+ }
+ updateNotificationIcons();
+
return iconView;
}
- StatusBarNotification removeNotificationViews(IBinder key) {
- NotificationData.Entry entry = mOngoing.remove(key);
- if (entry == null) {
- entry = mLatest.remove(key);
- if (entry == null) {
- Slog.w(TAG, "removeNotification for unknown key: " + key);
- return null;
+ private void loadNotificationShade() {
+ int N = mNotificationData.size();
+
+ ArrayList<View> toShow = new ArrayList<View>();
+
+ for (int i=0; i<N; i++) {
+ View row = mNotificationData.get(N-i-1).row;
+ toShow.add(row);
+ }
+
+ ArrayList<View> toRemove = new ArrayList<View>();
+ for (int i=0; i<mPile.getChildCount(); i++) {
+ View child = mPile.getChildAt(i);
+ if (!toShow.contains(child)) {
+ toRemove.add(child);
}
}
+
+ for (View remove : toRemove) {
+ mPile.removeView(remove);
+ }
+
+ for (int i=0; i<toShow.size(); i++) {
+ View v = toShow.get(i);
+ if (v.getParent() == null) {
+ mPile.addView(v, 0); // the notification shade has newest at the top
+ }
+ }
+ }
+
+ private void reloadAllNotificationIcons() {
+ if (mNotificationIcons == null) return;
+ mNotificationIcons.removeAllViews();
+ updateNotificationIcons();
+ }
+
+ private void updateNotificationIcons() {
+ loadNotificationShade();
+
+ final LinearLayout.LayoutParams params
+ = new LinearLayout.LayoutParams(mIconSize + 2*mIconHPadding, mNaturalBarHeight);
+
+ int N = mNotificationData.size();
+
+ if (DEBUG) {
+ Slog.d(TAG, "refreshing icons: " + N + " notifications, mNotificationIcons=" + mNotificationIcons);
+ }
+
+ ArrayList<View> toShow = new ArrayList<View>();
+
+ for (int i=0; i<N; i++) {
+ toShow.add(mNotificationData.get(N-i-1).icon);
+ }
+
+ ArrayList<View> toRemove = new ArrayList<View>();
+ for (int i=0; i<mNotificationIcons.getChildCount(); i++) {
+ View child = mNotificationIcons.getChildAt(i);
+ if (!toShow.contains(child)) {
+ toRemove.add(child);
+ }
+ }
+
+ for (View remove : toRemove) {
+ mNotificationIcons.removeView(remove);
+ }
+
+ for (int i=0; i<toShow.size(); i++) {
+ View v = toShow.get(i);
+ if (v.getParent() == null) {
+ mNotificationIcons.addView(v, i, params);
+ }
+ }
+ }
+
+ void workAroundBadLayerDrawableOpacity(View v) {
+ LayerDrawable d = (LayerDrawable)v.getBackground();
+ if (d == null) return;
+ v.setBackgroundDrawable(null);
+ d.setOpacity(PixelFormat.TRANSLUCENT);
+ v.setBackgroundDrawable(d);
+ }
+
+ private boolean inflateViews(NotificationData.Entry entry, ViewGroup parent) {
+ StatusBarNotification sbn = entry.notification;
+ RemoteViews remoteViews = sbn.notification.contentView;
+ if (remoteViews == null) {
+ return false;
+ }
+
+ // create the row view
+ LayoutInflater inflater = (LayoutInflater)mContext.getSystemService(
+ Context.LAYOUT_INFLATER_SERVICE);
+ View row = inflater.inflate(R.layout.status_bar_notification_row, parent, false);
+ workAroundBadLayerDrawableOpacity(row);
+ View vetoButton = row.findViewById(R.id.veto);
+ if (entry.notification.isClearable()) {
+ final String _pkg = sbn.pkg;
+ final String _tag = sbn.tag;
+ final int _id = sbn.id;
+ vetoButton.setOnClickListener(new View.OnClickListener() {
+ public void onClick(View v) {
+ try {
+ mBarService.onNotificationClear(_pkg, _tag, _id);
+ } catch (RemoteException ex) {
+ // system process is dead if we're here.
+ }
+ }
+ });
+ } else {
+ if ((sbn.notification.flags & Notification.FLAG_ONGOING_EVENT) == 0) {
+ vetoButton.setVisibility(View.INVISIBLE);
+ vetoButton.setContentDescription("VETO");
+ } else {
+ vetoButton.setVisibility(View.GONE);
+ }
+ }
+ vetoButton.setContentDescription(mContext.getString(
+ R.string.accessibility_remove_notification));
+
+ // the large icon
+ ImageView largeIcon = (ImageView)row.findViewById(R.id.large_icon);
+ if (sbn.notification.largeIcon != null) {
+ largeIcon.setImageBitmap(sbn.notification.largeIcon);
+ largeIcon.setContentDescription(sbn.notification.tickerText);
+ } else {
+ largeIcon.getLayoutParams().width = 0;
+ largeIcon.setVisibility(View.INVISIBLE);
+ }
+ largeIcon.setContentDescription(sbn.notification.tickerText);
+
+ // bind the click event to the content area
+ ViewGroup content = (ViewGroup)row.findViewById(R.id.content);
+ // XXX: update to allow controls within notification views
+ content.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);
+// content.setOnFocusChangeListener(mFocusChangeListener);
+ PendingIntent contentIntent = sbn.notification.contentIntent;
+ if (contentIntent != null) {
+ content.setOnClickListener(new NotificationClicker(contentIntent,
+ sbn.pkg, sbn.tag, sbn.id));
+ } else {
+ content.setOnClickListener(null);
+ }
+
+ View expanded = null;
+ Exception exception = null;
+ try {
+ expanded = remoteViews.apply(mContext, content);
+ }
+ catch (RuntimeException e) {
+ exception = e;
+ }
+ if (expanded == null) {
+ final String ident = sbn.pkg + "/0x" + Integer.toHexString(sbn.id);
+ Slog.e(TAG, "couldn't inflate view for notification " + ident, exception);
+ return false;
+ } else {
+ content.addView(expanded);
+ row.setDrawingCacheEnabled(true);
+ }
+
+ entry.row = row;
+ entry.content = content;
+ entry.expanded = expanded;
+ entry.largeIcon = largeIcon;
+
+ return true;
+ }
+
+ StatusBarNotification removeNotificationViews(IBinder key) {
+ NotificationData.Entry entry = mNotificationData.remove(key);
+ if (entry == null) {
+ Slog.w(TAG, "removeNotification for unknown key: " + key);
+ return null;
+ }
// Remove the expanded view.
- ((ViewGroup)entry.row.getParent()).removeView(entry.row);
- // Remove the icon.
- ((ViewGroup)entry.icon.getParent()).removeView(entry.icon);
+ ViewGroup rowParent = (ViewGroup)entry.row.getParent();
+ if (rowParent != null) rowParent.removeView(entry.row);
+ updateNotificationIcons();
return entry.notification;
}
private void setAreThereNotifications() {
- boolean ongoing = mOngoing.hasVisibleItems();
- boolean latest = mLatest.hasVisibleItems();
+ mClearButton.setVisibility(mNotificationData.hasClearableItems()
+ ? View.VISIBLE
+ : View.INVISIBLE);
- // (no ongoing notifications are clearable)
- if (mLatest.hasClearableItems()) {
- mClearButton.setVisibility(View.VISIBLE);
- } else {
- mClearButton.setVisibility(View.INVISIBLE);
- }
-
- mOngoingTitle.setVisibility(ongoing ? View.VISIBLE : View.GONE);
- mLatestTitle.setVisibility(latest ? View.VISIBLE : View.GONE);
-
- if (ongoing || latest) {
- mNoNotificationsTitle.setVisibility(View.GONE);
- } else {
- mNoNotificationsTitle.setVisibility(View.VISIBLE);
- }
+ mNoNotificationsTitle.setVisibility(mNotificationData.size() > 0
+ ? View.GONE
+ : View.VISIBLE);
}
@@ -1339,13 +1467,17 @@
@Override
public void setHardKeyboardStatus(boolean available, boolean enabled) { }
- private class Launcher implements View.OnClickListener {
+ public NotificationClicker makeClicker(PendingIntent intent, String pkg, String tag, int id) {
+ return new NotificationClicker(intent, pkg, tag, id);
+ }
+
+ private class NotificationClicker implements View.OnClickListener {
private PendingIntent mIntent;
private String mPkg;
private String mTag;
private int mId;
- Launcher(PendingIntent intent, String pkg, String tag, int id) {
+ NotificationClicker(PendingIntent intent, String pkg, String tag, int id) {
mIntent = intent;
mPkg = pkg;
mTag = tag;
@@ -1503,10 +1635,7 @@
pw.println(" mExpandedDialog: " + mExpandedDialog);
pw.println(" mTrackingParams: " + mTrackingParams);
pw.println(" mTrackingView: " + viewInfo(mTrackingView));
- pw.println(" mOngoingTitle: " + viewInfo(mOngoingTitle));
- pw.println(" mOngoingItems: " + viewInfo(mOngoingItems));
- pw.println(" mLatestTitle: " + viewInfo(mLatestTitle));
- pw.println(" mLatestItems: " + viewInfo(mLatestItems));
+ pw.println(" mPile: " + viewInfo(mPile));
pw.println(" mNoNotificationsTitle: " + viewInfo(mNoNotificationsTitle));
pw.println(" mCloseView: " + viewInfo(mCloseView));
pw.println(" mTickerView: " + viewInfo(mTickerView));
@@ -1855,11 +1984,32 @@
final Context context = mContext;
final Resources res = context.getResources();
- mClearButton.setText(context.getText(R.string.status_bar_clear_all_button));
- mOngoingTitle.setText(context.getText(R.string.status_bar_ongoing_events_title));
- mLatestTitle.setText(context.getText(R.string.status_bar_latest_events_title));
+ if (mClearButton instanceof TextView) {
+ ((TextView)mClearButton).setText(context.getText(R.string.status_bar_clear_all_button));
+ }
mNoNotificationsTitle.setText(context.getText(R.string.status_bar_no_notifications_title));
+ loadDimens();
+ }
+
+ protected void loadDimens() {
+ final Resources res = mContext.getResources();
+
+ mNaturalBarHeight = res.getDimensionPixelSize(
+ com.android.internal.R.dimen.status_bar_height);
+
+ int newIconSize = res.getDimensionPixelSize(
+ com.android.internal.R.dimen.status_bar_icon_size);
+ int newIconHPadding = res.getDimensionPixelSize(
+ R.dimen.status_bar_icon_padding);
+
+ if (newIconHPadding != mIconHPadding || newIconSize != mIconSize) {
+// Slog.d(TAG, "size=" + newIconSize + " padding=" + newIconHPadding);
+ mIconHPadding = newIconHPadding;
+ mIconSize = newIconSize;
+ //reloadAllNotificationIcons(); // reload the tray
+ }
+
mEdgeBorder = res.getDimensionPixelSize(R.dimen.status_bar_edge_ignore);
if (false) Slog.v(TAG, "updateResources");
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NotificationRowLayout.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NotificationRowLayout.java
index 90234c7..2a0dfb5 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NotificationRowLayout.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NotificationRowLayout.java
@@ -324,7 +324,14 @@
if (child.getVisibility() == GONE) {
continue;
}
- final int thisRowHeight = (int)(child.getAlpha() * mRowHeight);
+ float alpha = child.getAlpha();
+ if (alpha > 1.0f) {
+ if (DEBUG) {
+ Slog.w(TAG, "alpha=" + alpha + " > 1!!! " + child);
+ }
+ alpha = 1f;
+ }
+ final int thisRowHeight = (int)(alpha * mRowHeight);
if (DEBUG) {
Slog.d(TAG, String.format(
"laying out child #%d: (0, %d, %d, %d) h=%d",
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/NotificationPanel.java b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/NotificationPanel.java
index a316e4b..74dbfef 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/NotificationPanel.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/NotificationPanel.java
@@ -49,6 +49,7 @@
Rect mContentArea = new Rect();
View mSettingsView;
ViewGroup mContentParent;
+ TabletStatusBar mBar;
// amount to slide mContentParent down by when mContentFrame is missing
float mContentFrameMissingTranslation;
@@ -63,6 +64,10 @@
super(context, attrs, defStyle);
}
+ public void setBar(TabletStatusBar b) {
+ mBar = b;
+ }
+
@Override
public void onFinishInflate() {
super.onFinishInflate();
@@ -202,15 +207,16 @@
;
set.setDuration(200);
- if (!showing) {
- set.addListener(new AnimatorListenerAdapter() {
- @Override
- public void onAnimationEnd(Animator _a) {
+ set.addListener(new AnimatorListenerAdapter() {
+ @Override
+ public void onAnimationEnd(Animator _a) {
+ if (!showing) {
mContentFrame.setVisibility(View.GONE);
mContentFrame.setAlpha(1f);
}
- });
- }
+ updateClearButton();
+ }
+ });
set.start();
}
@@ -247,12 +253,23 @@
removeSettingsView();
}
}
+ updateClearButton();
updatePanelModeButtons();
}
});
a.start();
}
+ public void updateClearButton() {
+ if (mBar != null) {
+ final boolean showX
+ = (isShowing()
+ && mNotificationScroller.getVisibility() == View.VISIBLE
+ && mNotificationCount > 0);
+ mBar.getClearButton().setVisibility(showX ? View.VISIBLE : View.INVISIBLE);
+ }
+ }
+
public void updatePanelModeButtons() {
final boolean settingsVisible = (mSettingsView != null);
mSettingsButton.setVisibility(!settingsVisible ? View.VISIBLE : View.INVISIBLE);
@@ -294,11 +311,11 @@
AnimatorSet mContentAnim;
// should group this into a multi-property animation
- final static int OPEN_DURATION = 136;
- final static int CLOSE_DURATION = 250;
+ final static int OPEN_DURATION = 300;
+ final static int CLOSE_DURATION = 300;
// the panel will start to appear this many px from the end
- final int HYPERSPACE_OFFRAMP = 100;
+ final int HYPERSPACE_OFFRAMP = 200;
Choreographer() {
}
@@ -306,10 +323,6 @@
void createAnimation(boolean appearing) {
// mVisible: previous state; appearing: new state
- View root = findViewById(R.id.panel_root);
- Animator bgAnim = ObjectAnimator.ofInt(root.getBackground(), "alpha",
- mVisible ? 255 : 0, appearing ? 255 : 0);
-
float start, end;
// 0: on-screen
@@ -347,7 +360,6 @@
mContentAnim = new AnimatorSet();
mContentAnim
.play(fadeAnim)
- .with(bgAnim)
.with(posAnim)
;
mContentAnim.setDuration((DEBUG?10:1)*(appearing ? OPEN_DURATION : CLOSE_DURATION));
@@ -363,6 +375,9 @@
mContentAnim.start();
mVisible = appearing;
+
+ // we want to start disappearing promptly
+ if (!mVisible) updateClearButton();
}
public void onAnimationCancel(Animator animation) {
@@ -376,6 +391,9 @@
}
mContentParent.setLayerType(View.LAYER_TYPE_NONE, null);
mContentAnim = null;
+
+ // we want to show the X lazily
+ if (mVisible) updateClearButton();
}
public void onAnimationRepeat(Animator animation) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java
index c6e546e..dc7e3137 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java
@@ -122,6 +122,7 @@
View mNotificationTrigger;
NotificationIconArea mNotificationIconArea;
ViewGroup mNavigationArea;
+ View mClearButton;
boolean mNotificationDNDMode;
NotificationData.Entry mNotificationDNDDummyEntry;
@@ -187,6 +188,7 @@
// Notification Panel
mNotificationPanel = (NotificationPanel)View.inflate(context,
R.layout.status_bar_notification_panel, null);
+ mNotificationPanel.setBar(this);
mNotificationPanel.show(false, false);
mNotificationPanel.setOnTouchListener(
new TouchOutsideListener(MSG_CLOSE_NOTIFICATION_PANEL, mNotificationPanel));
@@ -451,6 +453,10 @@
// the more notifications icon
mNotificationIconArea = (NotificationIconArea)sb.findViewById(R.id.notificationIcons);
+ // the "X" that appears in place of the clock when the panel is showing notifications
+ mClearButton = sb.findViewById(R.id.clear_all_button);
+ mClearButton.setOnClickListener(mClearButtonListener);
+
// where the icons go
mIconLayout = (NotificationIconArea.IconLayout) sb.findViewById(R.id.icons);
mIconLayout.setOnTouchListener(new NotificationIconTouchListener());
@@ -581,6 +587,21 @@
return sb;
}
+ private View.OnClickListener mClearButtonListener = new View.OnClickListener() {
+ public void onClick(View v) {
+ try {
+ mBarService.onClearAllNotifications();
+ } catch (RemoteException ex) {
+ // system process is dead if we're here.
+ }
+ animateCollapse();
+ }
+ };
+
+ public View getClearButton() {
+ return mClearButton;
+ }
+
public int getStatusBarHeight() {
return mHeightReceiver.getHeight();
}
@@ -1183,7 +1204,6 @@
}
private void setAreThereNotifications() {
- final boolean hasClearable = mNotificationData.hasClearableItems();
}
/**
diff --git a/policy/src/com/android/internal/policy/impl/IconUtilities.java b/policy/src/com/android/internal/policy/impl/IconUtilities.java
index 99055cf..4564f90 100644
--- a/policy/src/com/android/internal/policy/impl/IconUtilities.java
+++ b/policy/src/com/android/internal/policy/impl/IconUtilities.java
@@ -186,6 +186,7 @@
mask.recycle();
dest.drawBitmap(src, 0, 0, mPaint);
+ dest.setBitmap(null);
return result;
}
diff --git a/services/camera/libcameraservice/CameraService.cpp b/services/camera/libcameraservice/CameraService.cpp
index def25d1..e193be0 100644
--- a/services/camera/libcameraservice/CameraService.cpp
+++ b/services/camera/libcameraservice/CameraService.cpp
@@ -350,10 +350,9 @@
dataCallbackTimestamp,
(void *)cameraId);
- // Enable zoom, error, and focus messages by default
- enableMsgType(CAMERA_MSG_ERROR |
- CAMERA_MSG_ZOOM |
- CAMERA_MSG_FOCUS);
+ // Enable zoom, error, focus, and metadata messages by default
+ enableMsgType(CAMERA_MSG_ERROR | CAMERA_MSG_ZOOM | CAMERA_MSG_FOCUS |
+ CAMERA_MSG_PREVIEW_METADATA);
// Callback is disabled by default
mPreviewCallbackFlag = CAMERA_FRAME_CALLBACK_FLAG_NOOP;
@@ -995,15 +994,15 @@
if (client == 0) return;
if (!client->lockIfMessageWanted(msgType)) return;
- if (dataPtr == 0) {
+ if (dataPtr == 0 && metadata == NULL) {
LOGE("Null data returned in data callback");
client->handleGenericNotify(CAMERA_MSG_ERROR, UNKNOWN_ERROR, 0);
return;
}
- switch (msgType) {
+ switch (msgType & ~CAMERA_MSG_PREVIEW_METADATA) {
case CAMERA_MSG_PREVIEW_FRAME:
- client->handlePreviewData(dataPtr);
+ client->handlePreviewData(msgType, dataPtr, metadata);
break;
case CAMERA_MSG_POSTVIEW_FRAME:
client->handlePostview(dataPtr);
@@ -1015,7 +1014,7 @@
client->handleCompressedPicture(dataPtr);
break;
default:
- client->handleGenericData(msgType, dataPtr);
+ client->handleGenericData(msgType, dataPtr, metadata);
break;
}
}
@@ -1055,7 +1054,9 @@
}
// preview callback - frame buffer update
-void CameraService::Client::handlePreviewData(const sp<IMemory>& mem) {
+void CameraService::Client::handlePreviewData(int32_t msgType,
+ const sp<IMemory>& mem,
+ camera_frame_metadata_t *metadata) {
ssize_t offset;
size_t size;
sp<IMemoryHeap> heap = mem->getMemory(&offset, &size);
@@ -1087,11 +1088,11 @@
// Is the received frame copied out or not?
if (flags & CAMERA_FRAME_CALLBACK_FLAG_COPY_OUT_MASK) {
LOG2("frame is copied");
- copyFrameAndPostCopiedFrame(c, heap, offset, size);
+ copyFrameAndPostCopiedFrame(msgType, c, heap, offset, size, metadata);
} else {
LOG2("frame is forwarded");
mLock.unlock();
- c->dataCallback(CAMERA_MSG_PREVIEW_FRAME, mem);
+ c->dataCallback(msgType, mem, metadata);
}
} else {
mLock.unlock();
@@ -1105,7 +1106,7 @@
sp<ICameraClient> c = mCameraClient;
mLock.unlock();
if (c != 0) {
- c->dataCallback(CAMERA_MSG_POSTVIEW_FRAME, mem);
+ c->dataCallback(CAMERA_MSG_POSTVIEW_FRAME, mem, NULL);
}
}
@@ -1120,7 +1121,7 @@
sp<ICameraClient> c = mCameraClient;
mLock.unlock();
if (c != 0) {
- c->dataCallback(CAMERA_MSG_RAW_IMAGE, mem);
+ c->dataCallback(CAMERA_MSG_RAW_IMAGE, mem, NULL);
}
}
@@ -1131,7 +1132,7 @@
sp<ICameraClient> c = mCameraClient;
mLock.unlock();
if (c != 0) {
- c->dataCallback(CAMERA_MSG_COMPRESSED_IMAGE, mem);
+ c->dataCallback(CAMERA_MSG_COMPRESSED_IMAGE, mem, NULL);
}
}
@@ -1146,11 +1147,11 @@
}
void CameraService::Client::handleGenericData(int32_t msgType,
- const sp<IMemory>& dataPtr) {
+ const sp<IMemory>& dataPtr, camera_frame_metadata_t *metadata) {
sp<ICameraClient> c = mCameraClient;
mLock.unlock();
if (c != 0) {
- c->dataCallback(msgType, dataPtr);
+ c->dataCallback(msgType, dataPtr, metadata);
}
}
@@ -1164,8 +1165,9 @@
}
void CameraService::Client::copyFrameAndPostCopiedFrame(
- const sp<ICameraClient>& client, const sp<IMemoryHeap>& heap,
- size_t offset, size_t size) {
+ int32_t msgType, const sp<ICameraClient>& client,
+ const sp<IMemoryHeap>& heap, size_t offset, size_t size,
+ camera_frame_metadata_t *metadata) {
LOG2("copyFrameAndPostCopiedFrame");
// It is necessary to copy out of pmem before sending this to
// the callback. For efficiency, reuse the same MemoryHeapBase
@@ -1197,7 +1199,7 @@
}
mLock.unlock();
- client->dataCallback(CAMERA_MSG_PREVIEW_FRAME, frame);
+ client->dataCallback(msgType, frame, metadata);
}
int CameraService::Client::getOrientation(int degrees, bool mirror) {
diff --git a/services/camera/libcameraservice/CameraService.h b/services/camera/libcameraservice/CameraService.h
index af7f06e..57abf83 100644
--- a/services/camera/libcameraservice/CameraService.h
+++ b/services/camera/libcameraservice/CameraService.h
@@ -147,18 +147,22 @@
static sp<Client> getClientFromCookie(void* user);
// handlers for messages
void handleShutter(void);
- void handlePreviewData(const sp<IMemory>& mem);
+ void handlePreviewData(int32_t msgType, const sp<IMemory>& mem,
+ camera_frame_metadata_t *metadata);
void handlePostview(const sp<IMemory>& mem);
void handleRawPicture(const sp<IMemory>& mem);
void handleCompressedPicture(const sp<IMemory>& mem);
void handleGenericNotify(int32_t msgType, int32_t ext1, int32_t ext2);
- void handleGenericData(int32_t msgType, const sp<IMemory>& dataPtr);
+ void handleGenericData(int32_t msgType, const sp<IMemory>& dataPtr,
+ camera_frame_metadata_t *metadata);
void handleGenericDataTimestamp(nsecs_t timestamp, int32_t msgType, const sp<IMemory>& dataPtr);
void copyFrameAndPostCopiedFrame(
+ int32_t msgType,
const sp<ICameraClient>& client,
const sp<IMemoryHeap>& heap,
- size_t offset, size_t size);
+ size_t offset, size_t size,
+ camera_frame_metadata_t *metadata);
int getOrientation(int orientation, bool mirror);
diff --git a/services/input/Android.mk b/services/input/Android.mk
index e36507a..afbe546 100644
--- a/services/input/Android.mk
+++ b/services/input/Android.mk
@@ -19,6 +19,7 @@
LOCAL_SRC_FILES:= \
EventHub.cpp \
InputDispatcher.cpp \
+ InputListener.cpp \
InputManager.cpp \
InputReader.cpp \
InputWindow.cpp \
diff --git a/services/input/InputDispatcher.cpp b/services/input/InputDispatcher.cpp
index af13945..ce9e14f 100644
--- a/services/input/InputDispatcher.cpp
+++ b/services/input/InputDispatcher.cpp
@@ -2550,16 +2550,16 @@
return splitMotionEntry;
}
-void InputDispatcher::notifyConfigurationChanged(nsecs_t eventTime) {
+void InputDispatcher::notifyConfigurationChanged(const NotifyConfigurationChangedArgs* args) {
#if DEBUG_INBOUND_EVENT_DETAILS
- LOGD("notifyConfigurationChanged - eventTime=%lld", eventTime);
+ LOGD("notifyConfigurationChanged - eventTime=%lld", args->eventTime);
#endif
bool needWake;
{ // acquire lock
AutoMutex _l(mLock);
- ConfigurationChangedEntry* newEntry = new ConfigurationChangedEntry(eventTime);
+ ConfigurationChangedEntry* newEntry = new ConfigurationChangedEntry(args->eventTime);
needWake = enqueueInboundEventLocked(newEntry);
} // release lock
@@ -2568,19 +2568,21 @@
}
}
-void InputDispatcher::notifyKey(nsecs_t eventTime, int32_t deviceId, uint32_t source,
- uint32_t policyFlags, int32_t action, int32_t flags,
- int32_t keyCode, int32_t scanCode, int32_t metaState, nsecs_t downTime) {
+void InputDispatcher::notifyKey(const NotifyKeyArgs* args) {
#if DEBUG_INBOUND_EVENT_DETAILS
LOGD("notifyKey - eventTime=%lld, deviceId=%d, source=0x%x, policyFlags=0x%x, action=0x%x, "
"flags=0x%x, keyCode=0x%x, scanCode=0x%x, metaState=0x%x, downTime=%lld",
- eventTime, deviceId, source, policyFlags, action, flags,
- keyCode, scanCode, metaState, downTime);
+ args->eventTime, args->deviceId, args->source, args->policyFlags,
+ args->action, args->flags, args->keyCode, args->scanCode,
+ args->metaState, args->downTime);
#endif
- if (! validateKeyEvent(action)) {
+ if (!validateKeyEvent(args->action)) {
return;
}
+ uint32_t policyFlags = args->policyFlags;
+ int32_t flags = args->flags;
+ int32_t metaState = args->metaState;
if ((policyFlags & POLICY_FLAG_VIRTUAL) || (flags & AKEY_EVENT_FLAG_VIRTUAL_HARD_KEY)) {
policyFlags |= POLICY_FLAG_VIRTUAL;
flags |= AKEY_EVENT_FLAG_VIRTUAL_HARD_KEY;
@@ -2604,8 +2606,9 @@
policyFlags |= POLICY_FLAG_TRUSTED;
KeyEvent event;
- event.initialize(deviceId, source, action, flags, keyCode, scanCode,
- metaState, 0, downTime, eventTime);
+ event.initialize(args->deviceId, args->source, args->action,
+ flags, args->keyCode, args->scanCode, metaState, 0,
+ args->downTime, args->eventTime);
mPolicy->interceptKeyBeforeQueueing(&event, /*byref*/ policyFlags);
@@ -2629,9 +2632,10 @@
}
int32_t repeatCount = 0;
- KeyEntry* newEntry = new KeyEntry(eventTime,
- deviceId, source, policyFlags, action, flags, keyCode, scanCode,
- metaState, repeatCount, downTime);
+ KeyEntry* newEntry = new KeyEntry(args->eventTime,
+ args->deviceId, args->source, policyFlags,
+ args->action, flags, args->keyCode, args->scanCode,
+ metaState, repeatCount, args->downTime);
needWake = enqueueInboundEventLocked(newEntry);
mLock.unlock();
@@ -2642,43 +2646,39 @@
}
}
-void InputDispatcher::notifyMotion(nsecs_t eventTime, int32_t deviceId, uint32_t source,
- uint32_t policyFlags, int32_t action, int32_t flags,
- int32_t metaState, int32_t buttonState, int32_t edgeFlags,
- uint32_t pointerCount, const PointerProperties* pointerProperties,
- const PointerCoords* pointerCoords,
- float xPrecision, float yPrecision, nsecs_t downTime) {
+void InputDispatcher::notifyMotion(const NotifyMotionArgs* args) {
#if DEBUG_INBOUND_EVENT_DETAILS
LOGD("notifyMotion - eventTime=%lld, deviceId=%d, source=0x%x, policyFlags=0x%x, "
"action=0x%x, flags=0x%x, metaState=0x%x, buttonState=0x%x, edgeFlags=0x%x, "
"xPrecision=%f, yPrecision=%f, downTime=%lld",
- eventTime, deviceId, source, policyFlags, action, flags,
- metaState, buttonState, edgeFlags,
- xPrecision, yPrecision, downTime);
- for (uint32_t i = 0; i < pointerCount; i++) {
+ args->eventTime, args->deviceId, args->source, args->policyFlags,
+ args->action, args->flags, args->metaState, args->buttonState,
+ args->edgeFlags, args->xPrecision, args->yPrecision, args->downTime);
+ for (uint32_t i = 0; i < args->pointerCount; i++) {
LOGD(" Pointer %d: id=%d, toolType=%d, "
"x=%f, y=%f, pressure=%f, size=%f, "
"touchMajor=%f, touchMinor=%f, toolMajor=%f, toolMinor=%f, "
"orientation=%f",
- i, pointerProperties[i].id,
- pointerProperties[i].toolType,
- pointerCoords[i].getAxisValue(AMOTION_EVENT_AXIS_X),
- pointerCoords[i].getAxisValue(AMOTION_EVENT_AXIS_Y),
- pointerCoords[i].getAxisValue(AMOTION_EVENT_AXIS_PRESSURE),
- pointerCoords[i].getAxisValue(AMOTION_EVENT_AXIS_SIZE),
- pointerCoords[i].getAxisValue(AMOTION_EVENT_AXIS_TOUCH_MAJOR),
- pointerCoords[i].getAxisValue(AMOTION_EVENT_AXIS_TOUCH_MINOR),
- pointerCoords[i].getAxisValue(AMOTION_EVENT_AXIS_TOOL_MAJOR),
- pointerCoords[i].getAxisValue(AMOTION_EVENT_AXIS_TOOL_MINOR),
- pointerCoords[i].getAxisValue(AMOTION_EVENT_AXIS_ORIENTATION));
+ i, args->pointerProperties[i].id,
+ args->pointerProperties[i].toolType,
+ args->pointerCoords[i].getAxisValue(AMOTION_EVENT_AXIS_X),
+ args->pointerCoords[i].getAxisValue(AMOTION_EVENT_AXIS_Y),
+ args->pointerCoords[i].getAxisValue(AMOTION_EVENT_AXIS_PRESSURE),
+ args->pointerCoords[i].getAxisValue(AMOTION_EVENT_AXIS_SIZE),
+ args->pointerCoords[i].getAxisValue(AMOTION_EVENT_AXIS_TOUCH_MAJOR),
+ args->pointerCoords[i].getAxisValue(AMOTION_EVENT_AXIS_TOUCH_MINOR),
+ args->pointerCoords[i].getAxisValue(AMOTION_EVENT_AXIS_TOOL_MAJOR),
+ args->pointerCoords[i].getAxisValue(AMOTION_EVENT_AXIS_TOOL_MINOR),
+ args->pointerCoords[i].getAxisValue(AMOTION_EVENT_AXIS_ORIENTATION));
}
#endif
- if (! validateMotionEvent(action, pointerCount, pointerProperties)) {
+ if (!validateMotionEvent(args->action, args->pointerCount, args->pointerProperties)) {
return;
}
+ uint32_t policyFlags = args->policyFlags;
policyFlags |= POLICY_FLAG_TRUSTED;
- mPolicy->interceptMotionBeforeQueueing(eventTime, /*byref*/ policyFlags);
+ mPolicy->interceptMotionBeforeQueueing(args->eventTime, /*byref*/ policyFlags);
bool needWake;
{ // acquire lock
@@ -2688,10 +2688,11 @@
mLock.unlock();
MotionEvent event;
- event.initialize(deviceId, source, action, flags, edgeFlags, metaState,
- buttonState, 0, 0,
- xPrecision, yPrecision, downTime, eventTime,
- pointerCount, pointerProperties, pointerCoords);
+ event.initialize(args->deviceId, args->source, args->action, args->flags,
+ args->edgeFlags, args->metaState, args->buttonState, 0, 0,
+ args->xPrecision, args->yPrecision,
+ args->downTime, args->eventTime,
+ args->pointerCount, args->pointerProperties, args->pointerCoords);
policyFlags |= POLICY_FLAG_FILTERED;
if (!mPolicy->filterInputEvent(&event, policyFlags)) {
@@ -2702,8 +2703,8 @@
}
// Attempt batching and streaming of move events.
- if (action == AMOTION_EVENT_ACTION_MOVE
- || action == AMOTION_EVENT_ACTION_HOVER_MOVE) {
+ if (args->action == AMOTION_EVENT_ACTION_MOVE
+ || args->action == AMOTION_EVENT_ACTION_HOVER_MOVE) {
// BATCHING CASE
//
// Try to append a move sample to the tail of the inbound queue for this device.
@@ -2716,20 +2717,22 @@
}
MotionEntry* motionEntry = static_cast<MotionEntry*>(entry);
- if (motionEntry->deviceId != deviceId
- || motionEntry->source != source) {
+ if (motionEntry->deviceId != args->deviceId
+ || motionEntry->source != args->source) {
// Keep looking for this device and source.
continue;
}
- if (!motionEntry->canAppendSamples(action, pointerCount, pointerProperties)) {
+ if (!motionEntry->canAppendSamples(args->action,
+ args->pointerCount, args->pointerProperties)) {
// Last motion event in the queue for this device and source is
// not compatible for appending new samples. Stop here.
goto NoBatchingOrStreaming;
}
// Do the batching magic.
- batchMotionLocked(motionEntry, eventTime, metaState, pointerCoords,
+ batchMotionLocked(motionEntry, args->eventTime,
+ args->metaState, args->pointerCoords,
"most recent motion event for this device and source in the inbound queue");
mLock.unlock();
return; // done!
@@ -2744,15 +2747,18 @@
&& (!mPendingEvent->dispatchInProgress || !mCurrentInputTargetsValid)
&& mPendingEvent->type == EventEntry::TYPE_MOTION) {
MotionEntry* motionEntry = static_cast<MotionEntry*>(mPendingEvent);
- if (motionEntry->deviceId == deviceId && motionEntry->source == source) {
- if (!motionEntry->canAppendSamples(action, pointerCount, pointerProperties)) {
+ if (motionEntry->deviceId == args->deviceId
+ && motionEntry->source == args->source) {
+ if (!motionEntry->canAppendSamples(args->action,
+ args->pointerCount, args->pointerProperties)) {
// Pending motion event is for this device and source but it is
// not compatible for appending new samples. Stop here.
goto NoBatchingOrStreaming;
}
// Do the batching magic.
- batchMotionLocked(motionEntry, eventTime, metaState, pointerCoords,
+ batchMotionLocked(motionEntry, args->eventTime,
+ args->metaState, args->pointerCoords,
"pending motion event");
mLock.unlock();
return; // done!
@@ -2799,16 +2805,16 @@
MotionEntry* motionEntry = static_cast<MotionEntry*>(
dispatchEntry->eventEntry);
- if (motionEntry->action != action
- || motionEntry->deviceId != deviceId
- || motionEntry->source != source
- || motionEntry->pointerCount != pointerCount
+ if (motionEntry->action != args->action
+ || motionEntry->deviceId != args->deviceId
+ || motionEntry->source != args->source
+ || motionEntry->pointerCount != args->pointerCount
|| motionEntry->isInjected()) {
// The motion event is not compatible with this move.
continue;
}
- if (action == AMOTION_EVENT_ACTION_HOVER_MOVE) {
+ if (args->action == AMOTION_EVENT_ACTION_HOVER_MOVE) {
if (mLastHoverWindowHandle == NULL) {
#if DEBUG_BATCHING
LOGD("Not streaming hover move because there is no "
@@ -2818,8 +2824,8 @@
}
sp<InputWindowHandle> hoverWindowHandle = findTouchedWindowAtLocked(
- pointerCoords[0].getAxisValue(AMOTION_EVENT_AXIS_X),
- pointerCoords[0].getAxisValue(AMOTION_EVENT_AXIS_Y));
+ args->pointerCoords[0].getAxisValue(AMOTION_EVENT_AXIS_X),
+ args->pointerCoords[0].getAxisValue(AMOTION_EVENT_AXIS_Y));
if (mLastHoverWindowHandle != hoverWindowHandle) {
#if DEBUG_BATCHING
LOGD("Not streaming hover move because the last hovered window "
@@ -2834,7 +2840,7 @@
// Hurray! This foreground target is currently dispatching a move event
// that we can stream onto. Append the motion sample and resume dispatch.
- motionEntry->appendSample(eventTime, pointerCoords);
+ motionEntry->appendSample(args->eventTime, args->pointerCoords);
#if DEBUG_BATCHING
LOGD("Appended motion sample onto batch for most recently dispatched "
"motion event for this device and source in the outbound queues. "
@@ -2854,10 +2860,11 @@
}
// Just enqueue a new motion event.
- MotionEntry* newEntry = new MotionEntry(eventTime,
- deviceId, source, policyFlags, action, flags, metaState, buttonState, edgeFlags,
- xPrecision, yPrecision, downTime,
- pointerCount, pointerProperties, pointerCoords);
+ MotionEntry* newEntry = new MotionEntry(args->eventTime,
+ args->deviceId, args->source, policyFlags,
+ args->action, args->flags, args->metaState, args->buttonState,
+ args->edgeFlags, args->xPrecision, args->yPrecision, args->downTime,
+ args->pointerCount, args->pointerProperties, args->pointerCoords);
needWake = enqueueInboundEventLocked(newEntry);
mLock.unlock();
@@ -2898,15 +2905,17 @@
#endif
}
-void InputDispatcher::notifySwitch(nsecs_t when, int32_t switchCode, int32_t switchValue,
- uint32_t policyFlags) {
+void InputDispatcher::notifySwitch(const NotifySwitchArgs* args) {
#if DEBUG_INBOUND_EVENT_DETAILS
- LOGD("notifySwitch - switchCode=%d, switchValue=%d, policyFlags=0x%x",
- switchCode, switchValue, policyFlags);
+ LOGD("notifySwitch - eventTime=%lld, policyFlags=0x%x, switchCode=%d, switchValue=%d",
+ args->eventTime, args->policyFlags,
+ args->switchCode, args->switchValue);
#endif
+ uint32_t policyFlags = args->policyFlags;
policyFlags |= POLICY_FLAG_TRUSTED;
- mPolicy->notifySwitch(when, switchCode, switchValue, policyFlags);
+ mPolicy->notifySwitch(args->eventTime,
+ args->switchCode, args->switchValue, policyFlags);
}
int32_t InputDispatcher::injectInputEvent(const InputEvent* event,
diff --git a/services/input/InputDispatcher.h b/services/input/InputDispatcher.h
index 1d39b2e..01c7b35 100644
--- a/services/input/InputDispatcher.h
+++ b/services/input/InputDispatcher.h
@@ -34,6 +34,7 @@
#include "InputWindow.h"
#include "InputApplication.h"
+#include "InputListener.h"
namespace android {
@@ -270,7 +271,7 @@
/* Notifies the system about input events generated by the input reader.
* The dispatcher is expected to be mostly asynchronous. */
-class InputDispatcherInterface : public virtual RefBase {
+class InputDispatcherInterface : public virtual RefBase, public InputListenerInterface {
protected:
InputDispatcherInterface() { }
virtual ~InputDispatcherInterface() { }
@@ -288,23 +289,6 @@
*/
virtual void dispatchOnce() = 0;
- /* Notifies the dispatcher about new events.
- *
- * These methods should only be called on the input reader thread.
- */
- virtual void notifyConfigurationChanged(nsecs_t eventTime) = 0;
- virtual void notifyKey(nsecs_t eventTime, int32_t deviceId, uint32_t source,
- uint32_t policyFlags, int32_t action, int32_t flags, int32_t keyCode,
- int32_t scanCode, int32_t metaState, nsecs_t downTime) = 0;
- virtual void notifyMotion(nsecs_t eventTime, int32_t deviceId, uint32_t source,
- uint32_t policyFlags, int32_t action, int32_t flags,
- int32_t metaState, int32_t buttonState, int32_t edgeFlags,
- uint32_t pointerCount, const PointerProperties* pointerProperties,
- const PointerCoords* pointerCoords,
- float xPrecision, float yPrecision, nsecs_t downTime) = 0;
- virtual void notifySwitch(nsecs_t when,
- int32_t switchCode, int32_t switchValue, uint32_t policyFlags) = 0;
-
/* Injects an input event and optionally waits for sync.
* The synchronization mode determines whether the method blocks while waiting for
* input injection to proceed.
@@ -389,18 +373,10 @@
virtual void dispatchOnce();
- virtual void notifyConfigurationChanged(nsecs_t eventTime);
- virtual void notifyKey(nsecs_t eventTime, int32_t deviceId, uint32_t source,
- uint32_t policyFlags, int32_t action, int32_t flags, int32_t keyCode,
- int32_t scanCode, int32_t metaState, nsecs_t downTime);
- virtual void notifyMotion(nsecs_t eventTime, int32_t deviceId, uint32_t source,
- uint32_t policyFlags, int32_t action, int32_t flags,
- int32_t metaState, int32_t buttonState, int32_t edgeFlags,
- uint32_t pointerCount, const PointerProperties* pointerProperties,
- const PointerCoords* pointerCoords,
- float xPrecision, float yPrecision, nsecs_t downTime);
- virtual void notifySwitch(nsecs_t when,
- int32_t switchCode, int32_t switchValue, uint32_t policyFlags) ;
+ virtual void notifyConfigurationChanged(const NotifyConfigurationChangedArgs* args);
+ virtual void notifyKey(const NotifyKeyArgs* args);
+ virtual void notifyMotion(const NotifyMotionArgs* args);
+ virtual void notifySwitch(const NotifySwitchArgs* args);
virtual int32_t injectInputEvent(const InputEvent* event,
int32_t injectorPid, int32_t injectorUid, int32_t syncMode, int32_t timeoutMillis,
diff --git a/services/input/InputListener.cpp b/services/input/InputListener.cpp
new file mode 100644
index 0000000..4f9fe90
--- /dev/null
+++ b/services/input/InputListener.cpp
@@ -0,0 +1,162 @@
+/*
+ * Copyright (C) 2011 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.
+ */
+
+#define LOG_TAG "InputListener"
+
+//#define LOG_NDEBUG 0
+
+#include "InputListener.h"
+
+#include <cutils/log.h>
+
+namespace android {
+
+// --- NotifyConfigurationChangedArgs ---
+
+NotifyConfigurationChangedArgs::NotifyConfigurationChangedArgs(nsecs_t eventTime) :
+ eventTime(eventTime) {
+}
+
+NotifyConfigurationChangedArgs::NotifyConfigurationChangedArgs(
+ const NotifyConfigurationChangedArgs& other) :
+ eventTime(other.eventTime) {
+}
+
+void NotifyConfigurationChangedArgs::notify(const sp<InputListenerInterface>& listener) const {
+ listener->notifyConfigurationChanged(this);
+}
+
+
+// --- NotifyKeyArgs ---
+
+NotifyKeyArgs::NotifyKeyArgs(nsecs_t eventTime, int32_t deviceId, uint32_t source,
+ uint32_t policyFlags,
+ int32_t action, int32_t flags, int32_t keyCode, int32_t scanCode,
+ int32_t metaState, nsecs_t downTime) :
+ eventTime(eventTime), deviceId(deviceId), source(source), policyFlags(policyFlags),
+ action(action), flags(flags), keyCode(keyCode), scanCode(scanCode),
+ metaState(metaState), downTime(downTime) {
+}
+
+NotifyKeyArgs::NotifyKeyArgs(const NotifyKeyArgs& other) :
+ eventTime(other.eventTime), deviceId(other.deviceId), source(other.source),
+ policyFlags(other.policyFlags),
+ action(other.action), flags(other.flags),
+ keyCode(other.keyCode), scanCode(other.scanCode),
+ metaState(other.metaState), downTime(other.downTime) {
+}
+
+void NotifyKeyArgs::notify(const sp<InputListenerInterface>& listener) const {
+ listener->notifyKey(this);
+}
+
+
+// --- NotifyMotionArgs ---
+
+NotifyMotionArgs::NotifyMotionArgs(nsecs_t eventTime, int32_t deviceId, uint32_t source,
+ uint32_t policyFlags,
+ int32_t action, int32_t flags, int32_t metaState, int32_t buttonState,
+ int32_t edgeFlags, uint32_t pointerCount,
+ const PointerProperties* pointerProperties, const PointerCoords* pointerCoords,
+ float xPrecision, float yPrecision, nsecs_t downTime) :
+ eventTime(eventTime), deviceId(deviceId), source(source), policyFlags(policyFlags),
+ action(action), flags(flags), metaState(metaState), buttonState(buttonState),
+ edgeFlags(edgeFlags), pointerCount(pointerCount),
+ xPrecision(xPrecision), yPrecision(yPrecision), downTime(downTime) {
+ for (uint32_t i = 0; i < pointerCount; i++) {
+ this->pointerProperties[i].copyFrom(pointerProperties[i]);
+ this->pointerCoords[i].copyFrom(pointerCoords[i]);
+ }
+}
+
+NotifyMotionArgs::NotifyMotionArgs(const NotifyMotionArgs& other) :
+ eventTime(other.eventTime), deviceId(other.deviceId), source(other.source),
+ policyFlags(other.policyFlags),
+ action(other.action), flags(other.flags),
+ metaState(other.metaState), buttonState(other.buttonState),
+ edgeFlags(other.edgeFlags), pointerCount(other.pointerCount),
+ xPrecision(other.xPrecision), yPrecision(other.yPrecision), downTime(other.downTime) {
+ for (uint32_t i = 0; i < pointerCount; i++) {
+ pointerProperties[i].copyFrom(other.pointerProperties[i]);
+ pointerCoords[i].copyFrom(other.pointerCoords[i]);
+ }
+}
+
+void NotifyMotionArgs::notify(const sp<InputListenerInterface>& listener) const {
+ listener->notifyMotion(this);
+}
+
+
+// --- NotifySwitchArgs ---
+
+NotifySwitchArgs::NotifySwitchArgs(nsecs_t eventTime, uint32_t policyFlags,
+ int32_t switchCode, int32_t switchValue) :
+ eventTime(eventTime), policyFlags(policyFlags),
+ switchCode(switchCode), switchValue(switchValue) {
+}
+
+NotifySwitchArgs::NotifySwitchArgs(const NotifySwitchArgs& other) :
+ eventTime(other.eventTime), policyFlags(other.policyFlags),
+ switchCode(other.switchCode), switchValue(other.switchValue) {
+}
+
+void NotifySwitchArgs::notify(const sp<InputListenerInterface>& listener) const {
+ listener->notifySwitch(this);
+}
+
+
+// --- QueuedInputListener ---
+
+QueuedInputListener::QueuedInputListener(const sp<InputListenerInterface>& innerListener) :
+ mInnerListener(innerListener) {
+}
+
+QueuedInputListener::~QueuedInputListener() {
+ size_t count = mArgsQueue.size();
+ for (size_t i = 0; i < count; i++) {
+ delete mArgsQueue[i];
+ }
+}
+
+void QueuedInputListener::notifyConfigurationChanged(
+ const NotifyConfigurationChangedArgs* args) {
+ mArgsQueue.push(new NotifyConfigurationChangedArgs(*args));
+}
+
+void QueuedInputListener::notifyKey(const NotifyKeyArgs* args) {
+ mArgsQueue.push(new NotifyKeyArgs(*args));
+}
+
+void QueuedInputListener::notifyMotion(const NotifyMotionArgs* args) {
+ mArgsQueue.push(new NotifyMotionArgs(*args));
+}
+
+void QueuedInputListener::notifySwitch(const NotifySwitchArgs* args) {
+ mArgsQueue.push(new NotifySwitchArgs(*args));
+}
+
+void QueuedInputListener::flush() {
+ size_t count = mArgsQueue.size();
+ for (size_t i = 0; i < count; i++) {
+ NotifyArgs* args = mArgsQueue[i];
+ args->notify(mInnerListener);
+ delete args;
+ }
+ mArgsQueue.clear();
+}
+
+
+} // namespace android
diff --git a/services/input/InputListener.h b/services/input/InputListener.h
new file mode 100644
index 0000000..3fef132
--- /dev/null
+++ b/services/input/InputListener.h
@@ -0,0 +1,175 @@
+/*
+ * Copyright (C) 2011 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.
+ */
+
+#ifndef _UI_INPUT_LISTENER_H
+#define _UI_INPUT_LISTENER_H
+
+#include <ui/Input.h>
+#include <utils/RefBase.h>
+#include <utils/Vector.h>
+
+namespace android {
+
+class InputListenerInterface;
+
+
+/* Superclass of all input event argument objects */
+struct NotifyArgs {
+ virtual ~NotifyArgs() { }
+
+ virtual void notify(const sp<InputListenerInterface>& listener) const = 0;
+};
+
+
+/* Describes a configuration change event. */
+struct NotifyConfigurationChangedArgs : public NotifyArgs {
+ nsecs_t eventTime;
+
+ inline NotifyConfigurationChangedArgs() { }
+
+ NotifyConfigurationChangedArgs(nsecs_t eventTime);
+
+ NotifyConfigurationChangedArgs(const NotifyConfigurationChangedArgs& other);
+
+ virtual ~NotifyConfigurationChangedArgs() { }
+
+ virtual void notify(const sp<InputListenerInterface>& listener) const;
+};
+
+
+/* Describes a key event. */
+struct NotifyKeyArgs : public NotifyArgs {
+ nsecs_t eventTime;
+ int32_t deviceId;
+ uint32_t source;
+ uint32_t policyFlags;
+ int32_t action;
+ int32_t flags;
+ int32_t keyCode;
+ int32_t scanCode;
+ int32_t metaState;
+ nsecs_t downTime;
+
+ inline NotifyKeyArgs() { }
+
+ NotifyKeyArgs(nsecs_t eventTime, int32_t deviceId, uint32_t source, uint32_t policyFlags,
+ int32_t action, int32_t flags, int32_t keyCode, int32_t scanCode,
+ int32_t metaState, nsecs_t downTime);
+
+ NotifyKeyArgs(const NotifyKeyArgs& other);
+
+ virtual ~NotifyKeyArgs() { }
+
+ virtual void notify(const sp<InputListenerInterface>& listener) const;
+};
+
+
+/* Describes a motion event. */
+struct NotifyMotionArgs : public NotifyArgs {
+ nsecs_t eventTime;
+ int32_t deviceId;
+ uint32_t source;
+ uint32_t policyFlags;
+ int32_t action;
+ int32_t flags;
+ int32_t metaState;
+ int32_t buttonState;
+ int32_t edgeFlags;
+ uint32_t pointerCount;
+ PointerProperties pointerProperties[MAX_POINTERS];
+ PointerCoords pointerCoords[MAX_POINTERS];
+ float xPrecision;
+ float yPrecision;
+ nsecs_t downTime;
+
+ inline NotifyMotionArgs() { }
+
+ NotifyMotionArgs(nsecs_t eventTime, int32_t deviceId, uint32_t source, uint32_t policyFlags,
+ int32_t action, int32_t flags, int32_t metaState, int32_t buttonState,
+ int32_t edgeFlags, uint32_t pointerCount,
+ const PointerProperties* pointerProperties, const PointerCoords* pointerCoords,
+ float xPrecision, float yPrecision, nsecs_t downTime);
+
+ NotifyMotionArgs(const NotifyMotionArgs& other);
+
+ virtual ~NotifyMotionArgs() { }
+
+ virtual void notify(const sp<InputListenerInterface>& listener) const;
+};
+
+
+/* Describes a switch event. */
+struct NotifySwitchArgs : public NotifyArgs {
+ nsecs_t eventTime;
+ uint32_t policyFlags;
+ int32_t switchCode;
+ int32_t switchValue;
+
+ inline NotifySwitchArgs() { }
+
+ NotifySwitchArgs(nsecs_t eventTime, uint32_t policyFlags,
+ int32_t switchCode, int32_t switchValue);
+
+ NotifySwitchArgs(const NotifySwitchArgs& other);
+
+ virtual ~NotifySwitchArgs() { }
+
+ virtual void notify(const sp<InputListenerInterface>& listener) const;
+};
+
+
+/*
+ * The interface used by the InputReader to notify the InputListener about input events.
+ */
+class InputListenerInterface : public virtual RefBase {
+protected:
+ InputListenerInterface() { }
+ virtual ~InputListenerInterface() { }
+
+public:
+ virtual void notifyConfigurationChanged(const NotifyConfigurationChangedArgs* args) = 0;
+ virtual void notifyKey(const NotifyKeyArgs* args) = 0;
+ virtual void notifyMotion(const NotifyMotionArgs* args) = 0;
+ virtual void notifySwitch(const NotifySwitchArgs* args) = 0;
+};
+
+
+/*
+ * An implementation of the listener interface that queues up and defers dispatch
+ * of decoded events until flushed.
+ */
+class QueuedInputListener : public InputListenerInterface {
+protected:
+ virtual ~QueuedInputListener();
+
+public:
+ QueuedInputListener(const sp<InputListenerInterface>& innerListener);
+
+ virtual void notifyConfigurationChanged(const NotifyConfigurationChangedArgs* args);
+ virtual void notifyKey(const NotifyKeyArgs* args);
+ virtual void notifyMotion(const NotifyMotionArgs* args);
+ virtual void notifySwitch(const NotifySwitchArgs* args);
+
+ void flush();
+
+private:
+ sp<InputListenerInterface> mInnerListener;
+ Vector<NotifyArgs*> mArgsQueue;
+};
+
+} // namespace android
+
+#endif // _UI_INPUT_LISTENER_H
diff --git a/services/input/InputReader.cpp b/services/input/InputReader.cpp
index db312ad..8786c24 100644
--- a/services/input/InputReader.cpp
+++ b/services/input/InputReader.cpp
@@ -180,8 +180,9 @@
|| (action == AKEY_EVENT_ACTION_UP
&& (lastButtonState & buttonState)
&& !(currentButtonState & buttonState))) {
- context->getDispatcher()->notifyKey(when, deviceId, source, policyFlags,
+ NotifyKeyArgs args(when, deviceId, source, policyFlags,
action, 0, keyCode, 0, context->getGlobalMetaState(), when);
+ context->getListener()->notifyKey(&args);
}
}
@@ -201,13 +202,19 @@
InputReader::InputReader(const sp<EventHubInterface>& eventHub,
const sp<InputReaderPolicyInterface>& policy,
- const sp<InputDispatcherInterface>& dispatcher) :
- mEventHub(eventHub), mPolicy(policy), mDispatcher(dispatcher),
+ const sp<InputListenerInterface>& listener) :
+ mContext(this), mEventHub(eventHub), mPolicy(policy),
mGlobalMetaState(0), mDisableVirtualKeysTimeout(LLONG_MIN), mNextTimeout(LLONG_MAX),
mConfigurationChangesToRefresh(0) {
- refreshConfiguration(0);
- updateGlobalMetaState();
- updateInputConfiguration();
+ mQueuedListener = new QueuedInputListener(listener);
+
+ { // acquire lock
+ AutoMutex _l(mLock);
+
+ refreshConfigurationLocked(0);
+ updateGlobalMetaStateLocked();
+ updateInputConfigurationLocked();
+ } // release lock
}
InputReader::~InputReader() {
@@ -217,39 +224,52 @@
}
void InputReader::loopOnce() {
- uint32_t changes;
+ int32_t timeoutMillis;
{ // acquire lock
- AutoMutex _l(mStateLock);
+ AutoMutex _l(mLock);
- changes = mConfigurationChangesToRefresh;
- mConfigurationChangesToRefresh = 0;
+ uint32_t changes = mConfigurationChangesToRefresh;
+ if (changes) {
+ mConfigurationChangesToRefresh = 0;
+ refreshConfigurationLocked(changes);
+ }
+
+ timeoutMillis = -1;
+ if (mNextTimeout != LLONG_MAX) {
+ nsecs_t now = systemTime(SYSTEM_TIME_MONOTONIC);
+ timeoutMillis = toMillisecondTimeoutDelay(now, mNextTimeout);
+ }
} // release lock
- if (changes) {
- refreshConfiguration(changes);
- }
-
- int32_t timeoutMillis = -1;
- if (mNextTimeout != LLONG_MAX) {
- nsecs_t now = systemTime(SYSTEM_TIME_MONOTONIC);
- timeoutMillis = toMillisecondTimeoutDelay(now, mNextTimeout);
- }
-
size_t count = mEventHub->getEvents(timeoutMillis, mEventBuffer, EVENT_BUFFER_SIZE);
- if (count) {
- processEvents(mEventBuffer, count);
- }
- if (!count || timeoutMillis == 0) {
- nsecs_t now = systemTime(SYSTEM_TIME_MONOTONIC);
+
+ { // acquire lock
+ AutoMutex _l(mLock);
+
+ if (count) {
+ processEventsLocked(mEventBuffer, count);
+ }
+ if (!count || timeoutMillis == 0) {
+ nsecs_t now = systemTime(SYSTEM_TIME_MONOTONIC);
#if DEBUG_RAW_EVENTS
- LOGD("Timeout expired, latency=%0.3fms", (now - mNextTimeout) * 0.000001f);
+ LOGD("Timeout expired, latency=%0.3fms", (now - mNextTimeout) * 0.000001f);
#endif
- mNextTimeout = LLONG_MAX;
- timeoutExpired(now);
- }
+ mNextTimeout = LLONG_MAX;
+ timeoutExpiredLocked(now);
+ }
+ } // release lock
+
+ // Flush queued events out to the listener.
+ // This must happen outside of the lock because the listener could potentially call
+ // back into the InputReader's methods, such as getScanCodeState, or become blocked
+ // on another thread similarly waiting to acquire the InputReader lock thereby
+ // resulting in a deadlock. This situation is actually quite plausible because the
+ // listener is actually the input dispatcher, which calls into the window manager,
+ // which occasionally calls into the input reader.
+ mQueuedListener->flush();
}
-void InputReader::processEvents(const RawEvent* rawEvents, size_t count) {
+void InputReader::processEventsLocked(const RawEvent* rawEvents, size_t count) {
for (const RawEvent* rawEvent = rawEvents; count;) {
int32_t type = rawEvent->type;
size_t batchSize = 1;
@@ -265,17 +285,17 @@
#if DEBUG_RAW_EVENTS
LOGD("BatchSize: %d Count: %d", batchSize, count);
#endif
- processEventsForDevice(deviceId, rawEvent, batchSize);
+ processEventsForDeviceLocked(deviceId, rawEvent, batchSize);
} else {
switch (rawEvent->type) {
case EventHubInterface::DEVICE_ADDED:
- addDevice(rawEvent->deviceId);
+ addDeviceLocked(rawEvent->deviceId);
break;
case EventHubInterface::DEVICE_REMOVED:
- removeDevice(rawEvent->deviceId);
+ removeDeviceLocked(rawEvent->deviceId);
break;
case EventHubInterface::FINISHED_DEVICE_SCAN:
- handleConfigurationChanged(rawEvent->when);
+ handleConfigurationChangedLocked(rawEvent->when);
break;
default:
LOG_ASSERT(false); // can't happen
@@ -287,11 +307,11 @@
}
}
-void InputReader::addDevice(int32_t deviceId) {
+void InputReader::addDeviceLocked(int32_t deviceId) {
String8 name = mEventHub->getDeviceName(deviceId);
uint32_t classes = mEventHub->getDeviceClasses(deviceId);
- InputDevice* device = createDevice(deviceId, name, classes);
+ InputDevice* device = createDeviceLocked(deviceId, name, classes);
device->configure(&mConfig, 0);
if (device->isIgnored()) {
@@ -301,39 +321,23 @@
device->getSources());
}
- bool added = false;
- { // acquire device registry writer lock
- RWLock::AutoWLock _wl(mDeviceRegistryLock);
-
- ssize_t deviceIndex = mDevices.indexOfKey(deviceId);
- if (deviceIndex < 0) {
- mDevices.add(deviceId, device);
- added = true;
- }
- } // release device registry writer lock
-
- if (! added) {
+ ssize_t deviceIndex = mDevices.indexOfKey(deviceId);
+ if (deviceIndex < 0) {
+ mDevices.add(deviceId, device);
+ } else {
LOGW("Ignoring spurious device added event for deviceId %d.", deviceId);
delete device;
return;
}
}
-void InputReader::removeDevice(int32_t deviceId) {
- bool removed = false;
+void InputReader::removeDeviceLocked(int32_t deviceId) {
InputDevice* device = NULL;
- { // acquire device registry writer lock
- RWLock::AutoWLock _wl(mDeviceRegistryLock);
-
- ssize_t deviceIndex = mDevices.indexOfKey(deviceId);
- if (deviceIndex >= 0) {
- device = mDevices.valueAt(deviceIndex);
- mDevices.removeItemsAt(deviceIndex, 1);
- removed = true;
- }
- } // release device registry writer lock
-
- if (! removed) {
+ ssize_t deviceIndex = mDevices.indexOfKey(deviceId);
+ if (deviceIndex >= 0) {
+ device = mDevices.valueAt(deviceIndex);
+ mDevices.removeItemsAt(deviceIndex, 1);
+ } else {
LOGW("Ignoring spurious device removed event for deviceId %d.", deviceId);
return;
}
@@ -351,8 +355,9 @@
delete device;
}
-InputDevice* InputReader::createDevice(int32_t deviceId, const String8& name, uint32_t classes) {
- InputDevice* device = new InputDevice(this, deviceId, name);
+InputDevice* InputReader::createDeviceLocked(int32_t deviceId,
+ const String8& name, uint32_t classes) {
+ InputDevice* device = new InputDevice(&mContext, deviceId, name);
// External devices.
if (classes & INPUT_DEVICE_CLASS_EXTERNAL) {
@@ -404,52 +409,45 @@
return device;
}
-void InputReader::processEventsForDevice(int32_t deviceId,
+void InputReader::processEventsForDeviceLocked(int32_t deviceId,
const RawEvent* rawEvents, size_t count) {
- { // acquire device registry reader lock
- RWLock::AutoRLock _rl(mDeviceRegistryLock);
+ ssize_t deviceIndex = mDevices.indexOfKey(deviceId);
+ if (deviceIndex < 0) {
+ LOGW("Discarding event for unknown deviceId %d.", deviceId);
+ return;
+ }
- ssize_t deviceIndex = mDevices.indexOfKey(deviceId);
- if (deviceIndex < 0) {
- LOGW("Discarding event for unknown deviceId %d.", deviceId);
- return;
- }
+ InputDevice* device = mDevices.valueAt(deviceIndex);
+ if (device->isIgnored()) {
+ //LOGD("Discarding event for ignored deviceId %d.", deviceId);
+ return;
+ }
- InputDevice* device = mDevices.valueAt(deviceIndex);
- if (device->isIgnored()) {
- //LOGD("Discarding event for ignored deviceId %d.", deviceId);
- return;
- }
-
- device->process(rawEvents, count);
- } // release device registry reader lock
+ device->process(rawEvents, count);
}
-void InputReader::timeoutExpired(nsecs_t when) {
- { // acquire device registry reader lock
- RWLock::AutoRLock _rl(mDeviceRegistryLock);
-
- for (size_t i = 0; i < mDevices.size(); i++) {
- InputDevice* device = mDevices.valueAt(i);
- if (!device->isIgnored()) {
- device->timeoutExpired(when);
- }
+void InputReader::timeoutExpiredLocked(nsecs_t when) {
+ for (size_t i = 0; i < mDevices.size(); i++) {
+ InputDevice* device = mDevices.valueAt(i);
+ if (!device->isIgnored()) {
+ device->timeoutExpired(when);
}
- } // release device registry reader lock
+ }
}
-void InputReader::handleConfigurationChanged(nsecs_t when) {
+void InputReader::handleConfigurationChangedLocked(nsecs_t when) {
// Reset global meta state because it depends on the list of all configured devices.
- updateGlobalMetaState();
+ updateGlobalMetaStateLocked();
// Update input configuration.
- updateInputConfiguration();
+ updateInputConfigurationLocked();
// Enqueue configuration changed.
- mDispatcher->notifyConfigurationChanged(when);
+ NotifyConfigurationChangedArgs args(when);
+ mQueuedListener->notifyConfigurationChanged(&args);
}
-void InputReader::refreshConfiguration(uint32_t changes) {
+void InputReader::refreshConfigurationLocked(uint32_t changes) {
mPolicy->getReaderConfiguration(&mConfig);
mEventHub->setExcludedDevices(mConfig.excludedDeviceNames);
@@ -459,84 +457,60 @@
if (changes & InputReaderConfiguration::CHANGE_MUST_REOPEN) {
mEventHub->requestReopenDevices();
} else {
- { // acquire device registry reader lock
- RWLock::AutoRLock _rl(mDeviceRegistryLock);
-
- for (size_t i = 0; i < mDevices.size(); i++) {
- InputDevice* device = mDevices.valueAt(i);
- device->configure(&mConfig, changes);
- }
- } // release device registry reader lock
+ for (size_t i = 0; i < mDevices.size(); i++) {
+ InputDevice* device = mDevices.valueAt(i);
+ device->configure(&mConfig, changes);
+ }
}
}
}
-void InputReader::updateGlobalMetaState() {
- { // acquire state lock
- AutoMutex _l(mStateLock);
+void InputReader::updateGlobalMetaStateLocked() {
+ mGlobalMetaState = 0;
- mGlobalMetaState = 0;
-
- { // acquire device registry reader lock
- RWLock::AutoRLock _rl(mDeviceRegistryLock);
-
- for (size_t i = 0; i < mDevices.size(); i++) {
- InputDevice* device = mDevices.valueAt(i);
- mGlobalMetaState |= device->getMetaState();
- }
- } // release device registry reader lock
- } // release state lock
+ for (size_t i = 0; i < mDevices.size(); i++) {
+ InputDevice* device = mDevices.valueAt(i);
+ mGlobalMetaState |= device->getMetaState();
+ }
}
-int32_t InputReader::getGlobalMetaState() {
- { // acquire state lock
- AutoMutex _l(mStateLock);
-
- return mGlobalMetaState;
- } // release state lock
+int32_t InputReader::getGlobalMetaStateLocked() {
+ return mGlobalMetaState;
}
-void InputReader::updateInputConfiguration() {
- { // acquire state lock
- AutoMutex _l(mStateLock);
+void InputReader::updateInputConfigurationLocked() {
+ int32_t touchScreenConfig = InputConfiguration::TOUCHSCREEN_NOTOUCH;
+ int32_t keyboardConfig = InputConfiguration::KEYBOARD_NOKEYS;
+ int32_t navigationConfig = InputConfiguration::NAVIGATION_NONAV;
+ InputDeviceInfo deviceInfo;
+ for (size_t i = 0; i < mDevices.size(); i++) {
+ InputDevice* device = mDevices.valueAt(i);
+ device->getDeviceInfo(& deviceInfo);
+ uint32_t sources = deviceInfo.getSources();
- int32_t touchScreenConfig = InputConfiguration::TOUCHSCREEN_NOTOUCH;
- int32_t keyboardConfig = InputConfiguration::KEYBOARD_NOKEYS;
- int32_t navigationConfig = InputConfiguration::NAVIGATION_NONAV;
- { // acquire device registry reader lock
- RWLock::AutoRLock _rl(mDeviceRegistryLock);
+ if ((sources & AINPUT_SOURCE_TOUCHSCREEN) == AINPUT_SOURCE_TOUCHSCREEN) {
+ touchScreenConfig = InputConfiguration::TOUCHSCREEN_FINGER;
+ }
+ if ((sources & AINPUT_SOURCE_TRACKBALL) == AINPUT_SOURCE_TRACKBALL) {
+ navigationConfig = InputConfiguration::NAVIGATION_TRACKBALL;
+ } else if ((sources & AINPUT_SOURCE_DPAD) == AINPUT_SOURCE_DPAD) {
+ navigationConfig = InputConfiguration::NAVIGATION_DPAD;
+ }
+ if (deviceInfo.getKeyboardType() == AINPUT_KEYBOARD_TYPE_ALPHABETIC) {
+ keyboardConfig = InputConfiguration::KEYBOARD_QWERTY;
+ }
+ }
- InputDeviceInfo deviceInfo;
- for (size_t i = 0; i < mDevices.size(); i++) {
- InputDevice* device = mDevices.valueAt(i);
- device->getDeviceInfo(& deviceInfo);
- uint32_t sources = deviceInfo.getSources();
-
- if ((sources & AINPUT_SOURCE_TOUCHSCREEN) == AINPUT_SOURCE_TOUCHSCREEN) {
- touchScreenConfig = InputConfiguration::TOUCHSCREEN_FINGER;
- }
- if ((sources & AINPUT_SOURCE_TRACKBALL) == AINPUT_SOURCE_TRACKBALL) {
- navigationConfig = InputConfiguration::NAVIGATION_TRACKBALL;
- } else if ((sources & AINPUT_SOURCE_DPAD) == AINPUT_SOURCE_DPAD) {
- navigationConfig = InputConfiguration::NAVIGATION_DPAD;
- }
- if (deviceInfo.getKeyboardType() == AINPUT_KEYBOARD_TYPE_ALPHABETIC) {
- keyboardConfig = InputConfiguration::KEYBOARD_QWERTY;
- }
- }
- } // release device registry reader lock
-
- mInputConfiguration.touchScreen = touchScreenConfig;
- mInputConfiguration.keyboard = keyboardConfig;
- mInputConfiguration.navigation = navigationConfig;
- } // release state lock
+ mInputConfiguration.touchScreen = touchScreenConfig;
+ mInputConfiguration.keyboard = keyboardConfig;
+ mInputConfiguration.navigation = navigationConfig;
}
-void InputReader::disableVirtualKeysUntil(nsecs_t time) {
+void InputReader::disableVirtualKeysUntilLocked(nsecs_t time) {
mDisableVirtualKeysTimeout = time;
}
-bool InputReader::shouldDropVirtualKey(nsecs_t now,
+bool InputReader::shouldDropVirtualKeyLocked(nsecs_t now,
InputDevice* device, int32_t keyCode, int32_t scanCode) {
if (now < mDisableVirtualKeysTimeout) {
LOGI("Dropping virtual key from device %s because virtual keys are "
@@ -550,153 +524,141 @@
}
}
-void InputReader::fadePointer() {
- { // acquire device registry reader lock
- RWLock::AutoRLock _rl(mDeviceRegistryLock);
-
- for (size_t i = 0; i < mDevices.size(); i++) {
- InputDevice* device = mDevices.valueAt(i);
- device->fadePointer();
- }
- } // release device registry reader lock
+void InputReader::fadePointerLocked() {
+ for (size_t i = 0; i < mDevices.size(); i++) {
+ InputDevice* device = mDevices.valueAt(i);
+ device->fadePointer();
+ }
}
-void InputReader::requestTimeoutAtTime(nsecs_t when) {
+void InputReader::requestTimeoutAtTimeLocked(nsecs_t when) {
if (when < mNextTimeout) {
mNextTimeout = when;
}
}
void InputReader::getInputConfiguration(InputConfiguration* outConfiguration) {
- { // acquire state lock
- AutoMutex _l(mStateLock);
+ AutoMutex _l(mLock);
- *outConfiguration = mInputConfiguration;
- } // release state lock
+ *outConfiguration = mInputConfiguration;
}
status_t InputReader::getInputDeviceInfo(int32_t deviceId, InputDeviceInfo* outDeviceInfo) {
- { // acquire device registry reader lock
- RWLock::AutoRLock _rl(mDeviceRegistryLock);
+ AutoMutex _l(mLock);
- ssize_t deviceIndex = mDevices.indexOfKey(deviceId);
- if (deviceIndex < 0) {
- return NAME_NOT_FOUND;
- }
+ ssize_t deviceIndex = mDevices.indexOfKey(deviceId);
+ if (deviceIndex < 0) {
+ return NAME_NOT_FOUND;
+ }
- InputDevice* device = mDevices.valueAt(deviceIndex);
- if (device->isIgnored()) {
- return NAME_NOT_FOUND;
- }
+ InputDevice* device = mDevices.valueAt(deviceIndex);
+ if (device->isIgnored()) {
+ return NAME_NOT_FOUND;
+ }
- device->getDeviceInfo(outDeviceInfo);
- return OK;
- } // release device registy reader lock
+ device->getDeviceInfo(outDeviceInfo);
+ return OK;
}
void InputReader::getInputDeviceIds(Vector<int32_t>& outDeviceIds) {
+ AutoMutex _l(mLock);
+
outDeviceIds.clear();
- { // acquire device registry reader lock
- RWLock::AutoRLock _rl(mDeviceRegistryLock);
-
- size_t numDevices = mDevices.size();
- for (size_t i = 0; i < numDevices; i++) {
- InputDevice* device = mDevices.valueAt(i);
- if (! device->isIgnored()) {
- outDeviceIds.add(device->getId());
- }
+ size_t numDevices = mDevices.size();
+ for (size_t i = 0; i < numDevices; i++) {
+ InputDevice* device = mDevices.valueAt(i);
+ if (!device->isIgnored()) {
+ outDeviceIds.add(device->getId());
}
- } // release device registy reader lock
+ }
}
int32_t InputReader::getKeyCodeState(int32_t deviceId, uint32_t sourceMask,
int32_t keyCode) {
- return getState(deviceId, sourceMask, keyCode, & InputDevice::getKeyCodeState);
+ AutoMutex _l(mLock);
+
+ return getStateLocked(deviceId, sourceMask, keyCode, &InputDevice::getKeyCodeState);
}
int32_t InputReader::getScanCodeState(int32_t deviceId, uint32_t sourceMask,
int32_t scanCode) {
- return getState(deviceId, sourceMask, scanCode, & InputDevice::getScanCodeState);
+ AutoMutex _l(mLock);
+
+ return getStateLocked(deviceId, sourceMask, scanCode, &InputDevice::getScanCodeState);
}
int32_t InputReader::getSwitchState(int32_t deviceId, uint32_t sourceMask, int32_t switchCode) {
- return getState(deviceId, sourceMask, switchCode, & InputDevice::getSwitchState);
+ AutoMutex _l(mLock);
+
+ return getStateLocked(deviceId, sourceMask, switchCode, &InputDevice::getSwitchState);
}
-int32_t InputReader::getState(int32_t deviceId, uint32_t sourceMask, int32_t code,
+int32_t InputReader::getStateLocked(int32_t deviceId, uint32_t sourceMask, int32_t code,
GetStateFunc getStateFunc) {
- { // acquire device registry reader lock
- RWLock::AutoRLock _rl(mDeviceRegistryLock);
-
- int32_t result = AKEY_STATE_UNKNOWN;
- if (deviceId >= 0) {
- ssize_t deviceIndex = mDevices.indexOfKey(deviceId);
- if (deviceIndex >= 0) {
- InputDevice* device = mDevices.valueAt(deviceIndex);
- if (! device->isIgnored() && sourcesMatchMask(device->getSources(), sourceMask)) {
- result = (device->*getStateFunc)(sourceMask, code);
- }
+ int32_t result = AKEY_STATE_UNKNOWN;
+ if (deviceId >= 0) {
+ ssize_t deviceIndex = mDevices.indexOfKey(deviceId);
+ if (deviceIndex >= 0) {
+ InputDevice* device = mDevices.valueAt(deviceIndex);
+ if (! device->isIgnored() && sourcesMatchMask(device->getSources(), sourceMask)) {
+ result = (device->*getStateFunc)(sourceMask, code);
}
- } else {
- size_t numDevices = mDevices.size();
- for (size_t i = 0; i < numDevices; i++) {
- InputDevice* device = mDevices.valueAt(i);
- if (! device->isIgnored() && sourcesMatchMask(device->getSources(), sourceMask)) {
- result = (device->*getStateFunc)(sourceMask, code);
- if (result >= AKEY_STATE_DOWN) {
- return result;
- }
+ }
+ } else {
+ size_t numDevices = mDevices.size();
+ for (size_t i = 0; i < numDevices; i++) {
+ InputDevice* device = mDevices.valueAt(i);
+ if (! device->isIgnored() && sourcesMatchMask(device->getSources(), sourceMask)) {
+ result = (device->*getStateFunc)(sourceMask, code);
+ if (result >= AKEY_STATE_DOWN) {
+ return result;
}
}
}
- return result;
- } // release device registy reader lock
+ }
+ return result;
}
bool InputReader::hasKeys(int32_t deviceId, uint32_t sourceMask,
size_t numCodes, const int32_t* keyCodes, uint8_t* outFlags) {
+ AutoMutex _l(mLock);
+
memset(outFlags, 0, numCodes);
- return markSupportedKeyCodes(deviceId, sourceMask, numCodes, keyCodes, outFlags);
+ return markSupportedKeyCodesLocked(deviceId, sourceMask, numCodes, keyCodes, outFlags);
}
-bool InputReader::markSupportedKeyCodes(int32_t deviceId, uint32_t sourceMask, size_t numCodes,
- const int32_t* keyCodes, uint8_t* outFlags) {
- { // acquire device registry reader lock
- RWLock::AutoRLock _rl(mDeviceRegistryLock);
- bool result = false;
- if (deviceId >= 0) {
- ssize_t deviceIndex = mDevices.indexOfKey(deviceId);
- if (deviceIndex >= 0) {
- InputDevice* device = mDevices.valueAt(deviceIndex);
- if (! device->isIgnored() && sourcesMatchMask(device->getSources(), sourceMask)) {
- result = device->markSupportedKeyCodes(sourceMask,
- numCodes, keyCodes, outFlags);
- }
- }
- } else {
- size_t numDevices = mDevices.size();
- for (size_t i = 0; i < numDevices; i++) {
- InputDevice* device = mDevices.valueAt(i);
- if (! device->isIgnored() && sourcesMatchMask(device->getSources(), sourceMask)) {
- result |= device->markSupportedKeyCodes(sourceMask,
- numCodes, keyCodes, outFlags);
- }
+bool InputReader::markSupportedKeyCodesLocked(int32_t deviceId, uint32_t sourceMask,
+ size_t numCodes, const int32_t* keyCodes, uint8_t* outFlags) {
+ bool result = false;
+ if (deviceId >= 0) {
+ ssize_t deviceIndex = mDevices.indexOfKey(deviceId);
+ if (deviceIndex >= 0) {
+ InputDevice* device = mDevices.valueAt(deviceIndex);
+ if (! device->isIgnored() && sourcesMatchMask(device->getSources(), sourceMask)) {
+ result = device->markSupportedKeyCodes(sourceMask,
+ numCodes, keyCodes, outFlags);
}
}
- return result;
- } // release device registy reader lock
+ } else {
+ size_t numDevices = mDevices.size();
+ for (size_t i = 0; i < numDevices; i++) {
+ InputDevice* device = mDevices.valueAt(i);
+ if (! device->isIgnored() && sourcesMatchMask(device->getSources(), sourceMask)) {
+ result |= device->markSupportedKeyCodes(sourceMask,
+ numCodes, keyCodes, outFlags);
+ }
+ }
+ }
+ return result;
}
void InputReader::requestRefreshConfiguration(uint32_t changes) {
- if (changes) {
- bool needWake;
- { // acquire lock
- AutoMutex _l(mStateLock);
+ AutoMutex _l(mLock);
- needWake = !mConfigurationChangesToRefresh;
- mConfigurationChangesToRefresh |= changes;
- } // release lock
+ if (changes) {
+ bool needWake = !mConfigurationChangesToRefresh;
+ mConfigurationChangesToRefresh |= changes;
if (needWake) {
mEventHub->wake();
@@ -705,18 +667,16 @@
}
void InputReader::dump(String8& dump) {
+ AutoMutex _l(mLock);
+
mEventHub->dump(dump);
dump.append("\n");
dump.append("Input Reader State:\n");
- { // acquire device registry reader lock
- RWLock::AutoRLock _rl(mDeviceRegistryLock);
-
- for (size_t i = 0; i < mDevices.size(); i++) {
- mDevices.valueAt(i)->dump(dump);
- }
- } // release device registy reader lock
+ for (size_t i = 0; i < mDevices.size(); i++) {
+ mDevices.valueAt(i)->dump(dump);
+ }
dump.append(INDENT "Configuration:\n");
dump.append(INDENT2 "ExcludedDeviceNames: [");
@@ -772,6 +732,56 @@
}
+// --- InputReader::ContextImpl ---
+
+InputReader::ContextImpl::ContextImpl(InputReader* reader) :
+ mReader(reader) {
+}
+
+void InputReader::ContextImpl::updateGlobalMetaState() {
+ // lock is already held by the input loop
+ mReader->updateGlobalMetaStateLocked();
+}
+
+int32_t InputReader::ContextImpl::getGlobalMetaState() {
+ // lock is already held by the input loop
+ return mReader->getGlobalMetaStateLocked();
+}
+
+void InputReader::ContextImpl::disableVirtualKeysUntil(nsecs_t time) {
+ // lock is already held by the input loop
+ mReader->disableVirtualKeysUntilLocked(time);
+}
+
+bool InputReader::ContextImpl::shouldDropVirtualKey(nsecs_t now,
+ InputDevice* device, int32_t keyCode, int32_t scanCode) {
+ // lock is already held by the input loop
+ return mReader->shouldDropVirtualKeyLocked(now, device, keyCode, scanCode);
+}
+
+void InputReader::ContextImpl::fadePointer() {
+ // lock is already held by the input loop
+ mReader->fadePointerLocked();
+}
+
+void InputReader::ContextImpl::requestTimeoutAtTime(nsecs_t when) {
+ // lock is already held by the input loop
+ mReader->requestTimeoutAtTimeLocked(when);
+}
+
+InputReaderPolicyInterface* InputReader::ContextImpl::getPolicy() {
+ return mReader->mPolicy.get();
+}
+
+InputListenerInterface* InputReader::ContextImpl::getListener() {
+ return mReader->mQueuedListener.get();
+}
+
+EventHubInterface* InputReader::ContextImpl::getEventHub() {
+ return mReader->mEventHub.get();
+}
+
+
// --- InputReaderThread ---
InputReaderThread::InputReaderThread(const sp<InputReaderInterface>& reader) :
@@ -1170,6 +1180,96 @@
}
+// --- RawPointerAxes ---
+
+RawPointerAxes::RawPointerAxes() {
+ clear();
+}
+
+void RawPointerAxes::clear() {
+ x.clear();
+ y.clear();
+ pressure.clear();
+ touchMajor.clear();
+ touchMinor.clear();
+ toolMajor.clear();
+ toolMinor.clear();
+ orientation.clear();
+ distance.clear();
+ trackingId.clear();
+ slot.clear();
+}
+
+
+// --- RawPointerData ---
+
+RawPointerData::RawPointerData() {
+ clear();
+}
+
+void RawPointerData::clear() {
+ pointerCount = 0;
+ clearIdBits();
+}
+
+void RawPointerData::copyFrom(const RawPointerData& other) {
+ pointerCount = other.pointerCount;
+ hoveringIdBits = other.hoveringIdBits;
+ touchingIdBits = other.touchingIdBits;
+
+ for (uint32_t i = 0; i < pointerCount; i++) {
+ pointers[i] = other.pointers[i];
+
+ int id = pointers[i].id;
+ idToIndex[id] = other.idToIndex[id];
+ }
+}
+
+void RawPointerData::getCentroidOfTouchingPointers(float* outX, float* outY) const {
+ float x = 0, y = 0;
+ uint32_t count = touchingIdBits.count();
+ if (count) {
+ for (BitSet32 idBits(touchingIdBits); !idBits.isEmpty(); ) {
+ uint32_t id = idBits.clearFirstMarkedBit();
+ const Pointer& pointer = pointerForId(id);
+ x += pointer.x;
+ y += pointer.y;
+ }
+ x /= count;
+ y /= count;
+ }
+ *outX = x;
+ *outY = y;
+}
+
+
+// --- CookedPointerData ---
+
+CookedPointerData::CookedPointerData() {
+ clear();
+}
+
+void CookedPointerData::clear() {
+ pointerCount = 0;
+ hoveringIdBits.clear();
+ touchingIdBits.clear();
+}
+
+void CookedPointerData::copyFrom(const CookedPointerData& other) {
+ pointerCount = other.pointerCount;
+ hoveringIdBits = other.hoveringIdBits;
+ touchingIdBits = other.touchingIdBits;
+
+ for (uint32_t i = 0; i < pointerCount; i++) {
+ pointerProperties[i].copyFrom(other.pointerProperties[i]);
+ pointerCoords[i].copyFrom(other.pointerCoords[i]);
+
+ int id = pointerProperties[i].id;
+ idToIndex[id] = other.idToIndex[id];
+ }
+}
+
+
// --- SingleTouchMotionAccumulator ---
SingleTouchMotionAccumulator::SingleTouchMotionAccumulator() {
@@ -1298,6 +1398,10 @@
slot->mInUse = true;
slot->mAbsMTPressure = rawEvent->value;
break;
+ case ABS_MT_DISTANCE:
+ slot->mInUse = true;
+ slot->mAbsMTDistance = rawEvent->value;
+ break;
case ABS_MT_TOOL_TYPE:
slot->mInUse = true;
slot->mAbsMTToolType = rawEvent->value;
@@ -1338,8 +1442,8 @@
mAbsMTOrientation = 0;
mAbsMTTrackingId = -1;
mAbsMTPressure = 0;
- mAbsMTToolType = 0;
mAbsMTDistance = 0;
+ mAbsMTToolType = 0;
}
int32_t MultiTouchMotionAccumulator::Slot::getToolType() const {
@@ -1404,6 +1508,10 @@
void InputMapper::fadePointer() {
}
+status_t InputMapper::getAbsoluteAxisInfo(int32_t axis, RawAbsoluteAxisInfo* axisInfo) {
+ return getEventHub()->getAbsoluteAxisInfo(getDeviceId(), axis, axisInfo);
+}
+
void InputMapper::dumpRawAbsoluteAxisInfo(String8& dump,
const RawAbsoluteAxisInfo& axis, const char* name) {
if (axis.valid) {
@@ -1437,7 +1545,8 @@
}
void SwitchInputMapper::processSwitch(nsecs_t when, int32_t switchCode, int32_t switchValue) {
- getDispatcher()->notifySwitch(when, switchCode, switchValue, 0);
+ NotifySwitchArgs args(when, 0, switchCode, switchValue);
+ getListener()->notifySwitch(&args);
}
int32_t SwitchInputMapper::getSwitchState(uint32_t sourceMask, int32_t switchCode) {
@@ -1451,15 +1560,15 @@
uint32_t source, int32_t keyboardType) :
InputMapper(device), mSource(source),
mKeyboardType(keyboardType) {
- initializeLocked();
+ initialize();
}
KeyboardInputMapper::~KeyboardInputMapper() {
}
-void KeyboardInputMapper::initializeLocked() {
- mLocked.metaState = AMETA_NONE;
- mLocked.downTime = 0;
+void KeyboardInputMapper::initialize() {
+ mMetaState = AMETA_NONE;
+ mDownTime = 0;
}
uint32_t KeyboardInputMapper::getSources() {
@@ -1473,15 +1582,12 @@
}
void KeyboardInputMapper::dump(String8& dump) {
- { // acquire lock
- AutoMutex _l(mLock);
- dump.append(INDENT2 "Keyboard Input Mapper:\n");
- dumpParameters(dump);
- dump.appendFormat(INDENT3 "KeyboardType: %d\n", mKeyboardType);
- dump.appendFormat(INDENT3 "KeyDowns: %d keys currently down\n", mLocked.keyDowns.size());
- dump.appendFormat(INDENT3 "MetaState: 0x%0x\n", mLocked.metaState);
- dump.appendFormat(INDENT3 "DownTime: %lld\n", mLocked.downTime);
- } // release lock
+ dump.append(INDENT2 "Keyboard Input Mapper:\n");
+ dumpParameters(dump);
+ dump.appendFormat(INDENT3 "KeyboardType: %d\n", mKeyboardType);
+ dump.appendFormat(INDENT3 "KeyDowns: %d keys currently down\n", mKeyDowns.size());
+ dump.appendFormat(INDENT3 "MetaState: 0x%0x\n", mMetaState);
+ dump.appendFormat(INDENT3 "DownTime: %lld\n", mDownTime);
}
@@ -1493,10 +1599,7 @@
configureParameters();
// Reset LEDs.
- {
- AutoMutex _l(mLock);
- resetLedStateLocked();
- }
+ resetLedState();
}
}
@@ -1520,27 +1623,16 @@
}
void KeyboardInputMapper::reset() {
- for (;;) {
- int32_t keyCode, scanCode;
- { // acquire lock
- AutoMutex _l(mLock);
-
- // Synthesize key up event on reset if keys are currently down.
- if (mLocked.keyDowns.isEmpty()) {
- initializeLocked();
- resetLedStateLocked();
- break; // done
- }
-
- const KeyDown& keyDown = mLocked.keyDowns.top();
- keyCode = keyDown.keyCode;
- scanCode = keyDown.scanCode;
- } // release lock
-
+ // Synthesize key up event on reset if keys are currently down.
+ while (!mKeyDowns.isEmpty()) {
+ const KeyDown& keyDown = mKeyDowns.top();
nsecs_t when = systemTime(SYSTEM_TIME_MONOTONIC);
- processKey(when, false, keyCode, scanCode, 0);
+ processKey(when, false, keyDown.keyCode, keyDown.scanCode, 0);
}
+ initialize();
+ resetLedState();
+
InputMapper::reset();
getContext()->updateGlobalMetaState();
}
@@ -1567,72 +1659,66 @@
void KeyboardInputMapper::processKey(nsecs_t when, bool down, int32_t keyCode,
int32_t scanCode, uint32_t policyFlags) {
- int32_t newMetaState;
- nsecs_t downTime;
- bool metaStateChanged = false;
- { // acquire lock
- AutoMutex _l(mLock);
-
- if (down) {
- // Rotate key codes according to orientation if needed.
- // Note: getDisplayInfo is non-reentrant so we can continue holding the lock.
- if (mParameters.orientationAware && mParameters.associatedDisplayId >= 0) {
- int32_t orientation;
- if (!getPolicy()->getDisplayInfo(mParameters.associatedDisplayId,
- false /*external*/, NULL, NULL, & orientation)) {
- orientation = DISPLAY_ORIENTATION_0;
- }
-
- keyCode = rotateKeyCode(keyCode, orientation);
+ if (down) {
+ // Rotate key codes according to orientation if needed.
+ // Note: getDisplayInfo is non-reentrant so we can continue holding the lock.
+ if (mParameters.orientationAware && mParameters.associatedDisplayId >= 0) {
+ int32_t orientation;
+ if (!getPolicy()->getDisplayInfo(mParameters.associatedDisplayId,
+ false /*external*/, NULL, NULL, & orientation)) {
+ orientation = DISPLAY_ORIENTATION_0;
}
- // Add key down.
- ssize_t keyDownIndex = findKeyDownLocked(scanCode);
- if (keyDownIndex >= 0) {
- // key repeat, be sure to use same keycode as before in case of rotation
- keyCode = mLocked.keyDowns.itemAt(keyDownIndex).keyCode;
- } else {
- // key down
- if ((policyFlags & POLICY_FLAG_VIRTUAL)
- && mContext->shouldDropVirtualKey(when,
- getDevice(), keyCode, scanCode)) {
- return;
- }
+ keyCode = rotateKeyCode(keyCode, orientation);
+ }
- mLocked.keyDowns.push();
- KeyDown& keyDown = mLocked.keyDowns.editTop();
- keyDown.keyCode = keyCode;
- keyDown.scanCode = scanCode;
- }
-
- mLocked.downTime = when;
+ // Add key down.
+ ssize_t keyDownIndex = findKeyDown(scanCode);
+ if (keyDownIndex >= 0) {
+ // key repeat, be sure to use same keycode as before in case of rotation
+ keyCode = mKeyDowns.itemAt(keyDownIndex).keyCode;
} else {
- // Remove key down.
- ssize_t keyDownIndex = findKeyDownLocked(scanCode);
- if (keyDownIndex >= 0) {
- // key up, be sure to use same keycode as before in case of rotation
- keyCode = mLocked.keyDowns.itemAt(keyDownIndex).keyCode;
- mLocked.keyDowns.removeAt(size_t(keyDownIndex));
- } else {
- // key was not actually down
- LOGI("Dropping key up from device %s because the key was not down. "
- "keyCode=%d, scanCode=%d",
- getDeviceName().string(), keyCode, scanCode);
+ // key down
+ if ((policyFlags & POLICY_FLAG_VIRTUAL)
+ && mContext->shouldDropVirtualKey(when,
+ getDevice(), keyCode, scanCode)) {
return;
}
+
+ mKeyDowns.push();
+ KeyDown& keyDown = mKeyDowns.editTop();
+ keyDown.keyCode = keyCode;
+ keyDown.scanCode = scanCode;
}
- int32_t oldMetaState = mLocked.metaState;
- newMetaState = updateMetaState(keyCode, down, oldMetaState);
- if (oldMetaState != newMetaState) {
- mLocked.metaState = newMetaState;
- metaStateChanged = true;
- updateLedStateLocked(false);
+ mDownTime = when;
+ } else {
+ // Remove key down.
+ ssize_t keyDownIndex = findKeyDown(scanCode);
+ if (keyDownIndex >= 0) {
+ // key up, be sure to use same keycode as before in case of rotation
+ keyCode = mKeyDowns.itemAt(keyDownIndex).keyCode;
+ mKeyDowns.removeAt(size_t(keyDownIndex));
+ } else {
+ // key was not actually down
+ LOGI("Dropping key up from device %s because the key was not down. "
+ "keyCode=%d, scanCode=%d",
+ getDeviceName().string(), keyCode, scanCode);
+ return;
}
+ }
- downTime = mLocked.downTime;
- } // release lock
+ bool metaStateChanged = false;
+ int32_t oldMetaState = mMetaState;
+ int32_t newMetaState = updateMetaState(keyCode, down, oldMetaState);
+ if (oldMetaState != newMetaState) {
+ mMetaState = newMetaState;
+ metaStateChanged = true;
+ updateLedState(false);
+ }
+
+ nsecs_t downTime = mDownTime;
// Key down on external an keyboard should wake the device.
// We don't do this for internal keyboards to prevent them from waking up in your pocket.
@@ -1652,15 +1738,16 @@
getContext()->fadePointer();
}
- getDispatcher()->notifyKey(when, getDeviceId(), mSource, policyFlags,
+ NotifyKeyArgs args(when, getDeviceId(), mSource, policyFlags,
down ? AKEY_EVENT_ACTION_DOWN : AKEY_EVENT_ACTION_UP,
AKEY_EVENT_FLAG_FROM_SYSTEM, keyCode, scanCode, newMetaState, downTime);
+ getListener()->notifyKey(&args);
}
-ssize_t KeyboardInputMapper::findKeyDownLocked(int32_t scanCode) {
- size_t n = mLocked.keyDowns.size();
+ssize_t KeyboardInputMapper::findKeyDown(int32_t scanCode) {
+ size_t n = mKeyDowns.size();
for (size_t i = 0; i < n; i++) {
- if (mLocked.keyDowns[i].scanCode == scanCode) {
+ if (mKeyDowns[i].scanCode == scanCode) {
return i;
}
}
@@ -1681,38 +1768,35 @@
}
int32_t KeyboardInputMapper::getMetaState() {
- { // acquire lock
- AutoMutex _l(mLock);
- return mLocked.metaState;
- } // release lock
+ return mMetaState;
}
-void KeyboardInputMapper::resetLedStateLocked() {
- initializeLedStateLocked(mLocked.capsLockLedState, LED_CAPSL);
- initializeLedStateLocked(mLocked.numLockLedState, LED_NUML);
- initializeLedStateLocked(mLocked.scrollLockLedState, LED_SCROLLL);
+void KeyboardInputMapper::resetLedState() {
+ initializeLedState(mCapsLockLedState, LED_CAPSL);
+ initializeLedState(mNumLockLedState, LED_NUML);
+ initializeLedState(mScrollLockLedState, LED_SCROLLL);
- updateLedStateLocked(true);
+ updateLedState(true);
}
-void KeyboardInputMapper::initializeLedStateLocked(LockedState::LedState& ledState, int32_t led) {
+void KeyboardInputMapper::initializeLedState(LedState& ledState, int32_t led) {
ledState.avail = getEventHub()->hasLed(getDeviceId(), led);
ledState.on = false;
}
-void KeyboardInputMapper::updateLedStateLocked(bool reset) {
- updateLedStateForModifierLocked(mLocked.capsLockLedState, LED_CAPSL,
+void KeyboardInputMapper::updateLedState(bool reset) {
+ updateLedStateForModifier(mCapsLockLedState, LED_CAPSL,
AMETA_CAPS_LOCK_ON, reset);
- updateLedStateForModifierLocked(mLocked.numLockLedState, LED_NUML,
+ updateLedStateForModifier(mNumLockLedState, LED_NUML,
AMETA_NUM_LOCK_ON, reset);
- updateLedStateForModifierLocked(mLocked.scrollLockLedState, LED_SCROLLL,
+ updateLedStateForModifier(mScrollLockLedState, LED_SCROLLL,
AMETA_SCROLL_LOCK_ON, reset);
}
-void KeyboardInputMapper::updateLedStateForModifierLocked(LockedState::LedState& ledState,
+void KeyboardInputMapper::updateLedStateForModifier(LedState& ledState,
int32_t led, int32_t modifier, bool reset) {
if (ledState.avail) {
- bool desiredState = (mLocked.metaState & modifier) != 0;
+ bool desiredState = (mMetaState & modifier) != 0;
if (reset || ledState.on != desiredState) {
getEventHub()->setLedState(getDeviceId(), led, desiredState);
ledState.on = desiredState;
@@ -1725,7 +1809,7 @@
CursorInputMapper::CursorInputMapper(InputDevice* device) :
InputMapper(device) {
- initializeLocked();
+ initialize();
}
CursorInputMapper::~CursorInputMapper() {
@@ -1759,24 +1843,21 @@
}
void CursorInputMapper::dump(String8& dump) {
- { // acquire lock
- AutoMutex _l(mLock);
- dump.append(INDENT2 "Cursor Input Mapper:\n");
- dumpParameters(dump);
- dump.appendFormat(INDENT3 "XScale: %0.3f\n", mXScale);
- dump.appendFormat(INDENT3 "YScale: %0.3f\n", mYScale);
- dump.appendFormat(INDENT3 "XPrecision: %0.3f\n", mXPrecision);
- dump.appendFormat(INDENT3 "YPrecision: %0.3f\n", mYPrecision);
- dump.appendFormat(INDENT3 "HaveVWheel: %s\n",
- toString(mCursorMotionAccumulator.haveRelativeVWheel()));
- dump.appendFormat(INDENT3 "HaveHWheel: %s\n",
- toString(mCursorMotionAccumulator.haveRelativeHWheel()));
- dump.appendFormat(INDENT3 "VWheelScale: %0.3f\n", mVWheelScale);
- dump.appendFormat(INDENT3 "HWheelScale: %0.3f\n", mHWheelScale);
- dump.appendFormat(INDENT3 "ButtonState: 0x%08x\n", mLocked.buttonState);
- dump.appendFormat(INDENT3 "Down: %s\n", toString(isPointerDown(mLocked.buttonState)));
- dump.appendFormat(INDENT3 "DownTime: %lld\n", mLocked.downTime);
- } // release lock
+ dump.append(INDENT2 "Cursor Input Mapper:\n");
+ dumpParameters(dump);
+ dump.appendFormat(INDENT3 "XScale: %0.3f\n", mXScale);
+ dump.appendFormat(INDENT3 "YScale: %0.3f\n", mYScale);
+ dump.appendFormat(INDENT3 "XPrecision: %0.3f\n", mXPrecision);
+ dump.appendFormat(INDENT3 "YPrecision: %0.3f\n", mYPrecision);
+ dump.appendFormat(INDENT3 "HaveVWheel: %s\n",
+ toString(mCursorMotionAccumulator.haveRelativeVWheel()));
+ dump.appendFormat(INDENT3 "HaveHWheel: %s\n",
+ toString(mCursorMotionAccumulator.haveRelativeHWheel()));
+ dump.appendFormat(INDENT3 "VWheelScale: %0.3f\n", mVWheelScale);
+ dump.appendFormat(INDENT3 "HWheelScale: %0.3f\n", mHWheelScale);
+ dump.appendFormat(INDENT3 "ButtonState: 0x%08x\n", mButtonState);
+ dump.appendFormat(INDENT3 "Down: %s\n", toString(isPointerDown(mButtonState)));
+ dump.appendFormat(INDENT3 "DownTime: %lld\n", mDownTime);
}
void CursorInputMapper::configure(const InputReaderConfiguration* config, uint32_t changes) {
@@ -1859,38 +1940,27 @@
toString(mParameters.orientationAware));
}
-void CursorInputMapper::initializeLocked() {
+void CursorInputMapper::initialize() {
mCursorButtonAccumulator.clearButtons();
mCursorMotionAccumulator.clearRelativeAxes();
- mLocked.buttonState = 0;
- mLocked.downTime = 0;
+ mButtonState = 0;
+ mDownTime = 0;
}
void CursorInputMapper::reset() {
- for (;;) {
- int32_t buttonState;
- { // acquire lock
- AutoMutex _l(mLock);
+ // Reset velocity.
+ mPointerVelocityControl.reset();
+ mWheelXVelocityControl.reset();
+ mWheelYVelocityControl.reset();
- buttonState = mLocked.buttonState;
- if (!buttonState) {
- initializeLocked();
- break; // done
- }
- } // release lock
+ // Synthesize button up event on reset.
+ nsecs_t when = systemTime(SYSTEM_TIME_MONOTONIC);
+ mCursorButtonAccumulator.clearButtons();
+ mCursorMotionAccumulator.clearRelativeAxes();
+ sync(when);
- // Reset velocity.
- mPointerVelocityControl.reset();
- mWheelXVelocityControl.reset();
- mWheelYVelocityControl.reset();
-
- // Synthesize button up event on reset.
- nsecs_t when = systemTime(SYSTEM_TIME_MONOTONIC);
- mCursorButtonAccumulator.clearButtons();
- mCursorMotionAccumulator.clearRelativeAxes();
- sync(when);
- }
+ initialize();
InputMapper::reset();
}
@@ -1905,98 +1975,84 @@
}
void CursorInputMapper::sync(nsecs_t when) {
- int32_t motionEventAction;
- int32_t lastButtonState, currentButtonState;
+ int32_t lastButtonState = mButtonState;
+ int32_t currentButtonState = mCursorButtonAccumulator.getButtonState();
+ mButtonState = currentButtonState;
+
+ bool wasDown = isPointerDown(lastButtonState);
+ bool down = isPointerDown(currentButtonState);
+ bool downChanged;
+ if (!wasDown && down) {
+ mDownTime = when;
+ downChanged = true;
+ } else if (wasDown && !down) {
+ downChanged = true;
+ } else {
+ downChanged = false;
+ }
+ nsecs_t downTime = mDownTime;
+ bool buttonsChanged = currentButtonState != lastButtonState;
+
+ float deltaX = mCursorMotionAccumulator.getRelativeX() * mXScale;
+ float deltaY = mCursorMotionAccumulator.getRelativeY() * mYScale;
+ bool moved = deltaX != 0 || deltaY != 0;
+
+ if (mParameters.orientationAware && mParameters.associatedDisplayId >= 0
+ && (deltaX != 0.0f || deltaY != 0.0f)) {
+ // Rotate motion based on display orientation if needed.
+ // Note: getDisplayInfo is non-reentrant so we can continue holding the lock.
+ int32_t orientation;
+ if (! getPolicy()->getDisplayInfo(mParameters.associatedDisplayId,
+ false /*external*/, NULL, NULL, & orientation)) {
+ orientation = DISPLAY_ORIENTATION_0;
+ }
+
+ rotateDelta(orientation, &deltaX, &deltaY);
+ }
+
PointerProperties pointerProperties;
+ pointerProperties.clear();
+ pointerProperties.id = 0;
+ pointerProperties.toolType = AMOTION_EVENT_TOOL_TYPE_MOUSE;
+
PointerCoords pointerCoords;
- nsecs_t downTime;
- float vscroll, hscroll;
- { // acquire lock
- AutoMutex _l(mLock);
+ pointerCoords.clear();
- lastButtonState = mLocked.buttonState;
- currentButtonState = mCursorButtonAccumulator.getButtonState();
- mLocked.buttonState = currentButtonState;
+ float vscroll = mCursorMotionAccumulator.getRelativeVWheel();
+ float hscroll = mCursorMotionAccumulator.getRelativeHWheel();
+ bool scrolled = vscroll != 0 || hscroll != 0;
- bool wasDown = isPointerDown(lastButtonState);
- bool down = isPointerDown(currentButtonState);
- bool downChanged;
- if (!wasDown && down) {
- mLocked.downTime = when;
- downChanged = true;
- } else if (wasDown && !down) {
- downChanged = true;
- } else {
- downChanged = false;
- }
- downTime = mLocked.downTime;
+ mWheelYVelocityControl.move(when, NULL, &vscroll);
+ mWheelXVelocityControl.move(when, &hscroll, NULL);
- if (downChanged) {
- motionEventAction = down ? AMOTION_EVENT_ACTION_DOWN : AMOTION_EVENT_ACTION_UP;
- } else if (down || mPointerController == NULL) {
- motionEventAction = AMOTION_EVENT_ACTION_MOVE;
- } else {
- motionEventAction = AMOTION_EVENT_ACTION_HOVER_MOVE;
- }
+ mPointerVelocityControl.move(when, &deltaX, &deltaY);
- float deltaX = mCursorMotionAccumulator.getRelativeX() * mXScale;
- float deltaY = mCursorMotionAccumulator.getRelativeY() * mYScale;
+ if (mPointerController != NULL) {
+ if (moved || scrolled || buttonsChanged) {
+ mPointerController->setPresentation(
+ PointerControllerInterface::PRESENTATION_POINTER);
- if (mParameters.orientationAware && mParameters.associatedDisplayId >= 0
- && (deltaX != 0.0f || deltaY != 0.0f)) {
- // Rotate motion based on display orientation if needed.
- // Note: getDisplayInfo is non-reentrant so we can continue holding the lock.
- int32_t orientation;
- if (! getPolicy()->getDisplayInfo(mParameters.associatedDisplayId,
- false /*external*/, NULL, NULL, & orientation)) {
- orientation = DISPLAY_ORIENTATION_0;
+ if (moved) {
+ mPointerController->move(deltaX, deltaY);
}
- rotateDelta(orientation, &deltaX, &deltaY);
- }
-
- pointerProperties.clear();
- pointerProperties.id = 0;
- pointerProperties.toolType = AMOTION_EVENT_TOOL_TYPE_MOUSE;
-
- pointerCoords.clear();
-
- vscroll = mCursorMotionAccumulator.getRelativeVWheel();
- hscroll = mCursorMotionAccumulator.getRelativeHWheel();
-
- mWheelYVelocityControl.move(when, NULL, &vscroll);
- mWheelXVelocityControl.move(when, &hscroll, NULL);
-
- mPointerVelocityControl.move(when, &deltaX, &deltaY);
-
- if (mPointerController != NULL) {
- if (deltaX != 0 || deltaY != 0 || vscroll != 0 || hscroll != 0
- || currentButtonState != lastButtonState) {
- mPointerController->setPresentation(
- PointerControllerInterface::PRESENTATION_POINTER);
-
- if (deltaX != 0 || deltaY != 0) {
- mPointerController->move(deltaX, deltaY);
- }
-
- if (currentButtonState != lastButtonState) {
- mPointerController->setButtonState(currentButtonState);
- }
-
- mPointerController->unfade(PointerControllerInterface::TRANSITION_IMMEDIATE);
+ if (buttonsChanged) {
+ mPointerController->setButtonState(currentButtonState);
}
- float x, y;
- mPointerController->getPosition(&x, &y);
- pointerCoords.setAxisValue(AMOTION_EVENT_AXIS_X, x);
- pointerCoords.setAxisValue(AMOTION_EVENT_AXIS_Y, y);
- } else {
- pointerCoords.setAxisValue(AMOTION_EVENT_AXIS_X, deltaX);
- pointerCoords.setAxisValue(AMOTION_EVENT_AXIS_Y, deltaY);
+ mPointerController->unfade(PointerControllerInterface::TRANSITION_IMMEDIATE);
}
- pointerCoords.setAxisValue(AMOTION_EVENT_AXIS_PRESSURE, down ? 1.0f : 0.0f);
- } // release lock
+ float x, y;
+ mPointerController->getPosition(&x, &y);
+ pointerCoords.setAxisValue(AMOTION_EVENT_AXIS_X, x);
+ pointerCoords.setAxisValue(AMOTION_EVENT_AXIS_Y, y);
+ } else {
+ pointerCoords.setAxisValue(AMOTION_EVENT_AXIS_X, deltaX);
+ pointerCoords.setAxisValue(AMOTION_EVENT_AXIS_Y, deltaY);
+ }
+
+ pointerCoords.setAxisValue(AMOTION_EVENT_AXIS_PRESSURE, down ? 1.0f : 0.0f);
// Moving an external trackball or mouse should wake the device.
// We don't do this for internal cursor devices to prevent them from waking up
@@ -2012,29 +2068,43 @@
policyFlags, lastButtonState, currentButtonState);
// Send motion event.
- int32_t metaState = mContext->getGlobalMetaState();
- getDispatcher()->notifyMotion(when, getDeviceId(), mSource, policyFlags,
- motionEventAction, 0, metaState, currentButtonState, 0,
- 1, &pointerProperties, &pointerCoords, mXPrecision, mYPrecision, downTime);
+ if (downChanged || moved || scrolled || buttonsChanged) {
+ int32_t metaState = mContext->getGlobalMetaState();
+ int32_t motionEventAction;
+ if (downChanged) {
+ motionEventAction = down ? AMOTION_EVENT_ACTION_DOWN : AMOTION_EVENT_ACTION_UP;
+ } else if (down || mPointerController == NULL) {
+ motionEventAction = AMOTION_EVENT_ACTION_MOVE;
+ } else {
+ motionEventAction = AMOTION_EVENT_ACTION_HOVER_MOVE;
+ }
- // Send hover move after UP to tell the application that the mouse is hovering now.
- if (motionEventAction == AMOTION_EVENT_ACTION_UP
- && mPointerController != NULL) {
- getDispatcher()->notifyMotion(when, getDeviceId(), mSource, policyFlags,
- AMOTION_EVENT_ACTION_HOVER_MOVE, 0,
- metaState, currentButtonState, AMOTION_EVENT_EDGE_FLAG_NONE,
+ NotifyMotionArgs args(when, getDeviceId(), mSource, policyFlags,
+ motionEventAction, 0, metaState, currentButtonState, 0,
1, &pointerProperties, &pointerCoords, mXPrecision, mYPrecision, downTime);
- }
+ getListener()->notifyMotion(&args);
- // Send scroll events.
- if (vscroll != 0 || hscroll != 0) {
- pointerCoords.setAxisValue(AMOTION_EVENT_AXIS_VSCROLL, vscroll);
- pointerCoords.setAxisValue(AMOTION_EVENT_AXIS_HSCROLL, hscroll);
+ // Send hover move after UP to tell the application that the mouse is hovering now.
+ if (motionEventAction == AMOTION_EVENT_ACTION_UP
+ && mPointerController != NULL) {
+ NotifyMotionArgs hoverArgs(when, getDeviceId(), mSource, policyFlags,
+ AMOTION_EVENT_ACTION_HOVER_MOVE, 0,
+ metaState, currentButtonState, AMOTION_EVENT_EDGE_FLAG_NONE,
+ 1, &pointerProperties, &pointerCoords, mXPrecision, mYPrecision, downTime);
+ getListener()->notifyMotion(&hoverArgs);
+ }
- getDispatcher()->notifyMotion(when, getDeviceId(), mSource, policyFlags,
- AMOTION_EVENT_ACTION_SCROLL, 0, metaState, currentButtonState,
- AMOTION_EVENT_EDGE_FLAG_NONE,
- 1, &pointerProperties, &pointerCoords, mXPrecision, mYPrecision, downTime);
+ // Send scroll events.
+ if (scrolled) {
+ pointerCoords.setAxisValue(AMOTION_EVENT_AXIS_VSCROLL, vscroll);
+ pointerCoords.setAxisValue(AMOTION_EVENT_AXIS_HSCROLL, hscroll);
+
+ NotifyMotionArgs scrollArgs(when, getDeviceId(), mSource, policyFlags,
+ AMOTION_EVENT_ACTION_SCROLL, 0, metaState, currentButtonState,
+ AMOTION_EVENT_EDGE_FLAG_NONE,
+ 1, &pointerProperties, &pointerCoords, mXPrecision, mYPrecision, downTime);
+ getListener()->notifyMotion(&scrollArgs);
+ }
}
// Synthesize key up from buttons if needed.
@@ -2053,24 +2123,18 @@
}
void CursorInputMapper::fadePointer() {
- { // acquire lock
- AutoMutex _l(mLock);
- if (mPointerController != NULL) {
- mPointerController->fade(PointerControllerInterface::TRANSITION_GRADUAL);
- }
- } // release lock
+ if (mPointerController != NULL) {
+ mPointerController->fade(PointerControllerInterface::TRANSITION_GRADUAL);
+ }
}
// --- TouchInputMapper ---
TouchInputMapper::TouchInputMapper(InputDevice* device) :
- InputMapper(device) {
- mLocked.surfaceOrientation = -1;
- mLocked.surfaceWidth = -1;
- mLocked.surfaceHeight = -1;
-
- initializeLocked();
+ InputMapper(device),
+ mSurfaceOrientation(-1), mSurfaceWidth(-1), mSurfaceHeight(-1) {
+ initialize();
}
TouchInputMapper::~TouchInputMapper() {
@@ -2083,126 +2147,148 @@
void TouchInputMapper::populateDeviceInfo(InputDeviceInfo* info) {
InputMapper::populateDeviceInfo(info);
- { // acquire lock
- AutoMutex _l(mLock);
+ // Ensure surface information is up to date so that orientation changes are
+ // noticed immediately.
+ if (!configureSurface()) {
+ return;
+ }
- // Ensure surface information is up to date so that orientation changes are
- // noticed immediately.
- if (!configureSurfaceLocked()) {
- return;
+ info->addMotionRange(mOrientedRanges.x);
+ info->addMotionRange(mOrientedRanges.y);
+
+ if (mOrientedRanges.havePressure) {
+ info->addMotionRange(mOrientedRanges.pressure);
+ }
+
+ if (mOrientedRanges.haveSize) {
+ info->addMotionRange(mOrientedRanges.size);
+ }
+
+ if (mOrientedRanges.haveTouchSize) {
+ info->addMotionRange(mOrientedRanges.touchMajor);
+ info->addMotionRange(mOrientedRanges.touchMinor);
+ }
+
+ if (mOrientedRanges.haveToolSize) {
+ info->addMotionRange(mOrientedRanges.toolMajor);
+ info->addMotionRange(mOrientedRanges.toolMinor);
+ }
+
+ if (mOrientedRanges.haveOrientation) {
+ info->addMotionRange(mOrientedRanges.orientation);
+ }
+
+ if (mOrientedRanges.haveDistance) {
+ info->addMotionRange(mOrientedRanges.distance);
+ }
+
+ if (mPointerController != NULL) {
+ float minX, minY, maxX, maxY;
+ if (mPointerController->getBounds(&minX, &minY, &maxX, &maxY)) {
+ info->addMotionRange(AMOTION_EVENT_AXIS_X, mPointerSource,
+ minX, maxX, 0.0f, 0.0f);
+ info->addMotionRange(AMOTION_EVENT_AXIS_Y, mPointerSource,
+ minY, maxY, 0.0f, 0.0f);
}
-
- info->addMotionRange(mLocked.orientedRanges.x);
- info->addMotionRange(mLocked.orientedRanges.y);
-
- if (mLocked.orientedRanges.havePressure) {
- info->addMotionRange(mLocked.orientedRanges.pressure);
- }
-
- if (mLocked.orientedRanges.haveSize) {
- info->addMotionRange(mLocked.orientedRanges.size);
- }
-
- if (mLocked.orientedRanges.haveTouchSize) {
- info->addMotionRange(mLocked.orientedRanges.touchMajor);
- info->addMotionRange(mLocked.orientedRanges.touchMinor);
- }
-
- if (mLocked.orientedRanges.haveToolSize) {
- info->addMotionRange(mLocked.orientedRanges.toolMajor);
- info->addMotionRange(mLocked.orientedRanges.toolMinor);
- }
-
- if (mLocked.orientedRanges.haveOrientation) {
- info->addMotionRange(mLocked.orientedRanges.orientation);
- }
-
- if (mLocked.orientedRanges.haveDistance) {
- info->addMotionRange(mLocked.orientedRanges.distance);
- }
-
- if (mPointerController != NULL) {
- float minX, minY, maxX, maxY;
- if (mPointerController->getBounds(&minX, &minY, &maxX, &maxY)) {
- info->addMotionRange(AMOTION_EVENT_AXIS_X, mPointerSource,
- minX, maxX, 0.0f, 0.0f);
- info->addMotionRange(AMOTION_EVENT_AXIS_Y, mPointerSource,
- minY, maxY, 0.0f, 0.0f);
- }
- info->addMotionRange(AMOTION_EVENT_AXIS_PRESSURE, mPointerSource,
- 0.0f, 1.0f, 0.0f, 0.0f);
- }
- } // release lock
+ info->addMotionRange(AMOTION_EVENT_AXIS_PRESSURE, mPointerSource,
+ 0.0f, 1.0f, 0.0f, 0.0f);
+ }
}
void TouchInputMapper::dump(String8& dump) {
- { // acquire lock
- AutoMutex _l(mLock);
- dump.append(INDENT2 "Touch Input Mapper:\n");
- dumpParameters(dump);
- dumpVirtualKeysLocked(dump);
- dumpRawAxes(dump);
- dumpCalibration(dump);
- dumpSurfaceLocked(dump);
+ dump.append(INDENT2 "Touch Input Mapper:\n");
+ dumpParameters(dump);
+ dumpVirtualKeys(dump);
+ dumpRawPointerAxes(dump);
+ dumpCalibration(dump);
+ dumpSurface(dump);
- dump.appendFormat(INDENT3 "Translation and Scaling Factors:\n");
- dump.appendFormat(INDENT4 "XScale: %0.3f\n", mLocked.xScale);
- dump.appendFormat(INDENT4 "YScale: %0.3f\n", mLocked.yScale);
- dump.appendFormat(INDENT4 "XPrecision: %0.3f\n", mLocked.xPrecision);
- dump.appendFormat(INDENT4 "YPrecision: %0.3f\n", mLocked.yPrecision);
- dump.appendFormat(INDENT4 "GeometricScale: %0.3f\n", mLocked.geometricScale);
- dump.appendFormat(INDENT4 "ToolSizeLinearScale: %0.3f\n", mLocked.toolSizeLinearScale);
- dump.appendFormat(INDENT4 "ToolSizeLinearBias: %0.3f\n", mLocked.toolSizeLinearBias);
- dump.appendFormat(INDENT4 "ToolSizeAreaScale: %0.3f\n", mLocked.toolSizeAreaScale);
- dump.appendFormat(INDENT4 "ToolSizeAreaBias: %0.3f\n", mLocked.toolSizeAreaBias);
- dump.appendFormat(INDENT4 "PressureScale: %0.3f\n", mLocked.pressureScale);
- dump.appendFormat(INDENT4 "SizeScale: %0.3f\n", mLocked.sizeScale);
- dump.appendFormat(INDENT4 "OrientationScale: %0.3f\n", mLocked.orientationScale);
- dump.appendFormat(INDENT4 "DistanceScale: %0.3f\n", mLocked.distanceScale);
+ dump.appendFormat(INDENT3 "Translation and Scaling Factors:\n");
+ dump.appendFormat(INDENT4 "XScale: %0.3f\n", mXScale);
+ dump.appendFormat(INDENT4 "YScale: %0.3f\n", mYScale);
+ dump.appendFormat(INDENT4 "XPrecision: %0.3f\n", mXPrecision);
+ dump.appendFormat(INDENT4 "YPrecision: %0.3f\n", mYPrecision);
+ dump.appendFormat(INDENT4 "GeometricScale: %0.3f\n", mGeometricScale);
+ dump.appendFormat(INDENT4 "ToolSizeLinearScale: %0.3f\n", mToolSizeLinearScale);
+ dump.appendFormat(INDENT4 "ToolSizeLinearBias: %0.3f\n", mToolSizeLinearBias);
+ dump.appendFormat(INDENT4 "ToolSizeAreaScale: %0.3f\n", mToolSizeAreaScale);
+ dump.appendFormat(INDENT4 "ToolSizeAreaBias: %0.3f\n", mToolSizeAreaBias);
+ dump.appendFormat(INDENT4 "PressureScale: %0.3f\n", mPressureScale);
+ dump.appendFormat(INDENT4 "SizeScale: %0.3f\n", mSizeScale);
+ dump.appendFormat(INDENT4 "OrientationScale: %0.3f\n", mOrientationScale);
+ dump.appendFormat(INDENT4 "DistanceScale: %0.3f\n", mDistanceScale);
- dump.appendFormat(INDENT3 "Last Touch:\n");
- dump.appendFormat(INDENT4 "Button State: 0x%08x\n", mLastTouch.buttonState);
- dump.appendFormat(INDENT4 "Pointer Count: %d\n", mLastTouch.pointerCount);
- for (uint32_t i = 0; i < mLastTouch.pointerCount; i++) {
- const PointerData& pointer = mLastTouch.pointers[i];
- dump.appendFormat(INDENT5 "[%d]: id=%d, x=%d, y=%d, pressure=%d, "
- "touchMajor=%d, touchMinor=%d, toolMajor=%d, toolMinor=%d, "
- "orientation=%d, distance=%d, toolType=%d, isHovering=%s\n", i,
- pointer.id, pointer.x, pointer.y, pointer.pressure,
- pointer.touchMajor, pointer.touchMinor, pointer.toolMajor, pointer.toolMinor,
- pointer.orientation, pointer.distance,
- pointer.toolType, toString(pointer.isHovering));
- }
+ dump.appendFormat(INDENT3 "Last Button State: 0x%08x\n", mLastButtonState);
- if (mParameters.deviceType == Parameters::DEVICE_TYPE_POINTER) {
- dump.appendFormat(INDENT3 "Pointer Gesture Detector:\n");
- dump.appendFormat(INDENT4 "XMovementScale: %0.3f\n",
- mLocked.pointerGestureXMovementScale);
- dump.appendFormat(INDENT4 "YMovementScale: %0.3f\n",
- mLocked.pointerGestureYMovementScale);
- dump.appendFormat(INDENT4 "XZoomScale: %0.3f\n",
- mLocked.pointerGestureXZoomScale);
- dump.appendFormat(INDENT4 "YZoomScale: %0.3f\n",
- mLocked.pointerGestureYZoomScale);
- dump.appendFormat(INDENT4 "MaxSwipeWidth: %f\n",
- mLocked.pointerGestureMaxSwipeWidth);
- }
- } // release lock
+ dump.appendFormat(INDENT3 "Last Raw Touch: pointerCount=%d\n",
+ mLastRawPointerData.pointerCount);
+ for (uint32_t i = 0; i < mLastRawPointerData.pointerCount; i++) {
+ const RawPointerData::Pointer& pointer = mLastRawPointerData.pointers[i];
+ dump.appendFormat(INDENT4 "[%d]: id=%d, x=%d, y=%d, pressure=%d, "
+ "touchMajor=%d, touchMinor=%d, toolMajor=%d, toolMinor=%d, "
+ "orientation=%d, distance=%d, toolType=%d, isHovering=%s\n", i,
+ pointer.id, pointer.x, pointer.y, pointer.pressure,
+ pointer.touchMajor, pointer.touchMinor,
+ pointer.toolMajor, pointer.toolMinor,
+ pointer.orientation, pointer.distance,
+ pointer.toolType, toString(pointer.isHovering));
+ }
+
+ dump.appendFormat(INDENT3 "Last Cooked Touch: pointerCount=%d\n",
+ mLastCookedPointerData.pointerCount);
+ for (uint32_t i = 0; i < mLastCookedPointerData.pointerCount; i++) {
+ const PointerProperties& pointerProperties = mLastCookedPointerData.pointerProperties[i];
+ const PointerCoords& pointerCoords = mLastCookedPointerData.pointerCoords[i];
+ dump.appendFormat(INDENT4 "[%d]: id=%d, x=%0.3f, y=%0.3f, pressure=%0.3f, "
+ "touchMajor=%0.3f, touchMinor=%0.3f, toolMajor=%0.3f, toolMinor=%0.3f, "
+ "orientation=%0.3f, distance=%0.3f, toolType=%d, isHovering=%s\n", i,
+ pointerProperties.id,
+ pointerCoords.getX(),
+ pointerCoords.getY(),
+ pointerCoords.getAxisValue(AMOTION_EVENT_AXIS_PRESSURE),
+ pointerCoords.getAxisValue(AMOTION_EVENT_AXIS_TOUCH_MAJOR),
+ pointerCoords.getAxisValue(AMOTION_EVENT_AXIS_TOUCH_MINOR),
+ pointerCoords.getAxisValue(AMOTION_EVENT_AXIS_TOOL_MAJOR),
+ pointerCoords.getAxisValue(AMOTION_EVENT_AXIS_TOOL_MINOR),
+ pointerCoords.getAxisValue(AMOTION_EVENT_AXIS_ORIENTATION),
+ pointerCoords.getAxisValue(AMOTION_EVENT_AXIS_DISTANCE),
+ pointerProperties.toolType,
+ toString(mLastCookedPointerData.isHovering(i)));
+ }
+
+ if (mParameters.deviceType == Parameters::DEVICE_TYPE_POINTER) {
+ dump.appendFormat(INDENT3 "Pointer Gesture Detector:\n");
+ dump.appendFormat(INDENT4 "XMovementScale: %0.3f\n",
+ mPointerGestureXMovementScale);
+ dump.appendFormat(INDENT4 "YMovementScale: %0.3f\n",
+ mPointerGestureYMovementScale);
+ dump.appendFormat(INDENT4 "XZoomScale: %0.3f\n",
+ mPointerGestureXZoomScale);
+ dump.appendFormat(INDENT4 "YZoomScale: %0.3f\n",
+ mPointerGestureYZoomScale);
+ dump.appendFormat(INDENT4 "MaxSwipeWidth: %f\n",
+ mPointerGestureMaxSwipeWidth);
+ }
}
-void TouchInputMapper::initializeLocked() {
- mCurrentTouch.clear();
- mLastTouch.clear();
+void TouchInputMapper::initialize() {
+ mCurrentRawPointerData.clear();
+ mLastRawPointerData.clear();
+ mCurrentCookedPointerData.clear();
+ mLastCookedPointerData.clear();
+ mCurrentButtonState = 0;
+ mLastButtonState = 0;
+ mSentHoverEnter = false;
mDownTime = 0;
- mLocked.currentVirtualKey.down = false;
+ mCurrentVirtualKey.down = false;
- mLocked.orientedRanges.havePressure = false;
- mLocked.orientedRanges.haveSize = false;
- mLocked.orientedRanges.haveTouchSize = false;
- mLocked.orientedRanges.haveToolSize = false;
- mLocked.orientedRanges.haveOrientation = false;
- mLocked.orientedRanges.haveDistance = false;
+ mOrientedRanges.havePressure = false;
+ mOrientedRanges.haveSize = false;
+ mOrientedRanges.haveTouchSize = false;
+ mOrientedRanges.haveToolSize = false;
+ mOrientedRanges.haveOrientation = false;
+ mOrientedRanges.haveDistance = false;
mPointerGesture.reset();
}
@@ -2235,18 +2321,14 @@
}
// Configure absolute axis information.
- configureRawAxes();
+ configureRawPointerAxes();
// Prepare input device calibration.
parseCalibration();
resolveCalibration();
- { // acquire lock
- AutoMutex _l(mLock);
-
- // Configure surface dimensions and orientation.
- configureSurfaceLocked();
- } // release lock
+ // Configure surface dimensions and orientation.
+ configureSurface();
}
if (!changes || (changes & InputReaderConfiguration::CHANGE_POINTER_SPEED)) {
@@ -2359,38 +2441,28 @@
toString(mParameters.orientationAware));
}
-void TouchInputMapper::configureRawAxes() {
- mRawAxes.x.clear();
- mRawAxes.y.clear();
- mRawAxes.pressure.clear();
- mRawAxes.touchMajor.clear();
- mRawAxes.touchMinor.clear();
- mRawAxes.toolMajor.clear();
- mRawAxes.toolMinor.clear();
- mRawAxes.orientation.clear();
- mRawAxes.distance.clear();
- mRawAxes.trackingId.clear();
- mRawAxes.slot.clear();
+void TouchInputMapper::configureRawPointerAxes() {
+ mRawPointerAxes.clear();
}
-void TouchInputMapper::dumpRawAxes(String8& dump) {
- dump.append(INDENT3 "Raw Axes:\n");
- dumpRawAbsoluteAxisInfo(dump, mRawAxes.x, "X");
- dumpRawAbsoluteAxisInfo(dump, mRawAxes.y, "Y");
- dumpRawAbsoluteAxisInfo(dump, mRawAxes.pressure, "Pressure");
- dumpRawAbsoluteAxisInfo(dump, mRawAxes.touchMajor, "TouchMajor");
- dumpRawAbsoluteAxisInfo(dump, mRawAxes.touchMinor, "TouchMinor");
- dumpRawAbsoluteAxisInfo(dump, mRawAxes.toolMajor, "ToolMajor");
- dumpRawAbsoluteAxisInfo(dump, mRawAxes.toolMinor, "ToolMinor");
- dumpRawAbsoluteAxisInfo(dump, mRawAxes.orientation, "Orientation");
- dumpRawAbsoluteAxisInfo(dump, mRawAxes.distance, "Distance");
- dumpRawAbsoluteAxisInfo(dump, mRawAxes.trackingId, "TrackingId");
- dumpRawAbsoluteAxisInfo(dump, mRawAxes.slot, "Slot");
+void TouchInputMapper::dumpRawPointerAxes(String8& dump) {
+ dump.append(INDENT3 "Raw Touch Axes:\n");
+ dumpRawAbsoluteAxisInfo(dump, mRawPointerAxes.x, "X");
+ dumpRawAbsoluteAxisInfo(dump, mRawPointerAxes.y, "Y");
+ dumpRawAbsoluteAxisInfo(dump, mRawPointerAxes.pressure, "Pressure");
+ dumpRawAbsoluteAxisInfo(dump, mRawPointerAxes.touchMajor, "TouchMajor");
+ dumpRawAbsoluteAxisInfo(dump, mRawPointerAxes.touchMinor, "TouchMinor");
+ dumpRawAbsoluteAxisInfo(dump, mRawPointerAxes.toolMajor, "ToolMajor");
+ dumpRawAbsoluteAxisInfo(dump, mRawPointerAxes.toolMinor, "ToolMinor");
+ dumpRawAbsoluteAxisInfo(dump, mRawPointerAxes.orientation, "Orientation");
+ dumpRawAbsoluteAxisInfo(dump, mRawPointerAxes.distance, "Distance");
+ dumpRawAbsoluteAxisInfo(dump, mRawPointerAxes.trackingId, "TrackingId");
+ dumpRawAbsoluteAxisInfo(dump, mRawPointerAxes.slot, "Slot");
}
-bool TouchInputMapper::configureSurfaceLocked() {
+bool TouchInputMapper::configureSurface() {
// Ensure we have valid X and Y axes.
- if (!mRawAxes.x.valid || !mRawAxes.y.valid) {
+ if (!mRawPointerAxes.x.valid || !mRawPointerAxes.y.valid) {
LOGW(INDENT "Touch device '%s' did not report support for X or Y axis! "
"The device will be inoperable.", getDeviceName().string());
return false;
@@ -2398,27 +2470,27 @@
// Update orientation and dimensions if needed.
int32_t orientation = DISPLAY_ORIENTATION_0;
- int32_t width = mRawAxes.x.maxValue - mRawAxes.x.minValue + 1;
- int32_t height = mRawAxes.y.maxValue - mRawAxes.y.minValue + 1;
+ int32_t width = mRawPointerAxes.x.maxValue - mRawPointerAxes.x.minValue + 1;
+ int32_t height = mRawPointerAxes.y.maxValue - mRawPointerAxes.y.minValue + 1;
if (mParameters.associatedDisplayId >= 0) {
// Note: getDisplayInfo is non-reentrant so we can continue holding the lock.
if (! getPolicy()->getDisplayInfo(mParameters.associatedDisplayId,
mParameters.associatedDisplayIsExternal,
- &mLocked.associatedDisplayWidth, &mLocked.associatedDisplayHeight,
- &mLocked.associatedDisplayOrientation)) {
+ &mAssociatedDisplayWidth, &mAssociatedDisplayHeight,
+ &mAssociatedDisplayOrientation)) {
return false;
}
// A touch screen inherits the dimensions of the display.
if (mParameters.deviceType == Parameters::DEVICE_TYPE_TOUCH_SCREEN) {
- width = mLocked.associatedDisplayWidth;
- height = mLocked.associatedDisplayHeight;
+ width = mAssociatedDisplayWidth;
+ height = mAssociatedDisplayHeight;
}
// The device inherits the orientation of the display if it is orientation aware.
if (mParameters.orientationAware) {
- orientation = mLocked.associatedDisplayOrientation;
+ orientation = mAssociatedDisplayOrientation;
}
}
@@ -2427,118 +2499,120 @@
mPointerController = getPolicy()->obtainPointerController(getDeviceId());
}
- bool orientationChanged = mLocked.surfaceOrientation != orientation;
+ bool orientationChanged = mSurfaceOrientation != orientation;
if (orientationChanged) {
- mLocked.surfaceOrientation = orientation;
+ mSurfaceOrientation = orientation;
}
- bool sizeChanged = mLocked.surfaceWidth != width || mLocked.surfaceHeight != height;
+ bool sizeChanged = mSurfaceWidth != width || mSurfaceHeight != height;
if (sizeChanged) {
LOGI("Device reconfigured: id=%d, name='%s', surface size is now %dx%d",
getDeviceId(), getDeviceName().string(), width, height);
- mLocked.surfaceWidth = width;
- mLocked.surfaceHeight = height;
+ mSurfaceWidth = width;
+ mSurfaceHeight = height;
// Configure X and Y factors.
- mLocked.xScale = float(width) / (mRawAxes.x.maxValue - mRawAxes.x.minValue + 1);
- mLocked.yScale = float(height) / (mRawAxes.y.maxValue - mRawAxes.y.minValue + 1);
- mLocked.xPrecision = 1.0f / mLocked.xScale;
- mLocked.yPrecision = 1.0f / mLocked.yScale;
+ mXScale = float(width) / (mRawPointerAxes.x.maxValue - mRawPointerAxes.x.minValue + 1);
+ mYScale = float(height) / (mRawPointerAxes.y.maxValue - mRawPointerAxes.y.minValue + 1);
+ mXPrecision = 1.0f / mXScale;
+ mYPrecision = 1.0f / mYScale;
- mLocked.orientedRanges.x.axis = AMOTION_EVENT_AXIS_X;
- mLocked.orientedRanges.x.source = mTouchSource;
- mLocked.orientedRanges.y.axis = AMOTION_EVENT_AXIS_Y;
- mLocked.orientedRanges.y.source = mTouchSource;
+ mOrientedRanges.x.axis = AMOTION_EVENT_AXIS_X;
+ mOrientedRanges.x.source = mTouchSource;
+ mOrientedRanges.y.axis = AMOTION_EVENT_AXIS_Y;
+ mOrientedRanges.y.source = mTouchSource;
- configureVirtualKeysLocked();
+ configureVirtualKeys();
// Scale factor for terms that are not oriented in a particular axis.
// If the pixels are square then xScale == yScale otherwise we fake it
// by choosing an average.
- mLocked.geometricScale = avg(mLocked.xScale, mLocked.yScale);
+ mGeometricScale = avg(mXScale, mYScale);
// Size of diagonal axis.
float diagonalSize = hypotf(width, height);
// TouchMajor and TouchMinor factors.
if (mCalibration.touchSizeCalibration != Calibration::TOUCH_SIZE_CALIBRATION_NONE) {
- mLocked.orientedRanges.haveTouchSize = true;
+ mOrientedRanges.haveTouchSize = true;
- mLocked.orientedRanges.touchMajor.axis = AMOTION_EVENT_AXIS_TOUCH_MAJOR;
- mLocked.orientedRanges.touchMajor.source = mTouchSource;
- mLocked.orientedRanges.touchMajor.min = 0;
- mLocked.orientedRanges.touchMajor.max = diagonalSize;
- mLocked.orientedRanges.touchMajor.flat = 0;
- mLocked.orientedRanges.touchMajor.fuzz = 0;
+ mOrientedRanges.touchMajor.axis = AMOTION_EVENT_AXIS_TOUCH_MAJOR;
+ mOrientedRanges.touchMajor.source = mTouchSource;
+ mOrientedRanges.touchMajor.min = 0;
+ mOrientedRanges.touchMajor.max = diagonalSize;
+ mOrientedRanges.touchMajor.flat = 0;
+ mOrientedRanges.touchMajor.fuzz = 0;
- mLocked.orientedRanges.touchMinor = mLocked.orientedRanges.touchMajor;
- mLocked.orientedRanges.touchMinor.axis = AMOTION_EVENT_AXIS_TOUCH_MINOR;
+ mOrientedRanges.touchMinor = mOrientedRanges.touchMajor;
+ mOrientedRanges.touchMinor.axis = AMOTION_EVENT_AXIS_TOUCH_MINOR;
}
// ToolMajor and ToolMinor factors.
- mLocked.toolSizeLinearScale = 0;
- mLocked.toolSizeLinearBias = 0;
- mLocked.toolSizeAreaScale = 0;
- mLocked.toolSizeAreaBias = 0;
+ mToolSizeLinearScale = 0;
+ mToolSizeLinearBias = 0;
+ mToolSizeAreaScale = 0;
+ mToolSizeAreaBias = 0;
if (mCalibration.toolSizeCalibration != Calibration::TOOL_SIZE_CALIBRATION_NONE) {
if (mCalibration.toolSizeCalibration == Calibration::TOOL_SIZE_CALIBRATION_LINEAR) {
if (mCalibration.haveToolSizeLinearScale) {
- mLocked.toolSizeLinearScale = mCalibration.toolSizeLinearScale;
- } else if (mRawAxes.toolMajor.valid && mRawAxes.toolMajor.maxValue != 0) {
- mLocked.toolSizeLinearScale = float(min(width, height))
- / mRawAxes.toolMajor.maxValue;
+ mToolSizeLinearScale = mCalibration.toolSizeLinearScale;
+ } else if (mRawPointerAxes.toolMajor.valid
+ && mRawPointerAxes.toolMajor.maxValue != 0) {
+ mToolSizeLinearScale = float(min(width, height))
+ / mRawPointerAxes.toolMajor.maxValue;
}
if (mCalibration.haveToolSizeLinearBias) {
- mLocked.toolSizeLinearBias = mCalibration.toolSizeLinearBias;
+ mToolSizeLinearBias = mCalibration.toolSizeLinearBias;
}
} else if (mCalibration.toolSizeCalibration ==
Calibration::TOOL_SIZE_CALIBRATION_AREA) {
if (mCalibration.haveToolSizeLinearScale) {
- mLocked.toolSizeLinearScale = mCalibration.toolSizeLinearScale;
+ mToolSizeLinearScale = mCalibration.toolSizeLinearScale;
} else {
- mLocked.toolSizeLinearScale = min(width, height);
+ mToolSizeLinearScale = min(width, height);
}
if (mCalibration.haveToolSizeLinearBias) {
- mLocked.toolSizeLinearBias = mCalibration.toolSizeLinearBias;
+ mToolSizeLinearBias = mCalibration.toolSizeLinearBias;
}
if (mCalibration.haveToolSizeAreaScale) {
- mLocked.toolSizeAreaScale = mCalibration.toolSizeAreaScale;
- } else if (mRawAxes.toolMajor.valid && mRawAxes.toolMajor.maxValue != 0) {
- mLocked.toolSizeAreaScale = 1.0f / mRawAxes.toolMajor.maxValue;
+ mToolSizeAreaScale = mCalibration.toolSizeAreaScale;
+ } else if (mRawPointerAxes.toolMajor.valid
+ && mRawPointerAxes.toolMajor.maxValue != 0) {
+ mToolSizeAreaScale = 1.0f / mRawPointerAxes.toolMajor.maxValue;
}
if (mCalibration.haveToolSizeAreaBias) {
- mLocked.toolSizeAreaBias = mCalibration.toolSizeAreaBias;
+ mToolSizeAreaBias = mCalibration.toolSizeAreaBias;
}
}
- mLocked.orientedRanges.haveToolSize = true;
+ mOrientedRanges.haveToolSize = true;
- mLocked.orientedRanges.toolMajor.axis = AMOTION_EVENT_AXIS_TOOL_MAJOR;
- mLocked.orientedRanges.toolMajor.source = mTouchSource;
- mLocked.orientedRanges.toolMajor.min = 0;
- mLocked.orientedRanges.toolMajor.max = diagonalSize;
- mLocked.orientedRanges.toolMajor.flat = 0;
- mLocked.orientedRanges.toolMajor.fuzz = 0;
+ mOrientedRanges.toolMajor.axis = AMOTION_EVENT_AXIS_TOOL_MAJOR;
+ mOrientedRanges.toolMajor.source = mTouchSource;
+ mOrientedRanges.toolMajor.min = 0;
+ mOrientedRanges.toolMajor.max = diagonalSize;
+ mOrientedRanges.toolMajor.flat = 0;
+ mOrientedRanges.toolMajor.fuzz = 0;
- mLocked.orientedRanges.toolMinor = mLocked.orientedRanges.toolMajor;
- mLocked.orientedRanges.toolMinor.axis = AMOTION_EVENT_AXIS_TOOL_MINOR;
+ mOrientedRanges.toolMinor = mOrientedRanges.toolMajor;
+ mOrientedRanges.toolMinor.axis = AMOTION_EVENT_AXIS_TOOL_MINOR;
}
// Pressure factors.
- mLocked.pressureScale = 0;
+ mPressureScale = 0;
if (mCalibration.pressureCalibration != Calibration::PRESSURE_CALIBRATION_NONE) {
RawAbsoluteAxisInfo rawPressureAxis;
switch (mCalibration.pressureSource) {
case Calibration::PRESSURE_SOURCE_PRESSURE:
- rawPressureAxis = mRawAxes.pressure;
+ rawPressureAxis = mRawPointerAxes.pressure;
break;
case Calibration::PRESSURE_SOURCE_TOUCH:
- rawPressureAxis = mRawAxes.touchMajor;
+ rawPressureAxis = mRawPointerAxes.touchMajor;
break;
default:
rawPressureAxis.clear();
@@ -2548,84 +2622,84 @@
|| mCalibration.pressureCalibration
== Calibration::PRESSURE_CALIBRATION_AMPLITUDE) {
if (mCalibration.havePressureScale) {
- mLocked.pressureScale = mCalibration.pressureScale;
+ mPressureScale = mCalibration.pressureScale;
} else if (rawPressureAxis.valid && rawPressureAxis.maxValue != 0) {
- mLocked.pressureScale = 1.0f / rawPressureAxis.maxValue;
+ mPressureScale = 1.0f / rawPressureAxis.maxValue;
}
}
- mLocked.orientedRanges.havePressure = true;
+ mOrientedRanges.havePressure = true;
- mLocked.orientedRanges.pressure.axis = AMOTION_EVENT_AXIS_PRESSURE;
- mLocked.orientedRanges.pressure.source = mTouchSource;
- mLocked.orientedRanges.pressure.min = 0;
- mLocked.orientedRanges.pressure.max = 1.0;
- mLocked.orientedRanges.pressure.flat = 0;
- mLocked.orientedRanges.pressure.fuzz = 0;
+ mOrientedRanges.pressure.axis = AMOTION_EVENT_AXIS_PRESSURE;
+ mOrientedRanges.pressure.source = mTouchSource;
+ mOrientedRanges.pressure.min = 0;
+ mOrientedRanges.pressure.max = 1.0;
+ mOrientedRanges.pressure.flat = 0;
+ mOrientedRanges.pressure.fuzz = 0;
}
// Size factors.
- mLocked.sizeScale = 0;
+ mSizeScale = 0;
if (mCalibration.sizeCalibration != Calibration::SIZE_CALIBRATION_NONE) {
if (mCalibration.sizeCalibration == Calibration::SIZE_CALIBRATION_NORMALIZED) {
- if (mRawAxes.toolMajor.valid && mRawAxes.toolMajor.maxValue != 0) {
- mLocked.sizeScale = 1.0f / mRawAxes.toolMajor.maxValue;
+ if (mRawPointerAxes.toolMajor.valid && mRawPointerAxes.toolMajor.maxValue != 0) {
+ mSizeScale = 1.0f / mRawPointerAxes.toolMajor.maxValue;
}
}
- mLocked.orientedRanges.haveSize = true;
+ mOrientedRanges.haveSize = true;
- mLocked.orientedRanges.size.axis = AMOTION_EVENT_AXIS_SIZE;
- mLocked.orientedRanges.size.source = mTouchSource;
- mLocked.orientedRanges.size.min = 0;
- mLocked.orientedRanges.size.max = 1.0;
- mLocked.orientedRanges.size.flat = 0;
- mLocked.orientedRanges.size.fuzz = 0;
+ mOrientedRanges.size.axis = AMOTION_EVENT_AXIS_SIZE;
+ mOrientedRanges.size.source = mTouchSource;
+ mOrientedRanges.size.min = 0;
+ mOrientedRanges.size.max = 1.0;
+ mOrientedRanges.size.flat = 0;
+ mOrientedRanges.size.fuzz = 0;
}
// Orientation
- mLocked.orientationScale = 0;
+ mOrientationScale = 0;
if (mCalibration.orientationCalibration != Calibration::ORIENTATION_CALIBRATION_NONE) {
if (mCalibration.orientationCalibration
== Calibration::ORIENTATION_CALIBRATION_INTERPOLATED) {
- if (mRawAxes.orientation.valid && mRawAxes.orientation.maxValue != 0) {
- mLocked.orientationScale = float(M_PI_2) / mRawAxes.orientation.maxValue;
+ if (mRawPointerAxes.orientation.valid && mRawPointerAxes.orientation.maxValue != 0) {
+ mOrientationScale = float(M_PI_2) / mRawPointerAxes.orientation.maxValue;
}
}
- mLocked.orientedRanges.haveOrientation = true;
+ mOrientedRanges.haveOrientation = true;
- mLocked.orientedRanges.orientation.axis = AMOTION_EVENT_AXIS_ORIENTATION;
- mLocked.orientedRanges.orientation.source = mTouchSource;
- mLocked.orientedRanges.orientation.min = - M_PI_2;
- mLocked.orientedRanges.orientation.max = M_PI_2;
- mLocked.orientedRanges.orientation.flat = 0;
- mLocked.orientedRanges.orientation.fuzz = 0;
+ mOrientedRanges.orientation.axis = AMOTION_EVENT_AXIS_ORIENTATION;
+ mOrientedRanges.orientation.source = mTouchSource;
+ mOrientedRanges.orientation.min = - M_PI_2;
+ mOrientedRanges.orientation.max = M_PI_2;
+ mOrientedRanges.orientation.flat = 0;
+ mOrientedRanges.orientation.fuzz = 0;
}
// Distance
- mLocked.distanceScale = 0;
+ mDistanceScale = 0;
if (mCalibration.distanceCalibration != Calibration::DISTANCE_CALIBRATION_NONE) {
if (mCalibration.distanceCalibration
== Calibration::DISTANCE_CALIBRATION_SCALED) {
if (mCalibration.haveDistanceScale) {
- mLocked.distanceScale = mCalibration.distanceScale;
+ mDistanceScale = mCalibration.distanceScale;
} else {
- mLocked.distanceScale = 1.0f;
+ mDistanceScale = 1.0f;
}
}
- mLocked.orientedRanges.haveDistance = true;
+ mOrientedRanges.haveDistance = true;
- mLocked.orientedRanges.distance.axis = AMOTION_EVENT_AXIS_DISTANCE;
- mLocked.orientedRanges.distance.source = mTouchSource;
- mLocked.orientedRanges.distance.min =
- mRawAxes.distance.minValue * mLocked.distanceScale;
- mLocked.orientedRanges.distance.max =
- mRawAxes.distance.minValue * mLocked.distanceScale;
- mLocked.orientedRanges.distance.flat = 0;
- mLocked.orientedRanges.distance.fuzz =
- mRawAxes.distance.fuzz * mLocked.distanceScale;
+ mOrientedRanges.distance.axis = AMOTION_EVENT_AXIS_DISTANCE;
+ mOrientedRanges.distance.source = mTouchSource;
+ mOrientedRanges.distance.min =
+ mRawPointerAxes.distance.minValue * mDistanceScale;
+ mOrientedRanges.distance.max =
+ mRawPointerAxes.distance.minValue * mDistanceScale;
+ mOrientedRanges.distance.flat = 0;
+ mOrientedRanges.distance.fuzz =
+ mRawPointerAxes.distance.fuzz * mDistanceScale;
}
}
@@ -2633,78 +2707,77 @@
// Compute oriented surface dimensions, precision, scales and ranges.
// Note that the maximum value reported is an inclusive maximum value so it is one
// unit less than the total width or height of surface.
- switch (mLocked.surfaceOrientation) {
+ switch (mSurfaceOrientation) {
case DISPLAY_ORIENTATION_90:
case DISPLAY_ORIENTATION_270:
- mLocked.orientedSurfaceWidth = mLocked.surfaceHeight;
- mLocked.orientedSurfaceHeight = mLocked.surfaceWidth;
+ mOrientedSurfaceWidth = mSurfaceHeight;
+ mOrientedSurfaceHeight = mSurfaceWidth;
- mLocked.orientedXPrecision = mLocked.yPrecision;
- mLocked.orientedYPrecision = mLocked.xPrecision;
+ mOrientedXPrecision = mYPrecision;
+ mOrientedYPrecision = mXPrecision;
- mLocked.orientedRanges.x.min = 0;
- mLocked.orientedRanges.x.max = (mRawAxes.y.maxValue - mRawAxes.y.minValue)
- * mLocked.yScale;
- mLocked.orientedRanges.x.flat = 0;
- mLocked.orientedRanges.x.fuzz = mLocked.yScale;
+ mOrientedRanges.x.min = 0;
+ mOrientedRanges.x.max = (mRawPointerAxes.y.maxValue - mRawPointerAxes.y.minValue)
+ * mYScale;
+ mOrientedRanges.x.flat = 0;
+ mOrientedRanges.x.fuzz = mYScale;
- mLocked.orientedRanges.y.min = 0;
- mLocked.orientedRanges.y.max = (mRawAxes.x.maxValue - mRawAxes.x.minValue)
- * mLocked.xScale;
- mLocked.orientedRanges.y.flat = 0;
- mLocked.orientedRanges.y.fuzz = mLocked.xScale;
+ mOrientedRanges.y.min = 0;
+ mOrientedRanges.y.max = (mRawPointerAxes.x.maxValue - mRawPointerAxes.x.minValue)
+ * mXScale;
+ mOrientedRanges.y.flat = 0;
+ mOrientedRanges.y.fuzz = mXScale;
break;
default:
- mLocked.orientedSurfaceWidth = mLocked.surfaceWidth;
- mLocked.orientedSurfaceHeight = mLocked.surfaceHeight;
+ mOrientedSurfaceWidth = mSurfaceWidth;
+ mOrientedSurfaceHeight = mSurfaceHeight;
- mLocked.orientedXPrecision = mLocked.xPrecision;
- mLocked.orientedYPrecision = mLocked.yPrecision;
+ mOrientedXPrecision = mXPrecision;
+ mOrientedYPrecision = mYPrecision;
- mLocked.orientedRanges.x.min = 0;
- mLocked.orientedRanges.x.max = (mRawAxes.x.maxValue - mRawAxes.x.minValue)
- * mLocked.xScale;
- mLocked.orientedRanges.x.flat = 0;
- mLocked.orientedRanges.x.fuzz = mLocked.xScale;
+ mOrientedRanges.x.min = 0;
+ mOrientedRanges.x.max = (mRawPointerAxes.x.maxValue - mRawPointerAxes.x.minValue)
+ * mXScale;
+ mOrientedRanges.x.flat = 0;
+ mOrientedRanges.x.fuzz = mXScale;
- mLocked.orientedRanges.y.min = 0;
- mLocked.orientedRanges.y.max = (mRawAxes.y.maxValue - mRawAxes.y.minValue)
- * mLocked.yScale;
- mLocked.orientedRanges.y.flat = 0;
- mLocked.orientedRanges.y.fuzz = mLocked.yScale;
+ mOrientedRanges.y.min = 0;
+ mOrientedRanges.y.max = (mRawPointerAxes.y.maxValue - mRawPointerAxes.y.minValue)
+ * mYScale;
+ mOrientedRanges.y.flat = 0;
+ mOrientedRanges.y.fuzz = mYScale;
break;
}
// Compute pointer gesture detection parameters.
- // TODO: These factors should not be hardcoded.
if (mParameters.deviceType == Parameters::DEVICE_TYPE_POINTER) {
- int32_t rawWidth = mRawAxes.x.maxValue - mRawAxes.x.minValue + 1;
- int32_t rawHeight = mRawAxes.y.maxValue - mRawAxes.y.minValue + 1;
+ int32_t rawWidth = mRawPointerAxes.x.maxValue - mRawPointerAxes.x.minValue + 1;
+ int32_t rawHeight = mRawPointerAxes.y.maxValue - mRawPointerAxes.y.minValue + 1;
float rawDiagonal = hypotf(rawWidth, rawHeight);
- float displayDiagonal = hypotf(mLocked.associatedDisplayWidth,
- mLocked.associatedDisplayHeight);
+ float displayDiagonal = hypotf(mAssociatedDisplayWidth,
+ mAssociatedDisplayHeight);
// Scale movements such that one whole swipe of the touch pad covers a
// given area relative to the diagonal size of the display when no acceleration
// is applied.
// Assume that the touch pad has a square aspect ratio such that movements in
// X and Y of the same number of raw units cover the same physical distance.
- mLocked.pointerGestureXMovementScale = mConfig.pointerGestureMovementSpeedRatio
+ mPointerGestureXMovementScale = mConfig.pointerGestureMovementSpeedRatio
* displayDiagonal / rawDiagonal;
- mLocked.pointerGestureYMovementScale = mLocked.pointerGestureXMovementScale;
+ mPointerGestureYMovementScale = mPointerGestureXMovementScale;
// Scale zooms to cover a smaller range of the display than movements do.
// This value determines the area around the pointer that is affected by freeform
// pointer gestures.
- mLocked.pointerGestureXZoomScale = mConfig.pointerGestureZoomSpeedRatio
+ mPointerGestureXZoomScale = mConfig.pointerGestureZoomSpeedRatio
* displayDiagonal / rawDiagonal;
- mLocked.pointerGestureYZoomScale = mLocked.pointerGestureXZoomScale;
+ mPointerGestureYZoomScale = mPointerGestureXZoomScale;
// Max width between pointers to detect a swipe gesture is more than some fraction
// of the diagonal axis of the touch pad. Touches that are wider than this are
// translated into freeform gestures.
- mLocked.pointerGestureMaxSwipeWidth =
+ mPointerGestureMaxSwipeWidth =
mConfig.pointerGestureSwipeMaxWidthRatio * rawDiagonal;
// Reset the current pointer gesture.
@@ -2720,35 +2793,35 @@
return true;
}
-void TouchInputMapper::dumpSurfaceLocked(String8& dump) {
- dump.appendFormat(INDENT3 "SurfaceWidth: %dpx\n", mLocked.surfaceWidth);
- dump.appendFormat(INDENT3 "SurfaceHeight: %dpx\n", mLocked.surfaceHeight);
- dump.appendFormat(INDENT3 "SurfaceOrientation: %d\n", mLocked.surfaceOrientation);
+void TouchInputMapper::dumpSurface(String8& dump) {
+ dump.appendFormat(INDENT3 "SurfaceWidth: %dpx\n", mSurfaceWidth);
+ dump.appendFormat(INDENT3 "SurfaceHeight: %dpx\n", mSurfaceHeight);
+ dump.appendFormat(INDENT3 "SurfaceOrientation: %d\n", mSurfaceOrientation);
}
-void TouchInputMapper::configureVirtualKeysLocked() {
+void TouchInputMapper::configureVirtualKeys() {
Vector<VirtualKeyDefinition> virtualKeyDefinitions;
getEventHub()->getVirtualKeyDefinitions(getDeviceId(), virtualKeyDefinitions);
- mLocked.virtualKeys.clear();
+ mVirtualKeys.clear();
if (virtualKeyDefinitions.size() == 0) {
return;
}
- mLocked.virtualKeys.setCapacity(virtualKeyDefinitions.size());
+ mVirtualKeys.setCapacity(virtualKeyDefinitions.size());
- int32_t touchScreenLeft = mRawAxes.x.minValue;
- int32_t touchScreenTop = mRawAxes.y.minValue;
- int32_t touchScreenWidth = mRawAxes.x.maxValue - mRawAxes.x.minValue + 1;
- int32_t touchScreenHeight = mRawAxes.y.maxValue - mRawAxes.y.minValue + 1;
+ int32_t touchScreenLeft = mRawPointerAxes.x.minValue;
+ int32_t touchScreenTop = mRawPointerAxes.y.minValue;
+ int32_t touchScreenWidth = mRawPointerAxes.x.maxValue - mRawPointerAxes.x.minValue + 1;
+ int32_t touchScreenHeight = mRawPointerAxes.y.maxValue - mRawPointerAxes.y.minValue + 1;
for (size_t i = 0; i < virtualKeyDefinitions.size(); i++) {
const VirtualKeyDefinition& virtualKeyDefinition =
virtualKeyDefinitions[i];
- mLocked.virtualKeys.add();
- VirtualKey& virtualKey = mLocked.virtualKeys.editTop();
+ mVirtualKeys.add();
+ VirtualKey& virtualKey = mVirtualKeys.editTop();
virtualKey.scanCode = virtualKeyDefinition.scanCode;
int32_t keyCode;
@@ -2757,7 +2830,7 @@
& keyCode, & flags)) {
LOGW(INDENT "VirtualKey %d: could not obtain key code, ignoring",
virtualKey.scanCode);
- mLocked.virtualKeys.pop(); // drop the key
+ mVirtualKeys.pop(); // drop the key
continue;
}
@@ -2769,22 +2842,22 @@
int32_t halfHeight = virtualKeyDefinition.height / 2;
virtualKey.hitLeft = (virtualKeyDefinition.centerX - halfWidth)
- * touchScreenWidth / mLocked.surfaceWidth + touchScreenLeft;
+ * touchScreenWidth / mSurfaceWidth + touchScreenLeft;
virtualKey.hitRight= (virtualKeyDefinition.centerX + halfWidth)
- * touchScreenWidth / mLocked.surfaceWidth + touchScreenLeft;
+ * touchScreenWidth / mSurfaceWidth + touchScreenLeft;
virtualKey.hitTop = (virtualKeyDefinition.centerY - halfHeight)
- * touchScreenHeight / mLocked.surfaceHeight + touchScreenTop;
+ * touchScreenHeight / mSurfaceHeight + touchScreenTop;
virtualKey.hitBottom = (virtualKeyDefinition.centerY + halfHeight)
- * touchScreenHeight / mLocked.surfaceHeight + touchScreenTop;
+ * touchScreenHeight / mSurfaceHeight + touchScreenTop;
}
}
-void TouchInputMapper::dumpVirtualKeysLocked(String8& dump) {
- if (!mLocked.virtualKeys.isEmpty()) {
+void TouchInputMapper::dumpVirtualKeys(String8& dump) {
+ if (!mVirtualKeys.isEmpty()) {
dump.append(INDENT3 "Virtual Keys:\n");
- for (size_t i = 0; i < mLocked.virtualKeys.size(); i++) {
- const VirtualKey& virtualKey = mLocked.virtualKeys.itemAt(i);
+ for (size_t i = 0; i < mVirtualKeys.size(); i++) {
+ const VirtualKey& virtualKey = mVirtualKeys.itemAt(i);
dump.appendFormat(INDENT4 "%d: scanCode=%d, keyCode=%d, "
"hitLeft=%d, hitRight=%d, hitTop=%d, hitBottom=%d\n",
i, virtualKey.scanCode, virtualKey.keyCode,
@@ -2927,22 +3000,22 @@
// Pressure
switch (mCalibration.pressureSource) {
case Calibration::PRESSURE_SOURCE_DEFAULT:
- if (mRawAxes.pressure.valid) {
+ if (mRawPointerAxes.pressure.valid) {
mCalibration.pressureSource = Calibration::PRESSURE_SOURCE_PRESSURE;
- } else if (mRawAxes.touchMajor.valid) {
+ } else if (mRawPointerAxes.touchMajor.valid) {
mCalibration.pressureSource = Calibration::PRESSURE_SOURCE_TOUCH;
}
break;
case Calibration::PRESSURE_SOURCE_PRESSURE:
- if (! mRawAxes.pressure.valid) {
+ if (! mRawPointerAxes.pressure.valid) {
LOGW("Calibration property touch.pressure.source is 'pressure' but "
"the pressure axis is not available.");
}
break;
case Calibration::PRESSURE_SOURCE_TOUCH:
- if (! mRawAxes.touchMajor.valid) {
+ if (! mRawPointerAxes.touchMajor.valid) {
LOGW("Calibration property touch.pressure.source is 'touch' but "
"the touchMajor axis is not available.");
}
@@ -2968,7 +3041,7 @@
// Tool Size
switch (mCalibration.toolSizeCalibration) {
case Calibration::TOOL_SIZE_CALIBRATION_DEFAULT:
- if (mRawAxes.toolMajor.valid) {
+ if (mRawPointerAxes.toolMajor.valid) {
mCalibration.toolSizeCalibration = Calibration::TOOL_SIZE_CALIBRATION_LINEAR;
} else {
mCalibration.toolSizeCalibration = Calibration::TOOL_SIZE_CALIBRATION_NONE;
@@ -2997,7 +3070,7 @@
// Size
switch (mCalibration.sizeCalibration) {
case Calibration::SIZE_CALIBRATION_DEFAULT:
- if (mRawAxes.toolMajor.valid) {
+ if (mRawPointerAxes.toolMajor.valid) {
mCalibration.sizeCalibration = Calibration::SIZE_CALIBRATION_NORMALIZED;
} else {
mCalibration.sizeCalibration = Calibration::SIZE_CALIBRATION_NONE;
@@ -3011,7 +3084,7 @@
// Orientation
switch (mCalibration.orientationCalibration) {
case Calibration::ORIENTATION_CALIBRATION_DEFAULT:
- if (mRawAxes.orientation.valid) {
+ if (mRawPointerAxes.orientation.valid) {
mCalibration.orientationCalibration = Calibration::ORIENTATION_CALIBRATION_INTERPOLATED;
} else {
mCalibration.orientationCalibration = Calibration::ORIENTATION_CALIBRATION_NONE;
@@ -3025,7 +3098,7 @@
// Distance
switch (mCalibration.distanceCalibration) {
case Calibration::DISTANCE_CALIBRATION_DEFAULT:
- if (mRawAxes.distance.valid) {
+ if (mRawPointerAxes.distance.valid) {
mCalibration.distanceCalibration = Calibration::DISTANCE_CALIBRATION_SCALED;
} else {
mCalibration.distanceCalibration = Calibration::DISTANCE_CALIBRATION_NONE;
@@ -3177,50 +3250,58 @@
}
void TouchInputMapper::reset() {
- // Synthesize touch up event if touch is currently down.
+ // Synthesize touch up event.
// This will also take care of finishing virtual key processing if needed.
- if (mLastTouch.pointerCount != 0) {
- nsecs_t when = systemTime(SYSTEM_TIME_MONOTONIC);
- mCurrentTouch.clear();
- syncTouch(when, true);
+ nsecs_t when = systemTime(SYSTEM_TIME_MONOTONIC);
+ mCurrentRawPointerData.clear();
+ mCurrentButtonState = 0;
+ syncTouch(when, true);
+
+ initialize();
+
+ if (mPointerController != NULL
+ && mParameters.gestureMode == Parameters::GESTURE_MODE_SPOTS) {
+ mPointerController->fade(PointerControllerInterface::TRANSITION_GRADUAL);
+ mPointerController->clearSpots();
}
- { // acquire lock
- AutoMutex _l(mLock);
- initializeLocked();
-
- if (mPointerController != NULL
- && mParameters.gestureMode == Parameters::GESTURE_MODE_SPOTS) {
- mPointerController->fade(PointerControllerInterface::TRANSITION_GRADUAL);
- mPointerController->clearSpots();
- }
- } // release lock
-
InputMapper::reset();
}
void TouchInputMapper::syncTouch(nsecs_t when, bool havePointerIds) {
#if DEBUG_RAW_EVENTS
if (!havePointerIds) {
- LOGD("syncTouch: pointerCount=%d, no pointer ids", mCurrentTouch.pointerCount);
+ LOGD("syncTouch: pointerCount %d -> %d, no pointer ids",
+ mLastRawPointerData.pointerCount,
+ mCurrentRawPointerData.pointerCount);
} else {
- LOGD("syncTouch: pointerCount=%d, up=0x%08x, down=0x%08x, move=0x%08x, "
- "last=0x%08x, current=0x%08x", mCurrentTouch.pointerCount,
- mLastTouch.idBits.value & ~mCurrentTouch.idBits.value,
- mCurrentTouch.idBits.value & ~mLastTouch.idBits.value,
- mLastTouch.idBits.value & mCurrentTouch.idBits.value,
- mLastTouch.idBits.value, mCurrentTouch.idBits.value);
+ LOGD("syncTouch: pointerCount %d -> %d, touching ids 0x%08x -> 0x%08x, "
+ "hovering ids 0x%08x -> 0x%08x",
+ mLastRawPointerData.pointerCount,
+ mCurrentRawPointerData.pointerCount,
+ mLastRawPointerData.touchingIdBits.value,
+ mCurrentRawPointerData.touchingIdBits.value,
+ mLastRawPointerData.hoveringIdBits.value,
+ mCurrentRawPointerData.hoveringIdBits.value);
}
#endif
- // Preprocess pointer data.
- if (!havePointerIds) {
- calculatePointerIds();
+ // Configure the surface now, if possible.
+ if (!configureSurface()) {
+ mLastRawPointerData.clear();
+ mLastCookedPointerData.clear();
+ mLastButtonState = 0;
+ return;
}
- // Handle initial down events.
+ // Preprocess pointer data.
+ if (!havePointerIds) {
+ assignPointerIds();
+ }
+
+ // Handle policy on initial down or hover events.
uint32_t policyFlags = 0;
- if (mLastTouch.pointerCount == 0 && mCurrentTouch.pointerCount != 0) {
+ if (mLastRawPointerData.pointerCount == 0 && mCurrentRawPointerData.pointerCount != 0) {
if (mParameters.deviceType == Parameters::DEVICE_TYPE_TOUCH_SCREEN) {
// If this is a touch screen, hide the pointer on an initial down.
getContext()->fadePointer();
@@ -3235,40 +3316,31 @@
}
}
- // Synthesize key down from buttons if needed.
+ // Synthesize key down from raw buttons if needed.
synthesizeButtonKeys(getContext(), AKEY_EVENT_ACTION_DOWN, when, getDeviceId(), mTouchSource,
- policyFlags, mLastTouch.buttonState, mCurrentTouch.buttonState);
+ policyFlags, mLastButtonState, mCurrentButtonState);
- // Send motion events.
- TouchResult touchResult;
- if (mLastTouch.pointerCount == 0 && mCurrentTouch.pointerCount == 0
- && mLastTouch.buttonState == mCurrentTouch.buttonState) {
- // Drop spurious syncs.
- touchResult = DROP_STROKE;
- } else {
- // Process touches and virtual keys.
- touchResult = consumeOffScreenTouches(when, policyFlags);
- if (touchResult == DISPATCH_TOUCH) {
- suppressSwipeOntoVirtualKeys(when);
- if (mPointerController != NULL && mConfig.pointerGesturesEnabled) {
- dispatchPointerGestures(when, policyFlags, false /*isTimeout*/);
- }
- dispatchTouches(when, policyFlags);
- }
+ if (consumeRawTouches(when, policyFlags)) {
+ mCurrentRawPointerData.clear();
}
- // Synthesize key up from buttons if needed.
+ if (mPointerController != NULL && mConfig.pointerGesturesEnabled) {
+ dispatchPointerGestures(when, policyFlags, false /*isTimeout*/);
+ }
+
+ cookPointerData();
+ dispatchHoverExit(when, policyFlags);
+ dispatchTouches(when, policyFlags);
+ dispatchHoverEnterAndMove(when, policyFlags);
+
+ // Synthesize key up from raw buttons if needed.
synthesizeButtonKeys(getContext(), AKEY_EVENT_ACTION_UP, when, getDeviceId(), mTouchSource,
- policyFlags, mLastTouch.buttonState, mCurrentTouch.buttonState);
+ policyFlags, mLastButtonState, mCurrentButtonState);
// Copy current touch to last touch in preparation for the next cycle.
- // Keep the button state so we can track edge-triggered button state changes.
- if (touchResult == DROP_STROKE) {
- mLastTouch.clear();
- mLastTouch.buttonState = mCurrentTouch.buttonState;
- } else {
- mLastTouch.copyFrom(mCurrentTouch);
- }
+ mLastRawPointerData.copyFrom(mCurrentRawPointerData);
+ mLastCookedPointerData.copyFrom(mCurrentCookedPointerData);
+ mLastButtonState = mCurrentButtonState;
}
void TouchInputMapper::timeoutExpired(nsecs_t when) {
@@ -3277,125 +3349,88 @@
}
}
-TouchInputMapper::TouchResult TouchInputMapper::consumeOffScreenTouches(
- nsecs_t when, uint32_t policyFlags) {
- int32_t keyEventAction, keyEventFlags;
- int32_t keyCode, scanCode, downTime;
- TouchResult touchResult;
-
- { // acquire lock
- AutoMutex _l(mLock);
-
- // Update surface size and orientation, including virtual key positions.
- if (! configureSurfaceLocked()) {
- return DROP_STROKE;
- }
-
- // Check for virtual key press.
- if (mLocked.currentVirtualKey.down) {
- if (mCurrentTouch.pointerCount == 0) {
- // Pointer went up while virtual key was down.
- mLocked.currentVirtualKey.down = false;
+bool TouchInputMapper::consumeRawTouches(nsecs_t when, uint32_t policyFlags) {
+ // Check for release of a virtual key.
+ if (mCurrentVirtualKey.down) {
+ if (mCurrentRawPointerData.touchingIdBits.isEmpty()) {
+ // Pointer went up while virtual key was down.
+ mCurrentVirtualKey.down = false;
+ if (!mCurrentVirtualKey.ignored) {
#if DEBUG_VIRTUAL_KEYS
LOGD("VirtualKeys: Generating key up: keyCode=%d, scanCode=%d",
- mLocked.currentVirtualKey.keyCode, mLocked.currentVirtualKey.scanCode);
+ mCurrentVirtualKey.keyCode, mCurrentVirtualKey.scanCode);
#endif
- keyEventAction = AKEY_EVENT_ACTION_UP;
- keyEventFlags = AKEY_EVENT_FLAG_FROM_SYSTEM | AKEY_EVENT_FLAG_VIRTUAL_HARD_KEY;
- touchResult = SKIP_TOUCH;
- goto DispatchVirtualKey;
+ dispatchVirtualKey(when, policyFlags,
+ AKEY_EVENT_ACTION_UP,
+ AKEY_EVENT_FLAG_FROM_SYSTEM | AKEY_EVENT_FLAG_VIRTUAL_HARD_KEY);
}
-
- if (mCurrentTouch.pointerCount == 1) {
- int32_t x = mCurrentTouch.pointers[0].x;
- int32_t y = mCurrentTouch.pointers[0].y;
- const VirtualKey* virtualKey = findVirtualKeyHitLocked(x, y);
- if (virtualKey && virtualKey->keyCode == mLocked.currentVirtualKey.keyCode) {
- // Pointer is still within the space of the virtual key.
- return SKIP_TOUCH;
- }
- }
-
- // Pointer left virtual key area or another pointer also went down.
- // Send key cancellation and drop the stroke so subsequent motions will be
- // considered fresh downs. This is useful when the user swipes away from the
- // virtual key area into the main display surface.
- mLocked.currentVirtualKey.down = false;
-#if DEBUG_VIRTUAL_KEYS
- LOGD("VirtualKeys: Canceling key: keyCode=%d, scanCode=%d",
- mLocked.currentVirtualKey.keyCode, mLocked.currentVirtualKey.scanCode);
-#endif
- keyEventAction = AKEY_EVENT_ACTION_UP;
- keyEventFlags = AKEY_EVENT_FLAG_FROM_SYSTEM | AKEY_EVENT_FLAG_VIRTUAL_HARD_KEY
- | AKEY_EVENT_FLAG_CANCELED;
-
- // Check whether the pointer moved inside the display area where we should
- // start a new stroke.
- int32_t x = mCurrentTouch.pointers[0].x;
- int32_t y = mCurrentTouch.pointers[0].y;
- if (isPointInsideSurfaceLocked(x, y)) {
- mLastTouch.clear();
- touchResult = DISPATCH_TOUCH;
- } else {
- touchResult = DROP_STROKE;
- }
- } else {
- if (mCurrentTouch.pointerCount >= 1 && mLastTouch.pointerCount == 0) {
- // Pointer just went down. Handle off-screen touches, if needed.
- int32_t x = mCurrentTouch.pointers[0].x;
- int32_t y = mCurrentTouch.pointers[0].y;
- if (! isPointInsideSurfaceLocked(x, y)) {
- // If exactly one pointer went down, check for virtual key hit.
- // Otherwise we will drop the entire stroke.
- if (mCurrentTouch.pointerCount == 1) {
- const VirtualKey* virtualKey = findVirtualKeyHitLocked(x, y);
- if (virtualKey) {
- if (mContext->shouldDropVirtualKey(when, getDevice(),
- virtualKey->keyCode, virtualKey->scanCode)) {
- return DROP_STROKE;
- }
-
- mLocked.currentVirtualKey.down = true;
- mLocked.currentVirtualKey.downTime = when;
- mLocked.currentVirtualKey.keyCode = virtualKey->keyCode;
- mLocked.currentVirtualKey.scanCode = virtualKey->scanCode;
-#if DEBUG_VIRTUAL_KEYS
- LOGD("VirtualKeys: Generating key down: keyCode=%d, scanCode=%d",
- mLocked.currentVirtualKey.keyCode,
- mLocked.currentVirtualKey.scanCode);
-#endif
- keyEventAction = AKEY_EVENT_ACTION_DOWN;
- keyEventFlags = AKEY_EVENT_FLAG_FROM_SYSTEM
- | AKEY_EVENT_FLAG_VIRTUAL_HARD_KEY;
- touchResult = SKIP_TOUCH;
- goto DispatchVirtualKey;
- }
- }
- return DROP_STROKE;
- }
- }
- return DISPATCH_TOUCH;
+ return true;
}
- DispatchVirtualKey:
- // Collect remaining state needed to dispatch virtual key.
- keyCode = mLocked.currentVirtualKey.keyCode;
- scanCode = mLocked.currentVirtualKey.scanCode;
- downTime = mLocked.currentVirtualKey.downTime;
- } // release lock
+ if (mCurrentRawPointerData.touchingIdBits.count() == 1) {
+ uint32_t id = mCurrentRawPointerData.touchingIdBits.firstMarkedBit();
+ const RawPointerData::Pointer& pointer = mCurrentRawPointerData.pointerForId(id);
+ const VirtualKey* virtualKey = findVirtualKeyHit(pointer.x, pointer.y);
+ if (virtualKey && virtualKey->keyCode == mCurrentVirtualKey.keyCode) {
+ // Pointer is still within the space of the virtual key.
+ return true;
+ }
+ }
- // Dispatch virtual key.
- int32_t metaState = mContext->getGlobalMetaState();
- policyFlags |= POLICY_FLAG_VIRTUAL;
- getDispatcher()->notifyKey(when, getDeviceId(), AINPUT_SOURCE_KEYBOARD, policyFlags,
- keyEventAction, keyEventFlags, keyCode, scanCode, metaState, downTime);
- return touchResult;
-}
+ // Pointer left virtual key area or another pointer also went down.
+ // Send key cancellation but do not consume the touch yet.
+ // This is useful when the user swipes through from the virtual key area
+ // into the main display surface.
+ mCurrentVirtualKey.down = false;
+ if (!mCurrentVirtualKey.ignored) {
+#if DEBUG_VIRTUAL_KEYS
+ LOGD("VirtualKeys: Canceling key: keyCode=%d, scanCode=%d",
+ mCurrentVirtualKey.keyCode, mCurrentVirtualKey.scanCode);
+#endif
+ dispatchVirtualKey(when, policyFlags,
+ AKEY_EVENT_ACTION_UP,
+ AKEY_EVENT_FLAG_FROM_SYSTEM | AKEY_EVENT_FLAG_VIRTUAL_HARD_KEY
+ | AKEY_EVENT_FLAG_CANCELED);
+ }
+ }
-void TouchInputMapper::suppressSwipeOntoVirtualKeys(nsecs_t when) {
+ if (mLastRawPointerData.touchingIdBits.isEmpty()
+ && !mCurrentRawPointerData.touchingIdBits.isEmpty()) {
+ // Pointer just went down. Check for virtual key press or off-screen touches.
+ uint32_t id = mCurrentRawPointerData.touchingIdBits.firstMarkedBit();
+ const RawPointerData::Pointer& pointer = mCurrentRawPointerData.pointerForId(id);
+ if (!isPointInsideSurface(pointer.x, pointer.y)) {
+ // If exactly one pointer went down, check for virtual key hit.
+ // Otherwise we will drop the entire stroke.
+ if (mCurrentRawPointerData.touchingIdBits.count() == 1) {
+ const VirtualKey* virtualKey = findVirtualKeyHit(pointer.x, pointer.y);
+ if (virtualKey) {
+ mCurrentVirtualKey.down = true;
+ mCurrentVirtualKey.downTime = when;
+ mCurrentVirtualKey.keyCode = virtualKey->keyCode;
+ mCurrentVirtualKey.scanCode = virtualKey->scanCode;
+ mCurrentVirtualKey.ignored = mContext->shouldDropVirtualKey(
+ when, getDevice(), virtualKey->keyCode, virtualKey->scanCode);
+
+ if (!mCurrentVirtualKey.ignored) {
+#if DEBUG_VIRTUAL_KEYS
+ LOGD("VirtualKeys: Generating key down: keyCode=%d, scanCode=%d",
+ mCurrentVirtualKey.keyCode,
+ mCurrentVirtualKey.scanCode);
+#endif
+ dispatchVirtualKey(when, policyFlags,
+ AKEY_EVENT_ACTION_DOWN,
+ AKEY_EVENT_FLAG_FROM_SYSTEM | AKEY_EVENT_FLAG_VIRTUAL_HARD_KEY);
+ }
+ }
+ }
+ return true;
+ }
+ }
+
// Disable all virtual key touches that happen within a short time interval of the
- // most recent touch. The idea is to filter out stray virtual key presses when
- // interacting with the touch screen.
+ // most recent touch within the screen area. The idea is to filter out stray
+ // virtual key presses when interacting with the touch screen.
//
// Problems we're trying to solve:
//
@@ -3407,37 +3442,44 @@
// area and accidentally triggers a virtual key. This often happens when virtual keys
// are layed out below the screen near to where the on screen keyboard's space bar
// is displayed.
- if (mConfig.virtualKeyQuietTime > 0 && mCurrentTouch.pointerCount != 0) {
+ if (mConfig.virtualKeyQuietTime > 0 && !mCurrentRawPointerData.touchingIdBits.isEmpty()) {
mContext->disableVirtualKeysUntil(when + mConfig.virtualKeyQuietTime);
}
+ return false;
+}
+
+void TouchInputMapper::dispatchVirtualKey(nsecs_t when, uint32_t policyFlags,
+ int32_t keyEventAction, int32_t keyEventFlags) {
+ int32_t keyCode = mCurrentVirtualKey.keyCode;
+ int32_t scanCode = mCurrentVirtualKey.scanCode;
+ nsecs_t downTime = mCurrentVirtualKey.downTime;
+ int32_t metaState = mContext->getGlobalMetaState();
+ policyFlags |= POLICY_FLAG_VIRTUAL;
+
+ NotifyKeyArgs args(when, getDeviceId(), AINPUT_SOURCE_KEYBOARD, policyFlags,
+ keyEventAction, keyEventFlags, keyCode, scanCode, metaState, downTime);
+ getListener()->notifyKey(&args);
}
void TouchInputMapper::dispatchTouches(nsecs_t when, uint32_t policyFlags) {
- uint32_t currentPointerCount = mCurrentTouch.pointerCount;
- uint32_t lastPointerCount = mLastTouch.pointerCount;
- if (currentPointerCount == 0 && lastPointerCount == 0) {
- return; // nothing to do!
- }
-
- // Update current touch coordinates.
- float xPrecision, yPrecision;
- prepareTouches(&xPrecision, &yPrecision);
-
- // Dispatch motions.
- BitSet32 currentIdBits = mCurrentTouch.idBits;
- BitSet32 lastIdBits = mLastTouch.idBits;
+ BitSet32 currentIdBits = mCurrentCookedPointerData.touchingIdBits;
+ BitSet32 lastIdBits = mLastCookedPointerData.touchingIdBits;
int32_t metaState = getContext()->getGlobalMetaState();
- int32_t buttonState = mCurrentTouch.buttonState;
+ int32_t buttonState = mCurrentButtonState;
if (currentIdBits == lastIdBits) {
- // No pointer id changes so this is a move event.
- // The dispatcher takes care of batching moves so we don't have to deal with that here.
- dispatchMotion(when, policyFlags, mTouchSource,
- AMOTION_EVENT_ACTION_MOVE, 0, metaState, buttonState,
- AMOTION_EVENT_EDGE_FLAG_NONE,
- mCurrentTouchProperties, mCurrentTouchCoords,
- mCurrentTouch.idToIndex, currentIdBits, -1,
- xPrecision, yPrecision, mDownTime);
+ if (!currentIdBits.isEmpty()) {
+ // No pointer id changes so this is a move event.
+ // The listener takes care of batching moves so we don't have to deal with that here.
+ dispatchMotion(when, policyFlags, mTouchSource,
+ AMOTION_EVENT_ACTION_MOVE, 0, metaState, buttonState,
+ AMOTION_EVENT_EDGE_FLAG_NONE,
+ mCurrentCookedPointerData.pointerProperties,
+ mCurrentCookedPointerData.pointerCoords,
+ mCurrentCookedPointerData.idToIndex,
+ currentIdBits, -1,
+ mOrientedXPrecision, mOrientedYPrecision, mDownTime);
+ }
} else {
// There may be pointers going up and pointers going down and pointers moving
// all at the same time.
@@ -3449,23 +3491,28 @@
// Update last coordinates of pointers that have moved so that we observe the new
// pointer positions at the same time as other pointers that have just gone up.
bool moveNeeded = updateMovedPointers(
- mCurrentTouchProperties, mCurrentTouchCoords, mCurrentTouch.idToIndex,
- mLastTouchProperties, mLastTouchCoords, mLastTouch.idToIndex,
+ mCurrentCookedPointerData.pointerProperties,
+ mCurrentCookedPointerData.pointerCoords,
+ mCurrentCookedPointerData.idToIndex,
+ mLastCookedPointerData.pointerProperties,
+ mLastCookedPointerData.pointerCoords,
+ mLastCookedPointerData.idToIndex,
moveIdBits);
- if (buttonState != mLastTouch.buttonState) {
+ if (buttonState != mLastButtonState) {
moveNeeded = true;
}
// Dispatch pointer up events.
while (!upIdBits.isEmpty()) {
- uint32_t upId = upIdBits.firstMarkedBit();
- upIdBits.clearBit(upId);
+ uint32_t upId = upIdBits.clearFirstMarkedBit();
dispatchMotion(when, policyFlags, mTouchSource,
AMOTION_EVENT_ACTION_POINTER_UP, 0, metaState, buttonState, 0,
- mLastTouchProperties, mLastTouchCoords,
- mLastTouch.idToIndex, dispatchedIdBits, upId,
- xPrecision, yPrecision, mDownTime);
+ mLastCookedPointerData.pointerProperties,
+ mLastCookedPointerData.pointerCoords,
+ mLastCookedPointerData.idToIndex,
+ dispatchedIdBits, upId,
+ mOrientedXPrecision, mOrientedYPrecision, mDownTime);
dispatchedIdBits.clearBit(upId);
}
@@ -3476,15 +3523,16 @@
LOG_ASSERT(moveIdBits.value == dispatchedIdBits.value);
dispatchMotion(when, policyFlags, mTouchSource,
AMOTION_EVENT_ACTION_MOVE, 0, metaState, buttonState, 0,
- mCurrentTouchProperties, mCurrentTouchCoords,
- mCurrentTouch.idToIndex, dispatchedIdBits, -1,
- xPrecision, yPrecision, mDownTime);
+ mCurrentCookedPointerData.pointerProperties,
+ mCurrentCookedPointerData.pointerCoords,
+ mCurrentCookedPointerData.idToIndex,
+ dispatchedIdBits, -1,
+ mOrientedXPrecision, mOrientedYPrecision, mDownTime);
}
// Dispatch pointer down events using the new pointer locations.
while (!downIdBits.isEmpty()) {
- uint32_t downId = downIdBits.firstMarkedBit();
- downIdBits.clearBit(downId);
+ uint32_t downId = downIdBits.clearFirstMarkedBit();
dispatchedIdBits.markBit(downId);
if (dispatchedIdBits.count() == 1) {
@@ -3494,49 +3542,88 @@
dispatchMotion(when, policyFlags, mTouchSource,
AMOTION_EVENT_ACTION_POINTER_DOWN, 0, metaState, buttonState, 0,
- mCurrentTouchProperties, mCurrentTouchCoords,
- mCurrentTouch.idToIndex, dispatchedIdBits, downId,
- xPrecision, yPrecision, mDownTime);
+ mCurrentCookedPointerData.pointerProperties,
+ mCurrentCookedPointerData.pointerCoords,
+ mCurrentCookedPointerData.idToIndex,
+ dispatchedIdBits, downId,
+ mOrientedXPrecision, mOrientedYPrecision, mDownTime);
}
}
-
- // Update state for next time.
- for (uint32_t i = 0; i < currentPointerCount; i++) {
- mLastTouchProperties[i].copyFrom(mCurrentTouchProperties[i]);
- mLastTouchCoords[i].copyFrom(mCurrentTouchCoords[i]);
- }
}
-void TouchInputMapper::prepareTouches(float* outXPrecision, float* outYPrecision) {
- uint32_t currentPointerCount = mCurrentTouch.pointerCount;
- uint32_t lastPointerCount = mLastTouch.pointerCount;
+void TouchInputMapper::dispatchHoverExit(nsecs_t when, uint32_t policyFlags) {
+ if (mSentHoverEnter &&
+ (mCurrentCookedPointerData.hoveringIdBits.isEmpty()
+ || !mCurrentCookedPointerData.touchingIdBits.isEmpty())) {
+ int32_t metaState = getContext()->getGlobalMetaState();
+ dispatchMotion(when, policyFlags, mTouchSource,
+ AMOTION_EVENT_ACTION_HOVER_EXIT, 0, metaState, mLastButtonState, 0,
+ mLastCookedPointerData.pointerProperties,
+ mLastCookedPointerData.pointerCoords,
+ mLastCookedPointerData.idToIndex,
+ mLastCookedPointerData.hoveringIdBits, -1,
+ mOrientedXPrecision, mOrientedYPrecision, mDownTime);
+ mSentHoverEnter = false;
+ }
+}
- AutoMutex _l(mLock);
+void TouchInputMapper::dispatchHoverEnterAndMove(nsecs_t when, uint32_t policyFlags) {
+ if (mCurrentCookedPointerData.touchingIdBits.isEmpty()
+ && !mCurrentCookedPointerData.hoveringIdBits.isEmpty()) {
+ int32_t metaState = getContext()->getGlobalMetaState();
+ if (!mSentHoverEnter) {
+ dispatchMotion(when, policyFlags, mTouchSource,
+ AMOTION_EVENT_ACTION_HOVER_ENTER, 0, metaState, mCurrentButtonState, 0,
+ mCurrentCookedPointerData.pointerProperties,
+ mCurrentCookedPointerData.pointerCoords,
+ mCurrentCookedPointerData.idToIndex,
+ mCurrentCookedPointerData.hoveringIdBits, -1,
+ mOrientedXPrecision, mOrientedYPrecision, mDownTime);
+ mSentHoverEnter = true;
+ }
- // Walk through the the active pointers and map touch screen coordinates (TouchData) into
- // display or surface coordinates (PointerCoords) and adjust for display orientation.
+ dispatchMotion(when, policyFlags, mTouchSource,
+ AMOTION_EVENT_ACTION_HOVER_MOVE, 0, metaState, mCurrentButtonState, 0,
+ mCurrentCookedPointerData.pointerProperties,
+ mCurrentCookedPointerData.pointerCoords,
+ mCurrentCookedPointerData.idToIndex,
+ mCurrentCookedPointerData.hoveringIdBits, -1,
+ mOrientedXPrecision, mOrientedYPrecision, mDownTime);
+ }
+}
+
+void TouchInputMapper::cookPointerData() {
+ uint32_t currentPointerCount = mCurrentRawPointerData.pointerCount;
+
+ mCurrentCookedPointerData.clear();
+ mCurrentCookedPointerData.pointerCount = currentPointerCount;
+ mCurrentCookedPointerData.hoveringIdBits = mCurrentRawPointerData.hoveringIdBits;
+ mCurrentCookedPointerData.touchingIdBits = mCurrentRawPointerData.touchingIdBits;
+
+ // Walk through the the active pointers and map device coordinates onto
+ // surface coordinates and adjust for display orientation.
for (uint32_t i = 0; i < currentPointerCount; i++) {
- const PointerData& in = mCurrentTouch.pointers[i];
+ const RawPointerData::Pointer& in = mCurrentRawPointerData.pointers[i];
// ToolMajor and ToolMinor
float toolMajor, toolMinor;
switch (mCalibration.toolSizeCalibration) {
case Calibration::TOOL_SIZE_CALIBRATION_GEOMETRIC:
- toolMajor = in.toolMajor * mLocked.geometricScale;
- if (mRawAxes.toolMinor.valid) {
- toolMinor = in.toolMinor * mLocked.geometricScale;
+ toolMajor = in.toolMajor * mGeometricScale;
+ if (mRawPointerAxes.toolMinor.valid) {
+ toolMinor = in.toolMinor * mGeometricScale;
} else {
toolMinor = toolMajor;
}
break;
case Calibration::TOOL_SIZE_CALIBRATION_LINEAR:
toolMajor = in.toolMajor != 0
- ? in.toolMajor * mLocked.toolSizeLinearScale + mLocked.toolSizeLinearBias
+ ? in.toolMajor * mToolSizeLinearScale + mToolSizeLinearBias
: 0;
- if (mRawAxes.toolMinor.valid) {
+ if (mRawPointerAxes.toolMinor.valid) {
toolMinor = in.toolMinor != 0
- ? in.toolMinor * mLocked.toolSizeLinearScale
- + mLocked.toolSizeLinearBias
+ ? in.toolMinor * mToolSizeLinearScale
+ + mToolSizeLinearBias
: 0;
} else {
toolMinor = toolMajor;
@@ -3545,8 +3632,8 @@
case Calibration::TOOL_SIZE_CALIBRATION_AREA:
if (in.toolMajor != 0) {
float diameter = sqrtf(in.toolMajor
- * mLocked.toolSizeAreaScale + mLocked.toolSizeAreaBias);
- toolMajor = diameter * mLocked.toolSizeLinearScale + mLocked.toolSizeLinearBias;
+ * mToolSizeAreaScale + mToolSizeAreaBias);
+ toolMajor = diameter * mToolSizeLinearScale + mToolSizeLinearBias;
} else {
toolMajor = 0;
}
@@ -3559,8 +3646,9 @@
}
if (mCalibration.haveToolSizeIsSummed && mCalibration.toolSizeIsSummed) {
- toolMajor /= currentPointerCount;
- toolMinor /= currentPointerCount;
+ uint32_t touchingCount = mCurrentRawPointerData.touchingIdBits.count();
+ toolMajor /= touchingCount;
+ toolMinor /= touchingCount;
}
// Pressure
@@ -3580,10 +3668,10 @@
switch (mCalibration.pressureCalibration) {
case Calibration::PRESSURE_CALIBRATION_PHYSICAL:
case Calibration::PRESSURE_CALIBRATION_AMPLITUDE:
- pressure = rawPressure * mLocked.pressureScale;
+ pressure = rawPressure * mPressureScale;
break;
default:
- pressure = 1;
+ pressure = in.isHovering ? 0 : 1;
break;
}
@@ -3591,9 +3679,9 @@
float touchMajor, touchMinor;
switch (mCalibration.touchSizeCalibration) {
case Calibration::TOUCH_SIZE_CALIBRATION_GEOMETRIC:
- touchMajor = in.touchMajor * mLocked.geometricScale;
- if (mRawAxes.touchMinor.valid) {
- touchMinor = in.touchMinor * mLocked.geometricScale;
+ touchMajor = in.touchMajor * mGeometricScale;
+ if (mRawPointerAxes.touchMinor.valid) {
+ touchMinor = in.touchMinor * mGeometricScale;
} else {
touchMinor = touchMajor;
}
@@ -3619,10 +3707,10 @@
float size;
switch (mCalibration.sizeCalibration) {
case Calibration::SIZE_CALIBRATION_NORMALIZED: {
- float rawSize = mRawAxes.toolMinor.valid
+ float rawSize = mRawPointerAxes.toolMinor.valid
? avg(in.toolMajor, in.toolMinor)
: in.toolMajor;
- size = rawSize * mLocked.sizeScale;
+ size = rawSize * mSizeScale;
break;
}
default:
@@ -3634,7 +3722,7 @@
float orientation;
switch (mCalibration.orientationCalibration) {
case Calibration::ORIENTATION_CALIBRATION_INTERPOLATED:
- orientation = in.orientation * mLocked.orientationScale;
+ orientation = in.orientation * mOrientationScale;
break;
case Calibration::ORIENTATION_CALIBRATION_VECTOR: {
int32_t c1 = signExtendNybble((in.orientation & 0xf0) >> 4);
@@ -3659,7 +3747,7 @@
float distance;
switch (mCalibration.distanceCalibration) {
case Calibration::DISTANCE_CALIBRATION_SCALED:
- distance = in.distance * mLocked.distanceScale;
+ distance = in.distance * mDistanceScale;
break;
default:
distance = 0;
@@ -3668,35 +3756,35 @@
// X and Y
// Adjust coords for surface orientation.
float x, y;
- switch (mLocked.surfaceOrientation) {
+ switch (mSurfaceOrientation) {
case DISPLAY_ORIENTATION_90:
- x = float(in.y - mRawAxes.y.minValue) * mLocked.yScale;
- y = float(mRawAxes.x.maxValue - in.x) * mLocked.xScale;
+ x = float(in.y - mRawPointerAxes.y.minValue) * mYScale;
+ y = float(mRawPointerAxes.x.maxValue - in.x) * mXScale;
orientation -= M_PI_2;
if (orientation < - M_PI_2) {
orientation += M_PI;
}
break;
case DISPLAY_ORIENTATION_180:
- x = float(mRawAxes.x.maxValue - in.x) * mLocked.xScale;
- y = float(mRawAxes.y.maxValue - in.y) * mLocked.yScale;
+ x = float(mRawPointerAxes.x.maxValue - in.x) * mXScale;
+ y = float(mRawPointerAxes.y.maxValue - in.y) * mYScale;
break;
case DISPLAY_ORIENTATION_270:
- x = float(mRawAxes.y.maxValue - in.y) * mLocked.yScale;
- y = float(in.x - mRawAxes.x.minValue) * mLocked.xScale;
+ x = float(mRawPointerAxes.y.maxValue - in.y) * mYScale;
+ y = float(in.x - mRawPointerAxes.x.minValue) * mXScale;
orientation += M_PI_2;
if (orientation > M_PI_2) {
orientation -= M_PI;
}
break;
default:
- x = float(in.x - mRawAxes.x.minValue) * mLocked.xScale;
- y = float(in.y - mRawAxes.y.minValue) * mLocked.yScale;
+ x = float(in.x - mRawPointerAxes.x.minValue) * mXScale;
+ y = float(in.y - mRawPointerAxes.y.minValue) * mYScale;
break;
}
// Write output coords.
- PointerCoords& out = mCurrentTouchCoords[i];
+ PointerCoords& out = mCurrentCookedPointerData.pointerCoords[i];
out.clear();
out.setAxisValue(AMOTION_EVENT_AXIS_X, x);
out.setAxisValue(AMOTION_EVENT_AXIS_Y, y);
@@ -3707,19 +3795,18 @@
out.setAxisValue(AMOTION_EVENT_AXIS_TOOL_MAJOR, toolMajor);
out.setAxisValue(AMOTION_EVENT_AXIS_TOOL_MINOR, toolMinor);
out.setAxisValue(AMOTION_EVENT_AXIS_ORIENTATION, orientation);
- if (distance != 0) {
- out.setAxisValue(AMOTION_EVENT_AXIS_DISTANCE, distance);
- }
+ out.setAxisValue(AMOTION_EVENT_AXIS_DISTANCE, distance);
// Write output properties.
- PointerProperties& properties = mCurrentTouchProperties[i];
+ PointerProperties& properties = mCurrentCookedPointerData.pointerProperties[i];
+ uint32_t id = in.id;
properties.clear();
- properties.id = mCurrentTouch.pointers[i].id;
- properties.toolType = mCurrentTouch.pointers[i].toolType;
- }
+ properties.id = id;
+ properties.toolType = in.toolType;
- *outXPrecision = mLocked.orientedXPrecision;
- *outYPrecision = mLocked.orientedYPrecision;
+ // Write id index.
+ mCurrentCookedPointerData.idToIndex[id] = i;
+ }
}
void TouchInputMapper::dispatchPointerGestures(nsecs_t when, uint32_t policyFlags,
@@ -3782,7 +3869,7 @@
// Send events!
int32_t metaState = getContext()->getGlobalMetaState();
- int32_t buttonState = mCurrentTouch.buttonState;
+ int32_t buttonState = mCurrentButtonState;
// Update last coordinates of pointers that have moved so that we observe the new
// pointer positions at the same time as other pointers that have just gone up.
@@ -3803,7 +3890,7 @@
mPointerGesture.lastGestureProperties,
mPointerGesture.lastGestureCoords, mPointerGesture.lastGestureIdToIndex,
movedGestureIdBits);
- if (buttonState != mLastTouch.buttonState) {
+ if (buttonState != mLastButtonState) {
moveNeeded = true;
}
}
@@ -3830,8 +3917,7 @@
& ~mPointerGesture.currentGestureIdBits.value;
}
while (!upGestureIdBits.isEmpty()) {
- uint32_t id = upGestureIdBits.firstMarkedBit();
- upGestureIdBits.clearBit(id);
+ uint32_t id = upGestureIdBits.clearFirstMarkedBit();
dispatchMotion(when, policyFlags, mPointerSource,
AMOTION_EVENT_ACTION_POINTER_UP, 0,
@@ -3861,8 +3947,7 @@
BitSet32 downGestureIdBits(mPointerGesture.currentGestureIdBits.value
& ~dispatchedGestureIdBits.value);
while (!downGestureIdBits.isEmpty()) {
- uint32_t id = downGestureIdBits.firstMarkedBit();
- downGestureIdBits.clearBit(id);
+ uint32_t id = downGestureIdBits.clearFirstMarkedBit();
dispatchedGestureIdBits.markBit(id);
if (dispatchedGestureIdBits.count() == 1) {
@@ -3906,10 +3991,11 @@
pointerCoords.setAxisValue(AMOTION_EVENT_AXIS_X, x);
pointerCoords.setAxisValue(AMOTION_EVENT_AXIS_Y, y);
- getDispatcher()->notifyMotion(when, getDeviceId(), mPointerSource, policyFlags,
+ NotifyMotionArgs args(when, getDeviceId(), mPointerSource, policyFlags,
AMOTION_EVENT_ACTION_HOVER_MOVE, 0,
metaState, buttonState, AMOTION_EVENT_EDGE_FLAG_NONE,
1, &pointerProperties, &pointerCoords, 0, 0, mPointerGesture.downTime);
+ getListener()->notifyMotion(&args);
}
// Update state.
@@ -3919,8 +4005,7 @@
} else {
mPointerGesture.lastGestureIdBits = mPointerGesture.currentGestureIdBits;
for (BitSet32 idBits(mPointerGesture.currentGestureIdBits); !idBits.isEmpty(); ) {
- uint32_t id = idBits.firstMarkedBit();
- idBits.clearBit(id);
+ uint32_t id = idBits.clearFirstMarkedBit();
uint32_t index = mPointerGesture.currentGestureIdToIndex[id];
mPointerGesture.lastGestureProperties[index].copyFrom(
mPointerGesture.currentGestureProperties[index]);
@@ -3936,8 +4021,6 @@
*outCancelPreviousGesture = false;
*outFinishPreviousGesture = false;
- AutoMutex _l(mLock);
-
// Handle TAP timeout.
if (isTimeout) {
#if DEBUG_GESTURES
@@ -3973,16 +4056,14 @@
{
VelocityTracker::Position positions[MAX_POINTERS];
uint32_t count = 0;
- for (BitSet32 idBits(mCurrentTouch.idBits); !idBits.isEmpty(); count++) {
- uint32_t id = idBits.firstMarkedBit();
- idBits.clearBit(id);
- uint32_t index = mCurrentTouch.idToIndex[id];
- positions[count].x = mCurrentTouch.pointers[index].x
- * mLocked.pointerGestureXMovementScale;
- positions[count].y = mCurrentTouch.pointers[index].y
- * mLocked.pointerGestureYMovementScale;
+ for (BitSet32 idBits(mCurrentRawPointerData.touchingIdBits); !idBits.isEmpty(); count++) {
+ uint32_t id = idBits.clearFirstMarkedBit();
+ const RawPointerData::Pointer& pointer = mCurrentRawPointerData.pointerForId(id);
+ positions[count].x = pointer.x * mPointerGestureXMovementScale;
+ positions[count].y = pointer.y * mPointerGestureYMovementScale;
}
- mPointerGesture.velocityTracker.addMovement(when, mCurrentTouch.idBits, positions);
+ mPointerGesture.velocityTracker.addMovement(when,
+ mCurrentRawPointerData.touchingIdBits, positions);
}
// Pick a new active touch id if needed.
@@ -3994,20 +4075,25 @@
int32_t lastActiveTouchId = mPointerGesture.activeTouchId;
int32_t activeTouchId = lastActiveTouchId;
if (activeTouchId < 0) {
- if (!mCurrentTouch.idBits.isEmpty()) {
+ if (!mCurrentRawPointerData.touchingIdBits.isEmpty()) {
activeTouchChanged = true;
- activeTouchId = mPointerGesture.activeTouchId = mCurrentTouch.idBits.firstMarkedBit();
+ activeTouchId = mPointerGesture.activeTouchId =
+ mCurrentRawPointerData.touchingIdBits.firstMarkedBit();
mPointerGesture.firstTouchTime = when;
}
- } else if (!mCurrentTouch.idBits.hasBit(activeTouchId)) {
+ } else if (!mCurrentRawPointerData.touchingIdBits.hasBit(activeTouchId)) {
activeTouchChanged = true;
- if (!mCurrentTouch.idBits.isEmpty()) {
- activeTouchId = mPointerGesture.activeTouchId = mCurrentTouch.idBits.firstMarkedBit();
+ if (!mCurrentRawPointerData.touchingIdBits.isEmpty()) {
+ activeTouchId = mPointerGesture.activeTouchId =
+ mCurrentRawPointerData.touchingIdBits.firstMarkedBit();
} else {
activeTouchId = mPointerGesture.activeTouchId = -1;
}
}
+ uint32_t currentTouchingPointerCount = mCurrentRawPointerData.touchingIdBits.count();
+ uint32_t lastTouchingPointerCount = mLastRawPointerData.touchingIdBits.count();
+
// Determine whether we are in quiet time.
bool isQuietTime = false;
if (activeTouchId < 0) {
@@ -4018,14 +4104,14 @@
if ((mPointerGesture.lastGestureMode == PointerGesture::PRESS
|| mPointerGesture.lastGestureMode == PointerGesture::SWIPE
|| mPointerGesture.lastGestureMode == PointerGesture::FREEFORM)
- && mCurrentTouch.pointerCount < 2) {
+ && currentTouchingPointerCount < 2) {
// Enter quiet time when exiting swipe or freeform state.
// This is to prevent accidentally entering the hover state and flinging the
// pointer when finishing a swipe and there is still one pointer left onscreen.
isQuietTime = true;
} else if (mPointerGesture.lastGestureMode == PointerGesture::BUTTON_CLICK_OR_DRAG
- && mCurrentTouch.pointerCount >= 2
- && !isPointerDown(mCurrentTouch.buttonState)) {
+ && currentTouchingPointerCount >= 2
+ && !isPointerDown(mCurrentButtonState)) {
// Enter quiet time when releasing the button and there are still two or more
// fingers down. This may indicate that one finger was used to press the button
// but it has not gone up yet.
@@ -4053,7 +4139,7 @@
mPointerGesture.currentGestureIdBits.clear();
mPointerGesture.pointerVelocityControl.reset();
- } else if (isPointerDown(mCurrentTouch.buttonState)) {
+ } else if (isPointerDown(mCurrentButtonState)) {
// Case 2: Button is pressed. (BUTTON_CLICK_OR_DRAG)
// The pointer follows the active touch point.
// Emit DOWN, MOVE, UP events at the pointer location.
@@ -4069,7 +4155,7 @@
// being dragged.
#if DEBUG_GESTURES
LOGD("Gestures: BUTTON_CLICK_OR_DRAG activeTouchId=%d, "
- "currentTouchPointerCount=%d", activeTouchId, mCurrentTouch.pointerCount);
+ "currentTouchingPointerCount=%d", activeTouchId, currentTouchingPointerCount);
#endif
// Reset state when just starting.
if (mPointerGesture.lastGestureMode != PointerGesture::BUTTON_CLICK_OR_DRAG) {
@@ -4079,11 +4165,11 @@
// Switch pointers if needed.
// Find the fastest pointer and follow it.
- if (activeTouchId >= 0 && mCurrentTouch.pointerCount > 1) {
+ if (activeTouchId >= 0 && currentTouchingPointerCount > 1) {
int32_t bestId = -1;
float bestSpeed = mConfig.pointerGestureDragMinSwitchSpeed;
- for (uint32_t i = 0; i < mCurrentTouch.pointerCount; i++) {
- uint32_t id = mCurrentTouch.pointers[i].id;
+ for (BitSet32 idBits(mCurrentRawPointerData.touchingIdBits); !idBits.isEmpty(); ) {
+ uint32_t id = idBits.clearFirstMarkedBit();
float vx, vy;
if (mPointerGesture.velocityTracker.getVelocity(id, &vx, &vy)) {
float speed = hypotf(vx, vy);
@@ -4103,17 +4189,15 @@
}
}
- if (activeTouchId >= 0 && mLastTouch.idBits.hasBit(activeTouchId)) {
- const PointerData& currentPointer =
- mCurrentTouch.pointers[mCurrentTouch.idToIndex[activeTouchId]];
- const PointerData& lastPointer =
- mLastTouch.pointers[mLastTouch.idToIndex[activeTouchId]];
- float deltaX = (currentPointer.x - lastPointer.x)
- * mLocked.pointerGestureXMovementScale;
- float deltaY = (currentPointer.y - lastPointer.y)
- * mLocked.pointerGestureYMovementScale;
+ if (activeTouchId >= 0 && mLastRawPointerData.touchingIdBits.hasBit(activeTouchId)) {
+ const RawPointerData::Pointer& currentPointer =
+ mCurrentRawPointerData.pointerForId(activeTouchId);
+ const RawPointerData::Pointer& lastPointer =
+ mLastRawPointerData.pointerForId(activeTouchId);
+ float deltaX = (currentPointer.x - lastPointer.x) * mPointerGestureXMovementScale;
+ float deltaY = (currentPointer.y - lastPointer.y) * mPointerGestureYMovementScale;
- rotateDelta(mLocked.surfaceOrientation, &deltaX, &deltaY);
+ rotateDelta(mSurfaceOrientation, &deltaX, &deltaY);
mPointerGesture.pointerVelocityControl.move(when, &deltaX, &deltaY);
// Move the pointer using a relative motion.
@@ -4138,7 +4222,7 @@
mPointerGesture.currentGestureCoords[0].setAxisValue(AMOTION_EVENT_AXIS_X, x);
mPointerGesture.currentGestureCoords[0].setAxisValue(AMOTION_EVENT_AXIS_Y, y);
mPointerGesture.currentGestureCoords[0].setAxisValue(AMOTION_EVENT_AXIS_PRESSURE, 1.0f);
- } else if (mCurrentTouch.pointerCount == 0) {
+ } else if (currentTouchingPointerCount == 0) {
// Case 3. No fingers down and button is not pressed. (NEUTRAL)
if (mPointerGesture.lastGestureMode != PointerGesture::NEUTRAL) {
*outFinishPreviousGesture = true;
@@ -4149,7 +4233,7 @@
bool tapped = false;
if ((mPointerGesture.lastGestureMode == PointerGesture::HOVER
|| mPointerGesture.lastGestureMode == PointerGesture::TAP_DRAG)
- && mLastTouch.pointerCount == 1) {
+ && lastTouchingPointerCount == 1) {
if (when <= mPointerGesture.tapDownTime + mConfig.pointerGestureTapInterval) {
float x, y;
mPointerController->getPosition(&x, &y);
@@ -4209,7 +4293,7 @@
mPointerGesture.currentGestureMode = PointerGesture::NEUTRAL;
mPointerGesture.currentGestureIdBits.clear();
}
- } else if (mCurrentTouch.pointerCount == 1) {
+ } else if (currentTouchingPointerCount == 1) {
// Case 4. Exactly one finger down, button is not pressed. (HOVER or TAP_DRAG)
// The pointer follows the active touch point.
// When in HOVER, emit HOVER_MOVE events at the pointer location.
@@ -4241,17 +4325,17 @@
mPointerGesture.currentGestureMode = PointerGesture::TAP_DRAG;
}
- if (mLastTouch.idBits.hasBit(activeTouchId)) {
- const PointerData& currentPointer =
- mCurrentTouch.pointers[mCurrentTouch.idToIndex[activeTouchId]];
- const PointerData& lastPointer =
- mLastTouch.pointers[mLastTouch.idToIndex[activeTouchId]];
+ if (mLastRawPointerData.touchingIdBits.hasBit(activeTouchId)) {
+ const RawPointerData::Pointer& currentPointer =
+ mCurrentRawPointerData.pointerForId(activeTouchId);
+ const RawPointerData::Pointer& lastPointer =
+ mLastRawPointerData.pointerForId(activeTouchId);
float deltaX = (currentPointer.x - lastPointer.x)
- * mLocked.pointerGestureXMovementScale;
+ * mPointerGestureXMovementScale;
float deltaY = (currentPointer.y - lastPointer.y)
- * mLocked.pointerGestureYMovementScale;
+ * mPointerGestureYMovementScale;
- rotateDelta(mLocked.surfaceOrientation, &deltaX, &deltaY);
+ rotateDelta(mSurfaceOrientation, &deltaX, &deltaY);
mPointerGesture.pointerVelocityControl.move(when, &deltaX, &deltaY);
// Move the pointer using a relative motion.
@@ -4294,7 +4378,7 @@
mPointerGesture.currentGestureCoords[0].setAxisValue(AMOTION_EVENT_AXIS_PRESSURE,
down ? 1.0f : 0.0f);
- if (mLastTouch.pointerCount == 0 && mCurrentTouch.pointerCount != 0) {
+ if (lastTouchingPointerCount == 0 && currentTouchingPointerCount != 0) {
mPointerGesture.resetTap();
mPointerGesture.tapDownTime = when;
mPointerGesture.tapX = x;
@@ -4322,7 +4406,7 @@
&& mPointerGesture.lastGestureMode != PointerGesture::SWIPE
&& mPointerGesture.lastGestureMode != PointerGesture::FREEFORM) {
*outFinishPreviousGesture = true;
- } else if (!settled && mCurrentTouch.pointerCount > mLastTouch.pointerCount) {
+ } else if (!settled && currentTouchingPointerCount > lastTouchingPointerCount) {
// Additional pointers have gone down but not yet settled.
// Reset the gesture.
#if DEBUG_GESTURES
@@ -4350,33 +4434,31 @@
+ mConfig.pointerGestureMultitouchSettleInterval - when)
* 0.000001f);
#endif
- mCurrentTouch.getCentroid(&mPointerGesture.referenceTouchX,
+ mCurrentRawPointerData.getCentroidOfTouchingPointers(
+ &mPointerGesture.referenceTouchX,
&mPointerGesture.referenceTouchY);
mPointerController->getPosition(&mPointerGesture.referenceGestureX,
&mPointerGesture.referenceGestureY);
}
// Clear the reference deltas for fingers not yet included in the reference calculation.
- for (BitSet32 idBits(mCurrentTouch.idBits.value & ~mPointerGesture.referenceIdBits.value);
- !idBits.isEmpty(); ) {
- uint32_t id = idBits.firstMarkedBit();
- idBits.clearBit(id);
-
+ for (BitSet32 idBits(mCurrentRawPointerData.touchingIdBits.value
+ & ~mPointerGesture.referenceIdBits.value); !idBits.isEmpty(); ) {
+ uint32_t id = idBits.clearFirstMarkedBit();
mPointerGesture.referenceDeltas[id].dx = 0;
mPointerGesture.referenceDeltas[id].dy = 0;
}
- mPointerGesture.referenceIdBits = mCurrentTouch.idBits;
+ mPointerGesture.referenceIdBits = mCurrentRawPointerData.touchingIdBits;
// Add delta for all fingers and calculate a common movement delta.
float commonDeltaX = 0, commonDeltaY = 0;
- BitSet32 commonIdBits(mLastTouch.idBits.value & mCurrentTouch.idBits.value);
+ BitSet32 commonIdBits(mLastRawPointerData.touchingIdBits.value
+ & mCurrentRawPointerData.touchingIdBits.value);
for (BitSet32 idBits(commonIdBits); !idBits.isEmpty(); ) {
bool first = (idBits == commonIdBits);
- uint32_t id = idBits.firstMarkedBit();
- idBits.clearBit(id);
-
- const PointerData& cpd = mCurrentTouch.pointers[mCurrentTouch.idToIndex[id]];
- const PointerData& lpd = mLastTouch.pointers[mLastTouch.idToIndex[id]];
+ uint32_t id = idBits.clearFirstMarkedBit();
+ const RawPointerData::Pointer& cpd = mCurrentRawPointerData.pointerForId(id);
+ const RawPointerData::Pointer& lpd = mLastRawPointerData.pointerForId(id);
PointerGesture::Delta& delta = mPointerGesture.referenceDeltas[id];
delta.dx += cpd.x - lpd.x;
delta.dy += cpd.y - lpd.y;
@@ -4395,12 +4477,10 @@
float dist[MAX_POINTER_ID + 1];
int32_t distOverThreshold = 0;
for (BitSet32 idBits(mPointerGesture.referenceIdBits); !idBits.isEmpty(); ) {
- uint32_t id = idBits.firstMarkedBit();
- idBits.clearBit(id);
-
+ uint32_t id = idBits.clearFirstMarkedBit();
PointerGesture::Delta& delta = mPointerGesture.referenceDeltas[id];
- dist[id] = hypotf(delta.dx * mLocked.pointerGestureXZoomScale,
- delta.dy * mLocked.pointerGestureYZoomScale);
+ dist[id] = hypotf(delta.dx * mPointerGestureXZoomScale,
+ delta.dy * mPointerGestureYZoomScale);
if (dist[id] > mConfig.pointerGestureMultitouchMinDistance) {
distOverThreshold += 1;
}
@@ -4409,71 +4489,74 @@
// Only transition when at least two pointers have moved further than
// the minimum distance threshold.
if (distOverThreshold >= 2) {
- float d;
- if (mCurrentTouch.pointerCount > 2) {
+ if (currentTouchingPointerCount > 2) {
// There are more than two pointers, switch to FREEFORM.
#if DEBUG_GESTURES
LOGD("Gestures: PRESS transitioned to FREEFORM, number of pointers %d > 2",
- mCurrentTouch.pointerCount);
-#endif
- *outCancelPreviousGesture = true;
- mPointerGesture.currentGestureMode = PointerGesture::FREEFORM;
- } else if (((d = distance(
- mCurrentTouch.pointers[0].x, mCurrentTouch.pointers[0].y,
- mCurrentTouch.pointers[1].x, mCurrentTouch.pointers[1].y))
- > mLocked.pointerGestureMaxSwipeWidth)) {
- // There are two pointers but they are too far apart for a SWIPE,
- // switch to FREEFORM.
-#if DEBUG_GESTURES
- LOGD("Gestures: PRESS transitioned to FREEFORM, distance %0.3f > %0.3f",
- d, mLocked.pointerGestureMaxSwipeWidth);
+ currentTouchingPointerCount);
#endif
*outCancelPreviousGesture = true;
mPointerGesture.currentGestureMode = PointerGesture::FREEFORM;
} else {
- // There are two pointers. Wait for both pointers to start moving
- // before deciding whether this is a SWIPE or FREEFORM gesture.
- uint32_t id1 = mCurrentTouch.pointers[0].id;
- uint32_t id2 = mCurrentTouch.pointers[1].id;
- float dist1 = dist[id1];
- float dist2 = dist[id2];
- if (dist1 >= mConfig.pointerGestureMultitouchMinDistance
- && dist2 >= mConfig.pointerGestureMultitouchMinDistance) {
- // Calculate the dot product of the displacement vectors.
- // When the vectors are oriented in approximately the same direction,
- // the angle betweeen them is near zero and the cosine of the angle
- // approches 1.0. Recall that dot(v1, v2) = cos(angle) * mag(v1) * mag(v2).
- PointerGesture::Delta& delta1 = mPointerGesture.referenceDeltas[id1];
- PointerGesture::Delta& delta2 = mPointerGesture.referenceDeltas[id2];
- float dx1 = delta1.dx * mLocked.pointerGestureXZoomScale;
- float dy1 = delta1.dy * mLocked.pointerGestureYZoomScale;
- float dx2 = delta2.dx * mLocked.pointerGestureXZoomScale;
- float dy2 = delta2.dy * mLocked.pointerGestureYZoomScale;
- float dot = dx1 * dx2 + dy1 * dy2;
- float cosine = dot / (dist1 * dist2); // denominator always > 0
- if (cosine >= mConfig.pointerGestureSwipeTransitionAngleCosine) {
- // Pointers are moving in the same direction. Switch to SWIPE.
+ // There are exactly two pointers.
+ BitSet32 idBits(mCurrentRawPointerData.touchingIdBits);
+ uint32_t id1 = idBits.clearFirstMarkedBit();
+ uint32_t id2 = idBits.firstMarkedBit();
+ const RawPointerData::Pointer& p1 = mCurrentRawPointerData.pointerForId(id1);
+ const RawPointerData::Pointer& p2 = mCurrentRawPointerData.pointerForId(id2);
+ float mutualDistance = distance(p1.x, p1.y, p2.x, p2.y);
+ if (mutualDistance > mPointerGestureMaxSwipeWidth) {
+ // There are two pointers but they are too far apart for a SWIPE,
+ // switch to FREEFORM.
#if DEBUG_GESTURES
- LOGD("Gestures: PRESS transitioned to SWIPE, "
- "dist1 %0.3f >= %0.3f, dist2 %0.3f >= %0.3f, "
- "cosine %0.3f >= %0.3f",
- dist1, mConfig.pointerGestureMultitouchMinDistance,
- dist2, mConfig.pointerGestureMultitouchMinDistance,
- cosine, mConfig.pointerGestureSwipeTransitionAngleCosine);
+ LOGD("Gestures: PRESS transitioned to FREEFORM, distance %0.3f > %0.3f",
+ mutualDistance, mPointerGestureMaxSwipeWidth);
#endif
- mPointerGesture.currentGestureMode = PointerGesture::SWIPE;
- } else {
- // Pointers are moving in different directions. Switch to FREEFORM.
+ *outCancelPreviousGesture = true;
+ mPointerGesture.currentGestureMode = PointerGesture::FREEFORM;
+ } else {
+ // There are two pointers. Wait for both pointers to start moving
+ // before deciding whether this is a SWIPE or FREEFORM gesture.
+ float dist1 = dist[id1];
+ float dist2 = dist[id2];
+ if (dist1 >= mConfig.pointerGestureMultitouchMinDistance
+ && dist2 >= mConfig.pointerGestureMultitouchMinDistance) {
+ // Calculate the dot product of the displacement vectors.
+ // When the vectors are oriented in approximately the same direction,
+ // the angle betweeen them is near zero and the cosine of the angle
+ // approches 1.0. Recall that dot(v1, v2) = cos(angle) * mag(v1) * mag(v2).
+ PointerGesture::Delta& delta1 = mPointerGesture.referenceDeltas[id1];
+ PointerGesture::Delta& delta2 = mPointerGesture.referenceDeltas[id2];
+ float dx1 = delta1.dx * mPointerGestureXZoomScale;
+ float dy1 = delta1.dy * mPointerGestureYZoomScale;
+ float dx2 = delta2.dx * mPointerGestureXZoomScale;
+ float dy2 = delta2.dy * mPointerGestureYZoomScale;
+ float dot = dx1 * dx2 + dy1 * dy2;
+ float cosine = dot / (dist1 * dist2); // denominator always > 0
+ if (cosine >= mConfig.pointerGestureSwipeTransitionAngleCosine) {
+ // Pointers are moving in the same direction. Switch to SWIPE.
#if DEBUG_GESTURES
- LOGD("Gestures: PRESS transitioned to FREEFORM, "
- "dist1 %0.3f >= %0.3f, dist2 %0.3f >= %0.3f, "
- "cosine %0.3f < %0.3f",
- dist1, mConfig.pointerGestureMultitouchMinDistance,
- dist2, mConfig.pointerGestureMultitouchMinDistance,
- cosine, mConfig.pointerGestureSwipeTransitionAngleCosine);
+ LOGD("Gestures: PRESS transitioned to SWIPE, "
+ "dist1 %0.3f >= %0.3f, dist2 %0.3f >= %0.3f, "
+ "cosine %0.3f >= %0.3f",
+ dist1, mConfig.pointerGestureMultitouchMinDistance,
+ dist2, mConfig.pointerGestureMultitouchMinDistance,
+ cosine, mConfig.pointerGestureSwipeTransitionAngleCosine);
#endif
- *outCancelPreviousGesture = true;
- mPointerGesture.currentGestureMode = PointerGesture::FREEFORM;
+ mPointerGesture.currentGestureMode = PointerGesture::SWIPE;
+ } else {
+ // Pointers are moving in different directions. Switch to FREEFORM.
+#if DEBUG_GESTURES
+ LOGD("Gestures: PRESS transitioned to FREEFORM, "
+ "dist1 %0.3f >= %0.3f, dist2 %0.3f >= %0.3f, "
+ "cosine %0.3f < %0.3f",
+ dist1, mConfig.pointerGestureMultitouchMinDistance,
+ dist2, mConfig.pointerGestureMultitouchMinDistance,
+ cosine, mConfig.pointerGestureSwipeTransitionAngleCosine);
+#endif
+ *outCancelPreviousGesture = true;
+ mPointerGesture.currentGestureMode = PointerGesture::FREEFORM;
+ }
}
}
}
@@ -4481,10 +4564,10 @@
} else if (mPointerGesture.currentGestureMode == PointerGesture::SWIPE) {
// Switch from SWIPE to FREEFORM if additional pointers go down.
// Cancel previous gesture.
- if (mCurrentTouch.pointerCount > 2) {
+ if (currentTouchingPointerCount > 2) {
#if DEBUG_GESTURES
LOGD("Gestures: SWIPE transitioned to FREEFORM, number of pointers %d > 2",
- mCurrentTouch.pointerCount);
+ currentTouchingPointerCount);
#endif
*outCancelPreviousGesture = true;
mPointerGesture.currentGestureMode = PointerGesture::FREEFORM;
@@ -4496,9 +4579,7 @@
if (mPointerGesture.currentGestureMode != PointerGesture::PRESS
&& (commonDeltaX || commonDeltaY)) {
for (BitSet32 idBits(mPointerGesture.referenceIdBits); !idBits.isEmpty(); ) {
- uint32_t id = idBits.firstMarkedBit();
- idBits.clearBit(id);
-
+ uint32_t id = idBits.clearFirstMarkedBit();
PointerGesture::Delta& delta = mPointerGesture.referenceDeltas[id];
delta.dx = 0;
delta.dy = 0;
@@ -4507,10 +4588,10 @@
mPointerGesture.referenceTouchX += commonDeltaX;
mPointerGesture.referenceTouchY += commonDeltaY;
- commonDeltaX *= mLocked.pointerGestureXMovementScale;
- commonDeltaY *= mLocked.pointerGestureYMovementScale;
+ commonDeltaX *= mPointerGestureXMovementScale;
+ commonDeltaY *= mPointerGestureYMovementScale;
- rotateDelta(mLocked.surfaceOrientation, &commonDeltaX, &commonDeltaY);
+ rotateDelta(mSurfaceOrientation, &commonDeltaX, &commonDeltaY);
mPointerGesture.pointerVelocityControl.move(when, &commonDeltaX, &commonDeltaY);
mPointerGesture.referenceGestureX += commonDeltaX;
@@ -4524,7 +4605,7 @@
#if DEBUG_GESTURES
LOGD("Gestures: PRESS or SWIPE activeTouchId=%d,"
"activeGestureId=%d, currentTouchPointerCount=%d",
- activeTouchId, mPointerGesture.activeGestureId, mCurrentTouch.pointerCount);
+ activeTouchId, mPointerGesture.activeGestureId, currentTouchingPointerCount);
#endif
LOG_ASSERT(mPointerGesture.activeGestureId >= 0);
@@ -4546,7 +4627,7 @@
#if DEBUG_GESTURES
LOGD("Gestures: FREEFORM activeTouchId=%d,"
"activeGestureId=%d, currentTouchPointerCount=%d",
- activeTouchId, mPointerGesture.activeGestureId, mCurrentTouch.pointerCount);
+ activeTouchId, mPointerGesture.activeGestureId, currentTouchingPointerCount);
#endif
LOG_ASSERT(mPointerGesture.activeGestureId >= 0);
@@ -4568,15 +4649,16 @@
} else {
// Otherwise, assume we mapped all touches from the previous frame.
// Reuse all mappings that are still applicable.
- mappedTouchIdBits.value = mLastTouch.idBits.value & mCurrentTouch.idBits.value;
+ mappedTouchIdBits.value = mLastRawPointerData.touchingIdBits.value
+ & mCurrentRawPointerData.touchingIdBits.value;
usedGestureIdBits = mPointerGesture.lastGestureIdBits;
// Check whether we need to choose a new active gesture id because the
// current went went up.
- for (BitSet32 upTouchIdBits(mLastTouch.idBits.value & ~mCurrentTouch.idBits.value);
+ for (BitSet32 upTouchIdBits(mLastRawPointerData.touchingIdBits.value
+ & ~mCurrentRawPointerData.touchingIdBits.value);
!upTouchIdBits.isEmpty(); ) {
- uint32_t upTouchId = upTouchIdBits.firstMarkedBit();
- upTouchIdBits.clearBit(upTouchId);
+ uint32_t upTouchId = upTouchIdBits.clearFirstMarkedBit();
uint32_t upGestureId = mPointerGesture.freeformTouchToGestureIdMap[upTouchId];
if (upGestureId == uint32_t(mPointerGesture.activeGestureId)) {
mPointerGesture.activeGestureId = -1;
@@ -4593,12 +4675,12 @@
mPointerGesture.activeGestureId);
#endif
- for (uint32_t i = 0; i < mCurrentTouch.pointerCount; i++) {
- uint32_t touchId = mCurrentTouch.pointers[i].id;
+ BitSet32 idBits(mCurrentRawPointerData.touchingIdBits);
+ for (uint32_t i = 0; i < currentTouchingPointerCount; i++) {
+ uint32_t touchId = idBits.clearFirstMarkedBit();
uint32_t gestureId;
if (!mappedTouchIdBits.hasBit(touchId)) {
- gestureId = usedGestureIdBits.firstUnmarkedBit();
- usedGestureIdBits.markBit(gestureId);
+ gestureId = usedGestureIdBits.markFirstUnmarkedBit();
mPointerGesture.freeformTouchToGestureIdMap[touchId] = gestureId;
#if DEBUG_GESTURES
LOGD("Gestures: FREEFORM "
@@ -4616,11 +4698,13 @@
mPointerGesture.currentGestureIdBits.markBit(gestureId);
mPointerGesture.currentGestureIdToIndex[gestureId] = i;
- float deltaX = (mCurrentTouch.pointers[i].x - mPointerGesture.referenceTouchX)
- * mLocked.pointerGestureXZoomScale;
- float deltaY = (mCurrentTouch.pointers[i].y - mPointerGesture.referenceTouchY)
- * mLocked.pointerGestureYZoomScale;
- rotateDelta(mLocked.surfaceOrientation, &deltaX, &deltaY);
+ const RawPointerData::Pointer& pointer =
+ mCurrentRawPointerData.pointerForId(touchId);
+ float deltaX = (pointer.x - mPointerGesture.referenceTouchX)
+ * mPointerGestureXZoomScale;
+ float deltaY = (pointer.y - mPointerGesture.referenceTouchY)
+ * mPointerGestureYZoomScale;
+ rotateDelta(mSurfaceOrientation, &deltaX, &deltaY);
mPointerGesture.currentGestureProperties[i].clear();
mPointerGesture.currentGestureProperties[i].id = gestureId;
@@ -4646,7 +4730,7 @@
}
}
- mPointerController->setButtonState(mCurrentTouch.buttonState);
+ mPointerController->setButtonState(mCurrentButtonState);
#if DEBUG_GESTURES
LOGD("Gestures: finishPreviousGesture=%s, cancelPreviousGesture=%s, "
@@ -4656,8 +4740,7 @@
mPointerGesture.currentGestureMode, mPointerGesture.currentGestureIdBits.value,
mPointerGesture.lastGestureMode, mPointerGesture.lastGestureIdBits.value);
for (BitSet32 idBits = mPointerGesture.currentGestureIdBits; !idBits.isEmpty(); ) {
- uint32_t id = idBits.firstMarkedBit();
- idBits.clearBit(id);
+ uint32_t id = idBits.clearFirstMarkedBit();
uint32_t index = mPointerGesture.currentGestureIdToIndex[id];
const PointerProperties& properties = mPointerGesture.currentGestureProperties[index];
const PointerCoords& coords = mPointerGesture.currentGestureCoords[index];
@@ -4669,8 +4752,7 @@
coords.getAxisValue(AMOTION_EVENT_AXIS_PRESSURE));
}
for (BitSet32 idBits = mPointerGesture.lastGestureIdBits; !idBits.isEmpty(); ) {
- uint32_t id = idBits.firstMarkedBit();
- idBits.clearBit(id);
+ uint32_t id = idBits.clearFirstMarkedBit();
uint32_t index = mPointerGesture.lastGestureIdToIndex[id];
const PointerProperties& properties = mPointerGesture.lastGestureProperties[index];
const PointerCoords& coords = mPointerGesture.lastGestureCoords[index];
@@ -4694,8 +4776,7 @@
PointerProperties pointerProperties[MAX_POINTERS];
uint32_t pointerCount = 0;
while (!idBits.isEmpty()) {
- uint32_t id = idBits.firstMarkedBit();
- idBits.clearBit(id);
+ uint32_t id = idBits.clearFirstMarkedBit();
uint32_t index = idToIndex[id];
pointerProperties[pointerCount].copyFrom(properties[index]);
pointerCoords[pointerCount].copyFrom(coords[index]);
@@ -4723,9 +4804,10 @@
}
}
- getDispatcher()->notifyMotion(when, getDeviceId(), source, policyFlags,
+ NotifyMotionArgs args(when, getDeviceId(), source, policyFlags,
action, flags, metaState, buttonState, edgeFlags,
pointerCount, pointerProperties, pointerCoords, xPrecision, yPrecision, downTime);
+ getListener()->notifyMotion(&args);
}
bool TouchInputMapper::updateMovedPointers(const PointerProperties* inProperties,
@@ -4734,9 +4816,7 @@
BitSet32 idBits) const {
bool changed = false;
while (!idBits.isEmpty()) {
- uint32_t id = idBits.firstMarkedBit();
- idBits.clearBit(id);
-
+ uint32_t id = idBits.clearFirstMarkedBit();
uint32_t inIndex = inIdToIndex[id];
uint32_t outIndex = outIdToIndex[id];
@@ -4759,24 +4839,21 @@
}
void TouchInputMapper::fadePointer() {
- { // acquire lock
- AutoMutex _l(mLock);
- if (mPointerController != NULL) {
- mPointerController->fade(PointerControllerInterface::TRANSITION_GRADUAL);
- }
- } // release lock
+ if (mPointerController != NULL) {
+ mPointerController->fade(PointerControllerInterface::TRANSITION_GRADUAL);
+ }
}
-bool TouchInputMapper::isPointInsideSurfaceLocked(int32_t x, int32_t y) {
- return x >= mRawAxes.x.minValue && x <= mRawAxes.x.maxValue
- && y >= mRawAxes.y.minValue && y <= mRawAxes.y.maxValue;
+bool TouchInputMapper::isPointInsideSurface(int32_t x, int32_t y) {
+ return x >= mRawPointerAxes.x.minValue && x <= mRawPointerAxes.x.maxValue
+ && y >= mRawPointerAxes.y.minValue && y <= mRawPointerAxes.y.maxValue;
}
-const TouchInputMapper::VirtualKey* TouchInputMapper::findVirtualKeyHitLocked(
+const TouchInputMapper::VirtualKey* TouchInputMapper::findVirtualKeyHit(
int32_t x, int32_t y) {
- size_t numVirtualKeys = mLocked.virtualKeys.size();
+ size_t numVirtualKeys = mVirtualKeys.size();
for (size_t i = 0; i < numVirtualKeys; i++) {
- const VirtualKey& virtualKey = mLocked.virtualKeys[i];
+ const VirtualKey& virtualKey = mVirtualKeys[i];
#if DEBUG_VIRTUAL_KEYS
LOGD("VirtualKeys: Hit test (%d, %d): keyCode=%d, scanCode=%d, "
@@ -4795,43 +4872,59 @@
return NULL;
}
-void TouchInputMapper::calculatePointerIds() {
- uint32_t currentPointerCount = mCurrentTouch.pointerCount;
- uint32_t lastPointerCount = mLastTouch.pointerCount;
+void TouchInputMapper::assignPointerIds() {
+ uint32_t currentPointerCount = mCurrentRawPointerData.pointerCount;
+ uint32_t lastPointerCount = mLastRawPointerData.pointerCount;
+
+ mCurrentRawPointerData.clearIdBits();
if (currentPointerCount == 0) {
// No pointers to assign.
- mCurrentTouch.idBits.clear();
- } else if (lastPointerCount == 0) {
- // All pointers are new.
- mCurrentTouch.idBits.clear();
- for (uint32_t i = 0; i < currentPointerCount; i++) {
- mCurrentTouch.pointers[i].id = i;
- mCurrentTouch.idToIndex[i] = i;
- mCurrentTouch.idBits.markBit(i);
- }
- } else if (currentPointerCount == 1 && lastPointerCount == 1) {
- // Only one pointer and no change in count so it must have the same id as before.
- uint32_t id = mLastTouch.pointers[0].id;
- mCurrentTouch.pointers[0].id = id;
- mCurrentTouch.idToIndex[id] = 0;
- mCurrentTouch.idBits.value = BitSet32::valueForBit(id);
- } else {
- // General case.
- // We build a heap of squared euclidean distances between current and last pointers
- // associated with the current and last pointer indices. Then, we find the best
- // match (by distance) for each current pointer.
- PointerDistanceHeapElement heap[MAX_POINTERS * MAX_POINTERS];
+ return;
+ }
- uint32_t heapSize = 0;
- for (uint32_t currentPointerIndex = 0; currentPointerIndex < currentPointerCount;
- currentPointerIndex++) {
- for (uint32_t lastPointerIndex = 0; lastPointerIndex < lastPointerCount;
- lastPointerIndex++) {
- int64_t deltaX = mCurrentTouch.pointers[currentPointerIndex].x
- - mLastTouch.pointers[lastPointerIndex].x;
- int64_t deltaY = mCurrentTouch.pointers[currentPointerIndex].y
- - mLastTouch.pointers[lastPointerIndex].y;
+ if (lastPointerCount == 0) {
+ // All pointers are new.
+ for (uint32_t i = 0; i < currentPointerCount; i++) {
+ uint32_t id = i;
+ mCurrentRawPointerData.pointers[i].id = id;
+ mCurrentRawPointerData.idToIndex[id] = i;
+ mCurrentRawPointerData.markIdBit(id, mCurrentRawPointerData.isHovering(i));
+ }
+ return;
+ }
+
+ if (currentPointerCount == 1 && lastPointerCount == 1
+ && mCurrentRawPointerData.pointers[0].toolType
+ == mLastRawPointerData.pointers[0].toolType) {
+ // Only one pointer and no change in count so it must have the same id as before.
+ uint32_t id = mLastRawPointerData.pointers[0].id;
+ mCurrentRawPointerData.pointers[0].id = id;
+ mCurrentRawPointerData.idToIndex[id] = 0;
+ mCurrentRawPointerData.markIdBit(id, mCurrentRawPointerData.isHovering(0));
+ return;
+ }
+
+ // General case.
+ // We build a heap of squared euclidean distances between current and last pointers
+ // associated with the current and last pointer indices. Then, we find the best
+ // match (by distance) for each current pointer.
+ // The pointers must have the same tool type but it is possible for them to
+ // transition from hovering to touching or vice-versa while retaining the same id.
+ PointerDistanceHeapElement heap[MAX_POINTERS * MAX_POINTERS];
+
+ uint32_t heapSize = 0;
+ for (uint32_t currentPointerIndex = 0; currentPointerIndex < currentPointerCount;
+ currentPointerIndex++) {
+ for (uint32_t lastPointerIndex = 0; lastPointerIndex < lastPointerCount;
+ lastPointerIndex++) {
+ const RawPointerData::Pointer& currentPointer =
+ mCurrentRawPointerData.pointers[currentPointerIndex];
+ const RawPointerData::Pointer& lastPointer =
+ mLastRawPointerData.pointers[lastPointerIndex];
+ if (currentPointer.toolType == lastPointer.toolType) {
+ int64_t deltaX = currentPointer.x - lastPointer.x;
+ int64_t deltaY = currentPointer.y - lastPointer.y;
uint64_t distance = uint64_t(deltaX * deltaX + deltaY * deltaY);
@@ -4842,193 +4935,174 @@
heapSize += 1;
}
}
+ }
- // Heapify
- for (uint32_t startIndex = heapSize / 2; startIndex != 0; ) {
- startIndex -= 1;
- for (uint32_t parentIndex = startIndex; ;) {
- uint32_t childIndex = parentIndex * 2 + 1;
- if (childIndex >= heapSize) {
- break;
- }
-
- if (childIndex + 1 < heapSize
- && heap[childIndex + 1].distance < heap[childIndex].distance) {
- childIndex += 1;
- }
-
- if (heap[parentIndex].distance <= heap[childIndex].distance) {
- break;
- }
-
- swap(heap[parentIndex], heap[childIndex]);
- parentIndex = childIndex;
- }
- }
-
-#if DEBUG_POINTER_ASSIGNMENT
- LOGD("calculatePointerIds - initial distance min-heap: size=%d", heapSize);
- for (size_t i = 0; i < heapSize; i++) {
- LOGD(" heap[%d]: cur=%d, last=%d, distance=%lld",
- i, heap[i].currentPointerIndex, heap[i].lastPointerIndex,
- heap[i].distance);
- }
-#endif
-
- // Pull matches out by increasing order of distance.
- // To avoid reassigning pointers that have already been matched, the loop keeps track
- // of which last and current pointers have been matched using the matchedXXXBits variables.
- // It also tracks the used pointer id bits.
- BitSet32 matchedLastBits(0);
- BitSet32 matchedCurrentBits(0);
- BitSet32 usedIdBits(0);
- bool first = true;
- for (uint32_t i = min(currentPointerCount, lastPointerCount); i > 0; i--) {
- for (;;) {
- if (first) {
- // The first time through the loop, we just consume the root element of
- // the heap (the one with smallest distance).
- first = false;
- } else {
- // Previous iterations consumed the root element of the heap.
- // Pop root element off of the heap (sift down).
- heapSize -= 1;
- LOG_ASSERT(heapSize > 0);
-
- // Sift down.
- heap[0] = heap[heapSize];
- for (uint32_t parentIndex = 0; ;) {
- uint32_t childIndex = parentIndex * 2 + 1;
- if (childIndex >= heapSize) {
- break;
- }
-
- if (childIndex + 1 < heapSize
- && heap[childIndex + 1].distance < heap[childIndex].distance) {
- childIndex += 1;
- }
-
- if (heap[parentIndex].distance <= heap[childIndex].distance) {
- break;
- }
-
- swap(heap[parentIndex], heap[childIndex]);
- parentIndex = childIndex;
- }
-
-#if DEBUG_POINTER_ASSIGNMENT
- LOGD("calculatePointerIds - reduced distance min-heap: size=%d", heapSize);
- for (size_t i = 0; i < heapSize; i++) {
- LOGD(" heap[%d]: cur=%d, last=%d, distance=%lld",
- i, heap[i].currentPointerIndex, heap[i].lastPointerIndex,
- heap[i].distance);
- }
-#endif
- }
-
- uint32_t currentPointerIndex = heap[0].currentPointerIndex;
- if (matchedCurrentBits.hasBit(currentPointerIndex)) continue; // already matched
-
- uint32_t lastPointerIndex = heap[0].lastPointerIndex;
- if (matchedLastBits.hasBit(lastPointerIndex)) continue; // already matched
-
- matchedCurrentBits.markBit(currentPointerIndex);
- matchedLastBits.markBit(lastPointerIndex);
-
- uint32_t id = mLastTouch.pointers[lastPointerIndex].id;
- mCurrentTouch.pointers[currentPointerIndex].id = id;
- mCurrentTouch.idToIndex[id] = currentPointerIndex;
- usedIdBits.markBit(id);
-
-#if DEBUG_POINTER_ASSIGNMENT
- LOGD("calculatePointerIds - matched: cur=%d, last=%d, id=%d, distance=%lld",
- lastPointerIndex, currentPointerIndex, id, heap[0].distance);
-#endif
+ // Heapify
+ for (uint32_t startIndex = heapSize / 2; startIndex != 0; ) {
+ startIndex -= 1;
+ for (uint32_t parentIndex = startIndex; ;) {
+ uint32_t childIndex = parentIndex * 2 + 1;
+ if (childIndex >= heapSize) {
break;
}
+
+ if (childIndex + 1 < heapSize
+ && heap[childIndex + 1].distance < heap[childIndex].distance) {
+ childIndex += 1;
+ }
+
+ if (heap[parentIndex].distance <= heap[childIndex].distance) {
+ break;
+ }
+
+ swap(heap[parentIndex], heap[childIndex]);
+ parentIndex = childIndex;
}
-
- // Assign fresh ids to new pointers.
- if (currentPointerCount > lastPointerCount) {
- for (uint32_t i = currentPointerCount - lastPointerCount; ;) {
- uint32_t currentPointerIndex = matchedCurrentBits.firstUnmarkedBit();
- uint32_t id = usedIdBits.firstUnmarkedBit();
-
- mCurrentTouch.pointers[currentPointerIndex].id = id;
- mCurrentTouch.idToIndex[id] = currentPointerIndex;
- usedIdBits.markBit(id);
+ }
#if DEBUG_POINTER_ASSIGNMENT
- LOGD("calculatePointerIds - assigned: cur=%d, id=%d",
- currentPointerIndex, id);
+ LOGD("assignPointerIds - initial distance min-heap: size=%d", heapSize);
+ for (size_t i = 0; i < heapSize; i++) {
+ LOGD(" heap[%d]: cur=%d, last=%d, distance=%lld",
+ i, heap[i].currentPointerIndex, heap[i].lastPointerIndex,
+ heap[i].distance);
+ }
#endif
- if (--i == 0) break; // done
- matchedCurrentBits.markBit(currentPointerIndex);
- }
- }
+ // Pull matches out by increasing order of distance.
+ // To avoid reassigning pointers that have already been matched, the loop keeps track
+ // of which last and current pointers have been matched using the matchedXXXBits variables.
+ // It also tracks the used pointer id bits.
+ BitSet32 matchedLastBits(0);
+ BitSet32 matchedCurrentBits(0);
+ BitSet32 usedIdBits(0);
+ bool first = true;
+ for (uint32_t i = min(currentPointerCount, lastPointerCount); heapSize > 0 && i > 0; i--) {
+ while (heapSize > 0) {
+ if (first) {
+ // The first time through the loop, we just consume the root element of
+ // the heap (the one with smallest distance).
+ first = false;
+ } else {
+ // Previous iterations consumed the root element of the heap.
+ // Pop root element off of the heap (sift down).
+ heap[0] = heap[heapSize];
+ for (uint32_t parentIndex = 0; ;) {
+ uint32_t childIndex = parentIndex * 2 + 1;
+ if (childIndex >= heapSize) {
+ break;
+ }
- // Fix id bits.
- mCurrentTouch.idBits = usedIdBits;
+ if (childIndex + 1 < heapSize
+ && heap[childIndex + 1].distance < heap[childIndex].distance) {
+ childIndex += 1;
+ }
+
+ if (heap[parentIndex].distance <= heap[childIndex].distance) {
+ break;
+ }
+
+ swap(heap[parentIndex], heap[childIndex]);
+ parentIndex = childIndex;
+ }
+
+#if DEBUG_POINTER_ASSIGNMENT
+ LOGD("assignPointerIds - reduced distance min-heap: size=%d", heapSize);
+ for (size_t i = 0; i < heapSize; i++) {
+ LOGD(" heap[%d]: cur=%d, last=%d, distance=%lld",
+ i, heap[i].currentPointerIndex, heap[i].lastPointerIndex,
+ heap[i].distance);
+ }
+#endif
+ }
+
+ heapSize -= 1;
+
+ uint32_t currentPointerIndex = heap[0].currentPointerIndex;
+ if (matchedCurrentBits.hasBit(currentPointerIndex)) continue; // already matched
+
+ uint32_t lastPointerIndex = heap[0].lastPointerIndex;
+ if (matchedLastBits.hasBit(lastPointerIndex)) continue; // already matched
+
+ matchedCurrentBits.markBit(currentPointerIndex);
+ matchedLastBits.markBit(lastPointerIndex);
+
+ uint32_t id = mLastRawPointerData.pointers[lastPointerIndex].id;
+ mCurrentRawPointerData.pointers[currentPointerIndex].id = id;
+ mCurrentRawPointerData.idToIndex[id] = currentPointerIndex;
+ mCurrentRawPointerData.markIdBit(id,
+ mCurrentRawPointerData.isHovering(currentPointerIndex));
+ usedIdBits.markBit(id);
+
+#if DEBUG_POINTER_ASSIGNMENT
+ LOGD("assignPointerIds - matched: cur=%d, last=%d, id=%d, distance=%lld",
+ lastPointerIndex, currentPointerIndex, id, heap[0].distance);
+#endif
+ break;
+ }
+ }
+
+ // Assign fresh ids to pointers that were not matched in the process.
+ for (uint32_t i = currentPointerCount - matchedCurrentBits.count(); i != 0; i--) {
+ uint32_t currentPointerIndex = matchedCurrentBits.markFirstUnmarkedBit();
+ uint32_t id = usedIdBits.markFirstUnmarkedBit();
+
+ mCurrentRawPointerData.pointers[currentPointerIndex].id = id;
+ mCurrentRawPointerData.idToIndex[id] = currentPointerIndex;
+ mCurrentRawPointerData.markIdBit(id,
+ mCurrentRawPointerData.isHovering(currentPointerIndex));
+
+#if DEBUG_POINTER_ASSIGNMENT
+ LOGD("assignPointerIds - assigned: cur=%d, id=%d",
+ currentPointerIndex, id);
+#endif
}
}
int32_t TouchInputMapper::getKeyCodeState(uint32_t sourceMask, int32_t keyCode) {
- { // acquire lock
- AutoMutex _l(mLock);
+ if (mCurrentVirtualKey.down && mCurrentVirtualKey.keyCode == keyCode) {
+ return AKEY_STATE_VIRTUAL;
+ }
- if (mLocked.currentVirtualKey.down && mLocked.currentVirtualKey.keyCode == keyCode) {
- return AKEY_STATE_VIRTUAL;
+ size_t numVirtualKeys = mVirtualKeys.size();
+ for (size_t i = 0; i < numVirtualKeys; i++) {
+ const VirtualKey& virtualKey = mVirtualKeys[i];
+ if (virtualKey.keyCode == keyCode) {
+ return AKEY_STATE_UP;
}
-
- size_t numVirtualKeys = mLocked.virtualKeys.size();
- for (size_t i = 0; i < numVirtualKeys; i++) {
- const VirtualKey& virtualKey = mLocked.virtualKeys[i];
- if (virtualKey.keyCode == keyCode) {
- return AKEY_STATE_UP;
- }
- }
- } // release lock
+ }
return AKEY_STATE_UNKNOWN;
}
int32_t TouchInputMapper::getScanCodeState(uint32_t sourceMask, int32_t scanCode) {
- { // acquire lock
- AutoMutex _l(mLock);
+ if (mCurrentVirtualKey.down && mCurrentVirtualKey.scanCode == scanCode) {
+ return AKEY_STATE_VIRTUAL;
+ }
- if (mLocked.currentVirtualKey.down && mLocked.currentVirtualKey.scanCode == scanCode) {
- return AKEY_STATE_VIRTUAL;
+ size_t numVirtualKeys = mVirtualKeys.size();
+ for (size_t i = 0; i < numVirtualKeys; i++) {
+ const VirtualKey& virtualKey = mVirtualKeys[i];
+ if (virtualKey.scanCode == scanCode) {
+ return AKEY_STATE_UP;
}
-
- size_t numVirtualKeys = mLocked.virtualKeys.size();
- for (size_t i = 0; i < numVirtualKeys; i++) {
- const VirtualKey& virtualKey = mLocked.virtualKeys[i];
- if (virtualKey.scanCode == scanCode) {
- return AKEY_STATE_UP;
- }
- }
- } // release lock
+ }
return AKEY_STATE_UNKNOWN;
}
bool TouchInputMapper::markSupportedKeyCodes(uint32_t sourceMask, size_t numCodes,
const int32_t* keyCodes, uint8_t* outFlags) {
- { // acquire lock
- AutoMutex _l(mLock);
+ size_t numVirtualKeys = mVirtualKeys.size();
+ for (size_t i = 0; i < numVirtualKeys; i++) {
+ const VirtualKey& virtualKey = mVirtualKeys[i];
- size_t numVirtualKeys = mLocked.virtualKeys.size();
- for (size_t i = 0; i < numVirtualKeys; i++) {
- const VirtualKey& virtualKey = mLocked.virtualKeys[i];
-
- for (size_t i = 0; i < numCodes; i++) {
- if (virtualKey.keyCode == keyCodes[i]) {
- outFlags[i] = 1;
- }
+ for (size_t i = 0; i < numCodes; i++) {
+ if (virtualKey.keyCode == keyCodes[i]) {
+ outFlags[i] = 1;
}
}
- } // release lock
+ }
return true;
}
@@ -5067,21 +5141,18 @@
}
void SingleTouchInputMapper::sync(nsecs_t when) {
- mCurrentTouch.clear();
+ mCurrentRawPointerData.clear();
+ mCurrentButtonState = 0;
if (mTouchButtonAccumulator.isActive()) {
- uint32_t buttonState = mTouchButtonAccumulator.getButtonState();
- bool isHovering = mTouchButtonAccumulator.isHovering();
- if (mSingleTouchMotionAccumulator.getAbsoluteDistance() > 0) {
- isHovering = true;
- }
+ mCurrentRawPointerData.pointerCount = 1;
+ mCurrentRawPointerData.idToIndex[0] = 0;
- mCurrentTouch.pointerCount = 1;
- mCurrentTouch.idToIndex[0] = 0;
- mCurrentTouch.idBits.markBit(0);
- mCurrentTouch.buttonState = buttonState;
+ bool isHovering = mTouchButtonAccumulator.isHovering()
+ || mSingleTouchMotionAccumulator.getAbsoluteDistance() > 0;
+ mCurrentRawPointerData.markIdBit(0, isHovering);
- PointerData& outPointer = mCurrentTouch.pointers[0];
+ RawPointerData::Pointer& outPointer = mCurrentRawPointerData.pointers[0];
outPointer.id = 0;
outPointer.x = mSingleTouchMotionAccumulator.getAbsoluteX();
outPointer.y = mSingleTouchMotionAccumulator.getAbsoluteY();
@@ -5097,21 +5168,24 @@
outPointer.toolType = AMOTION_EVENT_TOOL_TYPE_FINGER;
}
outPointer.isHovering = isHovering;
+
+ mCurrentButtonState = mTouchButtonAccumulator.getButtonState()
+ | mCursorButtonAccumulator.getButtonState();
}
syncTouch(when, true);
}
-void SingleTouchInputMapper::configureRawAxes() {
- TouchInputMapper::configureRawAxes();
+void SingleTouchInputMapper::configureRawPointerAxes() {
+ TouchInputMapper::configureRawPointerAxes();
mTouchButtonAccumulator.configure(getDevice());
- getEventHub()->getAbsoluteAxisInfo(getDeviceId(), ABS_X, & mRawAxes.x);
- getEventHub()->getAbsoluteAxisInfo(getDeviceId(), ABS_Y, & mRawAxes.y);
- getEventHub()->getAbsoluteAxisInfo(getDeviceId(), ABS_PRESSURE, & mRawAxes.pressure);
- getEventHub()->getAbsoluteAxisInfo(getDeviceId(), ABS_TOOL_WIDTH, & mRawAxes.toolMajor);
- getEventHub()->getAbsoluteAxisInfo(getDeviceId(), ABS_DISTANCE, & mRawAxes.distance);
+ getAbsoluteAxisInfo(ABS_X, &mRawPointerAxes.x);
+ getAbsoluteAxisInfo(ABS_Y, &mRawPointerAxes.y);
+ getAbsoluteAxisInfo(ABS_PRESSURE, &mRawPointerAxes.pressure);
+ getAbsoluteAxisInfo(ABS_TOOL_WIDTH, &mRawPointerAxes.toolMajor);
+ getAbsoluteAxisInfo(ABS_DISTANCE, &mRawPointerAxes.distance);
}
@@ -5172,8 +5246,9 @@
size_t inCount = mMultiTouchMotionAccumulator.getSlotCount();
size_t outCount = 0;
bool havePointerIds = true;
+ BitSet32 newPointerIdBits;
- mCurrentTouch.clear();
+ mCurrentRawPointerData.clear();
for (size_t inIndex = 0; inIndex < inCount; inIndex++) {
const MultiTouchMotionAccumulator::Slot* inSlot =
@@ -5191,7 +5266,7 @@
break; // too many fingers!
}
- PointerData& outPointer = mCurrentTouch.pointers[outCount];
+ RawPointerData::Pointer& outPointer = mCurrentRawPointerData.pointers[outCount];
outPointer.x = inSlot->getX();
outPointer.y = inSlot->getY();
outPointer.pressure = inSlot->getPressure();
@@ -5210,8 +5285,9 @@
}
}
- outPointer.isHovering = mTouchButtonAccumulator.isHovering()
+ bool isHovering = mTouchButtonAccumulator.isHovering()
|| inSlot->getDistance() > 0;
+ outPointer.isHovering = isHovering;
// Assign pointer id using tracking id if available.
if (havePointerIds) {
@@ -5219,37 +5295,37 @@
int32_t id = -1;
if (trackingId >= 0) {
for (BitSet32 idBits(mPointerIdBits); !idBits.isEmpty(); ) {
- uint32_t n = idBits.firstMarkedBit();
- idBits.clearBit(n);
-
+ uint32_t n = idBits.clearFirstMarkedBit();
if (mPointerTrackingIdMap[n] == trackingId) {
id = n;
}
}
if (id < 0 && !mPointerIdBits.isFull()) {
- id = mPointerIdBits.firstUnmarkedBit();
- mPointerIdBits.markBit(id);
+ id = mPointerIdBits.markFirstUnmarkedBit();
mPointerTrackingIdMap[id] = trackingId;
}
}
if (id < 0) {
havePointerIds = false;
- mCurrentTouch.idBits.clear();
+ mCurrentRawPointerData.clearIdBits();
+ newPointerIdBits.clear();
} else {
outPointer.id = id;
- mCurrentTouch.idToIndex[id] = outCount;
- mCurrentTouch.idBits.markBit(id);
+ mCurrentRawPointerData.idToIndex[id] = outCount;
+ mCurrentRawPointerData.markIdBit(id, isHovering);
+ newPointerIdBits.markBit(id);
}
}
outCount += 1;
}
- mCurrentTouch.pointerCount = outCount;
- mCurrentTouch.buttonState = mTouchButtonAccumulator.getButtonState();
+ mCurrentRawPointerData.pointerCount = outCount;
+ mCurrentButtonState = mTouchButtonAccumulator.getButtonState()
+ | mCursorButtonAccumulator.getButtonState();
- mPointerIdBits = mCurrentTouch.idBits;
+ mPointerIdBits = newPointerIdBits;
syncTouch(when, havePointerIds);
@@ -5258,26 +5334,27 @@
}
}
-void MultiTouchInputMapper::configureRawAxes() {
- TouchInputMapper::configureRawAxes();
+void MultiTouchInputMapper::configureRawPointerAxes() {
+ TouchInputMapper::configureRawPointerAxes();
mTouchButtonAccumulator.configure(getDevice());
- getEventHub()->getAbsoluteAxisInfo(getDeviceId(), ABS_MT_POSITION_X, &mRawAxes.x);
- getEventHub()->getAbsoluteAxisInfo(getDeviceId(), ABS_MT_POSITION_Y, &mRawAxes.y);
- getEventHub()->getAbsoluteAxisInfo(getDeviceId(), ABS_MT_TOUCH_MAJOR, &mRawAxes.touchMajor);
- getEventHub()->getAbsoluteAxisInfo(getDeviceId(), ABS_MT_TOUCH_MINOR, &mRawAxes.touchMinor);
- getEventHub()->getAbsoluteAxisInfo(getDeviceId(), ABS_MT_WIDTH_MAJOR, &mRawAxes.toolMajor);
- getEventHub()->getAbsoluteAxisInfo(getDeviceId(), ABS_MT_WIDTH_MINOR, &mRawAxes.toolMinor);
- getEventHub()->getAbsoluteAxisInfo(getDeviceId(), ABS_MT_ORIENTATION, &mRawAxes.orientation);
- getEventHub()->getAbsoluteAxisInfo(getDeviceId(), ABS_MT_PRESSURE, &mRawAxes.pressure);
- getEventHub()->getAbsoluteAxisInfo(getDeviceId(), ABS_MT_DISTANCE, &mRawAxes.distance);
- getEventHub()->getAbsoluteAxisInfo(getDeviceId(), ABS_MT_TRACKING_ID, &mRawAxes.trackingId);
- getEventHub()->getAbsoluteAxisInfo(getDeviceId(), ABS_MT_SLOT, &mRawAxes.slot);
+ getAbsoluteAxisInfo(ABS_MT_POSITION_X, &mRawPointerAxes.x);
+ getAbsoluteAxisInfo(ABS_MT_POSITION_Y, &mRawPointerAxes.y);
+ getAbsoluteAxisInfo(ABS_MT_TOUCH_MAJOR, &mRawPointerAxes.touchMajor);
+ getAbsoluteAxisInfo(ABS_MT_TOUCH_MINOR, &mRawPointerAxes.touchMinor);
+ getAbsoluteAxisInfo(ABS_MT_WIDTH_MAJOR, &mRawPointerAxes.toolMajor);
+ getAbsoluteAxisInfo(ABS_MT_WIDTH_MINOR, &mRawPointerAxes.toolMinor);
+ getAbsoluteAxisInfo(ABS_MT_ORIENTATION, &mRawPointerAxes.orientation);
+ getAbsoluteAxisInfo(ABS_MT_PRESSURE, &mRawPointerAxes.pressure);
+ getAbsoluteAxisInfo(ABS_MT_DISTANCE, &mRawPointerAxes.distance);
+ getAbsoluteAxisInfo(ABS_MT_TRACKING_ID, &mRawPointerAxes.trackingId);
+ getAbsoluteAxisInfo(ABS_MT_SLOT, &mRawPointerAxes.slot);
- if (mRawAxes.trackingId.valid
- && mRawAxes.slot.valid && mRawAxes.slot.minValue == 0 && mRawAxes.slot.maxValue > 0) {
- size_t slotCount = mRawAxes.slot.maxValue + 1;
+ if (mRawPointerAxes.trackingId.valid
+ && mRawPointerAxes.slot.valid
+ && mRawPointerAxes.slot.minValue == 0 && mRawPointerAxes.slot.maxValue > 0) {
+ size_t slotCount = mRawPointerAxes.slot.maxValue + 1;
if (slotCount > MAX_SLOTS) {
LOGW("MultiTouch Device %s reported %d slots but the framework "
"only supports a maximum of %d slots at this time.",
@@ -5364,7 +5441,7 @@
// Collect all axes.
for (int32_t abs = 0; abs <= ABS_MAX; abs++) {
RawAbsoluteAxisInfo rawAxisInfo;
- getEventHub()->getAbsoluteAxisInfo(getDeviceId(), abs, &rawAxisInfo);
+ getAbsoluteAxisInfo(abs, &rawAxisInfo);
if (rawAxisInfo.valid) {
// Map axis.
AxisInfo axisInfo;
@@ -5581,9 +5658,10 @@
// TODO: Use the input device configuration to control this behavior more finely.
uint32_t policyFlags = 0;
- getDispatcher()->notifyMotion(when, getDeviceId(), AINPUT_SOURCE_JOYSTICK, policyFlags,
+ NotifyMotionArgs args(when, getDeviceId(), AINPUT_SOURCE_JOYSTICK, policyFlags,
AMOTION_EVENT_ACTION_MOVE, 0, metaState, buttonState, AMOTION_EVENT_EDGE_FLAG_NONE,
1, &pointerProperties, &pointerCoords, 0, 0, 0);
+ getListener()->notifyMotion(&args);
}
bool JoystickInputMapper::filterAxes(bool force) {
diff --git a/services/input/InputReader.h b/services/input/InputReader.h
index ee6990b..f5d095d 100644
--- a/services/input/InputReader.h
+++ b/services/input/InputReader.h
@@ -18,8 +18,8 @@
#define _UI_INPUT_READER_H
#include "EventHub.h"
-#include "InputDispatcher.h"
#include "PointerController.h"
+#include "InputListener.h"
#include <ui/Input.h>
#include <ui/DisplayInfo.h>
@@ -164,6 +164,9 @@
*
* The actual implementation is partially supported by callbacks into the DVM
* via JNI. This interface is also mocked in the unit tests.
+ *
+ * These methods must NOT re-enter the input reader since they may be called while
+ * holding the input reader lock.
*/
class InputReaderPolicyInterface : public virtual RefBase {
protected:
@@ -195,7 +198,7 @@
};
-/* Processes raw input events and sends cooked event data to an input dispatcher. */
+/* Processes raw input events and sends cooked event data to an input listener. */
class InputReaderInterface : public virtual RefBase {
protected:
InputReaderInterface() { }
@@ -270,25 +273,27 @@
virtual void requestTimeoutAtTime(nsecs_t when) = 0;
virtual InputReaderPolicyInterface* getPolicy() = 0;
- virtual InputDispatcherInterface* getDispatcher() = 0;
+ virtual InputListenerInterface* getListener() = 0;
virtual EventHubInterface* getEventHub() = 0;
};
/* The input reader reads raw event data from the event hub and processes it into input events
- * that it sends to the input dispatcher. Some functions of the input reader, such as early
+ * that it sends to the input listener. Some functions of the input reader, such as early
* event filtering in low power states, are controlled by a separate policy object.
*
- * IMPORTANT INVARIANT:
- * Because the policy and dispatcher can potentially block or cause re-entrance into
- * the input reader, the input reader never calls into other components while holding
- * an exclusive internal lock whenever re-entrance can happen.
+ * The InputReader owns a collection of InputMappers. Most of the work it does happens
+ * on the input reader thread but the InputReader can receive queries from other system
+ * components running on arbitrary threads. To keep things manageable, the InputReader
+ * uses a single Mutex to guard its state. The Mutex may be held while calling into the
+ * EventHub or the InputReaderPolicy but it is never held while calling into the
+ * InputListener.
*/
-class InputReader : public InputReaderInterface, protected InputReaderContext {
+class InputReader : public InputReaderInterface {
public:
InputReader(const sp<EventHubInterface>& eventHub,
const sp<InputReaderPolicyInterface>& policy,
- const sp<InputDispatcherInterface>& dispatcher);
+ const sp<InputListenerInterface>& listener);
virtual ~InputReader();
virtual void dump(String8& dump);
@@ -313,74 +318,80 @@
virtual void requestRefreshConfiguration(uint32_t changes);
protected:
- // These methods are protected virtual so they can be overridden and instrumented
- // by test cases.
- virtual InputDevice* createDevice(int32_t deviceId, const String8& name, uint32_t classes);
+ // These members are protected so they can be instrumented by test cases.
+ virtual InputDevice* createDeviceLocked(int32_t deviceId,
+ const String8& name, uint32_t classes);
+
+ class ContextImpl : public InputReaderContext {
+ InputReader* mReader;
+
+ public:
+ ContextImpl(InputReader* reader);
+
+ virtual void updateGlobalMetaState();
+ virtual int32_t getGlobalMetaState();
+ virtual void disableVirtualKeysUntil(nsecs_t time);
+ virtual bool shouldDropVirtualKey(nsecs_t now,
+ InputDevice* device, int32_t keyCode, int32_t scanCode);
+ virtual void fadePointer();
+ virtual void requestTimeoutAtTime(nsecs_t when);
+ virtual InputReaderPolicyInterface* getPolicy();
+ virtual InputListenerInterface* getListener();
+ virtual EventHubInterface* getEventHub();
+ } mContext;
+
+ friend class ContextImpl;
private:
+ Mutex mLock;
+
sp<EventHubInterface> mEventHub;
sp<InputReaderPolicyInterface> mPolicy;
- sp<InputDispatcherInterface> mDispatcher;
+ sp<QueuedInputListener> mQueuedListener;
InputReaderConfiguration mConfig;
- virtual InputReaderPolicyInterface* getPolicy() { return mPolicy.get(); }
- virtual InputDispatcherInterface* getDispatcher() { return mDispatcher.get(); }
- virtual EventHubInterface* getEventHub() { return mEventHub.get(); }
-
// The event queue.
static const int EVENT_BUFFER_SIZE = 256;
RawEvent mEventBuffer[EVENT_BUFFER_SIZE];
- // This reader/writer lock guards the list of input devices.
- // The writer lock must be held whenever the list of input devices is modified
- // and then promptly released.
- // The reader lock must be held whenever the list of input devices is traversed or an
- // input device in the list is accessed.
- // This lock only protects the registry and prevents inadvertent deletion of device objects
- // that are in use. Individual devices are responsible for guarding their own internal state
- // as needed for concurrent operation.
- RWLock mDeviceRegistryLock;
KeyedVector<int32_t, InputDevice*> mDevices;
// low-level input event decoding and device management
- void processEvents(const RawEvent* rawEvents, size_t count);
+ void processEventsLocked(const RawEvent* rawEvents, size_t count);
- void addDevice(int32_t deviceId);
- void removeDevice(int32_t deviceId);
- void processEventsForDevice(int32_t deviceId, const RawEvent* rawEvents, size_t count);
- void timeoutExpired(nsecs_t when);
+ void addDeviceLocked(int32_t deviceId);
+ void removeDeviceLocked(int32_t deviceId);
+ void processEventsForDeviceLocked(int32_t deviceId, const RawEvent* rawEvents, size_t count);
+ void timeoutExpiredLocked(nsecs_t when);
- void handleConfigurationChanged(nsecs_t when);
+ void handleConfigurationChangedLocked(nsecs_t when);
- // state management for all devices
- Mutex mStateLock;
+ int32_t mGlobalMetaState;
+ void updateGlobalMetaStateLocked();
+ int32_t getGlobalMetaStateLocked();
- int32_t mGlobalMetaState; // guarded by mStateLock
- virtual void updateGlobalMetaState();
- virtual int32_t getGlobalMetaState();
+ void fadePointerLocked();
- virtual void fadePointer();
+ InputConfiguration mInputConfiguration;
+ void updateInputConfigurationLocked();
- InputConfiguration mInputConfiguration; // guarded by mStateLock
- void updateInputConfiguration();
-
- nsecs_t mDisableVirtualKeysTimeout; // only accessed by reader thread
- virtual void disableVirtualKeysUntil(nsecs_t time);
- virtual bool shouldDropVirtualKey(nsecs_t now,
+ nsecs_t mDisableVirtualKeysTimeout;
+ void disableVirtualKeysUntilLocked(nsecs_t time);
+ bool shouldDropVirtualKeyLocked(nsecs_t now,
InputDevice* device, int32_t keyCode, int32_t scanCode);
- nsecs_t mNextTimeout; // only accessed by reader thread, not guarded
- virtual void requestTimeoutAtTime(nsecs_t when);
+ nsecs_t mNextTimeout;
+ void requestTimeoutAtTimeLocked(nsecs_t when);
- uint32_t mConfigurationChangesToRefresh; // guarded by mStateLock
- void refreshConfiguration(uint32_t changes);
+ uint32_t mConfigurationChangesToRefresh;
+ void refreshConfigurationLocked(uint32_t changes);
// state queries
typedef int32_t (InputDevice::*GetStateFunc)(uint32_t sourceMask, int32_t code);
- int32_t getState(int32_t deviceId, uint32_t sourceMask, int32_t code,
+ int32_t getStateLocked(int32_t deviceId, uint32_t sourceMask, int32_t code,
GetStateFunc getStateFunc);
- bool markSupportedKeyCodes(int32_t deviceId, uint32_t sourceMask, size_t numCodes,
+ bool markSupportedKeyCodesLocked(int32_t deviceId, uint32_t sourceMask, size_t numCodes,
const int32_t* keyCodes, uint8_t* outFlags);
};
@@ -530,6 +541,93 @@
};
+/* Raw axis information from the driver. */
+struct RawPointerAxes {
+ RawAbsoluteAxisInfo x;
+ RawAbsoluteAxisInfo y;
+ RawAbsoluteAxisInfo pressure;
+ RawAbsoluteAxisInfo touchMajor;
+ RawAbsoluteAxisInfo touchMinor;
+ RawAbsoluteAxisInfo toolMajor;
+ RawAbsoluteAxisInfo toolMinor;
+ RawAbsoluteAxisInfo orientation;
+ RawAbsoluteAxisInfo distance;
+ RawAbsoluteAxisInfo trackingId;
+ RawAbsoluteAxisInfo slot;
+
+ RawPointerAxes();
+ void clear();
+};
+
+
+/* Raw data for a collection of pointers including a pointer id mapping table. */
+struct RawPointerData {
+ struct Pointer {
+ uint32_t id;
+ int32_t x;
+ int32_t y;
+ int32_t pressure;
+ int32_t touchMajor;
+ int32_t touchMinor;
+ int32_t toolMajor;
+ int32_t toolMinor;
+ int32_t orientation;
+ int32_t distance;
+ int32_t toolType; // a fully decoded AMOTION_EVENT_TOOL_TYPE constant
+ bool isHovering;
+ };
+
+ uint32_t pointerCount;
+ Pointer pointers[MAX_POINTERS];
+ BitSet32 hoveringIdBits, touchingIdBits;
+ uint32_t idToIndex[MAX_POINTER_ID + 1];
+
+ RawPointerData();
+ void clear();
+ void copyFrom(const RawPointerData& other);
+ void getCentroidOfTouchingPointers(float* outX, float* outY) const;
+
+ inline void markIdBit(uint32_t id, bool isHovering) {
+ if (isHovering) {
+ hoveringIdBits.markBit(id);
+ } else {
+ touchingIdBits.markBit(id);
+ }
+ }
+
+ inline void clearIdBits() {
+ hoveringIdBits.clear();
+ touchingIdBits.clear();
+ }
+
+ inline const Pointer& pointerForId(uint32_t id) const {
+ return pointers[idToIndex[id]];
+ }
+
+ inline bool isHovering(uint32_t pointerIndex) {
+ return pointers[pointerIndex].isHovering;
+ }
+};
+
+
+/* Cooked data for a collection of pointers including a pointer id mapping table. */
+struct CookedPointerData {
+ uint32_t pointerCount;
+ PointerProperties pointerProperties[MAX_POINTERS];
+ PointerCoords pointerCoords[MAX_POINTERS];
+ BitSet32 hoveringIdBits, touchingIdBits;
+ uint32_t idToIndex[MAX_POINTER_ID + 1];
+
+ CookedPointerData();
+ void clear();
+ void copyFrom(const CookedPointerData& other);
+
+ inline bool isHovering(uint32_t pointerIndex) {
+ return hoveringIdBits.hasBit(pointerProperties[pointerIndex].id);
+ }
+};
+
+
/* Keeps track of the state of single-touch protocol. */
class SingleTouchMotionAccumulator {
public:
@@ -590,8 +688,8 @@
int32_t mAbsMTOrientation;
int32_t mAbsMTTrackingId;
int32_t mAbsMTPressure;
- int32_t mAbsMTToolType;
int32_t mAbsMTDistance;
+ int32_t mAbsMTToolType;
Slot();
void clearIfInUse();
@@ -632,7 +730,7 @@
inline const String8 getDeviceName() { return mDevice->getName(); }
inline InputReaderContext* getContext() { return mContext; }
inline InputReaderPolicyInterface* getPolicy() { return mContext->getPolicy(); }
- inline InputDispatcherInterface* getDispatcher() { return mContext->getDispatcher(); }
+ inline InputListenerInterface* getListener() { return mContext->getListener(); }
inline EventHubInterface* getEventHub() { return mContext->getEventHub(); }
virtual uint32_t getSources() = 0;
@@ -657,6 +755,8 @@
InputDevice* mDevice;
InputReaderContext* mContext;
+ status_t getAbsoluteAxisInfo(int32_t axis, RawAbsoluteAxisInfo* axisInfo);
+
static void dumpRawAbsoluteAxisInfo(String8& dump,
const RawAbsoluteAxisInfo& axis, const char* name);
};
@@ -707,27 +807,25 @@
uint32_t mSource;
int32_t mKeyboardType;
+ Vector<KeyDown> mKeyDowns; // keys that are down
+ int32_t mMetaState;
+ nsecs_t mDownTime; // time of most recent key down
+
+ struct LedState {
+ bool avail; // led is available
+ bool on; // we think the led is currently on
+ };
+ LedState mCapsLockLedState;
+ LedState mNumLockLedState;
+ LedState mScrollLockLedState;
+
// Immutable configuration parameters.
struct Parameters {
int32_t associatedDisplayId;
bool orientationAware;
} mParameters;
- struct LockedState {
- Vector<KeyDown> keyDowns; // keys that are down
- int32_t metaState;
- nsecs_t downTime; // time of most recent key down
-
- struct LedState {
- bool avail; // led is available
- bool on; // we think the led is currently on
- };
- LedState capsLockLedState;
- LedState numLockLedState;
- LedState scrollLockLedState;
- } mLocked;
-
- void initializeLocked();
+ void initialize();
void configureParameters();
void dumpParameters(String8& dump);
@@ -737,12 +835,12 @@
void processKey(nsecs_t when, bool down, int32_t keyCode, int32_t scanCode,
uint32_t policyFlags);
- ssize_t findKeyDownLocked(int32_t scanCode);
+ ssize_t findKeyDown(int32_t scanCode);
- void resetLedStateLocked();
- void initializeLedStateLocked(LockedState::LedState& ledState, int32_t led);
- void updateLedStateLocked(bool reset);
- void updateLedStateForModifierLocked(LockedState::LedState& ledState, int32_t led,
+ void resetLedState();
+ void initializeLedState(LedState& ledState, int32_t led);
+ void updateLedState(bool reset);
+ void updateLedStateForModifier(LedState& ledState, int32_t led,
int32_t modifier, bool reset);
};
@@ -767,8 +865,6 @@
// Amount that trackball needs to move in order to generate a key event.
static const int32_t TRACKBALL_MOVEMENT_THRESHOLD = 6;
- Mutex mLock;
-
// Immutable configuration parameters.
struct Parameters {
enum Mode {
@@ -801,12 +897,10 @@
sp<PointerControllerInterface> mPointerController;
- struct LockedState {
- int32_t buttonState;
- nsecs_t downTime;
- } mLocked;
+ int32_t mButtonState;
+ nsecs_t mDownTime;
- void initializeLocked();
+ void initialize();
void configureParameters();
void dumpParameters(String8& dump);
@@ -835,8 +929,6 @@
virtual void timeoutExpired(nsecs_t when);
protected:
- Mutex mLock;
-
struct VirtualKey {
int32_t keyCode;
int32_t scanCode;
@@ -853,82 +945,6 @@
}
};
- // Raw data for a single pointer.
- struct PointerData {
- uint32_t id;
- int32_t x;
- int32_t y;
- int32_t pressure;
- int32_t touchMajor;
- int32_t touchMinor;
- int32_t toolMajor;
- int32_t toolMinor;
- int32_t orientation;
- int32_t distance;
- int32_t toolType; // AMOTION_EVENT_TOOL_TYPE constant
- bool isHovering;
-
- inline bool operator== (const PointerData& other) const {
- return id == other.id
- && x == other.x
- && y == other.y
- && pressure == other.pressure
- && touchMajor == other.touchMajor
- && touchMinor == other.touchMinor
- && toolMajor == other.toolMajor
- && toolMinor == other.toolMinor
- && orientation == other.orientation
- && distance == other.distance
- && toolType == other.toolType
- && isHovering == other.isHovering;
- }
- inline bool operator!= (const PointerData& other) const {
- return !(*this == other);
- }
- };
-
- // Raw data for a collection of pointers including a pointer id mapping table.
- struct TouchData {
- uint32_t pointerCount;
- PointerData pointers[MAX_POINTERS];
- BitSet32 idBits;
- uint32_t idToIndex[MAX_POINTER_ID + 1];
- int32_t buttonState;
-
- void copyFrom(const TouchData& other) {
- pointerCount = other.pointerCount;
- idBits = other.idBits;
- buttonState = other.buttonState;
-
- for (uint32_t i = 0; i < pointerCount; i++) {
- pointers[i] = other.pointers[i];
-
- int id = pointers[i].id;
- idToIndex[id] = other.idToIndex[id];
- }
- }
-
- inline void clear() {
- pointerCount = 0;
- idBits.clear();
- buttonState = 0;
- }
-
- void getCentroid(float* outX, float* outY) {
- float x = 0, y = 0;
- if (pointerCount != 0) {
- for (uint32_t i = 0; i < pointerCount; i++) {
- x += pointers[i].x;
- y += pointers[i].y;
- }
- x /= pointerCount;
- y /= pointerCount;
- }
- *outX = x;
- *outY = y;
- }
- };
-
// Input sources supported by the device.
uint32_t mTouchSource; // sources when reporting touch data
uint32_t mPointerSource; // sources when reporting pointer gestures
@@ -1038,29 +1054,23 @@
float distanceScale;
} mCalibration;
- // Raw axis information from the driver.
- struct RawAxes {
- RawAbsoluteAxisInfo x;
- RawAbsoluteAxisInfo y;
- RawAbsoluteAxisInfo pressure;
- RawAbsoluteAxisInfo touchMajor;
- RawAbsoluteAxisInfo touchMinor;
- RawAbsoluteAxisInfo toolMajor;
- RawAbsoluteAxisInfo toolMinor;
- RawAbsoluteAxisInfo orientation;
- RawAbsoluteAxisInfo distance;
- RawAbsoluteAxisInfo trackingId;
- RawAbsoluteAxisInfo slot;
- } mRawAxes;
+ // Raw pointer axis information from the driver.
+ RawPointerAxes mRawPointerAxes;
- // Current and previous touch sample data.
- TouchData mCurrentTouch;
- PointerProperties mCurrentTouchProperties[MAX_POINTERS];
- PointerCoords mCurrentTouchCoords[MAX_POINTERS];
+ // Raw pointer sample data.
+ RawPointerData mCurrentRawPointerData;
+ RawPointerData mLastRawPointerData;
- TouchData mLastTouch;
- PointerProperties mLastTouchProperties[MAX_POINTERS];
- PointerCoords mLastTouchCoords[MAX_POINTERS];
+ // Cooked pointer sample data.
+ CookedPointerData mCurrentCookedPointerData;
+ CookedPointerData mLastCookedPointerData;
+
+ // Button state.
+ int32_t mCurrentButtonState;
+ int32_t mLastButtonState;
+
+ // True if we sent a HOVER_ENTER event.
+ bool mSentHoverEnter;
// The time the primary pointer last went down.
nsecs_t mDownTime;
@@ -1068,113 +1078,106 @@
// The pointer controller, or null if the device is not a pointer.
sp<PointerControllerInterface> mPointerController;
- struct LockedState {
- Vector<VirtualKey> virtualKeys;
-
- // The surface orientation and width and height set by configureSurfaceLocked().
- int32_t surfaceOrientation;
- int32_t surfaceWidth, surfaceHeight;
-
- // The associated display orientation and width and height set by configureSurfaceLocked().
- int32_t associatedDisplayOrientation;
- int32_t associatedDisplayWidth, associatedDisplayHeight;
-
- // Translation and scaling factors, orientation-independent.
- float xScale;
- float xPrecision;
-
- float yScale;
- float yPrecision;
-
- float geometricScale;
-
- float toolSizeLinearScale;
- float toolSizeLinearBias;
- float toolSizeAreaScale;
- float toolSizeAreaBias;
-
- float pressureScale;
-
- float sizeScale;
-
- float orientationScale;
-
- float distanceScale;
-
- // Oriented motion ranges for input device info.
- struct OrientedRanges {
- InputDeviceInfo::MotionRange x;
- InputDeviceInfo::MotionRange y;
-
- bool havePressure;
- InputDeviceInfo::MotionRange pressure;
-
- bool haveSize;
- InputDeviceInfo::MotionRange size;
-
- bool haveTouchSize;
- InputDeviceInfo::MotionRange touchMajor;
- InputDeviceInfo::MotionRange touchMinor;
-
- bool haveToolSize;
- InputDeviceInfo::MotionRange toolMajor;
- InputDeviceInfo::MotionRange toolMinor;
-
- bool haveOrientation;
- InputDeviceInfo::MotionRange orientation;
-
- bool haveDistance;
- InputDeviceInfo::MotionRange distance;
- } orientedRanges;
-
- // Oriented dimensions and precision.
- float orientedSurfaceWidth, orientedSurfaceHeight;
- float orientedXPrecision, orientedYPrecision;
-
- struct CurrentVirtualKeyState {
- bool down;
- nsecs_t downTime;
- int32_t keyCode;
- int32_t scanCode;
- } currentVirtualKey;
-
- // Scale factor for gesture based pointer movements.
- float pointerGestureXMovementScale;
- float pointerGestureYMovementScale;
-
- // Scale factor for gesture based zooming and other freeform motions.
- float pointerGestureXZoomScale;
- float pointerGestureYZoomScale;
-
- // The maximum swipe width.
- float pointerGestureMaxSwipeWidth;
- } mLocked;
+ Vector<VirtualKey> mVirtualKeys;
virtual void configureParameters();
virtual void dumpParameters(String8& dump);
- virtual void configureRawAxes();
- virtual void dumpRawAxes(String8& dump);
- virtual bool configureSurfaceLocked();
- virtual void dumpSurfaceLocked(String8& dump);
- virtual void configureVirtualKeysLocked();
- virtual void dumpVirtualKeysLocked(String8& dump);
+ virtual void configureRawPointerAxes();
+ virtual void dumpRawPointerAxes(String8& dump);
+ virtual bool configureSurface();
+ virtual void dumpSurface(String8& dump);
+ virtual void configureVirtualKeys();
+ virtual void dumpVirtualKeys(String8& dump);
virtual void parseCalibration();
virtual void resolveCalibration();
virtual void dumpCalibration(String8& dump);
- enum TouchResult {
- // Dispatch the touch normally.
- DISPATCH_TOUCH,
- // Do not dispatch the touch, but keep tracking the current stroke.
- SKIP_TOUCH,
- // Do not dispatch the touch, and drop all information associated with the current stoke
- // so the next movement will appear as a new down.
- DROP_STROKE
- };
-
void syncTouch(nsecs_t when, bool havePointerIds);
private:
+ // The surface orientation and width and height set by configureSurface().
+ int32_t mSurfaceOrientation;
+ int32_t mSurfaceWidth;
+ int32_t mSurfaceHeight;
+
+ // The associated display orientation and width and height set by configureSurface().
+ int32_t mAssociatedDisplayOrientation;
+ int32_t mAssociatedDisplayWidth;
+ int32_t mAssociatedDisplayHeight;
+
+ // Translation and scaling factors, orientation-independent.
+ float mXScale;
+ float mXPrecision;
+
+ float mYScale;
+ float mYPrecision;
+
+ float mGeometricScale;
+
+ float mToolSizeLinearScale;
+ float mToolSizeLinearBias;
+ float mToolSizeAreaScale;
+ float mToolSizeAreaBias;
+
+ float mPressureScale;
+
+ float mSizeScale;
+
+ float mOrientationScale;
+
+ float mDistanceScale;
+
+ // Oriented motion ranges for input device info.
+ struct OrientedRanges {
+ InputDeviceInfo::MotionRange x;
+ InputDeviceInfo::MotionRange y;
+
+ bool havePressure;
+ InputDeviceInfo::MotionRange pressure;
+
+ bool haveSize;
+ InputDeviceInfo::MotionRange size;
+
+ bool haveTouchSize;
+ InputDeviceInfo::MotionRange touchMajor;
+ InputDeviceInfo::MotionRange touchMinor;
+
+ bool haveToolSize;
+ InputDeviceInfo::MotionRange toolMajor;
+ InputDeviceInfo::MotionRange toolMinor;
+
+ bool haveOrientation;
+ InputDeviceInfo::MotionRange orientation;
+
+ bool haveDistance;
+ InputDeviceInfo::MotionRange distance;
+ } mOrientedRanges;
+
+ // Oriented dimensions and precision.
+ float mOrientedSurfaceWidth;
+ float mOrientedSurfaceHeight;
+ float mOrientedXPrecision;
+ float mOrientedYPrecision;
+
+ struct CurrentVirtualKeyState {
+ bool down;
+ bool ignored;
+ nsecs_t downTime;
+ int32_t keyCode;
+ int32_t scanCode;
+ } mCurrentVirtualKey;
+
+ // Scale factor for gesture based pointer movements.
+ float mPointerGestureXMovementScale;
+ float mPointerGestureYMovementScale;
+
+ // Scale factor for gesture based zooming and other freeform motions.
+ float mPointerGestureXZoomScale;
+ float mPointerGestureYZoomScale;
+
+ // The maximum swipe width.
+ float mPointerGestureMaxSwipeWidth;
+
struct PointerDistanceHeapElement {
uint32_t currentPointerIndex : 8;
uint32_t lastPointerIndex : 8;
@@ -1319,11 +1322,17 @@
}
} mPointerGesture;
- void initializeLocked();
+ void initialize();
- TouchResult consumeOffScreenTouches(nsecs_t when, uint32_t policyFlags);
+ bool consumeRawTouches(nsecs_t when, uint32_t policyFlags);
+ void dispatchVirtualKey(nsecs_t when, uint32_t policyFlags,
+ int32_t keyEventAction, int32_t keyEventFlags);
+
void dispatchTouches(nsecs_t when, uint32_t policyFlags);
- void prepareTouches(float* outXPrecision, float* outYPrecision);
+ void dispatchHoverExit(nsecs_t when, uint32_t policyFlags);
+ void dispatchHoverEnterAndMove(nsecs_t when, uint32_t policyFlags);
+ void cookPointerData();
+
void dispatchPointerGestures(nsecs_t when, uint32_t policyFlags, bool isTimeout);
bool preparePointerGestures(nsecs_t when,
bool* outCancelPreviousGesture, bool* outFinishPreviousGesture, bool isTimeout);
@@ -1346,12 +1355,10 @@
PointerProperties* outProperties, PointerCoords* outCoords,
const uint32_t* outIdToIndex, BitSet32 idBits) const;
- void suppressSwipeOntoVirtualKeys(nsecs_t when);
+ bool isPointInsideSurface(int32_t x, int32_t y);
+ const VirtualKey* findVirtualKeyHit(int32_t x, int32_t y);
- bool isPointInsideSurfaceLocked(int32_t x, int32_t y);
- const VirtualKey* findVirtualKeyHitLocked(int32_t x, int32_t y);
-
- void calculatePointerIds();
+ void assignPointerIds();
};
@@ -1364,7 +1371,7 @@
virtual void process(const RawEvent* rawEvent);
protected:
- virtual void configureRawAxes();
+ virtual void configureRawPointerAxes();
private:
CursorButtonAccumulator mCursorButtonAccumulator;
@@ -1386,7 +1393,7 @@
virtual void process(const RawEvent* rawEvent);
protected:
- virtual void configureRawAxes();
+ virtual void configureRawPointerAxes();
private:
CursorButtonAccumulator mCursorButtonAccumulator;
diff --git a/services/input/PointerController.cpp b/services/input/PointerController.cpp
index 12c7cba..1d1730d 100644
--- a/services/input/PointerController.cpp
+++ b/services/input/PointerController.cpp
@@ -261,9 +261,7 @@
// Add or move spots for fingers that are down.
for (BitSet32 idBits(spotIdBits); !idBits.isEmpty(); ) {
- uint32_t id = idBits.firstMarkedBit();
- idBits.clearBit(id);
-
+ uint32_t id = idBits.clearFirstMarkedBit();
const PointerCoords& c = spotCoords[spotIdToIndex[id]];
const SpriteIcon& icon = c.getAxisValue(AMOTION_EVENT_AXIS_PRESSURE) > 0
? mResources.spotTouch : mResources.spotHover;
diff --git a/services/input/tests/InputReader_test.cpp b/services/input/tests/InputReader_test.cpp
index 8533743..4a866a8 100644
--- a/services/input/tests/InputReader_test.cpp
+++ b/services/input/tests/InputReader_test.cpp
@@ -48,13 +48,16 @@
class FakePointerController : public PointerControllerInterface {
bool mHaveBounds;
float mMinX, mMinY, mMaxX, mMaxY;
+ float mX, mY;
+ int32_t mButtonState;
protected:
virtual ~FakePointerController() { }
public:
FakePointerController() :
- mHaveBounds(false), mMinX(0), mMinY(0), mMaxX(0), mMaxY(0) {
+ mHaveBounds(false), mMinX(0), mMinY(0), mMaxX(0), mMaxY(0), mX(0), mY(0),
+ mButtonState(0) {
}
void setBounds(float minX, float minY, float maxX, float maxY) {
@@ -65,6 +68,24 @@
mMaxY = maxY;
}
+ virtual void setPosition(float x, float y) {
+ mX = x;
+ mY = y;
+ }
+
+ virtual void setButtonState(int32_t buttonState) {
+ mButtonState = buttonState;
+ }
+
+ virtual int32_t getButtonState() const {
+ return mButtonState;
+ }
+
+ virtual void getPosition(float* outX, float* outY) const {
+ *outX = mX;
+ *outY = mY;
+ }
+
private:
virtual bool getBounds(float* outMinX, float* outMinY, float* outMaxX, float* outMaxY) const {
*outMinX = mMinX;
@@ -75,21 +96,12 @@
}
virtual void move(float deltaX, float deltaY) {
- }
-
- virtual void setButtonState(int32_t buttonState) {
- }
-
- virtual int32_t getButtonState() const {
- return 0;
- }
-
- virtual void setPosition(float x, float y) {
- }
-
- virtual void getPosition(float* outX, float* outY) const {
- *outX = 0;
- *outY = 0;
+ mX += deltaX;
+ if (mX < mMinX) mX = mMinX;
+ if (mX > mMaxX) mX = mMaxX;
+ mY += deltaY;
+ if (mY < mMinY) mY = mMinY;
+ if (mY > mMaxY) mY = mMaxY;
}
virtual void fade(Transition transition) {
@@ -186,221 +198,84 @@
};
-// --- FakeInputDispatcher ---
+// --- FakeInputListener ---
-class FakeInputDispatcher : public InputDispatcherInterface {
-public:
- struct NotifyConfigurationChangedArgs {
- NotifyConfigurationChangedArgs() : eventTime(0) { }
-
- nsecs_t eventTime;
- };
-
- struct NotifyKeyArgs {
- nsecs_t eventTime;
- int32_t deviceId;
- uint32_t source;
- uint32_t policyFlags;
- int32_t action;
- int32_t flags;
- int32_t keyCode;
- int32_t scanCode;
- int32_t metaState;
- nsecs_t downTime;
- };
-
- struct NotifyMotionArgs {
- nsecs_t eventTime;
- int32_t deviceId;
- uint32_t source;
- uint32_t policyFlags;
- int32_t action;
- int32_t flags;
- int32_t metaState;
- int32_t buttonState;
- int32_t edgeFlags;
- uint32_t pointerCount;
- Vector<PointerProperties> pointerProperties;
- Vector<PointerCoords> pointerCoords;
- float xPrecision;
- float yPrecision;
- nsecs_t downTime;
- };
-
- struct NotifySwitchArgs {
- nsecs_t when;
- int32_t switchCode;
- int32_t switchValue;
- uint32_t policyFlags;
- };
-
+class FakeInputListener : public InputListenerInterface {
private:
- List<NotifyConfigurationChangedArgs> mNotifyConfigurationChangedArgs;
- List<NotifyKeyArgs> mNotifyKeyArgs;
- List<NotifyMotionArgs> mNotifyMotionArgs;
- List<NotifySwitchArgs> mNotifySwitchArgs;
+ List<NotifyConfigurationChangedArgs> mNotifyConfigurationChangedArgsQueue;
+ List<NotifyKeyArgs> mNotifyKeyArgsQueue;
+ List<NotifyMotionArgs> mNotifyMotionArgsQueue;
+ List<NotifySwitchArgs> mNotifySwitchArgsQueue;
protected:
- virtual ~FakeInputDispatcher() { }
+ virtual ~FakeInputListener() { }
public:
- FakeInputDispatcher() {
+ FakeInputListener() {
}
- void assertNotifyConfigurationChangedWasCalled(NotifyConfigurationChangedArgs* outArgs = NULL) {
- ASSERT_FALSE(mNotifyConfigurationChangedArgs.empty())
+ void assertNotifyConfigurationChangedWasCalled(
+ NotifyConfigurationChangedArgs* outEventArgs = NULL) {
+ ASSERT_FALSE(mNotifyConfigurationChangedArgsQueue.empty())
<< "Expected notifyConfigurationChanged() to have been called.";
- if (outArgs) {
- *outArgs = *mNotifyConfigurationChangedArgs.begin();
+ if (outEventArgs) {
+ *outEventArgs = *mNotifyConfigurationChangedArgsQueue.begin();
}
- mNotifyConfigurationChangedArgs.erase(mNotifyConfigurationChangedArgs.begin());
+ mNotifyConfigurationChangedArgsQueue.erase(mNotifyConfigurationChangedArgsQueue.begin());
}
- void assertNotifyKeyWasCalled(NotifyKeyArgs* outArgs = NULL) {
- ASSERT_FALSE(mNotifyKeyArgs.empty())
+ void assertNotifyKeyWasCalled(NotifyKeyArgs* outEventArgs = NULL) {
+ ASSERT_FALSE(mNotifyKeyArgsQueue.empty())
<< "Expected notifyKey() to have been called.";
- if (outArgs) {
- *outArgs = *mNotifyKeyArgs.begin();
+ if (outEventArgs) {
+ *outEventArgs = *mNotifyKeyArgsQueue.begin();
}
- mNotifyKeyArgs.erase(mNotifyKeyArgs.begin());
+ mNotifyKeyArgsQueue.erase(mNotifyKeyArgsQueue.begin());
}
void assertNotifyKeyWasNotCalled() {
- ASSERT_TRUE(mNotifyKeyArgs.empty())
+ ASSERT_TRUE(mNotifyKeyArgsQueue.empty())
<< "Expected notifyKey() to not have been called.";
}
- void assertNotifyMotionWasCalled(NotifyMotionArgs* outArgs = NULL) {
- ASSERT_FALSE(mNotifyMotionArgs.empty())
+ void assertNotifyMotionWasCalled(NotifyMotionArgs* outEventArgs = NULL) {
+ ASSERT_FALSE(mNotifyMotionArgsQueue.empty())
<< "Expected notifyMotion() to have been called.";
- if (outArgs) {
- *outArgs = *mNotifyMotionArgs.begin();
+ if (outEventArgs) {
+ *outEventArgs = *mNotifyMotionArgsQueue.begin();
}
- mNotifyMotionArgs.erase(mNotifyMotionArgs.begin());
+ mNotifyMotionArgsQueue.erase(mNotifyMotionArgsQueue.begin());
}
void assertNotifyMotionWasNotCalled() {
- ASSERT_TRUE(mNotifyMotionArgs.empty())
+ ASSERT_TRUE(mNotifyMotionArgsQueue.empty())
<< "Expected notifyMotion() to not have been called.";
}
- void assertNotifySwitchWasCalled(NotifySwitchArgs* outArgs = NULL) {
- ASSERT_FALSE(mNotifySwitchArgs.empty())
+ void assertNotifySwitchWasCalled(NotifySwitchArgs* outEventArgs = NULL) {
+ ASSERT_FALSE(mNotifySwitchArgsQueue.empty())
<< "Expected notifySwitch() to have been called.";
- if (outArgs) {
- *outArgs = *mNotifySwitchArgs.begin();
+ if (outEventArgs) {
+ *outEventArgs = *mNotifySwitchArgsQueue.begin();
}
- mNotifySwitchArgs.erase(mNotifySwitchArgs.begin());
+ mNotifySwitchArgsQueue.erase(mNotifySwitchArgsQueue.begin());
}
private:
- virtual void notifyConfigurationChanged(nsecs_t eventTime) {
- NotifyConfigurationChangedArgs args;
- args.eventTime = eventTime;
- mNotifyConfigurationChangedArgs.push_back(args);
+ virtual void notifyConfigurationChanged(const NotifyConfigurationChangedArgs* args) {
+ mNotifyConfigurationChangedArgsQueue.push_back(*args);
}
- virtual void notifyKey(nsecs_t eventTime, int32_t deviceId, uint32_t source,
- uint32_t policyFlags, int32_t action, int32_t flags, int32_t keyCode,
- int32_t scanCode, int32_t metaState, nsecs_t downTime) {
- NotifyKeyArgs args;
- args.eventTime = eventTime;
- args.deviceId = deviceId;
- args.source = source;
- args.policyFlags = policyFlags;
- args.action = action;
- args.flags = flags;
- args.keyCode = keyCode;
- args.scanCode = scanCode;
- args.metaState = metaState;
- args.downTime = downTime;
- mNotifyKeyArgs.push_back(args);
+ virtual void notifyKey(const NotifyKeyArgs* args) {
+ mNotifyKeyArgsQueue.push_back(*args);
}
- virtual void notifyMotion(nsecs_t eventTime, int32_t deviceId, uint32_t source,
- uint32_t policyFlags, int32_t action, int32_t flags,
- int32_t metaState, int32_t buttonState, int32_t edgeFlags,
- uint32_t pointerCount, const PointerProperties* pointerProperties,
- const PointerCoords* pointerCoords,
- float xPrecision, float yPrecision, nsecs_t downTime) {
- NotifyMotionArgs args;
- args.eventTime = eventTime;
- args.deviceId = deviceId;
- args.source = source;
- args.policyFlags = policyFlags;
- args.action = action;
- args.flags = flags;
- args.metaState = metaState;
- args.buttonState = buttonState;
- args.edgeFlags = edgeFlags;
- args.pointerCount = pointerCount;
- args.pointerProperties.clear();
- args.pointerProperties.appendArray(pointerProperties, pointerCount);
- args.pointerCoords.clear();
- args.pointerCoords.appendArray(pointerCoords, pointerCount);
- args.xPrecision = xPrecision;
- args.yPrecision = yPrecision;
- args.downTime = downTime;
- mNotifyMotionArgs.push_back(args);
+ virtual void notifyMotion(const NotifyMotionArgs* args) {
+ mNotifyMotionArgsQueue.push_back(*args);
}
- virtual void notifySwitch(nsecs_t when,
- int32_t switchCode, int32_t switchValue, uint32_t policyFlags) {
- NotifySwitchArgs args;
- args.when = when;
- args.switchCode = switchCode;
- args.switchValue = switchValue;
- args.policyFlags = policyFlags;
- mNotifySwitchArgs.push_back(args);
- }
-
- virtual void dump(String8& dump) {
- ADD_FAILURE() << "Should never be called by input reader.";
- }
-
- virtual void dispatchOnce() {
- ADD_FAILURE() << "Should never be called by input reader.";
- }
-
- virtual int32_t injectInputEvent(const InputEvent* event,
- int32_t injectorPid, int32_t injectorUid, int32_t syncMode, int32_t timeoutMillis,
- uint32_t policyFlags) {
- ADD_FAILURE() << "Should never be called by input reader.";
- return INPUT_EVENT_INJECTION_FAILED;
- }
-
- virtual void setInputWindows(const Vector<sp<InputWindowHandle> >& inputWindowHandles) {
- ADD_FAILURE() << "Should never be called by input reader.";
- }
-
- virtual void setFocusedApplication(
- const sp<InputApplicationHandle>& inputApplicationHandle) {
- ADD_FAILURE() << "Should never be called by input reader.";
- }
-
- virtual void setInputDispatchMode(bool enabled, bool frozen) {
- ADD_FAILURE() << "Should never be called by input reader.";
- }
-
- virtual void setInputFilterEnabled(bool enabled) {
- ADD_FAILURE() << "Should never be called by input reader.";
- }
-
- virtual bool transferTouchFocus(const sp<InputChannel>& fromChannel,
- const sp<InputChannel>& toChannel) {
- ADD_FAILURE() << "Should never be called by input reader.";
- return 0;
- }
-
- virtual status_t registerInputChannel(const sp<InputChannel>& inputChannel,
- const sp<InputWindowHandle>& inputWindowHandle, bool monitor) {
- ADD_FAILURE() << "Should never be called by input reader.";
- return 0;
- }
-
- virtual status_t unregisterInputChannel(const sp<InputChannel>& inputChannel) {
- ADD_FAILURE() << "Should never be called by input reader.";
- return 0;
+ virtual void notifySwitch(const NotifySwitchArgs* args) {
+ mNotifySwitchArgsQueue.push_back(*args);
}
};
@@ -551,6 +426,10 @@
event.value = value;
event.flags = flags;
mEvents.push_back(event);
+
+ if (type == EV_ABS) {
+ setAbsoluteAxisValue(deviceId, scanCode, value);
+ }
}
void assertQueueIsEmpty() {
@@ -765,15 +644,15 @@
class FakeInputReaderContext : public InputReaderContext {
sp<EventHubInterface> mEventHub;
sp<InputReaderPolicyInterface> mPolicy;
- sp<InputDispatcherInterface> mDispatcher;
+ sp<InputListenerInterface> mListener;
int32_t mGlobalMetaState;
bool mUpdateGlobalMetaStateWasCalled;
public:
FakeInputReaderContext(const sp<EventHubInterface>& eventHub,
const sp<InputReaderPolicyInterface>& policy,
- const sp<InputDispatcherInterface>& dispatcher) :
- mEventHub(eventHub), mPolicy(policy), mDispatcher(dispatcher),
+ const sp<InputListenerInterface>& listener) :
+ mEventHub(eventHub), mPolicy(policy), mListener(listener),
mGlobalMetaState(0) {
}
@@ -806,8 +685,8 @@
return mPolicy.get();
}
- virtual InputDispatcherInterface* getDispatcher() {
- return mDispatcher.get();
+ virtual InputListenerInterface* getListener() {
+ return mListener.get();
}
virtual void disableVirtualKeysUntil(nsecs_t time) {
@@ -969,8 +848,8 @@
public:
InstrumentedInputReader(const sp<EventHubInterface>& eventHub,
const sp<InputReaderPolicyInterface>& policy,
- const sp<InputDispatcherInterface>& dispatcher) :
- InputReader(eventHub, policy, dispatcher),
+ const sp<InputListenerInterface>& listener) :
+ InputReader(eventHub, policy, listener),
mNextDevice(NULL) {
}
@@ -984,14 +863,19 @@
mNextDevice = device;
}
+ InputDevice* newDevice(int32_t deviceId, const String8& name) {
+ return new InputDevice(&mContext, deviceId, name);
+ }
+
protected:
- virtual InputDevice* createDevice(int32_t deviceId, const String8& name, uint32_t classes) {
+ virtual InputDevice* createDeviceLocked(int32_t deviceId,
+ const String8& name, uint32_t classes) {
if (mNextDevice) {
InputDevice* device = mNextDevice;
mNextDevice = NULL;
return device;
}
- return InputReader::createDevice(deviceId, name, classes);
+ return InputReader::createDeviceLocked(deviceId, name, classes);
}
friend class InputReaderTest;
@@ -1002,7 +886,7 @@
class InputReaderTest : public testing::Test {
protected:
- sp<FakeInputDispatcher> mFakeDispatcher;
+ sp<FakeInputListener> mFakeListener;
sp<FakeInputReaderPolicy> mFakePolicy;
sp<FakeEventHub> mFakeEventHub;
sp<InstrumentedInputReader> mReader;
@@ -1010,15 +894,15 @@
virtual void SetUp() {
mFakeEventHub = new FakeEventHub();
mFakePolicy = new FakeInputReaderPolicy();
- mFakeDispatcher = new FakeInputDispatcher();
+ mFakeListener = new FakeInputListener();
- mReader = new InstrumentedInputReader(mFakeEventHub, mFakePolicy, mFakeDispatcher);
+ mReader = new InstrumentedInputReader(mFakeEventHub, mFakePolicy, mFakeListener);
}
virtual void TearDown() {
mReader.clear();
- mFakeDispatcher.clear();
+ mFakeListener.clear();
mFakePolicy.clear();
mFakeEventHub.clear();
}
@@ -1038,7 +922,7 @@
FakeInputMapper* addDeviceWithFakeInputMapper(int32_t deviceId,
const String8& name, uint32_t classes, uint32_t sources,
const PropertyMap* configuration) {
- InputDevice* device = new InputDevice(mReader.get(), deviceId, name);
+ InputDevice* device = mReader->newDevice(deviceId, name);
FakeInputMapper* mapper = new FakeInputMapper(device, sources);
device->addMapper(mapper);
mReader->setNextDevice(device);
@@ -1304,8 +1188,9 @@
TEST_F(InputReaderTest, LoopOnce_WhenDeviceScanFinished_SendsConfigurationChanged) {
addDevice(1, String8("ignored"), INPUT_DEVICE_CLASS_KEYBOARD, NULL);
- FakeInputDispatcher::NotifyConfigurationChangedArgs args;
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyConfigurationChangedWasCalled(&args));
+ NotifyConfigurationChangedArgs args;
+
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyConfigurationChangedWasCalled(&args));
ASSERT_EQ(ARBITRARY_TIME, args.eventTime);
}
@@ -1339,7 +1224,7 @@
sp<FakeEventHub> mFakeEventHub;
sp<FakeInputReaderPolicy> mFakePolicy;
- sp<FakeInputDispatcher> mFakeDispatcher;
+ sp<FakeInputListener> mFakeListener;
FakeInputReaderContext* mFakeContext;
InputDevice* mDevice;
@@ -1347,8 +1232,8 @@
virtual void SetUp() {
mFakeEventHub = new FakeEventHub();
mFakePolicy = new FakeInputReaderPolicy();
- mFakeDispatcher = new FakeInputDispatcher();
- mFakeContext = new FakeInputReaderContext(mFakeEventHub, mFakePolicy, mFakeDispatcher);
+ mFakeListener = new FakeInputListener();
+ mFakeContext = new FakeInputReaderContext(mFakeEventHub, mFakePolicy, mFakeListener);
mFakeEventHub->addDevice(DEVICE_ID, String8(DEVICE_NAME), 0);
mDevice = new InputDevice(mFakeContext, DEVICE_ID, String8(DEVICE_NAME));
@@ -1358,7 +1243,7 @@
delete mDevice;
delete mFakeContext;
- mFakeDispatcher.clear();
+ mFakeListener.clear();
mFakePolicy.clear();
mFakeEventHub.clear();
}
@@ -1509,15 +1394,15 @@
sp<FakeEventHub> mFakeEventHub;
sp<FakeInputReaderPolicy> mFakePolicy;
- sp<FakeInputDispatcher> mFakeDispatcher;
+ sp<FakeInputListener> mFakeListener;
FakeInputReaderContext* mFakeContext;
InputDevice* mDevice;
virtual void SetUp() {
mFakeEventHub = new FakeEventHub();
mFakePolicy = new FakeInputReaderPolicy();
- mFakeDispatcher = new FakeInputDispatcher();
- mFakeContext = new FakeInputReaderContext(mFakeEventHub, mFakePolicy, mFakeDispatcher);
+ mFakeListener = new FakeInputListener();
+ mFakeContext = new FakeInputReaderContext(mFakeEventHub, mFakePolicy, mFakeListener);
mDevice = new InputDevice(mFakeContext, DEVICE_ID, String8(DEVICE_NAME));
mFakeEventHub->addDevice(DEVICE_ID, String8(DEVICE_NAME), 0);
@@ -1526,7 +1411,7 @@
virtual void TearDown() {
delete mDevice;
delete mFakeContext;
- mFakeDispatcher.clear();
+ mFakeListener.clear();
mFakePolicy.clear();
mFakeEventHub.clear();
}
@@ -1570,7 +1455,7 @@
static void assertPointerCoords(const PointerCoords& coords,
float x, float y, float pressure, float size,
float touchMajor, float touchMinor, float toolMajor, float toolMinor,
- float orientation) {
+ float orientation, float distance) {
ASSERT_NEAR(x, coords.getAxisValue(AMOTION_EVENT_AXIS_X), 1);
ASSERT_NEAR(y, coords.getAxisValue(AMOTION_EVENT_AXIS_Y), 1);
ASSERT_NEAR(pressure, coords.getAxisValue(AMOTION_EVENT_AXIS_PRESSURE), EPSILON);
@@ -1580,6 +1465,14 @@
ASSERT_NEAR(toolMajor, coords.getAxisValue(AMOTION_EVENT_AXIS_TOOL_MAJOR), 1);
ASSERT_NEAR(toolMinor, coords.getAxisValue(AMOTION_EVENT_AXIS_TOOL_MINOR), 1);
ASSERT_NEAR(orientation, coords.getAxisValue(AMOTION_EVENT_AXIS_ORIENTATION), EPSILON);
+ ASSERT_NEAR(distance, coords.getAxisValue(AMOTION_EVENT_AXIS_DISTANCE), EPSILON);
+ }
+
+ static void assertPosition(const sp<FakePointerController>& controller, float x, float y) {
+ float actualX, actualY;
+ controller->getPosition(&actualX, &actualY);
+ ASSERT_NEAR(x, actualX, 1);
+ ASSERT_NEAR(y, actualY, 1);
}
};
@@ -1617,9 +1510,9 @@
process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_SW, SW_LID, 0, 1, 0);
- FakeInputDispatcher::NotifySwitchArgs args;
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifySwitchWasCalled(&args));
- ASSERT_EQ(ARBITRARY_TIME, args.when);
+ NotifySwitchArgs args;
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifySwitchWasCalled(&args));
+ ASSERT_EQ(ARBITRARY_TIME, args.eventTime);
ASSERT_EQ(SW_LID, args.switchCode);
ASSERT_EQ(1, args.switchValue);
ASSERT_EQ(uint32_t(0), args.policyFlags);
@@ -1636,16 +1529,16 @@
void KeyboardInputMapperTest::testDPadKeyRotation(KeyboardInputMapper* mapper,
int32_t originalScanCode, int32_t originalKeyCode, int32_t rotatedKeyCode) {
- FakeInputDispatcher::NotifyKeyArgs args;
+ NotifyKeyArgs args;
process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_KEY, originalScanCode, originalKeyCode, 1, 0);
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyKeyWasCalled(&args));
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled(&args));
ASSERT_EQ(AKEY_EVENT_ACTION_DOWN, args.action);
ASSERT_EQ(originalScanCode, args.scanCode);
ASSERT_EQ(rotatedKeyCode, args.keyCode);
process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_KEY, originalScanCode, originalKeyCode, 0, 0);
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyKeyWasCalled(&args));
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled(&args));
ASSERT_EQ(AKEY_EVENT_ACTION_UP, args.action);
ASSERT_EQ(originalScanCode, args.scanCode);
ASSERT_EQ(rotatedKeyCode, args.keyCode);
@@ -1668,8 +1561,8 @@
// Key down.
process(mapper, ARBITRARY_TIME, DEVICE_ID,
EV_KEY, KEY_HOME, AKEYCODE_HOME, 1, POLICY_FLAG_WAKE);
- FakeInputDispatcher::NotifyKeyArgs args;
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyKeyWasCalled(&args));
+ NotifyKeyArgs args;
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled(&args));
ASSERT_EQ(DEVICE_ID, args.deviceId);
ASSERT_EQ(AINPUT_SOURCE_KEYBOARD, args.source);
ASSERT_EQ(ARBITRARY_TIME, args.eventTime);
@@ -1684,7 +1577,7 @@
// Key up.
process(mapper, ARBITRARY_TIME + 1, DEVICE_ID,
EV_KEY, KEY_HOME, AKEYCODE_HOME, 0, POLICY_FLAG_WAKE);
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyKeyWasCalled(&args));
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled(&args));
ASSERT_EQ(DEVICE_ID, args.deviceId);
ASSERT_EQ(AINPUT_SOURCE_KEYBOARD, args.source);
ASSERT_EQ(ARBITRARY_TIME + 1, args.eventTime);
@@ -1705,16 +1598,16 @@
// Key down.
process(mapper, ARBITRARY_TIME, DEVICE_ID,
EV_KEY, KEY_HOME, AKEYCODE_HOME, 1, POLICY_FLAG_WAKE);
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyKeyWasCalled());
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled());
// Key up.
process(mapper, ARBITRARY_TIME, DEVICE_ID,
EV_KEY, KEY_HOME, AKEYCODE_HOME, 0, POLICY_FLAG_WAKE);
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyKeyWasCalled());
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled());
// Reset. Since no keys still down, should not synthesize any key ups.
mapper->reset();
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyKeyWasNotCalled());
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasNotCalled());
}
TEST_F(KeyboardInputMapperTest, Reset_WhenKeysAreDown_SynthesizesKeyUps) {
@@ -1725,18 +1618,18 @@
// Metakey down.
process(mapper, ARBITRARY_TIME, DEVICE_ID,
EV_KEY, KEY_LEFTSHIFT, AKEYCODE_SHIFT_LEFT, 1, 0);
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyKeyWasCalled());
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled());
// Key down.
process(mapper, ARBITRARY_TIME + 1, DEVICE_ID,
EV_KEY, KEY_A, AKEYCODE_A, 1, 0);
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyKeyWasCalled());
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled());
// Reset. Since two keys are still down, should synthesize two key ups in reverse order.
mapper->reset();
- FakeInputDispatcher::NotifyKeyArgs args;
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyKeyWasCalled(&args));
+ NotifyKeyArgs args;
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled(&args));
ASSERT_EQ(DEVICE_ID, args.deviceId);
ASSERT_EQ(AINPUT_SOURCE_KEYBOARD, args.source);
ASSERT_EQ(AKEY_EVENT_ACTION_UP, args.action);
@@ -1747,7 +1640,7 @@
ASSERT_EQ(uint32_t(0), args.policyFlags);
ASSERT_EQ(ARBITRARY_TIME + 1, args.downTime);
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyKeyWasCalled(&args));
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled(&args));
ASSERT_EQ(DEVICE_ID, args.deviceId);
ASSERT_EQ(AINPUT_SOURCE_KEYBOARD, args.source);
ASSERT_EQ(AKEY_EVENT_ACTION_UP, args.action);
@@ -1759,7 +1652,7 @@
ASSERT_EQ(ARBITRARY_TIME + 1, args.downTime);
// And that's it.
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyKeyWasNotCalled());
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasNotCalled());
}
TEST_F(KeyboardInputMapperTest, Process_ShouldUpdateMetaState) {
@@ -1773,8 +1666,8 @@
// Metakey down.
process(mapper, ARBITRARY_TIME, DEVICE_ID,
EV_KEY, KEY_LEFTSHIFT, AKEYCODE_SHIFT_LEFT, 1, 0);
- FakeInputDispatcher::NotifyKeyArgs args;
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyKeyWasCalled(&args));
+ NotifyKeyArgs args;
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled(&args));
ASSERT_EQ(AMETA_SHIFT_LEFT_ON | AMETA_SHIFT_ON, args.metaState);
ASSERT_EQ(AMETA_SHIFT_LEFT_ON | AMETA_SHIFT_ON, mapper->getMetaState());
ASSERT_NO_FATAL_FAILURE(mFakeContext->assertUpdateGlobalMetaStateWasCalled());
@@ -1782,21 +1675,21 @@
// Key down.
process(mapper, ARBITRARY_TIME + 1, DEVICE_ID,
EV_KEY, KEY_A, AKEYCODE_A, 1, 0);
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyKeyWasCalled(&args));
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled(&args));
ASSERT_EQ(AMETA_SHIFT_LEFT_ON | AMETA_SHIFT_ON, args.metaState);
ASSERT_EQ(AMETA_SHIFT_LEFT_ON | AMETA_SHIFT_ON, mapper->getMetaState());
// Key up.
process(mapper, ARBITRARY_TIME + 2, DEVICE_ID,
EV_KEY, KEY_A, AKEYCODE_A, 0, 0);
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyKeyWasCalled(&args));
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled(&args));
ASSERT_EQ(AMETA_SHIFT_LEFT_ON | AMETA_SHIFT_ON, args.metaState);
ASSERT_EQ(AMETA_SHIFT_LEFT_ON | AMETA_SHIFT_ON, mapper->getMetaState());
// Metakey up.
process(mapper, ARBITRARY_TIME + 3, DEVICE_ID,
EV_KEY, KEY_LEFTSHIFT, AKEYCODE_SHIFT_LEFT, 0, 0);
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyKeyWasCalled(&args));
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled(&args));
ASSERT_EQ(AMETA_NONE, args.metaState);
ASSERT_EQ(AMETA_NONE, mapper->getMetaState());
ASSERT_NO_FATAL_FAILURE(mFakeContext->assertUpdateGlobalMetaStateWasCalled());
@@ -1876,13 +1769,13 @@
// Special case: if orientation changes while key is down, we still emit the same keycode
// in the key up as we did in the key down.
- FakeInputDispatcher::NotifyKeyArgs args;
+ NotifyKeyArgs args;
mFakePolicy->setDisplayInfo(DISPLAY_ID,
DISPLAY_WIDTH, DISPLAY_HEIGHT,
DISPLAY_ORIENTATION_270);
process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_KEY, KEY_UP, AKEYCODE_DPAD_UP, 1, 0);
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyKeyWasCalled(&args));
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled(&args));
ASSERT_EQ(AKEY_EVENT_ACTION_DOWN, args.action);
ASSERT_EQ(KEY_UP, args.scanCode);
ASSERT_EQ(AKEYCODE_DPAD_RIGHT, args.keyCode);
@@ -1891,7 +1784,7 @@
DISPLAY_WIDTH, DISPLAY_HEIGHT,
DISPLAY_ORIENTATION_180);
process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_KEY, KEY_UP, AKEYCODE_DPAD_UP, 0, 0);
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyKeyWasCalled(&args));
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled(&args));
ASSERT_EQ(AKEY_EVENT_ACTION_UP, args.action);
ASSERT_EQ(KEY_UP, args.scanCode);
ASSERT_EQ(AKEYCODE_DPAD_RIGHT, args.keyCode);
@@ -2034,17 +1927,17 @@
void CursorInputMapperTest::testMotionRotation(CursorInputMapper* mapper,
int32_t originalX, int32_t originalY, int32_t rotatedX, int32_t rotatedY) {
- FakeInputDispatcher::NotifyMotionArgs args;
+ NotifyMotionArgs args;
process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_REL, REL_X, 0, originalX, 0);
process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_REL, REL_Y, 0, originalY, 0);
process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_SYN, SYN_REPORT, 0, 0, 0);
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyMotionWasCalled(&args));
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&args));
ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, args.action);
ASSERT_NO_FATAL_FAILURE(assertPointerCoords(args.pointerCoords[0],
float(rotatedX) / TRACKBALL_MOVEMENT_THRESHOLD,
float(rotatedY) / TRACKBALL_MOVEMENT_THRESHOLD,
- 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
+ 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
}
TEST_F(CursorInputMapperTest, WhenModeIsPointer_GetSources_ReturnsMouse) {
@@ -2120,13 +2013,13 @@
mFakeContext->setGlobalMetaState(AMETA_SHIFT_LEFT_ON | AMETA_SHIFT_ON);
- FakeInputDispatcher::NotifyMotionArgs args;
+ NotifyMotionArgs args;
// Button press.
// Mostly testing non x/y behavior here so we don't need to check again elsewhere.
process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_KEY, BTN_MOUSE, 0, 1, 0);
process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_SYN, SYN_REPORT, 0, 0, 0);
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyMotionWasCalled(&args));
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&args));
ASSERT_EQ(ARBITRARY_TIME, args.eventTime);
ASSERT_EQ(DEVICE_ID, args.deviceId);
ASSERT_EQ(AINPUT_SOURCE_TRACKBALL, args.source);
@@ -2140,7 +2033,7 @@
ASSERT_EQ(0, args.pointerProperties[0].id);
ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_MOUSE, args.pointerProperties[0].toolType);
ASSERT_NO_FATAL_FAILURE(assertPointerCoords(args.pointerCoords[0],
- 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
+ 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
ASSERT_EQ(TRACKBALL_MOVEMENT_THRESHOLD, args.xPrecision);
ASSERT_EQ(TRACKBALL_MOVEMENT_THRESHOLD, args.yPrecision);
ASSERT_EQ(ARBITRARY_TIME, args.downTime);
@@ -2148,7 +2041,7 @@
// Button release. Should have same down time.
process(mapper, ARBITRARY_TIME + 1, DEVICE_ID, EV_KEY, BTN_MOUSE, 0, 0, 0);
process(mapper, ARBITRARY_TIME + 1, DEVICE_ID, EV_SYN, SYN_REPORT, 0, 0, 0);
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyMotionWasCalled(&args));
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&args));
ASSERT_EQ(ARBITRARY_TIME + 1, args.eventTime);
ASSERT_EQ(DEVICE_ID, args.deviceId);
ASSERT_EQ(AINPUT_SOURCE_TRACKBALL, args.source);
@@ -2162,7 +2055,7 @@
ASSERT_EQ(0, args.pointerProperties[0].id);
ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_MOUSE, args.pointerProperties[0].toolType);
ASSERT_NO_FATAL_FAILURE(assertPointerCoords(args.pointerCoords[0],
- 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
+ 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
ASSERT_EQ(TRACKBALL_MOVEMENT_THRESHOLD, args.xPrecision);
ASSERT_EQ(TRACKBALL_MOVEMENT_THRESHOLD, args.yPrecision);
ASSERT_EQ(ARBITRARY_TIME, args.downTime);
@@ -2173,23 +2066,23 @@
addConfigurationProperty("cursor.mode", "navigation");
addMapperAndConfigure(mapper);
- FakeInputDispatcher::NotifyMotionArgs args;
+ NotifyMotionArgs args;
// Motion in X but not Y.
process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_REL, REL_X, 0, 1, 0);
process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_SYN, SYN_REPORT, 0, 0, 0);
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyMotionWasCalled(&args));
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&args));
ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, args.action);
ASSERT_NO_FATAL_FAILURE(assertPointerCoords(args.pointerCoords[0],
- 1.0f / TRACKBALL_MOVEMENT_THRESHOLD, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
+ 1.0f / TRACKBALL_MOVEMENT_THRESHOLD, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
// Motion in Y but not X.
process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_REL, REL_Y, 0, -2, 0);
process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_SYN, SYN_REPORT, 0, 0, 0);
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyMotionWasCalled(&args));
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&args));
ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, args.action);
ASSERT_NO_FATAL_FAILURE(assertPointerCoords(args.pointerCoords[0],
- 0.0f, -2.0f / TRACKBALL_MOVEMENT_THRESHOLD, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
+ 0.0f, -2.0f / TRACKBALL_MOVEMENT_THRESHOLD, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
}
TEST_F(CursorInputMapperTest, Process_ShouldHandleIndependentButtonUpdates) {
@@ -2197,23 +2090,23 @@
addConfigurationProperty("cursor.mode", "navigation");
addMapperAndConfigure(mapper);
- FakeInputDispatcher::NotifyMotionArgs args;
+ NotifyMotionArgs args;
- // Button press without following sync.
+ // Button press.
process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_KEY, BTN_MOUSE, 0, 1, 0);
process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_SYN, SYN_REPORT, 0, 0, 0);
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyMotionWasCalled(&args));
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&args));
ASSERT_EQ(AMOTION_EVENT_ACTION_DOWN, args.action);
ASSERT_NO_FATAL_FAILURE(assertPointerCoords(args.pointerCoords[0],
- 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
+ 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
- // Button release without following sync.
+ // Button release.
process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_KEY, BTN_MOUSE, 0, 0, 0);
process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_SYN, SYN_REPORT, 0, 0, 0);
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyMotionWasCalled(&args));
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&args));
ASSERT_EQ(AMOTION_EVENT_ACTION_UP, args.action);
ASSERT_NO_FATAL_FAILURE(assertPointerCoords(args.pointerCoords[0],
- 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
+ 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
}
TEST_F(CursorInputMapperTest, Process_ShouldHandleCombinedXYAndButtonUpdates) {
@@ -2221,36 +2114,36 @@
addConfigurationProperty("cursor.mode", "navigation");
addMapperAndConfigure(mapper);
- FakeInputDispatcher::NotifyMotionArgs args;
+ NotifyMotionArgs args;
// Combined X, Y and Button.
process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_REL, REL_X, 0, 1, 0);
process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_REL, REL_Y, 0, -2, 0);
process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_KEY, BTN_MOUSE, 0, 1, 0);
process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_SYN, SYN_REPORT, 0, 0, 0);
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyMotionWasCalled(&args));
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&args));
ASSERT_EQ(AMOTION_EVENT_ACTION_DOWN, args.action);
ASSERT_NO_FATAL_FAILURE(assertPointerCoords(args.pointerCoords[0],
1.0f / TRACKBALL_MOVEMENT_THRESHOLD, -2.0f / TRACKBALL_MOVEMENT_THRESHOLD,
- 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
+ 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
// Move X, Y a bit while pressed.
process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_REL, REL_X, 0, 2, 0);
process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_REL, REL_Y, 0, 1, 0);
process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_SYN, SYN_REPORT, 0, 0, 0);
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyMotionWasCalled(&args));
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&args));
ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, args.action);
ASSERT_NO_FATAL_FAILURE(assertPointerCoords(args.pointerCoords[0],
2.0f / TRACKBALL_MOVEMENT_THRESHOLD, 1.0f / TRACKBALL_MOVEMENT_THRESHOLD,
- 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
+ 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
// Release Button.
process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_KEY, BTN_MOUSE, 0, 0, 0);
process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_SYN, SYN_REPORT, 0, 0, 0);
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyMotionWasCalled(&args));
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&args));
ASSERT_EQ(AMOTION_EVENT_ACTION_UP, args.action);
ASSERT_NO_FATAL_FAILURE(assertPointerCoords(args.pointerCoords[0],
- 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
+ 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
}
TEST_F(CursorInputMapperTest, Reset_WhenButtonIsNotDown_ShouldNotSynthesizeButtonUp) {
@@ -2258,22 +2151,24 @@
addConfigurationProperty("cursor.mode", "navigation");
addMapperAndConfigure(mapper);
- FakeInputDispatcher::NotifyMotionArgs args;
+ NotifyMotionArgs args;
// Button press.
process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_KEY, BTN_MOUSE, 0, 1, 0);
process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_SYN, SYN_REPORT, 0, 0, 0);
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyMotionWasCalled(&args));
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&args));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_DOWN, args.action);
// Button release.
process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_KEY, BTN_MOUSE, 0, 0, 0);
process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_SYN, SYN_REPORT, 0, 0, 0);
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyMotionWasCalled(&args));
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&args));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_UP, args.action);
// Reset. Should not synthesize button up since button is not pressed.
mapper->reset();
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyMotionWasNotCalled());
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasNotCalled());
}
TEST_F(CursorInputMapperTest, Reset_WhenButtonIsDown_ShouldSynthesizeButtonUp) {
@@ -2281,20 +2176,20 @@
addConfigurationProperty("cursor.mode", "navigation");
addMapperAndConfigure(mapper);
- FakeInputDispatcher::NotifyMotionArgs args;
+ NotifyMotionArgs args;
// Button press.
process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_KEY, BTN_MOUSE, 0, 1, 0);
process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_SYN, SYN_REPORT, 0, 0, 0);
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyMotionWasCalled(&args));
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&args));
// Reset. Should synthesize button up.
mapper->reset();
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyMotionWasCalled(&args));
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&args));
ASSERT_EQ(AMOTION_EVENT_ACTION_UP, args.action);
ASSERT_NO_FATAL_FAILURE(assertPointerCoords(args.pointerCoords[0],
- 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
+ 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
}
TEST_F(CursorInputMapperTest, Process_WhenNotOrientationAware_ShouldNotRotateMotions) {
@@ -2366,6 +2261,203 @@
ASSERT_NO_FATAL_FAILURE(testMotionRotation(mapper, -1, 1, -1, -1));
}
+TEST_F(CursorInputMapperTest, Process_ShouldHandleAllButtons) {
+ CursorInputMapper* mapper = new CursorInputMapper(mDevice);
+ addConfigurationProperty("cursor.mode", "pointer");
+ addMapperAndConfigure(mapper);
+
+ mFakePointerController->setBounds(0, 0, 800 - 1, 480 - 1);
+ mFakePointerController->setPosition(100, 200);
+ mFakePointerController->setButtonState(0);
+
+ NotifyMotionArgs motionArgs;
+ NotifyKeyArgs keyArgs;
+
+ // press BTN_LEFT, release BTN_LEFT
+ process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_KEY, BTN_LEFT, 0, 1, 0);
+ process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_SYN, SYN_REPORT, 0, 0, 0);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_DOWN, motionArgs.action);
+ ASSERT_EQ(AMOTION_EVENT_BUTTON_PRIMARY, motionArgs.buttonState);
+ ASSERT_EQ(AMOTION_EVENT_BUTTON_PRIMARY, mFakePointerController->getButtonState());
+ ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
+ 100.0f, 200.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
+
+ process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_KEY, BTN_LEFT, 0, 0, 0);
+ process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_SYN, SYN_REPORT, 0, 0, 0);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(0, motionArgs.buttonState);
+ ASSERT_EQ(0, mFakePointerController->getButtonState());
+ ASSERT_EQ(AMOTION_EVENT_ACTION_UP, motionArgs.action);
+ ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
+ 100.0f, 200.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
+
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(0, motionArgs.buttonState);
+ ASSERT_EQ(0, mFakePointerController->getButtonState());
+ ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_MOVE, motionArgs.action);
+ ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
+ 100.0f, 200.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
+
+ // press BTN_RIGHT + BTN_MIDDLE, release BTN_RIGHT, release BTN_MIDDLE
+ process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_KEY, BTN_RIGHT, 0, 1, 0);
+ process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_KEY, BTN_MIDDLE, 0, 1, 0);
+ process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_SYN, SYN_REPORT, 0, 0, 0);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_DOWN, motionArgs.action);
+ ASSERT_EQ(AMOTION_EVENT_BUTTON_SECONDARY | AMOTION_EVENT_BUTTON_TERTIARY,
+ motionArgs.buttonState);
+ ASSERT_EQ(AMOTION_EVENT_BUTTON_SECONDARY | AMOTION_EVENT_BUTTON_TERTIARY,
+ mFakePointerController->getButtonState());
+ ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
+ 100.0f, 200.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
+
+ process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_KEY, BTN_RIGHT, 0, 0, 0);
+ process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_SYN, SYN_REPORT, 0, 0, 0);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_BUTTON_TERTIARY, motionArgs.buttonState);
+ ASSERT_EQ(AMOTION_EVENT_BUTTON_TERTIARY, mFakePointerController->getButtonState());
+ ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
+ ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
+ 100.0f, 200.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
+
+ process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_KEY, BTN_MIDDLE, 0, 0, 0);
+ process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_SYN, SYN_REPORT, 0, 0, 0);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(0, motionArgs.buttonState);
+ ASSERT_EQ(0, mFakePointerController->getButtonState());
+ ASSERT_EQ(AMOTION_EVENT_ACTION_UP, motionArgs.action);
+ ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
+ 100.0f, 200.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(0, motionArgs.buttonState);
+ ASSERT_EQ(0, mFakePointerController->getButtonState());
+ ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_MOVE, motionArgs.action);
+ ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
+ 100.0f, 200.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
+
+ // press BTN_BACK, release BTN_BACK
+ process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_KEY, BTN_BACK, 0, 1, 0);
+ process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_SYN, SYN_REPORT, 0, 0, 0);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled(&keyArgs));
+ ASSERT_EQ(AKEY_EVENT_ACTION_DOWN, keyArgs.action);
+ ASSERT_EQ(AKEYCODE_BACK, keyArgs.keyCode);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_BUTTON_BACK, motionArgs.buttonState);
+ ASSERT_EQ(AMOTION_EVENT_BUTTON_BACK, mFakePointerController->getButtonState());
+ ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_MOVE, motionArgs.action);
+ ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
+ 100.0f, 200.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
+
+ process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_KEY, BTN_BACK, 0, 0, 0);
+ process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_SYN, SYN_REPORT, 0, 0, 0);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(0, motionArgs.buttonState);
+ ASSERT_EQ(0, mFakePointerController->getButtonState());
+ ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_MOVE, motionArgs.action);
+ ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
+ 100.0f, 200.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled(&keyArgs));
+ ASSERT_EQ(AKEY_EVENT_ACTION_UP, keyArgs.action);
+ ASSERT_EQ(AKEYCODE_BACK, keyArgs.keyCode);
+
+ // press BTN_SIDE, release BTN_SIDE
+ process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_KEY, BTN_SIDE, 0, 1, 0);
+ process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_SYN, SYN_REPORT, 0, 0, 0);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled(&keyArgs));
+ ASSERT_EQ(AKEY_EVENT_ACTION_DOWN, keyArgs.action);
+ ASSERT_EQ(AKEYCODE_BACK, keyArgs.keyCode);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_BUTTON_BACK, motionArgs.buttonState);
+ ASSERT_EQ(AMOTION_EVENT_BUTTON_BACK, mFakePointerController->getButtonState());
+ ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_MOVE, motionArgs.action);
+ ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
+ 100.0f, 200.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
+
+ process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_KEY, BTN_SIDE, 0, 0, 0);
+ process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_SYN, SYN_REPORT, 0, 0, 0);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(0, motionArgs.buttonState);
+ ASSERT_EQ(0, mFakePointerController->getButtonState());
+ ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_MOVE, motionArgs.action);
+ ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
+ 100.0f, 200.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled(&keyArgs));
+ ASSERT_EQ(AKEY_EVENT_ACTION_UP, keyArgs.action);
+ ASSERT_EQ(AKEYCODE_BACK, keyArgs.keyCode);
+
+ // press BTN_FORWARD, release BTN_FORWARD
+ process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_KEY, BTN_FORWARD, 0, 1, 0);
+ process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_SYN, SYN_REPORT, 0, 0, 0);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled(&keyArgs));
+ ASSERT_EQ(AKEY_EVENT_ACTION_DOWN, keyArgs.action);
+ ASSERT_EQ(AKEYCODE_FORWARD, keyArgs.keyCode);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_BUTTON_FORWARD, motionArgs.buttonState);
+ ASSERT_EQ(AMOTION_EVENT_BUTTON_FORWARD, mFakePointerController->getButtonState());
+ ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_MOVE, motionArgs.action);
+ ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
+ 100.0f, 200.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
+
+ process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_KEY, BTN_FORWARD, 0, 0, 0);
+ process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_SYN, SYN_REPORT, 0, 0, 0);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(0, motionArgs.buttonState);
+ ASSERT_EQ(0, mFakePointerController->getButtonState());
+ ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_MOVE, motionArgs.action);
+ ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
+ 100.0f, 200.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled(&keyArgs));
+ ASSERT_EQ(AKEY_EVENT_ACTION_UP, keyArgs.action);
+ ASSERT_EQ(AKEYCODE_FORWARD, keyArgs.keyCode);
+
+ // press BTN_EXTRA, release BTN_EXTRA
+ process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_KEY, BTN_EXTRA, 0, 1, 0);
+ process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_SYN, SYN_REPORT, 0, 0, 0);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled(&keyArgs));
+ ASSERT_EQ(AKEY_EVENT_ACTION_DOWN, keyArgs.action);
+ ASSERT_EQ(AKEYCODE_FORWARD, keyArgs.keyCode);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_BUTTON_FORWARD, motionArgs.buttonState);
+ ASSERT_EQ(AMOTION_EVENT_BUTTON_FORWARD, mFakePointerController->getButtonState());
+ ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_MOVE, motionArgs.action);
+ ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
+ 100.0f, 200.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
+
+ process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_KEY, BTN_EXTRA, 0, 0, 0);
+ process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_SYN, SYN_REPORT, 0, 0, 0);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(0, motionArgs.buttonState);
+ ASSERT_EQ(0, mFakePointerController->getButtonState());
+ ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_MOVE, motionArgs.action);
+ ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
+ 100.0f, 200.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled(&keyArgs));
+ ASSERT_EQ(AKEY_EVENT_ACTION_UP, keyArgs.action);
+ ASSERT_EQ(AKEYCODE_FORWARD, keyArgs.keyCode);
+}
+
+TEST_F(CursorInputMapperTest, Process_WhenModeIsPointer_ShouldMoveThePointerAround) {
+ CursorInputMapper* mapper = new CursorInputMapper(mDevice);
+ addConfigurationProperty("cursor.mode", "pointer");
+ addMapperAndConfigure(mapper);
+
+ mFakePointerController->setBounds(0, 0, 800 - 1, 480 - 1);
+ mFakePointerController->setPosition(100, 200);
+ mFakePointerController->setButtonState(0);
+
+ NotifyMotionArgs args;
+
+ process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_REL, REL_X, 0, 10, 0);
+ process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_REL, REL_Y, 0, 20, 0);
+ process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_SYN, SYN_REPORT, 0, 0, 0);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&args));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_MOVE, args.action);
+ ASSERT_NO_FATAL_FAILURE(assertPointerCoords(args.pointerCoords[0],
+ 110.0f, 220.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
+ ASSERT_NO_FATAL_FAILURE(assertPosition(mFakePointerController, 110.0f, 220.0f));
+}
+
// --- TouchInputMapperTest ---
@@ -2383,8 +2475,12 @@
static const int32_t RAW_PRESSURE_MAX;
static const int32_t RAW_ORIENTATION_MIN;
static const int32_t RAW_ORIENTATION_MAX;
+ static const int32_t RAW_DISTANCE_MIN;
+ static const int32_t RAW_DISTANCE_MAX;
static const int32_t RAW_ID_MIN;
static const int32_t RAW_ID_MAX;
+ static const int32_t RAW_SLOT_MIN;
+ static const int32_t RAW_SLOT_MAX;
static const float X_PRECISION;
static const float Y_PRECISION;
@@ -2398,6 +2494,9 @@
ORIENTATION = 1 << 4,
MINOR = 1 << 5,
ID = 1 << 6,
+ DISTANCE = 1 << 7,
+ SLOT = 1 << 8,
+ TOOL_TYPE = 1 << 9,
};
void prepareDisplay(int32_t orientation);
@@ -2420,8 +2519,12 @@
const int32_t TouchInputMapperTest::RAW_PRESSURE_MAX = RAW_TOUCH_MAX;
const int32_t TouchInputMapperTest::RAW_ORIENTATION_MIN = -7;
const int32_t TouchInputMapperTest::RAW_ORIENTATION_MAX = 7;
+const int32_t TouchInputMapperTest::RAW_DISTANCE_MIN = 0;
+const int32_t TouchInputMapperTest::RAW_DISTANCE_MAX = 7;
const int32_t TouchInputMapperTest::RAW_ID_MIN = 0;
const int32_t TouchInputMapperTest::RAW_ID_MAX = 9;
+const int32_t TouchInputMapperTest::RAW_SLOT_MIN = 0;
+const int32_t TouchInputMapperTest::RAW_SLOT_MAX = 9;
const float TouchInputMapperTest::X_PRECISION = float(RAW_X_MAX - RAW_X_MIN + 1) / DISPLAY_WIDTH;
const float TouchInputMapperTest::Y_PRECISION = float(RAW_Y_MAX - RAW_Y_MIN + 1) / DISPLAY_HEIGHT;
@@ -2470,6 +2573,8 @@
void processUp(SingleTouchInputMapper* mappery);
void processPressure(SingleTouchInputMapper* mapper, int32_t pressure);
void processToolMajor(SingleTouchInputMapper* mapper, int32_t toolMajor);
+ void processDistance(SingleTouchInputMapper* mapper, int32_t distance);
+ void processKey(SingleTouchInputMapper* mapper, int32_t code, int32_t value);
void processSync(SingleTouchInputMapper* mapper);
};
@@ -2492,6 +2597,10 @@
mFakeEventHub->addAbsoluteAxis(DEVICE_ID, ABS_TOOL_WIDTH,
RAW_TOOL_MIN, RAW_TOOL_MAX, 0, 0);
}
+ if (axes & DISTANCE) {
+ mFakeEventHub->addAbsoluteAxis(DEVICE_ID, ABS_DISTANCE,
+ RAW_DISTANCE_MIN, RAW_DISTANCE_MAX, 0, 0);
+ }
}
void SingleTouchInputMapperTest::processDown(SingleTouchInputMapper* mapper, int32_t x, int32_t y) {
@@ -2519,6 +2628,16 @@
process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_ABS, ABS_TOOL_WIDTH, 0, toolMajor, 0);
}
+void SingleTouchInputMapperTest::processDistance(
+ SingleTouchInputMapper* mapper, int32_t distance) {
+ process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_ABS, ABS_DISTANCE, 0, distance, 0);
+}
+
+void SingleTouchInputMapperTest::processKey(
+ SingleTouchInputMapper* mapper, int32_t code, int32_t value) {
+ process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_KEY, code, 0, value, 0);
+}
+
void SingleTouchInputMapperTest::processSync(SingleTouchInputMapper* mapper) {
process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_SYN, SYN_REPORT, 0, 0, 0);
}
@@ -2581,14 +2700,14 @@
int32_t y = toRawY(VIRTUAL_KEYS[0].centerY);
processDown(mapper, x, y);
processSync(mapper);
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyKeyWasCalled());
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled());
ASSERT_EQ(AKEY_STATE_VIRTUAL, mapper->getKeyCodeState(AINPUT_SOURCE_ANY, AKEYCODE_HOME));
// Virtual key is up.
processUp(mapper);
processSync(mapper);
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyKeyWasCalled());
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled());
ASSERT_EQ(AKEY_STATE_UP, mapper->getKeyCodeState(AINPUT_SOURCE_ANY, AKEYCODE_HOME));
}
@@ -2610,14 +2729,14 @@
int32_t y = toRawY(VIRTUAL_KEYS[0].centerY);
processDown(mapper, x, y);
processSync(mapper);
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyKeyWasCalled());
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled());
ASSERT_EQ(AKEY_STATE_VIRTUAL, mapper->getScanCodeState(AINPUT_SOURCE_ANY, KEY_HOME));
// Virtual key is up.
processUp(mapper);
processSync(mapper);
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyKeyWasCalled());
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled());
ASSERT_EQ(AKEY_STATE_UP, mapper->getScanCodeState(AINPUT_SOURCE_ANY, KEY_HOME));
}
@@ -2656,13 +2775,13 @@
int32_t y = toRawY(VIRTUAL_KEYS[0].centerY);
processDown(mapper, x, y);
processSync(mapper);
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyKeyWasCalled());
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled());
// Reset. Since key is down, synthesize key up.
mapper->reset();
- FakeInputDispatcher::NotifyKeyArgs args;
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyKeyWasCalled(&args));
+ NotifyKeyArgs args;
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled(&args));
//ASSERT_EQ(ARBITRARY_TIME, args.eventTime);
ASSERT_EQ(DEVICE_ID, args.deviceId);
ASSERT_EQ(AINPUT_SOURCE_KEYBOARD, args.source);
@@ -2689,18 +2808,18 @@
int32_t y = toRawY(VIRTUAL_KEYS[0].centerY);
processDown(mapper, x, y);
processSync(mapper);
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyKeyWasCalled());
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled());
// Release virtual key.
processUp(mapper);
processSync(mapper);
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyKeyWasCalled());
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled());
// Reset. Since no key is down, nothing happens.
mapper->reset();
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyKeyWasNotCalled());
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyMotionWasNotCalled());
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasNotCalled());
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasNotCalled());
}
TEST_F(SingleTouchInputMapperTest, Process_WhenVirtualKeyIsPressedAndReleasedNormally_SendsKeyDownAndKeyUp) {
@@ -2714,7 +2833,7 @@
mFakeContext->setGlobalMetaState(AMETA_SHIFT_LEFT_ON | AMETA_SHIFT_ON);
- FakeInputDispatcher::NotifyKeyArgs args;
+ NotifyKeyArgs args;
// Press virtual key.
int32_t x = toRawX(VIRTUAL_KEYS[0].centerX);
@@ -2722,7 +2841,7 @@
processDown(mapper, x, y);
processSync(mapper);
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyKeyWasCalled(&args));
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled(&args));
ASSERT_EQ(ARBITRARY_TIME, args.eventTime);
ASSERT_EQ(DEVICE_ID, args.deviceId);
ASSERT_EQ(AINPUT_SOURCE_KEYBOARD, args.source);
@@ -2738,7 +2857,7 @@
processUp(mapper);
processSync(mapper);
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyKeyWasCalled(&args));
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled(&args));
ASSERT_EQ(ARBITRARY_TIME, args.eventTime);
ASSERT_EQ(DEVICE_ID, args.deviceId);
ASSERT_EQ(AINPUT_SOURCE_KEYBOARD, args.source);
@@ -2751,7 +2870,7 @@
ASSERT_EQ(ARBITRARY_TIME, args.downTime);
// Should not have sent any motions.
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyKeyWasNotCalled());
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasNotCalled());
}
TEST_F(SingleTouchInputMapperTest, Process_WhenVirtualKeyIsPressedAndMovedOutOfBounds_SendsKeyDownAndKeyCancel) {
@@ -2765,7 +2884,7 @@
mFakeContext->setGlobalMetaState(AMETA_SHIFT_LEFT_ON | AMETA_SHIFT_ON);
- FakeInputDispatcher::NotifyKeyArgs keyArgs;
+ NotifyKeyArgs keyArgs;
// Press virtual key.
int32_t x = toRawX(VIRTUAL_KEYS[0].centerX);
@@ -2773,7 +2892,7 @@
processDown(mapper, x, y);
processSync(mapper);
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyKeyWasCalled(&keyArgs));
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled(&keyArgs));
ASSERT_EQ(ARBITRARY_TIME, keyArgs.eventTime);
ASSERT_EQ(DEVICE_ID, keyArgs.deviceId);
ASSERT_EQ(AINPUT_SOURCE_KEYBOARD, keyArgs.source);
@@ -2791,7 +2910,7 @@
processMove(mapper, x, y);
processSync(mapper);
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyKeyWasCalled(&keyArgs));
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled(&keyArgs));
ASSERT_EQ(ARBITRARY_TIME, keyArgs.eventTime);
ASSERT_EQ(DEVICE_ID, keyArgs.deviceId);
ASSERT_EQ(AINPUT_SOURCE_KEYBOARD, keyArgs.source);
@@ -2804,8 +2923,8 @@
ASSERT_EQ(AMETA_SHIFT_LEFT_ON | AMETA_SHIFT_ON, keyArgs.metaState);
ASSERT_EQ(ARBITRARY_TIME, keyArgs.downTime);
- FakeInputDispatcher::NotifyMotionArgs motionArgs;
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyMotionWasCalled(&motionArgs));
+ NotifyMotionArgs motionArgs;
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
ASSERT_EQ(ARBITRARY_TIME, motionArgs.eventTime);
ASSERT_EQ(DEVICE_ID, motionArgs.deviceId);
ASSERT_EQ(AINPUT_SOURCE_TOUCHSCREEN, motionArgs.source);
@@ -2819,7 +2938,7 @@
ASSERT_EQ(0, motionArgs.pointerProperties[0].id);
ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
- toDisplayX(x), toDisplayY(y), 1, 0, 0, 0, 0, 0, 0));
+ toDisplayX(x), toDisplayY(y), 1, 0, 0, 0, 0, 0, 0, 0));
ASSERT_NEAR(X_PRECISION, motionArgs.xPrecision, EPSILON);
ASSERT_NEAR(Y_PRECISION, motionArgs.yPrecision, EPSILON);
ASSERT_EQ(ARBITRARY_TIME, motionArgs.downTime);
@@ -2829,7 +2948,7 @@
processMove(mapper, x, y);
processSync(mapper);
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
ASSERT_EQ(ARBITRARY_TIME, motionArgs.eventTime);
ASSERT_EQ(DEVICE_ID, motionArgs.deviceId);
ASSERT_EQ(AINPUT_SOURCE_TOUCHSCREEN, motionArgs.source);
@@ -2843,7 +2962,7 @@
ASSERT_EQ(0, motionArgs.pointerProperties[0].id);
ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
- toDisplayX(x), toDisplayY(y), 1, 0, 0, 0, 0, 0, 0));
+ toDisplayX(x), toDisplayY(y), 1, 0, 0, 0, 0, 0, 0, 0));
ASSERT_NEAR(X_PRECISION, motionArgs.xPrecision, EPSILON);
ASSERT_NEAR(Y_PRECISION, motionArgs.yPrecision, EPSILON);
ASSERT_EQ(ARBITRARY_TIME, motionArgs.downTime);
@@ -2852,7 +2971,7 @@
processUp(mapper);
processSync(mapper);
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
ASSERT_EQ(ARBITRARY_TIME, motionArgs.eventTime);
ASSERT_EQ(DEVICE_ID, motionArgs.deviceId);
ASSERT_EQ(AINPUT_SOURCE_TOUCHSCREEN, motionArgs.source);
@@ -2866,14 +2985,14 @@
ASSERT_EQ(0, motionArgs.pointerProperties[0].id);
ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
- toDisplayX(x), toDisplayY(y), 1, 0, 0, 0, 0, 0, 0));
+ toDisplayX(x), toDisplayY(y), 1, 0, 0, 0, 0, 0, 0, 0));
ASSERT_NEAR(X_PRECISION, motionArgs.xPrecision, EPSILON);
ASSERT_NEAR(Y_PRECISION, motionArgs.yPrecision, EPSILON);
ASSERT_EQ(ARBITRARY_TIME, motionArgs.downTime);
// Should not have sent any more keys or motions.
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyKeyWasNotCalled());
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyMotionWasNotCalled());
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasNotCalled());
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasNotCalled());
}
TEST_F(SingleTouchInputMapperTest, Process_WhenTouchStartsOutsideDisplayAndMovesIn_SendsDownAsTouchEntersDisplay) {
@@ -2887,7 +3006,7 @@
mFakeContext->setGlobalMetaState(AMETA_SHIFT_LEFT_ON | AMETA_SHIFT_ON);
- FakeInputDispatcher::NotifyMotionArgs motionArgs;
+ NotifyMotionArgs motionArgs;
// Initially go down out of bounds.
int32_t x = -10;
@@ -2895,7 +3014,7 @@
processDown(mapper, x, y);
processSync(mapper);
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyMotionWasNotCalled());
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasNotCalled());
// Move into the display area. Should generate a pointer down.
x = 50;
@@ -2903,7 +3022,7 @@
processMove(mapper, x, y);
processSync(mapper);
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
ASSERT_EQ(ARBITRARY_TIME, motionArgs.eventTime);
ASSERT_EQ(DEVICE_ID, motionArgs.deviceId);
ASSERT_EQ(AINPUT_SOURCE_TOUCHSCREEN, motionArgs.source);
@@ -2917,7 +3036,7 @@
ASSERT_EQ(0, motionArgs.pointerProperties[0].id);
ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
- toDisplayX(x), toDisplayY(y), 1, 0, 0, 0, 0, 0, 0));
+ toDisplayX(x), toDisplayY(y), 1, 0, 0, 0, 0, 0, 0, 0));
ASSERT_NEAR(X_PRECISION, motionArgs.xPrecision, EPSILON);
ASSERT_NEAR(Y_PRECISION, motionArgs.yPrecision, EPSILON);
ASSERT_EQ(ARBITRARY_TIME, motionArgs.downTime);
@@ -2926,7 +3045,7 @@
processUp(mapper);
processSync(mapper);
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
ASSERT_EQ(ARBITRARY_TIME, motionArgs.eventTime);
ASSERT_EQ(DEVICE_ID, motionArgs.deviceId);
ASSERT_EQ(AINPUT_SOURCE_TOUCHSCREEN, motionArgs.source);
@@ -2940,14 +3059,14 @@
ASSERT_EQ(0, motionArgs.pointerProperties[0].id);
ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
- toDisplayX(x), toDisplayY(y), 1, 0, 0, 0, 0, 0, 0));
+ toDisplayX(x), toDisplayY(y), 1, 0, 0, 0, 0, 0, 0, 0));
ASSERT_NEAR(X_PRECISION, motionArgs.xPrecision, EPSILON);
ASSERT_NEAR(Y_PRECISION, motionArgs.yPrecision, EPSILON);
ASSERT_EQ(ARBITRARY_TIME, motionArgs.downTime);
// Should not have sent any more keys or motions.
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyKeyWasNotCalled());
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyMotionWasNotCalled());
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasNotCalled());
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasNotCalled());
}
TEST_F(SingleTouchInputMapperTest, Process_NormalSingleTouchGesture) {
@@ -2961,7 +3080,7 @@
mFakeContext->setGlobalMetaState(AMETA_SHIFT_LEFT_ON | AMETA_SHIFT_ON);
- FakeInputDispatcher::NotifyMotionArgs motionArgs;
+ NotifyMotionArgs motionArgs;
// Down.
int32_t x = 100;
@@ -2969,7 +3088,7 @@
processDown(mapper, x, y);
processSync(mapper);
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
ASSERT_EQ(ARBITRARY_TIME, motionArgs.eventTime);
ASSERT_EQ(DEVICE_ID, motionArgs.deviceId);
ASSERT_EQ(AINPUT_SOURCE_TOUCHSCREEN, motionArgs.source);
@@ -2983,7 +3102,7 @@
ASSERT_EQ(0, motionArgs.pointerProperties[0].id);
ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
- toDisplayX(x), toDisplayY(y), 1, 0, 0, 0, 0, 0, 0));
+ toDisplayX(x), toDisplayY(y), 1, 0, 0, 0, 0, 0, 0, 0));
ASSERT_NEAR(X_PRECISION, motionArgs.xPrecision, EPSILON);
ASSERT_NEAR(Y_PRECISION, motionArgs.yPrecision, EPSILON);
ASSERT_EQ(ARBITRARY_TIME, motionArgs.downTime);
@@ -2994,7 +3113,7 @@
processMove(mapper, x, y);
processSync(mapper);
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
ASSERT_EQ(ARBITRARY_TIME, motionArgs.eventTime);
ASSERT_EQ(DEVICE_ID, motionArgs.deviceId);
ASSERT_EQ(AINPUT_SOURCE_TOUCHSCREEN, motionArgs.source);
@@ -3008,7 +3127,7 @@
ASSERT_EQ(0, motionArgs.pointerProperties[0].id);
ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
- toDisplayX(x), toDisplayY(y), 1, 0, 0, 0, 0, 0, 0));
+ toDisplayX(x), toDisplayY(y), 1, 0, 0, 0, 0, 0, 0, 0));
ASSERT_NEAR(X_PRECISION, motionArgs.xPrecision, EPSILON);
ASSERT_NEAR(Y_PRECISION, motionArgs.yPrecision, EPSILON);
ASSERT_EQ(ARBITRARY_TIME, motionArgs.downTime);
@@ -3017,7 +3136,7 @@
processUp(mapper);
processSync(mapper);
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
ASSERT_EQ(ARBITRARY_TIME, motionArgs.eventTime);
ASSERT_EQ(DEVICE_ID, motionArgs.deviceId);
ASSERT_EQ(AINPUT_SOURCE_TOUCHSCREEN, motionArgs.source);
@@ -3031,14 +3150,14 @@
ASSERT_EQ(0, motionArgs.pointerProperties[0].id);
ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
- toDisplayX(x), toDisplayY(y), 1, 0, 0, 0, 0, 0, 0));
+ toDisplayX(x), toDisplayY(y), 1, 0, 0, 0, 0, 0, 0, 0));
ASSERT_NEAR(X_PRECISION, motionArgs.xPrecision, EPSILON);
ASSERT_NEAR(Y_PRECISION, motionArgs.yPrecision, EPSILON);
ASSERT_EQ(ARBITRARY_TIME, motionArgs.downTime);
// Should not have sent any more keys or motions.
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyKeyWasNotCalled());
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyMotionWasNotCalled());
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasNotCalled());
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasNotCalled());
}
TEST_F(SingleTouchInputMapperTest, Process_WhenNotOrientationAware_DoesNotRotateMotions) {
@@ -3049,20 +3168,20 @@
addConfigurationProperty("touch.orientationAware", "0");
addMapperAndConfigure(mapper);
- FakeInputDispatcher::NotifyMotionArgs args;
+ NotifyMotionArgs args;
// Rotation 90.
prepareDisplay(DISPLAY_ORIENTATION_90);
processDown(mapper, toRawX(50), toRawY(75));
processSync(mapper);
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyMotionWasCalled(&args));
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&args));
ASSERT_NEAR(50, args.pointerCoords[0].getAxisValue(AMOTION_EVENT_AXIS_X), 1);
ASSERT_NEAR(75, args.pointerCoords[0].getAxisValue(AMOTION_EVENT_AXIS_Y), 1);
processUp(mapper);
processSync(mapper);
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyMotionWasCalled());
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled());
}
TEST_F(SingleTouchInputMapperTest, Process_WhenOrientationAware_RotatesMotions) {
@@ -3072,59 +3191,59 @@
prepareAxes(POSITION);
addMapperAndConfigure(mapper);
- FakeInputDispatcher::NotifyMotionArgs args;
+ NotifyMotionArgs args;
// Rotation 0.
prepareDisplay(DISPLAY_ORIENTATION_0);
processDown(mapper, toRawX(50), toRawY(75));
processSync(mapper);
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyMotionWasCalled(&args));
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&args));
ASSERT_NEAR(50, args.pointerCoords[0].getAxisValue(AMOTION_EVENT_AXIS_X), 1);
ASSERT_NEAR(75, args.pointerCoords[0].getAxisValue(AMOTION_EVENT_AXIS_Y), 1);
processUp(mapper);
processSync(mapper);
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyMotionWasCalled());
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled());
// Rotation 90.
prepareDisplay(DISPLAY_ORIENTATION_90);
processDown(mapper, RAW_X_MAX - toRawX(75) + RAW_X_MIN, toRawY(50));
processSync(mapper);
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyMotionWasCalled(&args));
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&args));
ASSERT_NEAR(50, args.pointerCoords[0].getAxisValue(AMOTION_EVENT_AXIS_X), 1);
ASSERT_NEAR(75, args.pointerCoords[0].getAxisValue(AMOTION_EVENT_AXIS_Y), 1);
processUp(mapper);
processSync(mapper);
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyMotionWasCalled());
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled());
// Rotation 180.
prepareDisplay(DISPLAY_ORIENTATION_180);
processDown(mapper, RAW_X_MAX - toRawX(50) + RAW_X_MIN, RAW_Y_MAX - toRawY(75) + RAW_Y_MIN);
processSync(mapper);
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyMotionWasCalled(&args));
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&args));
ASSERT_NEAR(50, args.pointerCoords[0].getAxisValue(AMOTION_EVENT_AXIS_X), 1);
ASSERT_NEAR(75, args.pointerCoords[0].getAxisValue(AMOTION_EVENT_AXIS_Y), 1);
processUp(mapper);
processSync(mapper);
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyMotionWasCalled());
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled());
// Rotation 270.
prepareDisplay(DISPLAY_ORIENTATION_270);
processDown(mapper, toRawX(75), RAW_Y_MAX - toRawY(50) + RAW_Y_MIN);
processSync(mapper);
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyMotionWasCalled(&args));
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&args));
ASSERT_NEAR(50, args.pointerCoords[0].getAxisValue(AMOTION_EVENT_AXIS_X), 1);
ASSERT_NEAR(75, args.pointerCoords[0].getAxisValue(AMOTION_EVENT_AXIS_Y), 1);
processUp(mapper);
processSync(mapper);
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyMotionWasCalled());
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled());
}
TEST_F(SingleTouchInputMapperTest, Process_AllAxes_DefaultCalibration) {
@@ -3132,7 +3251,7 @@
addConfigurationProperty("touch.deviceType", "touchScreen");
prepareDisplay(DISPLAY_ORIENTATION_0);
prepareButtons();
- prepareAxes(POSITION | PRESSURE | TOOL);
+ prepareAxes(POSITION | PRESSURE | TOOL | DISTANCE);
addMapperAndConfigure(mapper);
// These calculations are based on the input device calibration documentation.
@@ -3140,6 +3259,7 @@
int32_t rawY = 200;
int32_t rawPressure = 10;
int32_t rawToolMajor = 12;
+ int32_t rawDistance = 0;
float x = toDisplayX(rawX);
float y = toDisplayY(rawY);
@@ -3147,16 +3267,388 @@
float size = float(rawToolMajor) / RAW_TOOL_MAX;
float tool = min(DISPLAY_WIDTH, DISPLAY_HEIGHT) * size;
float touch = min(tool * pressure, tool);
+ float distance = float(rawDistance);
processDown(mapper, rawX, rawY);
processPressure(mapper, rawPressure);
processToolMajor(mapper, rawToolMajor);
+ processDistance(mapper, rawDistance);
processSync(mapper);
- FakeInputDispatcher::NotifyMotionArgs args;
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyMotionWasCalled(&args));
+ NotifyMotionArgs args;
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&args));
ASSERT_NO_FATAL_FAILURE(assertPointerCoords(args.pointerCoords[0],
- x, y, pressure, size, touch, touch, tool, tool, 0));
+ x, y, pressure, size, touch, touch, tool, tool, 0, distance));
+}
+
+TEST_F(SingleTouchInputMapperTest, Process_ShouldHandleAllButtons) {
+ SingleTouchInputMapper* mapper = new SingleTouchInputMapper(mDevice);
+ addConfigurationProperty("touch.deviceType", "touchScreen");
+ prepareDisplay(DISPLAY_ORIENTATION_0);
+ prepareButtons();
+ prepareAxes(POSITION);
+ addMapperAndConfigure(mapper);
+
+ NotifyMotionArgs motionArgs;
+ NotifyKeyArgs keyArgs;
+
+ processDown(mapper, 100, 200);
+ processSync(mapper);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_DOWN, motionArgs.action);
+ ASSERT_EQ(0, motionArgs.buttonState);
+
+ // press BTN_LEFT, release BTN_LEFT
+ processKey(mapper, BTN_LEFT, 1);
+ processSync(mapper);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
+ ASSERT_EQ(AMOTION_EVENT_BUTTON_PRIMARY, motionArgs.buttonState);
+
+ processKey(mapper, BTN_LEFT, 0);
+ processSync(mapper);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(0, motionArgs.buttonState);
+ ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
+
+ // press BTN_RIGHT + BTN_MIDDLE, release BTN_RIGHT, release BTN_MIDDLE
+ processKey(mapper, BTN_RIGHT, 1);
+ processKey(mapper, BTN_MIDDLE, 1);
+ processSync(mapper);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
+ ASSERT_EQ(AMOTION_EVENT_BUTTON_SECONDARY | AMOTION_EVENT_BUTTON_TERTIARY,
+ motionArgs.buttonState);
+
+ processKey(mapper, BTN_RIGHT, 0);
+ processSync(mapper);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_BUTTON_TERTIARY, motionArgs.buttonState);
+ ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
+
+ processKey(mapper, BTN_MIDDLE, 0);
+ processSync(mapper);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(0, motionArgs.buttonState);
+ ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
+
+ // press BTN_BACK, release BTN_BACK
+ processKey(mapper, BTN_BACK, 1);
+ processSync(mapper);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled(&keyArgs));
+ ASSERT_EQ(AKEY_EVENT_ACTION_DOWN, keyArgs.action);
+ ASSERT_EQ(AKEYCODE_BACK, keyArgs.keyCode);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_BUTTON_BACK, motionArgs.buttonState);
+ ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
+
+ processKey(mapper, BTN_BACK, 0);
+ processSync(mapper);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(0, motionArgs.buttonState);
+ ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled(&keyArgs));
+ ASSERT_EQ(AKEY_EVENT_ACTION_UP, keyArgs.action);
+ ASSERT_EQ(AKEYCODE_BACK, keyArgs.keyCode);
+
+ // press BTN_SIDE, release BTN_SIDE
+ processKey(mapper, BTN_SIDE, 1);
+ processSync(mapper);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled(&keyArgs));
+ ASSERT_EQ(AKEY_EVENT_ACTION_DOWN, keyArgs.action);
+ ASSERT_EQ(AKEYCODE_BACK, keyArgs.keyCode);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_BUTTON_BACK, motionArgs.buttonState);
+ ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
+
+ processKey(mapper, BTN_SIDE, 0);
+ processSync(mapper);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(0, motionArgs.buttonState);
+ ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled(&keyArgs));
+ ASSERT_EQ(AKEY_EVENT_ACTION_UP, keyArgs.action);
+ ASSERT_EQ(AKEYCODE_BACK, keyArgs.keyCode);
+
+ // press BTN_FORWARD, release BTN_FORWARD
+ processKey(mapper, BTN_FORWARD, 1);
+ processSync(mapper);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled(&keyArgs));
+ ASSERT_EQ(AKEY_EVENT_ACTION_DOWN, keyArgs.action);
+ ASSERT_EQ(AKEYCODE_FORWARD, keyArgs.keyCode);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_BUTTON_FORWARD, motionArgs.buttonState);
+ ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
+
+ processKey(mapper, BTN_FORWARD, 0);
+ processSync(mapper);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(0, motionArgs.buttonState);
+ ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled(&keyArgs));
+ ASSERT_EQ(AKEY_EVENT_ACTION_UP, keyArgs.action);
+ ASSERT_EQ(AKEYCODE_FORWARD, keyArgs.keyCode);
+
+ // press BTN_EXTRA, release BTN_EXTRA
+ processKey(mapper, BTN_EXTRA, 1);
+ processSync(mapper);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled(&keyArgs));
+ ASSERT_EQ(AKEY_EVENT_ACTION_DOWN, keyArgs.action);
+ ASSERT_EQ(AKEYCODE_FORWARD, keyArgs.keyCode);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_BUTTON_FORWARD, motionArgs.buttonState);
+ ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
+
+ processKey(mapper, BTN_EXTRA, 0);
+ processSync(mapper);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(0, motionArgs.buttonState);
+ ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled(&keyArgs));
+ ASSERT_EQ(AKEY_EVENT_ACTION_UP, keyArgs.action);
+ ASSERT_EQ(AKEYCODE_FORWARD, keyArgs.keyCode);
+
+ // press BTN_STYLUS, release BTN_STYLUS
+ processKey(mapper, BTN_STYLUS, 1);
+ processSync(mapper);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
+ ASSERT_EQ(AMOTION_EVENT_BUTTON_SECONDARY, motionArgs.buttonState);
+
+ processKey(mapper, BTN_STYLUS, 0);
+ processSync(mapper);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(0, motionArgs.buttonState);
+ ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
+
+ // press BTN_STYLUS2, release BTN_STYLUS2
+ processKey(mapper, BTN_STYLUS2, 1);
+ processSync(mapper);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
+ ASSERT_EQ(AMOTION_EVENT_BUTTON_TERTIARY, motionArgs.buttonState);
+
+ processKey(mapper, BTN_STYLUS2, 0);
+ processSync(mapper);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(0, motionArgs.buttonState);
+ ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
+
+ // release touch
+ processUp(mapper);
+ processSync(mapper);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_UP, motionArgs.action);
+ ASSERT_EQ(0, motionArgs.buttonState);
+}
+
+TEST_F(SingleTouchInputMapperTest, Process_ShouldHandleAllToolTypes) {
+ SingleTouchInputMapper* mapper = new SingleTouchInputMapper(mDevice);
+ addConfigurationProperty("touch.deviceType", "touchScreen");
+ prepareDisplay(DISPLAY_ORIENTATION_0);
+ prepareButtons();
+ prepareAxes(POSITION);
+ addMapperAndConfigure(mapper);
+
+ NotifyMotionArgs motionArgs;
+
+ // default tool type is finger
+ processDown(mapper, 100, 200);
+ processSync(mapper);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_DOWN, motionArgs.action);
+ ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
+
+ // eraser
+ processKey(mapper, BTN_TOOL_RUBBER, 1);
+ processSync(mapper);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
+ ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_ERASER, motionArgs.pointerProperties[0].toolType);
+
+ // stylus
+ processKey(mapper, BTN_TOOL_RUBBER, 0);
+ processKey(mapper, BTN_TOOL_PEN, 1);
+ processSync(mapper);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
+ ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_STYLUS, motionArgs.pointerProperties[0].toolType);
+
+ // finger
+ processKey(mapper, BTN_TOOL_PEN, 0);
+ processKey(mapper, BTN_TOOL_FINGER, 1);
+ processSync(mapper);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
+ ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
+
+ // stylus trumps finger
+ processKey(mapper, BTN_TOOL_PEN, 1);
+ processSync(mapper);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
+ ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_STYLUS, motionArgs.pointerProperties[0].toolType);
+
+ // eraser trumps stylus
+ processKey(mapper, BTN_TOOL_RUBBER, 1);
+ processSync(mapper);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
+ ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_ERASER, motionArgs.pointerProperties[0].toolType);
+
+ // back to default tool type
+ processKey(mapper, BTN_TOOL_RUBBER, 0);
+ processKey(mapper, BTN_TOOL_PEN, 0);
+ processKey(mapper, BTN_TOOL_FINGER, 0);
+ processSync(mapper);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
+ ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
+}
+
+TEST_F(SingleTouchInputMapperTest, Process_WhenBtnTouchPresent_HoversIfItsValueIsZero) {
+ SingleTouchInputMapper* mapper = new SingleTouchInputMapper(mDevice);
+ addConfigurationProperty("touch.deviceType", "touchScreen");
+ prepareDisplay(DISPLAY_ORIENTATION_0);
+ prepareButtons();
+ prepareAxes(POSITION);
+ mFakeEventHub->addKey(DEVICE_ID, BTN_TOOL_FINGER, AKEYCODE_UNKNOWN, 0);
+ addMapperAndConfigure(mapper);
+
+ NotifyMotionArgs motionArgs;
+
+ // initially hovering because BTN_TOUCH not sent yet, pressure defaults to 0
+ processKey(mapper, BTN_TOOL_FINGER, 1);
+ processMove(mapper, 100, 200);
+ processSync(mapper);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_ENTER, motionArgs.action);
+ ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
+ toDisplayX(100), toDisplayY(200), 0, 0, 0, 0, 0, 0, 0, 0));
+
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_MOVE, motionArgs.action);
+ ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
+ toDisplayX(100), toDisplayY(200), 0, 0, 0, 0, 0, 0, 0, 0));
+
+ // move a little
+ processMove(mapper, 150, 250);
+ processSync(mapper);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_MOVE, motionArgs.action);
+ ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
+ toDisplayX(150), toDisplayY(250), 0, 0, 0, 0, 0, 0, 0, 0));
+
+ // down when BTN_TOUCH is pressed, pressure defaults to 1
+ processKey(mapper, BTN_TOUCH, 1);
+ processSync(mapper);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_EXIT, motionArgs.action);
+ ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
+ toDisplayX(150), toDisplayY(250), 0, 0, 0, 0, 0, 0, 0, 0));
+
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_DOWN, motionArgs.action);
+ ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
+ toDisplayX(150), toDisplayY(250), 1, 0, 0, 0, 0, 0, 0, 0));
+
+ // up when BTN_TOUCH is released, hover restored
+ processKey(mapper, BTN_TOUCH, 0);
+ processSync(mapper);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_UP, motionArgs.action);
+ ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
+ toDisplayX(150), toDisplayY(250), 1, 0, 0, 0, 0, 0, 0, 0));
+
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_ENTER, motionArgs.action);
+ ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
+ toDisplayX(150), toDisplayY(250), 0, 0, 0, 0, 0, 0, 0, 0));
+
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_MOVE, motionArgs.action);
+ ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
+ toDisplayX(150), toDisplayY(250), 0, 0, 0, 0, 0, 0, 0, 0));
+
+ // exit hover when pointer goes away
+ processKey(mapper, BTN_TOOL_FINGER, 0);
+ processSync(mapper);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_EXIT, motionArgs.action);
+ ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
+ toDisplayX(150), toDisplayY(250), 0, 0, 0, 0, 0, 0, 0, 0));
+}
+
+TEST_F(SingleTouchInputMapperTest, Process_WhenAbsDistanceIsPresent_HoversIfItsValueIsGreaterThanZero) {
+ SingleTouchInputMapper* mapper = new SingleTouchInputMapper(mDevice);
+ addConfigurationProperty("touch.deviceType", "touchScreen");
+ prepareDisplay(DISPLAY_ORIENTATION_0);
+ prepareButtons();
+ prepareAxes(POSITION | DISTANCE);
+ addMapperAndConfigure(mapper);
+
+ NotifyMotionArgs motionArgs;
+
+ // initially hovering because distance is 1, pressure defaults to 0
+ processDown(mapper, 100, 200);
+ processDistance(mapper, 1);
+ processSync(mapper);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_ENTER, motionArgs.action);
+ ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
+ toDisplayX(100), toDisplayY(200), 0, 0, 0, 0, 0, 0, 0, 1));
+
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_MOVE, motionArgs.action);
+ ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
+ toDisplayX(100), toDisplayY(200), 0, 0, 0, 0, 0, 0, 0, 1));
+
+ // move a little
+ processMove(mapper, 150, 250);
+ processSync(mapper);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_MOVE, motionArgs.action);
+ ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
+ toDisplayX(150), toDisplayY(250), 0, 0, 0, 0, 0, 0, 0, 1));
+
+ // down when distance goes to 0, pressure defaults to 1
+ processDistance(mapper, 0);
+ processSync(mapper);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_EXIT, motionArgs.action);
+ ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
+ toDisplayX(150), toDisplayY(250), 0, 0, 0, 0, 0, 0, 0, 1));
+
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_DOWN, motionArgs.action);
+ ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
+ toDisplayX(150), toDisplayY(250), 1, 0, 0, 0, 0, 0, 0, 0));
+
+ // up when distance goes to 1, hover restored
+ processDistance(mapper, 1);
+ processSync(mapper);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_UP, motionArgs.action);
+ ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
+ toDisplayX(150), toDisplayY(250), 1, 0, 0, 0, 0, 0, 0, 0));
+
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_ENTER, motionArgs.action);
+ ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
+ toDisplayX(150), toDisplayY(250), 0, 0, 0, 0, 0, 0, 0, 1));
+
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_MOVE, motionArgs.action);
+ ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
+ toDisplayX(150), toDisplayY(250), 0, 0, 0, 0, 0, 0, 0, 1));
+
+ // exit hover when pointer goes away
+ processUp(mapper);
+ processSync(mapper);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_EXIT, motionArgs.action);
+ ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
+ toDisplayX(150), toDisplayY(250), 0, 0, 0, 0, 0, 0, 0, 1));
}
@@ -3173,7 +3665,11 @@
void processToolMinor(MultiTouchInputMapper* mapper, int32_t toolMinor);
void processOrientation(MultiTouchInputMapper* mapper, int32_t orientation);
void processPressure(MultiTouchInputMapper* mapper, int32_t pressure);
+ void processDistance(MultiTouchInputMapper* mapper, int32_t distance);
void processId(MultiTouchInputMapper* mapper, int32_t id);
+ void processSlot(MultiTouchInputMapper* mapper, int32_t slot);
+ void processToolType(MultiTouchInputMapper* mapper, int32_t toolType);
+ void processKey(MultiTouchInputMapper* mapper, int32_t code, int32_t value);
void processMTSync(MultiTouchInputMapper* mapper);
void processSync(MultiTouchInputMapper* mapper);
};
@@ -3209,10 +3705,23 @@
mFakeEventHub->addAbsoluteAxis(DEVICE_ID, ABS_MT_PRESSURE,
RAW_PRESSURE_MIN, RAW_PRESSURE_MAX, 0, 0);
}
+ if (axes & DISTANCE) {
+ mFakeEventHub->addAbsoluteAxis(DEVICE_ID, ABS_MT_DISTANCE,
+ RAW_DISTANCE_MIN, RAW_DISTANCE_MAX, 0, 0);
+ }
if (axes & ID) {
mFakeEventHub->addAbsoluteAxis(DEVICE_ID, ABS_MT_TRACKING_ID,
RAW_ID_MIN, RAW_ID_MAX, 0, 0);
}
+ if (axes & SLOT) {
+ mFakeEventHub->addAbsoluteAxis(DEVICE_ID, ABS_MT_SLOT,
+ RAW_SLOT_MIN, RAW_SLOT_MAX, 0, 0);
+ mFakeEventHub->setAbsoluteAxisValue(DEVICE_ID, ABS_MT_SLOT, 0);
+ }
+ if (axes & TOOL_TYPE) {
+ mFakeEventHub->addAbsoluteAxis(DEVICE_ID, ABS_MT_TOOL_TYPE,
+ 0, MT_TOOL_MAX, 0, 0);
+ }
}
void MultiTouchInputMapperTest::processPosition(
@@ -3251,11 +3760,31 @@
process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_ABS, ABS_MT_PRESSURE, 0, pressure, 0);
}
+void MultiTouchInputMapperTest::processDistance(
+ MultiTouchInputMapper* mapper, int32_t distance) {
+ process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_ABS, ABS_MT_DISTANCE, 0, distance, 0);
+}
+
void MultiTouchInputMapperTest::processId(
MultiTouchInputMapper* mapper, int32_t id) {
process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_ABS, ABS_MT_TRACKING_ID, 0, id, 0);
}
+void MultiTouchInputMapperTest::processSlot(
+ MultiTouchInputMapper* mapper, int32_t slot) {
+ process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_ABS, ABS_MT_SLOT, 0, slot, 0);
+}
+
+void MultiTouchInputMapperTest::processToolType(
+ MultiTouchInputMapper* mapper, int32_t toolType) {
+ process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_ABS, ABS_MT_TOOL_TYPE, 0, toolType, 0);
+}
+
+void MultiTouchInputMapperTest::processKey(
+ MultiTouchInputMapper* mapper, int32_t code, int32_t value) {
+ process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_KEY, code, 0, value, 0);
+}
+
void MultiTouchInputMapperTest::processMTSync(MultiTouchInputMapper* mapper) {
process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_SYN, SYN_MT_REPORT, 0, 0, 0);
}
@@ -3275,7 +3804,7 @@
mFakeContext->setGlobalMetaState(AMETA_SHIFT_LEFT_ON | AMETA_SHIFT_ON);
- FakeInputDispatcher::NotifyMotionArgs motionArgs;
+ NotifyMotionArgs motionArgs;
// Two fingers down at once.
int32_t x1 = 100, y1 = 125, x2 = 300, y2 = 500;
@@ -3285,7 +3814,7 @@
processMTSync(mapper);
processSync(mapper);
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
ASSERT_EQ(ARBITRARY_TIME, motionArgs.eventTime);
ASSERT_EQ(DEVICE_ID, motionArgs.deviceId);
ASSERT_EQ(AINPUT_SOURCE_TOUCHSCREEN, motionArgs.source);
@@ -3299,12 +3828,12 @@
ASSERT_EQ(0, motionArgs.pointerProperties[0].id);
ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
- toDisplayX(x1), toDisplayY(y1), 1, 0, 0, 0, 0, 0, 0));
+ toDisplayX(x1), toDisplayY(y1), 1, 0, 0, 0, 0, 0, 0, 0));
ASSERT_NEAR(X_PRECISION, motionArgs.xPrecision, EPSILON);
ASSERT_NEAR(Y_PRECISION, motionArgs.yPrecision, EPSILON);
ASSERT_EQ(ARBITRARY_TIME, motionArgs.downTime);
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
ASSERT_EQ(ARBITRARY_TIME, motionArgs.eventTime);
ASSERT_EQ(DEVICE_ID, motionArgs.deviceId);
ASSERT_EQ(AINPUT_SOURCE_TOUCHSCREEN, motionArgs.source);
@@ -3321,9 +3850,9 @@
ASSERT_EQ(1, motionArgs.pointerProperties[1].id);
ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[1].toolType);
ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
- toDisplayX(x1), toDisplayY(y1), 1, 0, 0, 0, 0, 0, 0));
+ toDisplayX(x1), toDisplayY(y1), 1, 0, 0, 0, 0, 0, 0, 0));
ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[1],
- toDisplayX(x2), toDisplayY(y2), 1, 0, 0, 0, 0, 0, 0));
+ toDisplayX(x2), toDisplayY(y2), 1, 0, 0, 0, 0, 0, 0, 0));
ASSERT_NEAR(X_PRECISION, motionArgs.xPrecision, EPSILON);
ASSERT_NEAR(Y_PRECISION, motionArgs.yPrecision, EPSILON);
ASSERT_EQ(ARBITRARY_TIME, motionArgs.downTime);
@@ -3336,7 +3865,7 @@
processMTSync(mapper);
processSync(mapper);
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
ASSERT_EQ(ARBITRARY_TIME, motionArgs.eventTime);
ASSERT_EQ(DEVICE_ID, motionArgs.deviceId);
ASSERT_EQ(AINPUT_SOURCE_TOUCHSCREEN, motionArgs.source);
@@ -3352,9 +3881,9 @@
ASSERT_EQ(1, motionArgs.pointerProperties[1].id);
ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[1].toolType);
ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
- toDisplayX(x1), toDisplayY(y1), 1, 0, 0, 0, 0, 0, 0));
+ toDisplayX(x1), toDisplayY(y1), 1, 0, 0, 0, 0, 0, 0, 0));
ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[1],
- toDisplayX(x2), toDisplayY(y2), 1, 0, 0, 0, 0, 0, 0));
+ toDisplayX(x2), toDisplayY(y2), 1, 0, 0, 0, 0, 0, 0, 0));
ASSERT_NEAR(X_PRECISION, motionArgs.xPrecision, EPSILON);
ASSERT_NEAR(Y_PRECISION, motionArgs.yPrecision, EPSILON);
ASSERT_EQ(ARBITRARY_TIME, motionArgs.downTime);
@@ -3365,7 +3894,7 @@
processMTSync(mapper);
processSync(mapper);
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
ASSERT_EQ(ARBITRARY_TIME, motionArgs.eventTime);
ASSERT_EQ(DEVICE_ID, motionArgs.deviceId);
ASSERT_EQ(AINPUT_SOURCE_TOUCHSCREEN, motionArgs.source);
@@ -3382,14 +3911,14 @@
ASSERT_EQ(1, motionArgs.pointerProperties[1].id);
ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[1].toolType);
ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
- toDisplayX(x1), toDisplayY(y1), 1, 0, 0, 0, 0, 0, 0));
+ toDisplayX(x1), toDisplayY(y1), 1, 0, 0, 0, 0, 0, 0, 0));
ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[1],
- toDisplayX(x2), toDisplayY(y2), 1, 0, 0, 0, 0, 0, 0));
+ toDisplayX(x2), toDisplayY(y2), 1, 0, 0, 0, 0, 0, 0, 0));
ASSERT_NEAR(X_PRECISION, motionArgs.xPrecision, EPSILON);
ASSERT_NEAR(Y_PRECISION, motionArgs.yPrecision, EPSILON);
ASSERT_EQ(ARBITRARY_TIME, motionArgs.downTime);
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
ASSERT_EQ(ARBITRARY_TIME, motionArgs.eventTime);
ASSERT_EQ(DEVICE_ID, motionArgs.deviceId);
ASSERT_EQ(AINPUT_SOURCE_TOUCHSCREEN, motionArgs.source);
@@ -3403,7 +3932,7 @@
ASSERT_EQ(1, motionArgs.pointerProperties[0].id);
ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
- toDisplayX(x2), toDisplayY(y2), 1, 0, 0, 0, 0, 0, 0));
+ toDisplayX(x2), toDisplayY(y2), 1, 0, 0, 0, 0, 0, 0, 0));
ASSERT_NEAR(X_PRECISION, motionArgs.xPrecision, EPSILON);
ASSERT_NEAR(Y_PRECISION, motionArgs.yPrecision, EPSILON);
ASSERT_EQ(ARBITRARY_TIME, motionArgs.downTime);
@@ -3414,7 +3943,7 @@
processMTSync(mapper);
processSync(mapper);
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
ASSERT_EQ(ARBITRARY_TIME, motionArgs.eventTime);
ASSERT_EQ(DEVICE_ID, motionArgs.deviceId);
ASSERT_EQ(AINPUT_SOURCE_TOUCHSCREEN, motionArgs.source);
@@ -3428,7 +3957,7 @@
ASSERT_EQ(1, motionArgs.pointerProperties[0].id);
ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
- toDisplayX(x2), toDisplayY(y2), 1, 0, 0, 0, 0, 0, 0));
+ toDisplayX(x2), toDisplayY(y2), 1, 0, 0, 0, 0, 0, 0, 0));
ASSERT_NEAR(X_PRECISION, motionArgs.xPrecision, EPSILON);
ASSERT_NEAR(Y_PRECISION, motionArgs.yPrecision, EPSILON);
ASSERT_EQ(ARBITRARY_TIME, motionArgs.downTime);
@@ -3441,7 +3970,7 @@
processMTSync(mapper);
processSync(mapper);
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
ASSERT_EQ(ARBITRARY_TIME, motionArgs.eventTime);
ASSERT_EQ(DEVICE_ID, motionArgs.deviceId);
ASSERT_EQ(AINPUT_SOURCE_TOUCHSCREEN, motionArgs.source);
@@ -3458,9 +3987,9 @@
ASSERT_EQ(1, motionArgs.pointerProperties[1].id);
ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[1].toolType);
ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
- toDisplayX(x3), toDisplayY(y3), 1, 0, 0, 0, 0, 0, 0));
+ toDisplayX(x3), toDisplayY(y3), 1, 0, 0, 0, 0, 0, 0, 0));
ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[1],
- toDisplayX(x2), toDisplayY(y2), 1, 0, 0, 0, 0, 0, 0));
+ toDisplayX(x2), toDisplayY(y2), 1, 0, 0, 0, 0, 0, 0, 0));
ASSERT_NEAR(X_PRECISION, motionArgs.xPrecision, EPSILON);
ASSERT_NEAR(Y_PRECISION, motionArgs.yPrecision, EPSILON);
ASSERT_EQ(ARBITRARY_TIME, motionArgs.downTime);
@@ -3471,7 +4000,7 @@
processMTSync(mapper);
processSync(mapper);
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
ASSERT_EQ(ARBITRARY_TIME, motionArgs.eventTime);
ASSERT_EQ(DEVICE_ID, motionArgs.deviceId);
ASSERT_EQ(AINPUT_SOURCE_TOUCHSCREEN, motionArgs.source);
@@ -3488,14 +4017,14 @@
ASSERT_EQ(1, motionArgs.pointerProperties[1].id);
ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[1].toolType);
ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
- toDisplayX(x3), toDisplayY(y3), 1, 0, 0, 0, 0, 0, 0));
+ toDisplayX(x3), toDisplayY(y3), 1, 0, 0, 0, 0, 0, 0, 0));
ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[1],
- toDisplayX(x2), toDisplayY(y2), 1, 0, 0, 0, 0, 0, 0));
+ toDisplayX(x2), toDisplayY(y2), 1, 0, 0, 0, 0, 0, 0, 0));
ASSERT_NEAR(X_PRECISION, motionArgs.xPrecision, EPSILON);
ASSERT_NEAR(Y_PRECISION, motionArgs.yPrecision, EPSILON);
ASSERT_EQ(ARBITRARY_TIME, motionArgs.downTime);
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
ASSERT_EQ(ARBITRARY_TIME, motionArgs.eventTime);
ASSERT_EQ(DEVICE_ID, motionArgs.deviceId);
ASSERT_EQ(AINPUT_SOURCE_TOUCHSCREEN, motionArgs.source);
@@ -3509,7 +4038,7 @@
ASSERT_EQ(0, motionArgs.pointerProperties[0].id);
ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
- toDisplayX(x3), toDisplayY(y3), 1, 0, 0, 0, 0, 0, 0));
+ toDisplayX(x3), toDisplayY(y3), 1, 0, 0, 0, 0, 0, 0, 0));
ASSERT_NEAR(X_PRECISION, motionArgs.xPrecision, EPSILON);
ASSERT_NEAR(Y_PRECISION, motionArgs.yPrecision, EPSILON);
ASSERT_EQ(ARBITRARY_TIME, motionArgs.downTime);
@@ -3518,7 +4047,7 @@
processMTSync(mapper);
processSync(mapper);
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
ASSERT_EQ(ARBITRARY_TIME, motionArgs.eventTime);
ASSERT_EQ(DEVICE_ID, motionArgs.deviceId);
ASSERT_EQ(AINPUT_SOURCE_TOUCHSCREEN, motionArgs.source);
@@ -3532,14 +4061,14 @@
ASSERT_EQ(0, motionArgs.pointerProperties[0].id);
ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
- toDisplayX(x3), toDisplayY(y3), 1, 0, 0, 0, 0, 0, 0));
+ toDisplayX(x3), toDisplayY(y3), 1, 0, 0, 0, 0, 0, 0, 0));
ASSERT_NEAR(X_PRECISION, motionArgs.xPrecision, EPSILON);
ASSERT_NEAR(Y_PRECISION, motionArgs.yPrecision, EPSILON);
ASSERT_EQ(ARBITRARY_TIME, motionArgs.downTime);
// Should not have sent any more keys or motions.
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyKeyWasNotCalled());
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyMotionWasNotCalled());
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasNotCalled());
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasNotCalled());
}
TEST_F(MultiTouchInputMapperTest, Process_NormalMultiTouchGesture_WithTrackingIds) {
@@ -3552,7 +4081,7 @@
mFakeContext->setGlobalMetaState(AMETA_SHIFT_LEFT_ON | AMETA_SHIFT_ON);
- FakeInputDispatcher::NotifyMotionArgs motionArgs;
+ NotifyMotionArgs motionArgs;
// Two fingers down at once.
int32_t x1 = 100, y1 = 125, x2 = 300, y2 = 500;
@@ -3564,15 +4093,15 @@
processMTSync(mapper);
processSync(mapper);
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
ASSERT_EQ(AMOTION_EVENT_ACTION_DOWN, motionArgs.action);
ASSERT_EQ(size_t(1), motionArgs.pointerCount);
ASSERT_EQ(0, motionArgs.pointerProperties[0].id);
ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
- toDisplayX(x1), toDisplayY(y1), 1, 0, 0, 0, 0, 0, 0));
+ toDisplayX(x1), toDisplayY(y1), 1, 0, 0, 0, 0, 0, 0, 0));
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
ASSERT_EQ(AMOTION_EVENT_ACTION_POINTER_DOWN | (1 << AMOTION_EVENT_ACTION_POINTER_INDEX_SHIFT),
motionArgs.action);
ASSERT_EQ(size_t(2), motionArgs.pointerCount);
@@ -3581,9 +4110,9 @@
ASSERT_EQ(1, motionArgs.pointerProperties[1].id);
ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[1].toolType);
ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
- toDisplayX(x1), toDisplayY(y1), 1, 0, 0, 0, 0, 0, 0));
+ toDisplayX(x1), toDisplayY(y1), 1, 0, 0, 0, 0, 0, 0, 0));
ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[1],
- toDisplayX(x2), toDisplayY(y2), 1, 0, 0, 0, 0, 0, 0));
+ toDisplayX(x2), toDisplayY(y2), 1, 0, 0, 0, 0, 0, 0, 0));
// Move.
x1 += 10; y1 += 15; x2 += 5; y2 -= 10;
@@ -3595,7 +4124,7 @@
processMTSync(mapper);
processSync(mapper);
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
ASSERT_EQ(size_t(2), motionArgs.pointerCount);
ASSERT_EQ(0, motionArgs.pointerProperties[0].id);
@@ -3603,9 +4132,9 @@
ASSERT_EQ(1, motionArgs.pointerProperties[1].id);
ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[1].toolType);
ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
- toDisplayX(x1), toDisplayY(y1), 1, 0, 0, 0, 0, 0, 0));
+ toDisplayX(x1), toDisplayY(y1), 1, 0, 0, 0, 0, 0, 0, 0));
ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[1],
- toDisplayX(x2), toDisplayY(y2), 1, 0, 0, 0, 0, 0, 0));
+ toDisplayX(x2), toDisplayY(y2), 1, 0, 0, 0, 0, 0, 0, 0));
// First finger up.
x2 += 15; y2 -= 20;
@@ -3614,7 +4143,7 @@
processMTSync(mapper);
processSync(mapper);
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
ASSERT_EQ(AMOTION_EVENT_ACTION_POINTER_UP | (0 << AMOTION_EVENT_ACTION_POINTER_INDEX_SHIFT),
motionArgs.action);
ASSERT_EQ(size_t(2), motionArgs.pointerCount);
@@ -3623,17 +4152,17 @@
ASSERT_EQ(1, motionArgs.pointerProperties[1].id);
ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[1].toolType);
ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
- toDisplayX(x1), toDisplayY(y1), 1, 0, 0, 0, 0, 0, 0));
+ toDisplayX(x1), toDisplayY(y1), 1, 0, 0, 0, 0, 0, 0, 0));
ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[1],
- toDisplayX(x2), toDisplayY(y2), 1, 0, 0, 0, 0, 0, 0));
+ toDisplayX(x2), toDisplayY(y2), 1, 0, 0, 0, 0, 0, 0, 0));
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
ASSERT_EQ(size_t(1), motionArgs.pointerCount);
ASSERT_EQ(1, motionArgs.pointerProperties[0].id);
ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
- toDisplayX(x2), toDisplayY(y2), 1, 0, 0, 0, 0, 0, 0));
+ toDisplayX(x2), toDisplayY(y2), 1, 0, 0, 0, 0, 0, 0, 0));
// Move.
x2 += 20; y2 -= 25;
@@ -3642,13 +4171,13 @@
processMTSync(mapper);
processSync(mapper);
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
ASSERT_EQ(size_t(1), motionArgs.pointerCount);
ASSERT_EQ(1, motionArgs.pointerProperties[0].id);
ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
- toDisplayX(x2), toDisplayY(y2), 1, 0, 0, 0, 0, 0, 0));
+ toDisplayX(x2), toDisplayY(y2), 1, 0, 0, 0, 0, 0, 0, 0));
// New finger down.
int32_t x3 = 700, y3 = 300;
@@ -3660,7 +4189,7 @@
processMTSync(mapper);
processSync(mapper);
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
ASSERT_EQ(AMOTION_EVENT_ACTION_POINTER_DOWN | (0 << AMOTION_EVENT_ACTION_POINTER_INDEX_SHIFT),
motionArgs.action);
ASSERT_EQ(size_t(2), motionArgs.pointerCount);
@@ -3669,9 +4198,9 @@
ASSERT_EQ(1, motionArgs.pointerProperties[1].id);
ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[1].toolType);
ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
- toDisplayX(x3), toDisplayY(y3), 1, 0, 0, 0, 0, 0, 0));
+ toDisplayX(x3), toDisplayY(y3), 1, 0, 0, 0, 0, 0, 0, 0));
ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[1],
- toDisplayX(x2), toDisplayY(y2), 1, 0, 0, 0, 0, 0, 0));
+ toDisplayX(x2), toDisplayY(y2), 1, 0, 0, 0, 0, 0, 0, 0));
// Second finger up.
x3 += 30; y3 -= 20;
@@ -3680,7 +4209,7 @@
processMTSync(mapper);
processSync(mapper);
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
ASSERT_EQ(AMOTION_EVENT_ACTION_POINTER_UP | (1 << AMOTION_EVENT_ACTION_POINTER_INDEX_SHIFT),
motionArgs.action);
ASSERT_EQ(size_t(2), motionArgs.pointerCount);
@@ -3689,40 +4218,211 @@
ASSERT_EQ(1, motionArgs.pointerProperties[1].id);
ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[1].toolType);
ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
- toDisplayX(x3), toDisplayY(y3), 1, 0, 0, 0, 0, 0, 0));
+ toDisplayX(x3), toDisplayY(y3), 1, 0, 0, 0, 0, 0, 0, 0));
ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[1],
- toDisplayX(x2), toDisplayY(y2), 1, 0, 0, 0, 0, 0, 0));
+ toDisplayX(x2), toDisplayY(y2), 1, 0, 0, 0, 0, 0, 0, 0));
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
ASSERT_EQ(size_t(1), motionArgs.pointerCount);
ASSERT_EQ(0, motionArgs.pointerProperties[0].id);
ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
- toDisplayX(x3), toDisplayY(y3), 1, 0, 0, 0, 0, 0, 0));
+ toDisplayX(x3), toDisplayY(y3), 1, 0, 0, 0, 0, 0, 0, 0));
// Last finger up.
processMTSync(mapper);
processSync(mapper);
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
ASSERT_EQ(AMOTION_EVENT_ACTION_UP, motionArgs.action);
ASSERT_EQ(size_t(1), motionArgs.pointerCount);
ASSERT_EQ(0, motionArgs.pointerProperties[0].id);
ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
- toDisplayX(x3), toDisplayY(y3), 1, 0, 0, 0, 0, 0, 0));
+ toDisplayX(x3), toDisplayY(y3), 1, 0, 0, 0, 0, 0, 0, 0));
// Should not have sent any more keys or motions.
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyKeyWasNotCalled());
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyMotionWasNotCalled());
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasNotCalled());
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasNotCalled());
+}
+
+TEST_F(MultiTouchInputMapperTest, Process_NormalMultiTouchGesture_WithSlots) {
+ MultiTouchInputMapper* mapper = new MultiTouchInputMapper(mDevice);
+ addConfigurationProperty("touch.deviceType", "touchScreen");
+ prepareDisplay(DISPLAY_ORIENTATION_0);
+ prepareAxes(POSITION | ID | SLOT);
+ prepareVirtualKeys();
+ addMapperAndConfigure(mapper);
+
+ mFakeContext->setGlobalMetaState(AMETA_SHIFT_LEFT_ON | AMETA_SHIFT_ON);
+
+ NotifyMotionArgs motionArgs;
+
+ // Two fingers down at once.
+ int32_t x1 = 100, y1 = 125, x2 = 300, y2 = 500;
+ processPosition(mapper, x1, y1);
+ processId(mapper, 1);
+ processSlot(mapper, 1);
+ processPosition(mapper, x2, y2);
+ processId(mapper, 2);
+ processSync(mapper);
+
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_DOWN, motionArgs.action);
+ ASSERT_EQ(size_t(1), motionArgs.pointerCount);
+ ASSERT_EQ(0, motionArgs.pointerProperties[0].id);
+ ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
+ ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
+ toDisplayX(x1), toDisplayY(y1), 1, 0, 0, 0, 0, 0, 0, 0));
+
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_POINTER_DOWN | (1 << AMOTION_EVENT_ACTION_POINTER_INDEX_SHIFT),
+ motionArgs.action);
+ ASSERT_EQ(size_t(2), motionArgs.pointerCount);
+ ASSERT_EQ(0, motionArgs.pointerProperties[0].id);
+ ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
+ ASSERT_EQ(1, motionArgs.pointerProperties[1].id);
+ ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[1].toolType);
+ ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
+ toDisplayX(x1), toDisplayY(y1), 1, 0, 0, 0, 0, 0, 0, 0));
+ ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[1],
+ toDisplayX(x2), toDisplayY(y2), 1, 0, 0, 0, 0, 0, 0, 0));
+
+ // Move.
+ x1 += 10; y1 += 15; x2 += 5; y2 -= 10;
+ processSlot(mapper, 0);
+ processPosition(mapper, x1, y1);
+ processSlot(mapper, 1);
+ processPosition(mapper, x2, y2);
+ processSync(mapper);
+
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
+ ASSERT_EQ(size_t(2), motionArgs.pointerCount);
+ ASSERT_EQ(0, motionArgs.pointerProperties[0].id);
+ ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
+ ASSERT_EQ(1, motionArgs.pointerProperties[1].id);
+ ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[1].toolType);
+ ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
+ toDisplayX(x1), toDisplayY(y1), 1, 0, 0, 0, 0, 0, 0, 0));
+ ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[1],
+ toDisplayX(x2), toDisplayY(y2), 1, 0, 0, 0, 0, 0, 0, 0));
+
+ // First finger up.
+ x2 += 15; y2 -= 20;
+ processSlot(mapper, 0);
+ processId(mapper, -1);
+ processSlot(mapper, 1);
+ processPosition(mapper, x2, y2);
+ processSync(mapper);
+
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_POINTER_UP | (0 << AMOTION_EVENT_ACTION_POINTER_INDEX_SHIFT),
+ motionArgs.action);
+ ASSERT_EQ(size_t(2), motionArgs.pointerCount);
+ ASSERT_EQ(0, motionArgs.pointerProperties[0].id);
+ ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
+ ASSERT_EQ(1, motionArgs.pointerProperties[1].id);
+ ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[1].toolType);
+ ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
+ toDisplayX(x1), toDisplayY(y1), 1, 0, 0, 0, 0, 0, 0, 0));
+ ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[1],
+ toDisplayX(x2), toDisplayY(y2), 1, 0, 0, 0, 0, 0, 0, 0));
+
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
+ ASSERT_EQ(size_t(1), motionArgs.pointerCount);
+ ASSERT_EQ(1, motionArgs.pointerProperties[0].id);
+ ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
+ ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
+ toDisplayX(x2), toDisplayY(y2), 1, 0, 0, 0, 0, 0, 0, 0));
+
+ // Move.
+ x2 += 20; y2 -= 25;
+ processPosition(mapper, x2, y2);
+ processSync(mapper);
+
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
+ ASSERT_EQ(size_t(1), motionArgs.pointerCount);
+ ASSERT_EQ(1, motionArgs.pointerProperties[0].id);
+ ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
+ ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
+ toDisplayX(x2), toDisplayY(y2), 1, 0, 0, 0, 0, 0, 0, 0));
+
+ // New finger down.
+ int32_t x3 = 700, y3 = 300;
+ processPosition(mapper, x2, y2);
+ processSlot(mapper, 0);
+ processId(mapper, 3);
+ processPosition(mapper, x3, y3);
+ processSync(mapper);
+
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_POINTER_DOWN | (0 << AMOTION_EVENT_ACTION_POINTER_INDEX_SHIFT),
+ motionArgs.action);
+ ASSERT_EQ(size_t(2), motionArgs.pointerCount);
+ ASSERT_EQ(0, motionArgs.pointerProperties[0].id);
+ ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
+ ASSERT_EQ(1, motionArgs.pointerProperties[1].id);
+ ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[1].toolType);
+ ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
+ toDisplayX(x3), toDisplayY(y3), 1, 0, 0, 0, 0, 0, 0, 0));
+ ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[1],
+ toDisplayX(x2), toDisplayY(y2), 1, 0, 0, 0, 0, 0, 0, 0));
+
+ // Second finger up.
+ x3 += 30; y3 -= 20;
+ processSlot(mapper, 1);
+ processId(mapper, -1);
+ processSlot(mapper, 0);
+ processPosition(mapper, x3, y3);
+ processSync(mapper);
+
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_POINTER_UP | (1 << AMOTION_EVENT_ACTION_POINTER_INDEX_SHIFT),
+ motionArgs.action);
+ ASSERT_EQ(size_t(2), motionArgs.pointerCount);
+ ASSERT_EQ(0, motionArgs.pointerProperties[0].id);
+ ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
+ ASSERT_EQ(1, motionArgs.pointerProperties[1].id);
+ ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[1].toolType);
+ ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
+ toDisplayX(x3), toDisplayY(y3), 1, 0, 0, 0, 0, 0, 0, 0));
+ ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[1],
+ toDisplayX(x2), toDisplayY(y2), 1, 0, 0, 0, 0, 0, 0, 0));
+
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
+ ASSERT_EQ(size_t(1), motionArgs.pointerCount);
+ ASSERT_EQ(0, motionArgs.pointerProperties[0].id);
+ ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
+ ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
+ toDisplayX(x3), toDisplayY(y3), 1, 0, 0, 0, 0, 0, 0, 0));
+
+ // Last finger up.
+ processId(mapper, -1);
+ processSync(mapper);
+
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_UP, motionArgs.action);
+ ASSERT_EQ(size_t(1), motionArgs.pointerCount);
+ ASSERT_EQ(0, motionArgs.pointerProperties[0].id);
+ ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
+ ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
+ toDisplayX(x3), toDisplayY(y3), 1, 0, 0, 0, 0, 0, 0, 0));
+
+ // Should not have sent any more keys or motions.
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasNotCalled());
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasNotCalled());
}
TEST_F(MultiTouchInputMapperTest, Process_AllAxes_WithDefaultCalibration) {
MultiTouchInputMapper* mapper = new MultiTouchInputMapper(mDevice);
addConfigurationProperty("touch.deviceType", "touchScreen");
prepareDisplay(DISPLAY_ORIENTATION_0);
- prepareAxes(POSITION | TOUCH | TOOL | PRESSURE | ORIENTATION | ID | MINOR);
+ prepareAxes(POSITION | TOUCH | TOOL | PRESSURE | ORIENTATION | ID | MINOR | DISTANCE);
addMapperAndConfigure(mapper);
// These calculations are based on the input device calibration documentation.
@@ -3733,6 +4433,7 @@
int32_t rawToolMajor = 9;
int32_t rawToolMinor = 8;
int32_t rawPressure = 11;
+ int32_t rawDistance = 0;
int32_t rawOrientation = 3;
int32_t id = 5;
@@ -3745,6 +4446,7 @@
float touchMajor = min(toolMajor * pressure, toolMajor);
float touchMinor = min(toolMinor * pressure, toolMinor);
float orientation = float(rawOrientation) / RAW_ORIENTATION_MAX * M_PI_2;
+ float distance = float(rawDistance);
processPosition(mapper, rawX, rawY);
processTouchMajor(mapper, rawTouchMajor);
@@ -3753,15 +4455,16 @@
processToolMinor(mapper, rawToolMinor);
processPressure(mapper, rawPressure);
processOrientation(mapper, rawOrientation);
+ processDistance(mapper, rawDistance);
processId(mapper, id);
processMTSync(mapper);
processSync(mapper);
- FakeInputDispatcher::NotifyMotionArgs args;
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyMotionWasCalled(&args));
+ NotifyMotionArgs args;
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&args));
ASSERT_EQ(0, args.pointerProperties[0].id);
ASSERT_NO_FATAL_FAILURE(assertPointerCoords(args.pointerCoords[0],
- x, y, pressure, size, touchMajor, touchMinor, toolMajor, toolMinor, orientation));
+ x, y, pressure, size, touchMajor, touchMinor, toolMajor, toolMinor, orientation, distance));
}
TEST_F(MultiTouchInputMapperTest, Process_TouchAndToolAxes_GeometricCalibration) {
@@ -3800,10 +4503,10 @@
processMTSync(mapper);
processSync(mapper);
- FakeInputDispatcher::NotifyMotionArgs args;
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyMotionWasCalled(&args));
+ NotifyMotionArgs args;
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&args));
ASSERT_NO_FATAL_FAILURE(assertPointerCoords(args.pointerCoords[0],
- x, y, pressure, size, touchMajor, touchMinor, toolMajor, toolMinor, 0));
+ x, y, pressure, size, touchMajor, touchMinor, toolMajor, toolMinor, 0, 0));
}
TEST_F(MultiTouchInputMapperTest, Process_TouchToolPressureSizeAxes_SummedLinearCalibration) {
@@ -3850,18 +4553,18 @@
processMTSync(mapper);
processSync(mapper);
- FakeInputDispatcher::NotifyMotionArgs args;
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyMotionWasCalled(&args));
+ NotifyMotionArgs args;
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&args));
ASSERT_EQ(AMOTION_EVENT_ACTION_DOWN, args.action);
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyMotionWasCalled(&args));
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&args));
ASSERT_EQ(AMOTION_EVENT_ACTION_POINTER_DOWN | (1 << AMOTION_EVENT_ACTION_POINTER_INDEX_SHIFT),
args.action);
ASSERT_EQ(size_t(2), args.pointerCount);
ASSERT_NO_FATAL_FAILURE(assertPointerCoords(args.pointerCoords[0],
- x, y, pressure, size, touch, touch, tool, tool, 0));
+ x, y, pressure, size, touch, touch, tool, tool, 0, 0));
ASSERT_NO_FATAL_FAILURE(assertPointerCoords(args.pointerCoords[1],
- x2, y2, pressure, size, touch, touch, tool, tool, 0));
+ x2, y2, pressure, size, touch, touch, tool, tool, 0, 0));
}
TEST_F(MultiTouchInputMapperTest, Process_TouchToolPressureSizeAxes_AreaCalibration) {
@@ -3899,10 +4602,395 @@
processMTSync(mapper);
processSync(mapper);
- FakeInputDispatcher::NotifyMotionArgs args;
- ASSERT_NO_FATAL_FAILURE(mFakeDispatcher->assertNotifyMotionWasCalled(&args));
+ NotifyMotionArgs args;
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&args));
ASSERT_NO_FATAL_FAILURE(assertPointerCoords(args.pointerCoords[0],
- x, y, pressure, size, touch, touch, tool, tool, 0));
+ x, y, pressure, size, touch, touch, tool, tool, 0, 0));
}
+TEST_F(MultiTouchInputMapperTest, Process_ShouldHandleAllButtons) {
+ MultiTouchInputMapper* mapper = new MultiTouchInputMapper(mDevice);
+ addConfigurationProperty("touch.deviceType", "touchScreen");
+ prepareDisplay(DISPLAY_ORIENTATION_0);
+ prepareAxes(POSITION | ID | SLOT);
+ addMapperAndConfigure(mapper);
+
+ NotifyMotionArgs motionArgs;
+ NotifyKeyArgs keyArgs;
+
+ processId(mapper, 1);
+ processPosition(mapper, 100, 200);
+ processSync(mapper);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_DOWN, motionArgs.action);
+ ASSERT_EQ(0, motionArgs.buttonState);
+
+ // press BTN_LEFT, release BTN_LEFT
+ processKey(mapper, BTN_LEFT, 1);
+ processSync(mapper);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
+ ASSERT_EQ(AMOTION_EVENT_BUTTON_PRIMARY, motionArgs.buttonState);
+
+ processKey(mapper, BTN_LEFT, 0);
+ processSync(mapper);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(0, motionArgs.buttonState);
+ ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
+
+ // press BTN_RIGHT + BTN_MIDDLE, release BTN_RIGHT, release BTN_MIDDLE
+ processKey(mapper, BTN_RIGHT, 1);
+ processKey(mapper, BTN_MIDDLE, 1);
+ processSync(mapper);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
+ ASSERT_EQ(AMOTION_EVENT_BUTTON_SECONDARY | AMOTION_EVENT_BUTTON_TERTIARY,
+ motionArgs.buttonState);
+
+ processKey(mapper, BTN_RIGHT, 0);
+ processSync(mapper);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_BUTTON_TERTIARY, motionArgs.buttonState);
+ ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
+
+ processKey(mapper, BTN_MIDDLE, 0);
+ processSync(mapper);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(0, motionArgs.buttonState);
+ ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
+
+ // press BTN_BACK, release BTN_BACK
+ processKey(mapper, BTN_BACK, 1);
+ processSync(mapper);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled(&keyArgs));
+ ASSERT_EQ(AKEY_EVENT_ACTION_DOWN, keyArgs.action);
+ ASSERT_EQ(AKEYCODE_BACK, keyArgs.keyCode);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_BUTTON_BACK, motionArgs.buttonState);
+ ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
+
+ processKey(mapper, BTN_BACK, 0);
+ processSync(mapper);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(0, motionArgs.buttonState);
+ ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled(&keyArgs));
+ ASSERT_EQ(AKEY_EVENT_ACTION_UP, keyArgs.action);
+ ASSERT_EQ(AKEYCODE_BACK, keyArgs.keyCode);
+
+ // press BTN_SIDE, release BTN_SIDE
+ processKey(mapper, BTN_SIDE, 1);
+ processSync(mapper);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled(&keyArgs));
+ ASSERT_EQ(AKEY_EVENT_ACTION_DOWN, keyArgs.action);
+ ASSERT_EQ(AKEYCODE_BACK, keyArgs.keyCode);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_BUTTON_BACK, motionArgs.buttonState);
+ ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
+
+ processKey(mapper, BTN_SIDE, 0);
+ processSync(mapper);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(0, motionArgs.buttonState);
+ ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled(&keyArgs));
+ ASSERT_EQ(AKEY_EVENT_ACTION_UP, keyArgs.action);
+ ASSERT_EQ(AKEYCODE_BACK, keyArgs.keyCode);
+
+ // press BTN_FORWARD, release BTN_FORWARD
+ processKey(mapper, BTN_FORWARD, 1);
+ processSync(mapper);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled(&keyArgs));
+ ASSERT_EQ(AKEY_EVENT_ACTION_DOWN, keyArgs.action);
+ ASSERT_EQ(AKEYCODE_FORWARD, keyArgs.keyCode);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_BUTTON_FORWARD, motionArgs.buttonState);
+ ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
+
+ processKey(mapper, BTN_FORWARD, 0);
+ processSync(mapper);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(0, motionArgs.buttonState);
+ ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled(&keyArgs));
+ ASSERT_EQ(AKEY_EVENT_ACTION_UP, keyArgs.action);
+ ASSERT_EQ(AKEYCODE_FORWARD, keyArgs.keyCode);
+
+ // press BTN_EXTRA, release BTN_EXTRA
+ processKey(mapper, BTN_EXTRA, 1);
+ processSync(mapper);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled(&keyArgs));
+ ASSERT_EQ(AKEY_EVENT_ACTION_DOWN, keyArgs.action);
+ ASSERT_EQ(AKEYCODE_FORWARD, keyArgs.keyCode);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_BUTTON_FORWARD, motionArgs.buttonState);
+ ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
+
+ processKey(mapper, BTN_EXTRA, 0);
+ processSync(mapper);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(0, motionArgs.buttonState);
+ ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled(&keyArgs));
+ ASSERT_EQ(AKEY_EVENT_ACTION_UP, keyArgs.action);
+ ASSERT_EQ(AKEYCODE_FORWARD, keyArgs.keyCode);
+
+ // press BTN_STYLUS, release BTN_STYLUS
+ processKey(mapper, BTN_STYLUS, 1);
+ processSync(mapper);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
+ ASSERT_EQ(AMOTION_EVENT_BUTTON_SECONDARY, motionArgs.buttonState);
+
+ processKey(mapper, BTN_STYLUS, 0);
+ processSync(mapper);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(0, motionArgs.buttonState);
+ ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
+
+ // press BTN_STYLUS2, release BTN_STYLUS2
+ processKey(mapper, BTN_STYLUS2, 1);
+ processSync(mapper);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
+ ASSERT_EQ(AMOTION_EVENT_BUTTON_TERTIARY, motionArgs.buttonState);
+
+ processKey(mapper, BTN_STYLUS2, 0);
+ processSync(mapper);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(0, motionArgs.buttonState);
+ ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
+
+ // release touch
+ processId(mapper, -1);
+ processSync(mapper);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_UP, motionArgs.action);
+ ASSERT_EQ(0, motionArgs.buttonState);
+}
+
+TEST_F(MultiTouchInputMapperTest, Process_ShouldHandleAllToolTypes) {
+ MultiTouchInputMapper* mapper = new MultiTouchInputMapper(mDevice);
+ addConfigurationProperty("touch.deviceType", "touchScreen");
+ prepareDisplay(DISPLAY_ORIENTATION_0);
+ prepareAxes(POSITION | ID | SLOT | TOOL_TYPE);
+ addMapperAndConfigure(mapper);
+
+ NotifyMotionArgs motionArgs;
+
+ // default tool type is finger
+ processId(mapper, 1);
+ processPosition(mapper, 100, 200);
+ processSync(mapper);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_DOWN, motionArgs.action);
+ ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
+
+ // eraser
+ processKey(mapper, BTN_TOOL_RUBBER, 1);
+ processSync(mapper);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
+ ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_ERASER, motionArgs.pointerProperties[0].toolType);
+
+ // stylus
+ processKey(mapper, BTN_TOOL_RUBBER, 0);
+ processKey(mapper, BTN_TOOL_PEN, 1);
+ processSync(mapper);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
+ ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_STYLUS, motionArgs.pointerProperties[0].toolType);
+
+ // finger
+ processKey(mapper, BTN_TOOL_PEN, 0);
+ processKey(mapper, BTN_TOOL_FINGER, 1);
+ processSync(mapper);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
+ ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
+
+ // stylus trumps finger
+ processKey(mapper, BTN_TOOL_PEN, 1);
+ processSync(mapper);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
+ ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_STYLUS, motionArgs.pointerProperties[0].toolType);
+
+ // eraser trumps stylus
+ processKey(mapper, BTN_TOOL_RUBBER, 1);
+ processSync(mapper);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
+ ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_ERASER, motionArgs.pointerProperties[0].toolType);
+
+ // MT tool type trumps BTN tool types: MT_TOOL_FINGER
+ processToolType(mapper, MT_TOOL_FINGER); // this is the first time we send MT_TOOL_TYPE
+ processSync(mapper);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
+ ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
+
+ // MT tool type trumps BTN tool types: MT_TOOL_PEN
+ processToolType(mapper, MT_TOOL_PEN);
+ processSync(mapper);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
+ ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_STYLUS, motionArgs.pointerProperties[0].toolType);
+
+ // back to default tool type
+ processToolType(mapper, -1); // use a deliberately undefined tool type, for testing
+ processKey(mapper, BTN_TOOL_RUBBER, 0);
+ processKey(mapper, BTN_TOOL_PEN, 0);
+ processKey(mapper, BTN_TOOL_FINGER, 0);
+ processSync(mapper);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
+ ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
+}
+
+TEST_F(MultiTouchInputMapperTest, Process_WhenBtnTouchPresent_HoversIfItsValueIsZero) {
+ MultiTouchInputMapper* mapper = new MultiTouchInputMapper(mDevice);
+ addConfigurationProperty("touch.deviceType", "touchScreen");
+ prepareDisplay(DISPLAY_ORIENTATION_0);
+ prepareAxes(POSITION | ID | SLOT);
+ mFakeEventHub->addKey(DEVICE_ID, BTN_TOUCH, AKEYCODE_UNKNOWN, 0);
+ addMapperAndConfigure(mapper);
+
+ NotifyMotionArgs motionArgs;
+
+ // initially hovering because BTN_TOUCH not sent yet, pressure defaults to 0
+ processId(mapper, 1);
+ processPosition(mapper, 100, 200);
+ processSync(mapper);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_ENTER, motionArgs.action);
+ ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
+ toDisplayX(100), toDisplayY(200), 0, 0, 0, 0, 0, 0, 0, 0));
+
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_MOVE, motionArgs.action);
+ ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
+ toDisplayX(100), toDisplayY(200), 0, 0, 0, 0, 0, 0, 0, 0));
+
+ // move a little
+ processPosition(mapper, 150, 250);
+ processSync(mapper);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_MOVE, motionArgs.action);
+ ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
+ toDisplayX(150), toDisplayY(250), 0, 0, 0, 0, 0, 0, 0, 0));
+
+ // down when BTN_TOUCH is pressed, pressure defaults to 1
+ processKey(mapper, BTN_TOUCH, 1);
+ processSync(mapper);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_EXIT, motionArgs.action);
+ ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
+ toDisplayX(150), toDisplayY(250), 0, 0, 0, 0, 0, 0, 0, 0));
+
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_DOWN, motionArgs.action);
+ ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
+ toDisplayX(150), toDisplayY(250), 1, 0, 0, 0, 0, 0, 0, 0));
+
+ // up when BTN_TOUCH is released, hover restored
+ processKey(mapper, BTN_TOUCH, 0);
+ processSync(mapper);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_UP, motionArgs.action);
+ ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
+ toDisplayX(150), toDisplayY(250), 1, 0, 0, 0, 0, 0, 0, 0));
+
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_ENTER, motionArgs.action);
+ ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
+ toDisplayX(150), toDisplayY(250), 0, 0, 0, 0, 0, 0, 0, 0));
+
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_MOVE, motionArgs.action);
+ ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
+ toDisplayX(150), toDisplayY(250), 0, 0, 0, 0, 0, 0, 0, 0));
+
+ // exit hover when pointer goes away
+ processId(mapper, -1);
+ processSync(mapper);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_EXIT, motionArgs.action);
+ ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
+ toDisplayX(150), toDisplayY(250), 0, 0, 0, 0, 0, 0, 0, 0));
+}
+
+TEST_F(MultiTouchInputMapperTest, Process_WhenAbsMTDistanceIsPresent_HoversIfItsValueIsGreaterThanZero) {
+ MultiTouchInputMapper* mapper = new MultiTouchInputMapper(mDevice);
+ addConfigurationProperty("touch.deviceType", "touchScreen");
+ prepareDisplay(DISPLAY_ORIENTATION_0);
+ prepareAxes(POSITION | ID | SLOT | DISTANCE);
+ addMapperAndConfigure(mapper);
+
+ NotifyMotionArgs motionArgs;
+
+ // initially hovering because distance is 1, pressure defaults to 0
+ processId(mapper, 1);
+ processPosition(mapper, 100, 200);
+ processDistance(mapper, 1);
+ processSync(mapper);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_ENTER, motionArgs.action);
+ ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
+ toDisplayX(100), toDisplayY(200), 0, 0, 0, 0, 0, 0, 0, 1));
+
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_MOVE, motionArgs.action);
+ ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
+ toDisplayX(100), toDisplayY(200), 0, 0, 0, 0, 0, 0, 0, 1));
+
+ // move a little
+ processPosition(mapper, 150, 250);
+ processSync(mapper);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_MOVE, motionArgs.action);
+ ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
+ toDisplayX(150), toDisplayY(250), 0, 0, 0, 0, 0, 0, 0, 1));
+
+ // down when distance goes to 0, pressure defaults to 1
+ processDistance(mapper, 0);
+ processSync(mapper);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_EXIT, motionArgs.action);
+ ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
+ toDisplayX(150), toDisplayY(250), 0, 0, 0, 0, 0, 0, 0, 1));
+
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_DOWN, motionArgs.action);
+ ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
+ toDisplayX(150), toDisplayY(250), 1, 0, 0, 0, 0, 0, 0, 0));
+
+ // up when distance goes to 1, hover restored
+ processDistance(mapper, 1);
+ processSync(mapper);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_UP, motionArgs.action);
+ ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
+ toDisplayX(150), toDisplayY(250), 1, 0, 0, 0, 0, 0, 0, 0));
+
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_ENTER, motionArgs.action);
+ ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
+ toDisplayX(150), toDisplayY(250), 0, 0, 0, 0, 0, 0, 0, 1));
+
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_MOVE, motionArgs.action);
+ ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
+ toDisplayX(150), toDisplayY(250), 0, 0, 0, 0, 0, 0, 0, 1));
+
+ // exit hover when pointer goes away
+ processId(mapper, -1);
+ processSync(mapper);
+ ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
+ ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_EXIT, motionArgs.action);
+ ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
+ toDisplayX(150), toDisplayY(250), 0, 0, 0, 0, 0, 0, 0, 1));
+}
+
+
} // namespace android
diff --git a/services/java/com/android/server/BackupManagerService.java b/services/java/com/android/server/BackupManagerService.java
index bdd8938..2e3d6dd 100644
--- a/services/java/com/android/server/BackupManagerService.java
+++ b/services/java/com/android/server/BackupManagerService.java
@@ -129,6 +129,7 @@
class BackupManagerService extends IBackupManager.Stub {
private static final String TAG = "BackupManagerService";
private static final boolean DEBUG = true;
+ private static final boolean MORE_DEBUG = false;
// Name and current contents version of the full-backup manifest file
static final String BACKUP_MANIFEST_FILENAME = "_manifest";
@@ -851,10 +852,10 @@
info = mPackageManager.getPackageInfo(pkg, 0);
mEverStoredApps.add(pkg);
temp.writeUTF(pkg);
- if (DEBUG) Slog.v(TAG, " + " + pkg);
+ if (MORE_DEBUG) Slog.v(TAG, " + " + pkg);
} catch (NameNotFoundException e) {
// nope, this package was uninstalled; don't include it
- if (DEBUG) Slog.v(TAG, " - " + pkg);
+ if (MORE_DEBUG) Slog.v(TAG, " - " + pkg);
}
}
} catch (EOFException e) {
@@ -1246,7 +1247,7 @@
private void addPackageParticipantsLockedInner(String packageName,
List<PackageInfo> targetPkgs) {
- if (DEBUG) {
+ if (MORE_DEBUG) {
Slog.v(TAG, "Adding " + targetPkgs.size() + " backup participants:");
for (PackageInfo p : targetPkgs) {
Slog.v(TAG, " " + p + " agent=" + p.applicationInfo.backupAgentName
@@ -1296,7 +1297,7 @@
private void removePackageParticipantsLockedInner(String packageName,
List<String> allPackageNames) {
- if (DEBUG) {
+ if (MORE_DEBUG) {
Slog.v(TAG, "removePackageParticipantsLockedInner (" + packageName
+ ") removing " + allPackageNames.size() + " entries");
for (String p : allPackageNames) {
@@ -1320,7 +1321,7 @@
// We can't just remove(app) because the instances are different.
for (ApplicationInfo entry: set) {
if (entry.packageName.equals(pkg)) {
- if (DEBUG) Slog.v(TAG, " removing participant " + pkg);
+ if (MORE_DEBUG) Slog.v(TAG, " removing participant " + pkg);
set.remove(entry);
removeEverBackedUp(pkg);
break;
@@ -1403,7 +1404,8 @@
// Remove our awareness of having ever backed up the given package
void removeEverBackedUp(String packageName) {
- if (DEBUG) Slog.v(TAG, "Removing backed-up knowledge of " + packageName + ", new set:");
+ if (DEBUG) Slog.v(TAG, "Removing backed-up knowledge of " + packageName);
+ if (MORE_DEBUG) Slog.v(TAG, "New set:");
synchronized (mEverStoredApps) {
// Rewrite the file and rename to overwrite. If we reboot in the middle,
@@ -1416,7 +1418,7 @@
mEverStoredApps.remove(packageName);
for (String s : mEverStoredApps) {
known.writeUTF(s);
- if (DEBUG) Slog.v(TAG, " " + s);
+ if (MORE_DEBUG) Slog.v(TAG, " " + s);
}
known.close();
known = null;
@@ -1460,7 +1462,7 @@
if (DEBUG) Slog.v(TAG, "Ancestral packages: " + mAncestralPackages.size());
for (String pkgName : mAncestralPackages) {
af.writeUTF(pkgName);
- if (DEBUG) Slog.v(TAG, " " + pkgName);
+ if (MORE_DEBUG) Slog.v(TAG, " " + pkgName);
}
}
af.close();
@@ -1523,7 +1525,7 @@
try {
PackageInfo info = mPackageManager.getPackageInfo(packageName, 0);
if ((info.applicationInfo.flags & ApplicationInfo.FLAG_ALLOW_CLEAR_USER_DATA) == 0) {
- if (DEBUG) Slog.i(TAG, "allowClearUserData=false so not wiping "
+ if (MORE_DEBUG) Slog.i(TAG, "allowClearUserData=false so not wiping "
+ packageName);
return;
}
@@ -1593,13 +1595,13 @@
}
}
mBackupHandler.removeMessages(MSG_TIMEOUT);
- if (DEBUG) Slog.v(TAG, "operation " + Integer.toHexString(token)
+ if (MORE_DEBUG) Slog.v(TAG, "operation " + Integer.toHexString(token)
+ " complete: finalState=" + finalState);
return finalState == OP_ACKNOWLEDGED;
}
void prepareOperationTimeout(int token, long interval) {
- if (DEBUG) Slog.v(TAG, "starting timeout: token=" + Integer.toHexString(token)
+ if (MORE_DEBUG) Slog.v(TAG, "starting timeout: token=" + Integer.toHexString(token)
+ " interval=" + interval);
synchronized (mCurrentOpLock) {
mCurrentOperations.put(token, OP_PENDING);
@@ -1937,7 +1939,7 @@
BackupDataOutput output = new BackupDataOutput(
mPipe.getFileDescriptor());
- if (DEBUG) Slog.d(TAG, "Writing manifest for " + mPackage.packageName);
+ if (MORE_DEBUG) Slog.d(TAG, "Writing manifest for " + mPackage.packageName);
writeAppManifest(mPackage, mManifestFile, mSendApk);
FullBackup.backupToTar(mPackage.packageName, null, null,
mFilesDir.getAbsolutePath(),
@@ -1948,7 +1950,7 @@
writeApkToBackup(mPackage, output);
}
- if (DEBUG) Slog.d(TAG, "Calling doFullBackup()");
+ if (DEBUG) Slog.d(TAG, "Calling doFullBackup() on " + mPackage.packageName);
prepareOperationTimeout(mToken, TIMEOUT_FULL_BACKUP_INTERVAL);
mAgent.doFullBackup(mPipe, mToken, mBackupManagerBinder);
} catch (IOException e) {
@@ -2285,7 +2287,7 @@
// check for .obb and save those too
final File obbDir = Environment.getExternalStorageAppObbDirectory(pkg.packageName);
if (obbDir != null) {
- if (DEBUG) Log.i(TAG, "obb dir: " + obbDir.getAbsolutePath());
+ if (MORE_DEBUG) Log.i(TAG, "obb dir: " + obbDir.getAbsolutePath());
File[] obbFiles = obbDir.listFiles();
if (obbFiles != null) {
final String obbDirName = obbDir.getAbsolutePath();
@@ -2374,10 +2376,10 @@
// The agent was running with a stub Application object, so shut it down.
if (app.uid != Process.SYSTEM_UID
&& app.uid != Process.PHONE_UID) {
- if (DEBUG) Slog.d(TAG, "Backup complete, killing host process");
+ if (MORE_DEBUG) Slog.d(TAG, "Backup complete, killing host process");
mActivityManager.killApplicationProcess(app.processName, app.uid);
} else {
- if (DEBUG) Slog.d(TAG, "Not killing after restore: " + app.processName);
+ if (MORE_DEBUG) Slog.d(TAG, "Not killing after restore: " + app.processName);
}
} catch (RemoteException e) {
Slog.d(TAG, "Lost app trying to shut down");
@@ -2600,7 +2602,7 @@
didRestore = restoreOneFile(in, buffer);
} while (didRestore);
- if (DEBUG) Slog.v(TAG, "Done consuming input tarfile, total bytes=" + mBytes);
+ if (MORE_DEBUG) Slog.v(TAG, "Done consuming input tarfile, total bytes=" + mBytes);
} catch (IOException e) {
Slog.e(TAG, "Unable to read restore input");
} finally {
@@ -2624,7 +2626,7 @@
}
sendEndRestore();
mWakelock.release();
- if (DEBUG) Slog.d(TAG, "Full restore pass complete.");
+ Slog.d(TAG, "Full restore pass complete.");
}
}
@@ -2722,7 +2724,7 @@
try {
info = readTarHeaders(instream);
if (info != null) {
- if (DEBUG) {
+ if (MORE_DEBUG) {
dumpFileMetadata(info);
}
@@ -2910,7 +2912,6 @@
boolean pipeOkay = true;
FileOutputStream pipe = new FileOutputStream(
mPipes[1].getFileDescriptor());
- if (DEBUG) Slog.d(TAG, "Piping data to agent");
while (toCopy > 0) {
int toRead = (toCopy > buffer.length)
? buffer.length : (int)toCopy;
@@ -3629,7 +3630,7 @@
// Allow unsigned apps, but not signed on one device and unsigned on the other
// !!! TODO: is this the right policy?
Signature[] deviceSigs = target.signatures;
- if (DEBUG) Slog.v(TAG, "signaturesMatch(): stored=" + storedSigs
+ if (MORE_DEBUG) Slog.v(TAG, "signaturesMatch(): stored=" + storedSigs
+ " device=" + deviceSigs);
if ((storedSigs == null || storedSigs.length == 0)
&& (deviceSigs == null || deviceSigs.length == 0)) {
@@ -4189,7 +4190,7 @@
// in the set; we want to avoid touching the disk redundantly.
writeToJournalLocked(packageName);
- if (DEBUG) {
+ if (MORE_DEBUG) {
int numKeys = mPendingBackups.size();
Slog.d(TAG, "Now awaiting backup for " + numKeys + " participants:");
for (BackupRequest b : mPendingBackups.values()) {
@@ -4387,7 +4388,7 @@
}
Binder.restoreCallingIdentity(oldId);
}
- if (DEBUG) Slog.d(TAG, "Full backup done; returning to caller");
+ if (MORE_DEBUG) Slog.d(TAG, "Full backup done; returning to caller");
}
public void fullRestore(ParcelFileDescriptor fd) {
@@ -4446,7 +4447,7 @@
}
void startConfirmationTimeout(int token, FullParams params) {
- if (DEBUG) Slog.d(TAG, "Posting conf timeout msg after "
+ if (MORE_DEBUG) Slog.d(TAG, "Posting conf timeout msg after "
+ TIMEOUT_FULL_CONFIRMATION + " millis");
Message msg = mBackupHandler.obtainMessage(MSG_FULL_CONFIRMATION_TIMEOUT,
token, 0, params);
@@ -4625,7 +4626,7 @@
public String getCurrentTransport() {
mContext.enforceCallingOrSelfPermission(android.Manifest.permission.BACKUP,
"getCurrentTransport");
- if (DEBUG) Slog.v(TAG, "... getCurrentTransport() returning " + mCurrentTransport);
+ if (MORE_DEBUG) Slog.v(TAG, "... getCurrentTransport() returning " + mCurrentTransport);
return mCurrentTransport;
}
@@ -4682,7 +4683,7 @@
if (transport != null) {
try {
final Intent intent = transport.configurationIntent();
- if (DEBUG) Slog.d(TAG, "getConfigurationIntent() returning config intent "
+ if (MORE_DEBUG) Slog.d(TAG, "getConfigurationIntent() returning config intent "
+ intent);
return intent;
} catch (RemoteException e) {
@@ -4708,7 +4709,7 @@
if (transport != null) {
try {
final String text = transport.currentDestinationString();
- if (DEBUG) Slog.d(TAG, "getDestinationString() returning " + text);
+ if (MORE_DEBUG) Slog.d(TAG, "getDestinationString() returning " + text);
return text;
} catch (RemoteException e) {
/* fall through to return null */
@@ -4853,7 +4854,7 @@
// completed the given outstanding asynchronous backup/restore operation.
public void opComplete(int token) {
synchronized (mCurrentOpLock) {
- if (DEBUG) Slog.v(TAG, "opComplete: " + Integer.toHexString(token));
+ if (MORE_DEBUG) Slog.v(TAG, "opComplete: " + Integer.toHexString(token));
mCurrentOperations.put(token, OP_ACKNOWLEDGED);
mCurrentOpLock.notifyAll();
}
diff --git a/services/java/com/android/server/ConnectivityService.java b/services/java/com/android/server/ConnectivityService.java
index 2a724d4..541a8cf 100644
--- a/services/java/com/android/server/ConnectivityService.java
+++ b/services/java/com/android/server/ConnectivityService.java
@@ -900,7 +900,7 @@
!network.isTeardownRequested()) {
if (ni.isConnected() == true) {
// add the pid-specific dns
- handleDnsConfigurationChange(networkType);
+ handleDnsConfigurationChange(usedNetworkType);
if (DBG) log("special network already active");
return Phone.APN_ALREADY_ACTIVE;
}
diff --git a/services/java/com/android/server/TextServicesManagerService.java b/services/java/com/android/server/TextServicesManagerService.java
index 837778e..e97df84 100644
--- a/services/java/com/android/server/TextServicesManagerService.java
+++ b/services/java/com/android/server/TextServicesManagerService.java
@@ -80,7 +80,7 @@
// Set the current spell checker if there is one or more spell checkers
// available. In this case, "sci" is the first one in the available spell
// checkers.
- setCurrentSpellCheckerLocked(sci);
+ setCurrentSpellCheckerLocked(sci.getId());
}
}
}
@@ -95,12 +95,14 @@
if (sci == null) return;
final String packageName = sci.getPackageName();
final int change = isPackageDisappearing(packageName);
- if (change == PACKAGE_PERMANENT_CHANGE || change == PACKAGE_TEMPORARY_CHANGE) {
- // Package disappearing
- setCurrentSpellCheckerLocked(findAvailSpellCheckerLocked(null, packageName));
- } else if (isPackageModified(packageName)) {
- // Package modified
- setCurrentSpellCheckerLocked(findAvailSpellCheckerLocked(null, packageName));
+ if (// Package disappearing
+ change == PACKAGE_PERMANENT_CHANGE || change == PACKAGE_TEMPORARY_CHANGE
+ // Package modified
+ || isPackageModified(packageName)) {
+ sci = findAvailSpellCheckerLocked(null, packageName);
+ if (sci != null) {
+ setCurrentSpellCheckerLocked(sci.getId());
+ }
}
}
}
@@ -177,20 +179,20 @@
}
@Override
- public void getSpellCheckerService(SpellCheckerInfo info, String locale,
+ public void getSpellCheckerService(String sciId, String locale,
ITextServicesSessionListener tsListener, ISpellCheckerSessionListener scListener) {
if (!mSystemReady) {
return;
}
- if (info == null || tsListener == null || scListener == null) {
+ if (TextUtils.isEmpty(sciId) || tsListener == null || scListener == null) {
Slog.e(TAG, "getSpellCheckerService: Invalid input.");
return;
}
- final String sciId = info.getId();
synchronized(mSpellCheckerMap) {
if (!mSpellCheckerMap.containsKey(sciId)) {
return;
}
+ final SpellCheckerInfo sci = mSpellCheckerMap.get(sciId);
final int uid = Binder.getCallingUid();
if (mSpellCheckerBindGroups.containsKey(sciId)) {
final SpellCheckerBindGroup bindGroup = mSpellCheckerBindGroups.get(sciId);
@@ -234,7 +236,7 @@
}
final long ident = Binder.clearCallingIdentity();
try {
- startSpellCheckerServiceInnerLocked(info, locale, tsListener, scListener, uid);
+ startSpellCheckerServiceInnerLocked(sci, locale, tsListener, scListener, uid);
} finally {
Binder.restoreCallingIdentity(ident);
}
@@ -290,7 +292,7 @@
}
@Override
- public void setCurrentSpellChecker(SpellCheckerInfo sci) {
+ public void setCurrentSpellChecker(String sciId) {
synchronized(mSpellCheckerMap) {
if (mContext.checkCallingOrSelfPermission(
android.Manifest.permission.WRITE_SECURE_SETTINGS)
@@ -299,19 +301,19 @@
"Requires permission "
+ android.Manifest.permission.WRITE_SECURE_SETTINGS);
}
- setCurrentSpellCheckerLocked(sci);
+ setCurrentSpellCheckerLocked(sciId);
}
}
- private void setCurrentSpellCheckerLocked(SpellCheckerInfo sci) {
+ private void setCurrentSpellCheckerLocked(String sciId) {
if (DBG) {
- Slog.w(TAG, "setCurrentSpellChecker: " + sci.getId());
+ Slog.w(TAG, "setCurrentSpellChecker: " + sciId);
}
- if (sci == null || !mSpellCheckerMap.containsKey(sci.getId())) return;
+ if (TextUtils.isEmpty(sciId) || !mSpellCheckerMap.containsKey(sciId)) return;
final long ident = Binder.clearCallingIdentity();
try {
Settings.Secure.putString(mContext.getContentResolver(),
- Settings.Secure.SPELL_CHECKER_SERVICE, sci == null ? "" : sci.getId());
+ Settings.Secure.SPELL_CHECKER_SERVICE, sciId);
} finally {
Binder.restoreCallingIdentity(ident);
}
diff --git a/services/java/com/android/server/WallpaperManagerService.java b/services/java/com/android/server/WallpaperManagerService.java
index c129b97..2460fd6 100644
--- a/services/java/com/android/server/WallpaperManagerService.java
+++ b/services/java/com/android/server/WallpaperManagerService.java
@@ -68,7 +68,6 @@
import org.xmlpull.v1.XmlSerializer;
import com.android.internal.content.PackageMonitor;
-import com.android.internal.service.wallpaper.ImageWallpaper;
import com.android.internal.util.FastXmlSerializer;
import com.android.internal.util.JournaledFile;
@@ -150,8 +149,8 @@
* Name of the component used to display bitmap wallpapers from either the gallery or
* built-in wallpapers.
*/
- ComponentName mImageWallpaperComponent = new ComponentName("android",
- ImageWallpaper.class.getName());
+ ComponentName mImageWallpaperComponent = new ComponentName("com.android.systemui",
+ "com.android.systemui.ImageWallpaper");
WallpaperConnection mWallpaperConnection;
long mLastDiedTime;
diff --git a/services/java/com/android/server/connectivity/Vpn.java b/services/java/com/android/server/connectivity/Vpn.java
index 9cb772e..ecbad09 100644
--- a/services/java/com/android/server/connectivity/Vpn.java
+++ b/services/java/com/android/server/connectivity/Vpn.java
@@ -183,7 +183,9 @@
android.R.dimen.notification_large_icon_height);
icon.setBounds(0, 0, width, height);
bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
- icon.draw(new Canvas(bitmap));
+ Canvas c = new Canvas(bitmap);
+ icon.draw(c);
+ c.setBitmap(null);
}
// Configure the interface. Abort if any of these steps fails.
diff --git a/services/java/com/android/server/pm/PackageManagerService.java b/services/java/com/android/server/pm/PackageManagerService.java
index 88e0fa8..3d977d0 100644
--- a/services/java/com/android/server/pm/PackageManagerService.java
+++ b/services/java/com/android/server/pm/PackageManagerService.java
@@ -3326,7 +3326,7 @@
if (pkg.applicationInfo.nativeLibraryDir != null) {
try {
final File nativeLibraryDir = new File(pkg.applicationInfo.nativeLibraryDir);
- final String dataPathString = dataPath.getCanonicalFile().getPath();
+ final String dataPathString = dataPath.getCanonicalPath();
if (isSystemApp(pkg) && !isUpdatedSystemApp(pkg)) {
/*
@@ -3340,7 +3340,7 @@
Log.i(TAG, "removed obsolete native libraries for system package "
+ path);
}
- } else if (nativeLibraryDir.getCanonicalFile().getParent()
+ } else if (nativeLibraryDir.getParentFile().getCanonicalPath()
.equals(dataPathString)) {
/*
* Make sure the native library dir isn't a symlink to
diff --git a/services/java/com/android/server/usb/UsbDeviceManager.java b/services/java/com/android/server/usb/UsbDeviceManager.java
index dcf040a..86de880 100644
--- a/services/java/com/android/server/usb/UsbDeviceManager.java
+++ b/services/java/com/android/server/usb/UsbDeviceManager.java
@@ -388,13 +388,12 @@
}
private void setEnabledFunctions(String functions, boolean makeDefault) {
- if (mAdbEnabled) {
- functions = addFunction(functions, UsbManager.USB_FUNCTION_ADB);
- } else {
- functions = removeFunction(functions, UsbManager.USB_FUNCTION_ADB);
- }
-
if (functions != null && makeDefault) {
+ if (mAdbEnabled) {
+ functions = addFunction(functions, UsbManager.USB_FUNCTION_ADB);
+ } else {
+ functions = removeFunction(functions, UsbManager.USB_FUNCTION_ADB);
+ }
if (!mDefaultFunctions.equals(functions)) {
if (!setUsbConfig("none")) {
Slog.e(TAG, "Failed to disable USB");
@@ -418,6 +417,11 @@
if (functions == null) {
functions = mDefaultFunctions;
}
+ if (mAdbEnabled) {
+ functions = addFunction(functions, UsbManager.USB_FUNCTION_ADB);
+ } else {
+ functions = removeFunction(functions, UsbManager.USB_FUNCTION_ADB);
+ }
if (!mCurrentFunctions.equals(functions)) {
if (!setUsbConfig("none")) {
Slog.e(TAG, "Failed to disable USB");
diff --git a/services/java/com/android/server/wm/WindowManagerService.java b/services/java/com/android/server/wm/WindowManagerService.java
index f8059f5..e0b5e17 100644
--- a/services/java/com/android/server/wm/WindowManagerService.java
+++ b/services/java/com/android/server/wm/WindowManagerService.java
@@ -4919,6 +4919,7 @@
matrix.postTranslate(-(int)(frame.left*scale), -(int)(frame.top*scale));
Canvas canvas = new Canvas(bm);
canvas.drawBitmap(rawss, matrix, null);
+ canvas.setBitmap(null);
rawss.recycle();
return bm;
diff --git a/services/surfaceflinger/DisplayHardware/DisplayHardware.cpp b/services/surfaceflinger/DisplayHardware/DisplayHardware.cpp
index 7bf3e0a..f4be168 100644
--- a/services/surfaceflinger/DisplayHardware/DisplayHardware.cpp
+++ b/services/surfaceflinger/DisplayHardware/DisplayHardware.cpp
@@ -40,6 +40,7 @@
#include "GLExtensions.h"
#include "HWComposer.h"
+#include "SurfaceFlinger.h"
using namespace android;
@@ -75,7 +76,7 @@
const sp<SurfaceFlinger>& flinger,
uint32_t dpy)
: DisplayHardwareBase(flinger, dpy),
- mFlags(0), mHwc(0)
+ mFlinger(flinger), mFlags(0), mHwc(0)
{
init(dpy);
}
@@ -310,7 +311,7 @@
// initialize the H/W composer
- mHwc = new HWComposer();
+ mHwc = new HWComposer(mFlinger);
if (mHwc->initCheck() == NO_ERROR) {
mHwc->setFrameBuffer(mDisplay, mSurface);
}
diff --git a/services/surfaceflinger/DisplayHardware/DisplayHardware.h b/services/surfaceflinger/DisplayHardware/DisplayHardware.h
index cdf89fd..40a6f1e 100644
--- a/services/surfaceflinger/DisplayHardware/DisplayHardware.h
+++ b/services/surfaceflinger/DisplayHardware/DisplayHardware.h
@@ -95,6 +95,7 @@
void init(uint32_t displayIndex) __attribute__((noinline));
void fini() __attribute__((noinline));
+ sp<SurfaceFlinger> mFlinger;
EGLDisplay mDisplay;
EGLSurface mSurface;
EGLContext mContext;
diff --git a/services/surfaceflinger/DisplayHardware/DisplayHardwareBase.h b/services/surfaceflinger/DisplayHardware/DisplayHardwareBase.h
index 30eb258..3ebc7b6 100644
--- a/services/surfaceflinger/DisplayHardware/DisplayHardwareBase.h
+++ b/services/surfaceflinger/DisplayHardware/DisplayHardwareBase.h
@@ -37,7 +37,7 @@
~DisplayHardwareBase();
- // console managment
+ // console management
void releaseScreen() const;
void acquireScreen() const;
bool isScreenAcquired() const;
diff --git a/services/surfaceflinger/DisplayHardware/HWComposer.cpp b/services/surfaceflinger/DisplayHardware/HWComposer.cpp
index 4a3b20d..7d1bdf0 100644
--- a/services/surfaceflinger/DisplayHardware/HWComposer.cpp
+++ b/services/surfaceflinger/DisplayHardware/HWComposer.cpp
@@ -30,12 +30,14 @@
#include <EGL/egl.h>
#include "HWComposer.h"
+#include "SurfaceFlinger.h"
namespace android {
// ---------------------------------------------------------------------------
-HWComposer::HWComposer()
- : mModule(0), mHwc(0), mList(0), mCapacity(0),
+HWComposer::HWComposer(const sp<SurfaceFlinger>& flinger)
+ : mFlinger(flinger),
+ mModule(0), mHwc(0), mList(0), mCapacity(0),
mDpy(EGL_NO_DISPLAY), mSur(EGL_NO_SURFACE)
{
int err = hw_get_module(HWC_HARDWARE_MODULE_ID, &mModule);
@@ -44,6 +46,13 @@
err = hwc_open(mModule, &mHwc);
LOGE_IF(err, "%s device failed to initialize (%s)",
HWC_HARDWARE_COMPOSER, strerror(-err));
+ if (err == 0) {
+ if (mHwc->registerProcs) {
+ mCBContext.hwc = this;
+ mCBContext.procs.invalidate = &hook_invalidate;
+ mHwc->registerProcs(mHwc, &mCBContext.procs);
+ }
+ }
}
}
@@ -58,6 +67,14 @@
return mHwc ? NO_ERROR : NO_INIT;
}
+void HWComposer::hook_invalidate(struct hwc_procs* procs) {
+ reinterpret_cast<cb_context *>(procs)->hwc->invalidate();
+}
+
+void HWComposer::invalidate() {
+ mFlinger->signalEvent();
+}
+
void HWComposer::setFrameBuffer(EGLDisplay dpy, EGLSurface sur) {
mDpy = (hwc_display_t)dpy;
mSur = (hwc_surface_t)sur;
diff --git a/services/surfaceflinger/DisplayHardware/HWComposer.h b/services/surfaceflinger/DisplayHardware/HWComposer.h
index 5a9e9eb..983898a 100644
--- a/services/surfaceflinger/DisplayHardware/HWComposer.h
+++ b/services/surfaceflinger/DisplayHardware/HWComposer.h
@@ -24,16 +24,19 @@
#include <hardware/hwcomposer.h>
+#include <utils/StrongPointer.h>
+
namespace android {
// ---------------------------------------------------------------------------
class String8;
+class SurfaceFlinger;
class HWComposer
{
public:
- HWComposer();
+ HWComposer(const sp<SurfaceFlinger>& flinger);
~HWComposer();
status_t initCheck() const;
@@ -60,12 +63,21 @@
void dump(String8& out, char* scratch, size_t SIZE) const;
private:
+ struct cb_context {
+ hwc_procs_t procs;
+ HWComposer* hwc;
+ };
+ static void hook_invalidate(struct hwc_procs* procs);
+ void invalidate();
+
+ sp<SurfaceFlinger> mFlinger;
hw_module_t const* mModule;
hwc_composer_device_t* mHwc;
hwc_layer_list_t* mList;
size_t mCapacity;
hwc_display_t mDpy;
hwc_surface_t mSur;
+ cb_context mCBContext;
};
diff --git a/tests/GridLayoutTest/src/com/android/test/layout/Activity2.java b/tests/GridLayoutTest/src/com/android/test/layout/Activity2.java
index e1871ac..907ee9c 100644
--- a/tests/GridLayoutTest/src/com/android/test/layout/Activity2.java
+++ b/tests/GridLayoutTest/src/com/android/test/layout/Activity2.java
@@ -34,15 +34,17 @@
public class Activity2 extends Activity {
public static View create(Context context) {
- GridLayout vg = new GridLayout(context);
- vg.setUseDefaultMargins(true);
- vg.setAlignmentMode(ALIGN_BOUNDS);
+ GridLayout p = new GridLayout(context);
+ p.setUseDefaultMargins(true);
+ p.setAlignmentMode(ALIGN_BOUNDS);
+ p.setRowOrderPreserved(false);
+ p.setPadding(0, 0, 0, 0);
Spec row1 = spec(0);
Spec row2 = spec(1);
Spec row3 = spec(2, BASELINE);
Spec row4 = spec(3, BASELINE);
- Spec row5 = spec(4, FILL);
+ Spec row5 = spec(2, 3, FILL); // allow the last two rows to overlap the middle two
Spec row6 = spec(5);
Spec row7 = spec(6);
@@ -55,63 +57,63 @@
Spec col4b = spec(3, FILL);
{
- TextView v = new TextView(context);
- v.setTextSize(32);
- v.setText("Email setup");
- vg.addView(v, new LayoutParams(row1, col1a));
+ TextView c = new TextView(context);
+ c.setTextSize(32);
+ c.setText("Email setup");
+ p.addView(c, new LayoutParams(row1, col1a));
}
{
- TextView v = new TextView(context);
- v.setTextSize(16);
- v.setText("You can configure email in just a few steps:");
- vg.addView(v, new LayoutParams(row2, col1b));
+ TextView c = new TextView(context);
+ c.setTextSize(16);
+ c.setText("You can configure email in just a few steps:");
+ p.addView(c, new LayoutParams(row2, col1b));
}
{
- TextView v = new TextView(context);
- v.setText("Email address:");
- vg.addView(v, new LayoutParams(row3, col1c));
+ TextView c = new TextView(context);
+ c.setText("Email address:");
+ p.addView(c, new LayoutParams(row3, col1c));
}
{
- EditText v = new EditText(context);
- v.setInputType(TYPE_CLASS_TEXT | TYPE_TEXT_VARIATION_EMAIL_ADDRESS);
+ EditText c = new EditText(context);
+ c.setInputType(TYPE_CLASS_TEXT | TYPE_TEXT_VARIATION_EMAIL_ADDRESS);
{
LayoutParams lp = new LayoutParams(row3, col2);
- lp.width = (int) v.getPaint().measureText("Frederick.W.Flintstone");
- vg.addView(v, lp);
+ lp.width = (int) c.getPaint().measureText("Frederick.W.Flintstone");
+ p.addView(c, lp);
}
}
{
- TextView v = new TextView(context);
- v.setText("Password:");
- vg.addView(v, new LayoutParams(row4, col1c));
+ TextView c = new TextView(context);
+ c.setText("Password:");
+ p.addView(c, new LayoutParams(row4, col1c));
}
{
- TextView v = new EditText(context);
- v.setInputType(TYPE_CLASS_TEXT | TYPE_TEXT_VARIATION_PASSWORD);
+ TextView c = new EditText(context);
+ c.setInputType(TYPE_CLASS_TEXT | TYPE_TEXT_VARIATION_PASSWORD);
{
LayoutParams lp = new LayoutParams(row4, col2);
- lp.width = (int) v.getPaint().measureText("************");
- vg.addView(v, lp);
+ lp.width = (int) c.getPaint().measureText("************");
+ p.addView(c, lp);
}
}
{
- Space v = new Space(context);
+ Space c = new Space(context);
LayoutParams lp = new LayoutParams(row5, col3);
lp.setMargins(0, 0, 0, 0);
- vg.addView(v, lp);
+ p.addView(c, lp);
}
{
- Button v = new Button(context);
- v.setText("Manual setup");
- vg.addView(v, new LayoutParams(row6, col4a));
+ Button c = new Button(context);
+ c.setText("Manual setup");
+ p.addView(c, new LayoutParams(row6, col4a));
}
{
- Button v = new Button(context);
- v.setText("Next");
- vg.addView(v, new LayoutParams(row7, col4b));
+ Button c = new Button(context);
+ c.setText("Next");
+ p.addView(c, new LayoutParams(row7, col4b));
}
- return vg;
+ return p;
}
protected void onCreate(Bundle savedInstanceState) {
diff --git a/tests/HwAccelerationTest/src/com/android/test/hwui/PathsActivity.java b/tests/HwAccelerationTest/src/com/android/test/hwui/PathsActivity.java
index 833b61c..c241a62 100644
--- a/tests/HwAccelerationTest/src/com/android/test/hwui/PathsActivity.java
+++ b/tests/HwAccelerationTest/src/com/android/test/hwui/PathsActivity.java
@@ -101,6 +101,7 @@
Canvas canvas = new Canvas(mBitmap);
canvas.translate(-mPathBounds.left + mOffset * 1.5f, -mPathBounds.top + mOffset * 1.5f);
canvas.drawPath(mPath, mMediumPaint);
+ canvas.setBitmap(null);
}
@Override
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeResources.java b/tools/layoutlib/bridge/src/android/content/res/BridgeResources.java
similarity index 97%
rename from tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeResources.java
rename to tools/layoutlib/bridge/src/android/content/res/BridgeResources.java
index 1756496..625b40d 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeResources.java
+++ b/tools/layoutlib/bridge/src/android/content/res/BridgeResources.java
@@ -14,13 +14,15 @@
* limitations under the License.
*/
-package com.android.layoutlib.bridge.android;
+package android.content.res;
import com.android.ide.common.rendering.api.IProjectCallback;
import com.android.ide.common.rendering.api.LayoutLog;
import com.android.ide.common.rendering.api.ResourceValue;
import com.android.layoutlib.bridge.Bridge;
import com.android.layoutlib.bridge.BridgeConstants;
+import com.android.layoutlib.bridge.android.BridgeContext;
+import com.android.layoutlib.bridge.android.BridgeXmlBlockParser;
import com.android.layoutlib.bridge.impl.ParserFactory;
import com.android.layoutlib.bridge.impl.ResourceHelper;
import com.android.ninepatch.NinePatch;
@@ -30,13 +32,6 @@
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
-import android.content.res.AssetFileDescriptor;
-import android.content.res.AssetManager;
-import android.content.res.ColorStateList;
-import android.content.res.Configuration;
-import android.content.res.Resources;
-import android.content.res.TypedArray;
-import android.content.res.XmlResourceParser;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
@@ -94,7 +89,7 @@
* <p/>
* {@link Bridge} calls this method after setting up a new bridge.
*/
- /*package*/ static Resources initSystem(BridgeContext context,
+ public static Resources initSystem(BridgeContext context,
AssetManager assets,
DisplayMetrics metrics,
Configuration config,
@@ -110,7 +105,7 @@
* Disposes the static {@link Resources#mSystem} to make sure we don't leave objects
* around that would prevent us from unloading the library.
*/
- /*package*/ static void disposeSystem() {
+ public static void disposeSystem() {
if (Resources.mSystem instanceof BridgeResources) {
((BridgeResources)(Resources.mSystem)).mContext = null;
((BridgeResources)(Resources.mSystem)).mProjectCallback = null;
@@ -336,7 +331,7 @@
if (ResourceHelper.parseFloatAttribute(
value.getFirst(), v, mTmpValue, true /*requireUnit*/) &&
mTmpValue.type == TypedValue.TYPE_DIMENSION) {
- return mTmpValue.getDimension(mMetrics);
+ return mTmpValue.getDimension(getDisplayMetrics());
}
}
}
@@ -359,7 +354,8 @@
if (ResourceHelper.parseFloatAttribute(
value.getFirst(), v, mTmpValue, true /*requireUnit*/) &&
mTmpValue.type == TypedValue.TYPE_DIMENSION) {
- return TypedValue.complexToDimensionPixelOffset(mTmpValue.data, mMetrics);
+ return TypedValue.complexToDimensionPixelOffset(mTmpValue.data,
+ getDisplayMetrics());
}
}
}
@@ -382,7 +378,8 @@
if (ResourceHelper.parseFloatAttribute(
value.getFirst(), v, mTmpValue, true /*requireUnit*/) &&
mTmpValue.type == TypedValue.TYPE_DIMENSION) {
- return TypedValue.complexToDimensionPixelSize(mTmpValue.data, mMetrics);
+ return TypedValue.complexToDimensionPixelSize(mTmpValue.data,
+ getDisplayMetrics());
}
}
}
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeTypedArray.java b/tools/layoutlib/bridge/src/android/content/res/BridgeTypedArray.java
similarity index 98%
rename from tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeTypedArray.java
rename to tools/layoutlib/bridge/src/android/content/res/BridgeTypedArray.java
index fc2f2f8..9deed32 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeTypedArray.java
+++ b/tools/layoutlib/bridge/src/android/content/res/BridgeTypedArray.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.android.layoutlib.bridge.android;
+package android.content.res;
import com.android.ide.common.rendering.api.DeclareStyleableResourceValue;
import com.android.ide.common.rendering.api.LayoutLog;
@@ -24,6 +24,8 @@
import com.android.internal.util.XmlUtils;
import com.android.layoutlib.bridge.Bridge;
import com.android.layoutlib.bridge.BridgeConstants;
+import com.android.layoutlib.bridge.android.BridgeContext;
+import com.android.layoutlib.bridge.android.BridgeXmlBlockParser;
import com.android.layoutlib.bridge.impl.ParserFactory;
import com.android.layoutlib.bridge.impl.ResourceHelper;
import com.android.resources.ResourceType;
@@ -445,7 +447,7 @@
}
if (ResourceHelper.parseFloatAttribute(mNames[index], s, mValue, true /*requireUnit*/)) {
- return mValue.getDimension(mBridgeResources.mMetrics);
+ return mValue.getDimension(mBridgeResources.getDisplayMetrics());
}
// looks like we were unable to resolve the dimension value
@@ -572,7 +574,7 @@
}
if (ResourceHelper.parseFloatAttribute(mNames[index], s, mValue, true /*requireUnit*/)) {
- float f = mValue.getDimension(mBridgeResources.mMetrics);
+ float f = mValue.getDimension(mBridgeResources.getDisplayMetrics());
final int res = (int)(f+0.5f);
if (res != 0) return res;
diff --git a/tools/layoutlib/bridge/src/android/graphics/BitmapFactory_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/BitmapFactory_Delegate.java
index 080b85f..945b3cd7 100644
--- a/tools/layoutlib/bridge/src/android/graphics/BitmapFactory_Delegate.java
+++ b/tools/layoutlib/bridge/src/android/graphics/BitmapFactory_Delegate.java
@@ -17,12 +17,12 @@
package android.graphics;
import com.android.layoutlib.bridge.Bridge;
-import com.android.layoutlib.bridge.android.BridgeResources.NinePatchInputStream;
import com.android.layoutlib.bridge.impl.DelegateManager;
import com.android.ninepatch.NinePatchChunk;
import com.android.resources.Density;
import com.android.tools.layoutlib.annotations.LayoutlibDelegate;
+import android.content.res.BridgeResources.NinePatchInputStream;
import android.graphics.BitmapFactory.Options;
import java.io.FileDescriptor;
diff --git a/tools/layoutlib/bridge/src/android/view/LayoutInflater_Delegate.java b/tools/layoutlib/bridge/src/android/view/LayoutInflater_Delegate.java
index 3ef3288..64efa7e 100644
--- a/tools/layoutlib/bridge/src/android/view/LayoutInflater_Delegate.java
+++ b/tools/layoutlib/bridge/src/android/view/LayoutInflater_Delegate.java
@@ -38,11 +38,15 @@
*/
public class LayoutInflater_Delegate {
+ private static final String TAG_MERGE = "merge";
+
public static boolean sIsInInclude = false;
/**
* Recursive method used to descend down the xml hierarchy and instantiate
* views, instantiate their children, and then call onFinishInflate().
+ *
+ * This implementation just records the merge status before calling the default implementation.
*/
@LayoutlibDelegate
/*package*/ static void rInflate(LayoutInflater thisInflater,
@@ -58,37 +62,7 @@
// ---- START DEFAULT IMPLEMENTATION.
- final int depth = parser.getDepth();
- int type;
-
- while (((type = parser.next()) != XmlPullParser.END_TAG ||
- parser.getDepth() > depth) && type != XmlPullParser.END_DOCUMENT) {
-
- if (type != XmlPullParser.START_TAG) {
- continue;
- }
-
- final String name = parser.getName();
-
- if (LayoutInflater.TAG_REQUEST_FOCUS.equals(name)) {
- thisInflater.parseRequestFocus(parser, parent);
- } else if (LayoutInflater.TAG_INCLUDE.equals(name)) {
- if (parser.getDepth() == 0) {
- throw new InflateException("<include /> cannot be the root element");
- }
- thisInflater.parseInclude(parser, parent, attrs);
- } else if (LayoutInflater.TAG_MERGE.equals(name)) {
- throw new InflateException("<merge /> must be the root element");
- } else {
- final View view = thisInflater.createViewFromTag(parent, name, attrs);
- final ViewGroup viewGroup = (ViewGroup) parent;
- final ViewGroup.LayoutParams params = viewGroup.generateLayoutParams(attrs);
- thisInflater.rInflate(parser, view, attrs, true);
- viewGroup.addView(view, params);
- }
- }
-
- if (finishInflate) parent.onFinishInflate();
+ thisInflater.rInflate_Original(parser, parent, attrs, finishInflate);
// ---- END DEFAULT IMPLEMENTATION.
@@ -138,7 +112,7 @@
final String childName = childParser.getName();
- if (LayoutInflater.TAG_MERGE.equals(childName)) {
+ if (TAG_MERGE.equals(childName)) {
// Inflate all children.
thisInflater.rInflate(childParser, parent, childAttrs, false);
} else {
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java
index 69e0de9..b38b3b8 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java
@@ -47,6 +47,8 @@
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.res.AssetManager;
+import android.content.res.BridgeResources;
+import android.content.res.BridgeTypedArray;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.content.res.TypedArray;
@@ -813,7 +815,7 @@
return null;
}
- int getDynamicIdByStyle(StyleResourceValue resValue) {
+ public int getDynamicIdByStyle(StyleResourceValue resValue) {
if (mDynamicIdToStyleMap == null) {
// create the maps.
mDynamicIdToStyleMap = new HashMap<Integer, StyleResourceValue>();
@@ -843,7 +845,7 @@
return null;
}
- int getFrameworkResourceValue(ResourceType resType, String resName, int defValue) {
+ public int getFrameworkResourceValue(ResourceType resType, String resName, int defValue) {
Integer value = Bridge.getResourceId(resType, resName);
if (value != null) {
return value.intValue();
@@ -852,7 +854,7 @@
return defValue;
}
- int getProjectResourceValue(ResourceType resType, String resName, int defValue) {
+ public int getProjectResourceValue(ResourceType resType, String resName, int defValue) {
if (mProjectCallback != null) {
Integer value = mProjectCallback.getResourceId(resType, resName);
if (value != null) {
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/CustomBar.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/CustomBar.java
index df701d5..72ed351 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/CustomBar.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/CustomBar.java
@@ -230,7 +230,7 @@
if (ResourceHelper.parseFloatAttribute("textSize", textSize.getValue(), out,
true /*requireUnit*/)) {
textView.setTextSize(
- out.getDimension(bridgeContext.getResources().mMetrics));
+ out.getDimension(bridgeContext.getResources().getDisplayMetrics()));
}
}
diff --git a/tools/layoutlib/create/src/com/android/tools/layoutlib/create/Main.java b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/Main.java
index 9bf52c7..b027b6a 100644
--- a/tools/layoutlib/create/src/com/android/tools/layoutlib/create/Main.java
+++ b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/Main.java
@@ -167,5 +167,4 @@
return true;
}
-
}
diff --git a/voip/java/android/net/sip/SipManager.java b/voip/java/android/net/sip/SipManager.java
index dce46fe..cd0b5c4 100644
--- a/voip/java/android/net/sip/SipManager.java
+++ b/voip/java/android/net/sip/SipManager.java
@@ -471,6 +471,10 @@
try {
ISipSession session = mSipService.createSession(localProfile,
createRelay(listener, localProfile.getUriString()));
+ if (session == null) {
+ throw new SipException(
+ "SipService.createSession() returns null");
+ }
session.register(expiryTime);
} catch (RemoteException e) {
throw new SipException("register()", e);
@@ -492,6 +496,10 @@
try {
ISipSession session = mSipService.createSession(localProfile,
createRelay(listener, localProfile.getUriString()));
+ if (session == null) {
+ throw new SipException(
+ "SipService.createSession() returns null");
+ }
session.unregister();
} catch (RemoteException e) {
throw new SipException("unregister()", e);
@@ -513,7 +521,7 @@
try {
String callId = getCallId(incomingCallIntent);
ISipSession s = mSipService.getPendingSession(callId);
- return new SipSession(s);
+ return ((s == null) ? null : new SipSession(s));
} catch (RemoteException e) {
throw new SipException("getSessionFor()", e);
}