Merge "Add a minimum timeout for double-tap in GestureDetector" into klp-dev
diff --git a/Android.mk b/Android.mk
index eaafa87..30b17f5 100644
--- a/Android.mk
+++ b/Android.mk
@@ -535,16 +535,23 @@
frameworks/base/docs/knowntags.txt
sample_dir := development/samples
+new_sample_dir := developers/samples/android
# the list here should match the list of samples included in the sdk samples package
# (see development/build/sdk.atree)
# remove htmlified samples for now -- samples are still available through the SDK
web_docs_sample_code_flags := \
-hdf android.hasSamples 1 \
+ -samplecode $(new_sample_dir)/input/gestures/BasicGestureDetect/BasicGestureDetect \
+ samples/BasicGestureDetect/ "Basic Gestures" \
-samplecode $(sample_dir)/AccelerometerPlay \
samples/AccelerometerPlay "Accelerometer Play" \
-samplecode $(sample_dir)/ActionBarCompat \
- samples/ActionBarCompat "Action Bar Compatibility"
+ samples/ActionBarCompat "Action Bar Compatibility" \
+ -samplecode $(sample_dir)/BluetoothHDP \
+ samples/BluetoothHDP "Bluetooth HDP Demo" \
+ -samplecode $(sample_dir)/BluetoothLeGatt \
+ samples/BluetoothLeGatt "Bluetooth HDP Demo"
# -samplecode $(sample_dir)/AndroidBeamDemo \
# samples/AndroidBeamDemo "Android Beam Demo" \
# -samplecode $(sample_dir)/ApiDemos \
@@ -557,8 +564,6 @@
# samples/BackupRestore "Backup and Restore" \
# -samplecode $(sample_dir)/BluetoothChat \
# samples/BluetoothChat "Bluetooth Chat" \
-# -samplecode $(sample_dir)/BluetoothHDP \
-# samples/BluetoothHDP "Bluetooth HDP Demo" \
# -samplecode $(sample_dir)/BusinessCard \
# samples/BusinessCard "Business Card" \
# -samplecode $(sample_dir)/ContactManager \
diff --git a/CleanSpec.mk b/CleanSpec.mk
index 39742db6..8809bc7 100644
--- a/CleanSpec.mk
+++ b/CleanSpec.mk
@@ -176,6 +176,9 @@
$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/framework-base_intermediates/src/core/java/android/os/IBattery*)
$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/framework-base_intermediates)
$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/android_stubs_current_intermediates)
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/usr/idc/frameworks)
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/usr/keylayout/frameworks)
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/usr/keychars/frameworks)
# ************************************************
# NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST
# ************************************************
diff --git a/api/current.txt b/api/current.txt
index 268bee0..1443bee 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -3172,6 +3172,7 @@
public class AppOpsManager {
method public int checkOp(int, int, java.lang.String);
method public int checkOpNoThrow(int, int, java.lang.String);
+ method public void checkPackage(int, java.lang.String);
method public void finishOp(int, int, java.lang.String);
method public void finishOp(int);
method public int noteOp(int, int, java.lang.String);
@@ -5624,6 +5625,7 @@
method public android.os.Bundle call(java.lang.String, java.lang.String, android.os.Bundle);
method public abstract int delete(android.net.Uri, java.lang.String, java.lang.String[]);
method public void dump(java.io.FileDescriptor, java.io.PrintWriter, java.lang.String[]);
+ method public final java.lang.String getCallingPackage();
method public final android.content.Context getContext();
method public final android.content.pm.PathPermission[] getPathPermissions();
method public final java.lang.String getReadPermission();
@@ -6375,7 +6377,6 @@
field public static final java.lang.String ACTION_PROVIDER_CHANGED = "android.intent.action.PROVIDER_CHANGED";
field public static final java.lang.String ACTION_QUICK_CLOCK = "android.intent.action.QUICK_CLOCK";
field public static final java.lang.String ACTION_REBOOT = "android.intent.action.REBOOT";
- field public static final java.lang.String ACTION_RESTRICTIONS_PIN_CHALLENGE = "android.intent.action.RESTRICTIONS_PIN_CHALLENGE";
field public static final java.lang.String ACTION_RUN = "android.intent.action.RUN";
field public static final java.lang.String ACTION_SCREEN_OFF = "android.intent.action.SCREEN_OFF";
field public static final java.lang.String ACTION_SCREEN_ON = "android.intent.action.SCREEN_ON";
@@ -6904,59 +6905,6 @@
method public abstract void onStatusChanged(int);
}
- public class UndoManager {
- ctor public UndoManager();
- method public void addOperation(android.content.UndoOperation<?>, int);
- method public void beginUpdate(java.lang.CharSequence);
- method public int commitState(android.content.UndoOwner);
- method public int countRedos(android.content.UndoOwner[]);
- method public int countUndos(android.content.UndoOwner[]);
- method public void endUpdate();
- method public int forgetRedos(android.content.UndoOwner[], int);
- method public int forgetUndos(android.content.UndoOwner[], int);
- method public int getHistorySize();
- method public android.content.UndoOperation<?> getLastOperation(int);
- method public android.content.UndoOperation<?> getLastOperation(android.content.UndoOwner, int);
- method public T getLastOperation(java.lang.Class<T>, android.content.UndoOwner, int);
- method public android.content.UndoOwner getOwner(java.lang.String, java.lang.Object);
- method public java.lang.CharSequence getRedoLabel(android.content.UndoOwner[]);
- method public java.lang.CharSequence getUndoLabel(android.content.UndoOwner[]);
- method public int getUpdateNestingLevel();
- method public boolean hasOperation(android.content.UndoOwner);
- method public boolean isInUndo();
- method public boolean isInUpdate();
- method public int redo(android.content.UndoOwner[], int);
- method public void restoreInstanceState(android.os.Parcelable);
- method public android.os.Parcelable saveInstanceState();
- method public void setHistorySize(int);
- method public void setUndoLabel(java.lang.CharSequence);
- method public void suggestUndoLabel(java.lang.CharSequence);
- method public boolean uncommitState(int, android.content.UndoOwner);
- method public int undo(android.content.UndoOwner[], int);
- field public static final int MERGE_MODE_ANY = 2; // 0x2
- field public static final int MERGE_MODE_NONE = 0; // 0x0
- field public static final int MERGE_MODE_UNIQUE = 1; // 0x1
- }
-
- public abstract class UndoOperation implements android.os.Parcelable {
- ctor public UndoOperation(android.content.UndoOwner);
- ctor protected UndoOperation(android.os.Parcel, java.lang.ClassLoader);
- method public boolean allowMerge();
- method public abstract void commit();
- method public int describeContents();
- method public android.content.UndoOwner getOwner();
- method public DATA getOwnerData();
- method public boolean hasData();
- method public boolean matchOwner(android.content.UndoOwner);
- method public abstract void redo();
- method public abstract void undo();
- }
-
- public class UndoOwner {
- method public java.lang.Object getData();
- method public java.lang.String getTag();
- }
-
public class UriMatcher {
ctor public UriMatcher(int);
method public void addURI(java.lang.String, java.lang.String, int);
@@ -11948,20 +11896,19 @@
field public static final int TEMPORARILY_UNAVAILABLE = 1; // 0x1
}
- public abstract class SettingInjectorService extends android.app.IntentService {
+ public abstract class SettingInjectorService extends android.app.Service {
ctor public SettingInjectorService(java.lang.String);
- method protected abstract android.location.SettingInjectorService.Status getStatus();
- method protected final void onHandleIntent(android.content.Intent);
+ method public final android.os.IBinder onBind(android.content.Intent);
+ method protected abstract boolean onGetEnabled();
+ method protected abstract java.lang.String onGetSummary();
+ method public final void onStart(android.content.Intent, int);
+ method public final int onStartCommand(android.content.Intent, int, int);
field public static final java.lang.String ACTION_INJECTED_SETTING_CHANGED = "android.location.InjectedSettingChanged";
field public static final java.lang.String ACTION_SERVICE_INTENT = "android.location.SettingInjectorService";
field public static final java.lang.String ATTRIBUTES_NAME = "injected-location-setting";
field public static final java.lang.String META_DATA_NAME = "android.location.SettingInjectorService";
}
- public static final class SettingInjectorService.Status {
- ctor public SettingInjectorService.Status(java.lang.String, boolean);
- }
-
}
package android.media {
@@ -17704,7 +17651,7 @@
field public static final int JELLY_BEAN = 16; // 0x10
field public static final int JELLY_BEAN_MR1 = 17; // 0x11
field public static final int JELLY_BEAN_MR2 = 18; // 0x12
- field public static final int KEY_LIME_PIE = 10000; // 0x2710
+ field public static final int KITKAT = 10000; // 0x2710
}
public final class Bundle implements java.lang.Cloneable android.os.Parcelable {
@@ -18606,14 +18553,13 @@
method public java.lang.String getUserName();
method public android.os.Bundle getUserRestrictions();
method public android.os.Bundle getUserRestrictions(android.os.UserHandle);
- method public boolean hasRestrictionsPin();
method public boolean isUserAGoat();
method public boolean isUserRunning(android.os.UserHandle);
method public boolean isUserRunningOrStopping(android.os.UserHandle);
+ method public boolean setRestrictionsChallenge(java.lang.String);
method public void setUserRestriction(java.lang.String, boolean);
method public void setUserRestrictions(android.os.Bundle);
method public void setUserRestrictions(android.os.Bundle, android.os.UserHandle);
- field public static final java.lang.String DISALLOW_APP_RESTRICTIONS = "no_app_restrictions";
field public static final java.lang.String DISALLOW_CONFIG_BLUETOOTH = "no_config_bluetooth";
field public static final java.lang.String DISALLOW_CONFIG_CREDENTIALS = "no_config_credentials";
field public static final java.lang.String DISALLOW_CONFIG_WIFI = "no_config_wifi";
@@ -19053,39 +18999,21 @@
method public void clear();
method public int describeContents();
method public int getColorMode();
- method public int getDuplexMode();
- method public int getFittingMode();
- method public android.print.PrintAttributes.Tray getInputTray();
method public android.print.PrintAttributes.Margins getMargins();
method public android.print.PrintAttributes.MediaSize getMediaSize();
- method public int getOrientation();
- method public android.print.PrintAttributes.Tray getOutputTray();
method public android.print.PrintAttributes.Resolution getResolution();
method public void writeToParcel(android.os.Parcel, int);
field public static final int COLOR_MODE_COLOR = 2; // 0x2
field public static final int COLOR_MODE_MONOCHROME = 1; // 0x1
field public static final android.os.Parcelable.Creator CREATOR;
- field public static final int DUPLEX_MODE_LONG_EDGE = 2; // 0x2
- field public static final int DUPLEX_MODE_NONE = 1; // 0x1
- field public static final int DUPLEX_MODE_SHORT_EDGE = 4; // 0x4
- field public static final int FITTING_MODE_NONE = 1; // 0x1
- field public static final int FITTING_MODE_SCALE_TO_FILL = 4; // 0x4
- field public static final int FITTING_MODE_SCALE_TO_FIT = 2; // 0x2
- field public static final int ORIENTATION_LANDSCAPE = 2; // 0x2
- field public static final int ORIENTATION_PORTRAIT = 1; // 0x1
}
public static final class PrintAttributes.Builder {
ctor public PrintAttributes.Builder();
method public android.print.PrintAttributes create();
method public android.print.PrintAttributes.Builder setColorMode(int);
- method public android.print.PrintAttributes.Builder setDuplexMode(int);
- method public android.print.PrintAttributes.Builder setFittingMode(int);
- method public android.print.PrintAttributes.Builder setInputTray(android.print.PrintAttributes.Tray);
method public android.print.PrintAttributes.Builder setMargins(android.print.PrintAttributes.Margins);
method public android.print.PrintAttributes.Builder setMediaSize(android.print.PrintAttributes.MediaSize);
- method public android.print.PrintAttributes.Builder setOrientation(int);
- method public android.print.PrintAttributes.Builder setOutputTray(android.print.PrintAttributes.Tray);
method public android.print.PrintAttributes.Builder setResolution(android.print.PrintAttributes.Resolution);
}
@@ -19100,66 +19028,62 @@
public static final class PrintAttributes.MediaSize {
ctor public PrintAttributes.MediaSize(java.lang.String, java.lang.String, int, int);
- method public static android.print.PrintAttributes.MediaSize createMediaSize(android.content.pm.PackageManager, int);
+ method public android.print.PrintAttributes.MediaSize asLandscape();
+ method public android.print.PrintAttributes.MediaSize asPortrait();
method public int getHeightMils();
method public java.lang.String getId();
- method public java.lang.String getLabel();
+ method public java.lang.String getLabel(android.content.pm.PackageManager);
method public int getWidthMils();
- field public static final int ISO_A0 = 1; // 0x1
- field public static final int ISO_A1 = 2; // 0x2
- field public static final int ISO_A10 = 11; // 0xb
- field public static final int ISO_A2 = 3; // 0x3
- field public static final int ISO_A3 = 4; // 0x4
- field public static final int ISO_A4 = 5; // 0x5
- field public static final int ISO_A5 = 6; // 0x6
- field public static final int ISO_A6 = 7; // 0x7
- field public static final int ISO_A7 = 8; // 0x8
- field public static final int ISO_A8 = 9; // 0x9
- field public static final int ISO_A9 = 10; // 0xa
- field public static final int ISO_B0 = 100; // 0x64
- field public static final int ISO_B1 = 101; // 0x65
- field public static final int ISO_B10 = 110; // 0x6e
- field public static final int ISO_B2 = 102; // 0x66
- field public static final int ISO_B3 = 103; // 0x67
- field public static final int ISO_B4 = 104; // 0x68
- field public static final int ISO_B5 = 105; // 0x69
- field public static final int ISO_B6 = 106; // 0x6a
- field public static final int ISO_B7 = 107; // 0x6b
- field public static final int ISO_B8 = 108; // 0x6c
- field public static final int ISO_B9 = 109; // 0x6d
- field public static final int ISO_C0 = 200; // 0xc8
- field public static final int ISO_C1 = 201; // 0xc9
- field public static final int ISO_C10 = 210; // 0xd2
- field public static final int ISO_C2 = 202; // 0xca
- field public static final int ISO_C3 = 203; // 0xcb
- field public static final int ISO_C4 = 204; // 0xcc
- field public static final int ISO_C5 = 205; // 0xcd
- field public static final int ISO_C6 = 206; // 0xce
- field public static final int ISO_C7 = 207; // 0xcf
- field public static final int ISO_C8 = 208; // 0xd0
- field public static final int ISO_C9 = 209; // 0xd1
- field public static final int NA_GOVT_LETTER = 301; // 0x12d
- field public static final int NA_JUNIOR_LEGAL = 303; // 0x12f
- field public static final int NA_LEDGER = 304; // 0x130
- field public static final int NA_LEGAL = 302; // 0x12e
- field public static final int NA_LETTER = 300; // 0x12c
- field public static final int NA_TBLOID = 305; // 0x131
+ method public boolean isPortrait();
+ field public static final android.print.PrintAttributes.MediaSize ISO_A0;
+ field public static final android.print.PrintAttributes.MediaSize ISO_A1;
+ field public static final android.print.PrintAttributes.MediaSize ISO_A10;
+ field public static final android.print.PrintAttributes.MediaSize ISO_A2;
+ field public static final android.print.PrintAttributes.MediaSize ISO_A3;
+ field public static final android.print.PrintAttributes.MediaSize ISO_A4;
+ field public static final android.print.PrintAttributes.MediaSize ISO_A5;
+ field public static final android.print.PrintAttributes.MediaSize ISO_A6;
+ field public static final android.print.PrintAttributes.MediaSize ISO_A7;
+ field public static final android.print.PrintAttributes.MediaSize ISO_A8;
+ field public static final android.print.PrintAttributes.MediaSize ISO_A9;
+ field public static final android.print.PrintAttributes.MediaSize ISO_B0;
+ field public static final android.print.PrintAttributes.MediaSize ISO_B1;
+ field public static final android.print.PrintAttributes.MediaSize ISO_B10;
+ field public static final android.print.PrintAttributes.MediaSize ISO_B2;
+ field public static final android.print.PrintAttributes.MediaSize ISO_B3;
+ field public static final android.print.PrintAttributes.MediaSize ISO_B4;
+ field public static final android.print.PrintAttributes.MediaSize ISO_B5;
+ field public static final android.print.PrintAttributes.MediaSize ISO_B6;
+ field public static final android.print.PrintAttributes.MediaSize ISO_B7;
+ field public static final android.print.PrintAttributes.MediaSize ISO_B8;
+ field public static final android.print.PrintAttributes.MediaSize ISO_B9;
+ field public static final android.print.PrintAttributes.MediaSize ISO_C0;
+ field public static final android.print.PrintAttributes.MediaSize ISO_C1;
+ field public static final android.print.PrintAttributes.MediaSize ISO_C10;
+ field public static final android.print.PrintAttributes.MediaSize ISO_C2;
+ field public static final android.print.PrintAttributes.MediaSize ISO_C3;
+ field public static final android.print.PrintAttributes.MediaSize ISO_C4;
+ field public static final android.print.PrintAttributes.MediaSize ISO_C5;
+ field public static final android.print.PrintAttributes.MediaSize ISO_C6;
+ field public static final android.print.PrintAttributes.MediaSize ISO_C7;
+ field public static final android.print.PrintAttributes.MediaSize ISO_C8;
+ field public static final android.print.PrintAttributes.MediaSize ISO_C9;
+ field public static final android.print.PrintAttributes.MediaSize NA_GOVT_LETTER;
+ field public static final android.print.PrintAttributes.MediaSize NA_JUNIOR_LEGAL;
+ field public static final android.print.PrintAttributes.MediaSize NA_LEDGER;
+ field public static final android.print.PrintAttributes.MediaSize NA_LEGAL;
+ field public static final android.print.PrintAttributes.MediaSize NA_LETTER;
+ field public static final android.print.PrintAttributes.MediaSize NA_TBLOID;
}
public static final class PrintAttributes.Resolution {
ctor public PrintAttributes.Resolution(java.lang.String, java.lang.String, int, int);
method public int getHorizontalDpi();
method public java.lang.String getId();
- method public java.lang.String getLabel();
+ method public java.lang.String getLabel(android.content.pm.PackageManager);
method public int getVerticalDpi();
}
- public static final class PrintAttributes.Tray {
- ctor public PrintAttributes.Tray(java.lang.String, java.lang.String);
- method public java.lang.String getId();
- method public java.lang.String getLabel();
- }
-
public abstract class PrintDocumentAdapter {
ctor public PrintDocumentAdapter();
method public void onFinish();
@@ -19183,34 +19107,22 @@
public final class PrintDocumentInfo implements android.os.Parcelable {
method public int describeContents();
- method public int getColorMode();
method public int getContentType();
method public long getDataSize();
- method public int getFittingMode();
- method public android.print.PrintAttributes.Margins getMargins();
- method public android.print.PrintAttributes.MediaSize getMediaSize();
method public java.lang.String getName();
- method public int getOrientation();
method public int getPageCount();
method public void writeToParcel(android.os.Parcel, int);
field public static final int CONTENT_TYPE_DOCUMENT = 0; // 0x0
field public static final int CONTENT_TYPE_PHOTO = 1; // 0x1
field public static final int CONTENT_TYPE_UNKNOWN = -1; // 0xffffffff
field public static final android.os.Parcelable.Creator CREATOR;
- field public static final android.print.PrintAttributes.MediaSize MEDIA_SIZE_UNKNOWN;
field public static final int PAGE_COUNT_UNKNOWN = -1; // 0xffffffff
}
public static final class PrintDocumentInfo.Builder {
- ctor public PrintDocumentInfo.Builder(java.lang.String, android.print.PrintAttributes);
ctor public PrintDocumentInfo.Builder(java.lang.String);
method public android.print.PrintDocumentInfo create();
- method public android.print.PrintDocumentInfo.Builder setColorMode(int);
method public android.print.PrintDocumentInfo.Builder setContentType(int);
- method public android.print.PrintDocumentInfo.Builder setFittingMode(int);
- method public android.print.PrintDocumentInfo.Builder setMargins(android.print.PrintAttributes.Margins);
- method public android.print.PrintDocumentInfo.Builder setMediaSize(android.print.PrintAttributes.MediaSize);
- method public android.print.PrintDocumentInfo.Builder setOrientation(int);
method public android.print.PrintDocumentInfo.Builder setPageCount(int);
}
@@ -19257,13 +19169,8 @@
method public int describeContents();
method public int getColorModes();
method public void getDefaults(android.print.PrintAttributes);
- method public int getDuplexModes();
- method public int getFittingModes();
- method public java.util.List<android.print.PrintAttributes.Tray> getInputTrays();
method public java.util.List<android.print.PrintAttributes.MediaSize> getMediaSizes();
method public android.print.PrintAttributes.Margins getMinMargins();
- method public int getOrientations();
- method public java.util.List<android.print.PrintAttributes.Tray> getOutputTrays();
method public java.util.List<android.print.PrintAttributes.Resolution> getResolutions();
method public void writeToParcel(android.os.Parcel, int);
field public static final android.os.Parcelable.Creator CREATOR;
@@ -19271,16 +19178,11 @@
public static final class PrinterCapabilitiesInfo.Builder {
ctor public PrinterCapabilitiesInfo.Builder(android.print.PrinterId);
- method public android.print.PrinterCapabilitiesInfo.Builder addInputTray(android.print.PrintAttributes.Tray, boolean);
method public android.print.PrinterCapabilitiesInfo.Builder addMediaSize(android.print.PrintAttributes.MediaSize, boolean);
- method public android.print.PrinterCapabilitiesInfo.Builder addOutputTray(android.print.PrintAttributes.Tray, boolean);
method public android.print.PrinterCapabilitiesInfo.Builder addResolution(android.print.PrintAttributes.Resolution, boolean);
method public android.print.PrinterCapabilitiesInfo create();
method public android.print.PrinterCapabilitiesInfo.Builder setColorModes(int, int);
- method public android.print.PrinterCapabilitiesInfo.Builder setDuplexModes(int, int);
- method public android.print.PrinterCapabilitiesInfo.Builder setFittingModes(int, int);
method public android.print.PrinterCapabilitiesInfo.Builder setMinMargins(android.print.PrintAttributes.Margins, android.print.PrintAttributes.Margins);
- method public android.print.PrinterCapabilitiesInfo.Builder setOrientations(int, int);
}
public final class PrinterId implements android.os.Parcelable {
@@ -19401,6 +19303,7 @@
ctor public PrinterDiscoverySession();
method public final void addPrinters(java.util.List<android.print.PrinterInfo>);
method public final java.util.List<android.print.PrinterInfo> getPrinters();
+ method public final java.util.List<android.print.PrinterId> getTrackedPrinters();
method public final boolean isDestroyed();
method public final boolean isPrinterDiscoveryStarted();
method public abstract void onDestroy();
@@ -19410,7 +19313,6 @@
method public abstract void onStopPrinterStateTracking(android.print.PrinterId);
method public abstract void onValidatePrinters(java.util.List<android.print.PrinterId>);
method public final void removePrinters(java.util.List<android.print.PrinterId>);
- method public final void updatePrinters(java.util.List<android.print.PrinterInfo>);
}
}
@@ -20847,6 +20749,7 @@
method public static android.net.Uri buildChildDocumentsUri(java.lang.String, java.lang.String);
method public static android.net.Uri buildDocumentUri(java.lang.String, java.lang.String);
method public static android.net.Uri buildRecentDocumentsUri(java.lang.String, java.lang.String);
+ method public static android.net.Uri buildRootUri(java.lang.String, java.lang.String);
method public static android.net.Uri buildRootsUri(java.lang.String);
method public static android.net.Uri buildSearchDocumentsUri(java.lang.String, java.lang.String, java.lang.String);
method public static android.net.Uri createDocument(android.content.ContentResolver, android.net.Uri, java.lang.String, java.lang.String);
@@ -20884,17 +20787,15 @@
field public static final java.lang.String COLUMN_DOCUMENT_ID = "document_id";
field public static final java.lang.String COLUMN_FLAGS = "flags";
field public static final java.lang.String COLUMN_ICON = "icon";
+ field public static final java.lang.String COLUMN_MIME_TYPES = "mime_types";
field public static final java.lang.String COLUMN_ROOT_ID = "root_id";
field public static final java.lang.String COLUMN_ROOT_TYPE = "root_type";
field public static final java.lang.String COLUMN_SUMMARY = "summary";
field public static final java.lang.String COLUMN_TITLE = "title";
field public static final int FLAG_ADVANCED = 4; // 0x4
field public static final int FLAG_LOCAL_ONLY = 2; // 0x2
- field public static final int FLAG_PROVIDES_AUDIO = 8; // 0x8
- field public static final int FLAG_PROVIDES_IMAGES = 32; // 0x20
- field public static final int FLAG_PROVIDES_VIDEO = 16; // 0x10
field public static final int FLAG_SUPPORTS_CREATE = 1; // 0x1
- field public static final int FLAG_SUPPORTS_RECENTS = 64; // 0x40
+ field public static final int FLAG_SUPPORTS_RECENTS = 8; // 0x8
field public static final int ROOT_TYPE_DEVICE = 3; // 0x3
field public static final int ROOT_TYPE_SERVICE = 1; // 0x1
field public static final int ROOT_TYPE_SHORTCUT = 2; // 0x2
@@ -21292,6 +21193,7 @@
field public static final java.lang.String ACTION_NFCSHARING_SETTINGS = "android.settings.NFCSHARING_SETTINGS";
field public static final java.lang.String ACTION_NFC_PAYMENT_SETTINGS = "android.settings.NFC_PAYMENT_SETTINGS";
field public static final java.lang.String ACTION_NFC_SETTINGS = "android.settings.NFC_SETTINGS";
+ field public static final java.lang.String ACTION_PRINT_SETTINGS = "android.settings.ACTION_PRINT_SETTINGS";
field public static final java.lang.String ACTION_PRIVACY_SETTINGS = "android.settings.PRIVACY_SETTINGS";
field public static final java.lang.String ACTION_QUICK_LAUNCH_SETTINGS = "android.settings.QUICK_LAUNCH_SETTINGS";
field public static final java.lang.String ACTION_SEARCH_SETTINGS = "android.search.action.SEARCH_SETTINGS";
@@ -21894,6 +21796,7 @@
method public static android.renderscript.Element U8_2(android.renderscript.RenderScript);
method public static android.renderscript.Element U8_3(android.renderscript.RenderScript);
method public static android.renderscript.Element U8_4(android.renderscript.RenderScript);
+ method public static android.renderscript.Element YUV(android.renderscript.RenderScript);
method public static android.renderscript.Element createPixel(android.renderscript.RenderScript, android.renderscript.Element.DataType, android.renderscript.Element.DataKind);
method public static android.renderscript.Element createVector(android.renderscript.RenderScript, android.renderscript.Element.DataType, int);
method public int getBytesSize();
@@ -27484,6 +27387,7 @@
method public boolean canScrollHorizontally(int);
method public boolean canScrollVertically(int);
method public void cancelLongPress();
+ method public final void cancelPendingInputEvents();
method public boolean checkInputConnectionProxy(android.view.View);
method public void clearAnimation();
method public void clearFocus();
@@ -27711,6 +27615,7 @@
method protected void onAnimationEnd();
method protected void onAnimationStart();
method protected void onAttachedToWindow();
+ method public void onCancelPendingInputEvents();
method public boolean onCheckIsTextEditor();
method protected void onConfigurationChanged(android.content.res.Configuration);
method protected void onCreateContextMenu(android.view.ContextMenu);
@@ -32454,7 +32359,6 @@
method public int getTotalPaddingTop();
method public final android.text.method.TransformationMethod getTransformationMethod();
method public android.graphics.Typeface getTypeface();
- method public final android.content.UndoManager getUndoManager();
method public android.text.style.URLSpan[] getUrls();
method public boolean hasSelection();
method public boolean isCursorVisible();
@@ -32553,7 +32457,6 @@
method public final void setTransformationMethod(android.text.method.TransformationMethod);
method public void setTypeface(android.graphics.Typeface, int);
method public void setTypeface(android.graphics.Typeface);
- method public final void setUndoManager(android.content.UndoManager, java.lang.String);
method public void setWidth(int);
}
diff --git a/cmds/am/am b/cmds/am/am
index c823634..1d426bc 100755
--- a/cmds/am/am
+++ b/cmds/am/am
@@ -1,3 +1,5 @@
+#!/system/bin/sh
+#
# Script to start "am" on the device, which has a very rudimentary
# shell.
#
diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java
index e02410a..57686a4 100644
--- a/core/java/android/app/Activity.java
+++ b/core/java/android/app/Activity.java
@@ -17,6 +17,7 @@
package android.app;
import android.util.ArrayMap;
+import android.util.SuperNotCalledException;
import com.android.internal.app.ActionBarImpl;
import com.android.internal.policy.PolicyManager;
@@ -3436,6 +3437,12 @@
// activity is finished, no matter what happens to it.
mStartedActivity = true;
}
+
+ final View decor = mWindow != null ? mWindow.peekDecorView() : null;
+ if (decor != null) {
+ decor.cancelPendingInputEvents();
+ }
+ // TODO Consider clearing/flushing other event sources and events for child windows.
} else {
if (options != null) {
mParent.startActivityFromChild(this, intent, requestCode, options);
diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java
index e6960b3..018fbe0 100644
--- a/core/java/android/app/ActivityThread.java
+++ b/core/java/android/app/ActivityThread.java
@@ -76,6 +76,7 @@
import android.util.LogPrinter;
import android.util.PrintWriterPrinter;
import android.util.Slog;
+import android.util.SuperNotCalledException;
import android.view.Display;
import android.view.HardwareRenderer;
import android.view.View;
@@ -116,12 +117,6 @@
import dalvik.system.CloseGuard;
-final class SuperNotCalledException extends AndroidRuntimeException {
- public SuperNotCalledException(String msg) {
- super(msg);
- }
-}
-
final class RemoteServiceException extends AndroidRuntimeException {
public RemoteServiceException(String msg) {
super(msg);
diff --git a/core/java/android/app/AlarmManager.java b/core/java/android/app/AlarmManager.java
index 1a56826..5c3a3e5 100644
--- a/core/java/android/app/AlarmManager.java
+++ b/core/java/android/app/AlarmManager.java
@@ -101,7 +101,7 @@
mService = service;
final int sdkVersion = ctx.getApplicationInfo().targetSdkVersion;
- mAlwaysExact = (sdkVersion < Build.VERSION_CODES.KEY_LIME_PIE);
+ mAlwaysExact = (sdkVersion < Build.VERSION_CODES.KITKAT);
}
private long legacyExactLength() {
diff --git a/core/java/android/app/AppOpsManager.java b/core/java/android/app/AppOpsManager.java
index fe09ce1..19a028d 100644
--- a/core/java/android/app/AppOpsManager.java
+++ b/core/java/android/app/AppOpsManager.java
@@ -616,6 +616,23 @@
}
/**
+ * Do a quick check to validate if a package name belongs to a UID.
+ *
+ * @throws SecurityException if the package name doesn't belong to the given
+ * UID, or if ownership cannot be verified.
+ */
+ public void checkPackage(int uid, String packageName) {
+ try {
+ if (mService.checkPackage(uid, packageName) != MODE_ALLOWED) {
+ throw new SecurityException(
+ "Package " + packageName + " does not belong to " + uid);
+ }
+ } catch (RemoteException e) {
+ throw new SecurityException("Unable to verify package ownership", e);
+ }
+ }
+
+ /**
* Make note of an application performing an operation. Note that you must pass
* in both the uid and name of the application to be checked; this function will verify
* that these two match, and if not, return {@link #MODE_IGNORED}. If this call
diff --git a/core/java/android/app/ContextImpl.java b/core/java/android/app/ContextImpl.java
index f10290d..e776a98 100644
--- a/core/java/android/app/ContextImpl.java
+++ b/core/java/android/app/ContextImpl.java
@@ -710,7 +710,7 @@
@Override
public SharedPreferences getSharedPreferences(String name, int mode) {
SharedPreferencesImpl sp;
- synchronized (mSync) {
+ synchronized (ContextImpl.class) {
if (sSharedPrefs == null) {
sSharedPrefs = new ArrayMap<String, ArrayMap<String, SharedPreferencesImpl>>();
}
@@ -726,7 +726,7 @@
// name. This happened to work because when we generated the file name
// we would stringify it to "null.xml". Nice.
if (mPackageInfo.getApplicationInfo().targetSdkVersion <
- Build.VERSION_CODES.KEY_LIME_PIE) {
+ Build.VERSION_CODES.KITKAT) {
if (name == null) {
name = "null";
}
@@ -1453,7 +1453,7 @@
public ComponentName startServiceAsUser(Intent service, UserHandle user) {
try {
if (service.getComponent() == null && service.getPackage() == null) {
- if (getApplicationInfo().targetSdkVersion >= Build.VERSION_CODES.KEY_LIME_PIE) {
+ if (getApplicationInfo().targetSdkVersion >= Build.VERSION_CODES.KITKAT) {
IllegalArgumentException ex = new IllegalArgumentException(
"Service Intent must be explicit: " + service);
Log.e(TAG, "This will become an error", ex);
@@ -1485,7 +1485,7 @@
public boolean stopServiceAsUser(Intent service, UserHandle user) {
try {
if (service.getComponent() == null && service.getPackage() == null) {
- if (getApplicationInfo().targetSdkVersion >= Build.VERSION_CODES.KEY_LIME_PIE) {
+ if (getApplicationInfo().targetSdkVersion >= Build.VERSION_CODES.KITKAT) {
IllegalArgumentException ex = new IllegalArgumentException(
"Service Intent must be explicit: " + service);
Log.e(TAG, "This will become an error", ex);
@@ -1528,7 +1528,7 @@
throw new RuntimeException("Not supported in system context");
}
if (service.getComponent() == null && service.getPackage() == null) {
- if (getApplicationInfo().targetSdkVersion >= Build.VERSION_CODES.KEY_LIME_PIE) {
+ if (getApplicationInfo().targetSdkVersion >= Build.VERSION_CODES.KITKAT) {
IllegalArgumentException ex = new IllegalArgumentException(
"Service Intent must be explicit: " + service);
Log.e(TAG, "This will become an error", ex);
diff --git a/core/java/android/app/Fragment.java b/core/java/android/app/Fragment.java
index f8a1d82..d626e5f 100644
--- a/core/java/android/app/Fragment.java
+++ b/core/java/android/app/Fragment.java
@@ -31,6 +31,7 @@
import android.util.DebugUtils;
import android.util.Log;
import android.util.SparseArray;
+import android.util.SuperNotCalledException;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.LayoutInflater;
diff --git a/core/java/android/app/FragmentManager.java b/core/java/android/app/FragmentManager.java
index a7789d6..4371907 100644
--- a/core/java/android/app/FragmentManager.java
+++ b/core/java/android/app/FragmentManager.java
@@ -31,6 +31,7 @@
import android.util.Log;
import android.util.LogWriter;
import android.util.SparseArray;
+import android.util.SuperNotCalledException;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
diff --git a/core/java/android/content/ContentProvider.java b/core/java/android/content/ContentProvider.java
index b9121c7..24c396a 100644
--- a/core/java/android/content/ContentProvider.java
+++ b/core/java/android/content/ContentProvider.java
@@ -102,6 +102,8 @@
private boolean mExported;
private boolean mNoPerms;
+ private final ThreadLocal<String> mCallingPackage = new ThreadLocal<String>();
+
private Transport mTransport = new Transport();
/**
@@ -194,8 +196,14 @@
return rejectQuery(uri, projection, selection, selectionArgs, sortOrder,
CancellationSignal.fromTransport(cancellationSignal));
}
- return ContentProvider.this.query(uri, projection, selection, selectionArgs, sortOrder,
- CancellationSignal.fromTransport(cancellationSignal));
+ mCallingPackage.set(callingPkg);
+ try {
+ return ContentProvider.this.query(
+ uri, projection, selection, selectionArgs, sortOrder,
+ CancellationSignal.fromTransport(cancellationSignal));
+ } finally {
+ mCallingPackage.set(null);
+ }
}
@Override
@@ -208,7 +216,12 @@
if (enforceWritePermission(callingPkg, uri) != AppOpsManager.MODE_ALLOWED) {
return rejectInsert(uri, initialValues);
}
- return ContentProvider.this.insert(uri, initialValues);
+ mCallingPackage.set(callingPkg);
+ try {
+ return ContentProvider.this.insert(uri, initialValues);
+ } finally {
+ mCallingPackage.set(null);
+ }
}
@Override
@@ -216,7 +229,12 @@
if (enforceWritePermission(callingPkg, uri) != AppOpsManager.MODE_ALLOWED) {
return 0;
}
- return ContentProvider.this.bulkInsert(uri, initialValues);
+ mCallingPackage.set(callingPkg);
+ try {
+ return ContentProvider.this.bulkInsert(uri, initialValues);
+ } finally {
+ mCallingPackage.set(null);
+ }
}
@Override
@@ -238,7 +256,12 @@
}
}
}
- return ContentProvider.this.applyBatch(operations);
+ mCallingPackage.set(callingPkg);
+ try {
+ return ContentProvider.this.applyBatch(operations);
+ } finally {
+ mCallingPackage.set(null);
+ }
}
@Override
@@ -246,7 +269,12 @@
if (enforceWritePermission(callingPkg, uri) != AppOpsManager.MODE_ALLOWED) {
return 0;
}
- return ContentProvider.this.delete(uri, selection, selectionArgs);
+ mCallingPackage.set(callingPkg);
+ try {
+ return ContentProvider.this.delete(uri, selection, selectionArgs);
+ } finally {
+ mCallingPackage.set(null);
+ }
}
@Override
@@ -255,7 +283,12 @@
if (enforceWritePermission(callingPkg, uri) != AppOpsManager.MODE_ALLOWED) {
return 0;
}
- return ContentProvider.this.update(uri, values, selection, selectionArgs);
+ mCallingPackage.set(callingPkg);
+ try {
+ return ContentProvider.this.update(uri, values, selection, selectionArgs);
+ } finally {
+ mCallingPackage.set(null);
+ }
}
@Override
@@ -263,8 +296,13 @@
String callingPkg, Uri uri, String mode, ICancellationSignal cancellationSignal)
throws FileNotFoundException {
enforceFilePermission(callingPkg, uri, mode);
- return ContentProvider.this.openFile(
- uri, mode, CancellationSignal.fromTransport(cancellationSignal));
+ mCallingPackage.set(callingPkg);
+ try {
+ return ContentProvider.this.openFile(
+ uri, mode, CancellationSignal.fromTransport(cancellationSignal));
+ } finally {
+ mCallingPackage.set(null);
+ }
}
@Override
@@ -272,13 +310,23 @@
String callingPkg, Uri uri, String mode, ICancellationSignal cancellationSignal)
throws FileNotFoundException {
enforceFilePermission(callingPkg, uri, mode);
- return ContentProvider.this.openAssetFile(
- uri, mode, CancellationSignal.fromTransport(cancellationSignal));
+ mCallingPackage.set(callingPkg);
+ try {
+ return ContentProvider.this.openAssetFile(
+ uri, mode, CancellationSignal.fromTransport(cancellationSignal));
+ } finally {
+ mCallingPackage.set(null);
+ }
}
@Override
public Bundle call(String callingPkg, String method, String arg, Bundle extras) {
- return ContentProvider.this.callFromPackage(callingPkg, method, arg, extras);
+ mCallingPackage.set(callingPkg);
+ try {
+ return ContentProvider.this.call(method, arg, extras);
+ } finally {
+ mCallingPackage.set(null);
+ }
}
@Override
@@ -290,8 +338,13 @@
public AssetFileDescriptor openTypedAssetFile(String callingPkg, Uri uri, String mimeType,
Bundle opts, ICancellationSignal cancellationSignal) throws FileNotFoundException {
enforceFilePermission(callingPkg, uri, "r");
- return ContentProvider.this.openTypedAssetFile(
- uri, mimeType, opts, CancellationSignal.fromTransport(cancellationSignal));
+ mCallingPackage.set(callingPkg);
+ try {
+ return ContentProvider.this.openTypedAssetFile(
+ uri, mimeType, opts, CancellationSignal.fromTransport(cancellationSignal));
+ } finally {
+ mCallingPackage.set(null);
+ }
}
@Override
@@ -461,6 +514,28 @@
}
/**
+ * Return the package name of the caller that initiated the request being
+ * processed on the current thread. The returned package will have been
+ * verified to belong to the calling UID. Returns {@code null} if not
+ * currently processing a request.
+ * <p>
+ * This will always return {@code null} when processing
+ * {@link #getType(Uri)} or {@link #getStreamTypes(Uri, String)} requests.
+ *
+ * @see Binder#getCallingUid()
+ * @see Context#grantUriPermission(String, Uri, int)
+ * @throws SecurityException if the calling package doesn't belong to the
+ * calling UID.
+ */
+ public final String getCallingPackage() {
+ final String pkg = mCallingPackage.get();
+ if (pkg != null) {
+ mTransport.mAppOpsManager.checkPackage(Binder.getCallingUid(), pkg);
+ }
+ return pkg;
+ }
+
+ /**
* Change the permission required to read data from the content
* provider. This is normally set for you from its manifest information
* when the provider is first created.
@@ -529,8 +604,6 @@
/** @hide */
public final void setAppOps(int readOp, int writeOp) {
if (!mNoPerms) {
- mTransport.mAppOpsManager = (AppOpsManager)mContext.getSystemService(
- Context.APP_OPS_SERVICE);
mTransport.mReadOp = readOp;
mTransport.mWriteOp = writeOp;
}
@@ -1413,6 +1486,8 @@
*/
if (mContext == null) {
mContext = context;
+ mTransport.mAppOpsManager = (AppOpsManager) mContext.getSystemService(
+ Context.APP_OPS_SERVICE);
mMyUid = Process.myUid();
if (info != null) {
setReadPermission(info.readPermission);
@@ -1452,15 +1527,6 @@
}
/**
- * @hide
- * Front-end to {@link #call(String, String, android.os.Bundle)} that provides the name
- * of the calling package.
- */
- public Bundle callFromPackage(String callingPackag, String method, String arg, Bundle extras) {
- return call(method, arg, extras);
- }
-
- /**
* Call a provider-defined method. This can be used to implement
* interfaces that are cheaper and/or unnatural for a table-like
* model.
diff --git a/core/java/android/content/Context.java b/core/java/android/content/Context.java
index 2ff9182..8df5bee 100644
--- a/core/java/android/content/Context.java
+++ b/core/java/android/content/Context.java
@@ -638,7 +638,7 @@
* {@sample development/samples/ApiDemos/src/com/example/android/apis/content/ExternalStorage.java
* private_picture}
* <p>
- * Starting in {@link android.os.Build.VERSION_CODES#KEY_LIME_PIE}, no
+ * Starting in {@link android.os.Build.VERSION_CODES#KITKAT}, no
* permissions are required for the owning application to read or write to
* this path. Otherwise, {@link android.Manifest.permission#WRITE_EXTERNAL_STORAGE}
* or {@link android.Manifest.permission#READ_EXTERNAL_STORAGE} are required.
@@ -674,7 +674,7 @@
* the device, including both emulated external storage and physical media
* slots. This does not include transient devices, such as USB flash drives.
* <p>
- * Starting in {@link android.os.Build.VERSION_CODES#KEY_LIME_PIE}, no
+ * Starting in {@link android.os.Build.VERSION_CODES#KITKAT}, no
* permissions are required for the owning application to read or write to
* these paths.
* <p>
@@ -695,7 +695,7 @@
* should ensure that multiple instances running under different users don't
* interfere with each other.
* <p>
- * Starting in {@link android.os.Build.VERSION_CODES#KEY_LIME_PIE}, no
+ * Starting in {@link android.os.Build.VERSION_CODES#KITKAT}, no
* permissions are required for the owning application to read or write to
* this path. Otherwise,
* {@link android.Manifest.permission#WRITE_EXTERNAL_STORAGE} or
@@ -713,7 +713,7 @@
* the device, including both emulated external storage and physical media
* slots. This does not include transient devices, such as USB flash drives.
* <p>
- * Starting in {@link android.os.Build.VERSION_CODES#KEY_LIME_PIE}, no
+ * Starting in {@link android.os.Build.VERSION_CODES#KITKAT}, no
* permissions are required for the owning application to read or write to
* this path.
* <p>
@@ -774,7 +774,7 @@
* each user has their own isolated external storage. Applications only
* have access to the external storage for the user they're running as.</p>
* <p>
- * Starting in {@link android.os.Build.VERSION_CODES#KEY_LIME_PIE}, no
+ * Starting in {@link android.os.Build.VERSION_CODES#KITKAT}, no
* permissions are required for the owning application to read or write to
* this path. Otherwise,
* {@link android.Manifest.permission#WRITE_EXTERNAL_STORAGE} or
@@ -799,7 +799,7 @@
* the device, including both emulated external storage and physical media
* slots. This does not include transient devices, such as USB flash drives.
* <p>
- * Starting in {@link android.os.Build.VERSION_CODES#KEY_LIME_PIE}, no
+ * Starting in {@link android.os.Build.VERSION_CODES#KITKAT}, no
* permissions are required for the owning application to read or write to
* these paths.
* <p>
@@ -1651,7 +1651,7 @@
* should contain either contain the complete class name of a specific service
* implementation to start or a specific package name to target. If the
* Intent is less specified, it will either throw an {@link IllegalArgumentException}
- * (if the caller targets {@link android.os.Build.VERSION_CODES#KEY_LIME_PIE} or later),
+ * (if the caller targets {@link android.os.Build.VERSION_CODES#KITKAT} or later),
* or which of multiple matching services it finds and uses will be undefined. If this service
* is not already running, it will be instantiated and started (creating a
* process for it if needed); if it is running then it remains running.
diff --git a/core/java/android/content/Intent.java b/core/java/android/content/Intent.java
index dfc0412..2f2aae4 100644
--- a/core/java/android/content/Intent.java
+++ b/core/java/android/content/Intent.java
@@ -2469,16 +2469,19 @@
"android.intent.action.GET_RESTRICTION_ENTRIES";
/**
+ * @hide
* Activity to challenge the user for a PIN that was configured when setting up
- * restrictions. Launch the activity using
+ * restrictions. Restrictions include blocking of apps and preventing certain user operations,
+ * controlled by {@link android.os.UserManager#setUserRestrictions(Bundle).
+ * Launch the activity using
* {@link android.app.Activity#startActivityForResult(Intent, int)} and check if the
* result is {@link android.app.Activity#RESULT_OK} for a successful response to the
* challenge.<p/>
* Before launching this activity, make sure that there is a PIN in effect, by calling
- * {@link android.os.UserManager#hasRestrictionsPin()}.
+ * {@link android.os.UserManager#hasRestrictionsChallenge()}.
*/
- public static final String ACTION_RESTRICTIONS_PIN_CHALLENGE =
- "android.intent.action.RESTRICTIONS_PIN_CHALLENGE";
+ public static final String ACTION_RESTRICTIONS_CHALLENGE =
+ "android.intent.action.RESTRICTIONS_CHALLENGE";
/**
* Sent the first time a user is starting, to allow system apps to
diff --git a/core/java/android/content/UndoManager.java b/core/java/android/content/UndoManager.java
index 1c2db47..e9ec5a4 100644
--- a/core/java/android/content/UndoManager.java
+++ b/core/java/android/content/UndoManager.java
@@ -50,6 +50,8 @@
* undo/redo them without needing to impact edits in other objects; while
* within the larger document, all edits can be seen and the user must
* undo/redo them as a single stream.</p>
+ *
+ * @hide
*/
public class UndoManager {
private final HashMap<String, UndoOwner> mOwners = new HashMap<String, UndoOwner>();
diff --git a/core/java/android/content/UndoOperation.java b/core/java/android/content/UndoOperation.java
index 8084b1f..1ff32d4 100644
--- a/core/java/android/content/UndoOperation.java
+++ b/core/java/android/content/UndoOperation.java
@@ -23,6 +23,8 @@
* A single undoable operation. You must subclass this to implement the state
* and behavior for your operation. Instances of this class are placed and
* managed in an {@link UndoManager}.
+ *
+ * @hide
*/
public abstract class UndoOperation<DATA> implements Parcelable {
UndoOwner mOwner;
diff --git a/core/java/android/content/UndoOwner.java b/core/java/android/content/UndoOwner.java
index a279de6..d0cdc95 100644
--- a/core/java/android/content/UndoOwner.java
+++ b/core/java/android/content/UndoOwner.java
@@ -18,6 +18,8 @@
/**
* Representation of an owner of {@link UndoOperation} objects in an {@link UndoManager}.
+ *
+ * @hide
*/
public class UndoOwner {
final String mTag;
diff --git a/core/java/android/content/pm/PackageParser.java b/core/java/android/content/pm/PackageParser.java
index b432164..541dcb9 100644
--- a/core/java/android/content/pm/PackageParser.java
+++ b/core/java/android/content/pm/PackageParser.java
@@ -1311,6 +1311,9 @@
// Just skip this tag
XmlUtils.skipCurrentTag(parser);
continue;
+ } else if (tagName.equals("supports-input")) {
+ XmlUtils.skipCurrentTag(parser);
+ continue;
} else if (tagName.equals("eat-comment")) {
// Just skip this tag
diff --git a/core/java/android/hardware/camera2/utils/CameraBinderDecorator.java b/core/java/android/hardware/camera2/utils/CameraBinderDecorator.java
index fbe7ff4..2c05c58 100644
--- a/core/java/android/hardware/camera2/utils/CameraBinderDecorator.java
+++ b/core/java/android/hardware/camera2/utils/CameraBinderDecorator.java
@@ -49,7 +49,7 @@
public static final int EACCES = -13;
public static final int EBUSY = -16;
public static final int ENODEV = -19;
- public static final int ENOTSUP = -129;
+ public static final int EOPNOTSUPP = -95;
private static class CameraBinderDecoratorListener implements Decorator.DecoratorListener {
@@ -86,7 +86,7 @@
case ENODEV:
UncheckedThrow.throwAnyException(new CameraRuntimeException(
CAMERA_DISCONNECTED));
- case ENOTSUP:
+ case EOPNOTSUPP:
UncheckedThrow.throwAnyException(new CameraRuntimeException(
CAMERA_DEPRECATED_HAL));
}
diff --git a/core/java/android/net/BaseNetworkStateTracker.java b/core/java/android/net/BaseNetworkStateTracker.java
index c39488e..476fefe 100644
--- a/core/java/android/net/BaseNetworkStateTracker.java
+++ b/core/java/android/net/BaseNetworkStateTracker.java
@@ -103,7 +103,7 @@
}
@Override
- public LinkInfo getLinkInfo() {
+ public LinkQualityInfo getLinkQualityInfo() {
return null;
}
diff --git a/core/java/android/net/ConnectivityManager.java b/core/java/android/net/ConnectivityManager.java
index 3874369..4cf38b6 100644
--- a/core/java/android/net/ConnectivityManager.java
+++ b/core/java/android/net/ConnectivityManager.java
@@ -1426,9 +1426,9 @@
* get the information about a specific network link
* @hide
*/
- public LinkInfo getLinkInfo(int networkType) {
+ public LinkQualityInfo getLinkQualityInfo(int networkType) {
try {
- LinkInfo li = mService.getLinkInfo(networkType);
+ LinkQualityInfo li = mService.getLinkQualityInfo(networkType);
return li;
} catch (RemoteException e) {
return null;
@@ -1439,9 +1439,9 @@
* get the information of currently active network link
* @hide
*/
- public LinkInfo getActiveLinkInfo() {
+ public LinkQualityInfo getActiveLinkQualityInfo() {
try {
- LinkInfo li = mService.getActiveLinkInfo();
+ LinkQualityInfo li = mService.getActiveLinkQualityInfo();
return li;
} catch (RemoteException e) {
return null;
@@ -1452,9 +1452,9 @@
* get the information of all network links
* @hide
*/
- public LinkInfo[] getAllLinkInfo() {
+ public LinkQualityInfo[] getAllLinkQualityInfo() {
try {
- LinkInfo[] li = mService.getAllLinkInfo();
+ LinkQualityInfo[] li = mService.getAllLinkQualityInfo();
return li;
} catch (RemoteException e) {
return null;
diff --git a/core/java/android/net/IConnectivityManager.aidl b/core/java/android/net/IConnectivityManager.aidl
index c07e900..a6f10ec 100644
--- a/core/java/android/net/IConnectivityManager.aidl
+++ b/core/java/android/net/IConnectivityManager.aidl
@@ -16,7 +16,7 @@
package android.net;
-import android.net.LinkInfo;
+import android.net.LinkQualityInfo;
import android.net.LinkProperties;
import android.net.NetworkInfo;
import android.net.NetworkQuotaInfo;
@@ -149,11 +149,11 @@
String getMobileRedirectedProvisioningUrl();
- LinkInfo getLinkInfo(int networkType);
+ LinkQualityInfo getLinkQualityInfo(int networkType);
- LinkInfo getActiveLinkInfo();
+ LinkQualityInfo getActiveLinkQualityInfo();
- LinkInfo[] getAllLinkInfo();
+ LinkQualityInfo[] getAllLinkQualityInfo();
void setProvisioningNotificationVisible(boolean visible, int networkType, in String extraInfo, in String url);
}
diff --git a/core/java/android/net/LinkInfo.java b/core/java/android/net/LinkInfo.java
deleted file mode 100644
index 47b8a95..0000000
--- a/core/java/android/net/LinkInfo.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * Copyright (C) 2013 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.net;
-
-import android.os.Parcel;
-import android.os.Parcelable;
-
-/**
- * Class that represents useful attributes of generic network links
- * such as the upload/download throughput or packet error rate.
- * Generally speaking, you should be dealing with instances of
- * LinkInfo subclasses, such as {@link android.net.#WifiLinkInfo}
- * or {@link android.net.#MobileLinkInfo} which provide additional
- * information.
- * @hide
- */
-public class LinkInfo implements Parcelable
-{
- public static final int UNKNOWN = -1;
-
- public static final int NORMALIZED_MIN_SIGNAL_STRENGTH = 0;
-
- public static final int NORMALIZED_MAX_SIGNAL_STRENGTH = 99;
-
- public static final int NORMALIZED_SIGNAL_STRENGTH_RANGE = NORMALIZED_MAX_SIGNAL_STRENGTH + 1;
-
- /* Network type as defined by ConnectivityManager */
- public int mNetworkType = ConnectivityManager.TYPE_NONE;
-
- public int mNormalizedSignalStrength = UNKNOWN;
-
- public long mPacketCount = UNKNOWN;
- public long mPacketErrorCount = UNKNOWN;
- public int mTheoreticalTxBandwidth = UNKNOWN;
- public int mTheoreticalRxBandwidth = UNKNOWN;
- public int mTheoreticalLatency = UNKNOWN;
-
- /* Timestamp when last sample was made available */
- public long mLastDataSampleTime = UNKNOWN;
-
- /* Sample duration in millisecond */
- public int mDataSampleDuration = UNKNOWN;
-
- public LinkInfo() {
-
- }
-
- /**
- * Implement the Parcelable interface
- * @hide
- */
- public int describeContents() {
- return 0;
- }
- /**
- * Implement the Parcelable interface.
- */
-
- protected static final int OBJECT_TYPE_LINKINFO = 1;
- protected static final int OBJECT_TYPE_WIFI_LINKINFO = 2;
- protected static final int OBJECT_TYPE_MOBILE_LINKINFO = 3;
-
- public void writeToParcel(Parcel dest, int flags) {
- writeToParcel(dest, flags, OBJECT_TYPE_LINKINFO);
- }
-
- public void writeToParcel(Parcel dest, int flags, int objectType) {
- dest.writeInt(objectType);
- dest.writeInt(mNetworkType);
- dest.writeInt(mNormalizedSignalStrength);
- dest.writeLong(mPacketCount);
- dest.writeLong(mPacketErrorCount);
- dest.writeInt(mTheoreticalTxBandwidth);
- dest.writeInt(mTheoreticalRxBandwidth);
- dest.writeInt(mTheoreticalLatency);
- dest.writeLong(mLastDataSampleTime);
- dest.writeInt(mDataSampleDuration);
- }
-
- public static final Creator<LinkInfo> CREATOR =
- new Creator<LinkInfo>() {
- public LinkInfo createFromParcel(Parcel in) {
- int objectType = in.readInt();
- if (objectType == OBJECT_TYPE_LINKINFO) {
- LinkInfo li = new LinkInfo();
- li.initializeFromParcel(in);
- return li;
- } else if (objectType == OBJECT_TYPE_WIFI_LINKINFO) {
- return WifiLinkInfo.createFromParcelBody(in);
- } else if (objectType == OBJECT_TYPE_MOBILE_LINKINFO) {
- return MobileLinkInfo.createFromParcelBody(in);
- } else {
- return null;
- }
- }
-
- public LinkInfo[] newArray(int size) {
- return new LinkInfo[size];
- }
- };
-
- protected void initializeFromParcel(Parcel in) {
- mNetworkType = in.readInt();
- mNormalizedSignalStrength = in.readInt();
- mPacketCount = in.readLong();
- mPacketErrorCount = in.readLong();
- mTheoreticalTxBandwidth = in.readInt();
- mTheoreticalRxBandwidth = in.readInt();
- mTheoreticalLatency = in.readInt();
- mLastDataSampleTime = in.readLong();
- mDataSampleDuration = in.readInt();
- }
-
-}
diff --git a/core/java/android/net/LinkProperties.java b/core/java/android/net/LinkProperties.java
index 1f73c4a..43d6b71 100644
--- a/core/java/android/net/LinkProperties.java
+++ b/core/java/android/net/LinkProperties.java
@@ -197,6 +197,16 @@
return addresses;
}
+ /**
+ * Replaces the LinkAddresses on this link with the given collection of addresses.
+ */
+ public void setLinkAddresses(Collection<LinkAddress> addresses) {
+ mLinkAddresses.clear();
+ for (LinkAddress address: addresses) {
+ addLinkAddress(address);
+ }
+ }
+
public void addDns(InetAddress dns) {
if (dns != null) mDnses.add(dns);
}
diff --git a/core/java/android/net/LinkInfo.aidl b/core/java/android/net/LinkQualityInfo.aidl
similarity index 95%
rename from core/java/android/net/LinkInfo.aidl
rename to core/java/android/net/LinkQualityInfo.aidl
index 716674b..5e072bf 100644
--- a/core/java/android/net/LinkInfo.aidl
+++ b/core/java/android/net/LinkQualityInfo.aidl
@@ -16,4 +16,4 @@
package android.net;
-parcelable LinkInfo;
+parcelable LinkQualityInfo;
diff --git a/core/java/android/net/LinkQualityInfo.java b/core/java/android/net/LinkQualityInfo.java
new file mode 100644
index 0000000..9c8e61d
--- /dev/null
+++ b/core/java/android/net/LinkQualityInfo.java
@@ -0,0 +1,286 @@
+/*
+ * Copyright (C) 2013 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.net;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+
+/**
+ * Class that represents useful attributes of generic network links
+ * such as the upload/download throughput or packet error rate.
+ * Generally speaking, you should be dealing with instances of
+ * LinkQualityInfo subclasses, such as {@link android.net.#WifiLinkQualityInfo}
+ * or {@link android.net.#MobileLinkQualityInfo} which provide additional
+ * information.
+ * @hide
+ */
+public class LinkQualityInfo implements Parcelable {
+
+ /**
+ * Represents a value that you can use to test if an integer field is set to a good value
+ */
+ public static final int UNKNOWN_INT = Integer.MAX_VALUE;
+
+ /**
+ * Represents a value that you can use to test if a long field is set to a good value
+ */
+ public static final long UNKNOWN_LONG = Long.MAX_VALUE;
+
+ public static final int NORMALIZED_MIN_SIGNAL_STRENGTH = 0;
+
+ public static final int NORMALIZED_MAX_SIGNAL_STRENGTH = 99;
+
+ public static final int NORMALIZED_SIGNAL_STRENGTH_RANGE =
+ NORMALIZED_MAX_SIGNAL_STRENGTH - NORMALIZED_MIN_SIGNAL_STRENGTH + 1;
+
+ /* Network type as defined by ConnectivityManager */
+ private int mNetworkType = ConnectivityManager.TYPE_NONE;
+
+ private int mNormalizedSignalStrength = UNKNOWN_INT;
+
+ private long mPacketCount = UNKNOWN_LONG;
+ private long mPacketErrorCount = UNKNOWN_LONG;
+ private int mTheoreticalTxBandwidth = UNKNOWN_INT;
+ private int mTheoreticalRxBandwidth = UNKNOWN_INT;
+ private int mTheoreticalLatency = UNKNOWN_INT;
+
+ /* Timestamp when last sample was made available */
+ private long mLastDataSampleTime = UNKNOWN_LONG;
+
+ /* Sample duration in millisecond */
+ private int mDataSampleDuration = UNKNOWN_INT;
+
+ public LinkQualityInfo() {
+
+ }
+
+ /**
+ * Implement the Parcelable interface
+ * @hide
+ */
+ public int describeContents() {
+ return 0;
+ }
+
+ /**
+ * Implement the Parcelable interface.
+ */
+
+ protected static final int OBJECT_TYPE_LINK_QUALITY_INFO = 1;
+ protected static final int OBJECT_TYPE_WIFI_LINK_QUALITY_INFO = 2;
+ protected static final int OBJECT_TYPE_MOBILE_LINK_QUALITY_INFO = 3;
+
+ /**
+ * @hide
+ */
+ public void writeToParcel(Parcel dest, int flags) {
+ writeToParcel(dest, flags, OBJECT_TYPE_LINK_QUALITY_INFO);
+ }
+
+ /**
+ * @hide
+ */
+ public void writeToParcel(Parcel dest, int flags, int objectType) {
+ dest.writeInt(objectType);
+ dest.writeInt(mNetworkType);
+ dest.writeInt(mNormalizedSignalStrength);
+ dest.writeLong(mPacketCount);
+ dest.writeLong(mPacketErrorCount);
+ dest.writeInt(mTheoreticalTxBandwidth);
+ dest.writeInt(mTheoreticalRxBandwidth);
+ dest.writeInt(mTheoreticalLatency);
+ dest.writeLong(mLastDataSampleTime);
+ dest.writeInt(mDataSampleDuration);
+ }
+
+ /**
+ * @hide
+ */
+ public static final Creator<LinkQualityInfo> CREATOR =
+ new Creator<LinkQualityInfo>() {
+ public LinkQualityInfo createFromParcel(Parcel in) {
+ int objectType = in.readInt();
+ if (objectType == OBJECT_TYPE_LINK_QUALITY_INFO) {
+ LinkQualityInfo li = new LinkQualityInfo();
+ li.initializeFromParcel(in);
+ return li;
+ } else if (objectType == OBJECT_TYPE_WIFI_LINK_QUALITY_INFO) {
+ return WifiLinkQualityInfo.createFromParcelBody(in);
+ } else if (objectType == OBJECT_TYPE_MOBILE_LINK_QUALITY_INFO) {
+ return MobileLinkQualityInfo.createFromParcelBody(in);
+ } else {
+ return null;
+ }
+ }
+
+ public LinkQualityInfo[] newArray(int size) {
+ return new LinkQualityInfo[size];
+ }
+ };
+
+ /**
+ * @hide
+ */
+ protected void initializeFromParcel(Parcel in) {
+ mNetworkType = in.readInt();
+ mNormalizedSignalStrength = in.readInt();
+ mPacketCount = in.readLong();
+ mPacketErrorCount = in.readLong();
+ mTheoreticalTxBandwidth = in.readInt();
+ mTheoreticalRxBandwidth = in.readInt();
+ mTheoreticalLatency = in.readInt();
+ mLastDataSampleTime = in.readLong();
+ mDataSampleDuration = in.readInt();
+ }
+
+ /**
+ * returns the type of network this link is connected to
+ * @return network type as defined by {@link android.net.ConnectivityManager} or
+ * {@link android.net.LinkQualityInfo#UNKNOWN_INT}
+ */
+ public int getNetworkType() {
+ return mNetworkType;
+ }
+
+ /**
+ * @hide
+ */
+ public void setNetworkType(int networkType) {
+ mNetworkType = networkType;
+ }
+
+ /**
+ * returns the signal strength normalized across multiple types of networks
+ * @return an integer value from 0 - 99 or {@link android.net.LinkQualityInfo#UNKNOWN_INT}
+ */
+ public int getNormalizedSignalStrength() {
+ return mNormalizedSignalStrength;
+ }
+
+ /**
+ * @hide
+ */
+ public void setNormalizedSignalStrength(int normalizedSignalStrength) {
+ mNormalizedSignalStrength = normalizedSignalStrength;
+ }
+
+ /**
+ * returns the total number of packets sent or received in sample duration
+ * @return number of packets or {@link android.net.LinkQualityInfo#UNKNOWN_LONG}
+ */
+ public long getPacketCount() {
+ return mPacketCount;
+ }
+
+ /**
+ * @hide
+ */
+ public void setPacketCount(long packetCount) {
+ mPacketCount = packetCount;
+ }
+
+ /**
+ * returns the total number of packets errors encountered in sample duration
+ * @return number of errors or {@link android.net.LinkQualityInfo#UNKNOWN_LONG}
+ */
+ public long getPacketErrorCount() {
+ return mPacketErrorCount;
+ }
+
+ /**
+ * @hide
+ */
+ public void setPacketErrorCount(long packetErrorCount) {
+ mPacketErrorCount = packetErrorCount;
+ }
+
+ /**
+ * returns the theoretical upload bandwidth of this network
+ * @return bandwidth in Kbps or {@link android.net.LinkQualityInfo#UNKNOWN_INT}
+ */
+ public int getTheoreticalTxBandwidth() {
+ return mTheoreticalTxBandwidth;
+ }
+
+ /**
+ * @hide
+ */
+ public void setTheoreticalTxBandwidth(int theoreticalTxBandwidth) {
+ mTheoreticalTxBandwidth = theoreticalTxBandwidth;
+ }
+
+ /**
+ * returns the theoretical download bandwidth of this network
+ * @return bandwidth in Kbps or {@link android.net.LinkQualityInfo#UNKNOWN_INT}
+ */
+ public int getTheoreticalRxBandwidth() {
+ return mTheoreticalRxBandwidth;
+ }
+
+ /**
+ * @hide
+ */
+ public void setTheoreticalRxBandwidth(int theoreticalRxBandwidth) {
+ mTheoreticalRxBandwidth = theoreticalRxBandwidth;
+ }
+
+ /**
+ * returns the theoretical latency of this network
+ * @return latency in milliseconds or {@link android.net.LinkQualityInfo#UNKNOWN_INT}
+ */
+ public int getTheoreticalLatency() {
+ return mTheoreticalLatency;
+ }
+
+ /**
+ * @hide
+ */
+ public void setTheoreticalLatency(int theoreticalLatency) {
+ mTheoreticalLatency = theoreticalLatency;
+ }
+
+ /**
+ * returns the time stamp of the last sample
+ * @return milliseconds elapsed since start and sample time or
+ * {@link android.net.LinkQualityInfo#UNKNOWN_LONG}
+ */
+ public long getLastDataSampleTime() {
+ return mLastDataSampleTime;
+ }
+
+ /**
+ * @hide
+ */
+ public void setLastDataSampleTime(long lastDataSampleTime) {
+ mLastDataSampleTime = lastDataSampleTime;
+ }
+
+ /**
+ * returns the sample duration used
+ * @return duration in milliseconds or {@link android.net.LinkQualityInfo#UNKNOWN_INT}
+ */
+ public int getDataSampleDuration() {
+ return mDataSampleDuration;
+ }
+
+ /**
+ * @hide
+ */
+ public void setDataSampleDuration(int dataSampleDuration) {
+ mDataSampleDuration = dataSampleDuration;
+ }
+}
diff --git a/core/java/android/net/MobileDataStateTracker.java b/core/java/android/net/MobileDataStateTracker.java
index 125d5c1..fe596ae 100644
--- a/core/java/android/net/MobileDataStateTracker.java
+++ b/core/java/android/net/MobileDataStateTracker.java
@@ -84,6 +84,8 @@
private SamplingDataTracker mSamplingDataTracker = new SamplingDataTracker();
+ private static final int UNKNOWN = LinkQualityInfo.UNKNOWN_INT;
+
/**
* Create a new MobileDataStateTracker
* @param netType the ConnectivityManager network type
@@ -207,6 +209,8 @@
private class MobileDataStateReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
+ // Assume this isn't a provisioning network.
+ mNetworkInfo.setIsConnectedToProvisioningNetwork(false);
if (intent.getAction().equals(TelephonyIntents.
ACTION_DATA_CONNECTION_CONNECTED_TO_PROVISIONING_APN)) {
String apnName = intent.getStringExtra(PhoneConstants.DATA_APN_KEY);
@@ -222,7 +226,11 @@
// Make us in the connecting state until we make a new TYPE_MOBILE_PROVISIONING
mMobileDataState = PhoneConstants.DataState.CONNECTING;
updateLinkProperitesAndCapatilities(intent);
- setDetailedState(DetailedState.CONNECTED_TO_PROVISIONING_NETWORK, "", apnName);
+ mNetworkInfo.setIsConnectedToProvisioningNetwork(true);
+
+ // Change state to SUSPENDED so setDetailedState
+ // sends EVENT_STATE_CHANGED to connectivityService
+ setDetailedState(DetailedState.SUSPENDED, "", apnName);
} else if (intent.getAction().equals(TelephonyIntents.
ACTION_ANY_DATA_CONNECTION_STATE_CHANGED)) {
String apnType = intent.getStringExtra(PhoneConstants.DATA_APN_TYPE_KEY);
@@ -756,59 +764,59 @@
}
@Override
- public LinkInfo getLinkInfo() {
+ public LinkQualityInfo getLinkQualityInfo() {
if (mNetworkInfo == null || mNetworkInfo.getType() == ConnectivityManager.TYPE_NONE) {
// no data available yet; just return
return null;
}
- MobileLinkInfo li = new MobileLinkInfo();
+ MobileLinkQualityInfo li = new MobileLinkQualityInfo();
- li.mNetworkType = mNetworkInfo.getType();
+ li.setNetworkType(mNetworkInfo.getType());
- mSamplingDataTracker.setCommonLinkInfoFields(li);
+ mSamplingDataTracker.setCommonLinkQualityInfoFields(li);
if (mNetworkInfo.getSubtype() != TelephonyManager.NETWORK_TYPE_UNKNOWN) {
- li.mMobileNetworkType = mNetworkInfo.getSubtype();
+ li.setMobileNetworkType(mNetworkInfo.getSubtype());
NetworkDataEntry entry = getNetworkDataEntry(mNetworkInfo.getSubtype());
if (entry != null) {
- li.mTheoreticalRxBandwidth = entry.downloadBandwidth;
- li.mTheoreticalRxBandwidth = entry.uploadBandwidth;
- li.mTheoreticalLatency = entry.latency;
+ li.setTheoreticalRxBandwidth(entry.downloadBandwidth);
+ li.setTheoreticalRxBandwidth(entry.uploadBandwidth);
+ li.setTheoreticalLatency(entry.latency);
}
if (mSignalStrength != null) {
- li.mNormalizedSignalStrength = getNormalizedSignalStrength(
- li.mMobileNetworkType, mSignalStrength);
+ li.setNormalizedSignalStrength(getNormalizedSignalStrength(
+ li.getMobileNetworkType(), mSignalStrength));
}
}
SignalStrength ss = mSignalStrength;
if (ss != null) {
- li.mRssi = ss.getGsmSignalStrength();
- li.mGsmErrorRate = ss.getGsmBitErrorRate();
- li.mCdmaDbm = ss.getCdmaDbm();
- li.mCdmaEcio = ss.getCdmaEcio();
- li.mEvdoDbm = ss.getEvdoDbm();
- li.mEvdoEcio = ss.getEvdoEcio();
- li.mEvdoSnr = ss.getEvdoSnr();
- li.mLteSignalStrength = ss.getLteSignalStrength();
- li.mLteRsrp = ss.getLteRsrp();
- li.mLteRsrq = ss.getLteRsrq();
- li.mLteRssnr = ss.getLteRssnr();
- li.mLteCqi = ss.getLteCqi();
+ li.setRssi(ss.getGsmSignalStrength());
+ li.setGsmErrorRate(ss.getGsmBitErrorRate());
+ li.setCdmaDbm(ss.getCdmaDbm());
+ li.setCdmaEcio(ss.getCdmaEcio());
+ li.setEvdoDbm(ss.getEvdoDbm());
+ li.setEvdoEcio(ss.getEvdoEcio());
+ li.setEvdoSnr(ss.getEvdoSnr());
+ li.setLteSignalStrength(ss.getLteSignalStrength());
+ li.setLteRsrp(ss.getLteRsrp());
+ li.setLteRsrq(ss.getLteRsrq());
+ li.setLteRssnr(ss.getLteRssnr());
+ li.setLteCqi(ss.getLteCqi());
}
if (VDBG) {
- Slog.d(TAG, "Returning LinkInfo with"
- + " MobileNetworkType = " + String.valueOf(li.mMobileNetworkType)
- + " Theoretical Rx BW = " + String.valueOf(li.mTheoreticalRxBandwidth)
- + " gsm Signal Strength = " + String.valueOf(li.mRssi)
- + " cdma Signal Strength = " + String.valueOf(li.mCdmaDbm)
- + " evdo Signal Strength = " + String.valueOf(li.mEvdoDbm)
- + " Lte Signal Strength = " + String.valueOf(li.mLteSignalStrength));
+ Slog.d(TAG, "Returning LinkQualityInfo with"
+ + " MobileNetworkType = " + String.valueOf(li.getMobileNetworkType())
+ + " Theoretical Rx BW = " + String.valueOf(li.getTheoreticalRxBandwidth())
+ + " gsm Signal Strength = " + String.valueOf(li.getRssi())
+ + " cdma Signal Strength = " + String.valueOf(li.getCdmaDbm())
+ + " evdo Signal Strength = " + String.valueOf(li.getEvdoDbm())
+ + " Lte Signal Strength = " + String.valueOf(li.getLteSignalStrength()));
}
return li;
@@ -829,21 +837,21 @@
}
private static NetworkDataEntry [] mTheoreticalBWTable = new NetworkDataEntry[] {
- new NetworkDataEntry(TelephonyManager.NETWORK_TYPE_EDGE, 237, 118, -1),
- new NetworkDataEntry(TelephonyManager.NETWORK_TYPE_GPRS, 48, 40, -1),
- new NetworkDataEntry(TelephonyManager.NETWORK_TYPE_UMTS, 384, 64, -1),
- new NetworkDataEntry(TelephonyManager.NETWORK_TYPE_HSDPA, 14400, -1, -1),
- new NetworkDataEntry(TelephonyManager.NETWORK_TYPE_HSUPA, 14400, 5760, -1),
- new NetworkDataEntry(TelephonyManager.NETWORK_TYPE_HSPA, 14400, 5760, -1),
- new NetworkDataEntry(TelephonyManager.NETWORK_TYPE_HSPAP, 21000, 5760, -1),
- new NetworkDataEntry(TelephonyManager.NETWORK_TYPE_CDMA, -1, -1, -1),
- new NetworkDataEntry(TelephonyManager.NETWORK_TYPE_1xRTT, -1, -1, -1),
- new NetworkDataEntry(TelephonyManager.NETWORK_TYPE_EVDO_0, 2468, 153, -1),
- new NetworkDataEntry(TelephonyManager.NETWORK_TYPE_EVDO_A, 3072, 1800, -1),
- new NetworkDataEntry(TelephonyManager.NETWORK_TYPE_EVDO_B, 14700, 1800, -1),
- new NetworkDataEntry(TelephonyManager.NETWORK_TYPE_IDEN, -1, -1, -1),
- new NetworkDataEntry(TelephonyManager.NETWORK_TYPE_LTE, 100000, 50000, -1),
- new NetworkDataEntry(TelephonyManager.NETWORK_TYPE_EHRPD, -1, -1, -1),
+ new NetworkDataEntry(TelephonyManager.NETWORK_TYPE_EDGE, 237, 118, UNKNOWN),
+ new NetworkDataEntry(TelephonyManager.NETWORK_TYPE_GPRS, 48, 40, UNKNOWN),
+ new NetworkDataEntry(TelephonyManager.NETWORK_TYPE_UMTS, 384, 64, UNKNOWN),
+ new NetworkDataEntry(TelephonyManager.NETWORK_TYPE_HSDPA, 14400, UNKNOWN, UNKNOWN),
+ new NetworkDataEntry(TelephonyManager.NETWORK_TYPE_HSUPA, 14400, 5760, UNKNOWN),
+ new NetworkDataEntry(TelephonyManager.NETWORK_TYPE_HSPA, 14400, 5760, UNKNOWN),
+ new NetworkDataEntry(TelephonyManager.NETWORK_TYPE_HSPAP, 21000, 5760, UNKNOWN),
+ new NetworkDataEntry(TelephonyManager.NETWORK_TYPE_CDMA, UNKNOWN, UNKNOWN, UNKNOWN),
+ new NetworkDataEntry(TelephonyManager.NETWORK_TYPE_1xRTT, UNKNOWN, UNKNOWN, UNKNOWN),
+ new NetworkDataEntry(TelephonyManager.NETWORK_TYPE_EVDO_0, 2468, 153, UNKNOWN),
+ new NetworkDataEntry(TelephonyManager.NETWORK_TYPE_EVDO_A, 3072, 1800, UNKNOWN),
+ new NetworkDataEntry(TelephonyManager.NETWORK_TYPE_EVDO_B, 14700, 1800, UNKNOWN),
+ new NetworkDataEntry(TelephonyManager.NETWORK_TYPE_IDEN, UNKNOWN, UNKNOWN, UNKNOWN),
+ new NetworkDataEntry(TelephonyManager.NETWORK_TYPE_LTE, 100000, 50000, UNKNOWN),
+ new NetworkDataEntry(TelephonyManager.NETWORK_TYPE_EHRPD, UNKNOWN, UNKNOWN, UNKNOWN),
};
private static NetworkDataEntry getNetworkDataEntry(int networkType) {
@@ -886,10 +894,10 @@
case TelephonyManager.NETWORK_TYPE_IDEN:
case TelephonyManager.NETWORK_TYPE_EHRPD:
default:
- return LinkInfo.UNKNOWN;
+ return UNKNOWN;
}
- return (level * LinkInfo.NORMALIZED_SIGNAL_STRENGTH_RANGE) /
+ return (level * LinkQualityInfo.NORMALIZED_SIGNAL_STRENGTH_RANGE) /
SignalStrength.NUM_SIGNAL_STRENGTH_BINS;
}
diff --git a/core/java/android/net/MobileLinkInfo.java b/core/java/android/net/MobileLinkInfo.java
deleted file mode 100644
index 2d18275..0000000
--- a/core/java/android/net/MobileLinkInfo.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Copyright (C) 2013 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.net;
-
-import android.os.Parcel;
-import android.net.LinkInfo;
-
-/**
- * Class that represents useful attributes of mobile network links
- * such as the upload/download throughput or error rate etc.
- * @hide
- */
-public final class MobileLinkInfo extends LinkInfo
-{
- // Represents TelephonyManager.NetworkType
- public int mMobileNetworkType = UNKNOWN;
- public int mRssi = UNKNOWN;
- public int mGsmErrorRate = UNKNOWN;
- public int mCdmaDbm = UNKNOWN;
- public int mCdmaEcio = UNKNOWN;
- public int mEvdoDbm = UNKNOWN;
- public int mEvdoEcio = UNKNOWN;
- public int mEvdoSnr = UNKNOWN;
- public int mLteSignalStrength = UNKNOWN;
- public int mLteRsrp = UNKNOWN;
- public int mLteRsrq = UNKNOWN;
- public int mLteRssnr = UNKNOWN;
- public int mLteCqi = UNKNOWN;
-
- /**
- * Implement the Parcelable interface.
- */
- @Override
- public void writeToParcel(Parcel dest, int flags) {
- super.writeToParcel(dest, flags, OBJECT_TYPE_MOBILE_LINKINFO);
-
- dest.writeInt(mMobileNetworkType);
- dest.writeInt(mRssi);
- dest.writeInt(mGsmErrorRate);
- dest.writeInt(mCdmaDbm);
- dest.writeInt(mCdmaEcio);
- dest.writeInt(mEvdoDbm);
- dest.writeInt(mEvdoEcio);
- dest.writeInt(mEvdoSnr);
- dest.writeInt(mLteSignalStrength);
- dest.writeInt(mLteRsrp);
- dest.writeInt(mLteRsrq);
- dest.writeInt(mLteRssnr);
- dest.writeInt(mLteCqi);
- }
-
- /* Un-parceling helper */
- public static MobileLinkInfo createFromParcelBody(Parcel in) {
-
- MobileLinkInfo li = new MobileLinkInfo();
-
- li.initializeFromParcel(in);
-
- li.mMobileNetworkType = in.readInt();
- li.mRssi = in.readInt();
- li.mGsmErrorRate = in.readInt();
- li.mCdmaDbm = in.readInt();
- li.mCdmaEcio = in.readInt();
- li.mEvdoDbm = in.readInt();
- li.mEvdoEcio = in.readInt();
- li.mEvdoSnr = in.readInt();
- li.mLteSignalStrength = in.readInt();
- li.mLteRsrp = in.readInt();
- li.mLteRsrq = in.readInt();
- li.mLteRssnr = in.readInt();
- li.mLteCqi = in.readInt();
-
- return li;
- }
-}
diff --git a/core/java/android/net/MobileLinkQualityInfo.java b/core/java/android/net/MobileLinkQualityInfo.java
new file mode 100644
index 0000000..a01fc80
--- /dev/null
+++ b/core/java/android/net/MobileLinkQualityInfo.java
@@ -0,0 +1,286 @@
+/*
+ * Copyright (C) 2013 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.net;
+
+import android.os.Parcel;
+
+/**
+ * Class that represents useful attributes of mobile network links
+ * such as the upload/download throughput or error rate etc.
+ * @hide
+ */
+public class MobileLinkQualityInfo extends LinkQualityInfo {
+ // Represents TelephonyManager.NetworkType
+ private int mMobileNetworkType = UNKNOWN_INT;
+ private int mRssi = UNKNOWN_INT;
+ private int mGsmErrorRate = UNKNOWN_INT;
+ private int mCdmaDbm = UNKNOWN_INT;
+ private int mCdmaEcio = UNKNOWN_INT;
+ private int mEvdoDbm = UNKNOWN_INT;
+ private int mEvdoEcio = UNKNOWN_INT;
+ private int mEvdoSnr = UNKNOWN_INT;
+ private int mLteSignalStrength = UNKNOWN_INT;
+ private int mLteRsrp = UNKNOWN_INT;
+ private int mLteRsrq = UNKNOWN_INT;
+ private int mLteRssnr = UNKNOWN_INT;
+ private int mLteCqi = UNKNOWN_INT;
+
+ /**
+ * Implement the Parcelable interface.
+ * @hide
+ */
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ super.writeToParcel(dest, flags, OBJECT_TYPE_MOBILE_LINK_QUALITY_INFO);
+
+ dest.writeInt(mMobileNetworkType);
+ dest.writeInt(mRssi);
+ dest.writeInt(mGsmErrorRate);
+ dest.writeInt(mCdmaDbm);
+ dest.writeInt(mCdmaEcio);
+ dest.writeInt(mEvdoDbm);
+ dest.writeInt(mEvdoEcio);
+ dest.writeInt(mEvdoSnr);
+ dest.writeInt(mLteSignalStrength);
+ dest.writeInt(mLteRsrp);
+ dest.writeInt(mLteRsrq);
+ dest.writeInt(mLteRssnr);
+ dest.writeInt(mLteCqi);
+ }
+
+ /* Un-parceling helper */
+ /**
+ * @hide
+ */
+ public static MobileLinkQualityInfo createFromParcelBody(Parcel in) {
+
+ MobileLinkQualityInfo li = new MobileLinkQualityInfo();
+
+ li.initializeFromParcel(in);
+
+ li.mMobileNetworkType = in.readInt();
+ li.mRssi = in.readInt();
+ li.mGsmErrorRate = in.readInt();
+ li.mCdmaDbm = in.readInt();
+ li.mCdmaEcio = in.readInt();
+ li.mEvdoDbm = in.readInt();
+ li.mEvdoEcio = in.readInt();
+ li.mEvdoSnr = in.readInt();
+ li.mLteSignalStrength = in.readInt();
+ li.mLteRsrp = in.readInt();
+ li.mLteRsrq = in.readInt();
+ li.mLteRssnr = in.readInt();
+ li.mLteCqi = in.readInt();
+
+ return li;
+ }
+
+ /**
+ * returns mobile network type as defined by {@link android.telephony.TelephonyManager}
+ * @return network type or {@link android.net.LinkQualityInfo#UNKNOWN_INT}
+ */
+ public int getMobileNetworkType() {
+ return mMobileNetworkType;
+ }
+
+ /**
+ * @hide
+ */
+ public void setMobileNetworkType(int mobileNetworkType) {
+ mMobileNetworkType = mobileNetworkType;
+ }
+
+ /**
+ * returns signal strength for GSM networks
+ * @return signal strength in db or {@link android.net.LinkQualityInfo#UNKNOWN_INT}
+ */
+ public int getRssi() {
+ return mRssi;
+ }
+
+ /**
+ * @hide
+ */
+ public void setRssi(int Rssi) {
+ mRssi = Rssi;
+ }
+
+ /**
+ * returns error rates for GSM networks
+ * @return error rate or {@link android.net.LinkQualityInfo#UNKNOWN_INT}
+ */
+ public int getGsmErrorRate() {
+ return mGsmErrorRate;
+ }
+
+ /**
+ * @hide
+ */
+ public void setGsmErrorRate(int gsmErrorRate) {
+ mGsmErrorRate = gsmErrorRate;
+ }
+
+ /**
+ * returns signal strength for CDMA networks
+ * @return signal strength in db or {@link android.net.LinkQualityInfo#UNKNOWN_INT}
+ */
+ public int getCdmaDbm() {
+ return mCdmaDbm;
+ }
+
+ /**
+ * @hide
+ */
+ public void setCdmaDbm(int cdmaDbm) {
+ mCdmaDbm = cdmaDbm;
+ }
+
+ /**
+ * returns signal to noise ratio for CDMA networks
+ * @return signal to noise ratio in db or {@link android.net.LinkQualityInfo#UNKNOWN_INT}
+ */
+ public int getCdmaEcio() {
+ return mCdmaEcio;
+ }
+
+ /**
+ * @hide
+ */
+ public void setCdmaEcio(int cdmaEcio) {
+ mCdmaEcio = cdmaEcio;
+ }
+
+ /**
+ * returns signal strength for EVDO networks
+ * @return signal strength in db or {@link android.net.LinkQualityInfo#UNKNOWN_INT}
+ */
+ public int getEvdoDbm() {
+ return mEvdoDbm;
+ }
+
+ /**
+ * @hide
+ */
+ public void setEvdoDbm(int evdoDbm) {
+ mEvdoDbm = evdoDbm;
+ }
+
+ /**
+ * returns signal to noise ratio for EVDO spectrum
+ * @return signal to noise ration in db or {@link android.net.LinkQualityInfo#UNKNOWN_INT}
+ */
+ public int getEvdoEcio() {
+ return mEvdoEcio;
+ }
+
+ /**
+ * @hide
+ */
+ public void setEvdoEcio(int evdoEcio) {
+ mEvdoEcio = evdoEcio;
+ }
+
+ /**
+ * returns end-to-end signal to noise ratio for EVDO networks
+ * @return signal to noise ration in db or {@link android.net.LinkQualityInfo#UNKNOWN_INT}
+ */
+ public int getEvdoSnr() {
+ return mEvdoSnr;
+ }
+
+ /**
+ * @hide
+ */
+ public void setEvdoSnr(int evdoSnr) {
+ mEvdoSnr = evdoSnr;
+ }
+
+ /**
+ * returns signal strength for LTE network
+ * @return signal strength in db or {@link android.net.LinkQualityInfo#UNKNOWN_INT}
+ */
+ public int getLteSignalStrength() {
+ return mLteSignalStrength;
+ }
+
+ /**
+ * @hide
+ */
+ public void setLteSignalStrength(int lteSignalStrength) {
+ mLteSignalStrength = lteSignalStrength;
+ }
+
+ /**
+ * returns RSRP (Reference Signal Received Power) for LTE network
+ * @return RSRP in db or {@link android.net.LinkQualityInfo#UNKNOWN_INT}
+ */
+ public int getLteRsrp() {
+ return mLteRsrp;
+ }
+
+ /**
+ * @hide
+ */
+ public void setLteRsrp(int lteRsrp) {
+ mLteRsrp = lteRsrp;
+ }
+
+ /**
+ * returns RSRQ (Reference Signal Received Quality) for LTE network
+ * @return RSRQ ??? or {@link android.net.LinkQualityInfo#UNKNOWN_INT}
+ */
+ public int getLteRsrq() {
+ return mLteRsrq;
+ }
+
+ /**
+ * @hide
+ */
+ public void setLteRsrq(int lteRsrq) {
+ mLteRsrq = lteRsrq;
+ }
+
+ /**
+ * returns signal to noise ratio for LTE networks
+ * @return signal to noise ration in db or {@link android.net.LinkQualityInfo#UNKNOWN_INT}
+ */
+ public int getLteRssnr() {
+ return mLteRssnr;
+ }
+
+ /**
+ * @hide
+ */
+ public void setLteRssnr(int lteRssnr) {
+ mLteRssnr = lteRssnr;
+ }
+
+ /**
+ * returns channel quality indicator for LTE networks
+ * @return CQI or {@link android.net.LinkQualityInfo#UNKNOWN_INT}
+ */
+ public int getLteCqi() {
+ return mLteCqi;
+ }
+
+ /**
+ * @hide
+ */
+ public void setLteCqi(int lteCqi) {
+ mLteCqi = lteCqi;
+ }
+}
diff --git a/core/java/android/net/NetworkInfo.java b/core/java/android/net/NetworkInfo.java
index dabc73a..4d2a70d 100644
--- a/core/java/android/net/NetworkInfo.java
+++ b/core/java/android/net/NetworkInfo.java
@@ -83,13 +83,7 @@
/** Link has poor connectivity. */
VERIFYING_POOR_LINK,
/** Checking if network is a captive portal */
- CAPTIVE_PORTAL_CHECK,
- /**
- * Network is connected to provisioning network
- * TODO: Probably not needed when we add TYPE_PROVISIONING_NETWORK
- * @hide
- */
- CONNECTED_TO_PROVISIONING_NETWORK
+ CAPTIVE_PORTAL_CHECK
}
/**
@@ -114,7 +108,6 @@
stateMap.put(DetailedState.DISCONNECTED, State.DISCONNECTED);
stateMap.put(DetailedState.FAILED, State.DISCONNECTED);
stateMap.put(DetailedState.BLOCKED, State.DISCONNECTED);
- stateMap.put(DetailedState.CONNECTED_TO_PROVISIONING_NETWORK, State.CONNECTED);
}
private int mNetworkType;
@@ -127,6 +120,8 @@
private String mExtraInfo;
private boolean mIsFailover;
private boolean mIsRoaming;
+ private boolean mIsConnectedToProvisioningNetwork;
+
/**
* Indicates whether network connectivity is possible:
*/
@@ -155,6 +150,7 @@
mState = State.UNKNOWN;
mIsAvailable = false; // until we're told otherwise, assume unavailable
mIsRoaming = false;
+ mIsConnectedToProvisioningNetwork = false;
}
/** {@hide} */
@@ -171,6 +167,7 @@
mIsFailover = source.mIsFailover;
mIsRoaming = source.mIsRoaming;
mIsAvailable = source.mIsAvailable;
+ mIsConnectedToProvisioningNetwork = source.mIsConnectedToProvisioningNetwork;
}
}
@@ -329,6 +326,22 @@
}
}
+ /** {@hide} */
+ @VisibleForTesting
+ public boolean isConnectedToProvisioningNetwork() {
+ synchronized (this) {
+ return mIsConnectedToProvisioningNetwork;
+ }
+ }
+
+ /** {@hide} */
+ @VisibleForTesting
+ public void setIsConnectedToProvisioningNetwork(boolean val) {
+ synchronized (this) {
+ mIsConnectedToProvisioningNetwork = val;
+ }
+ }
+
/**
* Reports the current coarse-grained state of the network.
* @return the coarse-grained state
@@ -412,7 +425,9 @@
append(", extra: ").append(mExtraInfo == null ? "(none)" : mExtraInfo).
append(", roaming: ").append(mIsRoaming).
append(", failover: ").append(mIsFailover).
- append(", isAvailable: ").append(mIsAvailable);
+ append(", isAvailable: ").append(mIsAvailable).
+ append(", isConnectedToProvisioningNetwork: ").
+ append(mIsConnectedToProvisioningNetwork);
return builder.toString();
}
}
@@ -440,6 +455,7 @@
dest.writeInt(mIsFailover ? 1 : 0);
dest.writeInt(mIsAvailable ? 1 : 0);
dest.writeInt(mIsRoaming ? 1 : 0);
+ dest.writeInt(mIsConnectedToProvisioningNetwork ? 1 : 0);
dest.writeString(mReason);
dest.writeString(mExtraInfo);
}
@@ -462,6 +478,7 @@
netInfo.mIsFailover = in.readInt() != 0;
netInfo.mIsAvailable = in.readInt() != 0;
netInfo.mIsRoaming = in.readInt() != 0;
+ netInfo.mIsConnectedToProvisioningNetwork = in.readInt() != 0;
netInfo.mReason = in.readString();
netInfo.mExtraInfo = in.readString();
return netInfo;
diff --git a/core/java/android/net/NetworkStateTracker.java b/core/java/android/net/NetworkStateTracker.java
index a3d7b14..1ca9255 100644
--- a/core/java/android/net/NetworkStateTracker.java
+++ b/core/java/android/net/NetworkStateTracker.java
@@ -122,7 +122,7 @@
* Get interesting information about this network link
* @return a copy of link information, null if not available
*/
- public LinkInfo getLinkInfo();
+ public LinkQualityInfo getLinkQualityInfo();
/**
* Return the system properties name associated with the tcp buffer sizes
diff --git a/core/java/android/net/SamplingDataTracker.java b/core/java/android/net/SamplingDataTracker.java
index ac24930..acd56f2 100644
--- a/core/java/android/net/SamplingDataTracker.java
+++ b/core/java/android/net/SamplingDataTracker.java
@@ -189,7 +189,7 @@
if (mBeginningSample != null && mEndingSample != null) {
return mEndingSample.mTxByteCount - mBeginningSample.mTxByteCount;
} else {
- return LinkInfo.UNKNOWN;
+ return LinkQualityInfo.UNKNOWN_LONG;
}
}
}
@@ -199,7 +199,7 @@
if (mBeginningSample != null && mEndingSample != null) {
return mEndingSample.mTxPacketCount - mBeginningSample.mTxPacketCount;
} else {
- return LinkInfo.UNKNOWN;
+ return LinkQualityInfo.UNKNOWN_LONG;
}
}
}
@@ -209,7 +209,7 @@
if (mBeginningSample != null && mEndingSample != null) {
return mEndingSample.mTxPacketErrorCount - mBeginningSample.mTxPacketErrorCount;
} else {
- return LinkInfo.UNKNOWN;
+ return LinkQualityInfo.UNKNOWN_LONG;
}
}
}
@@ -219,7 +219,7 @@
if (mBeginningSample != null && mEndingSample != null) {
return mEndingSample.mRxByteCount - mBeginningSample.mRxByteCount;
} else {
- return LinkInfo.UNKNOWN;
+ return LinkQualityInfo.UNKNOWN_LONG;
}
}
}
@@ -229,7 +229,7 @@
if (mBeginningSample != null && mEndingSample != null) {
return mEndingSample.mRxPacketCount - mBeginningSample.mRxPacketCount;
} else {
- return LinkInfo.UNKNOWN;
+ return LinkQualityInfo.UNKNOWN_LONG;
}
}
}
@@ -244,7 +244,7 @@
long txPacketCount = end.mTxPacketCount - begin.mTxPacketCount;
return rxPacketCount + txPacketCount;
} else {
- return LinkInfo.UNKNOWN;
+ return LinkQualityInfo.UNKNOWN_LONG;
}
}
@@ -254,7 +254,7 @@
long txPacketErrorCount = getSampledTxPacketErrorCount();
return rxPacketErrorCount + txPacketErrorCount;
} else {
- return LinkInfo.UNKNOWN;
+ return LinkQualityInfo.UNKNOWN_LONG;
}
}
@@ -263,7 +263,7 @@
if (mBeginningSample != null && mEndingSample != null) {
return mEndingSample.mRxPacketErrorCount - mBeginningSample.mRxPacketErrorCount;
} else {
- return LinkInfo.UNKNOWN;
+ return LinkQualityInfo.UNKNOWN_LONG;
}
}
}
@@ -273,7 +273,7 @@
if (mEndingSample != null) {
return mEndingSample.mTimestamp;
} else {
- return LinkInfo.UNKNOWN;
+ return LinkQualityInfo.UNKNOWN_LONG;
}
}
}
@@ -283,17 +283,17 @@
if (mBeginningSample != null && mEndingSample != null) {
return (int) (mEndingSample.mTimestamp - mBeginningSample.mTimestamp);
} else {
- return LinkInfo.UNKNOWN;
+ return LinkQualityInfo.UNKNOWN_INT;
}
}
}
- public void setCommonLinkInfoFields(LinkInfo li) {
+ public void setCommonLinkQualityInfoFields(LinkQualityInfo li) {
synchronized(mSamplingDataLock) {
- li.mLastDataSampleTime = getSampleTimestamp();
- li.mDataSampleDuration = getSampleDuration();
- li.mPacketCount = getSampledPacketCount();
- li.mPacketErrorCount = getSampledPacketErrorCount();
+ li.setLastDataSampleTime(getSampleTimestamp());
+ li.setDataSampleDuration(getSampleDuration());
+ li.setPacketCount(getSampledPacketCount());
+ li.setPacketErrorCount(getSampledPacketErrorCount());
}
}
}
diff --git a/core/java/android/net/WifiLinkInfo.java b/core/java/android/net/WifiLinkInfo.java
deleted file mode 100644
index a21f1fe7..0000000
--- a/core/java/android/net/WifiLinkInfo.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Copyright (C) 2013 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.net;
-
-import android.os.Parcel;
-import android.net.LinkInfo;
-
-/**
- * Class that represents useful attributes of wifi network links
- * such as the upload/download throughput or error rate etc.
- * @hide
- */
-public final class WifiLinkInfo extends LinkInfo
-{
- /**
- * Type enumerations for Wifi Network
- */
-
- /* Indicates Wifi network type such as b/g etc*/
- public int mType = UNKNOWN;
-
- public String mBssid;
-
- /* Rssi found by scans */
- public int mRssi = UNKNOWN;
-
- /* packet statistics */
- public long mTxGood = UNKNOWN;
- public long mTxBad = UNKNOWN;
-
- /**
- * Implement the Parcelable interface.
- */
- @Override
- public void writeToParcel(Parcel dest, int flags) {
- super.writeToParcel(dest, flags, OBJECT_TYPE_WIFI_LINKINFO);
-
- dest.writeInt(mType);
- dest.writeInt(mRssi);
- dest.writeLong(mTxGood);
- dest.writeLong(mTxBad);
-
- dest.writeString(mBssid);
- }
-
- /* Un-parceling helper */
- public static WifiLinkInfo createFromParcelBody(Parcel in) {
- WifiLinkInfo li = new WifiLinkInfo();
-
- li.initializeFromParcel(in);
-
- li.mType = in.readInt();
- li.mRssi = in.readInt();
- li.mTxGood = in.readLong();
- li.mTxBad = in.readLong();
-
- li.mBssid = in.readString();
-
- return li;
- }
-}
diff --git a/core/java/android/net/WifiLinkQualityInfo.java b/core/java/android/net/WifiLinkQualityInfo.java
new file mode 100644
index 0000000..20ec9a7
--- /dev/null
+++ b/core/java/android/net/WifiLinkQualityInfo.java
@@ -0,0 +1,149 @@
+/*
+ * Copyright (C) 2013 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.net;
+
+import android.os.Parcel;
+
+/**
+ * Class that represents useful attributes of wifi network links
+ * such as the upload/download throughput or error rate etc.
+ * @hide
+ */
+public class WifiLinkQualityInfo extends LinkQualityInfo {
+
+ /* Indicates Wifi network type such as b/g etc*/
+ private int mType = UNKNOWN_INT;
+
+ private String mBssid;
+
+ /* Rssi found by scans */
+ private int mRssi = UNKNOWN_INT;
+
+ /* packet statistics */
+ private long mTxGood = UNKNOWN_LONG;
+ private long mTxBad = UNKNOWN_LONG;
+
+ /**
+ * Implement the Parcelable interface.
+ * @hide
+ */
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ super.writeToParcel(dest, flags, OBJECT_TYPE_WIFI_LINK_QUALITY_INFO);
+
+ dest.writeInt(mType);
+ dest.writeInt(mRssi);
+ dest.writeLong(mTxGood);
+ dest.writeLong(mTxBad);
+
+ dest.writeString(mBssid);
+ }
+
+ /* Un-parceling helper */
+ /**
+ * @hide
+ */
+ public static WifiLinkQualityInfo createFromParcelBody(Parcel in) {
+ WifiLinkQualityInfo li = new WifiLinkQualityInfo();
+
+ li.initializeFromParcel(in);
+
+ li.mType = in.readInt();
+ li.mRssi = in.readInt();
+ li.mTxGood = in.readLong();
+ li.mTxBad = in.readLong();
+
+ li.mBssid = in.readString();
+
+ return li;
+ }
+
+ /**
+ * returns Wifi network type
+ * @return network type or {@link android.net.LinkQualityInfo#UNKNOWN_INT}
+ */
+ public int getType() {
+ return mType;
+ }
+
+ /**
+ * @hide
+ */
+ public void setType(int type) {
+ mType = type;
+ }
+
+ /**
+ * returns BSSID of the access point
+ * @return the BSSID, in the form of a six-byte MAC address: {@code XX:XX:XX:XX:XX:XX} or null
+ */
+ public String getBssid() {
+ return mBssid;
+ }
+
+ /**
+ * @hide
+ */
+ public void setBssid(String bssid) {
+ mBssid = bssid;
+ }
+
+ /**
+ * returns RSSI of the network in raw form
+ * @return un-normalized RSSI or {@link android.net.LinkQualityInfo#UNKNOWN_INT}
+ */
+ public int getRssi() {
+ return mRssi;
+ }
+
+ /**
+ * @hide
+ */
+ public void setRssi(int rssi) {
+ mRssi = rssi;
+ }
+
+ /**
+ * returns number of packets transmitted without error
+ * @return number of packets or {@link android.net.LinkQualityInfo#UNKNOWN_LONG}
+ */
+ public long getTxGood() {
+ return mTxGood;
+ }
+
+ /**
+ * @hide
+ */
+ public void setTxGood(long txGood) {
+ mTxGood = txGood;
+ }
+
+ /**
+ * returns number of transmitted packets that encountered errors
+ * @return number of packets or {@link android.net.LinkQualityInfo#UNKNOWN_LONG}
+ */
+ public long getTxBad() {
+ return mTxBad;
+ }
+
+ /**
+ * @hide
+ */
+ public void setTxBad(long txBad) {
+ mTxBad = txBad;
+ }
+}
diff --git a/core/java/android/os/BatteryStats.java b/core/java/android/os/BatteryStats.java
index 38ffb96..dbaa325 100644
--- a/core/java/android/os/BatteryStats.java
+++ b/core/java/android/os/BatteryStats.java
@@ -2380,22 +2380,25 @@
@SuppressWarnings("unused")
public void dumpCheckinLocked(
- PrintWriter pw, List<ApplicationInfo> apps, boolean isUnpluggedOnly) {
+ PrintWriter pw, List<ApplicationInfo> apps, boolean isUnpluggedOnly,
+ boolean includeHistory) {
prepareForDumpLocked();
long now = getHistoryBaseTime() + SystemClock.elapsedRealtime();
- final HistoryItem rec = new HistoryItem();
- if (startIteratingHistoryLocked()) {
- HistoryPrinter hprinter = new HistoryPrinter();
- while (getNextHistoryLocked(rec)) {
- pw.print(BATTERY_STATS_CHECKIN_VERSION); pw.print(',');
- pw.print(0); pw.print(',');
- pw.print(HISTORY_DATA); pw.print(',');
- hprinter.printNextItemCheckin(pw, rec, now);
- pw.println();
+ if (includeHistory) {
+ final HistoryItem rec = new HistoryItem();
+ if (startIteratingHistoryLocked()) {
+ HistoryPrinter hprinter = new HistoryPrinter();
+ while (getNextHistoryLocked(rec)) {
+ pw.print(BATTERY_STATS_CHECKIN_VERSION); pw.print(',');
+ pw.print(0); pw.print(',');
+ pw.print(HISTORY_DATA); pw.print(',');
+ hprinter.printNextItemCheckin(pw, rec, now);
+ pw.println();
+ }
+ finishIteratingHistoryLocked();
}
- finishIteratingHistoryLocked();
}
if (apps != null) {
diff --git a/core/java/android/os/Build.java b/core/java/android/os/Build.java
index dd40e35..88eb280 100644
--- a/core/java/android/os/Build.java
+++ b/core/java/android/os/Build.java
@@ -438,7 +438,7 @@
public static final int JELLY_BEAN_MR2 = 18;
/**
- * Android X.X: Key Lime Pie, another tasty treat.
+ * Android X.X: KitKat, another tasty treat.
*
* <p>Applications targeting this or a later release will get these
* new changes in behavior:</p>
@@ -448,7 +448,7 @@
* {@link android.content.Context#bindService}.
* </ul>
*/
- public static final int KEY_LIME_PIE = CUR_DEVELOPMENT;
+ public static final int KITKAT = CUR_DEVELOPMENT;
}
/** The type of build, like "user" or "eng". */
diff --git a/core/java/android/os/Environment.java b/core/java/android/os/Environment.java
index 3b9456f..c6e8c3e 100644
--- a/core/java/android/os/Environment.java
+++ b/core/java/android/os/Environment.java
@@ -20,7 +20,6 @@
import android.os.storage.IMountService;
import android.os.storage.StorageManager;
import android.os.storage.StorageVolume;
-import android.os.SystemProperties;
import android.text.TextUtils;
import android.util.Log;
@@ -324,7 +323,7 @@
* {@link android.Manifest.permission#READ_EXTERNAL_STORAGE} permission,
* which is automatically granted if you hold the write permission.
* <p>
- * Starting in {@link android.os.Build.VERSION_CODES#KEY_LIME_PIE}, if your
+ * Starting in {@link android.os.Build.VERSION_CODES#KITKAT}, if your
* application only needs to store internal data, consider using
* {@link Context#getExternalFilesDir(String)} or
* {@link Context#getExternalCacheDir()}, which require no permissions to
diff --git a/core/java/android/os/IUserManager.aidl b/core/java/android/os/IUserManager.aidl
index bd2d9ac..3c9d0d9 100644
--- a/core/java/android/os/IUserManager.aidl
+++ b/core/java/android/os/IUserManager.aidl
@@ -46,8 +46,8 @@
int userHandle);
Bundle getApplicationRestrictions(in String packageName);
Bundle getApplicationRestrictionsForUser(in String packageName, int userHandle);
- boolean changeRestrictionsPin(in String newPin);
- int checkRestrictionsPin(in String pin);
- boolean hasRestrictionsPin();
+ boolean setRestrictionsChallenge(in String newPin);
+ int checkRestrictionsChallenge(in String pin);
+ boolean hasRestrictionsChallenge();
void removeRestrictions();
}
diff --git a/core/java/android/os/UserManager.java b/core/java/android/os/UserManager.java
index 10b9765..a3752a1 100644
--- a/core/java/android/os/UserManager.java
+++ b/core/java/android/os/UserManager.java
@@ -140,16 +140,6 @@
*/
public static final String DISALLOW_REMOVE_USER = "no_remove_user";
- /**
- * Key for user restrictions. Specifies if a user is disallowed from setting app restrictions
- * via a restrictions PIN. The default is <code>false</code>. If app restrictions have already
- * been set up, then this user restriction cannot be set to true.
- * <p/>
- * Type: Boolean
- * @see #hasRestrictionsPin()
- */
- public static final String DISALLOW_APP_RESTRICTIONS = "no_app_restrictions";
-
/** @hide */
public static final int PIN_VERIFICATION_FAILED_INCORRECT = -3;
/** @hide */
@@ -650,15 +640,14 @@
}
/**
- * @hide
- * Sets a new restrictions PIN. This should only be called after verifying that there
- * currently isn't a PIN set, or after the user successfully enters the current PIN.
- * @param newPin
- * @return Returns true if the PIN was changed successfully.
+ * Sets a new challenge PIN for restrictions. This is only for use by pre-installed
+ * apps and requires the MANAGE_USERS permission.
+ * @param newPin the PIN to use for challenge dialogs.
+ * @return Returns true if the challenge PIN was set successfully.
*/
- public boolean changeRestrictionsPin(String newPin) {
+ public boolean setRestrictionsChallenge(String newPin) {
try {
- return mService.changeRestrictionsPin(newPin);
+ return mService.setRestrictionsChallenge(newPin);
} catch (RemoteException re) {
Log.w(TAG, "Could not change restrictions pin");
}
@@ -674,9 +663,9 @@
* Returns {@link #PIN_VERIFICATION_SUCCESS} if the input matches the saved PIN. Returns
* {@link #PIN_VERIFICATION_FAILED_NOT_SET} if there is no PIN set.
*/
- public int checkRestrictionsPin(String pin) {
+ public int checkRestrictionsChallenge(String pin) {
try {
- return mService.checkRestrictionsPin(pin);
+ return mService.checkRestrictionsChallenge(pin);
} catch (RemoteException re) {
Log.w(TAG, "Could not check restrictions pin");
}
@@ -684,16 +673,17 @@
}
/**
+ * @hide
* Checks whether the user has restrictions that are PIN-protected. An application that
* participates in restrictions can check if the owner has requested a PIN challenge for
* any restricted operations. If there is a PIN in effect, the application should launch
- * the PIN challenge activity {@link android.content.Intent#ACTION_RESTRICTIONS_PIN_CHALLENGE}.
- * @see android.content.Intent#ACTION_RESTRICTIONS_PIN_CHALLENGE
+ * the PIN challenge activity {@link android.content.Intent#ACTION_RESTRICTIONS_CHALLENGE}.
+ * @see android.content.Intent#ACTION_RESTRICTIONS_CHALLENGE
* @return whether a restrictions PIN is in effect.
*/
- public boolean hasRestrictionsPin() {
+ public boolean hasRestrictionsChallenge() {
try {
- return mService.hasRestrictionsPin();
+ return mService.hasRestrictionsChallenge();
} catch (RemoteException re) {
Log.w(TAG, "Could not change restrictions pin");
}
diff --git a/core/java/android/preference/PreferenceActivity.java b/core/java/android/preference/PreferenceActivity.java
index 0f765fa..5d886a3 100644
--- a/core/java/android/preference/PreferenceActivity.java
+++ b/core/java/android/preference/PreferenceActivity.java
@@ -893,7 +893,7 @@
* @return true if the fragment class name is valid for this Activity and false otherwise.
*/
protected boolean isValidFragment(String fragmentName) {
- if (getApplicationInfo().targetSdkVersion >= android.os.Build.VERSION_CODES.KEY_LIME_PIE) {
+ if (getApplicationInfo().targetSdkVersion >= android.os.Build.VERSION_CODES.KITKAT) {
Log.w(TAG, "Subclasses of PreferenceActivity must override isValidFragment(String)"
+ " to verify that the Fragment class is valid! " + this.getClass().getName()
+ " has not checked if fragment " + fragmentName + " is valid.");
diff --git a/core/java/android/preference/PreferenceGroup.java b/core/java/android/preference/PreferenceGroup.java
index a5e05ba..5f8c78d 100644
--- a/core/java/android/preference/PreferenceGroup.java
+++ b/core/java/android/preference/PreferenceGroup.java
@@ -210,10 +210,7 @@
* @return Whether to allow adding the preference (true), or not (false).
*/
protected boolean onPrepareAddPreference(Preference preference) {
- if (!super.isEnabled()) {
- preference.setEnabled(false);
- }
-
+ preference.onParentChanged(this, shouldDisableDependents());
return true;
}
diff --git a/core/java/android/print/IPrinterDiscoveryObserver.aidl b/core/java/android/print/IPrinterDiscoveryObserver.aidl
index 625f383..71198f7 100644
--- a/core/java/android/print/IPrinterDiscoveryObserver.aidl
+++ b/core/java/android/print/IPrinterDiscoveryObserver.aidl
@@ -28,5 +28,4 @@
oneway interface IPrinterDiscoveryObserver {
void onPrintersAdded(in List<PrinterInfo> printers);
void onPrintersRemoved(in List<PrinterId> printerIds);
- void onPrintersUpdated(in List<PrinterInfo> printerIds);
}
diff --git a/core/java/android/print/PrintAttributes.java b/core/java/android/print/PrintAttributes.java
index caa10ae..b1e427e 100644
--- a/core/java/android/print/PrintAttributes.java
+++ b/core/java/android/print/PrintAttributes.java
@@ -18,10 +18,11 @@
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
-import android.content.res.Resources;
+import android.content.res.Resources.NotFoundException;
import android.os.Parcel;
import android.os.Parcelable;
import android.text.TextUtils;
+import android.util.Log;
import com.android.internal.R;
@@ -29,60 +30,20 @@
* This class represents the attributes of a print job.
*/
public final class PrintAttributes implements Parcelable {
- /** Duplex mode: No duplexing */
- public static final int DUPLEX_MODE_NONE = 1 << 0;
- /** Duplex mode: Turn a page along its long edge, e.g. like a book */
- public static final int DUPLEX_MODE_LONG_EDGE = 1 << 1;
- /** Duplex mode: Turn a page along its short edge, e.g. like a notepad */
- public static final int DUPLEX_MODE_SHORT_EDGE = 1 << 2;
-
-
- /** Orientation: Portrait page orientation. */
- public static final int ORIENTATION_PORTRAIT = 1 << 0;
- /** Orientation: Landscape page orientation. */
- public static final int ORIENTATION_LANDSCAPE = 1 << 1;
-
/** Color mode: Monochrome color scheme, e.g. one color is used. */
public static final int COLOR_MODE_MONOCHROME = 1 << 0;
/** Color mode: Color color scheme, e.g. many colors are used. */
public static final int COLOR_MODE_COLOR = 1 << 1;
-
- /** Fitting mode: No fitting. */
- public static final int FITTING_MODE_NONE = 1 << 0;
- /** Fitting mode: Scale the content to fit in the page
- * without cropping it in any dimension. */
- public static final int FITTING_MODE_SCALE_TO_FIT = 1 << 1;
- /**
- * Fitting mode: Uniformly scale the content to fill the entire page
- * potentially cropping the content if it overflows in one dimension.
- */
- public static final int FITTING_MODE_SCALE_TO_FILL = 1 << 2;
-
-
- private static final int VALID_DUPLEX_MODES =
- DUPLEX_MODE_NONE | DUPLEX_MODE_LONG_EDGE | DUPLEX_MODE_SHORT_EDGE;
-
private static final int VALID_COLOR_MODES =
COLOR_MODE_MONOCHROME | COLOR_MODE_COLOR;
- private static final int VALID_FITTING_MODES =
- FITTING_MODE_NONE | FITTING_MODE_SCALE_TO_FIT | FITTING_MODE_SCALE_TO_FILL;
-
- private static final int VALID_ORIENTATIONS =
- ORIENTATION_PORTRAIT | ORIENTATION_LANDSCAPE;
-
private MediaSize mMediaSize;
private Resolution mResolution;
private Margins mMargins;
- private Tray mInputTray;
- private Tray mOutputTray;
- private int mDuplexMode;
private int mColorMode;
- private int mFittingMode;
- private int mOrientation;
PrintAttributes() {
/* hide constructor */
@@ -92,12 +53,7 @@
mMediaSize = (parcel.readInt() == 1) ? MediaSize.createFromParcel(parcel) : null;
mResolution = (parcel.readInt() == 1) ? Resolution.createFromParcel(parcel) : null;
mMargins = (parcel.readInt() == 1) ? Margins.createFromParcel(parcel) : null;
- mInputTray = (parcel.readInt() == 1) ? Tray.createFromParcel(parcel) : null;
- mOutputTray = (parcel.readInt() == 1) ? Tray.createFromParcel(parcel) : null;
- mDuplexMode = parcel.readInt();
mColorMode = parcel.readInt();
- mFittingMode = parcel.readInt();
- mOrientation = parcel.readInt();
}
/**
@@ -161,71 +117,6 @@
}
/**
- * Sets the input tray.
- *
- * @return The input tray or <code>null</code> if not set.
- */
- public Tray getInputTray() {
- return mInputTray;
- }
-
- /**
- * Gets the input tray.
- *
- * @param The input tray.
- *
- * @hide
- */
- public void setInputTray(Tray inputTray) {
- mInputTray = inputTray;
- }
-
- /**
- * Gets the output tray.
- *
- * @return The output tray or <code>null</code> if not set.
- */
- public Tray getOutputTray() {
- return mOutputTray;
- }
-
- /**
- * Sets the output tray.
- *
- * @param The output tray.
- *
- * @hide
- */
- public void setOutputTray(Tray outputTray) {
- mOutputTray = outputTray;
- }
-
- /**
- * Gets the duplex mode.
- *
- * @return The duplex mode or zero if not set.
- *
- * @see #DUPLEX_MODE_NONE
- * @see #DUPLEX_MODE_SHORT_EDGE
- * @see #DUPLEX_MODE_LONG_EDGE
- */
- public int getDuplexMode() {
- return mDuplexMode;
- }
-
- /**
- * Sets the duplex mode.
- *
- * @param The duplex mode.
- *
- * @hide
- */
- public void setDuplexMode(int duplexMode) {
- enforceValidDuplexMode(duplexMode);
- mDuplexMode = duplexMode;
- }
-
- /**
* Gets the color mode.
*
* @return The color mode or zero if not set.
@@ -252,62 +143,6 @@
mColorMode = colorMode;
}
- /**
- * Gets the fitting mode.
- *
- * @return The fitting mode or zero if not set.
- *
- * @see #FITTING_MODE_NONE
- * @see #FITTING_MODE_SCALE_TO_FILL
- * @see #FITTING_MODE_SCALE_TO_FIT
- */
- public int getFittingMode() {
- return mFittingMode;
- }
-
- /**
- * Sets the fitting mode.
- *
- * @param The fitting mode.
- *
- * @see #FITTING_MODE_NONE
- * @see #FITTING_MODE_SCALE_TO_FILL
- * @see #FITTING_MODE_SCALE_TO_FIT
- *
- * @hide
- */
- public void setFittingMode(int fittingMode) {
- enforceValidFittingMode(fittingMode);
- mFittingMode = fittingMode;
- }
-
- /**
- * Gets the orientation.
- *
- * @return The orientation or zero if not set.
- *
- * @see #ORIENTATION_PORTRAIT
- * @see #ORIENTATION_LANDSCAPE
- */
- public int getOrientation() {
- return mOrientation;
- }
-
- /**
- * Sets the orientation.
- *
- * @param The orientation.
- *
- * @see #ORIENTATION_PORTRAIT
- * @see #ORIENTATION_LANDSCAPE
- *
- * @hide
- */
- public void setOrientation(int orientation) {
- enforceValidOrientation(orientation);
- mOrientation = orientation;
- }
-
@Override
public void writeToParcel(Parcel parcel, int flags) {
if (mMediaSize != null) {
@@ -328,22 +163,7 @@
} else {
parcel.writeInt(0);
}
- if (mInputTray != null) {
- parcel.writeInt(1);
- mInputTray.writeToParcel(parcel);
- } else {
- parcel.writeInt(0);
- }
- if (mOutputTray != null) {
- parcel.writeInt(1);
- mOutputTray.writeToParcel(parcel);
- } else {
- parcel.writeInt(0);
- }
- parcel.writeInt(mDuplexMode);
parcel.writeInt(mColorMode);
- parcel.writeInt(mFittingMode);
- parcel.writeInt(mOrientation);
}
@Override
@@ -356,13 +176,8 @@
final int prime = 31;
int result = 1;
result = prime * result + mColorMode;
- result = prime * result + mDuplexMode;
- result = prime * result + mFittingMode;
- result = prime * result + mOrientation;
- result = prime * result + ((mInputTray == null) ? 0 : mInputTray.hashCode());
result = prime * result + ((mMargins == null) ? 0 : mMargins.hashCode());
result = prime * result + ((mMediaSize == null) ? 0 : mMediaSize.hashCode());
- result = prime * result + ((mOutputTray == null) ? 0 : mOutputTray.hashCode());
result = prime * result + ((mResolution == null) ? 0 : mResolution.hashCode());
return result;
}
@@ -382,29 +197,6 @@
if (mColorMode != other.mColorMode) {
return false;
}
- if (mDuplexMode != other.mDuplexMode) {
- return false;
- }
- if (mFittingMode != other.mFittingMode) {
- return false;
- }
- if (mOrientation != other.mOrientation) {
- return false;
- }
- if (mInputTray == null) {
- if (other.mInputTray != null) {
- return false;
- }
- } else if (!mInputTray.equals(other.mInputTray)) {
- return false;
- }
- if (mOutputTray == null) {
- if (other.mOutputTray != null) {
- return false;
- }
- } else if (!mOutputTray.equals(other.mOutputTray)) {
- return false;
- }
if (mMargins == null) {
if (other.mMargins != null) {
return false;
@@ -436,12 +228,7 @@
builder.append("mediaSize: ").append(mMediaSize);
builder.append(", resolution: ").append(mResolution);
builder.append(", margins: ").append(mMargins);
- builder.append(", inputTray: ").append(mInputTray);
- builder.append(", outputTray: ").append(mOutputTray);
builder.append(", colorMode: ").append(colorModeToString(mColorMode));
- builder.append(", duplexMode: ").append(duplexModeToString(mDuplexMode));
- builder.append(", fittingMode: ").append(fittingModeToString(mFittingMode));
- builder.append(", orientation: ").append(orientationToString(mOrientation));
builder.append("}");
return builder.toString();
}
@@ -451,12 +238,7 @@
mMediaSize = null;
mResolution = null;
mMargins = null;
- mInputTray = null;
- mOutputTray = null;
- mDuplexMode = 0;
mColorMode = 0;
- mFittingMode = 0;
- mOrientation = 0;
}
/**
@@ -466,484 +248,201 @@
mMediaSize = other.mMediaSize;
mResolution = other.mResolution;
mMargins = other.mMargins;
- mInputTray = other.mInputTray;
- mOutputTray = other.mOutputTray;
- mDuplexMode = other.mDuplexMode;
mColorMode = other.mColorMode;
- mFittingMode = other.mFittingMode;
- mOrientation = other.mOrientation;
}
/**
* This class specifies a supported media size.
*/
public static final class MediaSize {
+ private static final String LOG_TAG = "MediaSize";
// TODO: Verify media sizes and add more standard ones.
// ISO sizes
- /**
- * ISO A0 media size: 841mm x 1189mm (33.11" x 46.81")
- *
- * @see #createMediaSize(PackageManager, int)
- */
- public static final int ISO_A0 = 1;
+ /** ISO A0 media size: 841mm x 1189mm (33.11" x 46.81") */
+ public static final MediaSize ISO_A0 =
+ new MediaSize("ISO_A0", "android", R.string.mediaSize_iso_a0, 33110, 46810);
+ /** ISO A1 media size: 594mm x 841mm (23.39" x 33.11") */
+ public static final MediaSize ISO_A1 =
+ new MediaSize("ISO_A1", "android", R.string.mediaSize_iso_a1, 23390, 33110);
+ /** ISO A2 media size: 420mm x 594mm (16.54" x 23.39") */
+ public static final MediaSize ISO_A2 =
+ new MediaSize("ISO_A2", "android", R.string.mediaSize_iso_a2, 16540, 23390);
+ /** ISO A3 media size: 297mm x 420mm (11.69" x 16.54") */
+ public static final MediaSize ISO_A3 =
+ new MediaSize("ISO_A3", "android", R.string.mediaSize_iso_a3, 11690, 16540);
+ /** ISO A4 media size: 210mm x 297mm (8.27" x 11.69") */
+ public static final MediaSize ISO_A4 =
+ new MediaSize("ISO_A4", "android", R.string.mediaSize_iso_a4, 8270, 11690);
+ /** ISO A5 media size: 148mm x 210mm (5.83" x 8.27") */
+ public static final MediaSize ISO_A5 =
+ new MediaSize("ISO_A5", "android", R.string.mediaSize_iso_a5, 5830, 8270);
+ /** ISO A6 media size: 105mm x 148mm (4.13" x 5.83") */
+ public static final MediaSize ISO_A6 =
+ new MediaSize("ISO_A6", "android", R.string.mediaSize_iso_a6, 4130, 5830);
+ /** ISO A7 media size: 74mm x 105mm (2.91" x 4.13") */
+ public static final MediaSize ISO_A7 =
+ new MediaSize("ISO_A7", "android", R.string.mediaSize_iso_a7, 2910, 4130);
+ /** ISO A8 media size: 52mm x 74mm (2.05" x 2.91") */
+ public static final MediaSize ISO_A8 =
+ new MediaSize("ISO_A8", "android", R.string.mediaSize_iso_a8, 2050, 2910);
+ /** ISO A9 media size: 37mm x 52mm (1.46" x 2.05") */
+ public static final MediaSize ISO_A9 =
+ new MediaSize("ISO_A9", "android", R.string.mediaSize_iso_a9, 1460, 2050);
+ /** ISO A10 media size: 26mm x 37mm (1.02" x 1.46") */
+ public static final MediaSize ISO_A10 =
+ new MediaSize("ISO_A10", "android", R.string.mediaSize_iso_a10, 1020, 1460);
- /**
- * ISO A1 media size: 594mm x 841mm (23.39" x 33.11")
- *
- * @see #createMediaSize(PackageManager, int)
- */
- public static final int ISO_A1 = 2;
+ /** ISO B0 media size: 1000mm x 1414mm (39.37" x 55.67") */
+ public static final MediaSize ISO_B0 =
+ new MediaSize("ISO_B0", "android", R.string.mediaSize_iso_b0, 39370, 55670);
+ /** ISO B1 media size: 707mm x 1000mm (27.83" x 39.37") */
+ public static final MediaSize ISO_B1 =
+ new MediaSize("ISO_B1", "android", R.string.mediaSize_iso_b1, 27830, 39370);
+ /** ISO B2 media size: 500mm x 707mm (19.69" x 27.83") */
+ public static final MediaSize ISO_B2 =
+ new MediaSize("ISO_B2", "android", R.string.mediaSize_iso_b2, 19690, 27830);
+ /** ISO B3 media size: 353mm x 500mm (13.90" x 19.69") */
+ public static final MediaSize ISO_B3 =
+ new MediaSize("ISO_B3", "android", R.string.mediaSize_iso_b3, 13900, 19690);
+ /** ISO B4 media size: 250mm x 353mm (9.84" x 13.90") */
+ public static final MediaSize ISO_B4 =
+ new MediaSize("ISO_B4", "android", R.string.mediaSize_iso_b4, 9840, 13900);
+ /** ISO B5 media size: 176mm x 250mm (6.93" x 9.84") */
+ public static final MediaSize ISO_B5 =
+ new MediaSize("ISO_B5", "android", R.string.mediaSize_iso_b5, 6930, 9840);
+ /** ISO B6 media size: 125mm x 176mm (4.92" x 6.93") */
+ public static final MediaSize ISO_B6 =
+ new MediaSize("ISO_B6", "android", R.string.mediaSize_iso_b6, 4920, 6930);
+ /** ISO B7 media size: 88mm x 125mm (3.46" x 4.92") */
+ public static final MediaSize ISO_B7 =
+ new MediaSize("ISO_B7", "android", R.string.mediaSize_iso_b7, 3460, 4920);
+ /** ISO B8 media size: 62mm x 88mm (2.44" x 3.46") */
+ public static final MediaSize ISO_B8 =
+ new MediaSize("ISO_B8", "android", R.string.mediaSize_iso_b8, 2440, 3460);
+ /** ISO B9 media size: 44mm x 62mm (1.73" x 2.44") */
+ public static final MediaSize ISO_B9 =
+ new MediaSize("ISO_B9", "android", R.string.mediaSize_iso_b9, 1730, 2440);
+ /** ISO B10 media size: 31mm x 44mm (1.22" x 1.73") */
+ public static final MediaSize ISO_B10 =
+ new MediaSize("ISO_B10", "android", R.string.mediaSize_iso_b10, 1220, 1730);
- /**
- *
- *ISO A2 media size: 420mm x 594mm (16.54" x 23.39")
- *
- * @see #createMediaSize(PackageManager, int)
- */
- public static final int ISO_A2 = 3;
-
- /**
- * ISO A3 media size: 297mm x 420mm (11.69" x 16.54")
- *
- * @see #createMediaSize(PackageManager, int)
- */
- public static final int ISO_A3 = 4;
-
- /**
- * ISO A4 media size: 210mm x 297mm (8.27" x 11.69")
- *
- * @see #createMediaSize(PackageManager, int)
- */
- public static final int ISO_A4 = 5;
-
- /**
- * ISO A5 media size: 148mm x 210mm (5.83" x 8.27")
- *
- * @see #createMediaSize(PackageManager, int)
- */
- public static final int ISO_A5 = 6;
-
- /**
- * ISO A6 media size: 105mm x 148mm (4.13" x 5.83")
- *
- * @see #createMediaSize(PackageManager, int)
- */
- public static final int ISO_A6 = 7;
-
- /**
- * ISO A7 media size: 74mm x 105mm (2.91" x 4.13")
- *
- * @see #createMediaSize(PackageManager, int)
- */
- public static final int ISO_A7 = 8;
-
- /**
- * ISO A8 media size: 52mm x 74mm (2.05" x 2.91")
- *
- * @see #createMediaSize(PackageManager, int)
- */
- public static final int ISO_A8 = 9;
-
- /**
- * ISO A9 media size: 37mm x 52mm (1.46" x 2.05")
- *
- * @see #createMediaSize(PackageManager, int)
- */
- public static final int ISO_A9 = 10;
-
- /**
- * ISO A10 media size: 26mm x 37mm (1.02" x 1.46")
- *
- * @see #createMediaSize(PackageManager, int)
- */
- public static final int ISO_A10 = 11;
-
-
- /**
- * ISO B0 media size: 1000mm x 1414mm (39.37" x 55.67")
- *
- * @see #createMediaSize(PackageManager, int)
- */
- public static final int ISO_B0 = 100;
-
- /**
- * ISO B1 media size: 707mm x 1000mm (27.83" x 39.37")
- *
- * @see #createMediaSize(PackageManager, int)
- */
- public static final int ISO_B1 = 101;
-
- /**
- * ISO B2 media size: 500mm x 707mm (19.69" x 27.83")
- *
- * @see #createMediaSize(PackageManager, int)
- */
- public static final int ISO_B2 = 102;
-
- /**
- * ISO B3 media size: 353mm x 500mm (13.90" x 19.69")
- *
- * @see #createMediaSize(PackageManager, int)
- */
- public static final int ISO_B3 = 103;
-
- /**
- * ISO B4 media size: 250mm x 353mm (9.84" x 13.90")
- *
- * @see #createMediaSize(PackageManager, int)
- */
- public static final int ISO_B4 = 104;
-
- /**
- * ISO B5 media size: 176mm x 250mm (6.93" x 9.84")
- *
- * @see #createMediaSize(PackageManager, int)
- */
- public static final int ISO_B5 = 105;
-
- /**
- * ISO B6 media size: 125mm x 176mm (4.92" x 6.93")
- *
- * @see #createMediaSize(PackageManager, int)
- */
- public static final int ISO_B6 = 106;
-
- /**
- * ISO B7 media size: 88mm x 125mm (3.46" x 4.92")
- *
- * @see #createMediaSize(PackageManager, int)
- */
- public static final int ISO_B7 = 107;
-
- /** ISO B8 media size: 62mm x 88mm (2.44" x 3.46")
- *
- * @see #createMediaSize(PackageManager, int)
- */
- public static final int ISO_B8 = 108;
-
- /**
- * ISO B9 media size: 44mm x 62mm (1.73" x 2.44")
- *
- * @see #createMediaSize(PackageManager, int)
- */
- public static final int ISO_B9 = 109;
-
- /**
- * ISO B10 media size: 31mm x 44mm (1.22" x 1.73")
- *
- * @see #createMediaSize(PackageManager, int)
- */
- public static final int ISO_B10 = 110;
-
-
- /**
- * ISO C0 media size: 917mm x 1297mm (36.10" x 51.06")
- *
- * @see #createMediaSize(PackageManager, int)
- */
- public static final int ISO_C0 = 200;
-
- /**
- * ISO C1 media size: 648mm x 917mm (25.51" x 36.10")
- *
- * @see #createMediaSize(PackageManager, int)
- */
-
- public static final int ISO_C1 = 201;
- /**
- * ISO C2 media size: 458mm x 648mm (18.03" x 25.51")
- *
- * @see #createMediaSize(PackageManager, int)
- */
- public static final int ISO_C2 = 202;
-
- /**
- * ISO C3 media size: 324mm x 458mm (12.76" x 18.03")
- *
- * @see #createMediaSize(PackageManager, int)
- */
- public static final int ISO_C3 = 203;
-
- /**
- * ISO C4 media size: 229mm x 324mm (9.02" x 12.76")
- *
- * @see #createMediaSize(PackageManager, int)
- */
- public static final int ISO_C4 = 204;
-
- /**
- * ISO C5 media size: 162mm x 229mm (6.38" x 9.02")
- *
- * @see #createMediaSize(PackageManager, int)
- */
- public static final int ISO_C5 = 205;
-
- /**
- * ISO C6 media size: 114mm x 162mm (4.49" x 6.38")
- *
- * @see #createMediaSize(PackageManager, int)
- */
- public static final int ISO_C6 = 206;
-
- /**
- * ISO C7 media size: 81mm x 114mm (3.19" x 4.49")
- *
- * @see #createMediaSize(PackageManager, int)
- */
- public static final int ISO_C7 = 207;
-
- /**
- * ISO C8 media size: 57mm x 81mm (2.24" x 3.19")
- *
- * @see #createMediaSize(PackageManager, int)
- */
- public static final int ISO_C8 = 208;
-
- /**
- * ISO C9 media size: 40mm x 57mm (1.57" x 2.24")
- *
- * @see #createMediaSize(PackageManager, int)
- */
- public static final int ISO_C9 = 209;
-
- /**
- * ISO C10 media size: 28mm x 40mm (1.10" x 1.57")
- *
- * @see #createMediaSize(PackageManager, int)
- */
- public static final int ISO_C10 = 210;
-
+ /** ISO C0 media size: 917mm x 1297mm (36.10" x 51.06") */
+ public static final MediaSize ISO_C0 =
+ new MediaSize("ISO_C0", "android", R.string.mediaSize_iso_c0, 36100, 51060);
+ /** ISO C1 media size: 648mm x 917mm (25.51" x 36.10") */
+ public static final MediaSize ISO_C1 =
+ new MediaSize("ISO_C1", "android", R.string.mediaSize_iso_c1, 25510, 36100);
+ /** ISO C2 media size: 458mm x 648mm (18.03" x 25.51") */
+ public static final MediaSize ISO_C2 =
+ new MediaSize("ISO_C2", "android", R.string.mediaSize_iso_c2, 18030, 25510);
+ /** ISO C3 media size: 324mm x 458mm (12.76" x 18.03") */
+ public static final MediaSize ISO_C3 =
+ new MediaSize("ISO_C3", "android", R.string.mediaSize_iso_c3, 12760, 18030);
+ /** ISO C4 media size: 229mm x 324mm (9.02" x 12.76") */
+ public static final MediaSize ISO_C4 =
+ new MediaSize("ISO_C4", "android", R.string.mediaSize_iso_c4, 9020, 12760);
+ /** ISO C5 media size: 162mm x 229mm (6.38" x 9.02") */
+ public static final MediaSize ISO_C5 =
+ new MediaSize("ISO_C5", "android", R.string.mediaSize_iso_c5, 6380, 9020);
+ /** ISO C6 media size: 114mm x 162mm (4.49" x 6.38") */
+ public static final MediaSize ISO_C6 =
+ new MediaSize("ISO_C6", "android", R.string.mediaSize_iso_c6, 4490, 6380);
+ /** ISO C7 media size: 81mm x 114mm (3.19" x 4.49") */
+ public static final MediaSize ISO_C7 =
+ new MediaSize("ISO_C7", "android", R.string.mediaSize_iso_c7, 3190, 4490);
+ /** ISO C8 media size: 57mm x 81mm (2.24" x 3.19") */
+ public static final MediaSize ISO_C8 =
+ new MediaSize("ISO_C8", "android", R.string.mediaSize_iso_c8, 2240, 3190);
+ /** ISO C9 media size: 40mm x 57mm (1.57" x 2.24") */
+ public static final MediaSize ISO_C9 =
+ new MediaSize("ISO_C9", "android", R.string.mediaSize_iso_c9, 1570, 2240);
+ /** ISO C10 media size: 28mm x 40mm (1.10" x 1.57") */
+ public static final MediaSize ISO_C10 =
+ new MediaSize("ISO_C10", "android", R.string.mediaSize_iso_c10, 1100, 1570);
// North America
- /**
- * North America Letter media size: 8.5" x 11"
- *
- * @see #createMediaSize(PackageManager, int)
- */
- public static final int NA_LETTER = 300;
-
- /**
- * North America Government-Letter media size: 8.0" x 10.5"
- *
- * @see #createMediaSize(PackageManager, int)
- */
- public static final int NA_GOVT_LETTER = 301;
-
- /**
- * North America Legal media size: 8.5" x 14"
- *
- * @see #createMediaSize(PackageManager, int)
- */
- public static final int NA_LEGAL = 302;
-
- /**
- * North America Junior Legal media size: 8.0" x 5.0"
- *
- * @see #createMediaSize(PackageManager, int)
- */
- public static final int NA_JUNIOR_LEGAL = 303;
-
- /**
- * North America Ledger media size: 17" x 11"
- *
- * @see #createMediaSize(PackageManager, int)
- */
- public static final int NA_LEDGER = 304;
-
- /**
- * North America Tabloid media size: 11" x 17"
- *
- * @see #createMediaSize(PackageManager, int)
- */
- public static final int NA_TBLOID = 305;
-
- /**
- * Creates a standard media size with a localized label.
- *
- * @param pm Package manager used to load the label.
- * @param mediaSize Media size constant.
- * @return A {@link MediaSize} instance with a localized label.
- */
- public static MediaSize createMediaSize(PackageManager pm, int mediaSize) {
- final Resources resources;
- try {
- resources = pm.getResourcesForApplication("android");
- } catch (NameNotFoundException nnfe) {
- return null;
- }
- switch (mediaSize) {
- case ISO_A0: {
- return new MediaSize("ISO_A0", resources
- .getString(R.string.mediaSize_iso_a0), 33110, 46810);
- }
- case ISO_A1: {
- return new MediaSize("ISO_A1", resources
- .getString(R.string.mediaSize_iso_a1), 23390, 33110);
- }
- case ISO_A2: {
- return new MediaSize("ISO_A2", resources
- .getString(R.string.mediaSize_iso_a2), 16540, 23390);
- }
- case ISO_A3: {
- return new MediaSize("ISO_A3", resources
- .getString(R.string.mediaSize_iso_a3), 11690, 16540);
- }
- case ISO_A4: {
- return new MediaSize("ISO_A4", resources
- .getString(R.string.mediaSize_iso_a4), 8270, 11690);
- }
- case ISO_A5: {
- return new MediaSize("ISO_A5", resources
- .getString(R.string.mediaSize_iso_a5), 5830, 8270);
- }
- case ISO_A6: {
- return new MediaSize("ISO_A6", resources
- .getString(R.string.mediaSize_iso_a6), 4130, 5830);
- }
- case ISO_A7: {
- return new MediaSize("ISO_A7", resources
- .getString(R.string.mediaSize_iso_a7), 2910, 4130);
- }
- case ISO_A8: {
- return new MediaSize("ISO_A8", resources
- .getString(R.string.mediaSize_iso_a8), 2050, 2910);
- }
- case ISO_A9: {
- return new MediaSize("ISO_A9", resources
- .getString(R.string.mediaSize_iso_a9), 1460, 2050);
- }
- case ISO_A10: {
- return new MediaSize("ISO_A10", resources
- .getString(R.string.mediaSize_iso_a10), 1020, 1460);
- }
- case ISO_B0: {
- return new MediaSize("ISO_B0", resources
- .getString(R.string.mediaSize_iso_b0), 39370, 55670);
- }
- case ISO_B1: {
- return new MediaSize("ISO_B1", resources
- .getString(R.string.mediaSize_iso_b1), 27830, 39370);
- }
- case ISO_B2: {
- return new MediaSize("ISO_B2", resources
- .getString(R.string.mediaSize_iso_b2), 19690, 27830);
- }
- case ISO_B3: {
- return new MediaSize("ISO_B3", resources
- .getString(R.string.mediaSize_iso_b3), 13900, 19690);
- }
- case ISO_B4: {
- return new MediaSize("ISO_B4", resources
- .getString(R.string.mediaSize_iso_b4), 9840, 13900);
- }
- case ISO_B5: {
- return new MediaSize("ISO_B5", resources
- .getString(R.string.mediaSize_iso_b5), 6930, 9840);
- }
- case ISO_B6: {
- return new MediaSize("ISO_B6", resources
- .getString(R.string.mediaSize_iso_b6), 4920, 6930);
- }
- case ISO_B7: {
- return new MediaSize("ISO_B7", resources
- .getString(R.string.mediaSize_iso_b7), 3460, 4920);
- }
- case ISO_B8: {
- return new MediaSize("ISO_B8", resources
- .getString(R.string.mediaSize_iso_b8), 2440, 3460);
- }
- case ISO_B9: {
- return new MediaSize("ISO_B9", resources
- .getString(R.string.mediaSize_iso_b9), 1730, 2440);
- }
- case ISO_B10: {
- return new MediaSize("ISO_B10", resources
- .getString(R.string.mediaSize_iso_b10), 1220, 1730);
- }
- case ISO_C0: {
- return new MediaSize("ISO_C0", resources
- .getString(R.string.mediaSize_iso_c0), 36100, 51060);
- }
- case ISO_C1: {
- return new MediaSize("ISO_C1", resources
- .getString(R.string.mediaSize_iso_c1), 25510, 36100);
- }
- case ISO_C2: {
- return new MediaSize("ISO_C2", resources
- .getString(R.string.mediaSize_iso_c2), 18030, 25510);
- }
- case ISO_C3: {
- return new MediaSize("ISO_C3", resources
- .getString(R.string.mediaSize_iso_c3), 12760, 18030);
- }
- case ISO_C4: {
- return new MediaSize("ISO_C4", resources
- .getString(R.string.mediaSize_iso_c4), 9020, 12760);
- }
- case ISO_C5: {
- return new MediaSize("ISO_C5", resources
- .getString(R.string.mediaSize_iso_c5), 6380, 9020);
- }
- case ISO_C6: {
- return new MediaSize("ISO_C6", resources
- .getString(R.string.mediaSize_iso_c6), 4490, 6380);
- }
- case ISO_C7: {
- return new MediaSize("ISO_C7", resources
- .getString(R.string.mediaSize_iso_c7), 3190, 4490);
- }
- case ISO_C8: {
- return new MediaSize("ISO_C8", resources
- .getString(R.string.mediaSize_iso_c8), 2240, 3190);
- }
- case ISO_C9: {
- return new MediaSize("ISO_C9", resources
- .getString(R.string.mediaSize_iso_c9), 1570, 2240);
- }
- case ISO_C10: {
- return new MediaSize("ISO_C10", resources
- .getString(R.string.mediaSize_iso_c10), 1100, 1570);
- }
- case NA_LETTER: {
- return new MediaSize("NA_LETTER", resources
- .getString(R.string.mediaSize_na_letter), 8500, 11000);
- }
- case NA_GOVT_LETTER: {
- return new MediaSize("NA_GOVT_LETTER", resources
- .getString(R.string.mediaSize_na_gvrnmt_letter), 8000, 10500);
- }
- case NA_LEGAL: {
- return new MediaSize("NA_LEGAL", resources
- .getString(R.string.mediaSize_na_legal), 8500, 14000);
- }
- case NA_JUNIOR_LEGAL: {
- return new MediaSize("NA_JUNIOR_LEGAL", resources
- .getString(R.string.mediaSize_na_junior_legal), 8000, 5000);
- }
- case NA_LEDGER: {
- return new MediaSize("NA_LEDGER", resources
- .getString(R.string.mediaSize_na_ledger), 17000, 11000);
- }
- case NA_TBLOID: {
- return new MediaSize("NA_TABLOID", resources
- .getString(R.string.mediaSize_na_tabloid), 11000, 17000);
- }
- default: {
- throw new IllegalArgumentException("Unknown media size.");
- }
- }
- }
+ /** North America Letter media size: 8.5" x 11" */
+ public static final MediaSize NA_LETTER =
+ new MediaSize("NA_LETTER", "android", R.string.mediaSize_na_letter, 8500, 11000);
+ /** North America Government-Letter media size: 8.0" x 10.5" */
+ public static final MediaSize NA_GOVT_LETTER =
+ new MediaSize("NA_GOVT_LETTER", "android",
+ R.string.mediaSize_na_gvrnmt_letter, 8000, 10500);
+ /** North America Legal media size: 8.5" x 14" */
+ public static final MediaSize NA_LEGAL =
+ new MediaSize("NA_LEGAL", "android", R.string.mediaSize_na_legal, 8500, 14000);
+ /** North America Junior Legal media size: 8.0" x 5.0" */
+ public static final MediaSize NA_JUNIOR_LEGAL =
+ new MediaSize("NA_JUNIOR_LEGAL", "android",
+ R.string.mediaSize_na_junior_legal, 8000, 5000);
+ /** North America Ledger media size: 17" x 11" */
+ public static final MediaSize NA_LEDGER =
+ new MediaSize("NA_LEDGER", "android", R.string.mediaSize_na_ledger, 17000, 11000);
+ /** North America Tabloid media size: 11" x 17" */
+ public static final MediaSize NA_TBLOID =
+ new MediaSize("NA_TABLOID", "android",
+ R.string.mediaSize_na_tabloid, 11000, 17000);
private final String mId;
- private final String mLabel;
+ /**@hide */
+ public final String mLabel;
+ /**@hide */
+ public final String mPackageName;
+ /**@hide */
+ public final int mLabelResId;
private final int mWidthMils;
private final int mHeightMils;
/**
+ * Creates a new instance. This is the preferred constructor since
+ * it enables the media size label to be shown in a localized fashion
+ * on a locale change.
+ *
+ * @param id The unique media size id.
+ * @param packageName The name of the creating package.
+ * @param labelResId The resource if of a human readable label.
+ * @param widthMils The width in mils (thousands of an inch).
+ * @param heightMils The height in mils (thousands of an inch).
+ *
+ * @throws IllegalArgumentException If the id is empty.
+ * @throws IllegalArgumentException If the label is empty.
+ * @throws IllegalArgumentException If the widthMils is less than or equal to zero.
+ * @throws IllegalArgumentException If the heightMils is less than or equal to zero.
+ *
+ * @hide
+ */
+ public MediaSize(String id, String packageName, int labelResId,
+ int widthMils, int heightMils) {
+ if (TextUtils.isEmpty(id)) {
+ throw new IllegalArgumentException("id cannot be empty.");
+ }
+ if (TextUtils.isEmpty(packageName)) {
+ throw new IllegalArgumentException("packageName cannot be empty.");
+ }
+ if (labelResId <= 0) {
+ throw new IllegalArgumentException("labelResId must be greater than zero.");
+ }
+ if (widthMils <= 0) {
+ throw new IllegalArgumentException("widthMils "
+ + "cannot be less than or equal to zero.");
+ }
+ if (heightMils <= 0) {
+ throw new IllegalArgumentException("heightMils "
+ + "cannot be less than or euqual to zero.");
+ }
+ mPackageName = packageName;
+ mId = id;
+ mLabelResId = labelResId;
+ mWidthMils = widthMils;
+ mHeightMils = heightMils;
+ mLabel = null;
+ }
+
+ /**
* Creates a new instance.
*
* @param id The unique media size id.
@@ -975,6 +474,19 @@
mLabel = label;
mWidthMils = widthMils;
mHeightMils = heightMils;
+ mLabelResId = 0;
+ mPackageName = null;
+ }
+
+ /** @hide */
+ public MediaSize(String id, String label, String packageName,
+ int widthMils, int heightMils, int labelResId) {
+ mPackageName = packageName;
+ mId = id;
+ mLabelResId = labelResId;
+ mWidthMils = widthMils;
+ mHeightMils = heightMils;
+ mLabel = label;
}
/**
@@ -989,9 +501,22 @@
/**
* Gets the human readable media size label.
*
+ * @param packageManager The package manager for loading the label.
* @return The human readable label.
*/
- public String getLabel() {
+ public String getLabel(PackageManager packageManager) {
+ if (!TextUtils.isEmpty(mPackageName) && mLabelResId > 0) {
+ try {
+ return packageManager.getResourcesForApplication(
+ mPackageName).getString(mLabelResId);
+ } catch (NotFoundException nfe) {
+ Log.w(LOG_TAG, "Could not load resouce" + mLabelResId
+ + " from package " + mPackageName);
+ } catch (NameNotFoundException nnfee) {
+ Log.w(LOG_TAG, "Could not load resouce" + mLabelResId
+ + " from package " + mPackageName);
+ }
+ }
return mLabel;
}
@@ -1013,17 +538,58 @@
return mHeightMils;
}
+ /**
+ * Gets whether this media size is in portrait which is the
+ * height is greater or equal to the width.
+ *
+ * @return True if the media size is in portrait, false if
+ * it is in landscape.
+ */
+ public boolean isPortrait() {
+ return mHeightMils >= mWidthMils;
+ }
+
+ /**
+ * Returns a new media size in a portrait orientation
+ * which is the height is the greater dimension.
+ *
+ * @return New instance in landscape orientation.
+ */
+ public MediaSize asPortrait() {
+ return new MediaSize(mId, mLabel, mPackageName,
+ Math.min(mWidthMils, mHeightMils),
+ Math.max(mWidthMils, mHeightMils),
+ mLabelResId);
+ }
+
+ /**
+ * Returns a new media size in a landscape orientation
+ * which is the height is the lesser dimension.
+ *
+ * @return New instance in landscape orientation.
+ */
+ public MediaSize asLandscape() {
+ return new MediaSize(mId, mLabel, mPackageName,
+ Math.max(mWidthMils, mHeightMils),
+ Math.min(mWidthMils, mHeightMils),
+ mLabelResId);
+ }
+
void writeToParcel(Parcel parcel) {
parcel.writeString(mId);
parcel.writeString(mLabel);
+ parcel.writeString(mPackageName);
parcel.writeInt(mWidthMils);
parcel.writeInt(mHeightMils);
+ parcel.writeInt(mLabelResId);
}
static MediaSize createFromParcel(Parcel parcel) {
return new MediaSize(
parcel.readString(),
parcel.readString(),
+ parcel.readString(),
+ parcel.readInt(),
parcel.readInt(),
parcel.readInt());
}
@@ -1032,8 +598,6 @@
public int hashCode() {
final int prime = 31;
int result = 1;
- result = prime * result + ((mId == null) ? 0 : mId.hashCode());
- result = prime * result + ((mLabel == null) ? 0 : mLabel.hashCode());
result = prime * result + mWidthMils;
result = prime * result + mHeightMils;
return result;
@@ -1051,12 +615,6 @@
return false;
}
MediaSize other = (MediaSize) obj;
- if (!TextUtils.equals(mId, other.mId)) {
- return false;
- }
- if (!TextUtils.equals(mLabel, other.mLabel)) {
- return false;
- }
if (mWidthMils != other.mWidthMils) {
return false;
}
@@ -1072,8 +630,10 @@
builder.append("MediaSize{");
builder.append("id: ").append(mId);
builder.append(", label: ").append(mLabel);
+ builder.append(", packageName: ").append(mPackageName);
builder.append(", heightMils: ").append(mHeightMils);
builder.append(", widthMils: ").append(mWidthMils);
+ builder.append(", labelResId: ").append(mLabelResId);
builder.append("}");
return builder.toString();
}
@@ -1083,12 +643,64 @@
* This class specifies a supported resolution in dpi (dots per inch).
*/
public static final class Resolution {
+ private static final String LOG_TAG = "Resolution";
+
private final String mId;
- private final String mLabel;
+ /**@hide */
+ public final String mLabel;
+ /**@hide */
+ public final String mPackageName;
+ /**@hide */
+ public final int mLabelResId;
private final int mHorizontalDpi;
private final int mVerticalDpi;
/**
+ * Creates a new instance. This is the preferred constructor since
+ * it enables the resolution label to be shown in a localized fashion
+ * on a locale change.
+ *
+ * @param id The unique resolution id.
+ * @param packageName The name of the creating package.
+ * @param labelResId The resource id of a human readable label.
+ * @param horizontalDpi The horizontal resolution in dpi.
+ * @param verticalDpi The vertical resolution in dpi.
+ *
+ * @throws IllegalArgumentException If the id is empty.
+ * @throws IllegalArgumentException If the label is empty.
+ * @throws IllegalArgumentException If the horizontalDpi is less than or equal to zero.
+ * @throws IllegalArgumentException If the verticalDpi is less than or equal to zero.
+ *
+ * @hide
+ */
+ public Resolution(String id, String packageName, int labelResId,
+ int horizontalDpi, int verticalDpi) {
+ if (TextUtils.isEmpty(id)) {
+ throw new IllegalArgumentException("id cannot be empty.");
+ }
+ if (TextUtils.isEmpty(packageName)) {
+ throw new IllegalArgumentException("packageName cannot be empty.");
+ }
+ if (labelResId <= 0) {
+ throw new IllegalArgumentException("labelResId must be greater than zero.");
+ }
+ if (horizontalDpi <= 0) {
+ throw new IllegalArgumentException("horizontalDpi "
+ + "cannot be less than or equal to zero.");
+ }
+ if (verticalDpi <= 0) {
+ throw new IllegalArgumentException("verticalDpi"
+ + " cannot be less than or equal to zero.");
+ }
+ mId = id;
+ mPackageName = packageName;
+ mLabelResId = labelResId;
+ mHorizontalDpi = horizontalDpi;
+ mVerticalDpi = verticalDpi;
+ mLabel = null;
+ }
+
+ /**
* Creates a new instance.
*
* @param id The unique resolution id.
@@ -1120,6 +732,19 @@
mLabel = label;
mHorizontalDpi = horizontalDpi;
mVerticalDpi = verticalDpi;
+ mPackageName = null;
+ mLabelResId = 0;
+ }
+
+ /** @hide */
+ public Resolution(String id, String label, String packageName,
+ int horizontalDpi, int verticalDpi, int labelResId) {
+ mId = id;
+ mPackageName = packageName;
+ mLabelResId = labelResId;
+ mHorizontalDpi = horizontalDpi;
+ mVerticalDpi = verticalDpi;
+ mLabel = label;
}
/**
@@ -1134,14 +759,27 @@
/**
* Gets the resolution human readable label.
*
+ * @param packageManager The package manager for loading the label.
* @return The human readable label.
*/
- public String getLabel() {
+ public String getLabel(PackageManager packageManager) {
+ if (!TextUtils.isEmpty(mPackageName) && mLabelResId > 0) {
+ try {
+ return packageManager.getResourcesForApplication(
+ mPackageName).getString(mLabelResId);
+ } catch (NotFoundException nfe) {
+ Log.w(LOG_TAG, "Could not load resouce" + mLabelResId
+ + " from package " + mPackageName);
+ } catch (NameNotFoundException nnfee) {
+ Log.w(LOG_TAG, "Could not load resouce" + mLabelResId
+ + " from package " + mPackageName);
+ }
+ }
return mLabel;
}
/**
- * Gets the horizontal resolution in dpi.
+ * Gets the vertical resolution in dpi.
*
* @return The horizontal resolution.
*/
@@ -1161,14 +799,18 @@
void writeToParcel(Parcel parcel) {
parcel.writeString(mId);
parcel.writeString(mLabel);
+ parcel.writeString(mPackageName);
parcel.writeInt(mHorizontalDpi);
parcel.writeInt(mVerticalDpi);
+ parcel.writeInt(mLabelResId);
}
static Resolution createFromParcel(Parcel parcel) {
return new Resolution(
parcel.readString(),
parcel.readString(),
+ parcel.readString(),
+ parcel.readInt(),
parcel.readInt(),
parcel.readInt());
}
@@ -1177,8 +819,6 @@
public int hashCode() {
final int prime = 31;
int result = 1;
- result = prime * result + ((mId == null) ? 0 : mId.hashCode());
- result = prime * result + ((mLabel == null) ? 0 : mLabel.hashCode());
result = prime * result + mHorizontalDpi;
result = prime * result + mVerticalDpi;
return result;
@@ -1196,12 +836,6 @@
return false;
}
Resolution other = (Resolution) obj;
- if (!TextUtils.equals(mId, other.mId)) {
- return false;
- }
- if (!TextUtils.equals(mLabel, other.mLabel)) {
- return false;
- }
if (mHorizontalDpi != other.mHorizontalDpi) {
return false;
}
@@ -1217,8 +851,10 @@
builder.append("Resolution{");
builder.append("id: ").append(mId);
builder.append(", label: ").append(mLabel);
+ builder.append(", packageName: ").append(mPackageName);
builder.append(", horizontalDpi: ").append(mHorizontalDpi);
builder.append(", verticalDpi: ").append(mVerticalDpi);
+ builder.append(", labelResId: ").append(mLabelResId);
builder.append("}");
return builder.toString();
}
@@ -1358,120 +994,6 @@
}
}
- /**
- * Represents a printer tray.
- */
- public static final class Tray {
- private final String mId;
- private final String mLabel;
-
- /**
- * Creates a new instance.
- *
- * @param id The unique tray id.
- * @param label The <strong>internationalized</strong> human readable label.
- *
- * @throws IllegalArgumentException If the id is empty.
- * @throws IllegalArgumentException If the label is empty.
- */
- public Tray(String id, String label) {
- if (TextUtils.isEmpty(id)) {
- throw new IllegalArgumentException("id cannot be empty.");
- }
- if (TextUtils.isEmpty(label)) {
- throw new IllegalArgumentException("label cannot be empty.");
- }
- mId = id;
- mLabel = label;
- }
-
- /**
- * Gets the unique tray id.
- *
- * @return The unique tray id.
- */
- public String getId() {
- return mId;
- }
-
- /**
- * Gets the tray human readable label.
- *
- * @return The human readable label.
- */
- public String getLabel() {
- return mLabel;
- }
-
- void writeToParcel(Parcel parcel) {
- parcel.writeString(mId);
- parcel.writeString(mLabel);
- }
-
- static Tray createFromParcel(Parcel parcel) {
- return new Tray(
- parcel.readString(),
- parcel.readString());
- }
-
- @Override
- public int hashCode() {
- final int prime = 31;
- int result = 1;
- result = prime * result + ((mId == null) ? 0 : mId.hashCode());
- result = prime * result + ((mLabel == null) ? 0 : mLabel.hashCode());
- return result;
- }
-
- @Override
- public boolean equals(Object obj) {
- if (this == obj) {
- return true;
- }
- if (obj == null) {
- return false;
- }
- if (getClass() != obj.getClass()) {
- return false;
- }
- Tray other = (Tray) obj;
- if (!TextUtils.equals(mId, other.mId)) {
- return false;
- }
- if (!TextUtils.equals(mLabel, other.mLabel)) {
- return false;
- }
- return true;
- }
-
- @Override
- public String toString() {
- StringBuilder builder = new StringBuilder();
- builder.append("Tray{");
- builder.append("id: ").append(mId);
- builder.append("id: ").append(mId);
- builder.append(", label: ").append(mLabel);
- builder.append("}");
- return builder.toString();
- }
- }
-
- static String duplexModeToString(int duplexMode) {
- switch (duplexMode) {
- case DUPLEX_MODE_NONE: {
- return "DUPLEX_MODE_NONE";
- }
- case DUPLEX_MODE_LONG_EDGE: {
- return "DUPLEX_MODE_LONG_EDGE";
- }
- case DUPLEX_MODE_SHORT_EDGE: {
- return "DUPLEX_MODE_SHORT_EDGE";
- }
- default:
- return "DUPLEX_MODE_UNKNOWN";
- }
- }
-
static String colorModeToString(int colorMode) {
switch (colorMode) {
case COLOR_MODE_MONOCHROME: {
@@ -1485,59 +1007,12 @@
}
}
- static String orientationToString(int orientation) {
- switch (orientation) {
- case ORIENTATION_PORTRAIT: {
- return "ORIENTATION_PORTRAIT";
- }
- case ORIENTATION_LANDSCAPE: {
- return "ORIENTATION_LANDSCAPE";
- }
- default:
- return "ORIENTATION_UNKNOWN";
- }
- }
-
- static String fittingModeToString(int fittingMode) {
- switch (fittingMode) {
- case FITTING_MODE_NONE: {
- return "FITTING_MODE_NONE";
- }
- case FITTING_MODE_SCALE_TO_FIT: {
- return "FITTING_MODE_SCALE_TO_FIT";
- }
- case FITTING_MODE_SCALE_TO_FILL: {
- return "FITTING_MODE_SCALE_TO_FILL";
- }
- default:
- return "FITTING_MODE_UNKNOWN";
- }
- }
-
- static void enforceValidDuplexMode(int duplexMode) {
- if ((duplexMode & VALID_DUPLEX_MODES) == 0 && Integer.bitCount(duplexMode) == 1) {
- throw new IllegalArgumentException("invalid duplex mode: " + duplexMode);
- }
- }
-
static void enforceValidColorMode(int colorMode) {
if ((colorMode & VALID_COLOR_MODES) == 0 && Integer.bitCount(colorMode) == 1) {
throw new IllegalArgumentException("invalid color mode: " + colorMode);
}
}
- static void enforceValidFittingMode(int fittingMode) {
- if ((fittingMode & VALID_FITTING_MODES) == 0 && Integer.bitCount(fittingMode) == 1) {
- throw new IllegalArgumentException("invalid fitting mode: " + fittingMode);
- }
- }
-
- static void enforceValidOrientation(int orientation) {
- if ((orientation & VALID_ORIENTATIONS) == 0 && Integer.bitCount(orientation) == 1) {
- throw new IllegalArgumentException("invalid orientation: " + orientation);
- }
- }
-
/**
* Builder for creating {@link PrintAttributes}.
*/
@@ -1578,46 +1053,6 @@
}
/**
- * Sets the input tray.
- *
- * @param inputTray The tray.
- * @return This builder.
- */
- public Builder setInputTray(Tray inputTray) {
- mAttributes.setInputTray(inputTray);
- return this;
- }
-
- /**
- * Sets the output tray.
- *
- * @param outputTray The tray.
- * @return This builder.
- */
- public Builder setOutputTray(Tray outputTray) {
- mAttributes.setOutputTray(outputTray);
- return this;
- }
-
- /**
- * Sets the duplex mode.
- *
- * @param duplexMode A valid duplex mode or zero.
- * @return This builder.
- *
- * @see PrintAttributes#DUPLEX_MODE_NONE
- * @see PrintAttributes#DUPLEX_MODE_SHORT_EDGE
- * @see PrintAttributes#DUPLEX_MODE_LONG_EDGE
- */
- public Builder setDuplexMode(int duplexMode) {
- if (Integer.bitCount(duplexMode) > 1) {
- throw new IllegalArgumentException("can specify at most one duplexMode bit.");
- }
- mAttributes.setDuplexMode(duplexMode);
- return this;
- }
-
- /**
* Sets the color mode.
*
* @param colorMode A valid color mode or zero.
@@ -1635,40 +1070,6 @@
}
/**
- * Sets the fitting mode.
- *
- * @param fittingMode A valid fitting mode or zero.
- * @return This builder.
- *
- * @see PrintAttributes#FITTING_MODE_NONE
- * @see PrintAttributes#FITTING_MODE_FIT_TO_PAGE
- */
- public Builder setFittingMode(int fittingMode) {
- if (Integer.bitCount(fittingMode) > 1) {
- throw new IllegalArgumentException("can specify at most one fittingMode bit.");
- }
- mAttributes.setFittingMode(fittingMode);
- return this;
- }
-
- /**
- * Sets the orientation.
- *
- * @param orientation A valid orientation or zero.
- * @return This builder.
- *
- * @see PrintAttributes#ORIENTATION_PORTRAIT
- * @see PrintAttributes#ORIENTATION_LANDSCAPE
- */
- public Builder setOrientation(int orientation) {
- if (Integer.bitCount(orientation) > 1) {
- throw new IllegalArgumentException("can specify at most one orientation bit.");
- }
- mAttributes.setOrientation(orientation);
- return this;
- }
-
- /**
* Creates a new {@link PrintAttributes} instance.
*
* @return The new instance.
diff --git a/core/java/android/print/PrintDocumentAdapter.java b/core/java/android/print/PrintDocumentAdapter.java
index 33b4aad..c81ca95 100644
--- a/core/java/android/print/PrintDocumentAdapter.java
+++ b/core/java/android/print/PrintDocumentAdapter.java
@@ -55,7 +55,7 @@
* The APIs defined in this class are designed to enable doing part or all
* of the work on an arbitrary thread. For example, if the printed content
* does not depend on the UI state, i.e. on what is shown on the screen, then
- * you can off load the entire work on a dedicated thread, thus making your
+ * you can offload the entire work on a dedicated thread, thus making your
* application interactive while the print work is being performed.
* </p>
* <p>
@@ -99,28 +99,7 @@
* the last argument <code>true</code> or <code>false</code> depending on
* whether the layout changed the content or not, respectively; and {@link
* LayoutResultCallback#onLayoutFailed(CharSequence)}, if an error occurred.
- * </p>
- * <p>
- * When doing a layout you may satisfy some of the constraints in the print
- * attributes such as applying the appropriate fitting, emitting content in the
- * requested orientation, using the specified margins, generating content with
- * the desired color mode, producing output with the given media size. Ideally,
- * you will satisfy all of these constraints. It is important that if you
- * satisfy a given constraint, you update the {@link PrintDocumentInfo} that
- * is returned in the given {@link LayoutResultCallback}. This way the printer
- * will have more accurate information about the content, thus producing a
- * better output. For example, assume that your application is printing
- * an image and the print attributes request landscape and fitting mode scale
- * to fill. The result of this operation should be the entire media is filled
- * and the content is rotated ninety degrees. In this case it is beneficial
- * you do the rotation and select a higher resolution image to utilize
- * the wider media (the height is now the width), rather to use a lower
- * resolution image that is later stretched by the printer. If you applied
- * the rotation you have to update the returned print document info to
- * reflect that the content is already in landscape by calling
- * {@link PrintDocumentInfo.Builder#setOrientation(int)} with {@link
- * PrintAttributes#ORIENTATION_LANDSCAPE}. In this case the printer does not
- * have to rotate the content.
+ * Note that you must call one of the methods of the given callback.
* </p>
* <p>
* <strong>Note:</strong> If the content is large and a layout will be
@@ -147,13 +126,14 @@
/**
* Called when specific pages of the content should be written in the
- * from of a PDF file to the given file descriptor. This method is invoked
+ * form of a PDF file to the given file descriptor. This method is invoked
* on the main thread.
*<p>
* After you are done writing, you should close the file descriptor and
- * invoke {@link WriteResultCallback #onWriteFinished(List)}, if writing
+ * invoke {@link WriteResultCallback #onWriteFinished(PageRange[]), if writing
* completed successfully; or {@link WriteResultCallback#onWriteFailed(
- * CharSequence)}, if an error occurred.
+ * CharSequence)}, if an error occurred. Note that you must call one of
+ * the methods of the given callback.
* </p>
* <p>
* <strong>Note:</strong> If the printed content is large, it is a good
diff --git a/core/java/android/print/PrintDocumentInfo.java b/core/java/android/print/PrintDocumentInfo.java
index f2b91ae..7a96e69 100644
--- a/core/java/android/print/PrintDocumentInfo.java
+++ b/core/java/android/print/PrintDocumentInfo.java
@@ -18,8 +18,6 @@
import android.os.Parcel;
import android.os.Parcelable;
-import android.print.PrintAttributes.Margins;
-import android.print.PrintAttributes.MediaSize;
import android.text.TextUtils;
/**
@@ -28,11 +26,6 @@
public final class PrintDocumentInfo implements Parcelable {
/**
- * Constant for an unknown media size.
- */
- public static final MediaSize MEDIA_SIZE_UNKNOWN = new MediaSize("Unknown", "Unknown", 1, 1);
-
- /**
* Constant for unknown page count..
*/
public static final int PAGE_COUNT_UNKNOWN = -1;
@@ -55,11 +48,6 @@
private String mName;
private int mPageCount;
private int mContentType;
- private int mOrientation;
- private int mFittingMode;
- private int mColorMode;
- private Margins mMargins;
- private MediaSize mMediaSize;
private long mDataSize;
/**
@@ -78,11 +66,6 @@
mName = prototype.mName;
mPageCount = prototype.mPageCount;
mContentType = prototype.mContentType;
- mOrientation = prototype.mOrientation;
- mFittingMode = prototype.mFittingMode;
- mColorMode = prototype.mColorMode;
- mMargins = prototype.mMargins;
- mMediaSize = prototype.mMediaSize;
mDataSize = prototype.mDataSize;
}
@@ -95,11 +78,6 @@
mName = parcel.readString();
mPageCount = parcel.readInt();
mContentType = parcel.readInt();
- mOrientation = parcel.readInt();
- mFittingMode = parcel.readInt();
- mColorMode = parcel.readInt();
- mMargins = Margins.createFromParcel(parcel);
- mMediaSize = MediaSize.createFromParcel(parcel);
mDataSize = parcel.readLong();
}
@@ -137,61 +115,6 @@
}
/**
- * Gets the document orientation.
- *
- * @return The orientation.
- *
- * @see PrintAttributes#ORIENTATION_PORTRAIT PrintAttributes.ORIENTATION_PORTRAIT
- * @see PrintAttributes#ORIENTATION_LANDSCAPE PrintAttributes.ORIENTATION_LANDSCAPE
- */
- public int getOrientation() {
- return mOrientation;
- }
-
- /**
- * Gets the document fitting mode.
- *
- * @return The fitting mode.
- *
- * @see PrintAttributes#FITTING_MODE_NONE PrintAttributes.FITTING_MODE_NONE
- * @see PrintAttributes#FITTING_MODE_SCALE_TO_FILL PrintAttributes.FITTING_MODE_SCALE_TO_FILL
- * @see PrintAttributes#FITTING_MODE_SCALE_TO_FIT PrintAttributes.FITTING_MODE_SCALE_TO_FIT
- */
- public int getFittingMode() {
- return mFittingMode;
- }
-
- /**
- * Gets document color mode.
- *
- * @return The color mode.
- *
- * @see PrintAttributes#COLOR_MODE_COLOR PrintAttributes.COLOR_MODE_COLOR
- * @see PrintAttributes#COLOR_MODE_MONOCHROME PrintAttributes.COLOR_MODE_MONOCHROME
- */
- public int getColorMode() {
- return mColorMode;
- }
-
- /**
- * Gets the document margins.
- *
- * @return The margins.
- */
- public Margins getMargins() {
- return mMargins;
- }
-
- /**
- * Gets the media size.
- *
- * @return The media size.
- */
- public MediaSize getMediaSize() {
- return mMediaSize;
- }
-
- /**
* Gets the document data size in bytes.
*
* @return The data size.
@@ -221,11 +144,6 @@
parcel.writeString(mName);
parcel.writeInt(mPageCount);
parcel.writeInt(mContentType);
- parcel.writeInt(mOrientation);
- parcel.writeInt(mFittingMode);
- parcel.writeInt(mColorMode);
- mMargins.writeToParcel(parcel);
- mMediaSize.writeToParcel(parcel);
parcel.writeLong(mDataSize);
}
@@ -236,11 +154,6 @@
result = prime * result + ((mName != null) ? mName.hashCode() : 0);
result = prime * result + mContentType;
result = prime * result + mPageCount;
- result = prime * result + mOrientation;
- result = prime * result + mFittingMode;
- result = prime * result + mColorMode;
- result = prime * result + (mMargins != null ? mMargins.hashCode() : 0);
- result = prime * result + (mMediaSize != null ? mMediaSize.hashCode() : 0);
result = prime * result + (int) mDataSize;
result = prime * result + (int) mDataSize >> 32;
return result;
@@ -267,29 +180,6 @@
if (mPageCount != other.mPageCount) {
return false;
}
- if (mOrientation != other.mOrientation) {
- return false;
- }
- if (mFittingMode != other.mFittingMode) {
- return false;
- }
- if (mColorMode != other.mColorMode) {
- return false;
- }
- if (mMargins == null) {
- if (other.mMargins != null) {
- return false;
- }
- } else if (!mMargins.equals(other.mMargins)) {
- return false;
- }
- if (mMediaSize == null) {
- if (other.mMediaSize != null) {
- return false;
- }
- } else if (!mMediaSize.equals(other.mMediaSize)) {
- return false;
- }
if (mDataSize != other.mDataSize) {
return false;
}
@@ -303,11 +193,6 @@
builder.append("name=").append(mName);
builder.append(", pageCount=").append(mPageCount);
builder.append(", contentType=").append(contentTyepToString(mContentType));
- builder.append(", orientation=").append(PrintAttributes.orientationToString(mOrientation));
- builder.append(", fittingMode=").append(PrintAttributes.fittingModeToString(mFittingMode));
- builder.append(", colorMode=").append(PrintAttributes.colorModeToString(mColorMode));
- builder.append(", margins=").append(mMargins);
- builder.append(", mediaSize=").append(mMediaSize);
builder.append(", size=").append(mDataSize);
builder.append("}");
return builder.toString();
@@ -336,36 +221,6 @@
/**
* Constructor.
* <p>
- * The values of the relevant properties are initialized from the
- * provided print attributes. For example, the orientation is set
- * to be the same as the orientation returned by calling {@link
- * PrintAttributes#getOrientation() PrintAttributes.getOrientation()}.
- * </p>
- *
- * @param name The document name. Cannot be empty.
- * @param attributes Print attributes. Cannot be null.
- *
- * @throws IllegalArgumentException If the name is empty.
- */
- public Builder(String name, PrintAttributes attributes) {
- if (TextUtils.isEmpty(name)) {
- throw new IllegalArgumentException("name cannot be empty");
- }
- if (attributes == null) {
- throw new IllegalArgumentException("attributes cannot be null");
- }
- mPrototype = new PrintDocumentInfo();
- mPrototype.mName = name;
- mPrototype.mOrientation = attributes.getOrientation();
- mPrototype.mFittingMode = attributes.getFittingMode();
- mPrototype.mColorMode = attributes.getColorMode();
- mPrototype.mMargins = attributes.getMargins();
- mPrototype.mMediaSize = attributes.getMediaSize();
- }
-
- /**
- * Constructor.
- * <p>
* The values of the relevant properties are initialized with default
* values. Please refer to the documentation of the individual setters
* for information about the default values.
@@ -379,11 +234,6 @@
}
mPrototype = new PrintDocumentInfo();
mPrototype.mName = name;
- mPrototype.mOrientation = PrintAttributes.ORIENTATION_PORTRAIT;
- mPrototype.mFittingMode = PrintAttributes.FITTING_MODE_NONE;
- mPrototype.mColorMode = PrintAttributes.COLOR_MODE_COLOR;
- mPrototype.mMargins = Margins.NO_MARGINS;
- mPrototype.mMediaSize = MEDIA_SIZE_UNKNOWN;
}
/**
@@ -423,95 +273,6 @@
}
/**
- * Sets the orientation.
- * <p>
- * <strong>Default: </strong> {@link PrintAttributes#ORIENTATION_PORTRAIT
- * PrintAttributes.ORIENTATION_PORTRAIT}
- * </p>
- *
- * @param orientation The orientation.
- *
- * @see PrintAttributes#ORIENTATION_PORTRAIT PrintAttributes.ORIENTATION_PORTRAIT
- * @see PrintAttributes#ORIENTATION_LANDSCAPE PrintAttributes.ORIENTATION_LANDSCAPE
- */
- public Builder setOrientation(int orientation) {
- PrintAttributes.enforceValidOrientation(orientation);
- mPrototype.mOrientation = orientation;
- return this;
- }
-
- /**
- * Sets the content fitting mode.
- * <p>
- * <strong>Default: </strong> {@link PrintAttributes#FITTING_MODE_NONE
- * PrintAttributes.FITTING_MODE_NONE}
- * </p>
- *
- * @param fittingMode The fitting mode.
- *
- * @see PrintAttributes#FITTING_MODE_NONE PrintAttributes.FITTING_MODE_NONE
- * @see PrintAttributes#FITTING_MODE_SCALE_TO_FILL PrintAttributes.FITTING_MODE_SCALE_TO_FILL
- * @see PrintAttributes#FITTING_MODE_SCALE_TO_FIT PrintAttributes.FITTING_MODE_SCALE_TO_FIT
- */
- public Builder setFittingMode(int fittingMode) {
- PrintAttributes.enforceValidFittingMode(fittingMode);
- mPrototype.mFittingMode = fittingMode;
- return this;
- }
-
- /**
- * Sets the content color mode.
- * <p>
- * <strong>Default: </strong> {@link PrintAttributes#COLOR_MODE_COLOR
- * PrintAttributes.COLOR_MODE_COLOR}
- * </p>
- *
- * @param colorMode The color mode.
- *
- * @see PrintAttributes#COLOR_MODE_COLOR PrintAttributes.COLOR_MODE_COLOR
- * @see PrintAttributes#COLOR_MODE_MONOCHROME PrintAttributes.COLOR_MODE_MONOCHROME
- */
- public Builder setColorMode(int colorMode) {
- PrintAttributes.enforceValidColorMode(colorMode);
- mPrototype.mColorMode = colorMode;
- return this;
- }
-
- /**
- * Sets the document margins.
- * <p>
- * <strong>Default: </strong> {@link PrintAttributes.Margins#NO_MARGINS Margins.NO_MARGINS}
- * </p>
- *
- * @param margins The margins. Cannot be null.
- */
- public Builder setMargins(Margins margins) {
- if (margins == null) {
- throw new IllegalArgumentException("margins cannot be null");
- }
- mPrototype.mMargins = margins;
- return this;
- }
-
- /**
- * Sets the document media size.
- * <p>
- * <strong>Default: </strong>#MEDIA_SIZE_UNKNOWN
- * </p>
- *
- * @param mediaSize The media size. Cannot be null.
- *
- * @see #MEDIA_SIZE_UNKNOWN
- */
- public Builder setMediaSize(MediaSize mediaSize) {
- if (mediaSize == null) {
- throw new IllegalArgumentException("media size cannot be null");
- }
- mPrototype.mMediaSize = mediaSize;
- return this;
- }
-
- /**
* Creates a new {@link PrintDocumentInfo} instance.
*
* @return The new instance.
diff --git a/core/java/android/print/PrintFileDocumentAdapter.java b/core/java/android/print/PrintFileDocumentAdapter.java
index b9053961..c3a23a5 100644
--- a/core/java/android/print/PrintFileDocumentAdapter.java
+++ b/core/java/android/print/PrintFileDocumentAdapter.java
@@ -36,10 +36,11 @@
import java.io.OutputStream;
/**
- * Adapter for printing files. This class could be useful if you
+ * Adapter for printing PDF files. This class could be useful if you
* want to print a file and intercept when the system is ready
- * spooling the data, so you can deleted the file if it is a
- * temporary one.
+ * spooling the data, so you can delete the file if it is a
+ * temporary one. To achieve this one must override {@link #onFinish()}
+ * and delete the file yourself.
*/
public class PrintFileDocumentAdapter extends PrintDocumentAdapter {
@@ -57,7 +58,7 @@
* Constructor.
*
* @param context Context for accessing resources.
- * @param file The file to print.
+ * @param file The PDF file to print.
* @param documentInfo The information about the printed file.
*/
public PrintFileDocumentAdapter(Context context, File file,
diff --git a/core/java/android/print/PrinterCapabilitiesInfo.java b/core/java/android/print/PrinterCapabilitiesInfo.java
index 941e6e1..ea44c87 100644
--- a/core/java/android/print/PrinterCapabilitiesInfo.java
+++ b/core/java/android/print/PrinterCapabilitiesInfo.java
@@ -21,7 +21,6 @@
import android.print.PrintAttributes.Margins;
import android.print.PrintAttributes.MediaSize;
import android.print.PrintAttributes.Resolution;
-import android.print.PrintAttributes.Tray;
import java.util.ArrayList;
import java.util.Arrays;
@@ -40,26 +39,16 @@
private static final int PROPERTY_MEDIA_SIZE = 0;
private static final int PROPERTY_RESOLUTION = 1;
- private static final int PROPERTY_INPUT_TRAY = 2;
- private static final int PROPERTY_OUTPUT_TRAY = 3;
- private static final int PROPERTY_DUPLEX_MODE = 4;
- private static final int PROPERTY_COLOR_MODE = 5;
- private static final int PROPERTY_FITTING_MODE = 6;
- private static final int PROPERTY_ORIENTATION = 7;
- private static final int PROPERTY_COUNT = 8;
+ private static final int PROPERTY_COLOR_MODE = 2;
+ private static final int PROPERTY_COUNT = 3;
private static final Margins DEFAULT_MARGINS = new Margins(0, 0, 0, 0);
private Margins mMinMargins = DEFAULT_MARGINS;
private List<MediaSize> mMediaSizes;
private List<Resolution> mResolutions;
- private List<Tray> mInputTrays;
- private List<Tray> mOutputTrays;
- private int mDuplexModes;
private int mColorModes;
- private int mFittingModes;
- private int mOrientations;
private final int[] mDefaults = new int[PROPERTY_COUNT];
private Margins mDefaultMargins = DEFAULT_MARGINS;
@@ -106,32 +95,7 @@
mResolutions = null;
}
- if (other.mInputTrays != null) {
- if (mInputTrays != null) {
- mInputTrays.clear();
- mInputTrays.addAll(other.mInputTrays);
- } else {
- mInputTrays = new ArrayList<Tray>(other.mInputTrays);
- }
- } else {
- mInputTrays = null;
- }
-
- if (other.mOutputTrays != null) {
- if (mOutputTrays != null) {
- mOutputTrays.clear();
- mOutputTrays.addAll(other.mOutputTrays);
- } else {
- mOutputTrays = new ArrayList<Tray>(other.mOutputTrays);
- }
- } else {
- mOutputTrays = null;
- }
-
- mDuplexModes = other.mDuplexModes;
mColorModes = other.mColorModes;
- mFittingModes = other.mFittingModes;
- mOrientations = other.mOrientations;
final int defaultCount = other.mDefaults.length;
for (int i = 0; i < defaultCount; i++) {
@@ -169,37 +133,6 @@
}
/**
- * Gets the available input trays.
- *
- * @return The input trays.
- */
- public List<Tray> getInputTrays() {
- return mInputTrays;
- }
-
- /**
- * Gets the available output trays.
- *
- * @return The output trays.
- */
- public List<Tray> getOutputTrays() {
- return mOutputTrays;
- }
-
- /**
- * Gets the supported duplex modes.
- *
- * @return The duplex modes.
- *
- * @see PrintAttributes#DUPLEX_MODE_NONE
- * @see PrintAttributes#DUPLEX_MODE_LONG_EDGE
- * @see PrintAttributes#DUPLEX_MODE_SHORT_EDGE
- */
- public int getDuplexModes() {
- return mDuplexModes;
- }
-
- /**
* Gets the supported color modes.
*
* @return The color modes.
@@ -212,30 +145,6 @@
}
/**
- * Gets the supported fitting modes.
- *
- * @return The fitting modes.
- *
- * @see PrintAttributes#FITTING_MODE_NONE
- * @see PrintAttributes#FITTING_MODE_FIT_TO_PAGE
- */
- public int getFittingModes() {
- return mFittingModes;
- }
-
- /**
- * Gets the supported orientations.
- *
- * @return The orientations.
- *
- * @see PrintAttributes#ORIENTATION_PORTRAIT
- * @see PrintAttributes#ORIENTATION_LANDSCAPE
- */
- public int getOrientations() {
- return mOrientations;
- }
-
- /**
* Gets the default print attributes.
*
* @param outAttributes The attributes to populated.
@@ -255,48 +164,18 @@
outAttributes.setResolution(mResolutions.get(resolutionIndex));
}
- final int inputTrayIndex = mDefaults[PROPERTY_INPUT_TRAY];
- if (inputTrayIndex >= 0) {
- outAttributes.setInputTray(mInputTrays.get(inputTrayIndex));
- }
-
- final int outputTrayIndex = mDefaults[PROPERTY_OUTPUT_TRAY];
- if (outputTrayIndex >= 0) {
- outAttributes.setOutputTray(mOutputTrays.get(outputTrayIndex));
- }
-
- final int duplexMode = mDefaults[PROPERTY_DUPLEX_MODE];
- if (duplexMode > 0) {
- outAttributes.setDuplexMode(duplexMode);
- }
-
final int colorMode = mDefaults[PROPERTY_COLOR_MODE];
if (colorMode > 0) {
outAttributes.setColorMode(colorMode);
}
-
- final int fittingMode = mDefaults[PROPERTY_FITTING_MODE];
- if (fittingMode > 0) {
- outAttributes.setFittingMode(fittingMode);
- }
-
- final int orientation = mDefaults[PROPERTY_ORIENTATION];
- if (orientation > 0) {
- outAttributes.setOrientation(orientation);
- }
}
private PrinterCapabilitiesInfo(Parcel parcel) {
mMinMargins = readMargins(parcel);
readMediaSizes(parcel);
readResolutions(parcel);
- mInputTrays = readInputTrays(parcel);
- mOutputTrays = readOutputTrays(parcel);
mColorModes = parcel.readInt();
- mDuplexModes = parcel.readInt();
- mFittingModes = parcel.readInt();
- mOrientations = parcel.readInt();
readDefaults(parcel);
mDefaultMargins = readMargins(parcel);
@@ -312,13 +191,8 @@
writeMargins(mMinMargins, parcel);
writeMediaSizes(parcel);
writeResolutions(parcel);
- writeInputTrays(parcel);
- writeOutputTrays(parcel);
parcel.writeInt(mColorModes);
- parcel.writeInt(mDuplexModes);
- parcel.writeInt(mFittingModes);
- parcel.writeInt(mOrientations);
writeDefaults(parcel);
writeMargins(mDefaultMargins, parcel);
@@ -331,12 +205,7 @@
result = prime * result + ((mMinMargins == null) ? 0 : mMinMargins.hashCode());
result = prime * result + ((mMediaSizes == null) ? 0 : mMediaSizes.hashCode());
result = prime * result + ((mResolutions == null) ? 0 : mResolutions.hashCode());
- result = prime * result + ((mInputTrays == null) ? 0 : mInputTrays.hashCode());
- result = prime * result + ((mOutputTrays == null) ? 0 : mOutputTrays.hashCode());
result = prime * result + mColorModes;
- result = prime * result + mDuplexModes;
- result = prime * result + mFittingModes;
- result = prime * result + mOrientations;
result = prime * result + Arrays.hashCode(mDefaults);
result = prime * result + ((mDefaultMargins == null) ? 0 : mDefaultMargins.hashCode());
return result;
@@ -375,32 +244,9 @@
} else if (!mResolutions.equals(other.mResolutions)) {
return false;
}
- if (mInputTrays == null) {
- if (other.mInputTrays != null) {
- return false;
- }
- } else if (!mInputTrays.equals(other.mInputTrays)) {
- return false;
- }
- if (mOutputTrays == null) {
- if (other.mOutputTrays != null) {
- return false;
- }
- } else if (!mOutputTrays.equals(other.mOutputTrays)) {
- return false;
- }
- if (mDuplexModes != other.mDuplexModes) {
- return false;
- }
if (mColorModes != other.mColorModes) {
return false;
}
- if (mFittingModes != other.mFittingModes) {
- return false;
- }
- if (mOrientations != other.mOrientations) {
- return false;
- }
if (!Arrays.equals(mDefaults, other.mDefaults)) {
return false;
}
@@ -421,32 +267,11 @@
builder.append("minMargins=").append(mMinMargins);
builder.append(", mediaSizes=").append(mMediaSizes);
builder.append(", resolutions=").append(mResolutions);
- builder.append(", inputTrays=").append(mInputTrays);
- builder.append(", outputTrays=").append(mOutputTrays);
- builder.append(", duplexModes=").append(duplexModesToString());
builder.append(", colorModes=").append(colorModesToString());
- builder.append(", fittingModes=").append(fittingModesToString());
- builder.append(", orientations=").append(orientationsToString());
builder.append("\"}");
return builder.toString();
}
- private String duplexModesToString() {
- StringBuilder builder = new StringBuilder();
- builder.append('[');
- int duplexModes = mDuplexModes;
- while (duplexModes != 0) {
- final int duplexMode = 1 << Integer.numberOfTrailingZeros(duplexModes);
- duplexModes &= ~duplexMode;
- if (builder.length() > 0) {
- builder.append(", ");
- }
- builder.append(PrintAttributes.duplexModeToString(duplexMode));
- }
- builder.append(']');
- return builder.toString();
- }
-
private String colorModesToString() {
StringBuilder builder = new StringBuilder();
builder.append('[');
@@ -463,38 +288,6 @@
return builder.toString();
}
- private String fittingModesToString() {
- StringBuilder builder = new StringBuilder();
- builder.append('[');
- int fittingModes = mFittingModes;
- while (fittingModes != 0) {
- final int fittingMode = 1 << Integer.numberOfTrailingZeros(fittingModes);
- fittingModes &= ~fittingMode;
- if (builder.length() > 0) {
- builder.append(", ");
- }
- builder.append(PrintAttributes.fittingModeToString(fittingMode));
- }
- builder.append(']');
- return builder.toString();
- }
-
- private String orientationsToString() {
- StringBuilder builder = new StringBuilder();
- builder.append('[');
- int orientations = mOrientations;
- while (orientations != 0) {
- final int orientation = 1 << Integer.numberOfTrailingZeros(orientations);
- orientations &= ~orientation;
- if (builder.length() > 0) {
- builder.append(", ");
- }
- builder.append(PrintAttributes.orientationToString(orientation));
- }
- builder.append(']');
- return builder.toString();
- }
-
private void writeMediaSizes(Parcel parcel) {
if (mMediaSizes == null) {
parcel.writeInt(0);
@@ -552,54 +345,6 @@
return (parcel.readInt() == 1) ? Margins.createFromParcel(parcel) : null;
}
- private void writeInputTrays(Parcel parcel) {
- if (mInputTrays == null) {
- parcel.writeInt(0);
- return;
- }
- final int inputTrayCount = mInputTrays.size();
- parcel.writeInt(inputTrayCount);
- for (int i = 0; i < inputTrayCount; i++) {
- mInputTrays.get(i).writeToParcel(parcel);
- }
- }
-
- private List<Tray> readInputTrays(Parcel parcel) {
- final int inputTrayCount = parcel.readInt();
- if (inputTrayCount <= 0) {
- return null;
- }
- List<Tray> inputTrays = new ArrayList<Tray>(inputTrayCount);
- for (int i = 0; i < inputTrayCount; i++) {
- inputTrays.add(Tray.createFromParcel(parcel));
- }
- return inputTrays;
- }
-
- private void writeOutputTrays(Parcel parcel) {
- if (mOutputTrays == null) {
- parcel.writeInt(0);
- return;
- }
- final int outputTrayCount = mOutputTrays.size();
- parcel.writeInt(outputTrayCount);
- for (int i = 0; i < outputTrayCount; i++) {
- mOutputTrays.get(i).writeToParcel(parcel);
- }
- }
-
- private List<Tray> readOutputTrays(Parcel parcel) {
- final int outputTrayCount = parcel.readInt();
- if (outputTrayCount <= 0) {
- return null;
- }
- List<Tray> outputTrays = new ArrayList<Tray>(outputTrayCount);
- for (int i = 0; i < outputTrayCount; i++) {
- outputTrays.add(Tray.createFromParcel(parcel));
- }
- return outputTrays;
- }
-
private void readDefaults(Parcel parcel) {
final int defaultCount = parcel.readInt();
for (int i = 0; i < defaultCount; i++) {
@@ -722,62 +467,6 @@
}
/**
- * Adds an input tray.
- * <p>
- * <strong>Required:</strong> No
- * </p>
- *
- * @param inputTray A tray.
- * @param isDefault Whether this is the default.
- * @return This builder.
- *
- * @throws IllegalArgumentException If set as default and there
- * is already a default.
- *
- * @see PrintAttributes.Tray
- */
- public Builder addInputTray(Tray inputTray, boolean isDefault) {
- if (mPrototype.mInputTrays == null) {
- mPrototype.mInputTrays = new ArrayList<Tray>();
- }
- final int insertionIndex = mPrototype.mInputTrays.size();
- mPrototype.mInputTrays.add(inputTray);
- if (isDefault) {
- throwIfDefaultAlreadySpecified(PROPERTY_INPUT_TRAY);
- mPrototype.mDefaults[PROPERTY_INPUT_TRAY] = insertionIndex;
- }
- return this;
- }
-
- /**
- * Adds an output tray.
- * <p>
- * <strong>Required:</strong> No
- * </p>
- *
- * @param outputTray A tray.
- * @param isDefault Whether this is the default.
- * @return This builder.
- *
- * @throws IllegalArgumentException If set as default and there
- * is already a default.
- *
- * @see PrintAttributes.Tray
- */
- public Builder addOutputTray(Tray outputTray, boolean isDefault) {
- if (mPrototype.mOutputTrays == null) {
- mPrototype.mOutputTrays = new ArrayList<Tray>();
- }
- final int insertionIndex = mPrototype.mOutputTrays.size();
- mPrototype.mOutputTrays.add(outputTray);
- if (isDefault) {
- throwIfDefaultAlreadySpecified(PROPERTY_OUTPUT_TRAY);
- mPrototype.mDefaults[PROPERTY_OUTPUT_TRAY] = insertionIndex;
- }
- return this;
- }
-
- /**
* Sets the color modes.
* <p>
* <strong>Required:</strong> Yes
@@ -810,103 +499,6 @@
}
/**
- * Set the duplex modes.
- * <p>
- * <strong>Required:</strong> No
- * </p>
- *
- * @param duplexModes The duplex mode bit mask.
- * @param defaultDuplexMode The default duplex mode.
- * @return This builder.
- *
- * @throws IllegalArgumentException If duplex modes contains an invalid
- * mode bit or if the default duplex mode is invalid.
- *
- * @see PrintAttributes#DUPLEX_MODE_NONE
- * @see PrintAttributes#DUPLEX_MODE_LONG_EDGE
- * @see PrintAttributes#DUPLEX_MODE_SHORT_EDGE
- */
- public Builder setDuplexModes(int duplexModes, int defaultDuplexMode) {
- int currentModes = duplexModes;
- while (currentModes > 0) {
- final int currentMode = (1 << Integer.numberOfTrailingZeros(currentModes));
- currentModes &= ~currentMode;
- PrintAttributes.enforceValidDuplexMode(currentMode);
- }
- if ((duplexModes & defaultDuplexMode) == 0) {
- throw new IllegalArgumentException("Default duplex mode not in duplex modes.");
- }
- PrintAttributes.enforceValidDuplexMode(defaultDuplexMode);
- mPrototype.mDuplexModes = duplexModes;
- mPrototype.mDefaults[PROPERTY_DUPLEX_MODE] = defaultDuplexMode;
- return this;
- }
-
- /**
- * Sets the fitting modes.
- * <p>
- * <strong>Required:</strong> No
- * </p>
- *
- * @param fittingModes The fitting mode bit mask.
- * @param defaultFittingMode The default fitting mode.
- * @return This builder.
- *
- * @throws IllegalArgumentException If fitting modes contains an invalid
- * mode bit or if the default fitting mode is invalid.
- *
- * @see PrintAttributes#FITTING_MODE_NONE
- * @see PrintAttributes#FITTING_MODE_FIT_TO_PAGE
- */
- public Builder setFittingModes(int fittingModes, int defaultFittingMode) {
- int currentModes = fittingModes;
- while (currentModes > 0) {
- final int currentMode = (1 << Integer.numberOfTrailingZeros(currentModes));
- currentModes &= ~currentMode;
- PrintAttributes.enforceValidFittingMode(currentMode);
- }
- if ((fittingModes & defaultFittingMode) == 0) {
- throw new IllegalArgumentException("Default fitting mode not in fiting modes.");
- }
- PrintAttributes.enforceValidFittingMode(defaultFittingMode);
- mPrototype.mFittingModes = fittingModes;
- mPrototype.mDefaults[PROPERTY_FITTING_MODE] = defaultFittingMode;
- return this;
- }
-
- /**
- * Sets the orientations.
- * <p>
- * <strong>Required:</strong> Yes
- * </p>
- *
- * @param orientations The orientation bit mask.
- * @param defaultOrientation The default orientation.
- * @return This builder.
- *
- * @throws IllegalArgumentException If orientations contains an invalid
- * mode bit or if the default orientation is invalid.
- *
- * @see PrintAttributes#ORIENTATION_PORTRAIT
- * @see PrintAttributes#ORIENTATION_LANDSCAPE
- */
- public Builder setOrientations(int orientations, int defaultOrientation) {
- int currentOrientaions = orientations;
- while (currentOrientaions > 0) {
- final int currentOrnt = (1 << Integer.numberOfTrailingZeros(currentOrientaions));
- currentOrientaions &= ~currentOrnt;
- PrintAttributes.enforceValidOrientation(currentOrnt);
- }
- if ((orientations & defaultOrientation) == 0) {
- throw new IllegalArgumentException("Default orientation not in orientations.");
- }
- PrintAttributes.enforceValidOrientation(defaultOrientation);
- mPrototype.mOrientations = orientations;
- mPrototype.mDefaults[PROPERTY_ORIENTATION] = defaultOrientation;
- return this;
- }
-
- /**
* Crates a new {@link PrinterCapabilitiesInfo} enforcing that all
* required properties have need specified. See individual methods
* in this class for reference about required attributes.
@@ -934,12 +526,6 @@
if (mPrototype.mDefaults[PROPERTY_COLOR_MODE] == DEFAULT_UNDEFINED) {
throw new IllegalStateException("No default color mode specified.");
}
- if (mPrototype.mOrientations == 0) {
- throw new IllegalStateException("No oprientation specified.");
- }
- if (mPrototype.mDefaults[PROPERTY_ORIENTATION] == DEFAULT_UNDEFINED) {
- throw new IllegalStateException("No default orientation specified.");
- }
if (mPrototype.mMinMargins == null) {
mPrototype.mMinMargins = new Margins(0, 0, 0, 0);
}
diff --git a/core/java/android/print/PrinterDiscoverySession.java b/core/java/android/print/PrinterDiscoverySession.java
index 46f0bef..64249b4 100644
--- a/core/java/android/print/PrinterDiscoverySession.java
+++ b/core/java/android/print/PrinterDiscoverySession.java
@@ -38,7 +38,6 @@
private static final int MSG_PRINTERS_ADDED = 1;
private static final int MSG_PRINTERS_REMOVED = 2;
- private static final int MSG_PRINTERS_UPDATED = 3;
private final ArrayMap<PrinterId, PrinterInfo> mPrinters =
new ArrayMap<PrinterId, PrinterInfo>();
@@ -200,8 +199,8 @@
final int addedPrinterCount = printers.size();
for (int i = 0; i < addedPrinterCount; i++) {
PrinterInfo addedPrinter = printers.get(i);
- if (mPrinters.get(addedPrinter.getId()) == null) {
- mPrinters.put(addedPrinter.getId(), addedPrinter);
+ PrinterInfo oldPrinter = mPrinters.put(addedPrinter.getId(), addedPrinter);
+ if (oldPrinter == null || !oldPrinter.equals(addedPrinter)) {
printersChanged = true;
}
}
@@ -227,25 +226,6 @@
}
}
- private void handlePrintersUpdated(List<PrinterInfo> printers) {
- if (isDestroyed()) {
- return;
- }
- boolean printersChanged = false;
- final int updatedPrinterCount = printers.size();
- for (int i = 0; i < updatedPrinterCount; i++) {
- PrinterInfo updatedPrinter = printers.get(i);
- PrinterInfo oldPrinter = mPrinters.get(updatedPrinter.getId());
- if (oldPrinter != null && !oldPrinter.equals(updatedPrinter)) {
- mPrinters.put(updatedPrinter.getId(), updatedPrinter);
- printersChanged = true;
- }
- }
- if (printersChanged) {
- notifyOnPrintersChanged();
- }
- }
-
private void notifyOnPrintersChanged() {
if (mListener != null) {
mListener.onPrintersChanged();
@@ -277,11 +257,6 @@
List<PrinterId> printerIds = (List<PrinterId>) message.obj;
handlePrintersRemoved(printerIds);
} break;
-
- case MSG_PRINTERS_UPDATED: {
- List<PrinterInfo> printers = (List<PrinterInfo>) message.obj;
- handlePrintersUpdated(printers);
- } break;
}
}
}
@@ -311,14 +286,5 @@
printerIds).sendToTarget();
}
}
-
- @Override
- public void onPrintersUpdated(List<PrinterInfo> printers) {
- PrinterDiscoverySession session = mWeakSession.get();
- if (session != null) {
- session.mHandler.obtainMessage(MSG_PRINTERS_UPDATED,
- printers).sendToTarget();
- }
- }
}
}
diff --git a/core/java/android/printservice/IPrintServiceClient.aidl b/core/java/android/printservice/IPrintServiceClient.aidl
index 1e33fc0..ad3c04f 100644
--- a/core/java/android/printservice/IPrintServiceClient.aidl
+++ b/core/java/android/printservice/IPrintServiceClient.aidl
@@ -35,5 +35,4 @@
void onPrintersAdded(in List<PrinterInfo> printers);
void onPrintersRemoved(in List<PrinterId> printerIds);
- void onPrintersUpdated(in List<PrinterInfo> printers);
}
diff --git a/core/java/android/printservice/PrintJob.java b/core/java/android/printservice/PrintJob.java
index 8bae9d6..4ff7f0c 100644
--- a/core/java/android/printservice/PrintJob.java
+++ b/core/java/android/printservice/PrintJob.java
@@ -26,8 +26,8 @@
* service. It provides APIs for observing the print job state and
* performing operations on the print job.
* <p>
- * <strong>Note: </strong> All methods of this class must be executed on the main
- * application thread.
+ * <strong>Note: </strong> All methods of this class must be invoked on
+ * the main application thread.
* </p>
*/
public final class PrintJob {
diff --git a/core/java/android/printservice/PrinterDiscoverySession.java b/core/java/android/printservice/PrinterDiscoverySession.java
index 6464cc1..b0bf3da 100644
--- a/core/java/android/printservice/PrinterDiscoverySession.java
+++ b/core/java/android/printservice/PrinterDiscoverySession.java
@@ -30,7 +30,7 @@
/**
* This class encapsulates the interaction between a print service and the
* system during printer discovery. During printer discovery you are responsible
- * for adding discovered printers, removing already added printers that
+ * for adding discovered printers, removing previously added printers that
* disappeared, and updating already added printers.
* <p>
* During the lifetime of this session you may be asked to start and stop
@@ -47,7 +47,7 @@
* PrinterDiscoverySession#addPrinters(List)}. Added printers that disappeared are
* removed by invoking {@link PrinterDiscoverySession#removePrinters(List)}. Added
* printers whose properties or capabilities changed are updated through a call to
- * {@link PrinterDiscoverySession#updatePrinters(List)}. The printers added in this
+ * {@link PrinterDiscoverySession#addPrinters(List)}. The printers added in this
* session can be acquired via {@link #getPrinters()} where the returned printers
* will be an up-to-date snapshot of the printers that you reported during the
* session. Printers are <strong>not</strong> persisted across sessions.
@@ -89,6 +89,9 @@
private final ArrayMap<PrinterId, PrinterInfo> mPrinters =
new ArrayMap<PrinterId, PrinterInfo>();
+ private final List<PrinterId> mTrackedPrinters =
+ new ArrayList<PrinterId>();
+
private ArrayMap<PrinterId, PrinterInfo> mLastSentPrinters;
private IPrintServiceClient mObserver;
@@ -130,7 +133,6 @@
*
* @see #addPrinters(List)
* @see #removePrinters(List)
- * @see #updatePrinters(List)
* @see #isDestroyed()
*/
public final List<PrinterInfo> getPrinters() {
@@ -142,7 +144,7 @@
}
/**
- * Adds discovered printers. Adding an already added printer has no effect.
+ * Adds discovered printers. Adding an already added printer updates it.
* Removed printers can be added again. You can call this method multiple
* times during the life of this session. Duplicates will be ignored.
* <p>
@@ -153,7 +155,6 @@
* @param printers The printers to add.
*
* @see #removePrinters(List)
- * @see #updatePrinters(List)
* @see #getPrinters()
* @see #isDestroyed()
*/
@@ -168,18 +169,21 @@
if (mIsDiscoveryStarted) {
// If during discovery, add the new printers and send them.
- List<PrinterInfo> addedPrinters = new ArrayList<PrinterInfo>();
+ List<PrinterInfo> addedPrinters = null;
final int addedPrinterCount = printers.size();
for (int i = 0; i < addedPrinterCount; i++) {
PrinterInfo addedPrinter = printers.get(i);
- if (mPrinters.get(addedPrinter.getId()) == null) {
- mPrinters.put(addedPrinter.getId(), addedPrinter);
+ PrinterInfo oldPrinter = mPrinters.put(addedPrinter.getId(), addedPrinter);
+ if (oldPrinter == null || !oldPrinter.equals(addedPrinter)) {
+ if (addedPrinters == null) {
+ addedPrinters = new ArrayList<PrinterInfo>();
+ }
addedPrinters.add(addedPrinter);
}
}
// Send the added printers, if such.
- if (!addedPrinters.isEmpty()) {
+ if (addedPrinters != null) {
sendAddedPrinters(mObserver, addedPrinters);
}
} else {
@@ -232,7 +236,6 @@
* @param printerIds The ids of the removed printers.
*
* @see #addPrinters(List)
- * @see #updatePrinters(List)
* @see #getPrinters()
* @see #isDestroyed()
*/
@@ -295,86 +298,6 @@
}
}
- /**
- * Updates added printers. Updating a printer that was not added or that
- * was removed has no effect. You can call this method multiple times
- * during the lifetime of this session.
- * <p>
- * <strong>Note: </strong> Calls to this method after the session is
- * destroyed, that is after the {@link #onDestroy()} callback, will be ignored.
- * </p>
- *
- * @param printers The printers to update.
- *
- * @see #addPrinters(List)
- * @see #removePrinters(List)
- * @see #getPrinters()
- * @see #isDestroyed()
- */
- public final void updatePrinters(List<PrinterInfo> printers) {
- PrintService.throwIfNotCalledOnMainThread();
-
- // If the session is destroyed - nothing do to.
- if (mIsDestroyed) {
- Log.w(LOG_TAG, "Not updating printers - session destroyed.");
- return;
- }
-
- if (mIsDiscoveryStarted) {
- // If during discovery, update existing printers and send them.
- List<PrinterInfo> updatedPrinters = new ArrayList<PrinterInfo>();
- final int updatedPrinterCount = printers.size();
- for (int i = 0; i < updatedPrinterCount; i++) {
- PrinterInfo updatedPrinter = printers.get(i);
- PrinterInfo oldPrinter = mPrinters.get(updatedPrinter.getId());
- if (oldPrinter != null && !oldPrinter.equals(updatedPrinter)) {
- mPrinters.put(updatedPrinter.getId(), updatedPrinter);
- updatedPrinters.add(updatedPrinter);
- }
- }
-
- // Send the updated printers, if such.
- if (!updatedPrinters.isEmpty()) {
- sendUpdatedPrinters(mObserver, updatedPrinters);
- }
- } else {
- // Remember the last sent printers if needed.
- if (mLastSentPrinters == null) {
- mLastSentPrinters = new ArrayMap<PrinterId, PrinterInfo>(mPrinters);
- }
-
- // Update the printers.
- final int updatedPrinterCount = printers.size();
- for (int i = 0; i < updatedPrinterCount; i++) {
- PrinterInfo updatedPrinter = printers.get(i);
- PrinterInfo oldPrinter = mPrinters.get(updatedPrinter.getId());
- if (oldPrinter != null && !oldPrinter.equals(updatedPrinter)) {
- mPrinters.put(updatedPrinter.getId(), updatedPrinter);
- }
- }
- }
- }
-
- private static void sendUpdatedPrinters(IPrintServiceClient observer,
- List<PrinterInfo> printers) {
- try {
- final int printerCount = printers.size();
- if (printerCount <= MAX_ITEMS_PER_CALLBACK) {
- observer.onPrintersUpdated(printers);
- } else {
- final int transactionCount = (printerCount / MAX_ITEMS_PER_CALLBACK) + 1;
- for (int i = 0; i < transactionCount; i++) {
- final int start = i * MAX_ITEMS_PER_CALLBACK;
- final int end = Math.min(start + MAX_ITEMS_PER_CALLBACK, printerCount);
- List<PrinterInfo> subPrinters = printers.subList(start, end);
- observer.onPrintersUpdated(subPrinters);
- }
- }
- } catch (RemoteException re) {
- Log.e(LOG_TAG, "Error sending updated printers", re);
- }
- }
-
private void sendOutOfDiscoveryPeriodPrinterChanges() {
// Noting changed since the last discovery period - nothing to do.
if (mLastSentPrinters == null || mLastSentPrinters.isEmpty()) {
@@ -382,21 +305,11 @@
return;
}
+ // Determine the added printers.
List<PrinterInfo> addedPrinters = null;
- List<PrinterInfo> updatedPrinters = null;
- List<PrinterId> removedPrinterIds = null;
-
- // Determine the added and updated printers.
for (PrinterInfo printer : mPrinters.values()) {
PrinterInfo sentPrinter = mLastSentPrinters.get(printer.getId());
- if (sentPrinter != null) {
- if (!sentPrinter.equals(printer)) {
- if (updatedPrinters == null) {
- updatedPrinters = new ArrayList<PrinterInfo>();
- }
- updatedPrinters.add(printer);
- }
- } else {
+ if (sentPrinter == null || !sentPrinter.equals(printer)) {
if (addedPrinters == null) {
addedPrinters = new ArrayList<PrinterInfo>();
}
@@ -409,12 +322,8 @@
sendAddedPrinters(mObserver, addedPrinters);
}
- // Send the updated printers, if such.
- if (updatedPrinters != null) {
- sendUpdatedPrinters(mObserver, updatedPrinters);
- }
-
// Determine the removed printers.
+ List<PrinterId> removedPrinterIds = null;
for (PrinterInfo sentPrinter : mLastSentPrinters.values()) {
if (!mPrinters.containsKey(sentPrinter.getId())) {
if (removedPrinterIds == null) {
@@ -437,14 +346,15 @@
* added via calling {@link #addPrinters(List)}. Added printers that disappeared
* should be removed via calling {@link #removePrinters(List)}. Added printers
* whose properties or capabilities changed should be updated via calling {@link
- * #updatePrinters(List)}. You will receive a call to call to {@link
- * #onStopPrinterDiscovery()} when you should stop printer discovery.
+ * #addPrinters(List)}. You will receive a call to {@link #onStopPrinterDiscovery()}
+ * when you should stop printer discovery.
* <p>
* During the lifetime of this session all printers that are known to your print
* service have to be added. The system does not retain any printers across sessions.
* However, if you were asked to start and then stop performing printer discovery
* in this session, then a subsequent discovering should not re-discover already
- * discovered printers.
+ * discovered printers. You can get the printers reported during this session by
+ * calling {@link #getPrinters()}.
* </p>
* <p>
* <strong>Note: </strong>You are also given a list of printers whose availability
@@ -459,7 +369,6 @@
* @see #onStopPrinterDiscovery()
* @see #addPrinters(List)
* @see #removePrinters(List)
- * @see #updatePrinters(List)
* @see #isPrinterDiscoveryStarted()
*/
public abstract void onStartPrinterDiscovery(List<PrinterId> priorityList);
@@ -476,7 +385,7 @@
* Callback asking you to validate that the given printers are valid, that
* is they exist. You are responsible for checking whether these printers
* exist and for the ones that do exist notify the system via calling
- * {@link #updatePrinters(List)}.
+ * {@link #addPrinters(List)}.
* <p>
* <strong>Note: </strong> You are <strong>not required</strong> to provide
* the printer capabilities when updating the printers that do exist.
@@ -484,7 +393,6 @@
*
* @param printerIds The printers to validate.
*
- * @see #updatePrinters(List)
* @see PrinterInfo.Builder#setCapabilities(PrinterCapabilitiesInfo)
* PrinterInfo.Builder.setCapabilities(PrinterCapabilitiesInfo)
*/
@@ -494,7 +402,7 @@
* Callback asking you to start tracking the state of a printer. Tracking
* the state means that you should do a best effort to observe the state
* of this printer and notify the system if that state changes via calling
- * {@link #updatePrinters(List)}.
+ * {@link #addPrinters(List)}.
* <p>
* <strong>Note: </strong> A printer can be initially added without its
* capabilities to avoid polling printers that the user will not select.
@@ -513,7 +421,6 @@
* @param printerId The printer to start tracking.
*
* @see #onStopPrinterStateTracking(PrinterId)
- * @see #updatePrinters(List)
* @see PrinterInfo.Builder#setCapabilities(PrinterCapabilitiesInfo)
* PrinterInfo.Builder.setCapabilities(PrinterCapabilitiesInfo)
*/
@@ -531,6 +438,32 @@
public abstract void onStopPrinterStateTracking(PrinterId printerId);
/**
+ * Gets the printers that should be tracked. These are printers that are
+ * important to the user and for which you received a call to {@link
+ * #onStartPrinterStateTracking(PrinterId)} asking you to observer their
+ * state and reporting it to the system via {@link #addPrinters(List)}.
+ * You will receive a call to {@link #onStopPrinterStateTracking(PrinterId)}
+ * if you should stop tracking a printer.
+ * <p>
+ * <strong>Note: </strong> Calls to this method after the session is
+ * destroyed, that is after the {@link #onDestroy()} callback, will be ignored.
+ * </p>
+ *
+ * @return The printers.
+ *
+ * @see #onStartPrinterStateTracking(PrinterId)
+ * @see #onStopPrinterStateTracking(PrinterId)
+ * @see #isDestroyed()
+ */
+ public final List<PrinterId> getTrackedPrinters() {
+ PrintService.throwIfNotCalledOnMainThread();
+ if (mIsDestroyed) {
+ return Collections.emptyList();
+ }
+ return new ArrayList<PrinterId>(mTrackedPrinters);
+ }
+
+ /**
* Notifies you that the session is destroyed. After this callback is invoked
* any calls to the methods of this class will be ignored, {@link #isDestroyed()}
* will return true and you will also no longer receive callbacks.
@@ -589,13 +522,16 @@
}
void startPrinterStateTracking(PrinterId printerId) {
- if (!mIsDestroyed && mObserver != null) {
+ if (!mIsDestroyed && mObserver != null
+ && !mTrackedPrinters.contains(printerId)) {
+ mTrackedPrinters.add(printerId);
onStartPrinterStateTracking(printerId);
}
}
void stopPrinterStateTracking(PrinterId printerId) {
- if (!mIsDestroyed && mObserver != null) {
+ if (!mIsDestroyed && mObserver != null
+ && mTrackedPrinters.remove(printerId)) {
onStopPrinterStateTracking(printerId);
}
}
diff --git a/core/java/android/printservice/package.html b/core/java/android/printservice/package.html
index 6b0327c..7410a49 100644
--- a/core/java/android/printservice/package.html
+++ b/core/java/android/printservice/package.html
@@ -9,8 +9,7 @@
<p>
A print service implementation should extend {@link android.printservice.PrintService}
and implement its abstract methods. Also the print service has to follow the contract for
-managing print {@link android.printservice.PrintJob}s to ensure correct interaction with
-the system and consistent user experience.
+managing print {@link android.printservice.PrintJob}s.
<p/>
<p>
The system is responsible for starting and stopping a print service depending on whether
diff --git a/core/java/android/provider/DocumentsContract.java b/core/java/android/provider/DocumentsContract.java
index f445fd5..5333a25 100644
--- a/core/java/android/provider/DocumentsContract.java
+++ b/core/java/android/provider/DocumentsContract.java
@@ -72,7 +72,9 @@
public static final String META_DATA_DOCUMENT_PROVIDER = "android.content.DOCUMENT_PROVIDER";
/** {@hide} */
- public static final String ACTION_MANAGE_DOCUMENTS = "android.provider.action.MANAGE_DOCUMENTS";
+ public static final String ACTION_MANAGE_ROOT = "android.provider.action.MANAGE_ROOT";
+ /** {@hide} */
+ public static final String ACTION_MANAGE_DOCUMENT = "android.provider.action.MANAGE_DOCUMENT";
/**
* Constants related to a document, including {@link Cursor} columns names
@@ -337,6 +339,19 @@
public static final String COLUMN_AVAILABLE_BYTES = "available_bytes";
/**
+ * MIME types supported by this root, or {@code null} if the root
+ * supports all MIME types. Multiple MIME types can be separated by a
+ * newline. For example, a root supporting audio might use
+ * "audio/*\napplication/x-flac".
+ * <p>
+ * Type: String
+ */
+ public static final String COLUMN_MIME_TYPES = "mime_types";
+
+ /** {@hide} */
+ public static final String MIME_TYPE_ITEM = "vnd.android.document/root";
+
+ /**
* Type of root that represents a storage service, such as a cloud-based
* service.
*
@@ -386,40 +401,13 @@
public static final int FLAG_ADVANCED = 1 << 2;
/**
- * Flag indicating that a root offers audio documents. When a user is
- * selecting audio, roots not providing audio may be excluded.
- *
- * @see #COLUMN_FLAGS
- * @see Intent#EXTRA_MIME_TYPES
- */
- public static final int FLAG_PROVIDES_AUDIO = 1 << 3;
-
- /**
- * Flag indicating that a root offers video documents. When a user is
- * selecting video, roots not providing video may be excluded.
- *
- * @see #COLUMN_FLAGS
- * @see Intent#EXTRA_MIME_TYPES
- */
- public static final int FLAG_PROVIDES_VIDEO = 1 << 4;
-
- /**
- * Flag indicating that a root offers image documents. When a user is
- * selecting images, roots not providing images may be excluded.
- *
- * @see #COLUMN_FLAGS
- * @see Intent#EXTRA_MIME_TYPES
- */
- public static final int FLAG_PROVIDES_IMAGES = 1 << 5;
-
- /**
* Flag indicating that this root can report recently modified
* documents.
*
* @see #COLUMN_FLAGS
* @see DocumentsContract#buildRecentDocumentsUri(String, String)
*/
- public static final int FLAG_SUPPORTS_RECENTS = 1 << 6;
+ public static final int FLAG_SUPPORTS_RECENTS = 1 << 3;
}
/**
@@ -479,6 +467,17 @@
}
/**
+ * Build Uri representing the given {@link Root#COLUMN_ROOT_ID} in a
+ * document provider.
+ *
+ * @see #getRootId(Uri)
+ */
+ public static Uri buildRootUri(String authority, String rootId) {
+ return new Uri.Builder().scheme(ContentResolver.SCHEME_CONTENT)
+ .authority(authority).appendPath(PATH_ROOT).appendPath(rootId).build();
+ }
+
+ /**
* Build Uri representing the recently modified documents of a specific
* root. When queried, a provider will return zero or more rows with columns
* defined by {@link Document}.
diff --git a/core/java/android/provider/DocumentsProvider.java b/core/java/android/provider/DocumentsProvider.java
index 09f4866..1b0fc4d 100644
--- a/core/java/android/provider/DocumentsProvider.java
+++ b/core/java/android/provider/DocumentsProvider.java
@@ -28,6 +28,7 @@
import android.content.Context;
import android.content.Intent;
import android.content.UriMatcher;
+import android.content.pm.PackageManager;
import android.content.pm.ProviderInfo;
import android.content.res.AssetFileDescriptor;
import android.database.Cursor;
@@ -71,11 +72,12 @@
public abstract class DocumentsProvider extends ContentProvider {
private static final String TAG = "DocumentsProvider";
- private static final int MATCH_ROOT = 1;
- private static final int MATCH_RECENT = 2;
- private static final int MATCH_DOCUMENT = 3;
- private static final int MATCH_CHILDREN = 4;
- private static final int MATCH_SEARCH = 5;
+ private static final int MATCH_ROOTS = 1;
+ private static final int MATCH_ROOT = 2;
+ private static final int MATCH_RECENT = 3;
+ private static final int MATCH_DOCUMENT = 4;
+ private static final int MATCH_CHILDREN = 5;
+ private static final int MATCH_SEARCH = 6;
private String mAuthority;
@@ -89,7 +91,8 @@
mAuthority = info.authority;
mMatcher = new UriMatcher(UriMatcher.NO_MATCH);
- mMatcher.addURI(mAuthority, "root", MATCH_ROOT);
+ mMatcher.addURI(mAuthority, "root", MATCH_ROOTS);
+ mMatcher.addURI(mAuthority, "root/*", MATCH_ROOT);
mMatcher.addURI(mAuthority, "root/*/recent", MATCH_RECENT);
mMatcher.addURI(mAuthority, "document/*", MATCH_DOCUMENT);
mMatcher.addURI(mAuthority, "document/*/children", MATCH_CHILDREN);
@@ -252,7 +255,7 @@
String[] selectionArgs, String sortOrder) {
try {
switch (mMatcher.match(uri)) {
- case MATCH_ROOT:
+ case MATCH_ROOTS:
return queryRoots(projection);
case MATCH_RECENT:
return queryRecentDocuments(getRootId(uri), projection);
@@ -281,6 +284,8 @@
public final String getType(Uri uri) {
try {
switch (mMatcher.match(uri)) {
+ case MATCH_ROOT:
+ return DocumentsContract.Root.MIME_TYPE_ITEM;
case MATCH_DOCUMENT:
return getDocumentType(getDocumentId(uri));
default:
@@ -324,20 +329,35 @@
throw new UnsupportedOperationException("Update not supported");
}
- /** {@hide} */
+ /**
+ * Implementation is provided by the parent class. Can be overridden to
+ * provide additional functionality, but subclasses <em>must</em> always
+ * call the superclass. If the superclass returns {@code null}, the subclass
+ * may implement custom behavior.
+ *
+ * @see #openDocument(String, String, CancellationSignal)
+ * @see #deleteDocument(String)
+ */
@Override
- public final Bundle callFromPackage(
- String callingPackage, String method, String arg, Bundle extras) {
+ public Bundle call(String method, String arg, Bundle extras) {
+ final Context context = getContext();
+
if (!method.startsWith("android:")) {
// Let non-platform methods pass through
- return super.callFromPackage(callingPackage, method, arg, extras);
+ return super.call(method, arg, extras);
}
- // Require that caller can manage given document
final String documentId = extras.getString(Document.COLUMN_DOCUMENT_ID);
final Uri documentUri = DocumentsContract.buildDocumentUri(mAuthority, documentId);
- getContext().enforceCallingOrSelfUriPermission(
- documentUri, Intent.FLAG_GRANT_WRITE_URI_PERMISSION, method);
+
+ // Require that caller can manage given document
+ final boolean callerHasManage =
+ context.checkCallingOrSelfPermission(android.Manifest.permission.MANAGE_DOCUMENTS)
+ == PackageManager.PERMISSION_GRANTED;
+ if (!callerHasManage) {
+ getContext().enforceCallingOrSelfUriPermission(
+ documentUri, Intent.FLAG_GRANT_WRITE_URI_PERMISSION, method);
+ }
final Bundle out = new Bundle();
try {
@@ -345,14 +365,26 @@
final String mimeType = extras.getString(Document.COLUMN_MIME_TYPE);
final String displayName = extras.getString(Document.COLUMN_DISPLAY_NAME);
- // TODO: issue Uri grant towards calling package
- // TODO: enforce that package belongs to caller
final String newDocumentId = createDocument(documentId, mimeType, displayName);
out.putString(Document.COLUMN_DOCUMENT_ID, newDocumentId);
+ // Extend permission grant towards caller if needed
+ if (!callerHasManage) {
+ final Uri newDocumentUri = DocumentsContract.buildDocumentUri(
+ mAuthority, newDocumentId);
+ context.grantUriPermission(getCallingPackage(), newDocumentUri,
+ Intent.FLAG_GRANT_READ_URI_PERMISSION
+ | Intent.FLAG_GRANT_WRITE_URI_PERMISSION
+ | Intent.FLAG_PERSIST_GRANT_URI_PERMISSION);
+ }
+
} else if (METHOD_DELETE_DOCUMENT.equals(method)) {
- final String docId = extras.getString(Document.COLUMN_DOCUMENT_ID);
- deleteDocument(docId);
+ deleteDocument(documentId);
+
+ // Document no longer exists, clean up any grants
+ context.revokeUriPermission(documentUri, Intent.FLAG_GRANT_READ_URI_PERMISSION
+ | Intent.FLAG_GRANT_WRITE_URI_PERMISSION
+ | Intent.FLAG_PERSIST_GRANT_URI_PERMISSION);
} else {
throw new UnsupportedOperationException("Method not supported " + method);
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index 9b982efb..1a80818 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -343,7 +343,7 @@
/**
* Activity Action: Show settings to manage the user input dictionary.
* <p>
- * Starting with {@link android.os.Build.VERSION_CODES#KEY_LIME_PIE},
+ * Starting with {@link android.os.Build.VERSION_CODES#KITKAT},
* it is guaranteed there will always be an appropriate implementation for this Intent action.
* In prior releases of the platform this was optional, so ensure you safeguard against it.
* <p>
@@ -703,6 +703,20 @@
@SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
public static final String ACTION_CAPTIONING_SETTINGS = "android.settings.CAPTIONING_SETTINGS";
+ /**
+ * Activity Action: Show the top level print settings.
+ * <p>
+ * In some cases, a matching Activity may not exist, so ensure you
+ * safeguard against this.
+ * <p>
+ * Input: Nothing.
+ * <p>
+ * Output: Nothing.
+ */
+ @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
+ public static final String ACTION_PRINT_SETTINGS =
+ "android.settings.ACTION_PRINT_SETTINGS";
+
// End of Intent actions for Settings
/**
@@ -5283,6 +5297,13 @@
"data_stall_alarm_aggressive_delay_in_ms";
/**
+ * The number of milliseconds to allow the provisioning apn to remain active
+ * @hide
+ */
+ public static final String PROVISIONING_APN_ALARM_DELAY_IN_MS =
+ "provisioning_apn_alarm_delay_in_ms";
+
+ /**
* The interval in milliseconds at which to check gprs registration
* after the first registration mismatch of gprs and voice service,
* to detect possible data network registration problems.
diff --git a/core/java/android/security/IKeystoreService.java b/core/java/android/security/IKeystoreService.java
index bf8d4e5..f8bf45b 100644
--- a/core/java/android/security/IKeystoreService.java
+++ b/core/java/android/security/IKeystoreService.java
@@ -444,12 +444,13 @@
}
@Override
- public int is_hardware_backed() throws RemoteException {
+ public int is_hardware_backed(String keyType) throws RemoteException {
Parcel _data = Parcel.obtain();
Parcel _reply = Parcel.obtain();
int _result;
try {
_data.writeInterfaceToken(DESCRIPTOR);
+ _data.writeString(keyType);
mRemote.transact(Stub.TRANSACTION_is_hardware_backed, _data, _reply, 0);
_reply.readException();
_result = _reply.readInt();
@@ -593,7 +594,7 @@
public int duplicate(String srcKey, int srcUid, String destKey, int destUid)
throws RemoteException;
- public int is_hardware_backed() throws RemoteException;
+ public int is_hardware_backed(String string) throws RemoteException;
public int clear_uid(long uid) throws RemoteException;
}
diff --git a/core/java/android/util/MapCollections.java b/core/java/android/util/MapCollections.java
index 09f1f8e..f4a9b0b 100644
--- a/core/java/android/util/MapCollections.java
+++ b/core/java/android/util/MapCollections.java
@@ -328,12 +328,12 @@
@Override
public Object[] toArray() {
- return toArrayHelper(1);
+ return toArrayHelper(0);
}
@Override
public <T> T[] toArray(T[] array) {
- return toArrayHelper(array, 1);
+ return toArrayHelper(array, 0);
}
@Override
diff --git a/core/java/android/net/LinkInfo.aidl b/core/java/android/util/SuperNotCalledException.java
similarity index 75%
copy from core/java/android/net/LinkInfo.aidl
copy to core/java/android/util/SuperNotCalledException.java
index 716674b..1836142 100644
--- a/core/java/android/net/LinkInfo.aidl
+++ b/core/java/android/util/SuperNotCalledException.java
@@ -14,6 +14,14 @@
* limitations under the License.
*/
-package android.net;
-parcelable LinkInfo;
+package android.util;
+
+/**
+ * @hide
+ */
+public final class SuperNotCalledException extends AndroidRuntimeException {
+ public SuperNotCalledException(String msg) {
+ super(msg);
+ }
+}
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index f2b3e89..8616aba 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -57,6 +57,7 @@
import android.util.Pools.SynchronizedPool;
import android.util.Property;
import android.util.SparseArray;
+import android.util.SuperNotCalledException;
import android.util.TypedValue;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.AccessibilityIterators.TextSegmentIterator;
@@ -2204,6 +2205,12 @@
*/
static final int PFLAG3_MEASURE_NEEDED_BEFORE_LAYOUT = 0x8;
+ /**
+ * Flag indicating that an overridden method correctly called down to
+ * the superclass implementation as required by the API spec.
+ */
+ static final int PFLAG3_CALLED_SUPER = 0x10;
+
/* End of masks for mPrivateFlags3 */
@@ -5955,6 +5962,10 @@
// Invalidate too, since the default behavior for views is to be
// be drawn at 50% alpha rather than to change the drawable.
invalidate(true);
+
+ if (!enabled) {
+ cancelPendingInputEvents();
+ }
}
/**
@@ -8834,7 +8845,7 @@
* Change the view's z order in the tree, so it's on top of other sibling
* views. This ordering change may affect layout, if the parent container
* uses an order-dependent layout scheme (e.g., LinearLayout). Prior
- * to {@link android.os.Build.VERSION_CODES#KEY_LIME_PIE} this
+ * to {@link android.os.Build.VERSION_CODES#KITKAT} this
* method should be followed by calls to {@link #requestLayout()} and
* {@link View#invalidate()} on the view's parent to force the parent to redraw
* with the new child ordering.
@@ -12364,6 +12375,61 @@
}
/**
+ * Cancel any deferred high-level input events that were previously posted to the event queue.
+ *
+ * <p>Many views post high-level events such as click handlers to the event queue
+ * to run deferred in order to preserve a desired user experience - clearing visible
+ * pressed states before executing, etc. This method will abort any events of this nature
+ * that are currently in flight.</p>
+ *
+ * <p>Custom views that generate their own high-level deferred input events should override
+ * {@link #onCancelPendingInputEvents()} and remove those pending events from the queue.</p>
+ *
+ * <p>This will also cancel pending input events for any child views.</p>
+ *
+ * <p>Note that this may not be sufficient as a debouncing strategy for clicks in all cases.
+ * This will not impact newer events posted after this call that may occur as a result of
+ * lower-level input events still waiting in the queue. If you are trying to prevent
+ * double-submitted events for the duration of some sort of asynchronous transaction
+ * you should also take other steps to protect against unexpected double inputs e.g. calling
+ * {@link #setEnabled(boolean) setEnabled(false)} and re-enabling the view when
+ * the transaction completes, tracking already submitted transaction IDs, etc.</p>
+ */
+ public final void cancelPendingInputEvents() {
+ dispatchCancelPendingInputEvents();
+ }
+
+ /**
+ * Called by {@link #cancelPendingInputEvents()} to cancel input events in flight.
+ * Overridden by ViewGroup to dispatch. Package scoped to prevent app-side meddling.
+ */
+ void dispatchCancelPendingInputEvents() {
+ mPrivateFlags3 &= ~PFLAG3_CALLED_SUPER;
+ onCancelPendingInputEvents();
+ if ((mPrivateFlags3 & PFLAG3_CALLED_SUPER) != PFLAG3_CALLED_SUPER) {
+ throw new SuperNotCalledException("View " + getClass().getSimpleName() +
+ " did not call through to super.onCancelPendingInputEvents()");
+ }
+ }
+
+ /**
+ * Called as the result of a call to {@link #cancelPendingInputEvents()} on this view or
+ * a parent view.
+ *
+ * <p>This method is responsible for removing any pending high-level input events that were
+ * posted to the event queue to run later. Custom view classes that post their own deferred
+ * high-level events via {@link #post(Runnable)}, {@link #postDelayed(Runnable, long)} or
+ * {@link android.os.Handler} should override this method, call
+ * <code>super.onCancelPendingInputEvents()</code> and remove those callbacks as appropriate.
+ * </p>
+ */
+ public void onCancelPendingInputEvents() {
+ removePerformClickCallback();
+ cancelLongPress();
+ mPrivateFlags3 |= PFLAG3_CALLED_SUPER;
+ }
+
+ /**
* Store this view hierarchy's frozen state into the given container.
*
* @param container The SparseArray in which to save the view's state.
diff --git a/core/java/android/view/ViewGroup.java b/core/java/android/view/ViewGroup.java
index 2d75b06..faeee3f 100644
--- a/core/java/android/view/ViewGroup.java
+++ b/core/java/android/view/ViewGroup.java
@@ -3182,6 +3182,17 @@
}
}
+ @Override
+ void dispatchCancelPendingInputEvents() {
+ super.dispatchCancelPendingInputEvents();
+
+ final View[] children = mChildren;
+ final int count = mChildrenCount;
+ for (int i = 0; i < count; i++) {
+ children[i].dispatchCancelPendingInputEvents();
+ }
+ }
+
/**
* When this property is set to true, this ViewGroup supports static transformations on
* children; this causes
diff --git a/core/java/android/view/ViewParent.java b/core/java/android/view/ViewParent.java
index 656d756..35113db 100644
--- a/core/java/android/view/ViewParent.java
+++ b/core/java/android/view/ViewParent.java
@@ -149,7 +149,7 @@
* Change the z order of the child so it's on top of all other children.
* This ordering change may affect layout, if this container
* uses an order-dependent layout scheme (e.g., LinearLayout). Prior
- * to {@link android.os.Build.VERSION_CODES#KEY_LIME_PIE} this
+ * to {@link android.os.Build.VERSION_CODES#KITKAT} this
* method should be followed by calls to {@link #requestLayout()} and
* {@link View#invalidate()} on this parent to force the parent to redraw
* with the new child ordering.
diff --git a/core/java/android/webkit/WebSettings.java b/core/java/android/webkit/WebSettings.java
index 19492c2..7a38a16 100644
--- a/core/java/android/webkit/WebSettings.java
+++ b/core/java/android/webkit/WebSettings.java
@@ -333,8 +333,11 @@
}
/**
- * Sets whether the WebView loads pages in overview mode. The default is
- * false.
+ * Sets whether the WebView loads pages in overview mode, that is,
+ * zooms out the content to fit on screen by width. This setting is
+ * taken into account when the content width is greater than the width
+ * of the WebView control, for example, when {@link #getUseWideViewPort}
+ * is enabled. The default is false.
*/
public void setLoadWithOverviewMode(boolean overview) {
throw new MustOverrideException();
diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java
index f0e8c4f..8fc3ce3 100644
--- a/core/java/android/webkit/WebView.java
+++ b/core/java/android/webkit/WebView.java
@@ -1070,7 +1070,7 @@
/**
* Exports the contents of this Webview as PDF. Only supported for API levels
- * {@link android.os.Build.VERSION_CODES#KEY_LIME_PIE} and above.
+ * {@link android.os.Build.VERSION_CODES#KITKAT} and above.
*
* TODO(sgurun) the parameter list is stale. Fix it before unhiding.
*
@@ -1123,10 +1123,18 @@
}
/**
- * Sets the initial scale for this WebView. 0 means default. If
- * {@link WebSettings#getUseWideViewPort()} is true, it zooms out all the
- * way. Otherwise it starts with 100%. If initial scale is greater than 0,
- * WebView starts with this value as initial scale.
+ * Sets the initial scale for this WebView. 0 means default.
+ * The behavior for the default scale depends on the state of
+ * {@link WebSettings#getUseWideViewPort()} and
+ * {@link WebSettings#getLoadWithOverviewMode()}.
+ * If the content fits into the WebView control by width, then
+ * the zoom is set to 100%. For wide content, the behavor
+ * depends on the state of {@link WebSettings#getLoadWithOverviewMode()}.
+ * If its value is true, the content will be zoomed out to be fit
+ * by width into the WebView control, otherwise not.
+ *
+ * If initial scale is greater than 0, WebView starts with this value
+ * as initial scale.
* Please note that unlike the scale properties in the viewport meta tag,
* this method doesn't take the screen density into account.
*
diff --git a/core/java/android/widget/AbsListView.java b/core/java/android/widget/AbsListView.java
index c308024..29b7cf2 100644
--- a/core/java/android/widget/AbsListView.java
+++ b/core/java/android/widget/AbsListView.java
@@ -2843,6 +2843,23 @@
return new AdapterContextMenuInfo(view, position, id);
}
+ @Override
+ public void onCancelPendingInputEvents() {
+ super.onCancelPendingInputEvents();
+ if (mPerformClick != null) {
+ removeCallbacks(mPerformClick);
+ }
+ if (mPendingCheckForTap != null) {
+ removeCallbacks(mPendingCheckForTap);
+ }
+ if (mPendingCheckForLongPress != null) {
+ removeCallbacks(mPendingCheckForLongPress);
+ }
+ if (mPendingCheckForKeyLongPress != null) {
+ removeCallbacks(mPendingCheckForKeyLongPress);
+ }
+ }
+
/**
* A base class for Runnables that will check that their view is still attached to
* the original window as when the Runnable was created.
diff --git a/core/java/android/widget/ListView.java b/core/java/android/widget/ListView.java
index 941ddfc..389d9d6 100644
--- a/core/java/android/widget/ListView.java
+++ b/core/java/android/widget/ListView.java
@@ -248,7 +248,7 @@
* <p>
* Note: When first introduced, this method could only be called before
* setting the adapter with {@link #setAdapter(ListAdapter)}. Starting with
- * {@link android.os.Build.VERSION_CODES#KEY_LIME_PIE}, this method may be
+ * {@link android.os.Build.VERSION_CODES#KITKAT}, this method may be
* called at any time. If the ListView's adapter does not extend
* {@link HeaderViewListAdapter}, it will be wrapped with a supporting
* instance of {@link WrapperListAdapter}.
@@ -285,7 +285,7 @@
* <p>
* Note: When first introduced, this method could only be called before
* setting the adapter with {@link #setAdapter(ListAdapter)}. Starting with
- * {@link android.os.Build.VERSION_CODES#KEY_LIME_PIE}, this method may be
+ * {@link android.os.Build.VERSION_CODES#KITKAT}, this method may be
* called at any time. If the ListView's adapter does not extend
* {@link HeaderViewListAdapter}, it will be wrapped with a supporting
* instance of {@link WrapperListAdapter}.
@@ -341,7 +341,7 @@
* <p>
* Note: When first introduced, this method could only be called before
* setting the adapter with {@link #setAdapter(ListAdapter)}. Starting with
- * {@link android.os.Build.VERSION_CODES#KEY_LIME_PIE}, this method may be
+ * {@link android.os.Build.VERSION_CODES#KITKAT}, this method may be
* called at any time. If the ListView's adapter does not extend
* {@link HeaderViewListAdapter}, it will be wrapped with a supporting
* instance of {@link WrapperListAdapter}.
@@ -378,7 +378,7 @@
* <p>
* Note: When first introduced, this method could only be called before
* setting the adapter with {@link #setAdapter(ListAdapter)}. Starting with
- * {@link android.os.Build.VERSION_CODES#KEY_LIME_PIE}, this method may be
+ * {@link android.os.Build.VERSION_CODES#KITKAT}, this method may be
* called at any time. If the ListView's adapter does not extend
* {@link HeaderViewListAdapter}, it will be wrapped with a supporting
* instance of {@link WrapperListAdapter}.
diff --git a/core/java/android/widget/RelativeLayout.java b/core/java/android/widget/RelativeLayout.java
index b9b6b08..92c9b93 100644
--- a/core/java/android/widget/RelativeLayout.java
+++ b/core/java/android/widget/RelativeLayout.java
@@ -477,13 +477,13 @@
if (isWrapContentWidth) {
if (isLayoutRtl()) {
- if (targetSdkVersion < Build.VERSION_CODES.KEY_LIME_PIE) {
+ if (targetSdkVersion < Build.VERSION_CODES.KITKAT) {
width = Math.max(width, myWidth - params.mLeft);
} else {
width = Math.max(width, myWidth - params.mLeft - params.leftMargin);
}
} else {
- if (targetSdkVersion < Build.VERSION_CODES.KEY_LIME_PIE) {
+ if (targetSdkVersion < Build.VERSION_CODES.KITKAT) {
width = Math.max(width, params.mRight);
} else {
width = Math.max(width, params.mRight + params.rightMargin);
@@ -492,7 +492,7 @@
}
if (isWrapContentHeight) {
- if (targetSdkVersion < Build.VERSION_CODES.KEY_LIME_PIE) {
+ if (targetSdkVersion < Build.VERSION_CODES.KITKAT) {
height = Math.max(height, params.mBottom);
} else {
height = Math.max(height, params.mBottom + params.bottomMargin);
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java
index a2d48a8..3c9cc98 100644
--- a/core/java/android/widget/TextView.java
+++ b/core/java/android/widget/TextView.java
@@ -1519,6 +1519,8 @@
* with this TextView. By default there is no associated UndoManager, so null
* is returned. One can be associated with the TextView through
* {@link #setUndoManager(android.content.UndoManager, String)}
+ *
+ * @hide
*/
public final UndoManager getUndoManager() {
return mEditor == null ? null : mEditor.mUndoManager;
@@ -1535,6 +1537,8 @@
* @param tag String tag identifying this particular TextView owner in the
* UndoManager. This is used to keep the correct association with the
* {@link android.content.UndoOwner} of any operations inside of the UndoManager.
+ *
+ * @hide
*/
public final void setUndoManager(UndoManager undoManager, String tag) {
if (undoManager != null) {
diff --git a/core/java/com/android/internal/app/IAppOpsService.aidl b/core/java/com/android/internal/app/IAppOpsService.aidl
index b798a1a..9056641 100644
--- a/core/java/com/android/internal/app/IAppOpsService.aidl
+++ b/core/java/com/android/internal/app/IAppOpsService.aidl
@@ -23,6 +23,7 @@
// These first methods are also called by native code, so must
// be kept in sync with frameworks/native/include/binder/IAppOpsService.h
int checkOperation(int code, int uid, String packageName);
+ int checkPackage(int uid, String packageName);
int noteOperation(int code, int uid, String packageName);
int startOperation(IBinder token, int code, int uid, String packageName);
void finishOperation(IBinder token, int code, int uid, String packageName);
diff --git a/core/java/com/android/internal/app/RestrictionsPinActivity.java b/core/java/com/android/internal/app/RestrictionsPinActivity.java
index 2112474..66585c6 100644
--- a/core/java/com/android/internal/app/RestrictionsPinActivity.java
+++ b/core/java/com/android/internal/app/RestrictionsPinActivity.java
@@ -52,7 +52,7 @@
super.onCreate(icicle);
mUserManager = (UserManager) getSystemService(Context.USER_SERVICE);
- mHasRestrictionsPin = mUserManager.hasRestrictionsPin();
+ mHasRestrictionsPin = mUserManager.hasRestrictionsChallenge();
initUi();
setupAlert();
}
@@ -83,7 +83,7 @@
super.onResume();
setPositiveButtonState(false);
- boolean hasPin = mUserManager.hasRestrictionsPin();
+ boolean hasPin = mUserManager.hasRestrictionsChallenge();
if (hasPin) {
mPinErrorMessage.setVisibility(View.INVISIBLE);
mPinText.setOnEditorActionListener(this);
@@ -100,7 +100,7 @@
private boolean updatePinTimer(int pinTimerMs) {
if (pinTimerMs < 0) {
- pinTimerMs = mUserManager.checkRestrictionsPin(null);
+ pinTimerMs = mUserManager.checkRestrictionsChallenge(null);
}
boolean enableInput;
if (pinTimerMs >= 200) {
@@ -128,7 +128,7 @@
}
protected void performPositiveButtonAction() {
- int result = mUserManager.checkRestrictionsPin(mPinText.getText().toString());
+ int result = mUserManager.checkRestrictionsChallenge(mPinText.getText().toString());
if (result == UserManager.PIN_VERIFICATION_SUCCESS) {
setResult(RESULT_OK);
finish();
diff --git a/core/java/com/android/internal/app/RestrictionsPinSetupActivity.java b/core/java/com/android/internal/app/RestrictionsPinSetupActivity.java
deleted file mode 100644
index f7fc6c6..0000000
--- a/core/java/com/android/internal/app/RestrictionsPinSetupActivity.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * Copyright (C) 2013 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.app;
-
-import android.content.Context;
-import android.os.UserManager;
-import android.text.Editable;
-import android.text.TextUtils;
-import android.view.KeyEvent;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.widget.EditText;
-import android.widget.TextView;
-
-import com.android.internal.R;
-
-/**
- * This activity is launched by Settings and other apps to either create a new PIN or
- * change an existing PIN. The PIN is maintained by UserManager.
- */
-public class RestrictionsPinSetupActivity extends RestrictionsPinActivity {
-
- private EditText mNewPinText;
- private EditText mConfirmPinText;
-
- protected void initUi() {
- AlertController.AlertParams ap = mAlertParams;
- ap.mTitle = getString(R.string.restr_pin_enter_pin);
- ap.mPositiveButtonText = getString(R.string.ok);
- ap.mNegativeButtonText = getString(R.string.cancel);
- LayoutInflater inflater =
- (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
- ap.mView = inflater.inflate(R.layout.restrictions_pin_setup, null);
-
- mPinText = (EditText) ap.mView.findViewById(R.id.pin_text);
- mNewPinText = (EditText) ap.mView.findViewById(R.id.pin_new_text);
- mConfirmPinText = (EditText) ap.mView.findViewById(R.id.pin_confirm_text);
- mNewPinText.addTextChangedListener(this);
- mConfirmPinText.addTextChangedListener(this);
-
- if (!mHasRestrictionsPin) {
- mPinText.setVisibility(View.GONE);
- }
- }
-
- public void onResume() {
- super.onResume();
- setPositiveButtonState(false);
- }
-
- protected boolean verifyingPin() {
- return false;
- }
-
- @Override
- protected void performPositiveButtonAction() {
- if (mHasRestrictionsPin) {
- int result = mUserManager.checkRestrictionsPin(mPinText.getText().toString());
- if (result != UserManager.PIN_VERIFICATION_SUCCESS) {
- // TODO: Set message that existing pin doesn't match
- return;
- }
- }
- if (mUserManager.changeRestrictionsPin(mNewPinText.getText().toString())) {
- // TODO: Send message to PIN recovery agent about the recovery email address
- setResult(RESULT_OK);
- finish();
- }
- }
-
- @Override
- public void beforeTextChanged(CharSequence s, int start, int count, int after) {
- }
-
- @Override
- public void onTextChanged(CharSequence s, int start, int before, int count) {
- CharSequence pin = mPinText.getText();
- CharSequence pin1 = mNewPinText.getText();
- CharSequence pin2 = mConfirmPinText.getText();
- boolean match = pin1 != null && pin2 != null && pin1.length() >= 4
- && pin1.toString().equals(pin2.toString())
- && (!mHasRestrictionsPin || (pin != null && pin.length() >= 4));
- boolean showError = !TextUtils.isEmpty(pin1) && !TextUtils.isEmpty(pin2);
- // TODO: Check recovery email address as well
- setPositiveButtonState(match);
- }
-
- @Override
- public void afterTextChanged(Editable s) {
- }
-
- @Override
- public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
- performPositiveButtonAction();
- return true;
- }
-}
diff --git a/core/java/com/android/internal/widget/ActionBarOverlayLayout.java b/core/java/com/android/internal/widget/ActionBarOverlayLayout.java
index 88ff7e2..5469b63 100644
--- a/core/java/com/android/internal/widget/ActionBarOverlayLayout.java
+++ b/core/java/com/android/internal/widget/ActionBarOverlayLayout.java
@@ -19,7 +19,6 @@
import android.graphics.Canvas;
import android.graphics.drawable.Drawable;
import android.os.Build;
-import android.util.Log;
import android.view.ViewGroup;
import com.android.internal.app.ActionBarImpl;
@@ -85,7 +84,7 @@
ta.recycle();
mIgnoreWindowContentOverlay = context.getApplicationInfo().targetSdkVersion <
- Build.VERSION_CODES.KEY_LIME_PIE;
+ Build.VERSION_CODES.KITKAT;
}
public void setActionBar(ActionBarImpl impl) {
@@ -111,7 +110,7 @@
*/
mIgnoreWindowContentOverlay = overlayMode &&
getContext().getApplicationInfo().targetSdkVersion <
- Build.VERSION_CODES.KEY_LIME_PIE;
+ Build.VERSION_CODES.KITKAT;
}
public void setShowingForActionMode(boolean showing) {
diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml
index 49945f0..83a0c56 100644
--- a/core/res/AndroidManifest.xml
+++ b/core/res/AndroidManifest.xml
@@ -2546,25 +2546,13 @@
android:process=":ui">
</activity>
- <activity android:name="com.android.internal.app.RestrictionsPinSetupActivity"
- android:theme="@style/Theme.Holo.Dialog.Alert"
- android:permission="android.permission.MANAGE_USERS"
- android:excludeFromRecents="true"
- android:windowSoftInputMode="adjustPan"
- android:process=":ui">
- <intent-filter android:priority="100">
- <action android:name="android.intent.action.RESTRICTIONS_PIN_CREATE" />
- <category android:name="android.intent.category.DEFAULT" />
- </intent-filter>
- </activity>
-
<activity android:name="com.android.internal.app.RestrictionsPinActivity"
android:theme="@style/Theme.Holo.Dialog.Alert"
android:excludeFromRecents="true"
android:windowSoftInputMode="adjustPan"
android:process=":ui">
<intent-filter android:priority="100">
- <action android:name="android.intent.action.RESTRICTIONS_PIN_CHALLENGE" />
+ <action android:name="android.intent.action.RESTRICTIONS_CHALLENGE" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
diff --git a/core/res/res/drawable-hdpi/stat_notify_call_mute.png b/core/res/res/drawable-hdpi/stat_notify_call_mute.png
index 7f87ee7..f8f9503 100644
--- a/core/res/res/drawable-hdpi/stat_notify_call_mute.png
+++ b/core/res/res/drawable-hdpi/stat_notify_call_mute.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_speakerphone.png b/core/res/res/drawable-hdpi/stat_sys_speakerphone.png
index 765be61..d5bb37f 100644
--- a/core/res/res/drawable-hdpi/stat_sys_speakerphone.png
+++ b/core/res/res/drawable-hdpi/stat_sys_speakerphone.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/stat_notify_call_mute.png b/core/res/res/drawable-mdpi/stat_notify_call_mute.png
index 58e0cbc..79683c7 100644
--- a/core/res/res/drawable-mdpi/stat_notify_call_mute.png
+++ b/core/res/res/drawable-mdpi/stat_notify_call_mute.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/stat_sys_speakerphone.png b/core/res/res/drawable-mdpi/stat_sys_speakerphone.png
index d82704e..df0597f 100644
--- a/core/res/res/drawable-mdpi/stat_sys_speakerphone.png
+++ b/core/res/res/drawable-mdpi/stat_sys_speakerphone.png
Binary files differ
diff --git a/core/res/res/drawable-sw600dp-hdpi/stat_notify_call_mute.png b/core/res/res/drawable-sw600dp-hdpi/stat_notify_call_mute.png
index b753764..5d4ad05 100644
--- a/core/res/res/drawable-sw600dp-hdpi/stat_notify_call_mute.png
+++ b/core/res/res/drawable-sw600dp-hdpi/stat_notify_call_mute.png
Binary files differ
diff --git a/core/res/res/drawable-sw600dp-hdpi/stat_sys_speakerphone.png b/core/res/res/drawable-sw600dp-hdpi/stat_sys_speakerphone.png
index b47a9f6..66895fa 100644
--- a/core/res/res/drawable-sw600dp-hdpi/stat_sys_speakerphone.png
+++ b/core/res/res/drawable-sw600dp-hdpi/stat_sys_speakerphone.png
Binary files differ
diff --git a/core/res/res/drawable-sw600dp-mdpi/stat_notify_call_mute.png b/core/res/res/drawable-sw600dp-mdpi/stat_notify_call_mute.png
index 951197c..08017ac 100644
--- a/core/res/res/drawable-sw600dp-mdpi/stat_notify_call_mute.png
+++ b/core/res/res/drawable-sw600dp-mdpi/stat_notify_call_mute.png
Binary files differ
diff --git a/core/res/res/drawable-sw600dp-mdpi/stat_sys_speakerphone.png b/core/res/res/drawable-sw600dp-mdpi/stat_sys_speakerphone.png
index 5893db9..276dea1 100644
--- a/core/res/res/drawable-sw600dp-mdpi/stat_sys_speakerphone.png
+++ b/core/res/res/drawable-sw600dp-mdpi/stat_sys_speakerphone.png
Binary files differ
diff --git a/core/res/res/drawable-sw600dp-xhdpi/stat_notify_call_mute.png b/core/res/res/drawable-sw600dp-xhdpi/stat_notify_call_mute.png
index 1d72243..cdef5d9 100644
--- a/core/res/res/drawable-sw600dp-xhdpi/stat_notify_call_mute.png
+++ b/core/res/res/drawable-sw600dp-xhdpi/stat_notify_call_mute.png
Binary files differ
diff --git a/core/res/res/drawable-sw600dp-xhdpi/stat_sys_speakerphone.png b/core/res/res/drawable-sw600dp-xhdpi/stat_sys_speakerphone.png
index 76dee9e..262af38 100644
--- a/core/res/res/drawable-sw600dp-xhdpi/stat_sys_speakerphone.png
+++ b/core/res/res/drawable-sw600dp-xhdpi/stat_sys_speakerphone.png
Binary files differ
diff --git a/core/res/res/drawable-sw600dp-xxhdpi/stat_notify_call_mute.png b/core/res/res/drawable-sw600dp-xxhdpi/stat_notify_call_mute.png
new file mode 100644
index 0000000..13ec34e
--- /dev/null
+++ b/core/res/res/drawable-sw600dp-xxhdpi/stat_notify_call_mute.png
Binary files differ
diff --git a/core/res/res/drawable-sw600dp-xxhdpi/stat_sys_speakerphone.png b/core/res/res/drawable-sw600dp-xxhdpi/stat_sys_speakerphone.png
new file mode 100644
index 0000000..34a4c45
--- /dev/null
+++ b/core/res/res/drawable-sw600dp-xxhdpi/stat_sys_speakerphone.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_notify_call_mute.png b/core/res/res/drawable-xhdpi/stat_notify_call_mute.png
index adbd7b1..e143366 100644
--- a/core/res/res/drawable-xhdpi/stat_notify_call_mute.png
+++ b/core/res/res/drawable-xhdpi/stat_notify_call_mute.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_sys_speakerphone.png b/core/res/res/drawable-xhdpi/stat_sys_speakerphone.png
index 51e648c..f7f7871 100644
--- a/core/res/res/drawable-xhdpi/stat_sys_speakerphone.png
+++ b/core/res/res/drawable-xhdpi/stat_sys_speakerphone.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/stat_notify_call_mute.png b/core/res/res/drawable-xxhdpi/stat_notify_call_mute.png
index 54fc740..8c6176c 100644
--- a/core/res/res/drawable-xxhdpi/stat_notify_call_mute.png
+++ b/core/res/res/drawable-xxhdpi/stat_notify_call_mute.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/stat_sys_speakerphone.png b/core/res/res/drawable-xxhdpi/stat_sys_speakerphone.png
index 40d1a35..a53913f 100644
--- a/core/res/res/drawable-xxhdpi/stat_sys_speakerphone.png
+++ b/core/res/res/drawable-xxhdpi/stat_sys_speakerphone.png
Binary files differ
diff --git a/core/res/res/values-af/strings.xml b/core/res/res/values-af/strings.xml
index 575bf55..59749d4 100644
--- a/core/res/res/values-af/strings.xml
+++ b/core/res/res/values-af/strings.xml
@@ -1449,7 +1449,6 @@
<string name="activity_chooser_view_see_all" msgid="4292569383976636200">"Sien alle"</string>
<string name="activity_chooser_view_dialog_title_default" msgid="4710013864974040615">"Kies aktiwiteit"</string>
<string name="share_action_provider_share_with" msgid="5247684435979149216">"Deel met"</string>
- <string name="status_bar_device_locked" msgid="3092703448690669768">"Toestel gesluit."</string>
<string name="list_delimeter" msgid="3975117572185494152">", "</string>
<string name="sending" msgid="3245653681008218030">"Stuur tans…"</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Begin webblaaier?"</string>
@@ -1569,7 +1568,9 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"Gekanselleer"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"Kon nie inhoud skryf nie"</string>
<string name="reason_unknown" msgid="6048913880184628119">"onbekend"</string>
+ <string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"Voer administrateur-PIN in"</string>
<string name="restr_pin_enter_pin" msgid="3395953421368476103">"Voer PIN in"</string>
+ <string name="restr_pin_incorrect" msgid="8571512003955077924">"Verkeerd"</string>
<string name="restr_pin_enter_old_pin" msgid="1462206225512910757">"Huidige PIN"</string>
<string name="restr_pin_enter_new_pin" msgid="5959606691619959184">"Nuwe PIN"</string>
<string name="restr_pin_confirm_pin" msgid="8501523829633146239">"Bevestig nuwe PIN"</string>
@@ -1577,9 +1578,10 @@
<string name="restr_pin_error_doesnt_match" msgid="2224214190906994548">"PIN\'e kom nie ooreen nie. Probeer weer."</string>
<string name="restr_pin_error_too_short" msgid="8173982756265777792">"PIN is te kort. Moet ten minste 4 syfers wees."</string>
<plurals name="restr_pin_countdown">
- <item quantity="one" msgid="4835639969503729874">"Verkeerde PIN. Probeer weer oor 1 sekonde."</item>
- <item quantity="other" msgid="8030607343223287654">"Verkeerde PIN. Probeer weer oor <xliff:g id="COUNT">%d</xliff:g> sekondes."</item>
+ <item quantity="one" msgid="311050995198548675">"Probeer weer oor 1 sekonde"</item>
+ <item quantity="other" msgid="4730868920742952817">"Probeer weer oor <xliff:g id="COUNT">%d</xliff:g> sekondes"</item>
</plurals>
+ <string name="restr_pin_try_later" msgid="973144472490532377">"Probeer later weer"</string>
<string name="transient_navigation_confirmation" msgid="4907844043611123426">"Sleep rand van skerm om balk te wys"</string>
<string name="transient_navigation_confirmation_long" msgid="8061685920508086697">"Sleep van rand van skerm af om stelselbalk te wys"</string>
</resources>
diff --git a/core/res/res/values-am/strings.xml b/core/res/res/values-am/strings.xml
index 0425180..8e782a3 100644
--- a/core/res/res/values-am/strings.xml
+++ b/core/res/res/values-am/strings.xml
@@ -1449,7 +1449,6 @@
<string name="activity_chooser_view_see_all" msgid="4292569383976636200">"ሁሉንም ተመልከት"</string>
<string name="activity_chooser_view_dialog_title_default" msgid="4710013864974040615">"እንቅስቃሴ ምረጥ"</string>
<string name="share_action_provider_share_with" msgid="5247684435979149216">"ተጋራ ከ"</string>
- <string name="status_bar_device_locked" msgid="3092703448690669768">"መሣሪያ ተቆልፏል።"</string>
<string name="list_delimeter" msgid="3975117572185494152">"፣ "</string>
<string name="sending" msgid="3245653681008218030">"በመላክ ላይ…"</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"ማሰሺያን አስነሳ?"</string>
@@ -1569,7 +1568,9 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"ተትቷል"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"ይዘት መጻፍ ላይ ስህተት"</string>
<string name="reason_unknown" msgid="6048913880184628119">"አይታወቅም"</string>
+ <string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"አስተዳዳሪ ፒን ያስገቡ"</string>
<string name="restr_pin_enter_pin" msgid="3395953421368476103">"ፒን ያስገቡ"</string>
+ <string name="restr_pin_incorrect" msgid="8571512003955077924">"ትክክል አይደለም"</string>
<string name="restr_pin_enter_old_pin" msgid="1462206225512910757">"የአሁኑ ፒን"</string>
<string name="restr_pin_enter_new_pin" msgid="5959606691619959184">"አዲስ ፒን"</string>
<string name="restr_pin_confirm_pin" msgid="8501523829633146239">"አዲስ ፒን ያረጋግጡ"</string>
@@ -1577,9 +1578,10 @@
<string name="restr_pin_error_doesnt_match" msgid="2224214190906994548">"ፒኖች አይዛመዱም። እንደገና ይሞክሩ።"</string>
<string name="restr_pin_error_too_short" msgid="8173982756265777792">"ፒን በጣም አጭር ነው። ቢያንስ 4 አኃዝ መሆን አለበት።"</string>
<plurals name="restr_pin_countdown">
- <item quantity="one" msgid="4835639969503729874">"ትክክል ያልሆነ ፒን። በ1 ሰከንድ ውስጥ እንደገና ይሞክሩ።"</item>
- <item quantity="other" msgid="8030607343223287654">"ትክክል ያልሆነ ፒን። በ<xliff:g id="COUNT">%d</xliff:g> ሰከንዶች ውስጥ እንደገና ይሞክሩ።"</item>
+ <item quantity="one" msgid="311050995198548675">"በ1 ሰከንድ ውስጥ እንደገና ይሞክሩ"</item>
+ <item quantity="other" msgid="4730868920742952817">"በ<xliff:g id="COUNT">%d</xliff:g> ሰከንዶች ውስጥ እንደገና ይሞክሩ"</item>
</plurals>
+ <string name="restr_pin_try_later" msgid="973144472490532377">"ቆይተው እንደገና ይሞክሩ"</string>
<string name="transient_navigation_confirmation" msgid="4907844043611123426">"አሞሌውን ለማሳየት የማያ ገጹ ጠርዝ ላይ ያንሸራትቱ"</string>
<string name="transient_navigation_confirmation_long" msgid="8061685920508086697">"አሞሌውን ለማሳየት ከማያ ገጹ ጠርዝ ጀምረው ያንሸራትቱ"</string>
</resources>
diff --git a/core/res/res/values-ar/strings.xml b/core/res/res/values-ar/strings.xml
index dbd270c..8988e2e 100644
--- a/core/res/res/values-ar/strings.xml
+++ b/core/res/res/values-ar/strings.xml
@@ -1449,7 +1449,6 @@
<string name="activity_chooser_view_see_all" msgid="4292569383976636200">"عرض الكل"</string>
<string name="activity_chooser_view_dialog_title_default" msgid="4710013864974040615">"اختيار نشاط"</string>
<string name="share_action_provider_share_with" msgid="5247684435979149216">"مشاركة مع"</string>
- <string name="status_bar_device_locked" msgid="3092703448690669768">"تم تأمين الجهاز."</string>
<string name="list_delimeter" msgid="3975117572185494152">"، "</string>
<string name="sending" msgid="3245653681008218030">"جارٍ الإرسال..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"تشغيل المتصفح؟"</string>
@@ -1569,7 +1568,9 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"ملغاة"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"حدث خطأ أثناء كتابة المحتوى"</string>
<string name="reason_unknown" msgid="6048913880184628119">"غير معروف"</string>
+ <string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"أدخل رقم التعريف الشخصي للمشرف"</string>
<string name="restr_pin_enter_pin" msgid="3395953421368476103">"إدخال رقم التعريف الشخصي"</string>
+ <string name="restr_pin_incorrect" msgid="8571512003955077924">"غير صحيح"</string>
<string name="restr_pin_enter_old_pin" msgid="1462206225512910757">"رقم التعريف الشخصي الحالي"</string>
<string name="restr_pin_enter_new_pin" msgid="5959606691619959184">"رقم التعريف الشخصي الجديد"</string>
<string name="restr_pin_confirm_pin" msgid="8501523829633146239">"تأكيد رقم التعريف الشخصي الجديد"</string>
@@ -1577,9 +1578,10 @@
<string name="restr_pin_error_doesnt_match" msgid="2224214190906994548">"أرقام التعريف الشخصية لا تتطابق، أعد المحاولة."</string>
<string name="restr_pin_error_too_short" msgid="8173982756265777792">"رقم التعريف الشخصي أقصر مما يلزم، يجب ألا يقل عن 4 أرقام. "</string>
<plurals name="restr_pin_countdown">
- <item quantity="one" msgid="4835639969503729874">"رقم التعريف الشخصي غير صحيح، الرجاء إعادة المحاولة بعد ثانية واحدة."</item>
- <item quantity="other" msgid="8030607343223287654">"رقم التعريف الشخصي غير صحيح، الرجاء إعادة المحاولة بعد <xliff:g id="COUNT">%d</xliff:g> من الثواني."</item>
+ <item quantity="one" msgid="311050995198548675">"أعد المحاولة خلال ثانية واحدة."</item>
+ <item quantity="other" msgid="4730868920742952817">"أعد المحاولة خلال <xliff:g id="COUNT">%d</xliff:g> ثانية"</item>
</plurals>
+ <string name="restr_pin_try_later" msgid="973144472490532377">"أعد المحاولة لاحقًا"</string>
<string name="transient_navigation_confirmation" msgid="4907844043611123426">"مرر سريعًا لحافة الشاشة لإظهار الشريط"</string>
<string name="transient_navigation_confirmation_long" msgid="8061685920508086697">"مرر سريعًا من حافة الشاشة لإظهار شريط النظام"</string>
</resources>
diff --git a/core/res/res/values-az-rAZ/strings.xml b/core/res/res/values-az-rAZ/strings.xml
index e6d8c9b..839ac38 100644
--- a/core/res/res/values-az-rAZ/strings.xml
+++ b/core/res/res/values-az-rAZ/strings.xml
@@ -1449,7 +1449,6 @@
<string name="activity_chooser_view_see_all" msgid="4292569383976636200">"Hamısını seçın"</string>
<string name="activity_chooser_view_dialog_title_default" msgid="4710013864974040615">"Fəaliyyəti seçin"</string>
<string name="share_action_provider_share_with" msgid="5247684435979149216">"Bununla paylaşın"</string>
- <string name="status_bar_device_locked" msgid="3092703448690669768">"Cihaz kilidləndi."</string>
<string name="list_delimeter" msgid="3975117572185494152">", "</string>
<string name="sending" msgid="3245653681008218030">"Göndərilir..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Brauzer işə salınsın?"</string>
@@ -1569,7 +1568,9 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"Ləğv edildi"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"Kontent yazmna xətası"</string>
<string name="reason_unknown" msgid="6048913880184628119">"naməlum"</string>
+ <string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"Administrator PIN kodunu daxil edin"</string>
<string name="restr_pin_enter_pin" msgid="3395953421368476103">"PIN daxil edin"</string>
+ <string name="restr_pin_incorrect" msgid="8571512003955077924">"Səhv"</string>
<string name="restr_pin_enter_old_pin" msgid="1462206225512910757">"Cari PIN"</string>
<string name="restr_pin_enter_new_pin" msgid="5959606691619959184">"Yeni PIN"</string>
<string name="restr_pin_confirm_pin" msgid="8501523829633146239">"Yeni PIN\'i təsdiq edin"</string>
@@ -1577,9 +1578,10 @@
<string name="restr_pin_error_doesnt_match" msgid="2224214190906994548">"PİN uyğun gəlmir. Yenidən cəhd edin."</string>
<string name="restr_pin_error_too_short" msgid="8173982756265777792">"PİN çox qısadır. Ən azı 4 rəqəm olmalıdır."</string>
<plurals name="restr_pin_countdown">
- <item quantity="one" msgid="4835639969503729874">"Yanlış PİN. 1 saniyə sonra təkrar sınayın."</item>
- <item quantity="other" msgid="8030607343223287654">"Yanlış PİN. <xliff:g id="COUNT">%d</xliff:g> saniyə sonra təkrar sınayın."</item>
+ <item quantity="one" msgid="311050995198548675">"1 saniyə sonra təkrar yoxlayın"</item>
+ <item quantity="other" msgid="4730868920742952817">"<xliff:g id="COUNT">%d</xliff:g> saniyə sonra təkrar yoxlayın"</item>
</plurals>
+ <string name="restr_pin_try_later" msgid="973144472490532377">"Daha sonra yenidən yoxlayın."</string>
<string name="transient_navigation_confirmation" msgid="4907844043611123426">"Paneli göstərmək üçün ekranın küncünü sürüşdürün"</string>
<string name="transient_navigation_confirmation_long" msgid="8061685920508086697">"Sistem panelini göstərmək üçün ekranın küncündən sürüşdürün"</string>
</resources>
diff --git a/core/res/res/values-be/strings.xml b/core/res/res/values-be/strings.xml
index d3782e0..cc799dfd 100644
--- a/core/res/res/values-be/strings.xml
+++ b/core/res/res/values-be/strings.xml
@@ -1475,7 +1475,6 @@
<string name="activity_chooser_view_see_all" msgid="4292569383976636200">"Прагледзець усё"</string>
<string name="activity_chooser_view_dialog_title_default" msgid="4710013864974040615">"Выберыце працэс"</string>
<string name="share_action_provider_share_with" msgid="5247684435979149216">"Апублікаваць з дапамогай"</string>
- <string name="status_bar_device_locked" msgid="3092703448690669768">"Прылада заблакаваная."</string>
<string name="list_delimeter" msgid="3975117572185494152">", "</string>
<string name="sending" msgid="3245653681008218030">"Адпраўка..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Запусцiць браўзер?"</string>
@@ -1639,8 +1638,12 @@
<skip />
<!-- no translation found for reason_unknown (6048913880184628119) -->
<skip />
+ <!-- no translation found for restr_pin_enter_admin_pin (783643731895143970) -->
+ <skip />
<!-- no translation found for restr_pin_enter_pin (3395953421368476103) -->
<skip />
+ <!-- no translation found for restr_pin_incorrect (8571512003955077924) -->
+ <skip />
<!-- no translation found for restr_pin_enter_old_pin (1462206225512910757) -->
<skip />
<!-- no translation found for restr_pin_enter_new_pin (5959606691619959184) -->
@@ -1653,8 +1656,10 @@
<skip />
<!-- no translation found for restr_pin_error_too_short (8173982756265777792) -->
<skip />
- <!-- no translation found for restr_pin_countdown:one (4835639969503729874) -->
- <!-- no translation found for restr_pin_countdown:other (8030607343223287654) -->
+ <!-- no translation found for restr_pin_countdown:one (311050995198548675) -->
+ <!-- no translation found for restr_pin_countdown:other (4730868920742952817) -->
+ <!-- no translation found for restr_pin_try_later (973144472490532377) -->
+ <skip />
<!-- no translation found for transient_navigation_confirmation (4907844043611123426) -->
<skip />
<!-- no translation found for transient_navigation_confirmation_long (8061685920508086697) -->
diff --git a/core/res/res/values-bg/strings.xml b/core/res/res/values-bg/strings.xml
index 3bb818b..b9cb281 100644
--- a/core/res/res/values-bg/strings.xml
+++ b/core/res/res/values-bg/strings.xml
@@ -1449,7 +1449,6 @@
<string name="activity_chooser_view_see_all" msgid="4292569383976636200">"Вижте всички"</string>
<string name="activity_chooser_view_dialog_title_default" msgid="4710013864974040615">"Избор на активност"</string>
<string name="share_action_provider_share_with" msgid="5247684435979149216">"Споделяне със:"</string>
- <string name="status_bar_device_locked" msgid="3092703448690669768">"Устройството е заключено."</string>
<string name="list_delimeter" msgid="3975117572185494152">", "</string>
<string name="sending" msgid="3245653681008218030">"Изпраща се..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Да се стартира ли браузърът?"</string>
@@ -1569,7 +1568,9 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"Анулирано"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"Грешка при записване на съдържанието"</string>
<string name="reason_unknown" msgid="6048913880184628119">"неизвестно"</string>
+ <string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"Въведете ПИН кода на администратор"</string>
<string name="restr_pin_enter_pin" msgid="3395953421368476103">"Въведете ПИН кода"</string>
+ <string name="restr_pin_incorrect" msgid="8571512003955077924">"Неправилно"</string>
<string name="restr_pin_enter_old_pin" msgid="1462206225512910757">"Текущ ПИН код"</string>
<string name="restr_pin_enter_new_pin" msgid="5959606691619959184">"Нов ПИН код"</string>
<string name="restr_pin_confirm_pin" msgid="8501523829633146239">"Потвърждаване на новия ПИН код"</string>
@@ -1577,9 +1578,10 @@
<string name="restr_pin_error_doesnt_match" msgid="2224214190906994548">"ПИН кодовете не са идентични. Опитайте отново."</string>
<string name="restr_pin_error_too_short" msgid="8173982756265777792">"ПИН кодът е твърде кратък. Трябва да е поне 4 цифри."</string>
<plurals name="restr_pin_countdown">
- <item quantity="one" msgid="4835639969503729874">"Неправилен ПИН код. Опитайте отново след 1 секунда."</item>
- <item quantity="other" msgid="8030607343223287654">"Неправилен ПИН код. Опитайте отново след <xliff:g id="COUNT">%d</xliff:g> секунди."</item>
+ <item quantity="one" msgid="311050995198548675">"Опитайте отново след 1 секунда"</item>
+ <item quantity="other" msgid="4730868920742952817">"Опитайте отново след <xliff:g id="COUNT">%d</xliff:g> секунди"</item>
</plurals>
+ <string name="restr_pin_try_later" msgid="973144472490532377">"Опитайте отново по-късно"</string>
<string name="transient_navigation_confirmation" msgid="4907844043611123426">"За показв. на лентата прек. пръст по ръба на екрана"</string>
<string name="transient_navigation_confirmation_long" msgid="8061685920508086697">"Прекарайте пръст от ръба на екрана, за да се покаже системната лента"</string>
</resources>
diff --git a/core/res/res/values-ca/strings.xml b/core/res/res/values-ca/strings.xml
index 3d6315f..4ed0664 100644
--- a/core/res/res/values-ca/strings.xml
+++ b/core/res/res/values-ca/strings.xml
@@ -1449,7 +1449,6 @@
<string name="activity_chooser_view_see_all" msgid="4292569383976636200">"Mostra-les totes"</string>
<string name="activity_chooser_view_dialog_title_default" msgid="4710013864974040615">"Selecció de l\'activitat"</string>
<string name="share_action_provider_share_with" msgid="5247684435979149216">"Comparteix amb"</string>
- <string name="status_bar_device_locked" msgid="3092703448690669768">"Dispositiu bloquejat."</string>
<string name="list_delimeter" msgid="3975117572185494152">", "</string>
<string name="sending" msgid="3245653681008218030">"S\'està enviant…"</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Vols iniciar el navegador?"</string>
@@ -1569,7 +1568,9 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"Cancel·lada"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"Error en escriure el contingut"</string>
<string name="reason_unknown" msgid="6048913880184628119">"desconegut"</string>
+ <string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"Introdueix el PIN d\'administrador"</string>
<string name="restr_pin_enter_pin" msgid="3395953421368476103">"Introdueix el PIN"</string>
+ <string name="restr_pin_incorrect" msgid="8571512003955077924">"Incorrecte"</string>
<string name="restr_pin_enter_old_pin" msgid="1462206225512910757">"PIN actual"</string>
<string name="restr_pin_enter_new_pin" msgid="5959606691619959184">"PIN nou"</string>
<string name="restr_pin_confirm_pin" msgid="8501523829633146239">"Confirma el PIN nou"</string>
@@ -1577,9 +1578,10 @@
<string name="restr_pin_error_doesnt_match" msgid="2224214190906994548">"Els PIN no coincideixen. Torna-ho a provar."</string>
<string name="restr_pin_error_too_short" msgid="8173982756265777792">"El PIN és massa curt. Ha de tenir quatre dígits com a mínim."</string>
<plurals name="restr_pin_countdown">
- <item quantity="one" msgid="4835639969503729874">"PIN incorrecte. Torna-ho a provar d\'aquí a 1 segon."</item>
- <item quantity="other" msgid="8030607343223287654">"PIN incorrecte. Torna-ho a provar d\'aquí a <xliff:g id="COUNT">%d</xliff:g> segons."</item>
+ <item quantity="one" msgid="311050995198548675">"Torna-ho a provar d\'aquí a 1 segon"</item>
+ <item quantity="other" msgid="4730868920742952817">"Torna-ho a provar d\'aquí a <xliff:g id="COUNT">%d</xliff:g> segons"</item>
</plurals>
+ <string name="restr_pin_try_later" msgid="973144472490532377">"Torna-ho a provar més tard"</string>
<string name="transient_navigation_confirmation" msgid="4907844043611123426">"Llisca des de vora per mostrar barra"</string>
<string name="transient_navigation_confirmation_long" msgid="8061685920508086697">"Fes lliscar el dit des de la vora de la pantalla perquè es mostri la barra del sistema"</string>
</resources>
diff --git a/core/res/res/values-cs/strings.xml b/core/res/res/values-cs/strings.xml
index 0d0e95c..b71ff18 100644
--- a/core/res/res/values-cs/strings.xml
+++ b/core/res/res/values-cs/strings.xml
@@ -1449,7 +1449,6 @@
<string name="activity_chooser_view_see_all" msgid="4292569383976636200">"Zobrazit vše"</string>
<string name="activity_chooser_view_dialog_title_default" msgid="4710013864974040615">"Vybrat aktivitu"</string>
<string name="share_action_provider_share_with" msgid="5247684435979149216">"Sdílet s"</string>
- <string name="status_bar_device_locked" msgid="3092703448690669768">"Zařízení je uzamčeno."</string>
<string name="list_delimeter" msgid="3975117572185494152">", "</string>
<string name="sending" msgid="3245653681008218030">"Odesílání..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Spustit prohlížeč?"</string>
@@ -1569,7 +1568,9 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"Zrušeno"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"Při zápisu obsahu došlo k chybě"</string>
<string name="reason_unknown" msgid="6048913880184628119">"neznámé"</string>
+ <string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"Zadejte PIN administrátora"</string>
<string name="restr_pin_enter_pin" msgid="3395953421368476103">"Zadejte kód PIN"</string>
+ <string name="restr_pin_incorrect" msgid="8571512003955077924">"Nesprávné"</string>
<string name="restr_pin_enter_old_pin" msgid="1462206225512910757">"Aktuální kód PIN"</string>
<string name="restr_pin_enter_new_pin" msgid="5959606691619959184">"Nový kód PIN"</string>
<string name="restr_pin_confirm_pin" msgid="8501523829633146239">"Potvrďte nový PIN"</string>
@@ -1577,9 +1578,10 @@
<string name="restr_pin_error_doesnt_match" msgid="2224214190906994548">"Kódy PIN se neshodují. Zkuste to znovu."</string>
<string name="restr_pin_error_too_short" msgid="8173982756265777792">"Kód PIN je příliš krátký. Musí mít alespoň čtyři číslice."</string>
<plurals name="restr_pin_countdown">
- <item quantity="one" msgid="4835639969503729874">"Nesprávný kód PIN. Zkuste to znovu za jednu sekundu."</item>
- <item quantity="other" msgid="8030607343223287654">"Nesprávný kód PIN. Zkuste to znovu za <xliff:g id="COUNT">%d</xliff:g> s."</item>
+ <item quantity="one" msgid="311050995198548675">"Zkuste to znovu za 1 s"</item>
+ <item quantity="other" msgid="4730868920742952817">"Zkuste to znovu za <xliff:g id="COUNT">%d</xliff:g> s"</item>
</plurals>
+ <string name="restr_pin_try_later" msgid="973144472490532377">"Zkuste to znovu později"</string>
<string name="transient_navigation_confirmation" msgid="4907844043611123426">"Panel zobrazíte přejetím kraje obr."</string>
<string name="transient_navigation_confirmation_long" msgid="8061685920508086697">"Systémový panel zobrazíte přejetím přes okraj obrazovky"</string>
</resources>
diff --git a/core/res/res/values-da/strings.xml b/core/res/res/values-da/strings.xml
index 36272ab7..7536252 100644
--- a/core/res/res/values-da/strings.xml
+++ b/core/res/res/values-da/strings.xml
@@ -1449,7 +1449,6 @@
<string name="activity_chooser_view_see_all" msgid="4292569383976636200">"Se alle"</string>
<string name="activity_chooser_view_dialog_title_default" msgid="4710013864974040615">"Vælg aktivitet"</string>
<string name="share_action_provider_share_with" msgid="5247684435979149216">"Del med"</string>
- <string name="status_bar_device_locked" msgid="3092703448690669768">"Enhed låst."</string>
<string name="list_delimeter" msgid="3975117572185494152">", "</string>
<string name="sending" msgid="3245653681008218030">"Sender..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Vil du starte browseren?"</string>
@@ -1569,7 +1568,9 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"Annulleret"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"Fejl ved skrivning af indhold"</string>
<string name="reason_unknown" msgid="6048913880184628119">"ukendt"</string>
+ <string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"Indtast administratorpinkoden"</string>
<string name="restr_pin_enter_pin" msgid="3395953421368476103">"Indtast pinkode"</string>
+ <string name="restr_pin_incorrect" msgid="8571512003955077924">"Forkert"</string>
<string name="restr_pin_enter_old_pin" msgid="1462206225512910757">"Aktuel pinkode:"</string>
<string name="restr_pin_enter_new_pin" msgid="5959606691619959184">"Ny pinkode"</string>
<string name="restr_pin_confirm_pin" msgid="8501523829633146239">"Bekræft den nye pinkode"</string>
@@ -1577,9 +1578,10 @@
<string name="restr_pin_error_doesnt_match" msgid="2224214190906994548">"Pinkoderne stemmer ikke overens. Prøv igen."</string>
<string name="restr_pin_error_too_short" msgid="8173982756265777792">"Pinkoden er for kort. Den skal være på mindst 4 tal."</string>
<plurals name="restr_pin_countdown">
- <item quantity="one" msgid="4835639969503729874">"Forkert pinkode. Prøv igen om 1 sekund."</item>
- <item quantity="other" msgid="8030607343223287654">"Forkert pinkode. Prøv igen om <xliff:g id="COUNT">%d</xliff:g> sekunder."</item>
+ <item quantity="one" msgid="311050995198548675">"Prøv igen om 1 sekund"</item>
+ <item quantity="other" msgid="4730868920742952817">"Prøv igen om <xliff:g id="COUNT">%d</xliff:g> sekunder"</item>
</plurals>
+ <string name="restr_pin_try_later" msgid="973144472490532377">"Prøv igen senere"</string>
<string name="transient_navigation_confirmation" msgid="4907844043611123426">"Stryg fra skærmkanten for at se bjælken"</string>
<string name="transient_navigation_confirmation_long" msgid="8061685920508086697">"Stryg med fingeren fra skærmens kant for at se systembjælken"</string>
</resources>
diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml
index 863c2c0..2185a42 100644
--- a/core/res/res/values-de/strings.xml
+++ b/core/res/res/values-de/strings.xml
@@ -1449,7 +1449,6 @@
<string name="activity_chooser_view_see_all" msgid="4292569383976636200">"Alle anzeigen"</string>
<string name="activity_chooser_view_dialog_title_default" msgid="4710013864974040615">"Aktivität wählen"</string>
<string name="share_action_provider_share_with" msgid="5247684435979149216">"Teilen mit"</string>
- <string name="status_bar_device_locked" msgid="3092703448690669768">"Gerät gesperrt"</string>
<string name="list_delimeter" msgid="3975117572185494152">", "</string>
<string name="sending" msgid="3245653681008218030">"Wird gesendet..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Browser starten?"</string>
@@ -1569,7 +1568,9 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"Abgebrochen"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"Fehler beim Schreiben von Inhalten"</string>
<string name="reason_unknown" msgid="6048913880184628119">"Unbekannt"</string>
+ <string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"Administrator-PIN eingeben"</string>
<string name="restr_pin_enter_pin" msgid="3395953421368476103">"PIN eingeben"</string>
+ <string name="restr_pin_incorrect" msgid="8571512003955077924">"Falsch"</string>
<string name="restr_pin_enter_old_pin" msgid="1462206225512910757">"Aktuelle PIN"</string>
<string name="restr_pin_enter_new_pin" msgid="5959606691619959184">"Neue PIN"</string>
<string name="restr_pin_confirm_pin" msgid="8501523829633146239">"Neue PIN bestätigen"</string>
@@ -1577,9 +1578,10 @@
<string name="restr_pin_error_doesnt_match" msgid="2224214190906994548">"Die PINs stimmen nicht überein. Bitte versuchen Sie es erneut."</string>
<string name="restr_pin_error_too_short" msgid="8173982756265777792">"Die PIN ist zu kurz. Sie muss mindestens 4 Ziffern umfassen."</string>
<plurals name="restr_pin_countdown">
- <item quantity="one" msgid="4835639969503729874">"Falsche PIN. In 1 Sek. erneut versuchen."</item>
- <item quantity="other" msgid="8030607343223287654">"Falsche PIN. In <xliff:g id="COUNT">%d</xliff:g> Sek. erneut versuchen."</item>
+ <item quantity="one" msgid="311050995198548675">"In 1 Sek. wiederholen"</item>
+ <item quantity="other" msgid="4730868920742952817">"In <xliff:g id="COUNT">%d</xliff:g> Sek. wiederholen"</item>
</plurals>
+ <string name="restr_pin_try_later" msgid="973144472490532377">"Später erneut versuchen"</string>
<string name="transient_navigation_confirmation" msgid="4907844043611123426">"Zum Einblenden der Leiste vom Rand weg wischen"</string>
<string name="transient_navigation_confirmation_long" msgid="8061685920508086697">"Zum Einblenden der Systemleiste vom Rand weg wischen"</string>
</resources>
diff --git a/core/res/res/values-el/strings.xml b/core/res/res/values-el/strings.xml
index be12c74..9fb21e6 100644
--- a/core/res/res/values-el/strings.xml
+++ b/core/res/res/values-el/strings.xml
@@ -1449,7 +1449,6 @@
<string name="activity_chooser_view_see_all" msgid="4292569383976636200">"Εμφάνιση όλων"</string>
<string name="activity_chooser_view_dialog_title_default" msgid="4710013864974040615">"Επιλογή δραστηριότητας"</string>
<string name="share_action_provider_share_with" msgid="5247684435979149216">"Κοινή χρήση με"</string>
- <string name="status_bar_device_locked" msgid="3092703448690669768">"Η συσκευή κλειδώθηκε."</string>
<string name="list_delimeter" msgid="3975117572185494152">", "</string>
<string name="sending" msgid="3245653681008218030">"Γίνεται αποστολή…"</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Εκκίνηση προγράμματος περιήγησης;"</string>
@@ -1569,7 +1568,9 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"Ακυρώθηκε"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"Σφάλμα κατά την εγγραφή περιεχομένου"</string>
<string name="reason_unknown" msgid="6048913880184628119">"άγνωστο"</string>
+ <string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"Εισαγάγετε κωδικό PIN διαχειριστή"</string>
<string name="restr_pin_enter_pin" msgid="3395953421368476103">"Εισαγωγή PIN"</string>
+ <string name="restr_pin_incorrect" msgid="8571512003955077924">"Εσφαλμένο"</string>
<string name="restr_pin_enter_old_pin" msgid="1462206225512910757">"Ισχύων κωδικός PIN"</string>
<string name="restr_pin_enter_new_pin" msgid="5959606691619959184">"Νέος κωδικός PIN"</string>
<string name="restr_pin_confirm_pin" msgid="8501523829633146239">"Επιβεβαίωση νέου κωδικού PIN"</string>
@@ -1577,9 +1578,10 @@
<string name="restr_pin_error_doesnt_match" msgid="2224214190906994548">"Τα PIN δεν συμφωνούν. Προσπαθήστε ξανά."</string>
<string name="restr_pin_error_too_short" msgid="8173982756265777792">"Το PIN είναι υπερβολικά μικρό. Πρέπει να έχει μέγεθος τουλάχιστον 4 χαρακτήρων."</string>
<plurals name="restr_pin_countdown">
- <item quantity="one" msgid="4835639969503729874">"Λάθος PIN. Προσπαθήστε ξανά σε 1 δευτερόλεπτο."</item>
- <item quantity="other" msgid="8030607343223287654">"Λάθος PIN. Προσπαθήστε ξανά σε <xliff:g id="COUNT">%d</xliff:g> δευτερόλεπτα."</item>
+ <item quantity="one" msgid="311050995198548675">"Επανάληψη σε 1 δευτ."</item>
+ <item quantity="other" msgid="4730868920742952817">"Επανάληψη σε <xliff:g id="COUNT">%d</xliff:g> δευτ."</item>
</plurals>
+ <string name="restr_pin_try_later" msgid="973144472490532377">"Δοκιμάστε ξανά αργότερα"</string>
<string name="transient_navigation_confirmation" msgid="4907844043611123426">"Σύρετε την άκρη για εμφάν.γραμμής"</string>
<string name="transient_navigation_confirmation_long" msgid="8061685920508086697">"Σύρετε από την άκρη της οθόνης για να εμφανίσετε τη γραμμή συστήματος"</string>
</resources>
diff --git a/core/res/res/values-en-rGB/strings.xml b/core/res/res/values-en-rGB/strings.xml
index 5b431fd..936062b 100644
--- a/core/res/res/values-en-rGB/strings.xml
+++ b/core/res/res/values-en-rGB/strings.xml
@@ -1449,7 +1449,6 @@
<string name="activity_chooser_view_see_all" msgid="4292569383976636200">"See all"</string>
<string name="activity_chooser_view_dialog_title_default" msgid="4710013864974040615">"Choose activity"</string>
<string name="share_action_provider_share_with" msgid="5247684435979149216">"Share with"</string>
- <string name="status_bar_device_locked" msgid="3092703448690669768">"Device locked."</string>
<string name="list_delimeter" msgid="3975117572185494152">", "</string>
<string name="sending" msgid="3245653681008218030">"Sending…"</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Launch Browser?"</string>
@@ -1569,7 +1568,9 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"Cancelled"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"Error writing content"</string>
<string name="reason_unknown" msgid="6048913880184628119">"unknown"</string>
+ <string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"Enter administrator PIN"</string>
<string name="restr_pin_enter_pin" msgid="3395953421368476103">"Enter PIN"</string>
+ <string name="restr_pin_incorrect" msgid="8571512003955077924">"Incorrect"</string>
<string name="restr_pin_enter_old_pin" msgid="1462206225512910757">"Current PIN:"</string>
<string name="restr_pin_enter_new_pin" msgid="5959606691619959184">"New PIN"</string>
<string name="restr_pin_confirm_pin" msgid="8501523829633146239">"Confirm new PIN"</string>
@@ -1577,9 +1578,10 @@
<string name="restr_pin_error_doesnt_match" msgid="2224214190906994548">"PINs don\'t match. Try again."</string>
<string name="restr_pin_error_too_short" msgid="8173982756265777792">"PIN is too short. Must be at least 4 digits."</string>
<plurals name="restr_pin_countdown">
- <item quantity="one" msgid="4835639969503729874">"Incorrect PIN. Try again in 1 second."</item>
- <item quantity="other" msgid="8030607343223287654">"Incorrect PIN. Try again in <xliff:g id="COUNT">%d</xliff:g> seconds."</item>
+ <item quantity="one" msgid="311050995198548675">"Try again in 1 second"</item>
+ <item quantity="other" msgid="4730868920742952817">"Try again in <xliff:g id="COUNT">%d</xliff:g> seconds"</item>
</plurals>
+ <string name="restr_pin_try_later" msgid="973144472490532377">"Try again later"</string>
<string name="transient_navigation_confirmation" msgid="4907844043611123426">"Swipe edge of screen to reveal bar"</string>
<string name="transient_navigation_confirmation_long" msgid="8061685920508086697">"Swipe from edge of screen to reveal system bar"</string>
</resources>
diff --git a/core/res/res/values-en-rIN/strings.xml b/core/res/res/values-en-rIN/strings.xml
index 5b431fd..936062b 100644
--- a/core/res/res/values-en-rIN/strings.xml
+++ b/core/res/res/values-en-rIN/strings.xml
@@ -1449,7 +1449,6 @@
<string name="activity_chooser_view_see_all" msgid="4292569383976636200">"See all"</string>
<string name="activity_chooser_view_dialog_title_default" msgid="4710013864974040615">"Choose activity"</string>
<string name="share_action_provider_share_with" msgid="5247684435979149216">"Share with"</string>
- <string name="status_bar_device_locked" msgid="3092703448690669768">"Device locked."</string>
<string name="list_delimeter" msgid="3975117572185494152">", "</string>
<string name="sending" msgid="3245653681008218030">"Sending…"</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Launch Browser?"</string>
@@ -1569,7 +1568,9 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"Cancelled"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"Error writing content"</string>
<string name="reason_unknown" msgid="6048913880184628119">"unknown"</string>
+ <string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"Enter administrator PIN"</string>
<string name="restr_pin_enter_pin" msgid="3395953421368476103">"Enter PIN"</string>
+ <string name="restr_pin_incorrect" msgid="8571512003955077924">"Incorrect"</string>
<string name="restr_pin_enter_old_pin" msgid="1462206225512910757">"Current PIN:"</string>
<string name="restr_pin_enter_new_pin" msgid="5959606691619959184">"New PIN"</string>
<string name="restr_pin_confirm_pin" msgid="8501523829633146239">"Confirm new PIN"</string>
@@ -1577,9 +1578,10 @@
<string name="restr_pin_error_doesnt_match" msgid="2224214190906994548">"PINs don\'t match. Try again."</string>
<string name="restr_pin_error_too_short" msgid="8173982756265777792">"PIN is too short. Must be at least 4 digits."</string>
<plurals name="restr_pin_countdown">
- <item quantity="one" msgid="4835639969503729874">"Incorrect PIN. Try again in 1 second."</item>
- <item quantity="other" msgid="8030607343223287654">"Incorrect PIN. Try again in <xliff:g id="COUNT">%d</xliff:g> seconds."</item>
+ <item quantity="one" msgid="311050995198548675">"Try again in 1 second"</item>
+ <item quantity="other" msgid="4730868920742952817">"Try again in <xliff:g id="COUNT">%d</xliff:g> seconds"</item>
</plurals>
+ <string name="restr_pin_try_later" msgid="973144472490532377">"Try again later"</string>
<string name="transient_navigation_confirmation" msgid="4907844043611123426">"Swipe edge of screen to reveal bar"</string>
<string name="transient_navigation_confirmation_long" msgid="8061685920508086697">"Swipe from edge of screen to reveal system bar"</string>
</resources>
diff --git a/core/res/res/values-es-rUS/strings.xml b/core/res/res/values-es-rUS/strings.xml
index ee051db..b91438d 100644
--- a/core/res/res/values-es-rUS/strings.xml
+++ b/core/res/res/values-es-rUS/strings.xml
@@ -360,8 +360,8 @@
<string name="permdesc_bindAccessibilityService" msgid="7034615928609331368">"Permite al propietario vincularse a la interfaz de nivel superior de un servicio de accesibilidad. Las aplicaciones normales no deberían necesitar este permiso."</string>
<string name="permlab_bindPrintService" msgid="8462815179572748761">"vincular a un servicio de impresión"</string>
<string name="permdesc_bindPrintService" msgid="7960067623209111135">"Permite al propietario vincularse a la interfaz de nivel superior de un servicio de impresión. Las aplicaciones normales no deberían necesitar este permiso."</string>
- <string name="permlab_bindPrintSpoolerService" msgid="6807762783744125954">"Vincular a un servicio de administrador de trabajos de impresión"</string>
- <string name="permdesc_bindPrintSpoolerService" msgid="3680552285933318372">"Permite al propietario vincularse con la interfaz de nivel superior de un servicio de administrador de trabajos de impresión. Las aplicaciones normales no deberían necesitar este permiso."</string>
+ <string name="permlab_bindPrintSpoolerService" msgid="6807762783744125954">"Vincular a un servicio de administración de trabajos de impresión"</string>
+ <string name="permdesc_bindPrintSpoolerService" msgid="3680552285933318372">"Permite al propietario vincularse con la interfaz de nivel superior de un servicio de administración de trabajos de impresión. Las aplicaciones normales no deberían necesitar este permiso."</string>
<string name="permlab_bindNfcService" msgid="2752731300419410724">"Vincular con servicio NFC"</string>
<string name="permdesc_bindNfcService" msgid="6120647629174066862">"Permite vincular con aplicaciones que emulen tarjetas NFC. Las aplicaciones normales no deberían necesitar este permiso."</string>
<string name="permlab_bindTextService" msgid="7358378401915287938">"vincular a un servicio de texto"</string>
@@ -1449,7 +1449,6 @@
<string name="activity_chooser_view_see_all" msgid="4292569383976636200">"Ver todas"</string>
<string name="activity_chooser_view_dialog_title_default" msgid="4710013864974040615">"Elige actividad"</string>
<string name="share_action_provider_share_with" msgid="5247684435979149216">"Compartir con"</string>
- <string name="status_bar_device_locked" msgid="3092703448690669768">"Dispositivo bloqueado"</string>
<string name="list_delimeter" msgid="3975117572185494152">", "</string>
<string name="sending" msgid="3245653681008218030">"Enviando..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"¿Deseas iniciar el navegador?"</string>
@@ -1569,7 +1568,9 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"Cancelada"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"Error al escribir contenido"</string>
<string name="reason_unknown" msgid="6048913880184628119">"desconocido"</string>
+ <string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"Ingresar PIN de administrador"</string>
<string name="restr_pin_enter_pin" msgid="3395953421368476103">"Ingresar PIN"</string>
+ <string name="restr_pin_incorrect" msgid="8571512003955077924">"Incorrecto"</string>
<string name="restr_pin_enter_old_pin" msgid="1462206225512910757">"PIN actual"</string>
<string name="restr_pin_enter_new_pin" msgid="5959606691619959184">"PIN nuevo"</string>
<string name="restr_pin_confirm_pin" msgid="8501523829633146239">"Confirmar PIN nuevo"</string>
@@ -1577,9 +1578,10 @@
<string name="restr_pin_error_doesnt_match" msgid="2224214190906994548">"Los PIN no coinciden. Vuelve a intentarlo."</string>
<string name="restr_pin_error_too_short" msgid="8173982756265777792">"El PIN es demasiado corto. Debe tener al menos 4 dígitos."</string>
<plurals name="restr_pin_countdown">
- <item quantity="one" msgid="4835639969503729874">"PIN incorrecto. Reintentar en 1 s"</item>
- <item quantity="other" msgid="8030607343223287654">"PIN incorrecto. Reintentar en <xliff:g id="COUNT">%d</xliff:g> s"</item>
+ <item quantity="one" msgid="311050995198548675">"Intentar en 1 s"</item>
+ <item quantity="other" msgid="4730868920742952817">"Intentar en <xliff:g id="COUNT">%d</xliff:g> s"</item>
</plurals>
+ <string name="restr_pin_try_later" msgid="973144472490532377">"Volver a intentar más tarde"</string>
<string name="transient_navigation_confirmation" msgid="4907844043611123426">"Desliza el borde para ver la barra."</string>
<string name="transient_navigation_confirmation_long" msgid="8061685920508086697">"Desliza el dedo desde el borde de la pantalla para mostrar la barra del sistema."</string>
</resources>
diff --git a/core/res/res/values-es/strings.xml b/core/res/res/values-es/strings.xml
index 844412d..620410e 100644
--- a/core/res/res/values-es/strings.xml
+++ b/core/res/res/values-es/strings.xml
@@ -1449,7 +1449,6 @@
<string name="activity_chooser_view_see_all" msgid="4292569383976636200">"Ver todo"</string>
<string name="activity_chooser_view_dialog_title_default" msgid="4710013864974040615">"Seleccionar actividad"</string>
<string name="share_action_provider_share_with" msgid="5247684435979149216">"Compartir con"</string>
- <string name="status_bar_device_locked" msgid="3092703448690669768">"Dispositivo bloqueado"</string>
<string name="list_delimeter" msgid="3975117572185494152">", "</string>
<string name="sending" msgid="3245653681008218030">"Enviando..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"¿Iniciar el navegador?"</string>
@@ -1569,7 +1568,9 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"Cancelado"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"Error al escribir contenido"</string>
<string name="reason_unknown" msgid="6048913880184628119">"desconocido"</string>
+ <string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"Introducir PIN de administrador"</string>
<string name="restr_pin_enter_pin" msgid="3395953421368476103">"Introducir PIN"</string>
+ <string name="restr_pin_incorrect" msgid="8571512003955077924">"Incorrecta"</string>
<string name="restr_pin_enter_old_pin" msgid="1462206225512910757">"PIN actual"</string>
<string name="restr_pin_enter_new_pin" msgid="5959606691619959184">"PIN nuevo"</string>
<string name="restr_pin_confirm_pin" msgid="8501523829633146239">"Confirma tu nuevo PIN"</string>
@@ -1577,9 +1578,10 @@
<string name="restr_pin_error_doesnt_match" msgid="2224214190906994548">"Los números PIN no coinciden. Inténtalo de nuevo."</string>
<string name="restr_pin_error_too_short" msgid="8173982756265777792">"El PIN es demasiado corto. Debe tener al menos 4 dígitos."</string>
<plurals name="restr_pin_countdown">
- <item quantity="one" msgid="4835639969503729874">"PIN incorrecto. Inténtalo de nuevo dentro de 1 segundo."</item>
- <item quantity="other" msgid="8030607343223287654">"PIN incorrecto. Inténtalo de nuevo dentro de <xliff:g id="COUNT">%d</xliff:g> segundos."</item>
+ <item quantity="one" msgid="311050995198548675">"Inténtalo en 1 s"</item>
+ <item quantity="other" msgid="4730868920742952817">"Inténtalo en <xliff:g id="COUNT">%d</xliff:g> s"</item>
</plurals>
+ <string name="restr_pin_try_later" msgid="973144472490532377">"Volver a intentar más tarde"</string>
<string name="transient_navigation_confirmation" msgid="4907844043611123426">"Deslizar borde para mostrar barra"</string>
<string name="transient_navigation_confirmation_long" msgid="8061685920508086697">"Desliza el borde de la pantalla para mostrar la barra del sistema"</string>
</resources>
diff --git a/core/res/res/values-et-rEE/strings.xml b/core/res/res/values-et-rEE/strings.xml
index f99f774..a74334d 100644
--- a/core/res/res/values-et-rEE/strings.xml
+++ b/core/res/res/values-et-rEE/strings.xml
@@ -1449,7 +1449,6 @@
<string name="activity_chooser_view_see_all" msgid="4292569383976636200">"Kuva kõik"</string>
<string name="activity_chooser_view_dialog_title_default" msgid="4710013864974040615">"Tegevuse valimine"</string>
<string name="share_action_provider_share_with" msgid="5247684435979149216">"Jagamine rakendusega:"</string>
- <string name="status_bar_device_locked" msgid="3092703448690669768">"Seade lukustatud."</string>
<string name="list_delimeter" msgid="3975117572185494152">", "</string>
<string name="sending" msgid="3245653681008218030">"Saatmine ..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Kas käivitada brauser?"</string>
@@ -1569,7 +1568,9 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"Tühistatud"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"Viga sisu kirjutamisel"</string>
<string name="reason_unknown" msgid="6048913880184628119">"teadmata"</string>
+ <string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"Administraatori PIN-koodi sisestamine"</string>
<string name="restr_pin_enter_pin" msgid="3395953421368476103">"Sisestage PIN-kood"</string>
+ <string name="restr_pin_incorrect" msgid="8571512003955077924">"Vale"</string>
<string name="restr_pin_enter_old_pin" msgid="1462206225512910757">"Praegune PIN-kood"</string>
<string name="restr_pin_enter_new_pin" msgid="5959606691619959184">"Uus PIN-kood"</string>
<string name="restr_pin_confirm_pin" msgid="8501523829633146239">"Kinnitage uus PIN-kood"</string>
@@ -1577,9 +1578,10 @@
<string name="restr_pin_error_doesnt_match" msgid="2224214190906994548">"PIN-kood ei sobi. Proovige uuesti."</string>
<string name="restr_pin_error_too_short" msgid="8173982756265777792">"PIN-kood on liiga lühike. Peab olema vähemalt 4-kohaline."</string>
<plurals name="restr_pin_countdown">
- <item quantity="one" msgid="4835639969503729874">"Vale PIN-kood. Proovige 1 s pärast."</item>
- <item quantity="other" msgid="8030607343223287654">"Vale PIN-kood. Proovige <xliff:g id="COUNT">%d</xliff:g> s pärast."</item>
+ <item quantity="one" msgid="311050995198548675">"Proovige uuesti 1 sekundi pärast"</item>
+ <item quantity="other" msgid="4730868920742952817">"Proovige uuesti <xliff:g id="COUNT">%d</xliff:g> sekundi pärast"</item>
</plurals>
+ <string name="restr_pin_try_later" msgid="973144472490532377">"Proovige hiljem uuesti"</string>
<string name="transient_navigation_confirmation" msgid="4907844043611123426">"Riba kuvam. pühkige ekraani serva"</string>
<string name="transient_navigation_confirmation_long" msgid="8061685920508086697">"Süsteemiriba kuvamiseks pühkige ekraani servast"</string>
</resources>
diff --git a/core/res/res/values-fa/strings.xml b/core/res/res/values-fa/strings.xml
index 0135830..0193475 100644
--- a/core/res/res/values-fa/strings.xml
+++ b/core/res/res/values-fa/strings.xml
@@ -1449,7 +1449,6 @@
<string name="activity_chooser_view_see_all" msgid="4292569383976636200">"مشاهدهٔ همه"</string>
<string name="activity_chooser_view_dialog_title_default" msgid="4710013864974040615">"انتخاب فعالیت"</string>
<string name="share_action_provider_share_with" msgid="5247684435979149216">"اشتراکگذاری با"</string>
- <string name="status_bar_device_locked" msgid="3092703448690669768">"دستگاه قفل است."</string>
<string name="list_delimeter" msgid="3975117572185494152">"، "</string>
<string name="sending" msgid="3245653681008218030">"در حال ارسال..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"مرورگر راهاندازی شود؟"</string>
@@ -1569,7 +1568,9 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"لغو شد"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"خطا هنگام نوشتن محتوا"</string>
<string name="reason_unknown" msgid="6048913880184628119">"نامعلوم"</string>
+ <string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"پین سرپرست را وارد کنید"</string>
<string name="restr_pin_enter_pin" msgid="3395953421368476103">"پین را وارد کنید"</string>
+ <string name="restr_pin_incorrect" msgid="8571512003955077924">"نادرست"</string>
<string name="restr_pin_enter_old_pin" msgid="1462206225512910757">"پین کنونی"</string>
<string name="restr_pin_enter_new_pin" msgid="5959606691619959184">"پین جدید"</string>
<string name="restr_pin_confirm_pin" msgid="8501523829633146239">"تأیید پین جدید"</string>
@@ -1577,9 +1578,10 @@
<string name="restr_pin_error_doesnt_match" msgid="2224214190906994548">"پینها مطابقت ندارند. دوباره امتحان کنید."</string>
<string name="restr_pin_error_too_short" msgid="8173982756265777792">"پین بیش از حد کوتاه است. باید حداقل ۴ رقم باشد."</string>
<plurals name="restr_pin_countdown">
- <item quantity="one" msgid="4835639969503729874">"پین نادرست است. امتحان در ۱ ثانیه."</item>
- <item quantity="other" msgid="8030607343223287654">"پین نادرست است. امتحان در <xliff:g id="COUNT">%d</xliff:g> ثانیه."</item>
+ <item quantity="one" msgid="311050995198548675">"امتحان پس از ۱ ثانیه"</item>
+ <item quantity="other" msgid="4730868920742952817">"امتحان پس از <xliff:g id="COUNT">%d</xliff:g> ثانیه"</item>
</plurals>
+ <string name="restr_pin_try_later" msgid="973144472490532377">"بعداً دوباره امتحان کنید"</string>
<string name="transient_navigation_confirmation" msgid="4907844043611123426">"کشیدن از لبه صفحه برای نمایش نوار"</string>
<string name="transient_navigation_confirmation_long" msgid="8061685920508086697">"برای نمایش نوار سیستم، انگشت خود را از لبه صفحه به داخل بکشید"</string>
</resources>
diff --git a/core/res/res/values-fi/strings.xml b/core/res/res/values-fi/strings.xml
index fd11b88..dbd77e0 100644
--- a/core/res/res/values-fi/strings.xml
+++ b/core/res/res/values-fi/strings.xml
@@ -1449,7 +1449,6 @@
<string name="activity_chooser_view_see_all" msgid="4292569383976636200">"Näytä kaikki"</string>
<string name="activity_chooser_view_dialog_title_default" msgid="4710013864974040615">"Valitse toiminto"</string>
<string name="share_action_provider_share_with" msgid="5247684435979149216">"Jaa seuraavien kanssa"</string>
- <string name="status_bar_device_locked" msgid="3092703448690669768">"Laite lukittu."</string>
<string name="list_delimeter" msgid="3975117572185494152">", "</string>
<string name="sending" msgid="3245653681008218030">"Lähetetään…"</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Käynnistetäänkö selain?"</string>
@@ -1569,7 +1568,9 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"Peruutettu"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"Sisällön kirjoittamisessa tapahtui virhe"</string>
<string name="reason_unknown" msgid="6048913880184628119">"tuntematon"</string>
+ <string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"Anna järjestelmänvalvojan PIN-koodi"</string>
<string name="restr_pin_enter_pin" msgid="3395953421368476103">"Anna PIN-koodi"</string>
+ <string name="restr_pin_incorrect" msgid="8571512003955077924">"Virheellinen"</string>
<string name="restr_pin_enter_old_pin" msgid="1462206225512910757">"Nykyinen PIN-koodi"</string>
<string name="restr_pin_enter_new_pin" msgid="5959606691619959184">"Uusi PIN-koodi"</string>
<string name="restr_pin_confirm_pin" msgid="8501523829633146239">"Vahvista uusi PIN-koodi"</string>
@@ -1577,9 +1578,10 @@
<string name="restr_pin_error_doesnt_match" msgid="2224214190906994548">"PIN-koodit eivät vastaa toisiaan. Yritä uudelleen."</string>
<string name="restr_pin_error_too_short" msgid="8173982756265777792">"PIN-koodi on liian lyhyt. Vähimmäispituus on neljä merkkiä."</string>
<plurals name="restr_pin_countdown">
- <item quantity="one" msgid="4835639969503729874">"Väärä PIN. Yritä uudelleen yhden sekunnin kuluttua."</item>
- <item quantity="other" msgid="8030607343223287654">"Väärä PIN. Yritä uudelleen <xliff:g id="COUNT">%d</xliff:g> sekunnin kuluttua."</item>
+ <item quantity="one" msgid="311050995198548675">"Yritä uud. 1 s kul."</item>
+ <item quantity="other" msgid="4730868920742952817">"Yritä uud. <xliff:g id="COUNT">%d</xliff:g> s kul."</item>
</plurals>
+ <string name="restr_pin_try_later" msgid="973144472490532377">"Yritä myöhemmin uudelleen"</string>
<string name="transient_navigation_confirmation" msgid="4907844043611123426">"Näytä palkki liu\'uttamalla reunasta"</string>
<string name="transient_navigation_confirmation_long" msgid="8061685920508086697">"Tuo järjestelmäpalkki näkyviin liu\'uttamalla ruudun reunasta"</string>
</resources>
diff --git a/core/res/res/values-fr-rCA/strings.xml b/core/res/res/values-fr-rCA/strings.xml
index 051fea1..47df2d0 100644
--- a/core/res/res/values-fr-rCA/strings.xml
+++ b/core/res/res/values-fr-rCA/strings.xml
@@ -1449,7 +1449,6 @@
<string name="activity_chooser_view_see_all" msgid="4292569383976636200">"Tout afficher"</string>
<string name="activity_chooser_view_dialog_title_default" msgid="4710013864974040615">"Sélectionnez une activité"</string>
<string name="share_action_provider_share_with" msgid="5247684435979149216">"Partagez avec"</string>
- <string name="status_bar_device_locked" msgid="3092703448690669768">"Appareil verrouillé"</string>
<string name="list_delimeter" msgid="3975117572185494152">", "</string>
<string name="sending" msgid="3245653681008218030">"Envoi…"</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Lancer le navigateur?"</string>
@@ -1569,7 +1568,9 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"Annulé"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"Erreur lors de l\'écriture du contenu"</string>
<string name="reason_unknown" msgid="6048913880184628119">"inconnu"</string>
+ <string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"Entrez le NIP d\'administrateur"</string>
<string name="restr_pin_enter_pin" msgid="3395953421368476103">"Saisissez le NIP"</string>
+ <string name="restr_pin_incorrect" msgid="8571512003955077924">"Incorrect"</string>
<string name="restr_pin_enter_old_pin" msgid="1462206225512910757">"NIP actuel"</string>
<string name="restr_pin_enter_new_pin" msgid="5959606691619959184">"Nouveau NIP"</string>
<string name="restr_pin_confirm_pin" msgid="8501523829633146239">"Confirmer le nouveau NIP"</string>
@@ -1577,9 +1578,10 @@
<string name="restr_pin_error_doesnt_match" msgid="2224214190906994548">"Les NIP ne correspondent pas. Essayez à nouveau."</string>
<string name="restr_pin_error_too_short" msgid="8173982756265777792">"Le NIP est trop court. Il doit comporter au moins 4 chiffres."</string>
<plurals name="restr_pin_countdown">
- <item quantity="one" msgid="4835639969503729874">"NIP erroné. Essayez à nouveau dans 1 seconde."</item>
- <item quantity="other" msgid="8030607343223287654">"NIP erroné. Réessayez dans <xliff:g id="COUNT">%d</xliff:g> secondes."</item>
+ <item quantity="one" msgid="311050995198548675">"Dans 1 seconde"</item>
+ <item quantity="other" msgid="4730868920742952817">"Dans <xliff:g id="COUNT">%d</xliff:g> secondes"</item>
</plurals>
+ <string name="restr_pin_try_later" msgid="973144472490532377">"Réessayez plus tard"</string>
<string name="transient_navigation_confirmation" msgid="4907844043611123426">"Gliss. doigt sur côté écr. aff. barre"</string>
<string name="transient_navigation_confirmation_long" msgid="8061685920508086697">"Faites glisser votre doigt à partir d\'un côté de l\'écran pour afficher la barre système"</string>
</resources>
diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml
index 379bc13..d639f49 100644
--- a/core/res/res/values-fr/strings.xml
+++ b/core/res/res/values-fr/strings.xml
@@ -1449,7 +1449,6 @@
<string name="activity_chooser_view_see_all" msgid="4292569383976636200">"Tout afficher"</string>
<string name="activity_chooser_view_dialog_title_default" msgid="4710013864974040615">"Sélectionnez une activité"</string>
<string name="share_action_provider_share_with" msgid="5247684435979149216">"Partager avec"</string>
- <string name="status_bar_device_locked" msgid="3092703448690669768">"Appareil verrouillé"</string>
<string name="list_delimeter" msgid="3975117572185494152">", "</string>
<string name="sending" msgid="3245653681008218030">"Envoi en cours…"</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Lancer le navigateur ?"</string>
@@ -1569,7 +1568,9 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"Tâche annulée."</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"Erreur lors de la modification du contenu."</string>
<string name="reason_unknown" msgid="6048913880184628119">"inconnu"</string>
+ <string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"Saisir le code PIN d\'administrateur"</string>
<string name="restr_pin_enter_pin" msgid="3395953421368476103">"Saisir le code PIN"</string>
+ <string name="restr_pin_incorrect" msgid="8571512003955077924">"Incorrect."</string>
<string name="restr_pin_enter_old_pin" msgid="1462206225512910757">"Code PIN actuel"</string>
<string name="restr_pin_enter_new_pin" msgid="5959606691619959184">"Nouveau code PIN"</string>
<string name="restr_pin_confirm_pin" msgid="8501523829633146239">"Confirmer le nouveau code PIN"</string>
@@ -1577,9 +1578,10 @@
<string name="restr_pin_error_doesnt_match" msgid="2224214190906994548">"Les codes PIN ne correspondent pas. Veuillez réessayer."</string>
<string name="restr_pin_error_too_short" msgid="8173982756265777792">"Le code PIN est trop court. Il doit comporter au moins 4 chiffres."</string>
<plurals name="restr_pin_countdown">
- <item quantity="one" msgid="4835639969503729874">"PIN erroné. Réessayez dans 1 seconde."</item>
- <item quantity="other" msgid="8030607343223287654">"PIN erroné. Réessayez dans <xliff:g id="COUNT">%d</xliff:g> secondes."</item>
+ <item quantity="one" msgid="311050995198548675">"Essay. dans 1 s"</item>
+ <item quantity="other" msgid="4730868920742952817">"Essay. dans <xliff:g id="COUNT">%d</xliff:g> s"</item>
</plurals>
+ <string name="restr_pin_try_later" msgid="973144472490532377">"Veuillez réessayer ultérieurement."</string>
<string name="transient_navigation_confirmation" msgid="4907844043611123426">"Faire glisser côté pour voir barre."</string>
<string name="transient_navigation_confirmation_long" msgid="8061685920508086697">"Faites glisser le doigt à partir d\'un côté de l\'écran pour afficher la barre système."</string>
</resources>
diff --git a/core/res/res/values-hi/strings.xml b/core/res/res/values-hi/strings.xml
index b88f663d..9f4927b 100644
--- a/core/res/res/values-hi/strings.xml
+++ b/core/res/res/values-hi/strings.xml
@@ -288,7 +288,7 @@
<string name="permlab_setDebugApp" msgid="3022107198686584052">"एप्लिकेशन डीबग करना सक्षम करें"</string>
<string name="permdesc_setDebugApp" msgid="4474512416299013256">"एप्लिकेशन को अन्य एप्लिकेशन के लिए डीबग किया जाना चालू करने देता है. दुर्भावनापूर्ण एप्लिकेशन इसका उपयोग अन्य एप्लिकेशन को समाप्त करने के लिए कर सकते हैं."</string>
<string name="permlab_changeConfiguration" msgid="4162092185124234480">"सिस्टम प्रदर्शन सेटिंग बदलें"</string>
- <string name="permdesc_changeConfiguration" msgid="4372223873154296076">"एप्लिकेशन को वर्तमान कॉन्फ़िगरेशन, जैसे स्थान या समग्र फ़ॉन्ट आकार, बदलने देता है."</string>
+ <string name="permdesc_changeConfiguration" msgid="4372223873154296076">"एप्लिकेशन को वर्तमान कॉन्फ़िगरेशन, जैसे स्थान या समग्र अक्षरों का आकार, बदलने देता है."</string>
<string name="permlab_enableCarMode" msgid="5684504058192921098">"कार मोड सक्षम करें"</string>
<string name="permdesc_enableCarMode" msgid="4853187425751419467">"एप्लिकेशन को कार मोड सक्षम करने देता है."</string>
<string name="permlab_killBackgroundProcesses" msgid="3914026687420177202">"अन्य एप्लिकेशन बंद करें"</string>
@@ -502,16 +502,16 @@
<string name="permlab_mount_format_filesystems" product="nosdcard" msgid="6227819582624904972">"USB संग्रहण मिटाएं"</string>
<string name="permlab_mount_format_filesystems" product="default" msgid="262582698639274056">"SD कार्ड मिटाएं"</string>
<string name="permdesc_mount_format_filesystems" msgid="8784268246779198627">"एप्लिकेशन को निकालने योग्य संग्रहण फ़ॉर्मेट करने देता है."</string>
- <string name="permlab_asec_access" msgid="3411338632002193846">"आंतरिक संग्रहण पर जानकारी प्राप्त करें"</string>
- <string name="permdesc_asec_access" msgid="3094563844593878548">"एप्लिकेशन को आंतरिक संग्रहण की जानकारी प्राप्त करने देता है."</string>
- <string name="permlab_asec_create" msgid="6414757234789336327">"आंतरिक संग्रहण बनाएं"</string>
- <string name="permdesc_asec_create" msgid="4558869273585856876">"एप्लिकेशन को आंतरिक संग्रहण बनाने देता है."</string>
- <string name="permlab_asec_destroy" msgid="526928328301618022">"आंतरिक संग्रहण नष्ट करें"</string>
- <string name="permdesc_asec_destroy" msgid="7218749286145526537">"एप्लिकेशन को आंतरिक संग्रहण नष्ट करने देता है."</string>
- <string name="permlab_asec_mount_unmount" msgid="8877998101944999386">"आंतरिक संग्रहण माउंट/अनमाउंट करें"</string>
- <string name="permdesc_asec_mount_unmount" msgid="3451360114902490929">"एप्लिकेशन को आंतरिक संग्रहण माउंट/अनमाउंट करने देता है."</string>
- <string name="permlab_asec_rename" msgid="7496633954080472417">"आंतरिक संग्रहण का नाम बदलें"</string>
- <string name="permdesc_asec_rename" msgid="1794757588472127675">"एप्लिकेशन को आंतरिक संग्रहण का नाम बदलने देता है."</string>
+ <string name="permlab_asec_access" msgid="3411338632002193846">"मोबाइल संग्रहण पर जानकारी प्राप्त करें"</string>
+ <string name="permdesc_asec_access" msgid="3094563844593878548">"एप्लिकेशन को मोबाइल संग्रहण की जानकारी प्राप्त करने देता है."</string>
+ <string name="permlab_asec_create" msgid="6414757234789336327">"मोबाइल संग्रहण बनाएं"</string>
+ <string name="permdesc_asec_create" msgid="4558869273585856876">"एप्लिकेशन को मोबाइल संग्रहण बनाने देता है."</string>
+ <string name="permlab_asec_destroy" msgid="526928328301618022">"मोबाइल संग्रहण नष्ट करें"</string>
+ <string name="permdesc_asec_destroy" msgid="7218749286145526537">"एप्लिकेशन को मोबाइल संग्रहण नष्ट करने देता है."</string>
+ <string name="permlab_asec_mount_unmount" msgid="8877998101944999386">"मोबाइल संग्रहण माउंट/अनमाउंट करें"</string>
+ <string name="permdesc_asec_mount_unmount" msgid="3451360114902490929">"एप्लिकेशन को मोबाइल संग्रहण माउंट/अनमाउंट करने देता है."</string>
+ <string name="permlab_asec_rename" msgid="7496633954080472417">"मोबाइल संग्रहण का नाम बदलें"</string>
+ <string name="permdesc_asec_rename" msgid="1794757588472127675">"एप्लिकेशन को मोबाइल संग्रहण का नाम बदलने देता है."</string>
<string name="permlab_vibrate" msgid="7696427026057705834">"कंपन नियंत्रित करें"</string>
<string name="permdesc_vibrate" msgid="6284989245902300945">"एप्लिकेशन को कंपनकर्ता नियंत्रित करने देता है."</string>
<string name="permlab_flashlight" msgid="2155920810121984215">"फ़्लैशलाइट नियंत्रित करें"</string>
@@ -541,8 +541,8 @@
<string name="permdesc_readPhoneState" msgid="1639212771826125528">"एप्लिकेशन को उपकरण की फ़ोन सुविधाओं तक पहुंचने देता है. यह अनुमति एप्लिकेशन को फ़ोन नंबर और उपकरण आईडी, कॉल सक्रिय है या नहीं, और कॉल द्वारा कनेक्ट किया गया दूरस्थ नंबर निर्धारित करने देती है."</string>
<string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"टेबलेट को निष्क्रिय होने से रोकें"</string>
<string name="permlab_wakeLock" product="default" msgid="573480187941496130">"फ़ोन को निष्क्रिय होने से रोकें"</string>
- <string name="permdesc_wakeLock" product="tablet" msgid="7311319824400447868">"एप्लिकेशन को टेबलेट को निष्क्रिय हो जाने से रोकता है."</string>
- <string name="permdesc_wakeLock" product="default" msgid="8559100677372928754">"एप्लिकेशन को फ़ोन को निष्क्रिय होने से रोकता है."</string>
+ <string name="permdesc_wakeLock" product="tablet" msgid="7311319824400447868">"एप्लिकेशन को टेबलेट को प्रयोग में नहीं हो जाने से रोकता है."</string>
+ <string name="permdesc_wakeLock" product="default" msgid="8559100677372928754">"एप्लिकेशन को फ़ोन को प्रयोग में नहीं होने से रोकता है."</string>
<string name="permlab_devicePower" product="tablet" msgid="2787034722616350417">"टेबलेट चालू या बंद करें"</string>
<string name="permlab_devicePower" product="default" msgid="4928622470980943206">"फ़ोन चालू या बंद करें"</string>
<string name="permdesc_devicePower" product="tablet" msgid="6689862878984631831">"एप्लिकेशन को टेबलेट चालू या बंद करने देता है."</string>
@@ -1414,7 +1414,7 @@
<string name="action_menu_overflow_description" msgid="2295659037509008453">"अधिक विकल्प"</string>
<string name="action_bar_home_description_format" msgid="7965984360903693903">"%1$s, %2$s"</string>
<string name="action_bar_home_subtitle_description_format" msgid="6985546530471780727">"%1$s, %2$s, %3$s"</string>
- <string name="storage_internal" msgid="4891916833657929263">"आंतरिक संग्रहण"</string>
+ <string name="storage_internal" msgid="4891916833657929263">"मोबाइल संग्रहण"</string>
<string name="storage_sd_card" msgid="3282948861378286745">"SD कार्ड"</string>
<string name="storage_usb" msgid="3017954059538517278">"USB संग्रहण"</string>
<string name="extract_edit_menu_button" msgid="8940478730496610137">"संपादित करें"</string>
@@ -1449,7 +1449,6 @@
<string name="activity_chooser_view_see_all" msgid="4292569383976636200">"सभी देखें"</string>
<string name="activity_chooser_view_dialog_title_default" msgid="4710013864974040615">"गतिविधि चुनें"</string>
<string name="share_action_provider_share_with" msgid="5247684435979149216">"इसके साथ साझा करें:"</string>
- <string name="status_bar_device_locked" msgid="3092703448690669768">"उपकरण लॉक कर दिया गया."</string>
<string name="list_delimeter" msgid="3975117572185494152">", "</string>
<string name="sending" msgid="3245653681008218030">"भेजा जा रहा है…"</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"ब्राउज़र लॉन्च करें?"</string>
@@ -1569,7 +1568,9 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"रद्द कर दी गई"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"सामग्री लिखने में त्रुटि"</string>
<string name="reason_unknown" msgid="6048913880184628119">"अज्ञात"</string>
+ <string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"व्यवस्थापक पिन डालें"</string>
<string name="restr_pin_enter_pin" msgid="3395953421368476103">"PIN डालें"</string>
+ <string name="restr_pin_incorrect" msgid="8571512003955077924">"गलत"</string>
<string name="restr_pin_enter_old_pin" msgid="1462206225512910757">"वर्तमान पिन"</string>
<string name="restr_pin_enter_new_pin" msgid="5959606691619959184">"नया पिन"</string>
<string name="restr_pin_confirm_pin" msgid="8501523829633146239">"नए पिन की पुष्टि करें"</string>
@@ -1577,9 +1578,10 @@
<string name="restr_pin_error_doesnt_match" msgid="2224214190906994548">"PIN मिलान नहीं करते हैं. पुनः प्रयास करें."</string>
<string name="restr_pin_error_too_short" msgid="8173982756265777792">"PIN बहुत छोटा है. कम से कम 4 अंकों का होना चाहिए."</string>
<plurals name="restr_pin_countdown">
- <item quantity="one" msgid="4835639969503729874">"गलत PIN. 1 सेकंड में पुनः प्रयास करें."</item>
- <item quantity="other" msgid="8030607343223287654">"गलत PIN. <xliff:g id="COUNT">%d</xliff:g> सेकंड में पुनः प्रयास करें."</item>
+ <item quantity="one" msgid="311050995198548675">"1 सेकंड में पुन: प्रयास करें"</item>
+ <item quantity="other" msgid="4730868920742952817">"<xliff:g id="COUNT">%d</xliff:g> सेकंड में पुन: प्रयास करें"</item>
</plurals>
+ <string name="restr_pin_try_later" msgid="973144472490532377">"बाद में पुनः प्रयास करें"</string>
<string name="transient_navigation_confirmation" msgid="4907844043611123426">"बार को प्रदर्शित करने के लिए स्क्रीन के किनारे को स्वाइप करें"</string>
<string name="transient_navigation_confirmation_long" msgid="8061685920508086697">"सिस्टम बार को प्रदर्शित करने के लिए स्क्रीन के किनारे से स्वाइप करें"</string>
</resources>
diff --git a/core/res/res/values-hr/strings.xml b/core/res/res/values-hr/strings.xml
index 136b704..cd43b8d 100644
--- a/core/res/res/values-hr/strings.xml
+++ b/core/res/res/values-hr/strings.xml
@@ -1449,7 +1449,6 @@
<string name="activity_chooser_view_see_all" msgid="4292569383976636200">"Prikaži sve"</string>
<string name="activity_chooser_view_dialog_title_default" msgid="4710013864974040615">"Odabir aktivnosti"</string>
<string name="share_action_provider_share_with" msgid="5247684435979149216">"Dijeljenje s"</string>
- <string name="status_bar_device_locked" msgid="3092703448690669768">"Uređaj zaključan."</string>
<string name="list_delimeter" msgid="3975117572185494152">", "</string>
<string name="sending" msgid="3245653681008218030">"Slanje..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Pokrenuti preglednik?"</string>
@@ -1569,7 +1568,9 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"Otkazano"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"Pogreška prilikom pisanja sadržaja"</string>
<string name="reason_unknown" msgid="6048913880184628119">"nepoznato"</string>
+ <string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"Unesite PIN administratora"</string>
<string name="restr_pin_enter_pin" msgid="3395953421368476103">"Unesite PIN"</string>
+ <string name="restr_pin_incorrect" msgid="8571512003955077924">"Netočno"</string>
<string name="restr_pin_enter_old_pin" msgid="1462206225512910757">"Trenutačni PIN"</string>
<string name="restr_pin_enter_new_pin" msgid="5959606691619959184">"Novi PIN"</string>
<string name="restr_pin_confirm_pin" msgid="8501523829633146239">"Potvrdite novi PIN"</string>
@@ -1577,9 +1578,10 @@
<string name="restr_pin_error_doesnt_match" msgid="2224214190906994548">"PIN-ovi se ne podudaraju. Pokušajte ponovo."</string>
<string name="restr_pin_error_too_short" msgid="8173982756265777792">"PIN je prekratak. Mora imati barem 4 znamenke."</string>
<plurals name="restr_pin_countdown">
- <item quantity="one" msgid="4835639969503729874">"PIN nije točan. Ponovite za 1 s."</item>
- <item quantity="other" msgid="8030607343223287654">"PIN nije točan. Ponovite za <xliff:g id="COUNT">%d</xliff:g> s."</item>
+ <item quantity="one" msgid="311050995198548675">"Ponovite za 1 s"</item>
+ <item quantity="other" msgid="4730868920742952817">"Ponovite za <xliff:g id="COUNT">%d</xliff:g> s"</item>
</plurals>
+ <string name="restr_pin_try_later" msgid="973144472490532377">"Pokušajte ponovo kasnije"</string>
<string name="transient_navigation_confirmation" msgid="4907844043611123426">"Prijeđite po rubu za prikaz trake"</string>
<string name="transient_navigation_confirmation_long" msgid="8061685920508086697">"Prijeđite prstom od ruba zaslona da bi se prikazala traka sustava"</string>
</resources>
diff --git a/core/res/res/values-hu/strings.xml b/core/res/res/values-hu/strings.xml
index 8351c56..437367f 100644
--- a/core/res/res/values-hu/strings.xml
+++ b/core/res/res/values-hu/strings.xml
@@ -1449,7 +1449,6 @@
<string name="activity_chooser_view_see_all" msgid="4292569383976636200">"Összes megtekintése"</string>
<string name="activity_chooser_view_dialog_title_default" msgid="4710013864974040615">"Tevékenység kiválasztása"</string>
<string name="share_action_provider_share_with" msgid="5247684435979149216">"Megosztás"</string>
- <string name="status_bar_device_locked" msgid="3092703448690669768">"Az eszköz le van zárva."</string>
<string name="list_delimeter" msgid="3975117572185494152">", "</string>
<string name="sending" msgid="3245653681008218030">"Küldés…"</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Böngésző indítása?"</string>
@@ -1569,7 +1568,9 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"Törölve"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"Hiba történt a tartalomírás közben"</string>
<string name="reason_unknown" msgid="6048913880184628119">"ismeretlen"</string>
+ <string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"Rendszergazdai PIN kód megadása"</string>
<string name="restr_pin_enter_pin" msgid="3395953421368476103">"PIN kód megadása"</string>
+ <string name="restr_pin_incorrect" msgid="8571512003955077924">"Helytelen"</string>
<string name="restr_pin_enter_old_pin" msgid="1462206225512910757">"Jelenlegi PIN kód"</string>
<string name="restr_pin_enter_new_pin" msgid="5959606691619959184">"Új PIN kód"</string>
<string name="restr_pin_confirm_pin" msgid="8501523829633146239">"Új PIN kód megerősítése"</string>
@@ -1577,9 +1578,10 @@
<string name="restr_pin_error_doesnt_match" msgid="2224214190906994548">"A PIN kódok nem egyeznek. Próbálja újra."</string>
<string name="restr_pin_error_too_short" msgid="8173982756265777792">"A PIN kód túl rövid. Legalább 4 számjegyből kell állnia."</string>
<plurals name="restr_pin_countdown">
- <item quantity="one" msgid="4835639969503729874">"Helytelen PIN kód. Próbálja újra 1 másodperc múlva."</item>
- <item quantity="other" msgid="8030607343223287654">"Helytelen PIN kód. Próbálja újra <xliff:g id="COUNT">%d</xliff:g> másodperc múlva."</item>
+ <item quantity="one" msgid="311050995198548675">"Próbálja újra 1 másodperc múlva"</item>
+ <item quantity="other" msgid="4730868920742952817">"Próbálja újra <xliff:g id="COUNT">%d</xliff:g> másodperc múlva"</item>
</plurals>
+ <string name="restr_pin_try_later" msgid="973144472490532377">"Próbálkozzon később"</string>
<string name="transient_navigation_confirmation" msgid="4907844043611123426">"Csúsztatás a képernyő szélén a sávhoz"</string>
<string name="transient_navigation_confirmation_long" msgid="8061685920508086697">"Csúsztassa ujját a képernyő szélétől a rendszersáv megjelenítéséhez"</string>
</resources>
diff --git a/core/res/res/values-hy-rAM/strings.xml b/core/res/res/values-hy-rAM/strings.xml
index 232add4..b15ea4f 100644
--- a/core/res/res/values-hy-rAM/strings.xml
+++ b/core/res/res/values-hy-rAM/strings.xml
@@ -1449,7 +1449,6 @@
<string name="activity_chooser_view_see_all" msgid="4292569383976636200">"Տեսնել բոլորը"</string>
<string name="activity_chooser_view_dialog_title_default" msgid="4710013864974040615">"Ընտրել գործունեությունը"</string>
<string name="share_action_provider_share_with" msgid="5247684435979149216">"Տարածել"</string>
- <string name="status_bar_device_locked" msgid="3092703448690669768">"Սարքը կողպված է:"</string>
<string name="list_delimeter" msgid="3975117572185494152">", "</string>
<string name="sending" msgid="3245653681008218030">"Ուղարկվում է..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Գործարկե՞լ զննարկիչը:"</string>
@@ -1569,7 +1568,9 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"Չեղարկված է"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"Բովանդակության գրելու սխալ"</string>
<string name="reason_unknown" msgid="6048913880184628119">"անհայտ"</string>
+ <string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"Մուտքագրեք կառավարչի PIN-ը"</string>
<string name="restr_pin_enter_pin" msgid="3395953421368476103">"Մուտքագրեք PIN-ը"</string>
+ <string name="restr_pin_incorrect" msgid="8571512003955077924">"Սխալ է"</string>
<string name="restr_pin_enter_old_pin" msgid="1462206225512910757">"Ընթացիկ PIN"</string>
<string name="restr_pin_enter_new_pin" msgid="5959606691619959184">"Նոր PIN"</string>
<string name="restr_pin_confirm_pin" msgid="8501523829633146239">"Հաստատեք նոր PIN-ը"</string>
@@ -1577,9 +1578,10 @@
<string name="restr_pin_error_doesnt_match" msgid="2224214190906994548">"PIN-երը չեն համընկնում: Փորձեք կրկին:"</string>
<string name="restr_pin_error_too_short" msgid="8173982756265777792">"PIN-ը չափազանց կարճ է: Պետք է ունենա առնվազն 4 թվանիշ:"</string>
<plurals name="restr_pin_countdown">
- <item quantity="one" msgid="4835639969503729874">"PIN-ը սխալ է: Փորձեք կրկին 1 վայրկյանից:"</item>
- <item quantity="other" msgid="8030607343223287654">"PIN-ը սխալ է: Փորձեք կրկին <xliff:g id="COUNT">%d</xliff:g> վայրկյանից:"</item>
+ <item quantity="one" msgid="311050995198548675">"Կրկին փորձեք 1 վայրկյանից"</item>
+ <item quantity="other" msgid="4730868920742952817">"Կրկին փորձեք <xliff:g id="COUNT">%d</xliff:g> վայրկյանից"</item>
</plurals>
+ <string name="restr_pin_try_later" msgid="973144472490532377">"Կրկին փորձեք մի փոքր ուշ"</string>
<string name="transient_navigation_confirmation" msgid="4907844043611123426">"Սահեցրեք էկրանի եզրով՝ գոտին բացելու համար"</string>
<string name="transient_navigation_confirmation_long" msgid="8061685920508086697">"Սահեցրեք էկրանի եզրով՝ համակարգային գոտին բացելու համար"</string>
</resources>
diff --git a/core/res/res/values-in/strings.xml b/core/res/res/values-in/strings.xml
index d69e121..04110af 100644
--- a/core/res/res/values-in/strings.xml
+++ b/core/res/res/values-in/strings.xml
@@ -1449,7 +1449,6 @@
<string name="activity_chooser_view_see_all" msgid="4292569383976636200">"Lihat semua"</string>
<string name="activity_chooser_view_dialog_title_default" msgid="4710013864974040615">"Pilih kegiatan"</string>
<string name="share_action_provider_share_with" msgid="5247684435979149216">"Berbagi dengan"</string>
- <string name="status_bar_device_locked" msgid="3092703448690669768">"Perangkat tergembok."</string>
<string name="list_delimeter" msgid="3975117572185494152">", "</string>
<string name="sending" msgid="3245653681008218030">"Mengirim..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Luncurkan Browser?"</string>
@@ -1569,7 +1568,9 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"Dibatalkan"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"Terjadi kesalahan saat menulis konten"</string>
<string name="reason_unknown" msgid="6048913880184628119">"tak diketahui"</string>
+ <string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"Masukkan PIN administrator"</string>
<string name="restr_pin_enter_pin" msgid="3395953421368476103">"Masukkan PIN"</string>
+ <string name="restr_pin_incorrect" msgid="8571512003955077924">"Tidak benar"</string>
<string name="restr_pin_enter_old_pin" msgid="1462206225512910757">"PIN Saat Ini"</string>
<string name="restr_pin_enter_new_pin" msgid="5959606691619959184">"PIN Baru"</string>
<string name="restr_pin_confirm_pin" msgid="8501523829633146239">"Konfirmasi PIN baru"</string>
@@ -1577,9 +1578,10 @@
<string name="restr_pin_error_doesnt_match" msgid="2224214190906994548">"PIN tidak cocok. Coba lagi."</string>
<string name="restr_pin_error_too_short" msgid="8173982756265777792">"PIN terlalu pendek. Minimal 4 digit."</string>
<plurals name="restr_pin_countdown">
- <item quantity="one" msgid="4835639969503729874">"PIN salah. Coba lagi dalam 1 detik."</item>
- <item quantity="other" msgid="8030607343223287654">"PIN salah. Coba lagi dalam <xliff:g id="COUNT">%d</xliff:g> detik."</item>
+ <item quantity="one" msgid="311050995198548675">"Coba 1 dtk lagi"</item>
+ <item quantity="other" msgid="4730868920742952817">"Coba <xliff:g id="COUNT">%d</xliff:g> detik lagi"</item>
</plurals>
+ <string name="restr_pin_try_later" msgid="973144472490532377">"Coba lagi nanti"</string>
<string name="transient_navigation_confirmation" msgid="4907844043611123426">"Gesek tepi layar untuk membuka bilah"</string>
<string name="transient_navigation_confirmation_long" msgid="8061685920508086697">"Gesek dari bagian tepi layar untuk membuka bilah sistem"</string>
</resources>
diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml
index 0a1dad1..fd864da 100644
--- a/core/res/res/values-it/strings.xml
+++ b/core/res/res/values-it/strings.xml
@@ -1449,7 +1449,6 @@
<string name="activity_chooser_view_see_all" msgid="4292569383976636200">"Mostra tutto"</string>
<string name="activity_chooser_view_dialog_title_default" msgid="4710013864974040615">"Scegli attività"</string>
<string name="share_action_provider_share_with" msgid="5247684435979149216">"Condividi con"</string>
- <string name="status_bar_device_locked" msgid="3092703448690669768">"Dispositivo bloccato."</string>
<string name="list_delimeter" msgid="3975117572185494152">", "</string>
<string name="sending" msgid="3245653681008218030">"Invio..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Avviare l\'applicazione Browser?"</string>
@@ -1569,7 +1568,9 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"Annullato"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"Errore nella scrittura dei contenuti"</string>
<string name="reason_unknown" msgid="6048913880184628119">"sconosciuto"</string>
+ <string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"Inserisci PIN amministratore"</string>
<string name="restr_pin_enter_pin" msgid="3395953421368476103">"Inserisci PIN"</string>
+ <string name="restr_pin_incorrect" msgid="8571512003955077924">"Non corretto"</string>
<string name="restr_pin_enter_old_pin" msgid="1462206225512910757">"PIN corrente"</string>
<string name="restr_pin_enter_new_pin" msgid="5959606691619959184">"Nuovo PIN"</string>
<string name="restr_pin_confirm_pin" msgid="8501523829633146239">"Conferma il nuovo PIN"</string>
@@ -1577,9 +1578,10 @@
<string name="restr_pin_error_doesnt_match" msgid="2224214190906994548">"I PIN non corrispondono. Riprova."</string>
<string name="restr_pin_error_too_short" msgid="8173982756265777792">"Il PIN è troppo corto. Deve avere almeno quattro cifre."</string>
<plurals name="restr_pin_countdown">
- <item quantity="one" msgid="4835639969503729874">"PIN errato. Riprova tra 1 s."</item>
- <item quantity="other" msgid="8030607343223287654">"PIN errato. Riprova tra <xliff:g id="COUNT">%d</xliff:g> s."</item>
+ <item quantity="one" msgid="311050995198548675">"Riprova fra 1 s."</item>
+ <item quantity="other" msgid="4730868920742952817">"Riprova tra <xliff:g id="COUNT">%d</xliff:g> s."</item>
</plurals>
+ <string name="restr_pin_try_later" msgid="973144472490532377">"Riprova più tardi"</string>
<string name="transient_navigation_confirmation" msgid="4907844043611123426">"Scorri bordo schermo per visual. barra"</string>
<string name="transient_navigation_confirmation_long" msgid="8061685920508086697">"Fai scorrere il dito dal bordo dello schermo per visualizzare la barra di sistema"</string>
</resources>
diff --git a/core/res/res/values-iw/strings.xml b/core/res/res/values-iw/strings.xml
index ba52642..1875122 100644
--- a/core/res/res/values-iw/strings.xml
+++ b/core/res/res/values-iw/strings.xml
@@ -1449,7 +1449,6 @@
<string name="activity_chooser_view_see_all" msgid="4292569383976636200">"הצג הכל"</string>
<string name="activity_chooser_view_dialog_title_default" msgid="4710013864974040615">"בחר פעילות"</string>
<string name="share_action_provider_share_with" msgid="5247684435979149216">"שתף עם"</string>
- <string name="status_bar_device_locked" msgid="3092703448690669768">"המכשיר נעול."</string>
<string name="list_delimeter" msgid="3975117572185494152">", "</string>
<string name="sending" msgid="3245653681008218030">"שולח…"</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"להפעיל את הדפדפן?"</string>
@@ -1569,7 +1568,9 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"בוטלה"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"שגיאה בכתיבת תוכן"</string>
<string name="reason_unknown" msgid="6048913880184628119">"לא ידוע"</string>
+ <string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"הזן את מספר ה-PIN של מנהל המערכת"</string>
<string name="restr_pin_enter_pin" msgid="3395953421368476103">"הזן מספר PIN"</string>
+ <string name="restr_pin_incorrect" msgid="8571512003955077924">"שגוי"</string>
<string name="restr_pin_enter_old_pin" msgid="1462206225512910757">"מספר PIN נוכחי"</string>
<string name="restr_pin_enter_new_pin" msgid="5959606691619959184">"מספר PIN חדש"</string>
<string name="restr_pin_confirm_pin" msgid="8501523829633146239">"אשר את מספר ה-PIN החדש"</string>
@@ -1577,9 +1578,10 @@
<string name="restr_pin_error_doesnt_match" msgid="2224214190906994548">"מספרי ה-PIN לא תואמים. נסה שוב."</string>
<string name="restr_pin_error_too_short" msgid="8173982756265777792">"מספר ה-PIN קצר מדי. חייב להיות באורך 4 ספרות לפחות."</string>
<plurals name="restr_pin_countdown">
- <item quantity="one" msgid="4835639969503729874">"מספר PIN שגוי. נסה שוב בעוד שניה."</item>
- <item quantity="other" msgid="8030607343223287654">"מספר PIN שגוי. נסה שוב בעוד <xliff:g id="COUNT">%d</xliff:g> שניות."</item>
+ <item quantity="one" msgid="311050995198548675">"נסה שוב בעוד שנייה"</item>
+ <item quantity="other" msgid="4730868920742952817">"נסה שוב בעוד <xliff:g id="COUNT">%d</xliff:g> שניות"</item>
</plurals>
+ <string name="restr_pin_try_later" msgid="973144472490532377">"נסה שוב מאוחר יותר"</string>
<string name="transient_navigation_confirmation" msgid="4907844043611123426">"החלק מקצה המסך כדי להציג את הסרגל"</string>
<string name="transient_navigation_confirmation_long" msgid="8061685920508086697">"החלק מקצה המסך כדי להציג את סרגל המערכת"</string>
</resources>
diff --git a/core/res/res/values-ja/strings.xml b/core/res/res/values-ja/strings.xml
index 7d38f88..bf2dcac 100644
--- a/core/res/res/values-ja/strings.xml
+++ b/core/res/res/values-ja/strings.xml
@@ -1449,7 +1449,6 @@
<string name="activity_chooser_view_see_all" msgid="4292569383976636200">"すべて表示"</string>
<string name="activity_chooser_view_dialog_title_default" msgid="4710013864974040615">"操作の選択"</string>
<string name="share_action_provider_share_with" msgid="5247684435979149216">"共有"</string>
- <string name="status_bar_device_locked" msgid="3092703448690669768">"端末がロックされています。"</string>
<string name="list_delimeter" msgid="3975117572185494152">"、 "</string>
<string name="sending" msgid="3245653681008218030">"送信中..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"ブラウザを起動しますか?"</string>
@@ -1569,7 +1568,9 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"キャンセルされました"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"コンテンツの書き込み中にエラーが発生しました"</string>
<string name="reason_unknown" msgid="6048913880184628119">"不明"</string>
+ <string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"管理者PINを入力"</string>
<string name="restr_pin_enter_pin" msgid="3395953421368476103">"PINを入力"</string>
+ <string name="restr_pin_incorrect" msgid="8571512003955077924">"間違っています"</string>
<string name="restr_pin_enter_old_pin" msgid="1462206225512910757">"現在のPIN"</string>
<string name="restr_pin_enter_new_pin" msgid="5959606691619959184">"新しいPIN"</string>
<string name="restr_pin_confirm_pin" msgid="8501523829633146239">"新しいPINの確認"</string>
@@ -1577,9 +1578,10 @@
<string name="restr_pin_error_doesnt_match" msgid="2224214190906994548">"PINが一致しません。もう一度お試しください。"</string>
<string name="restr_pin_error_too_short" msgid="8173982756265777792">"PINが短すぎます。4桁以上にしてください。"</string>
<plurals name="restr_pin_countdown">
- <item quantity="one" msgid="4835639969503729874">"PINが正しくありません。1秒後にもう一度お試しください。"</item>
- <item quantity="other" msgid="8030607343223287654">"PINが正しくありません。<xliff:g id="COUNT">%d</xliff:g>秒後にもう一度お試しください。"</item>
+ <item quantity="one" msgid="311050995198548675">"1秒後に再試行"</item>
+ <item quantity="other" msgid="4730868920742952817">"<xliff:g id="COUNT">%d</xliff:g>秒後に再試行"</item>
</plurals>
+ <string name="restr_pin_try_later" msgid="973144472490532377">"しばらくしてから再試行"</string>
<string name="transient_navigation_confirmation" msgid="4907844043611123426">"画面の端からスワイプしてバーを表示"</string>
<string name="transient_navigation_confirmation_long" msgid="8061685920508086697">"システムバーを表示するには、画面の端からスワイプします"</string>
</resources>
diff --git a/core/res/res/values-ka-rGE/strings.xml b/core/res/res/values-ka-rGE/strings.xml
index b2c1c3d..745b4c7 100644
--- a/core/res/res/values-ka-rGE/strings.xml
+++ b/core/res/res/values-ka-rGE/strings.xml
@@ -1449,7 +1449,6 @@
<string name="activity_chooser_view_see_all" msgid="4292569383976636200">"ყველას ნახვა"</string>
<string name="activity_chooser_view_dialog_title_default" msgid="4710013864974040615">"აქტივობის არჩევა"</string>
<string name="share_action_provider_share_with" msgid="5247684435979149216">"გაზიარება"</string>
- <string name="status_bar_device_locked" msgid="3092703448690669768">"მოწყობილობა ჩაკეტილია."</string>
<string name="list_delimeter" msgid="3975117572185494152">", "</string>
<string name="sending" msgid="3245653681008218030">"იგზავნება..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"გსურთ ბრაუზერის გაშვება?"</string>
@@ -1569,7 +1568,9 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"გაუქმებული"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"შეცდომა კონტენტის ჩაწერისას"</string>
<string name="reason_unknown" msgid="6048913880184628119">"უცნობი"</string>
+ <string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"შეიყვანეთ ადმინისტრატორის PIN"</string>
<string name="restr_pin_enter_pin" msgid="3395953421368476103">"შეიყვანეთ PIN"</string>
+ <string name="restr_pin_incorrect" msgid="8571512003955077924">"არასწორია"</string>
<string name="restr_pin_enter_old_pin" msgid="1462206225512910757">"ამჟამინდელი PIN"</string>
<string name="restr_pin_enter_new_pin" msgid="5959606691619959184">"ახალი PIN"</string>
<string name="restr_pin_confirm_pin" msgid="8501523829633146239">"გაიმეორეთ ახალი PIN"</string>
@@ -1577,9 +1578,10 @@
<string name="restr_pin_error_doesnt_match" msgid="2224214190906994548">"PIN-ები არ ემთხვევა. სცადეთ ხელახლა."</string>
<string name="restr_pin_error_too_short" msgid="8173982756265777792">"PIN ძალიან მოკლეა. უნდა შედგებოდეს სულ ცოტა 4 ციფრისგან."</string>
<plurals name="restr_pin_countdown">
- <item quantity="one" msgid="4835639969503729874">"არასწორი PIN. სცადეთ ისევ 1 წამში."</item>
- <item quantity="other" msgid="8030607343223287654">"არასწორი PIN. სცადეთ ისევ <xliff:g id="COUNT">%d</xliff:g> წამში."</item>
+ <item quantity="one" msgid="311050995198548675">"კიდევ ერთხელ სცადეთ 1 წამში"</item>
+ <item quantity="other" msgid="4730868920742952817">"კიდევ ერთხელ სცადეთ <xliff:g id="COUNT">%d</xliff:g> წამში"</item>
</plurals>
+ <string name="restr_pin_try_later" msgid="973144472490532377">"სცადეთ მოგვიანებით"</string>
<string name="transient_navigation_confirmation" msgid="4907844043611123426">"გაასრიალეთ ეკრანის კიდეზე ზოლის გამოსაჩენად"</string>
<string name="transient_navigation_confirmation_long" msgid="8061685920508086697">"გაასრიალეთ ეკრანის კიდიდან სისტემის ზოლის გამოსაჩენად"</string>
</resources>
diff --git a/core/res/res/values-km-rKH/strings.xml b/core/res/res/values-km-rKH/strings.xml
index 4feebe5..a75c6a9 100644
--- a/core/res/res/values-km-rKH/strings.xml
+++ b/core/res/res/values-km-rKH/strings.xml
@@ -1449,7 +1449,6 @@
<string name="activity_chooser_view_see_all" msgid="4292569383976636200">"មើលទាំងអស់"</string>
<string name="activity_chooser_view_dialog_title_default" msgid="4710013864974040615">"ជ្រើសសកម្មភាព"</string>
<string name="share_action_provider_share_with" msgid="5247684435979149216">"ចែករំលែកជាមួយ"</string>
- <string name="status_bar_device_locked" msgid="3092703448690669768">"ឧបករណ៍ជាប់សោ។"</string>
<string name="list_delimeter" msgid="3975117572185494152">", "</string>
<string name="sending" msgid="3245653681008218030">"កំពុងផ្ញើ..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"ចាប់ផ្ដើមកម្មវិធីអ៊ីនធឺណិត?"</string>
@@ -1569,7 +1568,9 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"បានបោះបង់"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"កំហុសក្នុងការសរសេរមាតិកា"</string>
<string name="reason_unknown" msgid="6048913880184628119">"មិនស្គាល់"</string>
+ <string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"បញ្ចូលលេខកូដសម្ងាត់អ្នកគ្រប់គ្រង"</string>
<string name="restr_pin_enter_pin" msgid="3395953421368476103">"បញ្ចូលកូដ PIN"</string>
+ <string name="restr_pin_incorrect" msgid="8571512003955077924">"មិនត្រឹមត្រូវ"</string>
<string name="restr_pin_enter_old_pin" msgid="1462206225512910757">"កូដ PIN បច្ចុប្បន្ន"</string>
<string name="restr_pin_enter_new_pin" msgid="5959606691619959184">"កូដ PIN ថ្មី"</string>
<string name="restr_pin_confirm_pin" msgid="8501523829633146239">"បញ្ជាក់កូដ PIN ថ្មី"</string>
@@ -1577,9 +1578,10 @@
<string name="restr_pin_error_doesnt_match" msgid="2224214190906994548">"កូដ PIN មិនដូចគ្នា។ ព្យាយាមម្ដងទៀត។"</string>
<string name="restr_pin_error_too_short" msgid="8173982756265777792">"កូដ PIN ខ្លីពេក។ ត្រូវតែមានយ៉ាងហោចណាស់ ៤ តួ។"</string>
<plurals name="restr_pin_countdown">
- <item quantity="one" msgid="4835639969503729874">"លេខកូដ PIN មិនត្រឹមត្រូវ។ ព្យាយាមម្ដងទៀតក្នុងរយៈពេល ១ វិនាទី។"</item>
- <item quantity="other" msgid="8030607343223287654">"លេខកូដ PIN មិនត្រឹមត្រូវ។ ព្យាយាមម្ដងទៀតក្នុងរយៈពេល <xliff:g id="COUNT">%d</xliff:g> វិនាទី។"</item>
+ <item quantity="one" msgid="311050995198548675">"ព្យាយាមម្ដងទៀតក្នុងរយៈពេល ១វិនាទី។"</item>
+ <item quantity="other" msgid="4730868920742952817">"សូមព្យាយាមម្ដងទៀតក្នុងរយៈពេល <xliff:g id="COUNT">%d</xliff:g> វិនាទី"</item>
</plurals>
+ <string name="restr_pin_try_later" msgid="973144472490532377">"សូមព្យាយាមម្ដងទៀតនៅពេលក្រោយ។"</string>
<string name="transient_navigation_confirmation" msgid="4907844043611123426">"អូសគែមអេក្រង់ ដើម្បីបង្ហាញរបារ"</string>
<string name="transient_navigation_confirmation_long" msgid="8061685920508086697">"អូសពីគែមអេក្រង់ ដើម្បីបង្ហាញរបារប្រព័ន្ធ"</string>
</resources>
diff --git a/core/res/res/values-ko/strings.xml b/core/res/res/values-ko/strings.xml
index cdbf256..9f6c84b 100644
--- a/core/res/res/values-ko/strings.xml
+++ b/core/res/res/values-ko/strings.xml
@@ -1449,7 +1449,6 @@
<string name="activity_chooser_view_see_all" msgid="4292569383976636200">"전체 보기"</string>
<string name="activity_chooser_view_dialog_title_default" msgid="4710013864974040615">"작업 선택"</string>
<string name="share_action_provider_share_with" msgid="5247684435979149216">"공유 대상"</string>
- <string name="status_bar_device_locked" msgid="3092703448690669768">"기기가 잠겼습니다."</string>
<string name="list_delimeter" msgid="3975117572185494152">", "</string>
<string name="sending" msgid="3245653681008218030">"전송 중..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"브라우저를 실행하시겠습니까?"</string>
@@ -1569,7 +1568,9 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"취소됨"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"콘텐츠 작성 중 오류"</string>
<string name="reason_unknown" msgid="6048913880184628119">"알 수 없음"</string>
+ <string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"관리자 PIN 입력"</string>
<string name="restr_pin_enter_pin" msgid="3395953421368476103">"PIN 입력"</string>
+ <string name="restr_pin_incorrect" msgid="8571512003955077924">"올바르지 않은 값이 입력됨"</string>
<string name="restr_pin_enter_old_pin" msgid="1462206225512910757">"현재 PIN"</string>
<string name="restr_pin_enter_new_pin" msgid="5959606691619959184">"새 PIN"</string>
<string name="restr_pin_confirm_pin" msgid="8501523829633146239">"새 PIN 확인"</string>
@@ -1577,9 +1578,10 @@
<string name="restr_pin_error_doesnt_match" msgid="2224214190906994548">"PIN이 일치하지 않습니다. 다시 시도하세요."</string>
<string name="restr_pin_error_too_short" msgid="8173982756265777792">"PIN이 너무 짧습니다. 최소 4자 이상이어야 합니다."</string>
<plurals name="restr_pin_countdown">
- <item quantity="one" msgid="4835639969503729874">"잘못된 PIN입니다. 1초 뒤에 다시 시도하세요."</item>
- <item quantity="other" msgid="8030607343223287654">"잘못된 PIN입니다. <xliff:g id="COUNT">%d</xliff:g>초 뒤에 다시 시도하세요."</item>
+ <item quantity="one" msgid="311050995198548675">"1초 후에 다시 시도하세요."</item>
+ <item quantity="other" msgid="4730868920742952817">"<xliff:g id="COUNT">%d</xliff:g>초 후에 다시 시도하세요."</item>
</plurals>
+ <string name="restr_pin_try_later" msgid="973144472490532377">"나중에 다시 시도"</string>
<string name="transient_navigation_confirmation" msgid="4907844043611123426">"화면 가장자리에서 스와이프하여 표시줄 표시"</string>
<string name="transient_navigation_confirmation_long" msgid="8061685920508086697">"화면 가장자리에서 스와이프하여 시스템 표시줄 표시"</string>
</resources>
diff --git a/core/res/res/values-lo-rLA/strings.xml b/core/res/res/values-lo-rLA/strings.xml
index d55a2c8..0dddde7 100644
--- a/core/res/res/values-lo-rLA/strings.xml
+++ b/core/res/res/values-lo-rLA/strings.xml
@@ -1449,7 +1449,6 @@
<string name="activity_chooser_view_see_all" msgid="4292569383976636200">"ເບິ່ງທັງຫມົດ"</string>
<string name="activity_chooser_view_dialog_title_default" msgid="4710013864974040615">"ເລືອກກິດຈະກຳ"</string>
<string name="share_action_provider_share_with" msgid="5247684435979149216">"ແບ່ງປັນກັບ"</string>
- <string name="status_bar_device_locked" msgid="3092703448690669768">"ອຸປະກອນລັອກ."</string>
<string name="list_delimeter" msgid="3975117572185494152">", "</string>
<string name="sending" msgid="3245653681008218030">"ກຳລັງສົ່ງ..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"ເປີດໂປຣແກຣມທ່ອງເວັບ?"</string>
@@ -1569,7 +1568,9 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"ຍົກເລີກແລ້ວ"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"ເນື້ອໃນການຂຽນຜິດພາດ"</string>
<string name="reason_unknown" msgid="6048913880184628119">"ບໍ່ຮູ້ຈັກ"</string>
+ <string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"ໃສ່ PIN ຜູ່ເບິ່ງແຍງລະບົບ"</string>
<string name="restr_pin_enter_pin" msgid="3395953421368476103">"ໃສ່ລະຫັດ PIN"</string>
+ <string name="restr_pin_incorrect" msgid="8571512003955077924">"ບໍ່ຖືກຕ້ອງ"</string>
<string name="restr_pin_enter_old_pin" msgid="1462206225512910757">"PIN ປະຈຸບັນ"</string>
<string name="restr_pin_enter_new_pin" msgid="5959606691619959184">"ລະຫັດ PIN ໃໝ່"</string>
<string name="restr_pin_confirm_pin" msgid="8501523829633146239">"ຢືນຢັນລະຫັດ PIN ໃໝ່"</string>
@@ -1577,9 +1578,10 @@
<string name="restr_pin_error_doesnt_match" msgid="2224214190906994548">"PIN ບໍ່ກົງກັນ. ລອງໃໝ່ອີກຄັ້ງ."</string>
<string name="restr_pin_error_too_short" msgid="8173982756265777792">"PIN ສັ້ນເກີນໄປ. ຕ້ອງມີຢ່າງໜ້ອຍ 4 ຫຼັກ."</string>
<plurals name="restr_pin_countdown">
- <item quantity="one" msgid="4835639969503729874">"PIN ບໍ່ຖືກຕ້ອງ. ລອງໃໝ່ໃນອີກ 1 ວິນາທີ."</item>
- <item quantity="other" msgid="8030607343223287654">"PIN ບໍ່ຖືກຕ້ອງ. ລອງໃໝ່ໃນອີກ <xliff:g id="COUNT">%d</xliff:g> ວິນາທີ."</item>
+ <item quantity="one" msgid="311050995198548675">"ລອງໃໝ່ໃນອີກ 1 ວິນາທີ"</item>
+ <item quantity="other" msgid="4730868920742952817">"ລອງໃໝ່ໃນອີກ <xliff:g id="COUNT">%d</xliff:g> ວິນາທີ"</item>
</plurals>
+ <string name="restr_pin_try_later" msgid="973144472490532377">"ລອງໃໝ່ອີກຄັ້ງໃນພາຍຫລັງ."</string>
<string name="transient_navigation_confirmation" msgid="4907844043611123426">"ປັດຢູ່ຂອບຂອງໜ້າຈໍເພື່ອສະແດງແຖບ"</string>
<string name="transient_navigation_confirmation_long" msgid="8061685920508086697">"ປັດຢູ່ຂອບຂອງໜ້າຈໍເພື່ອສະແດງແຖບຂອງລະບົບ"</string>
</resources>
diff --git a/core/res/res/values-lt/strings.xml b/core/res/res/values-lt/strings.xml
index ca810ae..9fa2070 100644
--- a/core/res/res/values-lt/strings.xml
+++ b/core/res/res/values-lt/strings.xml
@@ -1449,7 +1449,6 @@
<string name="activity_chooser_view_see_all" msgid="4292569383976636200">"Žr. viską"</string>
<string name="activity_chooser_view_dialog_title_default" msgid="4710013864974040615">"Pasirinkti veiklą"</string>
<string name="share_action_provider_share_with" msgid="5247684435979149216">"Bendrinti su"</string>
- <string name="status_bar_device_locked" msgid="3092703448690669768">"Įrenginys užrakintas."</string>
<string name="list_delimeter" msgid="3975117572185494152">", "</string>
<string name="sending" msgid="3245653681008218030">"Siunčiama…"</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Paleisti naršyklę?"</string>
@@ -1569,7 +1568,9 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"Atšaukta"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"Klaida rašant turinį"</string>
<string name="reason_unknown" msgid="6048913880184628119">"nežinoma"</string>
+ <string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"Įveskite administratoriaus PIN kodą"</string>
<string name="restr_pin_enter_pin" msgid="3395953421368476103">"Įveskite PIN kodą"</string>
+ <string name="restr_pin_incorrect" msgid="8571512003955077924">"Neteisingas"</string>
<string name="restr_pin_enter_old_pin" msgid="1462206225512910757">"Dabartinis PIN kodas"</string>
<string name="restr_pin_enter_new_pin" msgid="5959606691619959184">"Naujas PIN kodas"</string>
<string name="restr_pin_confirm_pin" msgid="8501523829633146239">"Patvirtinti naują PIN kodą"</string>
@@ -1577,9 +1578,10 @@
<string name="restr_pin_error_doesnt_match" msgid="2224214190906994548">"PIN kodas neatitinka. Bandykite dar kartą."</string>
<string name="restr_pin_error_too_short" msgid="8173982756265777792">"PIN kodas per trumpas. Jis turi būti bent 4 skaitmenų."</string>
<plurals name="restr_pin_countdown">
- <item quantity="one" msgid="4835639969503729874">"Netinkamas PIN kodas. Band. po 1 sek."</item>
- <item quantity="other" msgid="8030607343223287654">"Netinkamas PIN kodas. Band. po <xliff:g id="COUNT">%d</xliff:g> sek."</item>
+ <item quantity="one" msgid="311050995198548675">"Band. dar po 1 s"</item>
+ <item quantity="other" msgid="4730868920742952817">"Band. dar po <xliff:g id="COUNT">%d</xliff:g> s"</item>
</plurals>
+ <string name="restr_pin_try_later" msgid="973144472490532377">"Vėliau bandykite dar kartą"</string>
<string name="transient_navigation_confirmation" msgid="4907844043611123426">"Perbr. ekr. kr., kad atsir. juost."</string>
<string name="transient_navigation_confirmation_long" msgid="8061685920508086697">"Perbraukite iš ekrano krašto, kad atsirastų sistemos juosta"</string>
</resources>
diff --git a/core/res/res/values-lv/strings.xml b/core/res/res/values-lv/strings.xml
index 529e763..5d81fc7 100644
--- a/core/res/res/values-lv/strings.xml
+++ b/core/res/res/values-lv/strings.xml
@@ -1449,7 +1449,6 @@
<string name="activity_chooser_view_see_all" msgid="4292569383976636200">"Skatīt visu"</string>
<string name="activity_chooser_view_dialog_title_default" msgid="4710013864974040615">"Darbības izvēle"</string>
<string name="share_action_provider_share_with" msgid="5247684435979149216">"Kopīgošana ar:"</string>
- <string name="status_bar_device_locked" msgid="3092703448690669768">"Ierīce ir bloķēta."</string>
<string name="list_delimeter" msgid="3975117572185494152">", "</string>
<string name="sending" msgid="3245653681008218030">"Notiek sūtīšana…"</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Vai palaist pārlūkprogrammu?"</string>
@@ -1569,7 +1568,9 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"Atcelts"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"Rakstot saturu, radās kļūda."</string>
<string name="reason_unknown" msgid="6048913880184628119">"nezināms"</string>
+ <string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"Administratora PIN ievadīšana"</string>
<string name="restr_pin_enter_pin" msgid="3395953421368476103">"Ievadiet PIN."</string>
+ <string name="restr_pin_incorrect" msgid="8571512003955077924">"Nepareizs"</string>
<string name="restr_pin_enter_old_pin" msgid="1462206225512910757">"Pašreizējais PIN"</string>
<string name="restr_pin_enter_new_pin" msgid="5959606691619959184">"Jaunais PIN"</string>
<string name="restr_pin_confirm_pin" msgid="8501523829633146239">"Apstipriniet jauno PIN."</string>
@@ -1577,9 +1578,10 @@
<string name="restr_pin_error_doesnt_match" msgid="2224214190906994548">"Ievadītie PIN neatbilst. Mēģiniet vēlreiz."</string>
<string name="restr_pin_error_too_short" msgid="8173982756265777792">"PIN ir pārāk īss. Tam ir jābūt vismaz 4 ciparus garam."</string>
<plurals name="restr_pin_countdown">
- <item quantity="one" msgid="4835639969503729874">"PIN nav pareizs. Mēģiniet pēc 1 s."</item>
- <item quantity="other" msgid="8030607343223287654">"PIN nav pareizs. Mēģiniet pēc <xliff:g id="COUNT">%d</xliff:g> s."</item>
+ <item quantity="one" msgid="311050995198548675">"Mēģ. vēl pēc 1 s"</item>
+ <item quantity="other" msgid="4730868920742952817">"Mēģ. vēl pēc <xliff:g id="COUNT">%d</xliff:g> s"</item>
</plurals>
+ <string name="restr_pin_try_later" msgid="973144472490532377">"Vēlāk mēģiniet vēlreiz."</string>
<string name="transient_navigation_confirmation" msgid="4907844043611123426">"Velciet no malas, lai atvērtu joslu"</string>
<string name="transient_navigation_confirmation_long" msgid="8061685920508086697">"Velciet no ekrāna malas, lai atvērtu sistēmas joslu."</string>
</resources>
diff --git a/core/res/res/values-mn-rMN/strings.xml b/core/res/res/values-mn-rMN/strings.xml
index 25a4f1b..3fe7899 100644
--- a/core/res/res/values-mn-rMN/strings.xml
+++ b/core/res/res/values-mn-rMN/strings.xml
@@ -1449,7 +1449,6 @@
<string name="activity_chooser_view_see_all" msgid="4292569383976636200">"Бүгдийг харах"</string>
<string name="activity_chooser_view_dialog_title_default" msgid="4710013864974040615">"Активити сонгох"</string>
<string name="share_action_provider_share_with" msgid="5247684435979149216">"Хуваалцах"</string>
- <string name="status_bar_device_locked" msgid="3092703448690669768">"Төхөөрөмж түгжигдсэн."</string>
<string name="list_delimeter" msgid="3975117572185494152">", "</string>
<string name="sending" msgid="3245653681008218030">"Илгээж байна ..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Хөтөч ажиллуулах уу?"</string>
@@ -1569,7 +1568,9 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"Цуцлагдсан"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"Контентыг бичих явцад алдаа гарсан"</string>
<string name="reason_unknown" msgid="6048913880184628119">"тодорхойгүй"</string>
+ <string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"Админ PIN оруулна уу"</string>
<string name="restr_pin_enter_pin" msgid="3395953421368476103">"PIN оруулна уу"</string>
+ <string name="restr_pin_incorrect" msgid="8571512003955077924">"Буруу"</string>
<string name="restr_pin_enter_old_pin" msgid="1462206225512910757">"Одоогийн PIN"</string>
<string name="restr_pin_enter_new_pin" msgid="5959606691619959184">"Шинэ PIN"</string>
<string name="restr_pin_confirm_pin" msgid="8501523829633146239">"Шинэ PIN-г баталгаажуулах"</string>
@@ -1577,9 +1578,10 @@
<string name="restr_pin_error_doesnt_match" msgid="2224214190906994548">"PIN таарахгүй байна. Дахин оролдоно уу."</string>
<string name="restr_pin_error_too_short" msgid="8173982756265777792">"PIN хэт богино байна. Хамгийн багадаа 4 цифртэй байх ёстой."</string>
<plurals name="restr_pin_countdown">
- <item quantity="one" msgid="4835639969503729874">"Буруу PIN. 1 секундын дараа дахин оролдоно уу."</item>
- <item quantity="other" msgid="8030607343223287654">"Буруу PIN. <xliff:g id="COUNT">%d</xliff:g> секундын дараа дахин оролдоно уу."</item>
+ <item quantity="one" msgid="311050995198548675">"1 секундын дараа дахин оролдоно уу"</item>
+ <item quantity="other" msgid="4730868920742952817">"<xliff:g id="COUNT">%d</xliff:g> секундын дараа дахин оролдоно уу"</item>
</plurals>
+ <string name="restr_pin_try_later" msgid="973144472490532377">"Дараа дахин оролдоно уу"</string>
<string name="transient_navigation_confirmation" msgid="4907844043611123426">"Баганыг харуулахын тулд дэлгэцийн ирмэгийг шудрана уу"</string>
<string name="transient_navigation_confirmation_long" msgid="8061685920508086697">"Системийн баганыг гаргахын тулд дэлгэцийн ирмэгээс шудрана уу"</string>
</resources>
diff --git a/core/res/res/values-ms-rMY/strings.xml b/core/res/res/values-ms-rMY/strings.xml
index 0088f44..748fc5a 100644
--- a/core/res/res/values-ms-rMY/strings.xml
+++ b/core/res/res/values-ms-rMY/strings.xml
@@ -1449,7 +1449,6 @@
<string name="activity_chooser_view_see_all" msgid="4292569383976636200">"Lihat semua"</string>
<string name="activity_chooser_view_dialog_title_default" msgid="4710013864974040615">"Pilih aktiviti"</string>
<string name="share_action_provider_share_with" msgid="5247684435979149216">"Kongsi dengan"</string>
- <string name="status_bar_device_locked" msgid="3092703448690669768">"Peranti dikunci."</string>
<string name="list_delimeter" msgid="3975117572185494152">", "</string>
<string name="sending" msgid="3245653681008218030">"Menghantar…"</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Lancarkan Penyemak Imbas?"</string>
@@ -1569,7 +1568,9 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"Dibatalkan"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"Ralat menulis kandungan"</string>
<string name="reason_unknown" msgid="6048913880184628119">"tidak diketahui"</string>
+ <string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"Masukkan PIN pentadbir"</string>
<string name="restr_pin_enter_pin" msgid="3395953421368476103">"Masukkan PIN"</string>
+ <string name="restr_pin_incorrect" msgid="8571512003955077924">"Salah"</string>
<string name="restr_pin_enter_old_pin" msgid="1462206225512910757">"PIN semasa"</string>
<string name="restr_pin_enter_new_pin" msgid="5959606691619959184">"PIN baharu"</string>
<string name="restr_pin_confirm_pin" msgid="8501523829633146239">"Sahkan PIN baharu"</string>
@@ -1577,9 +1578,10 @@
<string name="restr_pin_error_doesnt_match" msgid="2224214190906994548">"PIN tidak sepadan. Cuba lagi."</string>
<string name="restr_pin_error_too_short" msgid="8173982756265777792">"PIN terlalu pendek. Mesti sekurang-kurangnya 4 angka."</string>
<plurals name="restr_pin_countdown">
- <item quantity="one" msgid="4835639969503729874">"PIN salah. Cuba lagi dalam masa 1 saat."</item>
- <item quantity="other" msgid="8030607343223287654">"PIN salah. Cuba lagi dalam masa <xliff:g id="COUNT">%d</xliff:g> saat."</item>
+ <item quantity="one" msgid="311050995198548675">"Cuba lg dlm 1 st"</item>
+ <item quantity="other" msgid="4730868920742952817">"Cuba lg dlm <xliff:g id="COUNT">%d</xliff:g> st"</item>
</plurals>
+ <string name="restr_pin_try_later" msgid="973144472490532377">"Cuba sebentar lagi"</string>
<string name="transient_navigation_confirmation" msgid="4907844043611123426">"Leret bhg tepi skrin utk serlah bar"</string>
<string name="transient_navigation_confirmation_long" msgid="8061685920508086697">"Leret dari tepi skrin untuk menampakkan bar sistem"</string>
</resources>
diff --git a/core/res/res/values-nb/strings.xml b/core/res/res/values-nb/strings.xml
index ba81a46..f53f817 100644
--- a/core/res/res/values-nb/strings.xml
+++ b/core/res/res/values-nb/strings.xml
@@ -360,8 +360,8 @@
<string name="permdesc_bindAccessibilityService" msgid="7034615928609331368">"Gir innehaveren tillatelse til å bindes til det øverste nivået av grensesnittet for en tilgjengelighetstjeneste. Skal aldri være nødvendig for vanlige apper."</string>
<string name="permlab_bindPrintService" msgid="8462815179572748761">"binding til en utskriftstjeneste"</string>
<string name="permdesc_bindPrintService" msgid="7960067623209111135">"Gir innehaveren tillatelse til å binde til toppnivået av brukergrensesnittet for en utskriftstjeneste. Dette skal ikke være nødvendig for vanlige apper."</string>
- <string name="permlab_bindPrintSpoolerService" msgid="6807762783744125954">"binde til en tjeneste for utskriftskø"</string>
- <string name="permdesc_bindPrintSpoolerService" msgid="3680552285933318372">"Gir innehaveren tillatelse til å binde til toppnivået av brukergrensesnittet for en tjeneste for utskriftskø. Dette skal ikke være nødvendig for vanlige apper."</string>
+ <string name="permlab_bindPrintSpoolerService" msgid="6807762783744125954">"binde til en utskriftskøtjeneste"</string>
+ <string name="permdesc_bindPrintSpoolerService" msgid="3680552285933318372">"Gir innehaveren tillatelse til å binde til toppnivået av brukergrensesnittet for en utskriftskøtjeneste. Dette skal ikke være nødvendig for vanlige apper."</string>
<string name="permlab_bindNfcService" msgid="2752731300419410724">"binding til NFC-tjenesten"</string>
<string name="permdesc_bindNfcService" msgid="6120647629174066862">"Tillater eieren å binde seg til apper som emulerer NFC-kort. Skal aldri være nødvendig for vanlige apper."</string>
<string name="permlab_bindTextService" msgid="7358378401915287938">"binde til en teksttjeneste"</string>
@@ -1449,7 +1449,6 @@
<string name="activity_chooser_view_see_all" msgid="4292569383976636200">"Se alle"</string>
<string name="activity_chooser_view_dialog_title_default" msgid="4710013864974040615">"Velg aktivitet"</string>
<string name="share_action_provider_share_with" msgid="5247684435979149216">"Deling med"</string>
- <string name="status_bar_device_locked" msgid="3092703448690669768">"Enheten er låst."</string>
<string name="list_delimeter" msgid="3975117572185494152">", "</string>
<string name="sending" msgid="3245653681008218030">"Sender …"</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Vil du starte nettleseren?"</string>
@@ -1569,7 +1568,9 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"Kansellert"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"Feil under skriving av innhold"</string>
<string name="reason_unknown" msgid="6048913880184628119">"ukjent"</string>
+ <string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"Skriv inn administrator-PIN-koden"</string>
<string name="restr_pin_enter_pin" msgid="3395953421368476103">"Skriv inn PIN-koden"</string>
+ <string name="restr_pin_incorrect" msgid="8571512003955077924">"Feil"</string>
<string name="restr_pin_enter_old_pin" msgid="1462206225512910757">"Gjeldende PIN-kode:"</string>
<string name="restr_pin_enter_new_pin" msgid="5959606691619959184">"Ny PIN-kode"</string>
<string name="restr_pin_confirm_pin" msgid="8501523829633146239">"Bekreft ny PIN-kode"</string>
@@ -1577,9 +1578,10 @@
<string name="restr_pin_error_doesnt_match" msgid="2224214190906994548">"PIN-kodene stemmer ikke overens. Prøv på nytt."</string>
<string name="restr_pin_error_too_short" msgid="8173982756265777792">"PIN-koden er for kort. Den må bestå av minst fire sifre."</string>
<plurals name="restr_pin_countdown">
- <item quantity="one" msgid="4835639969503729874">"Feil PIN-kode. Prøv på nytt om 1 sekund."</item>
- <item quantity="other" msgid="8030607343223287654">"Feil PIN-kode. Prøv på nytt om <xliff:g id="COUNT">%d</xliff:g> sekunder."</item>
+ <item quantity="one" msgid="311050995198548675">"Prøv på nytt om 1 sekund"</item>
+ <item quantity="other" msgid="4730868920742952817">"Prøv på nytt om <xliff:g id="COUNT">%d</xliff:g> sekunder"</item>
</plurals>
+ <string name="restr_pin_try_later" msgid="973144472490532377">"Prøv på nytt senere"</string>
<string name="transient_navigation_confirmation" msgid="4907844043611123426">"Sveip på kanten av skjermen for å få frem feltet"</string>
<string name="transient_navigation_confirmation_long" msgid="8061685920508086697">"Sveip fra kanten på skjermen for å få frem systemfeltet"</string>
</resources>
diff --git a/core/res/res/values-ne-rNP/strings.xml b/core/res/res/values-ne-rNP/strings.xml
index e00d0af..67775da 100644
--- a/core/res/res/values-ne-rNP/strings.xml
+++ b/core/res/res/values-ne-rNP/strings.xml
@@ -161,7 +161,7 @@
<string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"आवाज बन्द छ"</string>
<string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"ध्वनि खुल्ला छ"</string>
<string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"हवाइजहाज मोड"</string>
- <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"उडान मोड खुला छ"</string>
+ <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"हवाइजहाज मोड खुला छ"</string>
<string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"हवाइजहाज मोड बन्द छ"</string>
<string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"९९९+"</string>
<string name="safeMode" msgid="2788228061547930246">"सुरक्षित मोड"</string>
@@ -1449,7 +1449,6 @@
<string name="activity_chooser_view_see_all" msgid="4292569383976636200">"सबै हेर्नुहोस्"</string>
<string name="activity_chooser_view_dialog_title_default" msgid="4710013864974040615">"गतिविधि छनौट गर्नुहोस्"</string>
<string name="share_action_provider_share_with" msgid="5247684435979149216">"साझेदारी गर्नुहोस्..."</string>
- <string name="status_bar_device_locked" msgid="3092703448690669768">"उपकरण लक छ।"</string>
<string name="list_delimeter" msgid="3975117572185494152">", "</string>
<string name="sending" msgid="3245653681008218030">"पठाउँदै..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"ब्राउजर सुरु गर्ने हो?"</string>
@@ -1569,7 +1568,9 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"रद्द गरियो"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"सामाग्री लेखनमा त्रुटि"</string>
<string name="reason_unknown" msgid="6048913880184628119">"अज्ञात"</string>
+ <string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"प्रशासक PIN प्रविष्ट गर्नुहोस्"</string>
<string name="restr_pin_enter_pin" msgid="3395953421368476103">"PIN प्रविष्टि गर्नुहोस्"</string>
+ <string name="restr_pin_incorrect" msgid="8571512003955077924">"गलत"</string>
<string name="restr_pin_enter_old_pin" msgid="1462206225512910757">"वर्तमान PIN"</string>
<string name="restr_pin_enter_new_pin" msgid="5959606691619959184">"नयाँ PIN"</string>
<string name="restr_pin_confirm_pin" msgid="8501523829633146239">"नयाँ PIN निश्चित गर्नुहोस्"</string>
@@ -1577,9 +1578,10 @@
<string name="restr_pin_error_doesnt_match" msgid="2224214190906994548">"PIN हरू मेल खाएनन्। पुनः प्रयास गर्नुहोस्।"</string>
<string name="restr_pin_error_too_short" msgid="8173982756265777792">"PIN अति छोटो भयो। कम्तीमा ४ अङ्क हुन आवश्यक छ।"</string>
<plurals name="restr_pin_countdown">
- <item quantity="one" msgid="4835639969503729874">"गलत PIN । १ सेकेन्डमा पुनः प्रयास गर्नुहोस्।"</item>
- <item quantity="other" msgid="8030607343223287654">"गलत PIN । <xliff:g id="COUNT">%d</xliff:g> सेकेन्डमा पुनः प्रयास गर्नुहोस्।"</item>
+ <item quantity="one" msgid="311050995198548675">"१ सेकेन्ड पछि पुन: प्रयास गर्नुहोला।"</item>
+ <item quantity="other" msgid="4730868920742952817">"<xliff:g id="COUNT">%d</xliff:g> सेकेन्डमा पुन: प्रयास गर्नुहोस्"</item>
</plurals>
+ <string name="restr_pin_try_later" msgid="973144472490532377">"पछि पुन: प्रयास गर्नुहोस्"</string>
<string name="transient_navigation_confirmation" msgid="4907844043611123426">"पट्टि देखिने बनाउन स्क्रिनको छेउमा स्वाइप गर्नुहोस्"</string>
<string name="transient_navigation_confirmation_long" msgid="8061685920508086697">"प्रणाली पट्टि देखिने बनाउन स्क्रिनको छेउबाट स्वाइप गर्नुहोस्"</string>
</resources>
diff --git a/core/res/res/values-nl/strings.xml b/core/res/res/values-nl/strings.xml
index 1ae4607..db0c218 100644
--- a/core/res/res/values-nl/strings.xml
+++ b/core/res/res/values-nl/strings.xml
@@ -1449,7 +1449,6 @@
<string name="activity_chooser_view_see_all" msgid="4292569383976636200">"Alles weergeven"</string>
<string name="activity_chooser_view_dialog_title_default" msgid="4710013864974040615">"Een activiteit kiezen"</string>
<string name="share_action_provider_share_with" msgid="5247684435979149216">"Delen met"</string>
- <string name="status_bar_device_locked" msgid="3092703448690669768">"Apparaat vergrendeld."</string>
<string name="list_delimeter" msgid="3975117572185494152">", "</string>
<string name="sending" msgid="3245653681008218030">"Verzenden..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Browser starten?"</string>
@@ -1569,7 +1568,9 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"Geannuleerd"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"Fout bij schrijven van inhoud"</string>
<string name="reason_unknown" msgid="6048913880184628119">"onbekend"</string>
+ <string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"Pincode voor beheerder opgeven"</string>
<string name="restr_pin_enter_pin" msgid="3395953421368476103">"Geef de pincode op"</string>
+ <string name="restr_pin_incorrect" msgid="8571512003955077924">"Onjuist"</string>
<string name="restr_pin_enter_old_pin" msgid="1462206225512910757">"Huidige pincode"</string>
<string name="restr_pin_enter_new_pin" msgid="5959606691619959184">"Nieuwe pincode"</string>
<string name="restr_pin_confirm_pin" msgid="8501523829633146239">"Nieuwe pincode bevestigen"</string>
@@ -1577,9 +1578,10 @@
<string name="restr_pin_error_doesnt_match" msgid="2224214190906994548">"De pincodes komen niet overeen. Probeer het opnieuw."</string>
<string name="restr_pin_error_too_short" msgid="8173982756265777792">"Pincode is te kort. Moet ten minste vier cijfers lang zijn."</string>
<plurals name="restr_pin_countdown">
- <item quantity="one" msgid="4835639969503729874">"Onjuiste pincode. Probeer het over één seconde opnieuw."</item>
- <item quantity="other" msgid="8030607343223287654">"Onjuiste pincode. Probeer het over <xliff:g id="COUNT">%d</xliff:g> seconden opnieuw."</item>
+ <item quantity="one" msgid="311050995198548675">"Probeer het over één seconde opnieuw"</item>
+ <item quantity="other" msgid="4730868920742952817">"Probeer het over <xliff:g id="COUNT">%d</xliff:g> seconden opnieuw"</item>
</plurals>
+ <string name="restr_pin_try_later" msgid="973144472490532377">"Probeer het later opnieuw"</string>
<string name="transient_navigation_confirmation" msgid="4907844043611123426">"Veeg vanaf de rand voor de balk"</string>
<string name="transient_navigation_confirmation_long" msgid="8061685920508086697">"Veeg vanaf de rand van het scherm om de systeembalk weer te geven"</string>
</resources>
diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml
index ade7c405..d2cf5b8 100644
--- a/core/res/res/values-pl/strings.xml
+++ b/core/res/res/values-pl/strings.xml
@@ -1449,7 +1449,6 @@
<string name="activity_chooser_view_see_all" msgid="4292569383976636200">"Zobacz wszystkie"</string>
<string name="activity_chooser_view_dialog_title_default" msgid="4710013864974040615">"Wybierz działanie"</string>
<string name="share_action_provider_share_with" msgid="5247684435979149216">"Udostępnij przez"</string>
- <string name="status_bar_device_locked" msgid="3092703448690669768">"Urządzenie zablokowane."</string>
<string name="list_delimeter" msgid="3975117572185494152">", "</string>
<string name="sending" msgid="3245653681008218030">"Wysyłanie..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Uruchomić przeglądarkę?"</string>
@@ -1569,7 +1568,9 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"Anulowane"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"Błąd podczas zapisu treści"</string>
<string name="reason_unknown" msgid="6048913880184628119">"brak informacji"</string>
+ <string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"Podaj PIN administratora"</string>
<string name="restr_pin_enter_pin" msgid="3395953421368476103">"Podaj PIN"</string>
+ <string name="restr_pin_incorrect" msgid="8571512003955077924">"Nieprawidłowy"</string>
<string name="restr_pin_enter_old_pin" msgid="1462206225512910757">"Bieżący PIN"</string>
<string name="restr_pin_enter_new_pin" msgid="5959606691619959184">"Nowy PIN"</string>
<string name="restr_pin_confirm_pin" msgid="8501523829633146239">"Potwierdź nowy PIN"</string>
@@ -1577,9 +1578,10 @@
<string name="restr_pin_error_doesnt_match" msgid="2224214190906994548">"Kody PIN nie są identyczne. Spróbuj ponownie."</string>
<string name="restr_pin_error_too_short" msgid="8173982756265777792">"PIN jest za krótki. Musi mieć co najmniej 4 cyfry."</string>
<plurals name="restr_pin_countdown">
- <item quantity="one" msgid="4835639969503729874">"Nieprawidłowy PIN. Spróbuj ponownie za 1 s."</item>
- <item quantity="other" msgid="8030607343223287654">"Nieprawidłowy PIN. Spróbuj ponownie za <xliff:g id="COUNT">%d</xliff:g> s."</item>
+ <item quantity="one" msgid="311050995198548675">"Spróbuj za sekundę"</item>
+ <item quantity="other" msgid="4730868920742952817">"Spróbuj za <xliff:g id="COUNT">%d</xliff:g> s"</item>
</plurals>
+ <string name="restr_pin_try_later" msgid="973144472490532377">"Spróbuj ponownie później"</string>
<string name="transient_navigation_confirmation" msgid="4907844043611123426">"Przesuń palcem od krawędzi ekranu, by odkryć pasek"</string>
<string name="transient_navigation_confirmation_long" msgid="8061685920508086697">"Przesuń palcem od krawędzi ekranu, by odkryć pasek systemu"</string>
</resources>
diff --git a/core/res/res/values-pt-rPT/strings.xml b/core/res/res/values-pt-rPT/strings.xml
index 810b5b3..a21994b 100644
--- a/core/res/res/values-pt-rPT/strings.xml
+++ b/core/res/res/values-pt-rPT/strings.xml
@@ -1449,7 +1449,6 @@
<string name="activity_chooser_view_see_all" msgid="4292569383976636200">"Ver tudo"</string>
<string name="activity_chooser_view_dialog_title_default" msgid="4710013864974040615">"Escolher atividade"</string>
<string name="share_action_provider_share_with" msgid="5247684435979149216">"Partilhar com"</string>
- <string name="status_bar_device_locked" msgid="3092703448690669768">"Aparelho bloqueado."</string>
<string name="list_delimeter" msgid="3975117572185494152">", "</string>
<string name="sending" msgid="3245653681008218030">"A enviar..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Iniciar Navegador?"</string>
@@ -1569,7 +1568,9 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"Cancelada"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"Erro ao escrever conteúdo"</string>
<string name="reason_unknown" msgid="6048913880184628119">"desconhecido"</string>
+ <string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"Introduza o PIN de administrador"</string>
<string name="restr_pin_enter_pin" msgid="3395953421368476103">"Introduzir PIN"</string>
+ <string name="restr_pin_incorrect" msgid="8571512003955077924">"Incorreto"</string>
<string name="restr_pin_enter_old_pin" msgid="1462206225512910757">"PIN Atual"</string>
<string name="restr_pin_enter_new_pin" msgid="5959606691619959184">"Novo PIN"</string>
<string name="restr_pin_confirm_pin" msgid="8501523829633146239">"Confirme o novo PIN"</string>
@@ -1577,9 +1578,10 @@
<string name="restr_pin_error_doesnt_match" msgid="2224214190906994548">"Os PINs não correspondem. Tente novamente."</string>
<string name="restr_pin_error_too_short" msgid="8173982756265777792">"O PIN é demasiado pequeno. Deve ter, no mínimo, 4 dígitos."</string>
<plurals name="restr_pin_countdown">
- <item quantity="one" msgid="4835639969503729874">"PIN incorreto. Tente novamente em 1 seg."</item>
- <item quantity="other" msgid="8030607343223287654">"PIN incorreto. Tente novamente em <xliff:g id="COUNT">%d</xliff:g> seg."</item>
+ <item quantity="one" msgid="311050995198548675">"Tente em: 1 seg"</item>
+ <item quantity="other" msgid="4730868920742952817">"Tente em: <xliff:g id="COUNT">%d</xliff:g> seg"</item>
</plurals>
+ <string name="restr_pin_try_later" msgid="973144472490532377">"Tente novamente mais tarde"</string>
<string name="transient_navigation_confirmation" msgid="4907844043611123426">"Desliz. da extr. do ecrã p/ revelar barra"</string>
<string name="transient_navigation_confirmation_long" msgid="8061685920508086697">"Deslize da extremidade do ecrã para revelar a barra do sistema"</string>
</resources>
diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml
index f457e21..1189c2a 100644
--- a/core/res/res/values-pt/strings.xml
+++ b/core/res/res/values-pt/strings.xml
@@ -1449,7 +1449,6 @@
<string name="activity_chooser_view_see_all" msgid="4292569383976636200">"Ver tudo"</string>
<string name="activity_chooser_view_dialog_title_default" msgid="4710013864974040615">"Selecione a atividade"</string>
<string name="share_action_provider_share_with" msgid="5247684435979149216">"Compartilhar com"</string>
- <string name="status_bar_device_locked" msgid="3092703448690669768">"Dispositivo bloqueado."</string>
<string name="list_delimeter" msgid="3975117572185494152">", "</string>
<string name="sending" msgid="3245653681008218030">"Enviando..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Abrir Navegador?"</string>
@@ -1569,7 +1568,9 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"Cancelado"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"Erro ao gravar o conteúdo"</string>
<string name="reason_unknown" msgid="6048913880184628119">"desconhecido"</string>
+ <string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"Inserir PIN do administrador"</string>
<string name="restr_pin_enter_pin" msgid="3395953421368476103">"Insira o PIN"</string>
+ <string name="restr_pin_incorrect" msgid="8571512003955077924">"Incorreto"</string>
<string name="restr_pin_enter_old_pin" msgid="1462206225512910757">"PIN atual"</string>
<string name="restr_pin_enter_new_pin" msgid="5959606691619959184">"Novo PIN"</string>
<string name="restr_pin_confirm_pin" msgid="8501523829633146239">"Confirme o novo PIN"</string>
@@ -1577,9 +1578,10 @@
<string name="restr_pin_error_doesnt_match" msgid="2224214190906994548">"Os PINs não coincidem. Tente novamente."</string>
<string name="restr_pin_error_too_short" msgid="8173982756265777792">"O PIN é curto demais. Deve ter pelo menos 4 dígitos."</string>
<plurals name="restr_pin_countdown">
- <item quantity="one" msgid="4835639969503729874">"PIN incorreto. Tente novamente em 1 segundo."</item>
- <item quantity="other" msgid="8030607343223287654">"PIN incorreto. Tente novamente em <xliff:g id="COUNT">%d</xliff:g> segundos."</item>
+ <item quantity="one" msgid="311050995198548675">"Tente novamente em 1 segundo"</item>
+ <item quantity="other" msgid="4730868920742952817">"Tente novamente em <xliff:g id="COUNT">%d</xliff:g> segundos"</item>
</plurals>
+ <string name="restr_pin_try_later" msgid="973144472490532377">"Tente novamente mais tarde"</string>
<string name="transient_navigation_confirmation" msgid="4907844043611123426">"Deslize a borda da tela para ver a barra"</string>
<string name="transient_navigation_confirmation_long" msgid="8061685920508086697">"Deslize a partir da borda da tela ver a barra do sistema"</string>
</resources>
diff --git a/core/res/res/values-rm/strings.xml b/core/res/res/values-rm/strings.xml
index 74830ef..68f0e06 100644
--- a/core/res/res/values-rm/strings.xml
+++ b/core/res/res/values-rm/strings.xml
@@ -2337,8 +2337,6 @@
<skip />
<!-- no translation found for share_action_provider_share_with (5247684435979149216) -->
<skip />
- <!-- no translation found for status_bar_device_locked (3092703448690669768) -->
- <skip />
<!-- no translation found for list_delimeter (3975117572185494152) -->
<skip />
<!-- no translation found for sending (3245653681008218030) -->
@@ -2578,8 +2576,12 @@
<skip />
<!-- no translation found for reason_unknown (6048913880184628119) -->
<skip />
+ <!-- no translation found for restr_pin_enter_admin_pin (783643731895143970) -->
+ <skip />
<!-- no translation found for restr_pin_enter_pin (3395953421368476103) -->
<skip />
+ <!-- no translation found for restr_pin_incorrect (8571512003955077924) -->
+ <skip />
<!-- no translation found for restr_pin_enter_old_pin (1462206225512910757) -->
<skip />
<!-- no translation found for restr_pin_enter_new_pin (5959606691619959184) -->
@@ -2592,8 +2594,10 @@
<skip />
<!-- no translation found for restr_pin_error_too_short (8173982756265777792) -->
<skip />
- <!-- no translation found for restr_pin_countdown:one (4835639969503729874) -->
- <!-- no translation found for restr_pin_countdown:other (8030607343223287654) -->
+ <!-- no translation found for restr_pin_countdown:one (311050995198548675) -->
+ <!-- no translation found for restr_pin_countdown:other (4730868920742952817) -->
+ <!-- no translation found for restr_pin_try_later (973144472490532377) -->
+ <skip />
<!-- no translation found for transient_navigation_confirmation (4907844043611123426) -->
<skip />
<!-- no translation found for transient_navigation_confirmation_long (8061685920508086697) -->
diff --git a/core/res/res/values-ro/strings.xml b/core/res/res/values-ro/strings.xml
index 4ab2b43..0e7ba3a 100644
--- a/core/res/res/values-ro/strings.xml
+++ b/core/res/res/values-ro/strings.xml
@@ -1449,7 +1449,6 @@
<string name="activity_chooser_view_see_all" msgid="4292569383976636200">"Afişaţi-le pe toate"</string>
<string name="activity_chooser_view_dialog_title_default" msgid="4710013864974040615">"Alegeţi activitatea"</string>
<string name="share_action_provider_share_with" msgid="5247684435979149216">"Distribuiţi pentru"</string>
- <string name="status_bar_device_locked" msgid="3092703448690669768">"Dispozitiv blocat."</string>
<string name="list_delimeter" msgid="3975117572185494152">", "</string>
<string name="sending" msgid="3245653681008218030">"Se trimite..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Lansaţi browserul?"</string>
@@ -1569,7 +1568,9 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"Anulat"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"Eroare la scrierea conținutului"</string>
<string name="reason_unknown" msgid="6048913880184628119">"necunoscut"</string>
+ <string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"Introduceți codul PIN de administrator"</string>
<string name="restr_pin_enter_pin" msgid="3395953421368476103">"Introduceți codul PIN"</string>
+ <string name="restr_pin_incorrect" msgid="8571512003955077924">"Incorect"</string>
<string name="restr_pin_enter_old_pin" msgid="1462206225512910757">"Codul PIN actual"</string>
<string name="restr_pin_enter_new_pin" msgid="5959606691619959184">"Codul PIN nou"</string>
<string name="restr_pin_confirm_pin" msgid="8501523829633146239">"Confirmați noul cod PIN"</string>
@@ -1577,9 +1578,10 @@
<string name="restr_pin_error_doesnt_match" msgid="2224214190906994548">"Codurile PIN nu se potrivesc. Încercați din nou."</string>
<string name="restr_pin_error_too_short" msgid="8173982756265777792">"Codul PIN este prea scurt. Trebuie să aibă cel puțin 4 cifre."</string>
<plurals name="restr_pin_countdown">
- <item quantity="one" msgid="4835639969503729874">"PIN incorect. Reîncercați în 1 sec."</item>
- <item quantity="other" msgid="8030607343223287654">"PIN incorect. Reîncercați în <xliff:g id="COUNT">%d</xliff:g> sec."</item>
+ <item quantity="one" msgid="311050995198548675">"Reîncercați în 1 sec."</item>
+ <item quantity="other" msgid="4730868920742952817">"Reîncercați în <xliff:g id="COUNT">%d</xliff:g> sec."</item>
</plurals>
+ <string name="restr_pin_try_later" msgid="973144472490532377">"Reîncercați mai târziu"</string>
<string name="transient_navigation_confirmation" msgid="4907844043611123426">"Glisați din margine pentru a afișa"</string>
<string name="transient_navigation_confirmation_long" msgid="8061685920508086697">"Glisați dinspre marginea ecranului pentru a afișa bara de sistem"</string>
</resources>
diff --git a/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml
index 5635381..80e806f 100644
--- a/core/res/res/values-ru/strings.xml
+++ b/core/res/res/values-ru/strings.xml
@@ -1449,7 +1449,6 @@
<string name="activity_chooser_view_see_all" msgid="4292569383976636200">"Показать все"</string>
<string name="activity_chooser_view_dialog_title_default" msgid="4710013864974040615">"Выберите"</string>
<string name="share_action_provider_share_with" msgid="5247684435979149216">"Открыть доступ"</string>
- <string name="status_bar_device_locked" msgid="3092703448690669768">"Устройство заблокировано."</string>
<string name="list_delimeter" msgid="3975117572185494152">", "</string>
<string name="sending" msgid="3245653681008218030">"Отправка..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Запустить браузер?"</string>
@@ -1569,7 +1568,9 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"Печать отменена"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"Ошибка записи"</string>
<string name="reason_unknown" msgid="6048913880184628119">"неизвестно"</string>
+ <string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"Введите PIN-код администратора"</string>
<string name="restr_pin_enter_pin" msgid="3395953421368476103">"Введите PIN-код"</string>
+ <string name="restr_pin_incorrect" msgid="8571512003955077924">"Ошибка"</string>
<string name="restr_pin_enter_old_pin" msgid="1462206225512910757">"Текущий PIN-код"</string>
<string name="restr_pin_enter_new_pin" msgid="5959606691619959184">"Новый PIN-код"</string>
<string name="restr_pin_confirm_pin" msgid="8501523829633146239">"Введите новый PIN-код ещё раз"</string>
@@ -1577,9 +1578,10 @@
<string name="restr_pin_error_doesnt_match" msgid="2224214190906994548">"PIN-коды не совпадают. Повторите попытку."</string>
<string name="restr_pin_error_too_short" msgid="8173982756265777792">"PIN-код должен содержать не менее 4 символов."</string>
<plurals name="restr_pin_countdown">
- <item quantity="one" msgid="4835639969503729874">"Неверный PIN-код. Повторите попытку через 1 сек."</item>
- <item quantity="other" msgid="8030607343223287654">"Неверный PIN-код. Повторите попытку через <xliff:g id="COUNT">%d</xliff:g> сек."</item>
+ <item quantity="one" msgid="311050995198548675">"Повтор через 1 сек."</item>
+ <item quantity="other" msgid="4730868920742952817">"Повтор через <xliff:g id="COUNT">%d</xliff:g> сек."</item>
</plurals>
+ <string name="restr_pin_try_later" msgid="973144472490532377">"Повторите попытку позже."</string>
<string name="transient_navigation_confirmation" msgid="4907844043611123426">"Провести от края к центру – открыть панель"</string>
<string name="transient_navigation_confirmation_long" msgid="8061685920508086697">"Чтобы открыть панель навигации, проведите пальцем от края к центру экрана"</string>
</resources>
diff --git a/core/res/res/values-si-rLK/strings.xml b/core/res/res/values-si-rLK/strings.xml
index 50aa81c..9b32bd9 100644
--- a/core/res/res/values-si-rLK/strings.xml
+++ b/core/res/res/values-si-rLK/strings.xml
@@ -1452,7 +1452,6 @@
<string name="activity_chooser_view_see_all" msgid="4292569383976636200">"සියල්ල බලන්න"</string>
<string name="activity_chooser_view_dialog_title_default" msgid="4710013864974040615">"ක්රියාකාරකම තෝරන්න"</string>
<string name="share_action_provider_share_with" msgid="5247684435979149216">"සමඟ බෙදාගන්න"</string>
- <string name="status_bar_device_locked" msgid="3092703448690669768">"උපාංගයට අගුළු වැටි ඇත."</string>
<string name="list_delimeter" msgid="3975117572185494152">", "</string>
<string name="sending" msgid="3245653681008218030">"යවමින්..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"බ්රවුසරය දියත් කරන්නද?"</string>
@@ -1572,7 +1571,9 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"අවලංගු කරන ලදි"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"අන්තර්ගතය ලිවීමේදී දෝෂයකි"</string>
<string name="reason_unknown" msgid="6048913880184628119">"නොදනී"</string>
+ <string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"පරිපාලකයාගේ PIN එක ඇතුළ් කරන්න"</string>
<string name="restr_pin_enter_pin" msgid="3395953421368476103">"PIN එක ඇතුළු කරන්න"</string>
+ <string name="restr_pin_incorrect" msgid="8571512003955077924">"වැරදියි"</string>
<string name="restr_pin_enter_old_pin" msgid="1462206225512910757">"වත්මන් PIN"</string>
<string name="restr_pin_enter_new_pin" msgid="5959606691619959184">"නව PIN"</string>
<string name="restr_pin_confirm_pin" msgid="8501523829633146239">"නව PIN තහවුරු කරන්න"</string>
@@ -1580,9 +1581,10 @@
<string name="restr_pin_error_doesnt_match" msgid="2224214190906994548">"PIN නොගැළපෙයි. නැවත උත්සහ කරන්න."</string>
<string name="restr_pin_error_too_short" msgid="8173982756265777792">"PIN කුඩා වැඩිය. ඉලක්කම් 4 වත් විය යුතුය."</string>
<plurals name="restr_pin_countdown">
- <item quantity="one" msgid="4835639969503729874">"වැරදි PIN. තත්පරයකින් නැවත උත්සහ කරන්න."</item>
- <item quantity="other" msgid="8030607343223287654">"වැරදි PIN. තත්පර <xliff:g id="COUNT">%d</xliff:g> කින් නැවත උත්සහ කරන්න."</item>
+ <item quantity="one" msgid="311050995198548675">"තවත් තත්පර ^1 කින් යළි උත්සාහ කරන්න"</item>
+ <item quantity="other" msgid="4730868920742952817">"තත්පර <xliff:g id="COUNT">%d</xliff:g> කින් නැවත උත්සහ කරන්න"</item>
</plurals>
+ <string name="restr_pin_try_later" msgid="973144472490532377">"පසුව නැවත උත්සාහ කරන්න"</string>
<string name="transient_navigation_confirmation" msgid="4907844043611123426">"තීරුව අනාවරණයට තිරයේ කෙලවර අදින්න"</string>
<string name="transient_navigation_confirmation_long" msgid="8061685920508086697">"පද්ධති තීරුව අනාවරණයට තිරයේ කෙලවරින් අදින්න"</string>
</resources>
diff --git a/core/res/res/values-sk/strings.xml b/core/res/res/values-sk/strings.xml
index b4ba202..ea118ce 100644
--- a/core/res/res/values-sk/strings.xml
+++ b/core/res/res/values-sk/strings.xml
@@ -1449,7 +1449,6 @@
<string name="activity_chooser_view_see_all" msgid="4292569383976636200">"Zobraziť všetky"</string>
<string name="activity_chooser_view_dialog_title_default" msgid="4710013864974040615">"Vybrať aktivitu"</string>
<string name="share_action_provider_share_with" msgid="5247684435979149216">"Zdieľať s"</string>
- <string name="status_bar_device_locked" msgid="3092703448690669768">"Zariadenie je zamknuté."</string>
<string name="list_delimeter" msgid="3975117572185494152">", "</string>
<string name="sending" msgid="3245653681008218030">"Odosielanie..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Spustiť prehliadač?"</string>
@@ -1569,7 +1568,9 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"Zrušené"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"Pri zapisovaní obsahu došlo ku chybe"</string>
<string name="reason_unknown" msgid="6048913880184628119">"neznáme"</string>
+ <string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"Zadajte kód PIN správcu"</string>
<string name="restr_pin_enter_pin" msgid="3395953421368476103">"Zadajte kód PIN"</string>
+ <string name="restr_pin_incorrect" msgid="8571512003955077924">"Nesprávny kód"</string>
<string name="restr_pin_enter_old_pin" msgid="1462206225512910757">"Aktuálny kód PIN"</string>
<string name="restr_pin_enter_new_pin" msgid="5959606691619959184">"Nový kód PIN"</string>
<string name="restr_pin_confirm_pin" msgid="8501523829633146239">"Potvrďte nový kód PIN"</string>
@@ -1577,9 +1578,10 @@
<string name="restr_pin_error_doesnt_match" msgid="2224214190906994548">"Kódy PIN sa nezhodujú. Skúste to znova."</string>
<string name="restr_pin_error_too_short" msgid="8173982756265777792">"Kód PIN je príliš krátky. Musí mať minimálne 4 číslice."</string>
<plurals name="restr_pin_countdown">
- <item quantity="one" msgid="4835639969503729874">"Nespr. PIN. Skús. o 1 s"</item>
- <item quantity="other" msgid="8030607343223287654">"Nespr. PIN. Skús. o <xliff:g id="COUNT">%d</xliff:g> s"</item>
+ <item quantity="one" msgid="311050995198548675">"Skúste to znova o 1 s."</item>
+ <item quantity="other" msgid="4730868920742952817">"Skúste to znova o <xliff:g id="COUNT">%d</xliff:g> s."</item>
</plurals>
+ <string name="restr_pin_try_later" msgid="973144472490532377">"Skúste to znova neskôr"</string>
<string name="transient_navigation_confirmation" msgid="4907844043611123426">"Panel zobraz. prejdením okraja obr."</string>
<string name="transient_navigation_confirmation_long" msgid="8061685920508086697">"Systémový panel zobrazíte posunutím cez okraj obrazovky"</string>
</resources>
diff --git a/core/res/res/values-sl/strings.xml b/core/res/res/values-sl/strings.xml
index 3336dab..a58e474 100644
--- a/core/res/res/values-sl/strings.xml
+++ b/core/res/res/values-sl/strings.xml
@@ -1449,7 +1449,6 @@
<string name="activity_chooser_view_see_all" msgid="4292569383976636200">"Pokaži vse"</string>
<string name="activity_chooser_view_dialog_title_default" msgid="4710013864974040615">"Izberite dejavnost"</string>
<string name="share_action_provider_share_with" msgid="5247684435979149216">"Delite z"</string>
- <string name="status_bar_device_locked" msgid="3092703448690669768">"Naprava zaklenjena."</string>
<string name="list_delimeter" msgid="3975117572185494152">", "</string>
<string name="sending" msgid="3245653681008218030">"Pošiljanje ..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Ali želite odpreti brskalnik?"</string>
@@ -1569,7 +1568,9 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"Preklicano"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"Napaka pri pisanju vsebine"</string>
<string name="reason_unknown" msgid="6048913880184628119">"neznano"</string>
+ <string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"Vnesite skrbniški PIN"</string>
<string name="restr_pin_enter_pin" msgid="3395953421368476103">"Vnesite PIN"</string>
+ <string name="restr_pin_incorrect" msgid="8571512003955077924">"Napačno"</string>
<string name="restr_pin_enter_old_pin" msgid="1462206225512910757">"Trenutni PIN"</string>
<string name="restr_pin_enter_new_pin" msgid="5959606691619959184">"Novi PIN"</string>
<string name="restr_pin_confirm_pin" msgid="8501523829633146239">"Potrdite novi PIN"</string>
@@ -1577,9 +1578,10 @@
<string name="restr_pin_error_doesnt_match" msgid="2224214190906994548">"Kodi PIN se ne ujemata. Poskusite znova."</string>
<string name="restr_pin_error_too_short" msgid="8173982756265777792">"PIN je prekratek. Imeti mora vsaj 4 števke."</string>
<plurals name="restr_pin_countdown">
- <item quantity="one" msgid="4835639969503729874">"Napačen PIN. Poskusite znova čez eno sekundo."</item>
- <item quantity="other" msgid="8030607343223287654">"Napačen PIN. Poskusite znova čez <xliff:g id="COUNT">%d</xliff:g> s."</item>
+ <item quantity="one" msgid="311050995198548675">"Poskusite znova čez sekundo"</item>
+ <item quantity="other" msgid="4730868920742952817">"Poskusite znova čez <xliff:g id="COUNT">%d</xliff:g> s"</item>
</plurals>
+ <string name="restr_pin_try_later" msgid="973144472490532377">"Poskusite znova pozneje"</string>
<string name="transient_navigation_confirmation" msgid="4907844043611123426">"Povlecite z roba za prikaz vrstice"</string>
<string name="transient_navigation_confirmation_long" msgid="8061685920508086697">"Sistemsko vrstico prikažete tako, da povlečete z roba zaslona"</string>
</resources>
diff --git a/core/res/res/values-sr/strings.xml b/core/res/res/values-sr/strings.xml
index d66f18c..ce4e284 100644
--- a/core/res/res/values-sr/strings.xml
+++ b/core/res/res/values-sr/strings.xml
@@ -1449,7 +1449,6 @@
<string name="activity_chooser_view_see_all" msgid="4292569383976636200">"Прикажи све"</string>
<string name="activity_chooser_view_dialog_title_default" msgid="4710013864974040615">"Избор активности"</string>
<string name="share_action_provider_share_with" msgid="5247684435979149216">"Дели са"</string>
- <string name="status_bar_device_locked" msgid="3092703448690669768">"Уређај је закључан."</string>
<string name="list_delimeter" msgid="3975117572185494152">", "</string>
<string name="sending" msgid="3245653681008218030">"Слање..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Желите ли да покренете прегледач?"</string>
@@ -1569,7 +1568,9 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"Отказано је"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"Грешка при исписивању садржаја"</string>
<string name="reason_unknown" msgid="6048913880184628119">"непознато"</string>
+ <string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"Унесите PIN администратора"</string>
<string name="restr_pin_enter_pin" msgid="3395953421368476103">"Унесите PIN"</string>
+ <string name="restr_pin_incorrect" msgid="8571512003955077924">"Нетачно"</string>
<string name="restr_pin_enter_old_pin" msgid="1462206225512910757">"Актуелни PIN"</string>
<string name="restr_pin_enter_new_pin" msgid="5959606691619959184">"Нови PIN"</string>
<string name="restr_pin_confirm_pin" msgid="8501523829633146239">"Потврдите нови PIN"</string>
@@ -1577,9 +1578,10 @@
<string name="restr_pin_error_doesnt_match" msgid="2224214190906994548">"PIN-ови се не подударају. Покушајте поново."</string>
<string name="restr_pin_error_too_short" msgid="8173982756265777792">"PIN је прекратак. Мора да садржи најмање 4 цифре."</string>
<plurals name="restr_pin_countdown">
- <item quantity="one" msgid="4835639969503729874">"Нетачан PIN. Покушајте опет за 1 сек."</item>
- <item quantity="other" msgid="8030607343223287654">"Нетачан PIN. Покушајте опет за <xliff:g id="COUNT">%d</xliff:g> сек."</item>
+ <item quantity="one" msgid="311050995198548675">"Покушајте опет за 1 сек"</item>
+ <item quantity="other" msgid="4730868920742952817">"Покушајте опет за <xliff:g id="COUNT">%d</xliff:g> сек"</item>
</plurals>
+ <string name="restr_pin_try_later" msgid="973144472490532377">"Покушајте поново касније"</string>
<string name="transient_navigation_confirmation" msgid="4907844043611123426">"Превуците по ивици екрана да би се приказала трака"</string>
<string name="transient_navigation_confirmation_long" msgid="8061685920508086697">"Превуците од ивице екрана да би се приказала системска трака"</string>
</resources>
diff --git a/core/res/res/values-sv/strings.xml b/core/res/res/values-sv/strings.xml
index 00aa419..2ea2b0a 100644
--- a/core/res/res/values-sv/strings.xml
+++ b/core/res/res/values-sv/strings.xml
@@ -1449,7 +1449,6 @@
<string name="activity_chooser_view_see_all" msgid="4292569383976636200">"Visa alla"</string>
<string name="activity_chooser_view_dialog_title_default" msgid="4710013864974040615">"Välj aktivitet"</string>
<string name="share_action_provider_share_with" msgid="5247684435979149216">"Dela med"</string>
- <string name="status_bar_device_locked" msgid="3092703448690669768">"Enheten är låst."</string>
<string name="list_delimeter" msgid="3975117572185494152">", "</string>
<string name="sending" msgid="3245653681008218030">"Skickar ..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Vill du öppna webbläsaren?"</string>
@@ -1569,7 +1568,9 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"Inställd"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"Det gick inte att skriva innehållet"</string>
<string name="reason_unknown" msgid="6048913880184628119">"okänt"</string>
+ <string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"Ange administratörspinkod"</string>
<string name="restr_pin_enter_pin" msgid="3395953421368476103">"Ange pinkod"</string>
+ <string name="restr_pin_incorrect" msgid="8571512003955077924">"Felaktig"</string>
<string name="restr_pin_enter_old_pin" msgid="1462206225512910757">"Aktuell pinkod"</string>
<string name="restr_pin_enter_new_pin" msgid="5959606691619959184">"Ny pinkod"</string>
<string name="restr_pin_confirm_pin" msgid="8501523829633146239">"Bekräfta din nya pinkod"</string>
@@ -1577,9 +1578,10 @@
<string name="restr_pin_error_doesnt_match" msgid="2224214190906994548">"Pinkoderna stämmer inte överens. Försök igen."</string>
<string name="restr_pin_error_too_short" msgid="8173982756265777792">"Pinkoden är för kort. Måste vara minst fyra siffror."</string>
<plurals name="restr_pin_countdown">
- <item quantity="one" msgid="4835639969503729874">"Fel pinkod. Försök igenom en sekund."</item>
- <item quantity="other" msgid="8030607343223287654">"Fel pinkod. Försök igenom om <xliff:g id="COUNT">%d</xliff:g> sekunder."</item>
+ <item quantity="one" msgid="311050995198548675">"Försök igen om en sekund"</item>
+ <item quantity="other" msgid="4730868920742952817">"Försök igen om <xliff:g id="COUNT">%d</xliff:g> sekunder"</item>
</plurals>
+ <string name="restr_pin_try_later" msgid="973144472490532377">"Försök igen senare"</string>
<string name="transient_navigation_confirmation" msgid="4907844043611123426">"Dra från kanten av skärmen om du vill visa fältet"</string>
<string name="transient_navigation_confirmation_long" msgid="8061685920508086697">"Dra från kanten av skärmen om du vill visa systemfältet"</string>
</resources>
diff --git a/core/res/res/values-sw/strings.xml b/core/res/res/values-sw/strings.xml
index b7b6506..2d18ed7 100644
--- a/core/res/res/values-sw/strings.xml
+++ b/core/res/res/values-sw/strings.xml
@@ -1449,7 +1449,6 @@
<string name="activity_chooser_view_see_all" msgid="4292569383976636200">"Angalia zote"</string>
<string name="activity_chooser_view_dialog_title_default" msgid="4710013864974040615">"Chagua shughuli"</string>
<string name="share_action_provider_share_with" msgid="5247684435979149216">"Shiriki na"</string>
- <string name="status_bar_device_locked" msgid="3092703448690669768">"Kifaa kimefungwa."</string>
<string name="list_delimeter" msgid="3975117572185494152">", "</string>
<string name="sending" msgid="3245653681008218030">"Inatuma…"</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Zindua Kivinjari?"</string>
@@ -1569,7 +1568,9 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"Imeghairiwa"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"Hitilafu katika kuandika maudhui"</string>
<string name="reason_unknown" msgid="6048913880184628119">"haijulikani"</string>
+ <string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"Ingiza PIN ya msimamizi"</string>
<string name="restr_pin_enter_pin" msgid="3395953421368476103">"Ingiza PIN"</string>
+ <string name="restr_pin_incorrect" msgid="8571512003955077924">"Sio sahihi"</string>
<string name="restr_pin_enter_old_pin" msgid="1462206225512910757">"PIN ya sasa"</string>
<string name="restr_pin_enter_new_pin" msgid="5959606691619959184">"PIN mpya"</string>
<string name="restr_pin_confirm_pin" msgid="8501523829633146239">"Thibitisha PIN mpya"</string>
@@ -1577,9 +1578,10 @@
<string name="restr_pin_error_doesnt_match" msgid="2224214190906994548">"PIN hazilingani. Jaribu tena."</string>
<string name="restr_pin_error_too_short" msgid="8173982756265777792">"PIN ni fupi mno. Lazima iwe angalau tarakimu 4."</string>
<plurals name="restr_pin_countdown">
- <item quantity="one" msgid="4835639969503729874">"PIN sio sahihi. Jaribu tena baada ya sekunde 1."</item>
- <item quantity="other" msgid="8030607343223287654">"PIN sio sahihi. Jaribu tena baada ya sekunde <xliff:g id="COUNT">%d</xliff:g>."</item>
+ <item quantity="one" msgid="311050995198548675">"Jaribu tena baada ya sekunde 1"</item>
+ <item quantity="other" msgid="4730868920742952817">"Jaribu tena baada ya sekunde <xliff:g id="COUNT">%d</xliff:g>"</item>
</plurals>
+ <string name="restr_pin_try_later" msgid="973144472490532377">"Jaribu tena baadaye"</string>
<string name="transient_navigation_confirmation" msgid="4907844043611123426">"Telezesha kidole kutoka ukingo wa skrini ili kuonyesha upau"</string>
<string name="transient_navigation_confirmation_long" msgid="8061685920508086697">"Telezesha kidole kutoka ukingo wa skrini ili kuonyesha upau wa mfumo"</string>
</resources>
diff --git a/core/res/res/values-th/strings.xml b/core/res/res/values-th/strings.xml
index 376ee26..226b48d 100644
--- a/core/res/res/values-th/strings.xml
+++ b/core/res/res/values-th/strings.xml
@@ -360,8 +360,8 @@
<string name="permdesc_bindAccessibilityService" msgid="7034615928609331368">"อนุญาตให้เจ้าของเชื่อมโยงกับส่วนติดต่อระดับบนสุดของบริการการเข้าถึง ซึ่งแอปพลิเคชันทั่วไปไม่จำเป็นต้องใช้"</string>
<string name="permlab_bindPrintService" msgid="8462815179572748761">"เชื่อมโยงกับบริการการพิมพ์"</string>
<string name="permdesc_bindPrintService" msgid="7960067623209111135">"อนุญาตให้ผู้ใช้เชื่อมโยงกับอินเทอร์เฟซระดับสูงสุดของบริการการพิมพ์ ซึ่งแอปทั่วไปไม่จำเป็นต้องใช้"</string>
- <string name="permlab_bindPrintSpoolerService" msgid="6807762783744125954">"เชื่อมโยงกับบริการจัิดคิวและจัดการการพิมพ์"</string>
- <string name="permdesc_bindPrintSpoolerService" msgid="3680552285933318372">"อนุญาตให้ผู้ใช้เชื่อมโยงกับอินเทอร์เฟซระดับสูงสุดของบริการจัดคิวและจัดการการพิมพ์ ซึ่งแอปทั่วไปไม่จำเป็นต้องใช้"</string>
+ <string name="permlab_bindPrintSpoolerService" msgid="6807762783744125954">"เชื่อมโยงกับบริการจัดคิวและจัดการการพิมพ์"</string>
+ <string name="permdesc_bindPrintSpoolerService" msgid="3680552285933318372">"อนุญาตให้เชื่อมโยงกับอินเทอร์เฟซระดับสูงสุดของบริการจัดคิวและจัดการการพิมพ์ ซึ่งแอปทั่วไปไม่จำเป็นต้องใช้"</string>
<string name="permlab_bindNfcService" msgid="2752731300419410724">"เชื่อมโยงกับบริการ NFC"</string>
<string name="permdesc_bindNfcService" msgid="6120647629174066862">"อนุญาตให้ผู้ถือเชื่อมโยงกับแอปพลิเคชันที่เลียนแบบการ์ด NFC ไม่จำเป็นสำหรับแอปทั่วไป"</string>
<string name="permlab_bindTextService" msgid="7358378401915287938">"เชื่อมโยงกับบริการข้อความ"</string>
@@ -1449,7 +1449,6 @@
<string name="activity_chooser_view_see_all" msgid="4292569383976636200">"ดูทั้งหมด"</string>
<string name="activity_chooser_view_dialog_title_default" msgid="4710013864974040615">"เลือกกิจกรรม"</string>
<string name="share_action_provider_share_with" msgid="5247684435979149216">"แบ่งปันกับ"</string>
- <string name="status_bar_device_locked" msgid="3092703448690669768">"ล็อกอุปกรณ์อยู่"</string>
<string name="list_delimeter" msgid="3975117572185494152">", "</string>
<string name="sending" msgid="3245653681008218030">"กำลังส่ง…"</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"เปิดเบราว์เซอร์หรือไม่"</string>
@@ -1569,7 +1568,9 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"ยกเลิก"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"ข้อผิดพลาดในการเขียนเนื้อหา"</string>
<string name="reason_unknown" msgid="6048913880184628119">"ไม่ทราบ"</string>
+ <string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"ป้อน PIN ของผู้ดูแลระบบ"</string>
<string name="restr_pin_enter_pin" msgid="3395953421368476103">"ป้อน PIN"</string>
+ <string name="restr_pin_incorrect" msgid="8571512003955077924">"ไม่ถูกต้อง"</string>
<string name="restr_pin_enter_old_pin" msgid="1462206225512910757">"PIN ปัจจุบัน"</string>
<string name="restr_pin_enter_new_pin" msgid="5959606691619959184">"PIN ใหม่"</string>
<string name="restr_pin_confirm_pin" msgid="8501523829633146239">"ยืนยัน PIN ใหม่"</string>
@@ -1577,9 +1578,10 @@
<string name="restr_pin_error_doesnt_match" msgid="2224214190906994548">"PIN ไม่ตรงกัน โปรดลองอีกครั้ง"</string>
<string name="restr_pin_error_too_short" msgid="8173982756265777792">"PIN สั้นเกินไป ต้องมีอย่างน้อย 4 หลัก"</string>
<plurals name="restr_pin_countdown">
- <item quantity="one" msgid="4835639969503729874">"PIN ไม่ถูกต้อง โปรดลองอีกครั้งในอีก 1 วินาที"</item>
- <item quantity="other" msgid="8030607343223287654">"PIN ไม่ถูกต้อง โปรดลองอีกครั้งในอีก <xliff:g id="COUNT">%d</xliff:g> วินาที"</item>
+ <item quantity="one" msgid="311050995198548675">"ลองอีกใน 1 วิ"</item>
+ <item quantity="other" msgid="4730868920742952817">"ลองอีกใน <xliff:g id="COUNT">%d</xliff:g> วินาที"</item>
</plurals>
+ <string name="restr_pin_try_later" msgid="973144472490532377">"ลองอีกครั้งในภายหลัง"</string>
<string name="transient_navigation_confirmation" msgid="4907844043611123426">"กวาดขอบของหน้าจอเพื่อแสดงแถบ"</string>
<string name="transient_navigation_confirmation_long" msgid="8061685920508086697">"กวาดจากขอบของหน้าจอเพื่อแสดงแถบระบบ"</string>
</resources>
diff --git a/core/res/res/values-tl/strings.xml b/core/res/res/values-tl/strings.xml
index b6bca5d..36a3ffe 100644
--- a/core/res/res/values-tl/strings.xml
+++ b/core/res/res/values-tl/strings.xml
@@ -361,7 +361,7 @@
<string name="permlab_bindPrintService" msgid="8462815179572748761">"sumailalim sa isang serbisyo sa pag-print"</string>
<string name="permdesc_bindPrintService" msgid="7960067623209111135">"Nagbibigay-daan sa may-ari na sumailalim sa interface sa nangungunang antas ng isang serbisyo sa pag-print. Hindi dapat kailanganin para sa normal na apps kahit kailan."</string>
<string name="permlab_bindPrintSpoolerService" msgid="6807762783744125954">"mag-bind sa isang serbisyo ng print spooler"</string>
- <string name="permdesc_bindPrintSpoolerService" msgid="3680552285933318372">"Nagbibigay-daan sa may-ari na mag-bind sa interface sa nangungunang antas ng isang serbisyo ng print spooler. Hindi dapat kailanganin para sa normal na apps."</string>
+ <string name="permdesc_bindPrintSpoolerService" msgid="3680552285933318372">"Nagbibigay-daan sa may-ari na mag-bind sa top-level interface ng isang serbisyo ng print spooler. Hindi dapat kailanganin para sa normal na apps."</string>
<string name="permlab_bindNfcService" msgid="2752731300419410724">"i-bind sa serbisyo ng NFC"</string>
<string name="permdesc_bindNfcService" msgid="6120647629174066862">"Nagbibigay-daan sa may-ari na mag-bind sa mga application na nag-e-emulate ng mga NFC card. Hindi dapat kailanman kailanganin para sa normal na apps."</string>
<string name="permlab_bindTextService" msgid="7358378401915287938">"sumailalim sa serbisyo ng teksto"</string>
@@ -1449,7 +1449,6 @@
<string name="activity_chooser_view_see_all" msgid="4292569383976636200">"Tingnan lahat"</string>
<string name="activity_chooser_view_dialog_title_default" msgid="4710013864974040615">"Pumili ng aktibidad"</string>
<string name="share_action_provider_share_with" msgid="5247684435979149216">"Ibahagi sa"</string>
- <string name="status_bar_device_locked" msgid="3092703448690669768">"Naka-lock ang device."</string>
<string name="list_delimeter" msgid="3975117572185494152">", "</string>
<string name="sending" msgid="3245653681008218030">"Ipinapadala..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Ilunsad ang Browser?"</string>
@@ -1569,7 +1568,9 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"Kinansela"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"May error sa pagsusulat ng nilalaman"</string>
<string name="reason_unknown" msgid="6048913880184628119">"hindi alam"</string>
+ <string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"Ilagay ang PIN ng administrator"</string>
<string name="restr_pin_enter_pin" msgid="3395953421368476103">"Ilagay ang PIN"</string>
+ <string name="restr_pin_incorrect" msgid="8571512003955077924">"Mali"</string>
<string name="restr_pin_enter_old_pin" msgid="1462206225512910757">"Kasalukuyang PIN"</string>
<string name="restr_pin_enter_new_pin" msgid="5959606691619959184">"Bagong PIN"</string>
<string name="restr_pin_confirm_pin" msgid="8501523829633146239">"Kumpirmahin ang bagong PIN"</string>
@@ -1577,9 +1578,10 @@
<string name="restr_pin_error_doesnt_match" msgid="2224214190906994548">"Hindi nagtutugma ang mga PIN. Subukang muli."</string>
<string name="restr_pin_error_too_short" msgid="8173982756265777792">"Masyadong maikli ang PIN. Hindi dapat mas maikli sa 4 na digit."</string>
<plurals name="restr_pin_countdown">
- <item quantity="one" msgid="4835639969503729874">"Mali ang PIN. Subukang muli pagkalipas ng 1 segundo."</item>
- <item quantity="other" msgid="8030607343223287654">"Mali ang PIN. Subukang muli pagkalipas ng <xliff:g id="COUNT">%d</xliff:g> (na) segundo."</item>
+ <item quantity="one" msgid="311050995198548675">"Subukan muli sa 1 seg"</item>
+ <item quantity="other" msgid="4730868920742952817">"Subukan muli sa <xliff:g id="COUNT">%d</xliff:g> seg"</item>
</plurals>
+ <string name="restr_pin_try_later" msgid="973144472490532377">"Subukang muli sa ibang pagkakataon"</string>
<string name="transient_navigation_confirmation" msgid="4907844043611123426">"Mag-swipe sa dulo ng screen upang ipakita ang bar"</string>
<string name="transient_navigation_confirmation_long" msgid="8061685920508086697">"Mag-swipe mula sa dulo ng screen upang ipakita ang system bar"</string>
</resources>
diff --git a/core/res/res/values-tr/strings.xml b/core/res/res/values-tr/strings.xml
index 44168d2..8fb697d 100644
--- a/core/res/res/values-tr/strings.xml
+++ b/core/res/res/values-tr/strings.xml
@@ -1449,7 +1449,6 @@
<string name="activity_chooser_view_see_all" msgid="4292569383976636200">"Tümünü göster"</string>
<string name="activity_chooser_view_dialog_title_default" msgid="4710013864974040615">"Etkinlik seçin"</string>
<string name="share_action_provider_share_with" msgid="5247684435979149216">"Şununla paylaş:"</string>
- <string name="status_bar_device_locked" msgid="3092703448690669768">"Cihaz kilitli."</string>
<string name="list_delimeter" msgid="3975117572185494152">", "</string>
<string name="sending" msgid="3245653681008218030">"Gönderiliyor…"</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Tarayıcı Başlatılsın mı?"</string>
@@ -1569,7 +1568,9 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"İptal edildi"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"İçerik yazılırken hata oluştu"</string>
<string name="reason_unknown" msgid="6048913880184628119">"bilinmiyor"</string>
+ <string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"Yönetici PIN\'ini girin"</string>
<string name="restr_pin_enter_pin" msgid="3395953421368476103">"PIN\'i girin"</string>
+ <string name="restr_pin_incorrect" msgid="8571512003955077924">"Yanlış"</string>
<string name="restr_pin_enter_old_pin" msgid="1462206225512910757">"Mevcut PIN"</string>
<string name="restr_pin_enter_new_pin" msgid="5959606691619959184">"Yeni PIN"</string>
<string name="restr_pin_confirm_pin" msgid="8501523829633146239">"Yeni PIN\'i doğrulayın"</string>
@@ -1577,9 +1578,10 @@
<string name="restr_pin_error_doesnt_match" msgid="2224214190906994548">"PIN\'ler eşleşmiyor. Tekrar deneyin."</string>
<string name="restr_pin_error_too_short" msgid="8173982756265777792">"PIN çok kısa. En az 4 basamaklı olmalı."</string>
<plurals name="restr_pin_countdown">
- <item quantity="one" msgid="4835639969503729874">"Yanlış PIN. 1 saniye içinde tekrar deneyin."</item>
- <item quantity="other" msgid="8030607343223287654">"Yanlış PIN. <xliff:g id="COUNT">%d</xliff:g> saniye içinde tekrar deneyin."</item>
+ <item quantity="one" msgid="311050995198548675">"1 saniye içinde tekrar deneyin"</item>
+ <item quantity="other" msgid="4730868920742952817">"<xliff:g id="COUNT">%d</xliff:g> saniye içinde tekrar deneyin"</item>
</plurals>
+ <string name="restr_pin_try_later" msgid="973144472490532377">"Daha sonra tekrar deneyin"</string>
<string name="transient_navigation_confirmation" msgid="4907844043611123426">"Çubuğu görüntülemek için ekranın kenarından hızlıca kaydırın"</string>
<string name="transient_navigation_confirmation_long" msgid="8061685920508086697">"Sistem çubuğunu görüntülemek için ekranın kenarından hızlıca kaydırın"</string>
</resources>
diff --git a/core/res/res/values-uk/strings.xml b/core/res/res/values-uk/strings.xml
index 2dcb546..9412629 100644
--- a/core/res/res/values-uk/strings.xml
+++ b/core/res/res/values-uk/strings.xml
@@ -1449,7 +1449,6 @@
<string name="activity_chooser_view_see_all" msgid="4292569383976636200">"Переглянути всі"</string>
<string name="activity_chooser_view_dialog_title_default" msgid="4710013864974040615">"Вибрати дію"</string>
<string name="share_action_provider_share_with" msgid="5247684435979149216">"Спільний доступ для:"</string>
- <string name="status_bar_device_locked" msgid="3092703448690669768">"Пристрій заблоковано."</string>
<string name="list_delimeter" msgid="3975117572185494152">", "</string>
<string name="sending" msgid="3245653681008218030">"Надсилання…"</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Запустити веб-переглядач?"</string>
@@ -1569,7 +1568,9 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"Скасовано"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"Помилка записування вмісту"</string>
<string name="reason_unknown" msgid="6048913880184628119">"невідомо"</string>
+ <string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"Введіть PIN-код адміністратора"</string>
<string name="restr_pin_enter_pin" msgid="3395953421368476103">"Введіть PIN-код"</string>
+ <string name="restr_pin_incorrect" msgid="8571512003955077924">"Неправильно"</string>
<string name="restr_pin_enter_old_pin" msgid="1462206225512910757">"Поточний PIN-код"</string>
<string name="restr_pin_enter_new_pin" msgid="5959606691619959184">"Новий PIN-код"</string>
<string name="restr_pin_confirm_pin" msgid="8501523829633146239">"Підтвердьте новий PIN-код"</string>
@@ -1577,9 +1578,10 @@
<string name="restr_pin_error_doesnt_match" msgid="2224214190906994548">"PIN-коди не збігаються. Повторіть спробу."</string>
<string name="restr_pin_error_too_short" msgid="8173982756265777792">"PIN-код закороткий. Має бути принаймні 4 цифри."</string>
<plurals name="restr_pin_countdown">
- <item quantity="one" msgid="4835639969503729874">"Неправильний PIN. Повторіть через 1 с."</item>
- <item quantity="other" msgid="8030607343223287654">"Неправильний PIN. Повторіть через <xliff:g id="COUNT">%d</xliff:g> с."</item>
+ <item quantity="one" msgid="311050995198548675">"Спробуйте за 1 с"</item>
+ <item quantity="other" msgid="4730868920742952817">"Спробуйте за <xliff:g id="COUNT">%d</xliff:g> с"</item>
</plurals>
+ <string name="restr_pin_try_later" msgid="973144472490532377">"Спробуйте пізніше"</string>
<string name="transient_navigation_confirmation" msgid="4907844043611123426">"Гортайте від краю, щоб відкрити панель"</string>
<string name="transient_navigation_confirmation_long" msgid="8061685920508086697">"Проведіть пальцем від краю екрана, щоб з’явилась навігаційна панель"</string>
</resources>
diff --git a/core/res/res/values-vi/strings.xml b/core/res/res/values-vi/strings.xml
index 0f417fe..4e44cc4a 100644
--- a/core/res/res/values-vi/strings.xml
+++ b/core/res/res/values-vi/strings.xml
@@ -1449,7 +1449,6 @@
<string name="activity_chooser_view_see_all" msgid="4292569383976636200">"Xem tất cả"</string>
<string name="activity_chooser_view_dialog_title_default" msgid="4710013864974040615">"Chọn hoạt động"</string>
<string name="share_action_provider_share_with" msgid="5247684435979149216">"Chia sẻ với"</string>
- <string name="status_bar_device_locked" msgid="3092703448690669768">"Thiết bị đã bị khóa."</string>
<string name="list_delimeter" msgid="3975117572185494152">", "</string>
<string name="sending" msgid="3245653681008218030">"Đang gửi…"</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Khởi chạy trình duyệt?"</string>
@@ -1569,7 +1568,9 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"Đã hủy"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"Lỗi ghi nội dung"</string>
<string name="reason_unknown" msgid="6048913880184628119">"không xác định"</string>
+ <string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"Nhập mã PIN của quản trị viên"</string>
<string name="restr_pin_enter_pin" msgid="3395953421368476103">"Nhập mã PIN"</string>
+ <string name="restr_pin_incorrect" msgid="8571512003955077924">"Không đúng"</string>
<string name="restr_pin_enter_old_pin" msgid="1462206225512910757">"Mã PIN hiện tại"</string>
<string name="restr_pin_enter_new_pin" msgid="5959606691619959184">"Mã PIN mới"</string>
<string name="restr_pin_confirm_pin" msgid="8501523829633146239">"Xác nhận mã PIN mới"</string>
@@ -1577,9 +1578,10 @@
<string name="restr_pin_error_doesnt_match" msgid="2224214190906994548">"Mã PIN không khớp. Hãy thử lại."</string>
<string name="restr_pin_error_too_short" msgid="8173982756265777792">"Mã PIN quá ngắn. Phải có ít nhất 4 chữ số."</string>
<plurals name="restr_pin_countdown">
- <item quantity="one" msgid="4835639969503729874">"Mã PIN không đúng. Hãy thử lại sau 1 giây nữa."</item>
- <item quantity="other" msgid="8030607343223287654">"Mã PIN không đúng. Hãy thử lại sau <xliff:g id="COUNT">%d</xliff:g> giây nữa."</item>
+ <item quantity="one" msgid="311050995198548675">"Hãy thử lại sau 1 giây"</item>
+ <item quantity="other" msgid="4730868920742952817">"Hãy thử lại sau <xliff:g id="COUNT">%d</xliff:g> giây"</item>
</plurals>
+ <string name="restr_pin_try_later" msgid="973144472490532377">"Hãy thử lại sau"</string>
<string name="transient_navigation_confirmation" msgid="4907844043611123426">"Vuốt cạnh màn hình để hiện thanh"</string>
<string name="transient_navigation_confirmation_long" msgid="8061685920508086697">"Vuốt từ cạnh màn hình để hiển thị thanh hệ thống"</string>
</resources>
diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml
index 3bd2566..895952a 100644
--- a/core/res/res/values-zh-rCN/strings.xml
+++ b/core/res/res/values-zh-rCN/strings.xml
@@ -360,8 +360,8 @@
<string name="permdesc_bindAccessibilityService" msgid="7034615928609331368">"允许应用绑定至辅助服务的顶级接口。普通应用绝不需要此权限。"</string>
<string name="permlab_bindPrintService" msgid="8462815179572748761">"绑定至打印服务"</string>
<string name="permdesc_bindPrintService" msgid="7960067623209111135">"允许应用绑定至打印服务的顶级接口。普通应用绝不需要此权限。"</string>
- <string name="permlab_bindPrintSpoolerService" msgid="6807762783744125954">"绑定至打印后台处理程序服务"</string>
- <string name="permdesc_bindPrintSpoolerService" msgid="3680552285933318372">"允许应用绑定至打印后台处理程序服务的顶级接口。普通应用绝不需要此权限。"</string>
+ <string name="permlab_bindPrintSpoolerService" msgid="6807762783744125954">"绑定至打印处理服务"</string>
+ <string name="permdesc_bindPrintSpoolerService" msgid="3680552285933318372">"允许应用绑定至打印处理服务的顶级接口。普通应用绝不需要此权限。"</string>
<string name="permlab_bindNfcService" msgid="2752731300419410724">"绑定到 NFC 服务"</string>
<string name="permdesc_bindNfcService" msgid="6120647629174066862">"允许应用绑定到模拟 NFC 卡的应用。普通应用绝不需要此权限。"</string>
<string name="permlab_bindTextService" msgid="7358378401915287938">"绑定至文字服务"</string>
@@ -1449,7 +1449,6 @@
<string name="activity_chooser_view_see_all" msgid="4292569383976636200">"查看全部"</string>
<string name="activity_chooser_view_dialog_title_default" msgid="4710013864974040615">"选择活动"</string>
<string name="share_action_provider_share_with" msgid="5247684435979149216">"分享方式"</string>
- <string name="status_bar_device_locked" msgid="3092703448690669768">"设备已锁定。"</string>
<string name="list_delimeter" msgid="3975117572185494152">"、 "</string>
<string name="sending" msgid="3245653681008218030">"正在发送..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"要启动浏览器吗?"</string>
@@ -1569,7 +1568,9 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"已取消"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"写入内容时出错"</string>
<string name="reason_unknown" msgid="6048913880184628119">"未知"</string>
+ <string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"输入管理员 PIN 码"</string>
<string name="restr_pin_enter_pin" msgid="3395953421368476103">"输入 PIN 码"</string>
+ <string name="restr_pin_incorrect" msgid="8571512003955077924">"错误"</string>
<string name="restr_pin_enter_old_pin" msgid="1462206225512910757">"当前 PIN 码"</string>
<string name="restr_pin_enter_new_pin" msgid="5959606691619959184">"新 PIN 码"</string>
<string name="restr_pin_confirm_pin" msgid="8501523829633146239">"确认新 PIN 码"</string>
@@ -1577,9 +1578,10 @@
<string name="restr_pin_error_doesnt_match" msgid="2224214190906994548">"PIN 码不符,请重试。"</string>
<string name="restr_pin_error_too_short" msgid="8173982756265777792">"PIN 码太短,至少应包含 4 位数字。"</string>
<plurals name="restr_pin_countdown">
- <item quantity="one" msgid="4835639969503729874">"PIN 码错误。请在1秒钟后重试。"</item>
- <item quantity="other" msgid="8030607343223287654">"PIN 码错误。请在<xliff:g id="COUNT">%d</xliff:g>秒钟后重试。"</item>
+ <item quantity="one" msgid="311050995198548675">"1秒后重试"</item>
+ <item quantity="other" msgid="4730868920742952817">"<xliff:g id="COUNT">%d</xliff:g>秒后重试"</item>
</plurals>
+ <string name="restr_pin_try_later" msgid="973144472490532377">"稍后重试"</string>
<string name="transient_navigation_confirmation" msgid="4907844043611123426">"从边缘向里滑可显示系统栏"</string>
<string name="transient_navigation_confirmation_long" msgid="8061685920508086697">"从屏幕边缘向里滑可显示系统栏"</string>
</resources>
diff --git a/core/res/res/values-zh-rHK/strings.xml b/core/res/res/values-zh-rHK/strings.xml
index c27890f..7a2298f 100644
--- a/core/res/res/values-zh-rHK/strings.xml
+++ b/core/res/res/values-zh-rHK/strings.xml
@@ -1449,7 +1449,6 @@
<string name="activity_chooser_view_see_all" msgid="4292569383976636200">"查看全部"</string>
<string name="activity_chooser_view_dialog_title_default" msgid="4710013864974040615">"選擇活動"</string>
<string name="share_action_provider_share_with" msgid="5247684435979149216">"分享活動"</string>
- <string name="status_bar_device_locked" msgid="3092703448690669768">"裝置已鎖定。"</string>
<string name="list_delimeter" msgid="3975117572185494152">"、 "</string>
<string name="sending" msgid="3245653681008218030">"正在傳送..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"要啟動「瀏覽器」嗎?"</string>
@@ -1569,7 +1568,9 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"已取消"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"寫入內容時發生錯誤"</string>
<string name="reason_unknown" msgid="6048913880184628119">"不明"</string>
+ <string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"輸入管理員 PIN"</string>
<string name="restr_pin_enter_pin" msgid="3395953421368476103">"輸入 PIN 碼"</string>
+ <string name="restr_pin_incorrect" msgid="8571512003955077924">"不正確"</string>
<string name="restr_pin_enter_old_pin" msgid="1462206225512910757">"目前的 PIN"</string>
<string name="restr_pin_enter_new_pin" msgid="5959606691619959184">"新的 PIN"</string>
<string name="restr_pin_confirm_pin" msgid="8501523829633146239">"確認新的 PIN"</string>
@@ -1577,9 +1578,10 @@
<string name="restr_pin_error_doesnt_match" msgid="2224214190906994548">"PIN 碼不符,請再試一次。"</string>
<string name="restr_pin_error_too_short" msgid="8173982756265777792">"PIN 碼太短,至少必須為 4 位數。"</string>
<plurals name="restr_pin_countdown">
- <item quantity="one" msgid="4835639969503729874">"PIN 碼不正確,請於 1 秒內再試一次。"</item>
- <item quantity="other" msgid="8030607343223287654">"PIN 碼不正確,請於 <xliff:g id="COUNT">%d</xliff:g> 秒內再試一次。"</item>
+ <item quantity="one" msgid="311050995198548675">"1 秒後再試一次"</item>
+ <item quantity="other" msgid="4730868920742952817">"<xliff:g id="COUNT">%d</xliff:g> 秒後再試一次"</item>
</plurals>
+ <string name="restr_pin_try_later" msgid="973144472490532377">"稍後再試"</string>
<string name="transient_navigation_confirmation" msgid="4907844043611123426">"從螢幕邊緣快速滑動,即可顯示系統列"</string>
<string name="transient_navigation_confirmation_long" msgid="8061685920508086697">"從螢幕邊緣快速滑動,即可顯示系統列"</string>
</resources>
diff --git a/core/res/res/values-zh-rTW/strings.xml b/core/res/res/values-zh-rTW/strings.xml
index 571e01c..df6da73 100644
--- a/core/res/res/values-zh-rTW/strings.xml
+++ b/core/res/res/values-zh-rTW/strings.xml
@@ -1449,7 +1449,6 @@
<string name="activity_chooser_view_see_all" msgid="4292569383976636200">"全部顯示"</string>
<string name="activity_chooser_view_dialog_title_default" msgid="4710013864974040615">"選擇活動"</string>
<string name="share_action_provider_share_with" msgid="5247684435979149216">"分享活動"</string>
- <string name="status_bar_device_locked" msgid="3092703448690669768">"裝置已鎖定。"</string>
<string name="list_delimeter" msgid="3975117572185494152">"、 "</string>
<string name="sending" msgid="3245653681008218030">"傳送中…"</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"啟動「瀏覽器」嗎?"</string>
@@ -1569,7 +1568,9 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"已取消"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"寫入內容時發生錯誤"</string>
<string name="reason_unknown" msgid="6048913880184628119">"不明"</string>
+ <string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"輸入管理員 PIN"</string>
<string name="restr_pin_enter_pin" msgid="3395953421368476103">"輸入 PIN"</string>
+ <string name="restr_pin_incorrect" msgid="8571512003955077924">"不正確"</string>
<string name="restr_pin_enter_old_pin" msgid="1462206225512910757">"目前的 PIN"</string>
<string name="restr_pin_enter_new_pin" msgid="5959606691619959184">"新 PIN"</string>
<string name="restr_pin_confirm_pin" msgid="8501523829633146239">"確認新 PIN"</string>
@@ -1577,9 +1578,10 @@
<string name="restr_pin_error_doesnt_match" msgid="2224214190906994548">"PIN 不符,請再試一次。"</string>
<string name="restr_pin_error_too_short" msgid="8173982756265777792">"PIN 長度太短,至少必須為 4 位數。"</string>
<plurals name="restr_pin_countdown">
- <item quantity="one" msgid="4835639969503729874">"PIN 不正確,請於 1 秒後再試一次。"</item>
- <item quantity="other" msgid="8030607343223287654">"PIN 不正確,請於 <xliff:g id="COUNT">%d</xliff:g> 秒後再試一次。"</item>
+ <item quantity="one" msgid="311050995198548675">"1 秒後再試一次"</item>
+ <item quantity="other" msgid="4730868920742952817">"<xliff:g id="COUNT">%d</xliff:g> 秒後再試一次"</item>
</plurals>
+ <string name="restr_pin_try_later" msgid="973144472490532377">"稍後再試"</string>
<string name="transient_navigation_confirmation" msgid="4907844043611123426">"從螢幕邊緣向內滑動即可顯示導覽列"</string>
<string name="transient_navigation_confirmation_long" msgid="8061685920508086697">"從螢幕邊緣向內滑動即可顯示導覽列"</string>
</resources>
diff --git a/core/res/res/values-zu/strings.xml b/core/res/res/values-zu/strings.xml
index c0b5c86..dd8a7b9 100644
--- a/core/res/res/values-zu/strings.xml
+++ b/core/res/res/values-zu/strings.xml
@@ -1449,7 +1449,6 @@
<string name="activity_chooser_view_see_all" msgid="4292569383976636200">"Buka konke"</string>
<string name="activity_chooser_view_dialog_title_default" msgid="4710013864974040615">"Khetha okwenziwayo"</string>
<string name="share_action_provider_share_with" msgid="5247684435979149216">"Yabelana no"</string>
- <string name="status_bar_device_locked" msgid="3092703448690669768">"Idivayisi ivaliwe."</string>
<string name="list_delimeter" msgid="3975117572185494152">", "</string>
<string name="sending" msgid="3245653681008218030">"Iyathumela..."</string>
<string name="launchBrowserDefault" msgid="2057951947297614725">"Qala Isiphequluli?"</string>
@@ -1569,7 +1568,9 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"Kukhanseliwe"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"Iphutha ekubhaleni okuqukethwe"</string>
<string name="reason_unknown" msgid="6048913880184628119">"akwaziwa"</string>
+ <string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"Faka i-PIN yomlawuli"</string>
<string name="restr_pin_enter_pin" msgid="3395953421368476103">"Faka i-PIN"</string>
+ <string name="restr_pin_incorrect" msgid="8571512003955077924">"Ayilungile"</string>
<string name="restr_pin_enter_old_pin" msgid="1462206225512910757">"I-PIN yamanje"</string>
<string name="restr_pin_enter_new_pin" msgid="5959606691619959184">"I-PIN entsha"</string>
<string name="restr_pin_confirm_pin" msgid="8501523829633146239">"Qinisekisa i-PIN entsha"</string>
@@ -1577,9 +1578,10 @@
<string name="restr_pin_error_doesnt_match" msgid="2224214190906994548">"Ama-PIN awafani. Zama futhi."</string>
<string name="restr_pin_error_too_short" msgid="8173982756265777792">"I-PIN yimfushane kakhulu. Okungenani kumele ibe namadijithi angu-4."</string>
<plurals name="restr_pin_countdown">
- <item quantity="one" msgid="4835639969503729874">"I-PIN engalungile. Zama futhi esekhondini elingu-1."</item>
- <item quantity="other" msgid="8030607343223287654">"I-PIN engalungile. Zama futhi emasekhondini angu-<xliff:g id="COUNT">%d</xliff:g>."</item>
+ <item quantity="one" msgid="311050995198548675">"Zama futhi kusekhondi elingu-1"</item>
+ <item quantity="other" msgid="4730868920742952817">"Zama futhi kumasekhondi angu-<xliff:g id="COUNT">%d</xliff:g>"</item>
</plurals>
+ <string name="restr_pin_try_later" msgid="973144472490532377">"Zama futhi emva kwesikhathi"</string>
<string name="transient_navigation_confirmation" msgid="4907844043611123426">"Swayipha emaphethelweni wesikrini ukuze uveze ibha"</string>
<string name="transient_navigation_confirmation_long" msgid="8061685920508086697">"Swayipha kusukela emaphethelweni wesikrini ukuze uveze ibha yesistimu"</string>
</resources>
diff --git a/core/res/res/values/attrs_manifest.xml b/core/res/res/values/attrs_manifest.xml
index 60ed0e5..05ca120 100644
--- a/core/res/res/values/attrs_manifest.xml
+++ b/core/res/res/values/attrs_manifest.xml
@@ -1718,20 +1718,20 @@
<!-- Attributes that can be supplied in an AndroidManifest.xml
<code>screen</code> tag, a child of <code>compatible-screens</code>,
- which is itseld a child of the root
+ which is itself a child of the root
{@link #AndroidManifest manifest} tag. -->
<declare-styleable name="AndroidManifestCompatibleScreensScreen"
parent="AndroidManifest.AndroidManifestCompatibleScreens">
<!-- Specifies a compatible screen size, as per the device
configuration screen size bins. -->
<attr name="screenSize">
- <!-- A small screen configuration, at least 240x320db. -->
+ <!-- A small screen configuration, at least 240x320dp. -->
<enum name="small" value="200" />
- <!-- A normal screen configuration, at least 320x480db. -->
+ <!-- A normal screen configuration, at least 320x480dp. -->
<enum name="normal" value="300" />
- <!-- A large screen configuration, at least 400x530db. -->
+ <!-- A large screen configuration, at least 400x530dp. -->
<enum name="large" value="400" />
- <!-- An extra large screen configuration, at least 600x800db. -->
+ <!-- An extra large screen configuration, at least 600x800dp. -->
<enum name="xlarge" value="500" />
</attr>
<!-- Specifies a compatible screen density, as per the device
@@ -1748,6 +1748,19 @@
</attr>
</declare-styleable>
+ <!-- The <code>input-type</code> tag is a child of the <code>supports-input</code> tag, which
+ is itself a child of the root {@link #AndroidManifest manifest} tag. Each
+ <code>input-type</code> tag specifices the name of a specific input device type. When
+ grouped with the other elements of the parent <code>supports-input</code> tag it defines
+ a collection of input devices, which when all used together, are considered a supported
+ input mechanism for the application. There may be multiple <code>supports-input</code>
+ tags defined, each containing a different combination of input device types. -->
+ <declare-styleable name="AndroidManifestSupportsInputInputType"
+ parent="AndroidManifest.AndroidManifestSupportsInput">
+ <!-- Specifices the name of the input device type -->
+ <attr name="name" />
+ </declare-styleable>
+
<!-- The attribute that holds a Base64-encoded public key. -->
<attr name="publicKey" format="string" />
diff --git a/core/tests/coretests/src/android/net/LinkPropertiesTest.java b/core/tests/coretests/src/android/net/LinkPropertiesTest.java
index a570802..7e70c6b 100644
--- a/core/tests/coretests/src/android/net/LinkPropertiesTest.java
+++ b/core/tests/coretests/src/android/net/LinkPropertiesTest.java
@@ -363,4 +363,19 @@
assertFalse(lp.hasIPv4Address());
assertFalse(lp.removeLinkAddress(LINKADDRV4));
}
+
+ @SmallTest
+ public void testSetLinkAddresses() {
+ LinkProperties lp = new LinkProperties();
+ lp.addLinkAddress(LINKADDRV4);
+ lp.addLinkAddress(LINKADDRV6);
+
+ LinkProperties lp2 = new LinkProperties();
+ lp2.addLinkAddress(LINKADDRV6);
+
+ assertFalse(lp.equals(lp2));
+
+ lp2.setLinkAddresses(lp.getLinkAddresses());
+ assertTrue(lp.equals(lp));
+ }
}
diff --git a/data/fonts/Android.mk b/data/fonts/Android.mk
index 7f8d5f0..0d9a386 100644
--- a/data/fonts/Android.mk
+++ b/data/fonts/Android.mk
@@ -53,22 +53,6 @@
include $(BUILD_PREBUILT)
include $(CLEAR_VARS)
-LOCAL_MODULE := DroidSansTamil-Regular.ttf
-LOCAL_SRC_FILES := $(LOCAL_MODULE)
-LOCAL_MODULE_CLASS := ETC
-LOCAL_MODULE_TAGS := optional
-LOCAL_MODULE_PATH := $(TARGET_OUT)/fonts
-include $(BUILD_PREBUILT)
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := DroidSansTamil-Bold.ttf
-LOCAL_SRC_FILES := $(LOCAL_MODULE)
-LOCAL_MODULE_CLASS := ETC
-LOCAL_MODULE_TAGS := optional
-LOCAL_MODULE_PATH := $(TARGET_OUT)/fonts
-include $(BUILD_PREBUILT)
-
-include $(CLEAR_VARS)
LOCAL_MODULE := MTLmr3m.ttf
LOCAL_SRC_FILES := $(LOCAL_MODULE)
LOCAL_MODULE_CLASS := ETC
@@ -81,8 +65,6 @@
DroidSans.ttf \
DroidSans-Bold.ttf \
DroidSansEthiopic-Regular.ttf \
- DroidSansTamil-Regular.ttf \
- DroidSansTamil-Bold.ttf \
MTLmr3m.ttf
endif # SMALLER_FONT_FOOTPRINT
@@ -153,10 +135,8 @@
RobotoCondensed-BoldItalic.ttf \
DroidNaskh-Regular.ttf \
DroidNaskhUI-Regular.ttf \
- DroidSansDevanagari-Regular.ttf \
DroidSansHebrew-Regular.ttf \
DroidSansHebrew-Bold.ttf \
- DroidSansThai.ttf \
DroidSansArmenian.ttf \
DroidSansGeorgian.ttf \
AndroidEmoji.ttf
diff --git a/data/fonts/DroidSansDevanagari-Regular.ttf b/data/fonts/DroidSansDevanagari-Regular.ttf
deleted file mode 100644
index a25e0e3..0000000
--- a/data/fonts/DroidSansDevanagari-Regular.ttf
+++ /dev/null
Binary files differ
diff --git a/data/fonts/DroidSansTamil-Bold.ttf b/data/fonts/DroidSansTamil-Bold.ttf
deleted file mode 100644
index 8ad0085..0000000
--- a/data/fonts/DroidSansTamil-Bold.ttf
+++ /dev/null
Binary files differ
diff --git a/data/fonts/DroidSansTamil-Regular.ttf b/data/fonts/DroidSansTamil-Regular.ttf
deleted file mode 100644
index 4b8f536..0000000
--- a/data/fonts/DroidSansTamil-Regular.ttf
+++ /dev/null
Binary files differ
diff --git a/data/fonts/DroidSansThai.ttf b/data/fonts/DroidSansThai.ttf
deleted file mode 100644
index 15b00c2..0000000
--- a/data/fonts/DroidSansThai.ttf
+++ /dev/null
Binary files differ
diff --git a/data/fonts/fallback_fonts.xml b/data/fonts/fallback_fonts.xml
index d11a3c7..d7b1464 100644
--- a/data/fonts/fallback_fonts.xml
+++ b/data/fonts/fallback_fonts.xml
@@ -52,7 +52,14 @@
</family>
<family>
<fileset>
- <file>DroidSansThai.ttf</file>
+ <file variant="elegant">NotoSansThai-Regular.ttf</file>
+ <file variant="elegant">NotoSansThai-Bold.ttf</file>
+ </fileset>
+ </family>
+ <family>
+ <fileset>
+ <file variant="compact">NotoSansThaiUI-Regular.ttf</file>
+ <file variant="compact">NotoSansThaiUI-Bold.ttf</file>
</fileset>
</family>
<family>
@@ -67,13 +74,26 @@
</family>
<family>
<fileset>
- <file>DroidSansDevanagari-Regular.ttf</file>
+ <file variant="elegant">NotoSansDevanagari-Regular.ttf</file>
+ <file variant="elegant">NotoSansDevanagari-Bold.ttf</file>
</fileset>
</family>
<family>
<fileset>
- <file>DroidSansTamil-Regular.ttf</file>
- <file>DroidSansTamil-Bold.ttf</file>
+ <file variant="compact">NotoSansDevanagariUI-Regular.ttf</file>
+ <file variant="compact">NotoSansDevanagariUI-Bold.ttf</file>
+ </fileset>
+ </family>
+ <family>
+ <fileset>
+ <file variant="elegant">NotoSansTamil-Regular.ttf</file>
+ <file variant="elegant">NotoSansTamil-Bold.ttf</file>
+ </fileset>
+ </family>
+ <family>
+ <fileset>
+ <file variant="compact">NotoSansTamilUI-Regular.ttf</file>
+ <file variant="compact">NotoSansTamilUI-Bold.ttf</file>
</fileset>
</family>
<family>
diff --git a/data/fonts/fonts.mk b/data/fonts/fonts.mk
index 7c2f955..05cca13e 100644
--- a/data/fonts/fonts.mk
+++ b/data/fonts/fonts.mk
@@ -34,10 +34,8 @@
RobotoCondensed-BoldItalic.ttf \
DroidNaskh-Regular.ttf \
DroidNaskhUI-Regular.ttf \
- DroidSansDevanagari-Regular.ttf \
DroidSansHebrew-Regular.ttf \
DroidSansHebrew-Bold.ttf \
- DroidSansThai.ttf \
DroidSerif-Regular.ttf \
DroidSerif-Bold.ttf \
DroidSerif-Italic.ttf \
diff --git a/data/keyboards/keyboards.mk b/data/keyboards/keyboards.mk
index d545241..68cbd29 100644
--- a/data/keyboards/keyboards.mk
+++ b/data/keyboards/keyboards.mk
@@ -17,10 +17,10 @@
include $(LOCAL_PATH)/common.mk
PRODUCT_COPY_FILES := $(foreach file,$(framework_keylayouts),\
- $(file):system/usr/keylayout/$(file))
+ $(file):system/usr/keylayout/$(notdir $(file)))
PRODUCT_COPY_FILES += $(foreach file,$(framework_keycharmaps),\
- $(file):system/usr/keychars/$(file))
+ $(file):system/usr/keychars/$(notdir $(file)))
PRODUCT_COPY_FILES += $(foreach file,$(framework_keyconfigs),\
- $(file):system/usr/idc/$(file))
+ $(file):system/usr/idc/$(notdir $(file)))
diff --git a/data/sounds/AudioPackage10.mk b/data/sounds/AudioPackage10.mk
index 90d8eaa..783e1f8 100644
--- a/data/sounds/AudioPackage10.mk
+++ b/data/sounds/AudioPackage10.mk
@@ -20,6 +20,7 @@
$(LOCAL_PATH)/effects/ogg/KeypressStandard_120_48k.ogg:system/media/audio/ui/KeypressStandard.ogg \
$(LOCAL_PATH)/effects/ogg/KeypressSpacebar_120_48k.ogg:system/media/audio/ui/KeypressSpacebar.ogg \
$(LOCAL_PATH)/effects/ogg/KeypressDelete_120_48k.ogg:system/media/audio/ui/KeypressDelete.ogg \
+ $(LOCAL_PATH)/effects/ogg/KeypressInvalid_120_48k.ogg:system/media/audio/ui/KeypressInvalid.ogg \
$(LOCAL_PATH)/effects/ogg/KeypressReturn_120_48k.ogg:system/media/audio/ui/KeypressReturn.ogg \
$(LOCAL_PATH)/effects/ogg/VideoRecord_48k.ogg:system/media/audio/ui/VideoRecord.ogg \
$(LOCAL_PATH)/effects/ogg/camera_click_48k.ogg:system/media/audio/ui/camera_click.ogg \
diff --git a/data/sounds/AudioPackage11.mk b/data/sounds/AudioPackage11.mk
index 2897b04..b30be56 100644
--- a/data/sounds/AudioPackage11.mk
+++ b/data/sounds/AudioPackage11.mk
@@ -20,6 +20,7 @@
$(LOCAL_PATH)/effects/ogg/KeypressStandard_120_48k.ogg:system/media/audio/ui/KeypressStandard.ogg \
$(LOCAL_PATH)/effects/ogg/KeypressSpacebar_120_48k.ogg:system/media/audio/ui/KeypressSpacebar.ogg \
$(LOCAL_PATH)/effects/ogg/KeypressDelete_120_48k.ogg:system/media/audio/ui/KeypressDelete.ogg \
+ $(LOCAL_PATH)/effects/ogg/KeypressInvalid_120_48k.ogg:system/media/audio/ui/KeypressInvalid.ogg \
$(LOCAL_PATH)/effects/ogg/KeypressReturn_120_48k.ogg:system/media/audio/ui/KeypressReturn.ogg \
$(LOCAL_PATH)/effects/ogg/VideoRecord_48k.ogg:system/media/audio/ui/VideoRecord.ogg \
$(LOCAL_PATH)/effects/ogg/camera_click_48k.ogg:system/media/audio/ui/camera_click.ogg \
diff --git a/data/sounds/AudioPackage2.mk b/data/sounds/AudioPackage2.mk
index 1a36cba..ea07acd 100644
--- a/data/sounds/AudioPackage2.mk
+++ b/data/sounds/AudioPackage2.mk
@@ -31,6 +31,7 @@
$(LOCAL_PATH)/effects/KeypressStandard.ogg:system/media/audio/ui/KeypressStandard.ogg \
$(LOCAL_PATH)/effects/KeypressSpacebar.ogg:system/media/audio/ui/KeypressSpacebar.ogg \
$(LOCAL_PATH)/effects/KeypressDelete.ogg:system/media/audio/ui/KeypressDelete.ogg \
+ $(LOCAL_PATH)/effects/ogg/KeypressInvalid.ogg:system/media/audio/ui/KeypressInvalid.ogg \
$(LOCAL_PATH)/effects/KeypressReturn.ogg:system/media/audio/ui/KeypressReturn.ogg \
$(LOCAL_PATH)/effects/VideoRecord.ogg:system/media/audio/ui/VideoRecord.ogg \
$(LOCAL_PATH)/effects/camera_click.ogg:system/media/audio/ui/camera_click.ogg \
diff --git a/data/sounds/AudioPackage3.mk b/data/sounds/AudioPackage3.mk
index 146c2e4..a8a3b76 100644
--- a/data/sounds/AudioPackage3.mk
+++ b/data/sounds/AudioPackage3.mk
@@ -31,6 +31,7 @@
$(LOCAL_PATH)/effects/KeypressStandard.ogg:system/media/audio/ui/KeypressStandard.ogg \
$(LOCAL_PATH)/effects/KeypressSpacebar.ogg:system/media/audio/ui/KeypressSpacebar.ogg \
$(LOCAL_PATH)/effects/KeypressDelete.ogg:system/media/audio/ui/KeypressDelete.ogg \
+ $(LOCAL_PATH)/effects/KeypressInvalid.ogg:system/media/audio/ui/KeypressInvalid.ogg \
$(LOCAL_PATH)/effects/KeypressReturn.ogg:system/media/audio/ui/KeypressReturn.ogg \
$(LOCAL_PATH)/effects/VideoRecord.ogg:system/media/audio/ui/VideoRecord.ogg \
$(LOCAL_PATH)/effects/camera_click.ogg:system/media/audio/ui/camera_click.ogg \
diff --git a/data/sounds/AudioPackage4.mk b/data/sounds/AudioPackage4.mk
index 712d7aa..bde3ba0 100644
--- a/data/sounds/AudioPackage4.mk
+++ b/data/sounds/AudioPackage4.mk
@@ -36,6 +36,7 @@
$(LOCAL_PATH)/effects/KeypressStandard.ogg:system/media/audio/ui/KeypressStandard.ogg \
$(LOCAL_PATH)/effects/KeypressSpacebar.ogg:system/media/audio/ui/KeypressSpacebar.ogg \
$(LOCAL_PATH)/effects/KeypressDelete.ogg:system/media/audio/ui/KeypressDelete.ogg \
+ $(LOCAL_PATH)/effects/KeypressInvalid.ogg:system/media/audio/ui/KeypressInvalid.ogg \
$(LOCAL_PATH)/effects/KeypressReturn.ogg:system/media/audio/ui/KeypressReturn.ogg \
$(LOCAL_PATH)/effects/VideoRecord.ogg:system/media/audio/ui/VideoRecord.ogg \
$(LOCAL_PATH)/effects/camera_click.ogg:system/media/audio/ui/camera_click.ogg \
diff --git a/data/sounds/AudioPackage5.mk b/data/sounds/AudioPackage5.mk
index 5961f06..077335b 100644
--- a/data/sounds/AudioPackage5.mk
+++ b/data/sounds/AudioPackage5.mk
@@ -17,6 +17,7 @@
$(LOCAL_PATH)/effects/KeypressStandard.ogg:system/media/audio/ui/KeypressStandard.ogg \
$(LOCAL_PATH)/effects/KeypressSpacebar.ogg:system/media/audio/ui/KeypressSpacebar.ogg \
$(LOCAL_PATH)/effects/KeypressDelete.ogg:system/media/audio/ui/KeypressDelete.ogg \
+ $(LOCAL_PATH)/effects/KeypressInvalid.ogg:system/media/audio/ui/KeypressInvalid.ogg \
$(LOCAL_PATH)/effects/KeypressReturn.ogg:system/media/audio/ui/KeypressReturn.ogg \
$(LOCAL_PATH)/effects/VideoRecord.ogg:system/media/audio/ui/VideoRecord.ogg \
$(LOCAL_PATH)/effects/camera_click.ogg:system/media/audio/ui/camera_click.ogg \
diff --git a/data/sounds/AudioPackage6.mk b/data/sounds/AudioPackage6.mk
index d113a29..2cdd702 100644
--- a/data/sounds/AudioPackage6.mk
+++ b/data/sounds/AudioPackage6.mk
@@ -16,6 +16,7 @@
$(LOCAL_PATH)/effects/ogg/KeypressStandard.ogg:system/media/audio/ui/KeypressStandard.ogg \
$(LOCAL_PATH)/effects/ogg/KeypressSpacebar.ogg:system/media/audio/ui/KeypressSpacebar.ogg \
$(LOCAL_PATH)/effects/ogg/KeypressDelete.ogg:system/media/audio/ui/KeypressDelete.ogg \
+ $(LOCAL_PATH)/effects/ogg/KeypressInvalid.ogg:system/media/audio/ui/KeypressInvalid.ogg \
$(LOCAL_PATH)/effects/ogg/KeypressReturn.ogg:system/media/audio/ui/KeypressReturn.ogg \
$(LOCAL_PATH)/effects/ogg/VideoRecord.ogg:system/media/audio/ui/VideoRecord.ogg \
$(LOCAL_PATH)/effects/ogg/camera_click.ogg:system/media/audio/ui/camera_click.ogg \
diff --git a/data/sounds/AudioPackage7.mk b/data/sounds/AudioPackage7.mk
index 6ae624e..e909235 100644
--- a/data/sounds/AudioPackage7.mk
+++ b/data/sounds/AudioPackage7.mk
@@ -18,6 +18,7 @@
$(LOCAL_PATH)/effects/ogg/KeypressStandard_120.ogg:system/media/audio/ui/KeypressStandard.ogg \
$(LOCAL_PATH)/effects/ogg/KeypressSpacebar_120.ogg:system/media/audio/ui/KeypressSpacebar.ogg \
$(LOCAL_PATH)/effects/ogg/KeypressDelete_120.ogg:system/media/audio/ui/KeypressDelete.ogg \
+ $(LOCAL_PATH)/effects/ogg/KeypressInvalid_120.ogg:system/media/audio/ui/KeypressInvalid.ogg \
$(LOCAL_PATH)/effects/ogg/KeypressReturn_120.ogg:system/media/audio/ui/KeypressReturn.ogg \
$(LOCAL_PATH)/effects/ogg/VideoRecord.ogg:system/media/audio/ui/VideoRecord.ogg \
$(LOCAL_PATH)/effects/ogg/camera_click.ogg:system/media/audio/ui/camera_click.ogg \
diff --git a/data/sounds/AudioPackage7alt.mk b/data/sounds/AudioPackage7alt.mk
index 11409f2..1132fa9 100644
--- a/data/sounds/AudioPackage7alt.mk
+++ b/data/sounds/AudioPackage7alt.mk
@@ -18,6 +18,7 @@
$(LOCAL_PATH)/effects/ogg/KeypressStandard_120.ogg:system/media/audio/ui/KeypressStandard.ogg \
$(LOCAL_PATH)/effects/ogg/KeypressSpacebar_120.ogg:system/media/audio/ui/KeypressSpacebar.ogg \
$(LOCAL_PATH)/effects/ogg/KeypressDelete_120.ogg:system/media/audio/ui/KeypressDelete.ogg \
+ $(LOCAL_PATH)/effects/ogg/KeypressInvalid_120.ogg:system/media/audio/ui/KeypressInvalid.ogg \
$(LOCAL_PATH)/effects/ogg/KeypressReturn_120.ogg:system/media/audio/ui/KeypressReturn.ogg \
$(LOCAL_PATH)/effects/ogg/VideoRecord.ogg:system/media/audio/ui/VideoRecord.ogg \
$(LOCAL_PATH)/effects/ogg/camera_click.ogg:system/media/audio/ui/camera_click.ogg \
diff --git a/data/sounds/AudioPackage8.mk b/data/sounds/AudioPackage8.mk
index 93c43da..49b6154 100644
--- a/data/sounds/AudioPackage8.mk
+++ b/data/sounds/AudioPackage8.mk
@@ -20,6 +20,7 @@
$(LOCAL_PATH)/effects/ogg/KeypressStandard_120.ogg:system/media/audio/ui/KeypressStandard.ogg \
$(LOCAL_PATH)/effects/ogg/KeypressSpacebar_120.ogg:system/media/audio/ui/KeypressSpacebar.ogg \
$(LOCAL_PATH)/effects/ogg/KeypressDelete_120.ogg:system/media/audio/ui/KeypressDelete.ogg \
+ $(LOCAL_PATH)/effects/ogg/KeypressInvalid_120.ogg:system/media/audio/ui/KeypressInvalid.ogg \
$(LOCAL_PATH)/effects/ogg/KeypressReturn_120.ogg:system/media/audio/ui/KeypressReturn.ogg \
$(LOCAL_PATH)/effects/ogg/VideoRecord.ogg:system/media/audio/ui/VideoRecord.ogg \
$(LOCAL_PATH)/effects/ogg/camera_click.ogg:system/media/audio/ui/camera_click.ogg \
diff --git a/data/sounds/AudioPackage9.mk b/data/sounds/AudioPackage9.mk
index 73e4fd3..87b7764 100644
--- a/data/sounds/AudioPackage9.mk
+++ b/data/sounds/AudioPackage9.mk
@@ -20,6 +20,7 @@
$(LOCAL_PATH)/effects/ogg/KeypressStandard_120.ogg:system/media/audio/ui/KeypressStandard.ogg \
$(LOCAL_PATH)/effects/ogg/KeypressSpacebar_120.ogg:system/media/audio/ui/KeypressSpacebar.ogg \
$(LOCAL_PATH)/effects/ogg/KeypressDelete_120.ogg:system/media/audio/ui/KeypressDelete.ogg \
+ $(LOCAL_PATH)/effects/ogg/KeypressInvalid_120.ogg:system/media/audio/ui/KeypressInvalid.ogg \
$(LOCAL_PATH)/effects/ogg/KeypressReturn_120.ogg:system/media/audio/ui/KeypressReturn.ogg \
$(LOCAL_PATH)/effects/ogg/VideoRecord.ogg:system/media/audio/ui/VideoRecord.ogg \
$(LOCAL_PATH)/effects/ogg/camera_click.ogg:system/media/audio/ui/camera_click.ogg \
diff --git a/data/sounds/effects/ogg/KeypressInvalid.ogg b/data/sounds/effects/ogg/KeypressInvalid.ogg
new file mode 100644
index 0000000..24935ad
--- /dev/null
+++ b/data/sounds/effects/ogg/KeypressInvalid.ogg
Binary files differ
diff --git a/data/sounds/effects/ogg/KeypressInvalid_120.ogg b/data/sounds/effects/ogg/KeypressInvalid_120.ogg
new file mode 100644
index 0000000..24935ad
--- /dev/null
+++ b/data/sounds/effects/ogg/KeypressInvalid_120.ogg
Binary files differ
diff --git a/graphics/java/android/graphics/Bitmap.java b/graphics/java/android/graphics/Bitmap.java
index 495bbca7..4c7395c 100644
--- a/graphics/java/android/graphics/Bitmap.java
+++ b/graphics/java/android/graphics/Bitmap.java
@@ -420,7 +420,7 @@
* It is recommended to use {@link #ARGB_8888} instead of this
* configuration.
*
- * Note: as of {@link android.os.Build.VERSION_CODES#KEY_LIME_PIE},
+ * Note: as of {@link android.os.Build.VERSION_CODES#KITKAT},
* any bitmap created with this configuration will be created
* using {@link #ARGB_8888} instead.
*
@@ -1130,7 +1130,7 @@
* getPixels() or setPixels(), then the pixels are uniformly treated as
* 32bit values, packed according to the Color class.
*
- * <p>As of {@link android.os.Build.VERSION_CODES#KEY_LIME_PIE}, this method
+ * <p>As of {@link android.os.Build.VERSION_CODES#KITKAT}, this method
* should not be used to calculate the memory usage of the bitmap. Instead,
* see {@link #getAllocationByteCount()}.
*
@@ -1143,7 +1143,7 @@
/**
* Returns the minimum number of bytes that can be used to store this bitmap's pixels.
*
- * <p>As of {@link android.os.Build.VERSION_CODES#KEY_LIME_PIE}, the result of this method can
+ * <p>As of {@link android.os.Build.VERSION_CODES#KITKAT}, the result of this method can
* no longer be used to determine memory usage of a bitmap. See {@link
* #getAllocationByteCount()}.</p>
*/
diff --git a/graphics/java/android/graphics/BitmapFactory.java b/graphics/java/android/graphics/BitmapFactory.java
index 8872de0..4193dbb 100644
--- a/graphics/java/android/graphics/BitmapFactory.java
+++ b/graphics/java/android/graphics/BitmapFactory.java
@@ -56,7 +56,7 @@
* mutable even when decoding a resource which would normally result in
* an immutable bitmap.</p>
*
- * <p>As of {@link android.os.Build.VERSION_CODES#KEY_LIME_PIE}, any
+ * <p>As of {@link android.os.Build.VERSION_CODES#KITKAT}, any
* mutable bitmap can be reused to decode any other bitmaps as long as
* the resulting {@link Bitmap#getByteCount() byte count} of the decoded
* bitmap is less than or equal to the {@link
@@ -64,7 +64,7 @@
* bitmap. This can be because the intrinsic size is smaller, or its
* size post scaling (for density / sample size) is smaller.</p>
*
- * <p>Prior to {@link android.os.Build.VERSION_CODES#KEY_LIME_PIE}
+ * <p>Prior to {@link android.os.Build.VERSION_CODES#KITKAT}
* additional constraints apply: The image being decoded (whether as a
* resource or as a stream) must be in jpeg or png format. Only equal
* sized bitmaps are supported, with {@link #inSampleSize} set to 1.
diff --git a/graphics/java/android/renderscript/Element.java b/graphics/java/android/renderscript/Element.java
index 3838c61..68badfa 100644
--- a/graphics/java/android/renderscript/Element.java
+++ b/graphics/java/android/renderscript/Element.java
@@ -725,6 +725,13 @@
return rs.mElement_LONG_4;
}
+ public static Element YUV(RenderScript rs) {
+ if (rs.mElement_YUV == null) {
+ rs.mElement_YUV = createPixel(rs, DataType.UNSIGNED_8, DataKind.PIXEL_YUV);
+ }
+ return rs.mElement_YUV;
+ }
+
public static Element MATRIX_4X4(RenderScript rs) {
if(rs.mElement_MATRIX_4X4 == null) {
rs.mElement_MATRIX_4X4 = createUser(rs, DataType.MATRIX_4X4);
diff --git a/graphics/java/android/renderscript/RenderScript.java b/graphics/java/android/renderscript/RenderScript.java
index 854f079..7d4a5c4 100644
--- a/graphics/java/android/renderscript/RenderScript.java
+++ b/graphics/java/android/renderscript/RenderScript.java
@@ -898,6 +898,8 @@
Element mElement_LONG_3;
Element mElement_LONG_4;
+ Element mElement_YUV;
+
Element mElement_MATRIX_4X4;
Element mElement_MATRIX_3X3;
Element mElement_MATRIX_2X2;
diff --git a/graphics/java/android/renderscript/ScriptIntrinsicYuvToRGB.java b/graphics/java/android/renderscript/ScriptIntrinsicYuvToRGB.java
index 9b5de9b..845625d 100644
--- a/graphics/java/android/renderscript/ScriptIntrinsicYuvToRGB.java
+++ b/graphics/java/android/renderscript/ScriptIntrinsicYuvToRGB.java
@@ -20,9 +20,9 @@
/**
* Intrinsic for converting an Android YUV buffer to RGB.
*
- * The input allocation is supplied in NV21 format as a U8
- * element type. The output is RGBA, the alpha channel will be
- * set to 255.
+ * The input allocation should be supplied in a supported YUV format
+ * as a YUV element Allocation. The output is RGBA; the alpha channel
+ * will be set to 255.
*/
public final class ScriptIntrinsicYuvToRGB extends ScriptIntrinsic {
private Allocation mInput;
diff --git a/keystore/java/android/security/KeyChain.java b/keystore/java/android/security/KeyChain.java
index 9ea325a..8ad973d 100644
--- a/keystore/java/android/security/KeyChain.java
+++ b/keystore/java/android/security/KeyChain.java
@@ -34,6 +34,7 @@
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
import java.util.List;
+import java.util.Locale;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
@@ -364,7 +365,8 @@
* "RSA").
*/
public static boolean isKeyAlgorithmSupported(String algorithm) {
- return "RSA".equals(algorithm);
+ final String algUpper = algorithm.toUpperCase(Locale.US);
+ return "DSA".equals(algUpper) || "EC".equals(algUpper) || "RSA".equals(algUpper);
}
/**
@@ -379,7 +381,7 @@
return false;
}
- return KeyStore.getInstance().isHardwareBacked();
+ return KeyStore.getInstance().isHardwareBacked(algorithm);
}
private static X509Certificate toCertificate(byte[] bytes) {
diff --git a/keystore/java/android/security/KeyStore.java b/keystore/java/android/security/KeyStore.java
index 9babb94..6ac49ee 100644
--- a/keystore/java/android/security/KeyStore.java
+++ b/keystore/java/android/security/KeyStore.java
@@ -22,6 +22,8 @@
import android.os.ServiceManager;
import android.util.Log;
+import java.util.Locale;
+
/**
* @hide This should not be made public in its present form because it
* assumes that private and secret key bytes are available and would
@@ -306,9 +308,14 @@
}
}
+ // TODO remove this when it's removed from Settings
public boolean isHardwareBacked() {
+ return isHardwareBacked("RSA");
+ }
+
+ public boolean isHardwareBacked(String keyType) {
try {
- return mBinder.is_hardware_backed() == NO_ERROR;
+ return mBinder.is_hardware_backed(keyType.toUpperCase(Locale.US)) == NO_ERROR;
} catch (RemoteException e) {
Log.w(TAG, "Cannot connect to keystore", e);
return false;
diff --git a/libs/hwui/DisplayList.cpp b/libs/hwui/DisplayList.cpp
index cebfd26..0d7b37d 100644
--- a/libs/hwui/DisplayList.cpp
+++ b/libs/hwui/DisplayList.cpp
@@ -358,7 +358,7 @@
}
if (mAnimationMatrix) {
ALOGD("%*sConcatMatrix (animation) %p: " MATRIX_STRING,
- level * 2, "", mAnimationMatrix, MATRIX_ARGS(mStaticMatrix));
+ level * 2, "", mAnimationMatrix, MATRIX_ARGS(mAnimationMatrix));
}
if (mMatrixFlags != 0) {
if (mMatrixFlags == TRANSLATION) {
diff --git a/location/java/android/location/SettingInjectorService.java b/location/java/android/location/SettingInjectorService.java
index 8181f4e..9f321f3 100644
--- a/location/java/android/location/SettingInjectorService.java
+++ b/location/java/android/location/SettingInjectorService.java
@@ -16,9 +16,10 @@
package android.location;
-import android.app.IntentService;
+import android.app.Service;
import android.content.Intent;
import android.os.Bundle;
+import android.os.IBinder;
import android.os.Message;
import android.os.Messenger;
import android.os.RemoteException;
@@ -26,12 +27,12 @@
/**
* Dynamically specifies the summary (subtitle) and enabled status of a preference injected into
- * the list of location services displayed by the system settings app.
- *
- * The location services list is intended for use only by preferences that affect multiple apps from
- * the same developer. Location settings that apply only to one app should be shown within that app,
+ * the list of app settings displayed by the system settings app
+ * <p/>
+ * For use only by apps that are included in the system image, for preferences that affect multiple
+ * apps. Location settings that apply only to one app should be shown within that app,
* rather than in the system settings.
- *
+ * <p/>
* To add a preference to the list, a subclass of {@link SettingInjectorService} must be declared in
* the manifest as so:
*
@@ -69,21 +70,17 @@
* to the user that it is not part of the system settings.</li>
* </ul>
*
- * To ensure a good user experience, the average time from the start of
- * {@link #startService(Intent)} to the end of {@link #onHandleIntent(Intent)} should be less
- * than 300 msec even if your app is not already in memory. This means that both your
- * {@link android.app.Application#onCreate()} and your {@link #getStatus()} must be fast. If
- * either is slow, it can delay the display of settings values for other apps as well.
- *
+ * To ensure a good user experience, your {@link android.app.Application#onCreate()},
+ * {@link #onGetSummary()}, and {@link #onGetEnabled()} methods must all be fast. If any are slow,
+ * it can delay the display of settings values for other apps as well. Note further that all are
+ * called on your app's UI thread.
+ * <p/>
* For compactness, only one copy of a given setting should be injected. If each account has a
- * distinct value for the setting, then the {@link #getStatus()} value should represent a summary of
- * the state across all of the accounts and {@code settingsActivity} should display the value for
+ * distinct value for the setting, then the {@link #onGetSummary()} value should represent a summary
+ * of the state across all of the accounts and {@code settingsActivity} should display the value for
* each account.
*/
-// TODO: is there a public list of supported locales?
-// TODO: is there a public list of guidelines for settings text?
-// TODO: would a bound service be better? E.g., we could just disconnect if a service took too long
-public abstract class SettingInjectorService extends IntentService {
+public abstract class SettingInjectorService extends Service {
private static final String TAG = "SettingInjectorService";
@@ -138,100 +135,104 @@
/**
* Constructor.
*
- * @param name used to name the worker thread and in log messages
+ * @param name used to identify your subclass in log messages
*/
public SettingInjectorService(String name) {
- super(name);
mName = name;
}
@Override
- final protected void onHandleIntent(Intent intent) {
- // Get messenger first to ensure intent doesn't get messed with (in case we later decide
- // to pass intent into getStatus())
- Messenger messenger = intent.getParcelableExtra(MESSENGER_KEY);
+ public final IBinder onBind(Intent intent) {
+ return null;
+ }
- Status status;
+ @Override
+ public final void onStart(Intent intent, int startId) {
+ super.onStart(intent, startId);
+ }
+
+ @Override
+ public final int onStartCommand(Intent intent, int flags, int startId) {
+ onHandleIntent(intent);
+ stopSelf(startId);
+ return START_NOT_STICKY;
+ }
+
+ private void onHandleIntent(Intent intent) {
+
+ String summary;
try {
- status = getStatus();
+ summary = onGetSummary();
} catch (RuntimeException e) {
- Log.e(TAG, mName + ": error getting status", e);
- status = null;
+ // Exception. Send status anyway, so that settings injector can immediately start
+ // loading the status of the next setting.
+ sendStatus(intent, null, true);
+ throw e;
}
- // Send the status back to the caller via the messenger
+ boolean enabled;
+ try {
+ enabled = onGetEnabled();
+ } catch (RuntimeException e) {
+ // Exception. Send status anyway, so that settings injector can immediately start
+ // loading the status of the next setting.
+ sendStatus(intent, summary, true);
+ throw e;
+ }
+
+ sendStatus(intent, summary, enabled);
+ }
+
+ /**
+ * Send the summary and enabled values back to the caller via the messenger encoded in the
+ * intent.
+ */
+ private void sendStatus(Intent intent, String summary, boolean enabled) {
Message message = Message.obtain();
Bundle bundle = new Bundle();
- if (status != null) {
- bundle.putString(SUMMARY_KEY, status.summary);
- bundle.putBoolean(ENABLED_KEY, status.enabled);
- }
+ bundle.putString(SUMMARY_KEY, summary);
+ bundle.putBoolean(ENABLED_KEY, enabled);
message.setData(bundle);
if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, mName + ": received " + intent + " and " + status
- + ", sending message: " + message);
+ Log.d(TAG, mName + ": received " + intent + ", summary=" + summary
+ + ", enabled=" + enabled + ", sending message: " + message);
}
+
+ Messenger messenger = intent.getParcelableExtra(MESSENGER_KEY);
try {
messenger.send(message);
} catch (RemoteException e) {
- Log.e(TAG, mName + ": sending status failed", e);
+ Log.e(TAG, mName + ": sending dynamic status failed", e);
}
}
/**
- * Reads the status of the setting. Should not perform unpredictably-long operations such as
- * network access--see the running-time comments in the class-level javadoc.
+ * Returns the {@link android.preference.Preference#getSummary()} value (allowed to be null or
+ * empty). Should not perform unpredictably-long operations such as network access--see the
+ * running-time comments in the class-level javadoc.
*
- * @return the status of the setting value
+ * @return the {@link android.preference.Preference#getSummary()} value
*/
- protected abstract Status getStatus();
+ protected abstract String onGetSummary();
/**
- * Dynamic characteristics of an injected location setting.
+ * Returns the {@link android.preference.Preference#isEnabled()} value. Should not perform
+ * unpredictably-long operations such as network access--see the running-time comments in the
+ * class-level javadoc.
+ * <p/>
+ * Note that to prevent churn in the settings list, there is no support for dynamically choosing
+ * to hide a setting. Instead you should have this method return false, which will disable the
+ * setting and its link to your setting activity. One reason why you might choose to do this is
+ * if {@link android.provider.Settings.Secure#LOCATION_MODE} is {@link
+ * android.provider.Settings.Secure#LOCATION_MODE_OFF}.
+ * <p/>
+ * It is possible that the user may click on the setting before this method returns, so your
+ * settings activity must handle the case where it is invoked even though the setting is
+ * disabled. The simplest approach may be to simply call {@link android.app.Activity#finish()}
+ * when disabled.
+ *
+ * @return the {@link android.preference.Preference#isEnabled()} value
*/
- public static final class Status {
-
- /**
- * The {@link android.preference.Preference#getSummary()} value.
- *
- * @hide
- */
- public final String summary;
-
- /**
- * The {@link android.preference.Preference#isEnabled()} value.
- *
- * @hide
- */
- public final boolean enabled;
-
- /**
- * Constructor.
- * <p/>
- * Note that to prevent churn in the settings list, there is no support for dynamically
- * choosing to hide a setting. Instead you should provide a {@code enabled} value of false,
- * which will disable the setting and its link to your setting activity. One reason why you
- * might choose to do this is if {@link android.provider.Settings.Secure#LOCATION_MODE}
- * is {@link android.provider.Settings.Secure#LOCATION_MODE_OFF}.
- *
- * It is possible that the user may click on the setting before you return a false value for
- * {@code enabled}, so your settings activity must handle the case where it is invoked even
- * though the setting is disabled. The simplest approach may be to simply call
- * {@link android.app.Activity#finish()} when disabled.
- *
- * @param summary the {@link android.preference.Preference#getSummary()} value (allowed to
- * be null or empty)
- * @param enabled the {@link android.preference.Preference#isEnabled()} value
- */
- public Status(String summary, boolean enabled) {
- this.summary = summary;
- this.enabled = enabled;
- }
-
- @Override
- public String toString() {
- return "Status{summary='" + summary + '\'' + ", enabled=" + enabled + '}';
- }
- }
+ protected abstract boolean onGetEnabled();
}
diff --git a/media/java/android/media/MediaPlayer.java b/media/java/android/media/MediaPlayer.java
index d286be4..ce1896a 100644
--- a/media/java/android/media/MediaPlayer.java
+++ b/media/java/android/media/MediaPlayer.java
@@ -1351,8 +1351,10 @@
mOnInfoListener = null;
mOnVideoSizeChangedListener = null;
mOnTimedTextListener = null;
- mTimeProvider.close();
- mTimeProvider = null;
+ if (mTimeProvider != null) {
+ mTimeProvider.close();
+ mTimeProvider = null;
+ }
mOnSubtitleDataListener = null;
_release();
}
@@ -1380,11 +1382,17 @@
if (mSubtitleController != null) {
mSubtitleController.reset();
}
+ if (mTimeProvider != null) {
+ mTimeProvider.close();
+ mTimeProvider = null;
+ }
stayAwake(false);
_reset();
// make sure none of the listeners get called anymore
- mEventHandler.removeCallbacksAndMessages(null);
+ if (mEventHandler != null) {
+ mEventHandler.removeCallbacksAndMessages(null);
+ }
disableProxyListener();
}
@@ -2121,6 +2129,9 @@
/** @hide */
public MediaTimeProvider getMediaTimeProvider() {
+ if (mTimeProvider == null) {
+ mTimeProvider = new TimeProvider(this);
+ }
return mTimeProvider;
}
@@ -2761,6 +2772,7 @@
private static final int REFRESH_AND_NOTIFY_TIME = 1;
private static final int NOTIFY_STOP = 2;
private static final int NOTIFY_SEEK = 3;
+ private HandlerThread mHandlerThread;
/** @hide */
public boolean DEBUG = false;
@@ -2773,7 +2785,18 @@
// we assume starting position
mRefresh = true;
}
- mEventHandler = new EventHandler();
+
+ Looper looper;
+ if ((looper = Looper.myLooper()) == null &&
+ (looper = Looper.getMainLooper()) == null) {
+ // Create our own looper here in case MP was created without one
+ mHandlerThread = new HandlerThread("MediaPlayerMTPEventThread",
+ Process.THREAD_PRIORITY_FOREGROUND);
+ mHandlerThread.start();
+ looper = mHandlerThread.getLooper();
+ }
+ mEventHandler = new EventHandler(looper);
+
mListeners = new MediaTimeProvider.OnMediaTimeListener[0];
mTimes = new long[0];
mLastTimeUs = 0;
@@ -2790,6 +2813,17 @@
/** @hide */
public void close() {
mEventHandler.removeMessages(NOTIFY);
+ if (mHandlerThread != null) {
+ mHandlerThread.quitSafely();
+ mHandlerThread = null;
+ }
+ }
+
+ /** @hide */
+ protected void finalize() {
+ if (mHandlerThread != null) {
+ mHandlerThread.quitSafely();
+ }
}
/** @hide */
@@ -3055,6 +3089,10 @@
}
private class EventHandler extends Handler {
+ public EventHandler(Looper looper) {
+ super(looper);
+ }
+
@Override
public void handleMessage(Message msg) {
if (msg.what == NOTIFY) {
@@ -3075,10 +3113,5 @@
}
}
}
-
- /** @hide */
- public Handler getHandler() {
- return mEventHandler;
- }
}
}
diff --git a/packages/DocumentsUI/AndroidManifest.xml b/packages/DocumentsUI/AndroidManifest.xml
index 45e2650..4c91bd3 100644
--- a/packages/DocumentsUI/AndroidManifest.xml
+++ b/packages/DocumentsUI/AndroidManifest.xml
@@ -30,11 +30,10 @@
<category android:name="android.intent.category.OPENABLE" />
<data android:mimeType="*/*" />
</intent-filter>
- <!-- data expected to point at existing root to manage -->
<intent-filter>
- <action android:name="android.provider.action.MANAGE_DOCUMENTS" />
+ <action android:name="android.provider.action.MANAGE_ROOT" />
<category android:name="android.intent.category.DEFAULT" />
- <data android:mimeType="vnd.android.document/directory" />
+ <data android:mimeType="vnd.android.document/root" />
</intent-filter>
</activity>
diff --git a/packages/DocumentsUI/res/drawable-hdpi/ic_cab_accept.png b/packages/DocumentsUI/res/drawable-hdpi/ic_cab_accept.png
new file mode 100644
index 0000000..234ca8a
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-hdpi/ic_cab_accept.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-hdpi/ic_cab_remove_field_holo_light.png b/packages/DocumentsUI/res/drawable-hdpi/ic_cab_remove_field_holo_light.png
new file mode 100644
index 0000000..c9fa5c6
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-hdpi/ic_cab_remove_field_holo_light.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-hdpi/ic_cab_select_item.png b/packages/DocumentsUI/res/drawable-hdpi/ic_cab_select_item.png
new file mode 100644
index 0000000..e9bd010
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-hdpi/ic_cab_select_item.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-hdpi/ic_dir.png b/packages/DocumentsUI/res/drawable-hdpi/ic_dir.png
index d02534f..aabeda6 100644
--- a/packages/DocumentsUI/res/drawable-hdpi/ic_dir.png
+++ b/packages/DocumentsUI/res/drawable-hdpi/ic_dir.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-hdpi/ic_doc_apk.png b/packages/DocumentsUI/res/drawable-hdpi/ic_doc_apk.png
new file mode 100644
index 0000000..5bda872
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-hdpi/ic_doc_apk.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-hdpi/ic_doc_audio.png b/packages/DocumentsUI/res/drawable-hdpi/ic_doc_audio.png
new file mode 100644
index 0000000..38e315a
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-hdpi/ic_doc_audio.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-hdpi/ic_doc_certificate.png b/packages/DocumentsUI/res/drawable-hdpi/ic_doc_certificate.png
new file mode 100644
index 0000000..c6e9582
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-hdpi/ic_doc_certificate.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-hdpi/ic_doc_codes.png b/packages/DocumentsUI/res/drawable-hdpi/ic_doc_codes.png
new file mode 100644
index 0000000..c5a748b
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-hdpi/ic_doc_codes.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-hdpi/ic_doc_compressed.png b/packages/DocumentsUI/res/drawable-hdpi/ic_doc_compressed.png
new file mode 100644
index 0000000..a59bd23
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-hdpi/ic_doc_compressed.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-hdpi/ic_doc_contact.png b/packages/DocumentsUI/res/drawable-hdpi/ic_doc_contact.png
new file mode 100644
index 0000000..87799c6
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-hdpi/ic_doc_contact.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-hdpi/ic_doc_event.png b/packages/DocumentsUI/res/drawable-hdpi/ic_doc_event.png
new file mode 100644
index 0000000..a3bbc0f
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-hdpi/ic_doc_event.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-hdpi/ic_doc_font.png b/packages/DocumentsUI/res/drawable-hdpi/ic_doc_font.png
new file mode 100644
index 0000000..56133d4
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-hdpi/ic_doc_font.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-hdpi/ic_doc_image.png b/packages/DocumentsUI/res/drawable-hdpi/ic_doc_image.png
new file mode 100644
index 0000000..e655d04
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-hdpi/ic_doc_image.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-hdpi/ic_doc_pdf.png b/packages/DocumentsUI/res/drawable-hdpi/ic_doc_pdf.png
new file mode 100644
index 0000000..9ce032f
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-hdpi/ic_doc_pdf.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-hdpi/ic_doc_presentation.png b/packages/DocumentsUI/res/drawable-hdpi/ic_doc_presentation.png
new file mode 100644
index 0000000..53bfc52
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-hdpi/ic_doc_presentation.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-hdpi/ic_doc_spreadsheet.png b/packages/DocumentsUI/res/drawable-hdpi/ic_doc_spreadsheet.png
new file mode 100644
index 0000000..5a49de8
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-hdpi/ic_doc_spreadsheet.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-hdpi/ic_doc_text.png b/packages/DocumentsUI/res/drawable-hdpi/ic_doc_text.png
new file mode 100644
index 0000000..af79de9
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-hdpi/ic_doc_text.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-hdpi/ic_doc_video.png b/packages/DocumentsUI/res/drawable-hdpi/ic_doc_video.png
new file mode 100644
index 0000000..a0676d7
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-hdpi/ic_doc_video.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-hdpi/ic_menu_create_dir.png b/packages/DocumentsUI/res/drawable-hdpi/ic_menu_create_dir.png
deleted file mode 100644
index 6eb31f1..0000000
--- a/packages/DocumentsUI/res/drawable-hdpi/ic_menu_create_dir.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-hdpi/ic_menu_disconnect.png b/packages/DocumentsUI/res/drawable-hdpi/ic_menu_disconnect.png
new file mode 100644
index 0000000..4736da1
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-hdpi/ic_menu_disconnect.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-hdpi/ic_menu_edit_holo.png b/packages/DocumentsUI/res/drawable-hdpi/ic_menu_edit_holo.png
new file mode 100644
index 0000000..50ac935
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-hdpi/ic_menu_edit_holo.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-hdpi/ic_menu_grid.png b/packages/DocumentsUI/res/drawable-hdpi/ic_menu_grid.png
deleted file mode 100644
index d1326e5..0000000
--- a/packages/DocumentsUI/res/drawable-hdpi/ic_menu_grid.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-hdpi/ic_menu_list.png b/packages/DocumentsUI/res/drawable-hdpi/ic_menu_list.png
deleted file mode 100644
index e03e345..0000000
--- a/packages/DocumentsUI/res/drawable-hdpi/ic_menu_list.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-hdpi/ic_menu_new_folder.png b/packages/DocumentsUI/res/drawable-hdpi/ic_menu_new_folder.png
new file mode 100644
index 0000000..00faf9d
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-hdpi/ic_menu_new_folder.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-hdpi/ic_menu_revert_holo_light.png b/packages/DocumentsUI/res/drawable-hdpi/ic_menu_revert_holo_light.png
new file mode 100644
index 0000000..e9c0b01
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-hdpi/ic_menu_revert_holo_light.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-hdpi/ic_menu_search.png b/packages/DocumentsUI/res/drawable-hdpi/ic_menu_search_holo_light.png
similarity index 100%
rename from packages/DocumentsUI/res/drawable-hdpi/ic_menu_search.png
rename to packages/DocumentsUI/res/drawable-hdpi/ic_menu_search_holo_light.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-hdpi/ic_menu_share_holo_light_icononly.png b/packages/DocumentsUI/res/drawable-hdpi/ic_menu_share_holo_light_icononly.png
new file mode 100644
index 0000000..527e43c
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-hdpi/ic_menu_share_holo_light_icononly.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-hdpi/ic_menu_sort.png b/packages/DocumentsUI/res/drawable-hdpi/ic_menu_sort.png
deleted file mode 100644
index 680d482..0000000
--- a/packages/DocumentsUI/res/drawable-hdpi/ic_menu_sort.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-hdpi/ic_menu_sortby_holo_light.png b/packages/DocumentsUI/res/drawable-hdpi/ic_menu_sortby_holo_light.png
new file mode 100644
index 0000000..9421792
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-hdpi/ic_menu_sortby_holo_light.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-hdpi/ic_menu_trash_holo_light.png b/packages/DocumentsUI/res/drawable-hdpi/ic_menu_trash_holo_light.png
new file mode 100644
index 0000000..f662f94
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-hdpi/ic_menu_trash_holo_light.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-hdpi/ic_menu_view_grid.png b/packages/DocumentsUI/res/drawable-hdpi/ic_menu_view_grid.png
new file mode 100644
index 0000000..2c59d60
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-hdpi/ic_menu_view_grid.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-hdpi/ic_menu_view_list.png b/packages/DocumentsUI/res/drawable-hdpi/ic_menu_view_list.png
new file mode 100644
index 0000000..0dbb075
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-hdpi/ic_menu_view_list.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-hdpi/ic_perm_group_system_tools.png b/packages/DocumentsUI/res/drawable-hdpi/ic_perm_group_system_tools.png
new file mode 100644
index 0000000..3905d0e
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-hdpi/ic_perm_group_system_tools.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-hdpi/ic_root_download.png b/packages/DocumentsUI/res/drawable-hdpi/ic_root_download.png
new file mode 100644
index 0000000..e927efa
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-hdpi/ic_root_download.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-hdpi/ic_root_recent.png b/packages/DocumentsUI/res/drawable-hdpi/ic_root_recent.png
new file mode 100644
index 0000000..d23e617
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-hdpi/ic_root_recent.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-hdpi/ic_root_usb.png b/packages/DocumentsUI/res/drawable-hdpi/ic_root_usb.png
new file mode 100644
index 0000000..d8c51d7
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-hdpi/ic_root_usb.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-hdpi/stat_notify_sdcard_light.png b/packages/DocumentsUI/res/drawable-hdpi/stat_notify_sdcard_light.png
new file mode 100644
index 0000000..9c9a7de
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-hdpi/stat_notify_sdcard_light.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-mdpi/ic_cab_accept.png b/packages/DocumentsUI/res/drawable-mdpi/ic_cab_accept.png
new file mode 100644
index 0000000..ad761e1
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-mdpi/ic_cab_accept.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-mdpi/ic_cab_remove_field_holo_light.png b/packages/DocumentsUI/res/drawable-mdpi/ic_cab_remove_field_holo_light.png
new file mode 100644
index 0000000..7c29b71
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-mdpi/ic_cab_remove_field_holo_light.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-mdpi/ic_cab_select_item.png b/packages/DocumentsUI/res/drawable-mdpi/ic_cab_select_item.png
new file mode 100644
index 0000000..dff246a
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-mdpi/ic_cab_select_item.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-mdpi/ic_doc_apk.png b/packages/DocumentsUI/res/drawable-mdpi/ic_doc_apk.png
new file mode 100644
index 0000000..26212e9
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-mdpi/ic_doc_apk.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-mdpi/ic_doc_audio.png b/packages/DocumentsUI/res/drawable-mdpi/ic_doc_audio.png
new file mode 100644
index 0000000..db9fa8b
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-mdpi/ic_doc_audio.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-mdpi/ic_doc_certificate.png b/packages/DocumentsUI/res/drawable-mdpi/ic_doc_certificate.png
new file mode 100644
index 0000000..87877fe
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-mdpi/ic_doc_certificate.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-mdpi/ic_doc_codes.png b/packages/DocumentsUI/res/drawable-mdpi/ic_doc_codes.png
new file mode 100644
index 0000000..d552234
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-mdpi/ic_doc_codes.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-mdpi/ic_doc_compressed.png b/packages/DocumentsUI/res/drawable-mdpi/ic_doc_compressed.png
new file mode 100644
index 0000000..75c304a
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-mdpi/ic_doc_compressed.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-mdpi/ic_doc_contact.png b/packages/DocumentsUI/res/drawable-mdpi/ic_doc_contact.png
new file mode 100644
index 0000000..849d8e7
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-mdpi/ic_doc_contact.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-mdpi/ic_doc_event.png b/packages/DocumentsUI/res/drawable-mdpi/ic_doc_event.png
new file mode 100644
index 0000000..4304489
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-mdpi/ic_doc_event.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-mdpi/ic_doc_font.png b/packages/DocumentsUI/res/drawable-mdpi/ic_doc_font.png
new file mode 100644
index 0000000..e1ad89f
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-mdpi/ic_doc_font.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-mdpi/ic_doc_image.png b/packages/DocumentsUI/res/drawable-mdpi/ic_doc_image.png
new file mode 100644
index 0000000..914ed4b
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-mdpi/ic_doc_image.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-mdpi/ic_doc_pdf.png b/packages/DocumentsUI/res/drawable-mdpi/ic_doc_pdf.png
new file mode 100644
index 0000000..dfdeb26
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-mdpi/ic_doc_pdf.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-mdpi/ic_doc_presentation.png b/packages/DocumentsUI/res/drawable-mdpi/ic_doc_presentation.png
new file mode 100644
index 0000000..0bcbca4
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-mdpi/ic_doc_presentation.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-mdpi/ic_doc_spreadsheet.png b/packages/DocumentsUI/res/drawable-mdpi/ic_doc_spreadsheet.png
new file mode 100644
index 0000000..9e00ea1
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-mdpi/ic_doc_spreadsheet.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-mdpi/ic_doc_text.png b/packages/DocumentsUI/res/drawable-mdpi/ic_doc_text.png
new file mode 100644
index 0000000..e2caba7
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-mdpi/ic_doc_text.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-mdpi/ic_doc_video.png b/packages/DocumentsUI/res/drawable-mdpi/ic_doc_video.png
new file mode 100644
index 0000000..6393df6
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-mdpi/ic_doc_video.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-mdpi/ic_menu_disconnect.png b/packages/DocumentsUI/res/drawable-mdpi/ic_menu_disconnect.png
new file mode 100644
index 0000000..64e8592
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-mdpi/ic_menu_disconnect.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-mdpi/ic_menu_edit_holo.png b/packages/DocumentsUI/res/drawable-mdpi/ic_menu_edit_holo.png
new file mode 100644
index 0000000..8a2af67
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-mdpi/ic_menu_edit_holo.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-mdpi/ic_menu_new_folder.png b/packages/DocumentsUI/res/drawable-mdpi/ic_menu_new_folder.png
new file mode 100644
index 0000000..2b7e5ca
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-mdpi/ic_menu_new_folder.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-mdpi/ic_menu_revert_holo_light.png b/packages/DocumentsUI/res/drawable-mdpi/ic_menu_revert_holo_light.png
new file mode 100644
index 0000000..5d7e1a5
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-mdpi/ic_menu_revert_holo_light.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-mdpi/ic_menu_search_holo_light.png b/packages/DocumentsUI/res/drawable-mdpi/ic_menu_search_holo_light.png
new file mode 100644
index 0000000..0350a43
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-mdpi/ic_menu_search_holo_light.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-mdpi/ic_menu_share_holo_light_icononly.png b/packages/DocumentsUI/res/drawable-mdpi/ic_menu_share_holo_light_icononly.png
new file mode 100644
index 0000000..a15ef6a
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-mdpi/ic_menu_share_holo_light_icononly.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-mdpi/ic_menu_sortby_holo_light.png b/packages/DocumentsUI/res/drawable-mdpi/ic_menu_sortby_holo_light.png
new file mode 100644
index 0000000..9d724f4
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-mdpi/ic_menu_sortby_holo_light.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-mdpi/ic_menu_trash_holo_light.png b/packages/DocumentsUI/res/drawable-mdpi/ic_menu_trash_holo_light.png
new file mode 100644
index 0000000..3cc00bb
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-mdpi/ic_menu_trash_holo_light.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-mdpi/ic_menu_view_grid.png b/packages/DocumentsUI/res/drawable-mdpi/ic_menu_view_grid.png
new file mode 100644
index 0000000..b6d1a9a
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-mdpi/ic_menu_view_grid.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-mdpi/ic_menu_view_list.png b/packages/DocumentsUI/res/drawable-mdpi/ic_menu_view_list.png
new file mode 100644
index 0000000..714d5e83
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-mdpi/ic_menu_view_list.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-mdpi/ic_perm_group_system_tools.png b/packages/DocumentsUI/res/drawable-mdpi/ic_perm_group_system_tools.png
new file mode 100644
index 0000000..5d9d978
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-mdpi/ic_perm_group_system_tools.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-mdpi/ic_root_download.png b/packages/DocumentsUI/res/drawable-mdpi/ic_root_download.png
new file mode 100644
index 0000000..110d78d
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-mdpi/ic_root_download.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-mdpi/ic_root_recent.png b/packages/DocumentsUI/res/drawable-mdpi/ic_root_recent.png
new file mode 100644
index 0000000..47c4f29
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-mdpi/ic_root_recent.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-mdpi/ic_root_usb.png b/packages/DocumentsUI/res/drawable-mdpi/ic_root_usb.png
new file mode 100644
index 0000000..be47b98
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-mdpi/ic_root_usb.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-mdpi/stat_notify_sdcard_light.png b/packages/DocumentsUI/res/drawable-mdpi/stat_notify_sdcard_light.png
new file mode 100644
index 0000000..39dd0fa
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-mdpi/stat_notify_sdcard_light.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xhdpi/ic_cab_accept.png b/packages/DocumentsUI/res/drawable-xhdpi/ic_cab_accept.png
new file mode 100644
index 0000000..47398d3
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-xhdpi/ic_cab_accept.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xhdpi/ic_cab_remove_field_holo_light.png b/packages/DocumentsUI/res/drawable-xhdpi/ic_cab_remove_field_holo_light.png
new file mode 100644
index 0000000..2959e5e
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-xhdpi/ic_cab_remove_field_holo_light.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xhdpi/ic_cab_select_item.png b/packages/DocumentsUI/res/drawable-xhdpi/ic_cab_select_item.png
new file mode 100644
index 0000000..2b4891c
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-xhdpi/ic_cab_select_item.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xhdpi/ic_doc_apk.png b/packages/DocumentsUI/res/drawable-xhdpi/ic_doc_apk.png
new file mode 100644
index 0000000..5abdd4c
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-xhdpi/ic_doc_apk.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xhdpi/ic_doc_audio.png b/packages/DocumentsUI/res/drawable-xhdpi/ic_doc_audio.png
new file mode 100644
index 0000000..7975acd
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-xhdpi/ic_doc_audio.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xhdpi/ic_doc_certificate.png b/packages/DocumentsUI/res/drawable-xhdpi/ic_doc_certificate.png
new file mode 100644
index 0000000..59a7305
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-xhdpi/ic_doc_certificate.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xhdpi/ic_doc_codes.png b/packages/DocumentsUI/res/drawable-xhdpi/ic_doc_codes.png
new file mode 100644
index 0000000..468431e
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-xhdpi/ic_doc_codes.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xhdpi/ic_doc_compressed.png b/packages/DocumentsUI/res/drawable-xhdpi/ic_doc_compressed.png
new file mode 100644
index 0000000..4db47a6
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-xhdpi/ic_doc_compressed.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xhdpi/ic_doc_contact.png b/packages/DocumentsUI/res/drawable-xhdpi/ic_doc_contact.png
new file mode 100644
index 0000000..ded1a00
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-xhdpi/ic_doc_contact.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xhdpi/ic_doc_event.png b/packages/DocumentsUI/res/drawable-xhdpi/ic_doc_event.png
new file mode 100644
index 0000000..4609463
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-xhdpi/ic_doc_event.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xhdpi/ic_doc_font.png b/packages/DocumentsUI/res/drawable-xhdpi/ic_doc_font.png
new file mode 100644
index 0000000..dda7f06
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-xhdpi/ic_doc_font.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xhdpi/ic_doc_image.png b/packages/DocumentsUI/res/drawable-xhdpi/ic_doc_image.png
new file mode 100644
index 0000000..44b40f7
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-xhdpi/ic_doc_image.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xhdpi/ic_doc_pdf.png b/packages/DocumentsUI/res/drawable-xhdpi/ic_doc_pdf.png
new file mode 100644
index 0000000..a59b102
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-xhdpi/ic_doc_pdf.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xhdpi/ic_doc_presentation.png b/packages/DocumentsUI/res/drawable-xhdpi/ic_doc_presentation.png
new file mode 100644
index 0000000..062fe03
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-xhdpi/ic_doc_presentation.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xhdpi/ic_doc_spreadsheet.png b/packages/DocumentsUI/res/drawable-xhdpi/ic_doc_spreadsheet.png
new file mode 100644
index 0000000..82bda58
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-xhdpi/ic_doc_spreadsheet.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xhdpi/ic_doc_text.png b/packages/DocumentsUI/res/drawable-xhdpi/ic_doc_text.png
new file mode 100644
index 0000000..6f15709
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-xhdpi/ic_doc_text.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xhdpi/ic_doc_video.png b/packages/DocumentsUI/res/drawable-xhdpi/ic_doc_video.png
new file mode 100644
index 0000000..cdd8052
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-xhdpi/ic_doc_video.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xhdpi/ic_menu_disconnect.png b/packages/DocumentsUI/res/drawable-xhdpi/ic_menu_disconnect.png
new file mode 100644
index 0000000..a96a0f8
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-xhdpi/ic_menu_disconnect.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xhdpi/ic_menu_edit_holo.png b/packages/DocumentsUI/res/drawable-xhdpi/ic_menu_edit_holo.png
new file mode 100644
index 0000000..4652da6
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-xhdpi/ic_menu_edit_holo.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xhdpi/ic_menu_new_folder.png b/packages/DocumentsUI/res/drawable-xhdpi/ic_menu_new_folder.png
new file mode 100644
index 0000000..449ae53
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-xhdpi/ic_menu_new_folder.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xhdpi/ic_menu_revert_holo_light.png b/packages/DocumentsUI/res/drawable-xhdpi/ic_menu_revert_holo_light.png
new file mode 100644
index 0000000..ca67f62
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-xhdpi/ic_menu_revert_holo_light.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xhdpi/ic_menu_search_holo_light.png b/packages/DocumentsUI/res/drawable-xhdpi/ic_menu_search_holo_light.png
new file mode 100644
index 0000000..6811782
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-xhdpi/ic_menu_search_holo_light.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xhdpi/ic_menu_share_holo_light_icononly.png b/packages/DocumentsUI/res/drawable-xhdpi/ic_menu_share_holo_light_icononly.png
new file mode 100644
index 0000000..939ea21
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-xhdpi/ic_menu_share_holo_light_icononly.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xhdpi/ic_menu_sortby_holo_light.png b/packages/DocumentsUI/res/drawable-xhdpi/ic_menu_sortby_holo_light.png
new file mode 100644
index 0000000..5241a30
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-xhdpi/ic_menu_sortby_holo_light.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xhdpi/ic_menu_trash_holo_light.png b/packages/DocumentsUI/res/drawable-xhdpi/ic_menu_trash_holo_light.png
new file mode 100644
index 0000000..c985a27
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-xhdpi/ic_menu_trash_holo_light.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xhdpi/ic_menu_view_grid.png b/packages/DocumentsUI/res/drawable-xhdpi/ic_menu_view_grid.png
new file mode 100644
index 0000000..b219d06
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-xhdpi/ic_menu_view_grid.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xhdpi/ic_menu_view_list.png b/packages/DocumentsUI/res/drawable-xhdpi/ic_menu_view_list.png
new file mode 100644
index 0000000..897740e
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-xhdpi/ic_menu_view_list.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xhdpi/ic_perm_group_system_tools.png b/packages/DocumentsUI/res/drawable-xhdpi/ic_perm_group_system_tools.png
new file mode 100644
index 0000000..5dc35da
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-xhdpi/ic_perm_group_system_tools.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xhdpi/ic_root_download.png b/packages/DocumentsUI/res/drawable-xhdpi/ic_root_download.png
new file mode 100644
index 0000000..2c30b7f
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-xhdpi/ic_root_download.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xhdpi/ic_root_recent.png b/packages/DocumentsUI/res/drawable-xhdpi/ic_root_recent.png
new file mode 100644
index 0000000..a87ccb8
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-xhdpi/ic_root_recent.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xhdpi/ic_root_usb.png b/packages/DocumentsUI/res/drawable-xhdpi/ic_root_usb.png
new file mode 100644
index 0000000..116da46
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-xhdpi/ic_root_usb.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xhdpi/stat_notify_sdcard_light.png b/packages/DocumentsUI/res/drawable-xhdpi/stat_notify_sdcard_light.png
new file mode 100644
index 0000000..671a204
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-xhdpi/stat_notify_sdcard_light.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xxhdpi/ic_cab_accept.png b/packages/DocumentsUI/res/drawable-xxhdpi/ic_cab_accept.png
new file mode 100644
index 0000000..ca5b1ac
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-xxhdpi/ic_cab_accept.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xxhdpi/ic_cab_remove_field_holo_light.png b/packages/DocumentsUI/res/drawable-xxhdpi/ic_cab_remove_field_holo_light.png
new file mode 100644
index 0000000..953438d5
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-xxhdpi/ic_cab_remove_field_holo_light.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xxhdpi/ic_cab_select_item.png b/packages/DocumentsUI/res/drawable-xxhdpi/ic_cab_select_item.png
new file mode 100644
index 0000000..8679156
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-xxhdpi/ic_cab_select_item.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_signal_in.png b/packages/DocumentsUI/res/drawable-xxhdpi/ic_doc_apk.png
similarity index 70%
copy from packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_signal_in.png
copy to packages/DocumentsUI/res/drawable-xxhdpi/ic_doc_apk.png
index 1480682..45bce08 100644
--- a/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_signal_in.png
+++ b/packages/DocumentsUI/res/drawable-xxhdpi/ic_doc_apk.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xxhdpi/ic_doc_audio.png b/packages/DocumentsUI/res/drawable-xxhdpi/ic_doc_audio.png
new file mode 100644
index 0000000..e232697
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-xxhdpi/ic_doc_audio.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xxhdpi/ic_doc_certificate.png b/packages/DocumentsUI/res/drawable-xxhdpi/ic_doc_certificate.png
new file mode 100644
index 0000000..efcaa87
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-xxhdpi/ic_doc_certificate.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_signal_in.png b/packages/DocumentsUI/res/drawable-xxhdpi/ic_doc_codes.png
similarity index 71%
copy from packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_signal_in.png
copy to packages/DocumentsUI/res/drawable-xxhdpi/ic_doc_codes.png
index 1480682..edaf35e 100644
--- a/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_signal_in.png
+++ b/packages/DocumentsUI/res/drawable-xxhdpi/ic_doc_codes.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xxhdpi/ic_doc_compressed.png b/packages/DocumentsUI/res/drawable-xxhdpi/ic_doc_compressed.png
new file mode 100644
index 0000000..73f6a1b
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-xxhdpi/ic_doc_compressed.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_signal_in.png b/packages/DocumentsUI/res/drawable-xxhdpi/ic_doc_contact.png
similarity index 66%
copy from packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_signal_in.png
copy to packages/DocumentsUI/res/drawable-xxhdpi/ic_doc_contact.png
index 1480682..7f93d76 100644
--- a/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_signal_in.png
+++ b/packages/DocumentsUI/res/drawable-xxhdpi/ic_doc_contact.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xxhdpi/ic_doc_event.png b/packages/DocumentsUI/res/drawable-xxhdpi/ic_doc_event.png
new file mode 100644
index 0000000..55cb3ec
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-xxhdpi/ic_doc_event.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xxhdpi/ic_doc_font.png b/packages/DocumentsUI/res/drawable-xxhdpi/ic_doc_font.png
new file mode 100644
index 0000000..62b612a
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-xxhdpi/ic_doc_font.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_signal_in.png b/packages/DocumentsUI/res/drawable-xxhdpi/ic_doc_image.png
similarity index 78%
copy from packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_signal_in.png
copy to packages/DocumentsUI/res/drawable-xxhdpi/ic_doc_image.png
index 1480682..1a5c481 100644
--- a/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_signal_in.png
+++ b/packages/DocumentsUI/res/drawable-xxhdpi/ic_doc_image.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_signal_in.png b/packages/DocumentsUI/res/drawable-xxhdpi/ic_doc_pdf.png
similarity index 76%
copy from packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_signal_in.png
copy to packages/DocumentsUI/res/drawable-xxhdpi/ic_doc_pdf.png
index 1480682..29d0b33 100644
--- a/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_signal_in.png
+++ b/packages/DocumentsUI/res/drawable-xxhdpi/ic_doc_pdf.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xxhdpi/ic_doc_presentation.png b/packages/DocumentsUI/res/drawable-xxhdpi/ic_doc_presentation.png
new file mode 100644
index 0000000..cec53f2
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-xxhdpi/ic_doc_presentation.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xxhdpi/ic_doc_spreadsheet.png b/packages/DocumentsUI/res/drawable-xxhdpi/ic_doc_spreadsheet.png
new file mode 100644
index 0000000..220bddb
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-xxhdpi/ic_doc_spreadsheet.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_signal_in.png b/packages/DocumentsUI/res/drawable-xxhdpi/ic_doc_text.png
similarity index 84%
copy from packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_signal_in.png
copy to packages/DocumentsUI/res/drawable-xxhdpi/ic_doc_text.png
index 1480682..76a1bb5 100644
--- a/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_signal_in.png
+++ b/packages/DocumentsUI/res/drawable-xxhdpi/ic_doc_text.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xxhdpi/ic_doc_video.png b/packages/DocumentsUI/res/drawable-xxhdpi/ic_doc_video.png
new file mode 100644
index 0000000..20e23c9
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-xxhdpi/ic_doc_video.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xxhdpi/ic_menu_disconnect.png b/packages/DocumentsUI/res/drawable-xxhdpi/ic_menu_disconnect.png
new file mode 100644
index 0000000..aeace05
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-xxhdpi/ic_menu_disconnect.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xxhdpi/ic_menu_edit_holo.png b/packages/DocumentsUI/res/drawable-xxhdpi/ic_menu_edit_holo.png
new file mode 100644
index 0000000..71bcdbf
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-xxhdpi/ic_menu_edit_holo.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xxhdpi/ic_menu_new_folder.png b/packages/DocumentsUI/res/drawable-xxhdpi/ic_menu_new_folder.png
new file mode 100644
index 0000000..0737442
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-xxhdpi/ic_menu_new_folder.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xxhdpi/ic_menu_revert_holo_light.png b/packages/DocumentsUI/res/drawable-xxhdpi/ic_menu_revert_holo_light.png
new file mode 100644
index 0000000..ced6032
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-xxhdpi/ic_menu_revert_holo_light.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xxhdpi/ic_menu_search_holo_light.png b/packages/DocumentsUI/res/drawable-xxhdpi/ic_menu_search_holo_light.png
new file mode 100644
index 0000000..c69d526
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-xxhdpi/ic_menu_search_holo_light.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_signal_in.png b/packages/DocumentsUI/res/drawable-xxhdpi/ic_menu_share_holo_light_icononly.png
similarity index 67%
copy from packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_signal_in.png
copy to packages/DocumentsUI/res/drawable-xxhdpi/ic_menu_share_holo_light_icononly.png
index 1480682..a3f9a5c 100644
--- a/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_signal_in.png
+++ b/packages/DocumentsUI/res/drawable-xxhdpi/ic_menu_share_holo_light_icononly.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_signal_in.png b/packages/DocumentsUI/res/drawable-xxhdpi/ic_menu_sortby_holo_light.png
similarity index 85%
rename from packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_signal_in.png
rename to packages/DocumentsUI/res/drawable-xxhdpi/ic_menu_sortby_holo_light.png
index 1480682..9810a1e 100644
--- a/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_signal_in.png
+++ b/packages/DocumentsUI/res/drawable-xxhdpi/ic_menu_sortby_holo_light.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xxhdpi/ic_menu_trash_holo_light.png b/packages/DocumentsUI/res/drawable-xxhdpi/ic_menu_trash_holo_light.png
new file mode 100644
index 0000000..1811be8
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-xxhdpi/ic_menu_trash_holo_light.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xxhdpi/ic_menu_view_grid.png b/packages/DocumentsUI/res/drawable-xxhdpi/ic_menu_view_grid.png
new file mode 100644
index 0000000..2c58b5e
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-xxhdpi/ic_menu_view_grid.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xxhdpi/ic_menu_view_list.png b/packages/DocumentsUI/res/drawable-xxhdpi/ic_menu_view_list.png
new file mode 100644
index 0000000..cf320cd
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-xxhdpi/ic_menu_view_list.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xxhdpi/ic_perm_group_system_tools.png b/packages/DocumentsUI/res/drawable-xxhdpi/ic_perm_group_system_tools.png
new file mode 100644
index 0000000..cee2b05
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-xxhdpi/ic_perm_group_system_tools.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xxhdpi/ic_root_download.png b/packages/DocumentsUI/res/drawable-xxhdpi/ic_root_download.png
new file mode 100644
index 0000000..f9fe2be
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-xxhdpi/ic_root_download.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xxhdpi/ic_root_recent.png b/packages/DocumentsUI/res/drawable-xxhdpi/ic_root_recent.png
new file mode 100644
index 0000000..d95ebb5
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-xxhdpi/ic_root_recent.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xxhdpi/ic_root_usb.png b/packages/DocumentsUI/res/drawable-xxhdpi/ic_root_usb.png
new file mode 100644
index 0000000..6fbc3c8
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable-xxhdpi/ic_root_usb.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_signal_in.png b/packages/DocumentsUI/res/drawable-xxhdpi/stat_notify_sdcard_light.png
similarity index 85%
copy from packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_signal_in.png
copy to packages/DocumentsUI/res/drawable-xxhdpi/stat_notify_sdcard_light.png
index 1480682..8b8b227 100644
--- a/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_signal_in.png
+++ b/packages/DocumentsUI/res/drawable-xxhdpi/stat_notify_sdcard_light.png
Binary files differ
diff --git a/packages/DocumentsUI/res/menu/activity.xml b/packages/DocumentsUI/res/menu/activity.xml
index e182159..4d3dc56 100644
--- a/packages/DocumentsUI/res/menu/activity.xml
+++ b/packages/DocumentsUI/res/menu/activity.xml
@@ -18,19 +18,19 @@
<item
android:id="@+id/menu_create_dir"
android:title="@string/menu_create_dir"
- android:icon="@drawable/ic_menu_create_dir"
+ android:icon="@drawable/ic_menu_new_folder"
android:showAsAction="ifRoom" />
<item
android:id="@+id/menu_search"
android:title="@string/menu_search"
- android:icon="@drawable/ic_menu_search"
+ android:icon="@drawable/ic_menu_search_holo_light"
android:showAsAction="always|collapseActionView"
android:actionViewClass="android.widget.SearchView"
android:imeOptions="actionSearch" />
<item
android:id="@+id/menu_sort"
android:title="@string/menu_sort"
- android:icon="@drawable/ic_menu_sort"
+ android:icon="@drawable/ic_menu_sortby_holo_light"
android:showAsAction="always">
<menu>
<item
@@ -47,15 +47,16 @@
<item
android:id="@+id/menu_grid"
android:title="@string/menu_grid"
- android:icon="@drawable/ic_menu_grid"
+ android:icon="@drawable/ic_menu_view_grid"
android:showAsAction="ifRoom" />
<item
android:id="@+id/menu_list"
android:title="@string/menu_list"
- android:icon="@drawable/ic_menu_list"
+ android:icon="@drawable/ic_menu_view_list"
android:showAsAction="ifRoom" />
<item
android:id="@+id/menu_settings"
android:title="@string/menu_settings"
+ android:icon="@drawable/ic_perm_group_system_tools"
android:showAsAction="never" />
</menu>
diff --git a/packages/DocumentsUI/res/values-af/strings.xml b/packages/DocumentsUI/res/values-af/strings.xml
index ece6673..a2c3023 100644
--- a/packages/DocumentsUI/res/values-af/strings.xml
+++ b/packages/DocumentsUI/res/values-af/strings.xml
@@ -50,6 +50,5 @@
<string name="toast_failed_delete" msgid="2180678019407244069">"Kan sommige dokumente nie uitvee nie"</string>
<string name="more" msgid="7117420986529297171">"Nog"</string>
<string name="loading" msgid="7933681260296021180">"Laai tans..."</string>
- <!-- no translation found for share_via (8966594246261344259) -->
- <skip />
+ <string name="share_via" msgid="8966594246261344259">"Deel via"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-am/strings.xml b/packages/DocumentsUI/res/values-am/strings.xml
index 8761a27..1e845b2 100644
--- a/packages/DocumentsUI/res/values-am/strings.xml
+++ b/packages/DocumentsUI/res/values-am/strings.xml
@@ -50,6 +50,5 @@
<string name="toast_failed_delete" msgid="2180678019407244069">"አንዳንድ ሰነዶችን መሰረዝ አልተቻለም"</string>
<string name="more" msgid="7117420986529297171">"ተጨማሪ"</string>
<string name="loading" msgid="7933681260296021180">"በመጫን ላይ…"</string>
- <!-- no translation found for share_via (8966594246261344259) -->
- <skip />
+ <string name="share_via" msgid="8966594246261344259">"በሚከተለው በኩል ያጋሩ"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-ar/strings.xml b/packages/DocumentsUI/res/values-ar/strings.xml
index febc6dc..279c0e6 100644
--- a/packages/DocumentsUI/res/values-ar/strings.xml
+++ b/packages/DocumentsUI/res/values-ar/strings.xml
@@ -50,6 +50,5 @@
<string name="toast_failed_delete" msgid="2180678019407244069">"تعذر حذف بعض المستندات"</string>
<string name="more" msgid="7117420986529297171">"المزيد"</string>
<string name="loading" msgid="7933681260296021180">"جارٍ التحميل…"</string>
- <!-- no translation found for share_via (8966594246261344259) -->
- <skip />
+ <string name="share_via" msgid="8966594246261344259">"مشاركة عبر"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-az-rAZ/strings.xml b/packages/DocumentsUI/res/values-az-rAZ/strings.xml
index a301b66..d405fe2 100644
--- a/packages/DocumentsUI/res/values-az-rAZ/strings.xml
+++ b/packages/DocumentsUI/res/values-az-rAZ/strings.xml
@@ -50,6 +50,5 @@
<string name="toast_failed_delete" msgid="2180678019407244069">"Bəzi sənədləri silə bilmir"</string>
<string name="more" msgid="7117420986529297171">"Daha çox"</string>
<string name="loading" msgid="7933681260296021180">"Yüklənir…"</string>
- <!-- no translation found for share_via (8966594246261344259) -->
- <skip />
+ <string name="share_via" msgid="8966594246261344259">"Bunun vasitəsilə paylaş:"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-bg/strings.xml b/packages/DocumentsUI/res/values-bg/strings.xml
index bf399d2..5ba9107 100644
--- a/packages/DocumentsUI/res/values-bg/strings.xml
+++ b/packages/DocumentsUI/res/values-bg/strings.xml
@@ -50,6 +50,5 @@
<string name="toast_failed_delete" msgid="2180678019407244069">"Някои документи не могат да бъдат изтрити"</string>
<string name="more" msgid="7117420986529297171">"Още"</string>
<string name="loading" msgid="7933681260296021180">"Зарежда се..."</string>
- <!-- no translation found for share_via (8966594246261344259) -->
- <skip />
+ <string name="share_via" msgid="8966594246261344259">"Споделяне чрез"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-ca/strings.xml b/packages/DocumentsUI/res/values-ca/strings.xml
index 22c12fc..dfaead5 100644
--- a/packages/DocumentsUI/res/values-ca/strings.xml
+++ b/packages/DocumentsUI/res/values-ca/strings.xml
@@ -50,6 +50,5 @@
<string name="toast_failed_delete" msgid="2180678019407244069">"No es poden suprimir alguns documents."</string>
<string name="more" msgid="7117420986529297171">"Més"</string>
<string name="loading" msgid="7933681260296021180">"S\'està carregant…"</string>
- <!-- no translation found for share_via (8966594246261344259) -->
- <skip />
+ <string name="share_via" msgid="8966594246261344259">"Comparteix mitjançant"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-cs/strings.xml b/packages/DocumentsUI/res/values-cs/strings.xml
index 42a5a2b..053a19a 100644
--- a/packages/DocumentsUI/res/values-cs/strings.xml
+++ b/packages/DocumentsUI/res/values-cs/strings.xml
@@ -50,6 +50,5 @@
<string name="toast_failed_delete" msgid="2180678019407244069">"Některé dokumenty nelze smazat"</string>
<string name="more" msgid="7117420986529297171">"Více"</string>
<string name="loading" msgid="7933681260296021180">"Načítání..."</string>
- <!-- no translation found for share_via (8966594246261344259) -->
- <skip />
+ <string name="share_via" msgid="8966594246261344259">"Sdílet pomocí"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-da/strings.xml b/packages/DocumentsUI/res/values-da/strings.xml
index 41b1aac..1c53326 100644
--- a/packages/DocumentsUI/res/values-da/strings.xml
+++ b/packages/DocumentsUI/res/values-da/strings.xml
@@ -50,6 +50,5 @@
<string name="toast_failed_delete" msgid="2180678019407244069">"Nogle dokumenter kan ikke slettes"</string>
<string name="more" msgid="7117420986529297171">"Mere"</string>
<string name="loading" msgid="7933681260296021180">"Indlæser…"</string>
- <!-- no translation found for share_via (8966594246261344259) -->
- <skip />
+ <string name="share_via" msgid="8966594246261344259">"Del via"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-de/strings.xml b/packages/DocumentsUI/res/values-de/strings.xml
index bd54545..3bbb35a 100644
--- a/packages/DocumentsUI/res/values-de/strings.xml
+++ b/packages/DocumentsUI/res/values-de/strings.xml
@@ -50,6 +50,5 @@
<string name="toast_failed_delete" msgid="2180678019407244069">"Einige Dokumente konnten nicht gelöscht werden."</string>
<string name="more" msgid="7117420986529297171">"Mehr"</string>
<string name="loading" msgid="7933681260296021180">"Wird geladen…"</string>
- <!-- no translation found for share_via (8966594246261344259) -->
- <skip />
+ <string name="share_via" msgid="8966594246261344259">"Teilen über"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-el/strings.xml b/packages/DocumentsUI/res/values-el/strings.xml
index c15eb1f..a31aa13 100644
--- a/packages/DocumentsUI/res/values-el/strings.xml
+++ b/packages/DocumentsUI/res/values-el/strings.xml
@@ -50,6 +50,5 @@
<string name="toast_failed_delete" msgid="2180678019407244069">"Δεν είναι δυνατή η διαγραφή ορισμένων εγγράφων"</string>
<string name="more" msgid="7117420986529297171">"Περισσότερα"</string>
<string name="loading" msgid="7933681260296021180">"Φόρτωση…"</string>
- <!-- no translation found for share_via (8966594246261344259) -->
- <skip />
+ <string name="share_via" msgid="8966594246261344259">"Κοινή χρήση μέσω"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-en-rGB/strings.xml b/packages/DocumentsUI/res/values-en-rGB/strings.xml
index b1693b0..b8f2926 100644
--- a/packages/DocumentsUI/res/values-en-rGB/strings.xml
+++ b/packages/DocumentsUI/res/values-en-rGB/strings.xml
@@ -50,6 +50,5 @@
<string name="toast_failed_delete" msgid="2180678019407244069">"Unable to delete some documents"</string>
<string name="more" msgid="7117420986529297171">"More"</string>
<string name="loading" msgid="7933681260296021180">"Loading…"</string>
- <!-- no translation found for share_via (8966594246261344259) -->
- <skip />
+ <string name="share_via" msgid="8966594246261344259">"Share via"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-en-rIN/strings.xml b/packages/DocumentsUI/res/values-en-rIN/strings.xml
index b1693b0..b8f2926 100644
--- a/packages/DocumentsUI/res/values-en-rIN/strings.xml
+++ b/packages/DocumentsUI/res/values-en-rIN/strings.xml
@@ -50,6 +50,5 @@
<string name="toast_failed_delete" msgid="2180678019407244069">"Unable to delete some documents"</string>
<string name="more" msgid="7117420986529297171">"More"</string>
<string name="loading" msgid="7933681260296021180">"Loading…"</string>
- <!-- no translation found for share_via (8966594246261344259) -->
- <skip />
+ <string name="share_via" msgid="8966594246261344259">"Share via"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-es-rUS/strings.xml b/packages/DocumentsUI/res/values-es-rUS/strings.xml
index d556667..91b0098 100644
--- a/packages/DocumentsUI/res/values-es-rUS/strings.xml
+++ b/packages/DocumentsUI/res/values-es-rUS/strings.xml
@@ -50,6 +50,5 @@
<string name="toast_failed_delete" msgid="2180678019407244069">"No es posible eliminar algunos documentos."</string>
<string name="more" msgid="7117420986529297171">"Más"</string>
<string name="loading" msgid="7933681260296021180">"Cargando…"</string>
- <!-- no translation found for share_via (8966594246261344259) -->
- <skip />
+ <string name="share_via" msgid="8966594246261344259">"Compartir mediante"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-es/strings.xml b/packages/DocumentsUI/res/values-es/strings.xml
index 723a0ec..099ccad 100644
--- a/packages/DocumentsUI/res/values-es/strings.xml
+++ b/packages/DocumentsUI/res/values-es/strings.xml
@@ -50,6 +50,5 @@
<string name="toast_failed_delete" msgid="2180678019407244069">"No es posible eliminar algunos documentos"</string>
<string name="more" msgid="7117420986529297171">"Más"</string>
<string name="loading" msgid="7933681260296021180">"Cargando..."</string>
- <!-- no translation found for share_via (8966594246261344259) -->
- <skip />
+ <string name="share_via" msgid="8966594246261344259">"Compartir a través de"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-et-rEE/strings.xml b/packages/DocumentsUI/res/values-et-rEE/strings.xml
index 7c298de..0c21faa 100644
--- a/packages/DocumentsUI/res/values-et-rEE/strings.xml
+++ b/packages/DocumentsUI/res/values-et-rEE/strings.xml
@@ -50,6 +50,5 @@
<string name="toast_failed_delete" msgid="2180678019407244069">"Mõnda dokumenti ei õnnestu kustutada"</string>
<string name="more" msgid="7117420986529297171">"Rohkem"</string>
<string name="loading" msgid="7933681260296021180">"Laadimine ..."</string>
- <!-- no translation found for share_via (8966594246261344259) -->
- <skip />
+ <string name="share_via" msgid="8966594246261344259">"Jagage teenusega"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-fa/strings.xml b/packages/DocumentsUI/res/values-fa/strings.xml
index 418a08f..9961af5 100644
--- a/packages/DocumentsUI/res/values-fa/strings.xml
+++ b/packages/DocumentsUI/res/values-fa/strings.xml
@@ -50,6 +50,5 @@
<string name="toast_failed_delete" msgid="2180678019407244069">"برخی از اسناد حذف نمیشوند"</string>
<string name="more" msgid="7117420986529297171">"بیشتر"</string>
<string name="loading" msgid="7933681260296021180">"در حال بارگیری..."</string>
- <!-- no translation found for share_via (8966594246261344259) -->
- <skip />
+ <string name="share_via" msgid="8966594246261344259">"اشتراکگذاری از طریق"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-fi/strings.xml b/packages/DocumentsUI/res/values-fi/strings.xml
index 0d9d883..c5c5eba 100644
--- a/packages/DocumentsUI/res/values-fi/strings.xml
+++ b/packages/DocumentsUI/res/values-fi/strings.xml
@@ -50,6 +50,5 @@
<string name="toast_failed_delete" msgid="2180678019407244069">"Joitakin asiakirjoja ei voi poistaa"</string>
<string name="more" msgid="7117420986529297171">"Lisää"</string>
<string name="loading" msgid="7933681260296021180">"Ladataan…"</string>
- <!-- no translation found for share_via (8966594246261344259) -->
- <skip />
+ <string name="share_via" msgid="8966594246261344259">"Jaa sovelluksessa"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-fr-rCA/strings.xml b/packages/DocumentsUI/res/values-fr-rCA/strings.xml
index 086b82c..5bcc399 100644
--- a/packages/DocumentsUI/res/values-fr-rCA/strings.xml
+++ b/packages/DocumentsUI/res/values-fr-rCA/strings.xml
@@ -50,6 +50,5 @@
<string name="toast_failed_delete" msgid="2180678019407244069">"Impossible de supprimer certains documents"</string>
<string name="more" msgid="7117420986529297171">"Plus"</string>
<string name="loading" msgid="7933681260296021180">"Chargement en cours..."</string>
- <!-- no translation found for share_via (8966594246261344259) -->
- <skip />
+ <string name="share_via" msgid="8966594246261344259">"Partager par"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-fr/strings.xml b/packages/DocumentsUI/res/values-fr/strings.xml
index d70877a..0b83f02 100644
--- a/packages/DocumentsUI/res/values-fr/strings.xml
+++ b/packages/DocumentsUI/res/values-fr/strings.xml
@@ -50,6 +50,5 @@
<string name="toast_failed_delete" msgid="2180678019407244069">"Impossible de supprimer certains documents."</string>
<string name="more" msgid="7117420986529297171">"Plus"</string>
<string name="loading" msgid="7933681260296021180">"Chargement…"</string>
- <!-- no translation found for share_via (8966594246261344259) -->
- <skip />
+ <string name="share_via" msgid="8966594246261344259">"Partager via"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-hi/strings.xml b/packages/DocumentsUI/res/values-hi/strings.xml
index d45e9bb..290eff7 100644
--- a/packages/DocumentsUI/res/values-hi/strings.xml
+++ b/packages/DocumentsUI/res/values-hi/strings.xml
@@ -50,6 +50,5 @@
<string name="toast_failed_delete" msgid="2180678019407244069">"कुछ दस्तावेज़ों को हटाने में अक्षम"</string>
<string name="more" msgid="7117420986529297171">"अधिक"</string>
<string name="loading" msgid="7933681260296021180">"लोड हो रहे हैं..."</string>
- <!-- no translation found for share_via (8966594246261344259) -->
- <skip />
+ <string name="share_via" msgid="8966594246261344259">"इसके द्वारा साझा करें"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-hr/strings.xml b/packages/DocumentsUI/res/values-hr/strings.xml
index 01be538..f47a0f7 100644
--- a/packages/DocumentsUI/res/values-hr/strings.xml
+++ b/packages/DocumentsUI/res/values-hr/strings.xml
@@ -50,6 +50,5 @@
<string name="toast_failed_delete" msgid="2180678019407244069">"Nije moguće izbrisati neke dokumente"</string>
<string name="more" msgid="7117420986529297171">"Više"</string>
<string name="loading" msgid="7933681260296021180">"Učitavanje…"</string>
- <!-- no translation found for share_via (8966594246261344259) -->
- <skip />
+ <string name="share_via" msgid="8966594246261344259">"Dijeli putem"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-hu/strings.xml b/packages/DocumentsUI/res/values-hu/strings.xml
index 2648f82..1187760 100644
--- a/packages/DocumentsUI/res/values-hu/strings.xml
+++ b/packages/DocumentsUI/res/values-hu/strings.xml
@@ -50,6 +50,5 @@
<string name="toast_failed_delete" msgid="2180678019407244069">"Néhány dokumentumot nem lehet törölni"</string>
<string name="more" msgid="7117420986529297171">"Továbbiak"</string>
<string name="loading" msgid="7933681260296021180">"Betöltés..."</string>
- <!-- no translation found for share_via (8966594246261344259) -->
- <skip />
+ <string name="share_via" msgid="8966594246261344259">"Megosztás itt:"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-hy-rAM/strings.xml b/packages/DocumentsUI/res/values-hy-rAM/strings.xml
index ed026c2..38bf8b6 100644
--- a/packages/DocumentsUI/res/values-hy-rAM/strings.xml
+++ b/packages/DocumentsUI/res/values-hy-rAM/strings.xml
@@ -50,6 +50,5 @@
<string name="toast_failed_delete" msgid="2180678019407244069">"Անհնար է ջնջել որոշ փաստաթղթեր"</string>
<string name="more" msgid="7117420986529297171">"Ավելին"</string>
<string name="loading" msgid="7933681260296021180">"Բեռնում..."</string>
- <!-- no translation found for share_via (8966594246261344259) -->
- <skip />
+ <string name="share_via" msgid="8966594246261344259">"Տարածել"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-in/strings.xml b/packages/DocumentsUI/res/values-in/strings.xml
index a1cefc2..0857869 100644
--- a/packages/DocumentsUI/res/values-in/strings.xml
+++ b/packages/DocumentsUI/res/values-in/strings.xml
@@ -50,6 +50,5 @@
<string name="toast_failed_delete" msgid="2180678019407244069">"Tidak dapat menghapus beberapa dokumen"</string>
<string name="more" msgid="7117420986529297171">"Lainnya"</string>
<string name="loading" msgid="7933681260296021180">"Memuat..."</string>
- <!-- no translation found for share_via (8966594246261344259) -->
- <skip />
+ <string name="share_via" msgid="8966594246261344259">"Bagikan melalui"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-it/strings.xml b/packages/DocumentsUI/res/values-it/strings.xml
index 6b1bb8b..9f97c1e 100644
--- a/packages/DocumentsUI/res/values-it/strings.xml
+++ b/packages/DocumentsUI/res/values-it/strings.xml
@@ -50,6 +50,5 @@
<string name="toast_failed_delete" msgid="2180678019407244069">"Impossibile eliminare alcuni documenti"</string>
<string name="more" msgid="7117420986529297171">"Altro"</string>
<string name="loading" msgid="7933681260296021180">"Caricamento..."</string>
- <!-- no translation found for share_via (8966594246261344259) -->
- <skip />
+ <string name="share_via" msgid="8966594246261344259">"Condividi via"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-iw/strings.xml b/packages/DocumentsUI/res/values-iw/strings.xml
index 98bfa87..904efb0 100644
--- a/packages/DocumentsUI/res/values-iw/strings.xml
+++ b/packages/DocumentsUI/res/values-iw/strings.xml
@@ -50,6 +50,5 @@
<string name="toast_failed_delete" msgid="2180678019407244069">"לא ניתן למחוק חלק מהמסמכים"</string>
<string name="more" msgid="7117420986529297171">"עוד"</string>
<string name="loading" msgid="7933681260296021180">"טוען..."</string>
- <!-- no translation found for share_via (8966594246261344259) -->
- <skip />
+ <string name="share_via" msgid="8966594246261344259">"שתף באמצעות"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-ja/strings.xml b/packages/DocumentsUI/res/values-ja/strings.xml
index 9a83c1f..3e473ab 100644
--- a/packages/DocumentsUI/res/values-ja/strings.xml
+++ b/packages/DocumentsUI/res/values-ja/strings.xml
@@ -50,6 +50,5 @@
<string name="toast_failed_delete" msgid="2180678019407244069">"一部のドキュメントを削除できません"</string>
<string name="more" msgid="7117420986529297171">"その他"</string>
<string name="loading" msgid="7933681260296021180">"読み込んでいます..."</string>
- <!-- no translation found for share_via (8966594246261344259) -->
- <skip />
+ <string name="share_via" msgid="8966594246261344259">"共有ツール"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-ka-rGE/strings.xml b/packages/DocumentsUI/res/values-ka-rGE/strings.xml
index 2b9338d..26a83d7 100644
--- a/packages/DocumentsUI/res/values-ka-rGE/strings.xml
+++ b/packages/DocumentsUI/res/values-ka-rGE/strings.xml
@@ -50,6 +50,5 @@
<string name="toast_failed_delete" msgid="2180678019407244069">"ზოგიერთი დოკუმენტის წაშლა ვერ ხერხდება"</string>
<string name="more" msgid="7117420986529297171">"მეტი"</string>
<string name="loading" msgid="7933681260296021180">"ჩატვირთვა…"</string>
- <!-- no translation found for share_via (8966594246261344259) -->
- <skip />
+ <string name="share_via" msgid="8966594246261344259">"გაზიარება:"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-km-rKH/strings.xml b/packages/DocumentsUI/res/values-km-rKH/strings.xml
index 7455ef4..12a82ba 100644
--- a/packages/DocumentsUI/res/values-km-rKH/strings.xml
+++ b/packages/DocumentsUI/res/values-km-rKH/strings.xml
@@ -50,6 +50,5 @@
<string name="toast_failed_delete" msgid="2180678019407244069">"មិនអាចលុបឯកសារមួយចំនួន"</string>
<string name="more" msgid="7117420986529297171">"ច្រើនទៀត"</string>
<string name="loading" msgid="7933681260296021180">"កំពុងផ្ទុក..."</string>
- <!-- no translation found for share_via (8966594246261344259) -->
- <skip />
+ <string name="share_via" msgid="8966594246261344259">"ចែករំលែកតាម"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-ko/strings.xml b/packages/DocumentsUI/res/values-ko/strings.xml
index b96ae3b..6e90ff7 100644
--- a/packages/DocumentsUI/res/values-ko/strings.xml
+++ b/packages/DocumentsUI/res/values-ko/strings.xml
@@ -50,6 +50,5 @@
<string name="toast_failed_delete" msgid="2180678019407244069">"일부 문서를 삭제할 수 없음"</string>
<string name="more" msgid="7117420986529297171">"더보기"</string>
<string name="loading" msgid="7933681260296021180">"로드 중.."</string>
- <!-- no translation found for share_via (8966594246261344259) -->
- <skip />
+ <string name="share_via" msgid="8966594246261344259">"공유 방법"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-lo-rLA/strings.xml b/packages/DocumentsUI/res/values-lo-rLA/strings.xml
index 6f889ea..e805643 100644
--- a/packages/DocumentsUI/res/values-lo-rLA/strings.xml
+++ b/packages/DocumentsUI/res/values-lo-rLA/strings.xml
@@ -50,6 +50,5 @@
<string name="toast_failed_delete" msgid="2180678019407244069">"ບໍ່ສາມາດລຶບບາງເອກະສານໄດ້"</string>
<string name="more" msgid="7117420986529297171">"ເພີ່ມເຕີມ"</string>
<string name="loading" msgid="7933681260296021180">"ກຳລັງໂຫລດ..."</string>
- <!-- no translation found for share_via (8966594246261344259) -->
- <skip />
+ <string name="share_via" msgid="8966594246261344259">"ແບ່ງປັນຜ່ານ"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-lt/strings.xml b/packages/DocumentsUI/res/values-lt/strings.xml
index 6bbc2ce..a5f9402 100644
--- a/packages/DocumentsUI/res/values-lt/strings.xml
+++ b/packages/DocumentsUI/res/values-lt/strings.xml
@@ -50,6 +50,5 @@
<string name="toast_failed_delete" msgid="2180678019407244069">"Nepavyko ištrinti kai kurių dokumentų"</string>
<string name="more" msgid="7117420986529297171">"Daugiau"</string>
<string name="loading" msgid="7933681260296021180">"Įkeliama..."</string>
- <!-- no translation found for share_via (8966594246261344259) -->
- <skip />
+ <string name="share_via" msgid="8966594246261344259">"Bendrinti naudojant"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-lv/strings.xml b/packages/DocumentsUI/res/values-lv/strings.xml
index 425c9a6..05470e8 100644
--- a/packages/DocumentsUI/res/values-lv/strings.xml
+++ b/packages/DocumentsUI/res/values-lv/strings.xml
@@ -50,6 +50,5 @@
<string name="toast_failed_delete" msgid="2180678019407244069">"Nevar dzēst dažus dokumentus."</string>
<string name="more" msgid="7117420986529297171">"Vēl"</string>
<string name="loading" msgid="7933681260296021180">"Notiek ielāde..."</string>
- <!-- no translation found for share_via (8966594246261344259) -->
- <skip />
+ <string name="share_via" msgid="8966594246261344259">"Kopīgot, izmantojot"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-mn-rMN/strings.xml b/packages/DocumentsUI/res/values-mn-rMN/strings.xml
index 49b12c9..12cf6e1 100644
--- a/packages/DocumentsUI/res/values-mn-rMN/strings.xml
+++ b/packages/DocumentsUI/res/values-mn-rMN/strings.xml
@@ -50,6 +50,5 @@
<string name="toast_failed_delete" msgid="2180678019407244069">"Зарим документуудыг устгах боломжгүй"</string>
<string name="more" msgid="7117420986529297171">"Цааш"</string>
<string name="loading" msgid="7933681260296021180">"Ачааллаж байна..."</string>
- <!-- no translation found for share_via (8966594246261344259) -->
- <skip />
+ <string name="share_via" msgid="8966594246261344259">"Дараахаар дамжуулан хуваалцах"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-ms-rMY/strings.xml b/packages/DocumentsUI/res/values-ms-rMY/strings.xml
index f013e7a..ba93dd1 100644
--- a/packages/DocumentsUI/res/values-ms-rMY/strings.xml
+++ b/packages/DocumentsUI/res/values-ms-rMY/strings.xml
@@ -50,6 +50,5 @@
<string name="toast_failed_delete" msgid="2180678019407244069">"Tidak dapat memadam beberapa dokumen"</string>
<string name="more" msgid="7117420986529297171">"Lagi"</string>
<string name="loading" msgid="7933681260296021180">"Memuatkan…"</string>
- <!-- no translation found for share_via (8966594246261344259) -->
- <skip />
+ <string name="share_via" msgid="8966594246261344259">"Kongsi melalui"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-nb/strings.xml b/packages/DocumentsUI/res/values-nb/strings.xml
index fc5d0ce4f..987b52da 100644
--- a/packages/DocumentsUI/res/values-nb/strings.xml
+++ b/packages/DocumentsUI/res/values-nb/strings.xml
@@ -50,6 +50,5 @@
<string name="toast_failed_delete" msgid="2180678019407244069">"Enkelte dokumenter kunne ikke slettes"</string>
<string name="more" msgid="7117420986529297171">"Mer"</string>
<string name="loading" msgid="7933681260296021180">"Laster inn …"</string>
- <!-- no translation found for share_via (8966594246261344259) -->
- <skip />
+ <string name="share_via" msgid="8966594246261344259">"Del via"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-ne-rNP/strings.xml b/packages/DocumentsUI/res/values-ne-rNP/strings.xml
index c7aac6b..6130b58 100644
--- a/packages/DocumentsUI/res/values-ne-rNP/strings.xml
+++ b/packages/DocumentsUI/res/values-ne-rNP/strings.xml
@@ -50,6 +50,5 @@
<string name="toast_failed_delete" msgid="2180678019407244069">"केही कागजातहरू मेट्न असमर्थ छ"</string>
<string name="more" msgid="7117420986529297171">"थप"</string>
<string name="loading" msgid="7933681260296021180">"लोड हुँदै..."</string>
- <!-- no translation found for share_via (8966594246261344259) -->
- <skip />
+ <string name="share_via" msgid="8966594246261344259">"माध्यमबाट साझेदारी गर्नुहोस्"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-nl/strings.xml b/packages/DocumentsUI/res/values-nl/strings.xml
index 60a61bf..03ba12c4 100644
--- a/packages/DocumentsUI/res/values-nl/strings.xml
+++ b/packages/DocumentsUI/res/values-nl/strings.xml
@@ -50,6 +50,5 @@
<string name="toast_failed_delete" msgid="2180678019407244069">"Kan bepaalde documenten niet verwijderen"</string>
<string name="more" msgid="7117420986529297171">"Meer"</string>
<string name="loading" msgid="7933681260296021180">"Laden..."</string>
- <!-- no translation found for share_via (8966594246261344259) -->
- <skip />
+ <string name="share_via" msgid="8966594246261344259">"Delen via"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-pl/strings.xml b/packages/DocumentsUI/res/values-pl/strings.xml
index 923e7ac..8ef3e6f 100644
--- a/packages/DocumentsUI/res/values-pl/strings.xml
+++ b/packages/DocumentsUI/res/values-pl/strings.xml
@@ -50,6 +50,5 @@
<string name="toast_failed_delete" msgid="2180678019407244069">"Nie można usunąć niektórych dokumentów"</string>
<string name="more" msgid="7117420986529297171">"Więcej"</string>
<string name="loading" msgid="7933681260296021180">"Wczytywanie…"</string>
- <!-- no translation found for share_via (8966594246261344259) -->
- <skip />
+ <string name="share_via" msgid="8966594246261344259">"Udostępnij przez"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-pt-rPT/strings.xml b/packages/DocumentsUI/res/values-pt-rPT/strings.xml
index 93b3ca9..7ae43db 100644
--- a/packages/DocumentsUI/res/values-pt-rPT/strings.xml
+++ b/packages/DocumentsUI/res/values-pt-rPT/strings.xml
@@ -50,6 +50,5 @@
<string name="toast_failed_delete" msgid="2180678019407244069">"Não é possível eliminar alguns documentos"</string>
<string name="more" msgid="7117420986529297171">"Mais"</string>
<string name="loading" msgid="7933681260296021180">"A carregar…"</string>
- <!-- no translation found for share_via (8966594246261344259) -->
- <skip />
+ <string name="share_via" msgid="8966594246261344259">"Partilhar através de"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-pt/strings.xml b/packages/DocumentsUI/res/values-pt/strings.xml
index 79dc36e..d07f78f 100644
--- a/packages/DocumentsUI/res/values-pt/strings.xml
+++ b/packages/DocumentsUI/res/values-pt/strings.xml
@@ -50,6 +50,5 @@
<string name="toast_failed_delete" msgid="2180678019407244069">"Não foi possível excluir alguns documentos"</string>
<string name="more" msgid="7117420986529297171">"Mais"</string>
<string name="loading" msgid="7933681260296021180">"Carregando…"</string>
- <!-- no translation found for share_via (8966594246261344259) -->
- <skip />
+ <string name="share_via" msgid="8966594246261344259">"Compartilhar via"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-ro/strings.xml b/packages/DocumentsUI/res/values-ro/strings.xml
index 01fc980..06ab5ff 100644
--- a/packages/DocumentsUI/res/values-ro/strings.xml
+++ b/packages/DocumentsUI/res/values-ro/strings.xml
@@ -50,6 +50,5 @@
<string name="toast_failed_delete" msgid="2180678019407244069">"Unele documente nu au putut fi șterse"</string>
<string name="more" msgid="7117420986529297171">"Mai multe"</string>
<string name="loading" msgid="7933681260296021180">"Se încarcă…"</string>
- <!-- no translation found for share_via (8966594246261344259) -->
- <skip />
+ <string name="share_via" msgid="8966594246261344259">"Distribuiţi prin"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-ru/strings.xml b/packages/DocumentsUI/res/values-ru/strings.xml
index 587a057..3b9c3f3 100644
--- a/packages/DocumentsUI/res/values-ru/strings.xml
+++ b/packages/DocumentsUI/res/values-ru/strings.xml
@@ -50,6 +50,5 @@
<string name="toast_failed_delete" msgid="2180678019407244069">"Не удалось удалить некоторые документы"</string>
<string name="more" msgid="7117420986529297171">"Ещё"</string>
<string name="loading" msgid="7933681260296021180">"Загрузка…"</string>
- <!-- no translation found for share_via (8966594246261344259) -->
- <skip />
+ <string name="share_via" msgid="8966594246261344259">"Способ отправки"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-si-rLK/strings.xml b/packages/DocumentsUI/res/values-si-rLK/strings.xml
index fefa4dd..9b1fb9b 100644
--- a/packages/DocumentsUI/res/values-si-rLK/strings.xml
+++ b/packages/DocumentsUI/res/values-si-rLK/strings.xml
@@ -50,6 +50,5 @@
<string name="toast_failed_delete" msgid="2180678019407244069">"සමහර ලේඛන මැකීමට නොහැකි විය"</string>
<string name="more" msgid="7117420986529297171">"තව"</string>
<string name="loading" msgid="7933681260296021180">"පූරණය වෙමින්..."</string>
- <!-- no translation found for share_via (8966594246261344259) -->
- <skip />
+ <string name="share_via" msgid="8966594246261344259">"හරහා බෙදාගන්න"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-sk/strings.xml b/packages/DocumentsUI/res/values-sk/strings.xml
index 2b073db..a4850c1 100644
--- a/packages/DocumentsUI/res/values-sk/strings.xml
+++ b/packages/DocumentsUI/res/values-sk/strings.xml
@@ -50,6 +50,5 @@
<string name="toast_failed_delete" msgid="2180678019407244069">"Niektoré dokumenty sa nepodarilo odstrániť"</string>
<string name="more" msgid="7117420986529297171">"Viac"</string>
<string name="loading" msgid="7933681260296021180">"Prebieha načítavanie..."</string>
- <!-- no translation found for share_via (8966594246261344259) -->
- <skip />
+ <string name="share_via" msgid="8966594246261344259">"Zdieľať pomocou"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-sl/strings.xml b/packages/DocumentsUI/res/values-sl/strings.xml
index b5ee908..c1cfbd9 100644
--- a/packages/DocumentsUI/res/values-sl/strings.xml
+++ b/packages/DocumentsUI/res/values-sl/strings.xml
@@ -50,6 +50,5 @@
<string name="toast_failed_delete" msgid="2180678019407244069">"Nekaterih dokumentov ni mogoče izbrisati"</string>
<string name="more" msgid="7117420986529297171">"Več"</string>
<string name="loading" msgid="7933681260296021180">"Nalaganje …"</string>
- <!-- no translation found for share_via (8966594246261344259) -->
- <skip />
+ <string name="share_via" msgid="8966594246261344259">"Deli z drugimi prek"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-sr/strings.xml b/packages/DocumentsUI/res/values-sr/strings.xml
index 3310f3e..eaec4e5 100644
--- a/packages/DocumentsUI/res/values-sr/strings.xml
+++ b/packages/DocumentsUI/res/values-sr/strings.xml
@@ -50,6 +50,5 @@
<string name="toast_failed_delete" msgid="2180678019407244069">"Није могуће избрисати неке документе"</string>
<string name="more" msgid="7117420986529297171">"Још"</string>
<string name="loading" msgid="7933681260296021180">"Учитавање…"</string>
- <!-- no translation found for share_via (8966594246261344259) -->
- <skip />
+ <string name="share_via" msgid="8966594246261344259">"Дељење преко"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-sv/strings.xml b/packages/DocumentsUI/res/values-sv/strings.xml
index 55f3f54..6d93d4d 100644
--- a/packages/DocumentsUI/res/values-sv/strings.xml
+++ b/packages/DocumentsUI/res/values-sv/strings.xml
@@ -50,6 +50,5 @@
<string name="toast_failed_delete" msgid="2180678019407244069">"Det gick inte att ta bort vissa dokument"</string>
<string name="more" msgid="7117420986529297171">"Mer"</string>
<string name="loading" msgid="7933681260296021180">"Läser in …"</string>
- <!-- no translation found for share_via (8966594246261344259) -->
- <skip />
+ <string name="share_via" msgid="8966594246261344259">"Dela via"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-sw/strings.xml b/packages/DocumentsUI/res/values-sw/strings.xml
index b6e128f..915f851 100644
--- a/packages/DocumentsUI/res/values-sw/strings.xml
+++ b/packages/DocumentsUI/res/values-sw/strings.xml
@@ -50,6 +50,5 @@
<string name="toast_failed_delete" msgid="2180678019407244069">"Imeshindwa kufuta baadhi ya hati"</string>
<string name="more" msgid="7117420986529297171">"Zaidi"</string>
<string name="loading" msgid="7933681260296021180">"Inapakia…"</string>
- <!-- no translation found for share_via (8966594246261344259) -->
- <skip />
+ <string name="share_via" msgid="8966594246261344259">"Shiriki kupitia"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-th/strings.xml b/packages/DocumentsUI/res/values-th/strings.xml
index 08dc27b..b1603f0 100644
--- a/packages/DocumentsUI/res/values-th/strings.xml
+++ b/packages/DocumentsUI/res/values-th/strings.xml
@@ -50,6 +50,5 @@
<string name="toast_failed_delete" msgid="2180678019407244069">"ไม่สามารถลบเอกสารบางรายการ"</string>
<string name="more" msgid="7117420986529297171">"เพิ่มเติม"</string>
<string name="loading" msgid="7933681260296021180">"กำลังโหลด..."</string>
- <!-- no translation found for share_via (8966594246261344259) -->
- <skip />
+ <string name="share_via" msgid="8966594246261344259">"แชร์ผ่าน"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-tl/strings.xml b/packages/DocumentsUI/res/values-tl/strings.xml
index 57e6380..d47be6f 100644
--- a/packages/DocumentsUI/res/values-tl/strings.xml
+++ b/packages/DocumentsUI/res/values-tl/strings.xml
@@ -50,6 +50,5 @@
<string name="toast_failed_delete" msgid="2180678019407244069">"Hindi matanggal ang ilang dokumento"</string>
<string name="more" msgid="7117420986529297171">"Higit pa"</string>
<string name="loading" msgid="7933681260296021180">"Naglo-load…"</string>
- <!-- no translation found for share_via (8966594246261344259) -->
- <skip />
+ <string name="share_via" msgid="8966594246261344259">"Ibahagi sa pamamagitan ng"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-tr/strings.xml b/packages/DocumentsUI/res/values-tr/strings.xml
index 0c87107..46688bd 100644
--- a/packages/DocumentsUI/res/values-tr/strings.xml
+++ b/packages/DocumentsUI/res/values-tr/strings.xml
@@ -50,6 +50,5 @@
<string name="toast_failed_delete" msgid="2180678019407244069">"Bazı dokümanlar silinemiyor"</string>
<string name="more" msgid="7117420986529297171">"Diğer"</string>
<string name="loading" msgid="7933681260296021180">"Yükleniyor..."</string>
- <!-- no translation found for share_via (8966594246261344259) -->
- <skip />
+ <string name="share_via" msgid="8966594246261344259">"Şunu kullanarak paylaş:"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-uk/strings.xml b/packages/DocumentsUI/res/values-uk/strings.xml
index bdaab59..1d793a1 100644
--- a/packages/DocumentsUI/res/values-uk/strings.xml
+++ b/packages/DocumentsUI/res/values-uk/strings.xml
@@ -50,6 +50,5 @@
<string name="toast_failed_delete" msgid="2180678019407244069">"Не вдалося видалити деякі документи"</string>
<string name="more" msgid="7117420986529297171">"Більше"</string>
<string name="loading" msgid="7933681260296021180">"Завантаження..."</string>
- <!-- no translation found for share_via (8966594246261344259) -->
- <skip />
+ <string name="share_via" msgid="8966594246261344259">"Надіслати через"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-vi/strings.xml b/packages/DocumentsUI/res/values-vi/strings.xml
index 8257d9b..5a7e6cc 100644
--- a/packages/DocumentsUI/res/values-vi/strings.xml
+++ b/packages/DocumentsUI/res/values-vi/strings.xml
@@ -50,6 +50,5 @@
<string name="toast_failed_delete" msgid="2180678019407244069">"Không thể xóa một số tài liệu"</string>
<string name="more" msgid="7117420986529297171">"Thêm"</string>
<string name="loading" msgid="7933681260296021180">"Đang tải…"</string>
- <!-- no translation found for share_via (8966594246261344259) -->
- <skip />
+ <string name="share_via" msgid="8966594246261344259">"Chia sẻ qua"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-zh-rCN/strings.xml b/packages/DocumentsUI/res/values-zh-rCN/strings.xml
index 882aee2..7b8f2f9 100644
--- a/packages/DocumentsUI/res/values-zh-rCN/strings.xml
+++ b/packages/DocumentsUI/res/values-zh-rCN/strings.xml
@@ -50,6 +50,5 @@
<string name="toast_failed_delete" msgid="2180678019407244069">"无法删除部分文档"</string>
<string name="more" msgid="7117420986529297171">"更多"</string>
<string name="loading" msgid="7933681260296021180">"正在加载..."</string>
- <!-- no translation found for share_via (8966594246261344259) -->
- <skip />
+ <string name="share_via" msgid="8966594246261344259">"分享方式:"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-zh-rHK/strings.xml b/packages/DocumentsUI/res/values-zh-rHK/strings.xml
index 773b8b3..6fc0503 100644
--- a/packages/DocumentsUI/res/values-zh-rHK/strings.xml
+++ b/packages/DocumentsUI/res/values-zh-rHK/strings.xml
@@ -50,6 +50,5 @@
<string name="toast_failed_delete" msgid="2180678019407244069">"無法刪除部分文件"</string>
<string name="more" msgid="7117420986529297171">"更多"</string>
<string name="loading" msgid="7933681260296021180">"正在載入..."</string>
- <!-- no translation found for share_via (8966594246261344259) -->
- <skip />
+ <string name="share_via" msgid="8966594246261344259">"分享方式:"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-zh-rTW/strings.xml b/packages/DocumentsUI/res/values-zh-rTW/strings.xml
index 0852a1b..8ca664d 100644
--- a/packages/DocumentsUI/res/values-zh-rTW/strings.xml
+++ b/packages/DocumentsUI/res/values-zh-rTW/strings.xml
@@ -50,6 +50,5 @@
<string name="toast_failed_delete" msgid="2180678019407244069">"無法刪除部分文件"</string>
<string name="more" msgid="7117420986529297171">"更多"</string>
<string name="loading" msgid="7933681260296021180">"載入中…"</string>
- <!-- no translation found for share_via (8966594246261344259) -->
- <skip />
+ <string name="share_via" msgid="8966594246261344259">"分享方式:"</string>
</resources>
diff --git a/packages/DocumentsUI/res/values-zu/strings.xml b/packages/DocumentsUI/res/values-zu/strings.xml
index d4ad405..02db890 100644
--- a/packages/DocumentsUI/res/values-zu/strings.xml
+++ b/packages/DocumentsUI/res/values-zu/strings.xml
@@ -50,6 +50,5 @@
<string name="toast_failed_delete" msgid="2180678019407244069">"Ayikwazi ukususa amanye amadokhumenti"</string>
<string name="more" msgid="7117420986529297171">"Okuningi"</string>
<string name="loading" msgid="7933681260296021180">"Iyalayisha…"</string>
- <!-- no translation found for share_via (8966594246261344259) -->
- <skip />
+ <string name="share_via" msgid="8966594246261344259">"Yabelana nge-"</string>
</resources>
diff --git a/packages/DocumentsUI/src/com/android/documentsui/DirectoryFragment.java b/packages/DocumentsUI/src/com/android/documentsui/DirectoryFragment.java
index 33d7d6af..ba47037 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/DirectoryFragment.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/DirectoryFragment.java
@@ -566,9 +566,9 @@
task.execute(uri);
}
} else if (docIcon != 0) {
- icon.setImageDrawable(DocumentInfo.loadIcon(context, docAuthority, docIcon));
+ icon.setImageDrawable(IconUtils.loadPackageIcon(context, docAuthority, docIcon));
} else {
- icon.setImageDrawable(RootsCache.resolveDocumentIcon(context, docMimeType));
+ icon.setImageDrawable(IconUtils.loadMimeIcon(context, docMimeType));
}
title.setText(docDisplayName);
diff --git a/packages/DocumentsUI/src/com/android/documentsui/DocumentsActivity.java b/packages/DocumentsUI/src/com/android/documentsui/DocumentsActivity.java
index 4da6567..8715055 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/DocumentsActivity.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/DocumentsActivity.java
@@ -145,7 +145,7 @@
mState.action = ACTION_CREATE;
} else if (Intent.ACTION_GET_CONTENT.equals(action)) {
mState.action = ACTION_GET_CONTENT;
- } else if (DocumentsContract.ACTION_MANAGE_DOCUMENTS.equals(action)) {
+ } else if (DocumentsContract.ACTION_MANAGE_ROOT.equals(action)) {
mState.action = ACTION_MANAGE;
}
@@ -171,12 +171,13 @@
}
if (mState.action == ACTION_MANAGE) {
- final Uri rootUri = intent.getData();
- final RootInfo root = mRoots.findRoot(rootUri);
+ final Uri uri = intent.getData();
+ final String rootId = DocumentsContract.getRootId(uri);
+ final RootInfo root = mRoots.getRoot(uri.getAuthority(), rootId);
if (root != null) {
onRootPicked(root, true);
} else {
- Log.w(TAG, "Failed to find root: " + rootUri);
+ Log.w(TAG, "Failed to find root: " + uri);
finish();
}
@@ -626,14 +627,24 @@
// Replace selected file
SaveFragment.get(fm).setReplaceTarget(doc);
} else if (mState.action == ACTION_MANAGE) {
- // Open the document
- final Intent intent = new Intent(Intent.ACTION_VIEW);
- intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
- intent.setData(doc.uri);
+ // First try managing the document; we expect manager to filter
+ // based on authority, so we don't grant.
+ final Intent manage = new Intent(DocumentsContract.ACTION_MANAGE_DOCUMENT);
+ manage.setData(doc.uri);
+
try {
- startActivity(intent);
+ startActivity(manage);
} catch (ActivityNotFoundException ex) {
- Toast.makeText(this, R.string.toast_no_application, Toast.LENGTH_SHORT).show();
+ // Fall back to viewing
+ final Intent view = new Intent(Intent.ACTION_VIEW);
+ view.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
+ view.setData(doc.uri);
+
+ try {
+ startActivity(view);
+ } catch (ActivityNotFoundException ex2) {
+ Toast.makeText(this, R.string.toast_no_application, Toast.LENGTH_SHORT).show();
+ }
}
}
}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/IconUtils.java b/packages/DocumentsUI/src/com/android/documentsui/IconUtils.java
new file mode 100644
index 0000000..b5b1033
--- /dev/null
+++ b/packages/DocumentsUI/src/com/android/documentsui/IconUtils.java
@@ -0,0 +1,242 @@
+/*
+ * Copyright (C) 2013 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.documentsui;
+
+import android.content.Context;
+import android.content.pm.PackageManager;
+import android.content.pm.ProviderInfo;
+import android.content.res.Resources;
+import android.graphics.drawable.Drawable;
+import android.provider.DocumentsContract.Document;
+
+import com.google.android.collect.Maps;
+
+import java.util.HashMap;
+
+public class IconUtils {
+
+ private static HashMap<String, Integer> sMimeIcons = Maps.newHashMap();
+
+ private static void add(String mimeType, int resId) {
+ if (sMimeIcons.put(mimeType, resId) != null) {
+ throw new RuntimeException(mimeType + " already registered!");
+ }
+ }
+
+ static {
+ int icon;
+
+ // Package
+ icon = R.drawable.ic_doc_apk;
+ add("application/vnd.android.package-archive", icon);
+
+ // Audio
+ icon = R.drawable.ic_doc_audio;
+ add("application/ogg", icon);
+ add("application/x-flac", icon);
+
+ // Certificate
+ icon = R.drawable.ic_doc_certificate;
+ add("application/pgp-keys", icon);
+ add("application/pgp-signature", icon);
+ add("application/x-pkcs12", icon);
+ add("application/x-pkcs7-certreqresp", icon);
+ add("application/x-pkcs7-crl", icon);
+ add("application/x-x509-ca-cert", icon);
+ add("application/x-x509-user-cert", icon);
+ add("application/x-pkcs7-certificates", icon);
+ add("application/x-pkcs7-mime", icon);
+ add("application/x-pkcs7-signature", icon);
+
+ // Source code
+ icon = R.drawable.ic_doc_codes;
+ add("application/rdf+xml", icon);
+ add("application/rss+xml", icon);
+ add("application/x-object", icon);
+ add("application/xhtml+xml", icon);
+ add("text/css", icon);
+ add("text/html", icon);
+ add("text/xml", icon);
+ add("text/x-c++hdr", icon);
+ add("text/x-c++src", icon);
+ add("text/x-chdr", icon);
+ add("text/x-csrc", icon);
+ add("text/x-dsrc", icon);
+ add("text/x-csh", icon);
+ add("text/x-haskell", icon);
+ add("text/x-java", icon);
+ add("text/x-literate-haskell", icon);
+ add("text/x-pascal", icon);
+ add("text/x-tcl", icon);
+ add("text/x-tex", icon);
+ add("application/x-latex", icon);
+ add("application/x-texinfo", icon);
+ add("application/atom+xml", icon);
+ add("application/ecmascript", icon);
+ add("application/json", icon);
+ add("application/javascript", icon);
+ add("application/xml", icon);
+ add("text/javascript", icon);
+ add("application/x-javascript", icon);
+
+ // Compressed
+ icon = R.drawable.ic_doc_compressed;
+ add("application/mac-binhex40", icon);
+ add("application/rar", icon);
+ add("application/zip", icon);
+ add("application/x-apple-diskimage", icon);
+ add("application/x-debian-package", icon);
+ add("application/x-gtar", icon);
+ add("application/x-iso9660-image", icon);
+ add("application/x-lha", icon);
+ add("application/x-lzh", icon);
+ add("application/x-lzx", icon);
+ add("application/x-stuffit", icon);
+ add("application/x-tar", icon);
+ add("application/x-webarchive", icon);
+ add("application/x-webarchive-xml", icon);
+ add("application/gzip", icon);
+ add("application/x-7z-compressed", icon);
+ add("application/x-deb", icon);
+ add("application/x-rar-compressed", icon);
+
+ // Contact
+ icon = R.drawable.ic_doc_contact;
+ add("text/x-vcard", icon);
+ add("text/vcard", icon);
+
+ // Event
+ icon = R.drawable.ic_doc_event;
+ add("text/calendar", icon);
+ add("text/x-vcalendar", icon);
+
+ // Font
+ icon = R.drawable.ic_doc_font;
+ add("application/x-font", icon);
+ add("application/font-woff", icon);
+ add("application/x-font-woff", icon);
+ add("application/x-font-ttf", icon);
+
+ // Image
+ icon = R.drawable.ic_doc_image;
+ add("application/vnd.oasis.opendocument.graphics", icon);
+ add("application/vnd.oasis.opendocument.graphics-template", icon);
+ add("application/vnd.oasis.opendocument.image", icon);
+ add("application/vnd.stardivision.draw", icon);
+ add("application/vnd.sun.xml.draw", icon);
+ add("application/vnd.sun.xml.draw.template", icon);
+
+ // PDF
+ icon = R.drawable.ic_doc_pdf;
+ add("application/pdf", icon);
+
+ // Presentation
+ icon = R.drawable.ic_doc_presentation;
+ add("application/vnd.ms-powerpoint", icon);
+ add("application/vnd.openxmlformats-officedocument.presentationml.presentation", icon);
+ add("application/vnd.openxmlformats-officedocument.presentationml.template", icon);
+ add("application/vnd.openxmlformats-officedocument.presentationml.slideshow", icon);
+ add("application/vnd.stardivision.impress", icon);
+ add("application/vnd.sun.xml.impress", icon);
+ add("application/vnd.sun.xml.impress.template", icon);
+ add("application/x-kpresenter", icon);
+ add("application/vnd.oasis.opendocument.presentation", icon);
+
+ // Spreadsheet
+ icon = R.drawable.ic_doc_spreadsheet;
+ add("application/vnd.oasis.opendocument.spreadsheet", icon);
+ add("application/vnd.oasis.opendocument.spreadsheet-template", icon);
+ add("application/vnd.ms-excel", icon);
+ add("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", icon);
+ add("application/vnd.openxmlformats-officedocument.spreadsheetml.template", icon);
+ add("application/vnd.stardivision.calc", icon);
+ add("application/vnd.sun.xml.calc", icon);
+ add("application/vnd.sun.xml.calc.template", icon);
+ add("application/x-kspread", icon);
+
+ // Text
+ icon = R.drawable.ic_doc_text;
+ add("application/vnd.oasis.opendocument.text", icon);
+ add("application/vnd.oasis.opendocument.text-master", icon);
+ add("application/vnd.oasis.opendocument.text-template", icon);
+ add("application/vnd.oasis.opendocument.text-web", icon);
+ add("application/msword", icon);
+ add("application/vnd.openxmlformats-officedocument.wordprocessingml.document", icon);
+ add("application/vnd.openxmlformats-officedocument.wordprocessingml.template", icon);
+ add("application/vnd.stardivision.writer", icon);
+ add("application/vnd.stardivision.writer-global", icon);
+ add("application/vnd.sun.xml.writer", icon);
+ add("application/vnd.sun.xml.writer.global", icon);
+ add("application/vnd.sun.xml.writer.template", icon);
+ add("application/x-abiword", icon);
+ add("application/x-kword", icon);
+
+ // Video
+ icon = R.drawable.ic_doc_video;
+ add("application/x-quicktimeplayer", icon);
+ add("application/x-shockwave-flash", icon);
+ }
+
+ public static Drawable loadPackageIcon(Context context, String authority, int icon) {
+ if (icon != 0) {
+ if (authority != null) {
+ final PackageManager pm = context.getPackageManager();
+ final ProviderInfo info = pm.resolveContentProvider(authority, 0);
+ if (info != null) {
+ return pm.getDrawable(info.packageName, icon, info.applicationInfo);
+ }
+ } else {
+ return context.getResources().getDrawable(icon);
+ }
+ }
+ return null;
+ }
+
+ public static Drawable loadMimeIcon(Context context, String mimeType) {
+ final Resources res = context.getResources();
+
+ if (Document.MIME_TYPE_DIR.equals(mimeType)) {
+ return res.getDrawable(R.drawable.ic_dir);
+ }
+
+ // Look for exact match first
+ Integer resId = sMimeIcons.get(mimeType);
+ if (resId != null) {
+ return res.getDrawable(resId);
+ }
+
+ if (mimeType == null) {
+ // TODO: generic icon?
+ return null;
+ }
+
+ // Otherwise look for partial match
+ final String typeOnly = mimeType.split("/")[0];
+ if ("audio".equals(typeOnly)) {
+ return res.getDrawable(R.drawable.ic_doc_audio);
+ } else if ("image".equals(typeOnly)) {
+ return res.getDrawable(R.drawable.ic_doc_image);
+ } else if ("text".equals(typeOnly)) {
+ return res.getDrawable(R.drawable.ic_doc_text);
+ } else if ("video".equals(typeOnly)) {
+ return res.getDrawable(R.drawable.ic_doc_video);
+ } else {
+ // TODO: generic icon?
+ return null;
+ }
+ }
+}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/MimePredicate.java b/packages/DocumentsUI/src/com/android/documentsui/MimePredicate.java
index 15ad061..85d0988 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/MimePredicate.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/MimePredicate.java
@@ -31,16 +31,29 @@
if (doc.isDirectory()) {
return true;
}
- for (String filter : mFilters) {
- if (mimeMatches(filter, doc.mimeType)) {
+ if (mimeMatches(mFilters, doc.mimeType)) {
+ return true;
+ }
+ return false;
+ }
+
+ public static boolean mimeMatches(String[] filters, String[] tests) {
+ if (tests == null) {
+ return false;
+ }
+ for (String test : tests) {
+ if (mimeMatches(filters, test)) {
return true;
}
}
return false;
}
- public static boolean mimeMatches(String filter, String[] tests) {
- for (String test : tests) {
+ public static boolean mimeMatches(String[] filters, String test) {
+ if (filters == null) {
+ return true;
+ }
+ for (String filter : filters) {
if (mimeMatches(filter, test)) {
return true;
}
@@ -49,12 +62,12 @@
}
public static boolean mimeMatches(String filter, String test) {
- if (test == null) {
+ if (filter == null || "*/*".equals(filter)) {
+ return true;
+ } else if (test == null) {
return false;
} else if (filter.equals(test)) {
return true;
- } else if ("*/*".equals(filter)) {
- return true;
} else if (filter.endsWith("/*")) {
return filter.regionMatches(0, test, 0, filter.indexOf('/'));
} else {
diff --git a/packages/DocumentsUI/src/com/android/documentsui/RootsCache.java b/packages/DocumentsUI/src/com/android/documentsui/RootsCache.java
index 0b10f19..d192378 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/RootsCache.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/RootsCache.java
@@ -21,15 +21,11 @@
import android.content.ContentProviderClient;
import android.content.ContentResolver;
import android.content.Context;
-import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ProviderInfo;
-import android.content.pm.ResolveInfo;
import android.database.Cursor;
-import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.provider.DocumentsContract;
-import android.provider.DocumentsContract.Document;
import android.provider.DocumentsContract.Root;
import android.util.Log;
@@ -153,33 +149,8 @@
return mRoots;
}
- /**
- * Flags that declare explicit content types.
- */
- private static final int FLAGS_CONTENT_MASK = Root.FLAG_PROVIDES_IMAGES
- | Root.FLAG_PROVIDES_AUDIO | Root.FLAG_PROVIDES_VIDEO;
-
@GuardedBy("ActivityThread")
public List<RootInfo> getMatchingRoots(State state) {
-
- // Determine acceptable content flags
- int includeFlags = 0;
- for (String acceptMime : state.acceptMimes) {
- final String[] type = acceptMime.split("/");
- if (type.length != 2) continue;
-
- if ("image".equals(type[0])) {
- includeFlags |= Root.FLAG_PROVIDES_IMAGES;
- } else if ("audio".equals(type[0])) {
- includeFlags |= Root.FLAG_PROVIDES_AUDIO;
- } else if ("video".equals(type[0])) {
- includeFlags |= Root.FLAG_PROVIDES_VIDEO;
- } else if ("*".equals(type[0])) {
- includeFlags |= Root.FLAG_PROVIDES_IMAGES | Root.FLAG_PROVIDES_AUDIO
- | Root.FLAG_PROVIDES_VIDEO;
- }
- }
-
ArrayList<RootInfo> matching = Lists.newArrayList();
for (RootInfo root : mRoots) {
final boolean supportsCreate = (root.flags & Root.FLAG_SUPPORTS_CREATE) != 0;
@@ -193,36 +164,13 @@
// Exclude non-local devices when local only
if (state.localOnly && !localOnly) continue;
- if ((root.flags & FLAGS_CONTENT_MASK) != 0) {
- // This root offers specific content, so only include if the
- // caller asked for that content type.
- if ((root.flags & includeFlags) == 0) {
- // Sorry, no overlap.
- continue;
- }
+ // Only include roots that serve requested content
+ if (!MimePredicate.mimeMatches(root.mimeTypes, state.acceptMimes)) {
+ continue;
}
matching.add(root);
}
return matching;
}
-
- @GuardedBy("ActivityThread")
- public static Drawable resolveDocumentIcon(Context context, String mimeType) {
- if (Document.MIME_TYPE_DIR.equals(mimeType)) {
- return context.getResources().getDrawable(R.drawable.ic_dir);
- } else {
- final PackageManager pm = context.getPackageManager();
- final Intent intent = new Intent(Intent.ACTION_VIEW);
- intent.setType(mimeType);
-
- final ResolveInfo activityInfo = pm.resolveActivity(
- intent, PackageManager.MATCH_DEFAULT_ONLY);
- if (activityInfo != null) {
- return activityInfo.loadIcon(pm);
- } else {
- return null;
- }
- }
- }
}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/SaveFragment.java b/packages/DocumentsUI/src/com/android/documentsui/SaveFragment.java
index 8b0a974..dc5b64a 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/SaveFragment.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/SaveFragment.java
@@ -74,7 +74,7 @@
final ImageView icon = (ImageView) view.findViewById(android.R.id.icon);
icon.setImageDrawable(
- RootsCache.resolveDocumentIcon(context, getArguments().getString(EXTRA_MIME_TYPE)));
+ IconUtils.loadMimeIcon(context, getArguments().getString(EXTRA_MIME_TYPE)));
mDisplayName = (EditText) view.findViewById(android.R.id.title);
mDisplayName.addTextChangedListener(mDisplayNameWatcher);
diff --git a/packages/DocumentsUI/src/com/android/documentsui/TestActivity.java b/packages/DocumentsUI/src/com/android/documentsui/TestActivity.java
index 2405cb5..7b7c3d5 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/TestActivity.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/TestActivity.java
@@ -33,10 +33,14 @@
import libcore.io.Streams;
import java.io.InputStream;
+import java.io.OutputStream;
public class TestActivity extends Activity {
private static final String TAG = "TestActivity";
+ private static final int CODE_READ = 42;
+ private static final int CODE_WRITE = 43;
+
private TextView mResult;
@Override
@@ -49,10 +53,10 @@
view.setOrientation(LinearLayout.VERTICAL);
final CheckBox multiple = new CheckBox(context);
- multiple.setText("\nALLOW_MULTIPLE\n");
+ multiple.setText("ALLOW_MULTIPLE");
view.addView(multiple);
final CheckBox localOnly = new CheckBox(context);
- localOnly.setText("\nLOCAL_ONLY\n");
+ localOnly.setText("LOCAL_ONLY");
view.addView(localOnly);
Button button;
@@ -70,7 +74,7 @@
if (localOnly.isChecked()) {
intent.putExtra(Intent.EXTRA_LOCAL_ONLY, true);
}
- startActivityForResult(intent, 42);
+ startActivityForResult(intent, CODE_READ);
}
});
view.addView(button);
@@ -89,7 +93,7 @@
if (localOnly.isChecked()) {
intent.putExtra(Intent.EXTRA_LOCAL_ONLY, true);
}
- startActivityForResult(intent, 42);
+ startActivityForResult(intent, CODE_READ);
}
});
view.addView(button);
@@ -108,7 +112,7 @@
if (localOnly.isChecked()) {
intent.putExtra(Intent.EXTRA_LOCAL_ONLY, true);
}
- startActivityForResult(intent, 42);
+ startActivityForResult(intent, CODE_READ);
}
});
view.addView(button);
@@ -129,7 +133,7 @@
if (localOnly.isChecked()) {
intent.putExtra(Intent.EXTRA_LOCAL_ONLY, true);
}
- startActivityForResult(intent, 42);
+ startActivityForResult(intent, CODE_READ);
}
});
view.addView(button);
@@ -146,7 +150,7 @@
if (localOnly.isChecked()) {
intent.putExtra(Intent.EXTRA_LOCAL_ONLY, true);
}
- startActivityForResult(intent, 42);
+ startActivityForResult(intent, CODE_WRITE);
}
});
view.addView(button);
@@ -165,7 +169,7 @@
if (localOnly.isChecked()) {
intent.putExtra(Intent.EXTRA_LOCAL_ONLY, true);
}
- startActivityForResult(Intent.createChooser(intent, "Kittens!"), 42);
+ startActivityForResult(Intent.createChooser(intent, "Kittens!"), CODE_READ);
}
});
view.addView(button);
@@ -178,20 +182,45 @@
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
- mResult.setText("resultCode=" + resultCode + ", data=" + String.valueOf(data));
+ mResult.setText(null);
+ String result = "resultCode=" + resultCode + ", data=" + String.valueOf(data);
- final Uri uri = data != null ? data.getData() : null;
- if (uri != null) {
- InputStream is = null;
- try {
- is = getContentResolver().openInputStream(uri);
- final int length = Streams.readFullyNoClose(is).length;
- Log.d(TAG, "read length=" + length);
- } catch (Exception e) {
- Log.w(TAG, "Failed to read " + uri, e);
- } finally {
- IoUtils.closeQuietly(is);
+ if (requestCode == CODE_READ) {
+ final Uri uri = data != null ? data.getData() : null;
+ if (uri != null) {
+ InputStream is = null;
+ try {
+ is = getContentResolver().openInputStream(uri);
+ final int length = Streams.readFullyNoClose(is).length;
+ result += "; read length=" + length;
+ } catch (Exception e) {
+ result += "; ERROR";
+ Log.w(TAG, "Failed to read " + uri, e);
+ } finally {
+ IoUtils.closeQuietly(is);
+ }
+ } else {
+ result += "no uri?";
+ }
+ } else if (requestCode == CODE_WRITE) {
+ final Uri uri = data != null ? data.getData() : null;
+ if (uri != null) {
+ OutputStream os = null;
+ try {
+ os = getContentResolver().openOutputStream(uri);
+ os.write("THE COMPLETE WORKS OF SHAKESPEARE".getBytes());
+ } catch (Exception e) {
+ result += "; ERROR";
+ Log.w(TAG, "Failed to write " + uri, e);
+ } finally {
+ IoUtils.closeQuietly(os);
+ }
+ } else {
+ result += "no uri?";
}
}
+
+ Log.d(TAG, result);
+ mResult.setText(result);
}
}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/model/DocumentInfo.java b/packages/DocumentsUI/src/com/android/documentsui/model/DocumentInfo.java
index 9874265..a1489a5 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/model/DocumentInfo.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/model/DocumentInfo.java
@@ -18,11 +18,7 @@
import android.content.ContentProviderClient;
import android.content.ContentResolver;
-import android.content.Context;
-import android.content.pm.PackageManager;
-import android.content.pm.ProviderInfo;
import android.database.Cursor;
-import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.provider.DocumentsContract;
import android.provider.DocumentsContract.Document;
@@ -173,25 +169,6 @@
return (flags & Document.FLAG_SUPPORTS_DELETE) != 0;
}
- public Drawable loadIcon(Context context) {
- return loadIcon(context, uri.getAuthority(), icon);
- }
-
- public static Drawable loadIcon(Context context, String authority, int icon) {
- if (icon != 0) {
- if (authority != null) {
- final PackageManager pm = context.getPackageManager();
- final ProviderInfo info = pm.resolveContentProvider(authority, 0);
- if (info != null) {
- return pm.getDrawable(info.packageName, icon, info.applicationInfo);
- }
- } else {
- return context.getResources().getDrawable(icon);
- }
- }
- return null;
- }
-
public static String getCursorString(Cursor cursor, String columnName) {
final int index = cursor.getColumnIndex(columnName);
return (index != -1) ? cursor.getString(index) : null;
diff --git a/packages/DocumentsUI/src/com/android/documentsui/model/RootInfo.java b/packages/DocumentsUI/src/com/android/documentsui/model/RootInfo.java
index 189284b..75baa0a 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/model/RootInfo.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/model/RootInfo.java
@@ -25,6 +25,8 @@
import android.graphics.drawable.Drawable;
import android.provider.DocumentsContract.Root;
+import com.android.documentsui.IconUtils;
+
import java.util.Objects;
/**
@@ -40,6 +42,7 @@
public String summary;
public String documentId;
public long availableBytes;
+ public String[] mimeTypes;
public static RootInfo fromRootsCursor(String authority, Cursor cursor) {
final RootInfo root = new RootInfo();
@@ -52,11 +55,15 @@
root.summary = getCursorString(cursor, Root.COLUMN_SUMMARY);
root.documentId = getCursorString(cursor, Root.COLUMN_DOCUMENT_ID);
root.availableBytes = getCursorLong(cursor, Root.COLUMN_AVAILABLE_BYTES);
+
+ final String raw = getCursorString(cursor, Root.COLUMN_MIME_TYPES);
+ root.mimeTypes = (raw != null) ? raw.split("\n") : null;
+
return root;
}
public Drawable loadIcon(Context context) {
- return DocumentInfo.loadIcon(context, authority, icon);
+ return IconUtils.loadPackageIcon(context, authority, icon);
}
@Override
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardHostView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardHostView.java
index eedb7d0..00124b0 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardHostView.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardHostView.java
@@ -24,6 +24,7 @@
import android.app.ActivityManager;
import android.app.ActivityOptions;
import android.app.AlertDialog;
+import android.app.PendingIntent;
import android.app.SearchManager;
import android.app.admin.DevicePolicyManager;
import android.appwidget.AppWidgetHost;
@@ -40,6 +41,7 @@
import android.graphics.Canvas;
import android.graphics.Rect;
import android.media.RemoteControlClient;
+import android.os.Bundle;
import android.os.Looper;
import android.os.Parcel;
import android.os.Parcelable;
@@ -47,6 +49,9 @@
import android.os.UserHandle;
import android.os.UserManager;
import android.provider.Settings;
+import android.speech.hotword.HotwordRecognitionListener;
+import android.speech.hotword.HotwordRecognizer;
+import android.telephony.TelephonyManager;
import android.util.AttributeSet;
import android.util.Log;
import android.util.Slog;
@@ -63,6 +68,11 @@
public class KeyguardHostView extends KeyguardViewBase {
private static final String TAG = "KeyguardHostView";
+ // Don't enable hotword on limited-memory devices.
+ private static final boolean ENABLE_HOTWORD = !ActivityManager.isLowRamDeviceStatic();
+ // Indicates if hotword is enabled, should it also be available on secure keyguard(s).
+ private static final boolean ENABLE_HOTWORD_SECURE = false;
+
// Transport control states.
static final int TRANSPORT_GONE = 0;
static final int TRANSPORT_INVISIBLE = 1;
@@ -77,6 +87,13 @@
// Found in KeyguardAppWidgetPickActivity.java
static final int APPWIDGET_HOST_ID = 0x4B455947;
+ // TODO: Fix this to be non-static.
+ // We need to be careful here to make stopRecognition calls on the same instance
+ // that started it. Since KeyguardHostView is a view, it keeps getting
+ // recreated every now and then, and unless we figure out a better way,
+ // this needs to be a static field.
+ private static HotwordRecognizer sHotwordClient;
+
private final int MAX_WIDGETS = 5;
private AppWidgetHost mAppWidgetHost;
@@ -117,6 +134,8 @@
private KeyguardMultiUserSelectorView mKeyguardMultiUserSelectorView;
+ private boolean mIsScreenOn;
+
protected int mClientGeneration;
protected boolean mShowSecurityWhenReturn;
@@ -198,6 +217,11 @@
if ((mDisabledFeatures & DevicePolicyManager.KEYGUARD_DISABLE_SECURE_CAMERA) != 0) {
Log.v(TAG, "Keyguard secure camera disabled by DPM");
}
+
+ // Create Hotword recognizer, for the first time.
+ if (ENABLE_HOTWORD && sHotwordClient == null) {
+ sHotwordClient = HotwordRecognizer.createHotwordRecognizer(getContext());
+ }
}
private void getInitialTransportState() {
@@ -295,6 +319,21 @@
}
}
}
+ @Override
+ public void onPhoneStateChanged(int phoneState) {
+ // We need to stop hotword detection when a call state is not idle anymore.
+ if (shouldRunHotwordInSecurityMode(mCurrentSecuritySelection)
+ && TelephonyManager.CALL_STATE_IDLE != phoneState) {
+ if (DEBUG) Log.d(TAG, "Stopping due to call state not being idle");
+ maybeStopHotwordDetector();
+ }
+ }
+ @Override
+ public void onUserSwitching(int userId) {
+ if (shouldRunHotwordInSecurityMode(mCurrentSecuritySelection)) {
+ maybeStopHotwordDetector();
+ }
+ }
};
private static final boolean isMusicPlaying(int playbackState) {
@@ -778,6 +817,9 @@
// If the alternate unlock was suppressed, it can now be safely
// enabled because the user has left keyguard.
KeyguardUpdateMonitor.getInstance(mContext).setAlternateUnlockEnabled(true);
+ if (shouldRunHotwordInSecurityMode(mCurrentSecuritySelection)){
+ maybeStopHotwordDetector();
+ }
// If there's a pending runnable because the user interacted with a widget
// and we're leaving keyguard, then run it.
@@ -942,6 +984,9 @@
// Emulate Activity life cycle
if (oldView != null) {
+ if (shouldRunHotwordInSecurityMode(mCurrentSecuritySelection)) {
+ maybeStopHotwordDetector();
+ }
oldView.onPause();
oldView.setKeyguardCallback(mNullCallback); // ignore requests from old view
}
@@ -982,6 +1027,7 @@
@Override
public void onScreenTurnedOn() {
if (DEBUG) Log.d(TAG, "screen on, instance " + Integer.toHexString(hashCode()));
+ mIsScreenOn = true;
showPrimarySecurityScreen(false);
getSecurityView(mCurrentSecuritySelection).onResume(KeyguardSecurityView.SCREEN_ON);
@@ -993,6 +1039,12 @@
if (mViewStateManager != null) {
mViewStateManager.showUsabilityHints();
}
+
+ // Start hotword detection on insecure Keyguard.
+ if (shouldRunHotwordInSecurityMode(mCurrentSecuritySelection)) {
+ maybeStartHotwordDetector();
+ }
+
requestFocus();
}
@@ -1000,6 +1052,7 @@
public void onScreenTurnedOff() {
if (DEBUG) Log.d(TAG, String.format("screen off, instance %s at %s",
Integer.toHexString(hashCode()), SystemClock.uptimeMillis()));
+ mIsScreenOn = false;
// Once the screen turns off, we no longer consider this to be first boot and we want the
// biometric unlock to start next time keyguard is shown.
KeyguardUpdateMonitor.getInstance(mContext).setAlternateUnlockEnabled(true);
@@ -1013,6 +1066,12 @@
if (cameraPage != null) {
cameraPage.onScreenTurnedOff();
}
+
+ // Stop hotword detection on insecure Keyguard.
+ if (shouldRunHotwordInSecurityMode(mCurrentSecuritySelection)) {
+ maybeStopHotwordDetector();
+ }
+
clearFocus();
}
@@ -1097,6 +1156,9 @@
new CameraWidgetFrame.Callbacks() {
@Override
public void onLaunchingCamera() {
+ if (shouldRunHotwordInSecurityMode(mCurrentSecuritySelection)) {
+ maybeStopHotwordDetector();
+ }
setSliderHandleAlpha(0);
}
@@ -1626,6 +1688,9 @@
}
public void showAssistant() {
+ if (shouldRunHotwordInSecurityMode(mCurrentSecuritySelection)) {
+ maybeStopHotwordDetector();
+ }
final Intent intent = ((SearchManager) mContext.getSystemService(Context.SEARCH_SERVICE))
.getAssistIntent(mContext, true, UserHandle.USER_CURRENT);
@@ -1640,4 +1705,130 @@
mActivityLauncher.launchActivityWithAnimation(
intent, false, opts.toBundle(), null, null);
}
+
+
+ /**
+ * Start the hotword detector if:
+ * <li> ENABLE_HOTWORD is true and
+ * <li> Hotword detection is not already running and
+ * <li> TelephonyManager is in CALL_STATE_IDLE
+ * <li> and Screen is turned on.
+ */
+ private void maybeStartHotwordDetector() {
+ if (!ENABLE_HOTWORD) return;
+
+ if (sHotwordClient != null) {
+ if (DEBUG) Log.d(TAG, "maybeStartHotwordDetector()");
+ // Don't start hotword detection if the screen is off.
+ if (!mIsScreenOn) {
+ if (DEBUG) Log.d(TAG, "screen was off, not starting");
+ return;
+ }
+
+ KeyguardUpdateMonitor monitor = KeyguardUpdateMonitor.getInstance(getContext());
+ if (monitor.getPhoneState() != TelephonyManager.CALL_STATE_IDLE) {
+ if (DEBUG) Log.d(TAG, "Call underway, not starting");
+ return;
+ }
+
+ try {
+ sHotwordClient.startRecognition(mHotwordCallback);
+ } catch(Exception ex) {
+ // Don't allow hotword errors to make the keyguard unusable
+ Log.e(TAG, "Failed to start hotword recognition", ex);
+ sHotwordClient = null;
+ }
+ }
+ }
+
+ /**
+ * Stop hotword detector if:
+ * <li> ENABLE_HOTWORD is true
+ * <li> and hotword is running.
+ */
+ private void maybeStopHotwordDetector() {
+ if (!ENABLE_HOTWORD) return;
+
+ if (sHotwordClient != null) {
+ if (DEBUG) Log.d(TAG, "maybeStopHotwordDetector()");
+ try {
+ sHotwordClient.stopRecognition();
+ } catch(Exception ex) {
+ // Don't allow hotword errors to make the keyguard unusable
+ Log.e(TAG, "Failed to start hotword recognition", ex);
+ } finally {
+ sHotwordClient = null;
+ }
+ }
+ }
+
+ private final HotwordRecognitionListener mHotwordCallback = new HotwordRecognitionListener() {
+ private static final String TAG = "HotwordRecognitionListener";
+
+ public void onHotwordRecognitionStarted() {
+ if (DEBUG) Log.d(TAG, "onHotwordRecognitionStarted()");
+ }
+
+ public void onHotwordRecognitionStopped() {
+ if (DEBUG) Log.d(TAG, "onHotwordRecognitionStopped()");
+ }
+
+ public void onHotwordEvent(int eventType, Bundle eventBundle) {
+ if (DEBUG) Log.d(TAG, "onHotwordEvent: " + eventType);
+ if (eventType == HotwordRecognizer.EVENT_TYPE_STATE_CHANGED) {
+ if (eventBundle != null && eventBundle.containsKey(HotwordRecognizer.PROMPT_TEXT)) {
+ new KeyguardMessageArea.Helper(
+ (View) getSecurityView(mCurrentSecuritySelection))
+ .setMessage(eventBundle.getString(HotwordRecognizer.PROMPT_TEXT),true);
+ }
+ }
+ }
+
+ public void onHotwordRecognized(final PendingIntent intent) {
+ if (DEBUG) Log.d(TAG, "onHotwordRecognized");
+ maybeStopHotwordDetector();
+ if (SecurityMode.None == mCurrentSecuritySelection) {
+ if (intent != null) {
+ try {
+ intent.send();
+ } catch (PendingIntent.CanceledException e) {
+ Log.w(TAG, "Failed to launch PendingIntent. Encountered CanceledException");
+ }
+ }
+ mCallback.userActivity(0);
+ mCallback.dismiss(false);
+ } else if (ENABLE_HOTWORD_SECURE && mLockPatternUtils.isSecure()) {
+ setOnDismissAction(new OnDismissAction() {
+ @Override
+ public boolean onDismiss() {
+ if (intent != null) {
+ try {
+ intent.send();
+ } catch (PendingIntent.CanceledException e) {
+ Log.w(TAG, "Failed to launch PendingIntent."
+ + "Encountered CanceledException");
+ }
+ }
+ return false;
+ }
+ });
+ getSecurityView(mCurrentSecuritySelection).showBouncer(0);
+ }
+ }
+
+ public void onHotwordError(int errorCode) {
+ if (DEBUG) Log.d(TAG, "onHotwordError: " + errorCode);
+ // TODO: Inspect the error code and handle the errors appropriately
+ // instead of blindly failing.
+ maybeStopHotwordDetector();
+ }
+ };
+
+ private boolean shouldRunHotwordInSecurityMode(SecurityMode mode) {
+ // Enable hotoword for insecure keyguard,
+ // and for pattern unlock if ENABLE_HOTWORD_SECURE is true.
+ return ENABLE_HOTWORD
+ && ((SecurityMode.None == mode)
+ || (ENABLE_HOTWORD_SECURE && mLockPatternUtils.isSecure()));
+ }
}
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardSelectorView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardSelectorView.java
index 40d55cf..63be102 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardSelectorView.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardSelectorView.java
@@ -28,8 +28,6 @@
import android.os.PowerManager;
import android.os.UserHandle;
import android.provider.Settings;
-import android.speech.hotword.HotwordRecognitionListener;
-import android.speech.hotword.HotwordRecognizer;
import android.telephony.TelephonyManager;
import android.util.AttributeSet;
import android.util.Log;
@@ -48,12 +46,6 @@
private static final String ASSIST_ICON_METADATA_NAME =
"com.android.systemui.action_assist_icon";
- // Don't enable hotword on limited-memory devices.
- private static final boolean ENABLE_HOTWORD = !ActivityManager.isLowRamDeviceStatic();
-
- // TODO: Fix this to be non-static.
- private static HotwordRecognizer sHotwordClient;
-
private KeyguardSecurityCallback mCallback;
private GlowPadView mGlowPadView;
private ObjectAnimator mAnim;
@@ -69,7 +61,6 @@
public void onTrigger(View v, int target) {
final int resId = mGlowPadView.getResourceIdForTarget(target);
- maybeStopHotwordDetector();
switch (resId) {
case R.drawable.ic_action_assist_generic:
@@ -129,22 +120,6 @@
public void onSimStateChanged(State simState) {
updateTargets();
}
-
- @Override
- public void onPhoneStateChanged(int phoneState) {
- if (ENABLE_HOTWORD) {
- // We need to stop hotword detection when a call state is not idle anymore.
- if (phoneState != TelephonyManager.CALL_STATE_IDLE) {
- if (DEBUG) Log.d(TAG, "Stopping due to call state not being idle");
- maybeStopHotwordDetector();
- }
- }
- }
-
- @Override
- public void onUserSwitching(int userId) {
- maybeStopHotwordDetector();
- }
};
private final KeyguardActivityLauncher mActivityLauncher = new KeyguardActivityLauncher() {
@@ -183,9 +158,6 @@
mSecurityMessageDisplay = new KeyguardMessageArea.Helper(this);
View bouncerFrameView = findViewById(R.id.keyguard_selector_view_frame);
mBouncerFrame = bouncerFrameView.getBackground();
- if (ENABLE_HOTWORD && sHotwordClient == null) {
- sHotwordClient = HotwordRecognizer.createHotwordRecognizer(getContext());
- }
}
public void setCarrierArea(View carrierArea) {
@@ -289,20 +261,11 @@
@Override
public void onPause() {
KeyguardUpdateMonitor.getInstance(getContext()).removeCallback(mUpdateCallback);
- maybeStopHotwordDetector();
}
@Override
public void onResume(int reason) {
KeyguardUpdateMonitor.getInstance(getContext()).registerCallback(mUpdateCallback);
- // TODO: Figure out if there's a better way to do it.
- // onResume gets called multiple times, however we are interested in
- // the reason to figure out when to start/stop hotword detection.
- if (reason == SCREEN_ON) {
- if (!KeyguardUpdateMonitor.getInstance(getContext()).isSwitchingUser()) {
- maybeStartHotwordDetector();
- }
- }
}
@Override
@@ -323,100 +286,4 @@
KeyguardSecurityViewHelper.
hideBouncer(mSecurityMessageDisplay, mFadeView, mBouncerFrame, duration);
}
-
- /**
- * Start the hotword detector if:
- * <li> FLAG_HOTWORD is true and
- * <li> Hotword detection is not already running and
- * <li> TelephonyManager is in CALL_STATE_IDLE
- *
- * If this method is called when the screen is off,
- * it attempts to stop hotword detection if it's running.
- */
- private void maybeStartHotwordDetector() {
- if (ENABLE_HOTWORD && sHotwordClient != null) {
- if (DEBUG) Log.d(TAG, "maybeStartHotwordDetector()");
- // Don't start it if the screen is off or not showing
- PowerManager powerManager = (PowerManager) getContext().getSystemService(
- Context.POWER_SERVICE);
- if (!powerManager.isScreenOn()) {
- if (DEBUG) Log.d(TAG, "screen was off, not starting");
- return;
- }
-
- KeyguardUpdateMonitor monitor = KeyguardUpdateMonitor.getInstance(getContext());
- if (monitor.getPhoneState() != TelephonyManager.CALL_STATE_IDLE) {
- if (DEBUG) Log.d(TAG, "Call underway, not starting");
- return;
- }
-
- try {
- sHotwordClient.startRecognition(mHotwordCallback);
- } catch(Exception ex) {
- // Don't allow hotword errors to make the keyguard unusable
- Log.e(TAG, "Failed to start hotword recognition", ex);
- sHotwordClient = null;
- }
- }
- }
-
- /**
- * Stop hotword detector if HOTWORDING_ENABLED is true.
- */
- private void maybeStopHotwordDetector() {
- if (ENABLE_HOTWORD && sHotwordClient != null) {
- if (DEBUG) Log.d(TAG, "maybeStopHotwordDetector()");
- try {
- sHotwordClient.stopRecognition();
- } catch(Exception ex) {
- // Don't allow hotword errors to make the keyguard unusable
- Log.e(TAG, "Failed to start hotword recognition", ex);
- } finally {
- sHotwordClient = null;
- }
- }
- }
-
- private final HotwordRecognitionListener mHotwordCallback = new HotwordRecognitionListener() {
- private static final String TAG = "HotwordRecognitionListener";
-
- public void onHotwordRecognitionStarted() {
- if (DEBUG) Log.d(TAG, "onHotwordRecognitionStarted()");
- }
-
- public void onHotwordRecognitionStopped() {
- if (DEBUG) Log.d(TAG, "onHotwordRecognitionStopped()");
- }
-
- public void onHotwordEvent(int eventType, Bundle eventBundle) {
- if (DEBUG) Log.d(TAG, "onHotwordEvent: " + eventType);
- if (eventType == HotwordRecognizer.EVENT_TYPE_STATE_CHANGED) {
- if (eventBundle != null && eventBundle.containsKey(HotwordRecognizer.PROMPT_TEXT)) {
- mSecurityMessageDisplay.setMessage(
- eventBundle.getString(HotwordRecognizer.PROMPT_TEXT), true);
- }
- }
- }
-
- public void onHotwordRecognized(PendingIntent intent) {
- if (DEBUG) Log.d(TAG, "onHotwordRecognized");
- maybeStopHotwordDetector();
- if (intent != null) {
- try {
- intent.send();
- } catch (PendingIntent.CanceledException e) {
- Log.w(TAG, "Failed to launch PendingIntent. Encountered CanceledException");
- }
- }
- mCallback.userActivity(0);
- mCallback.dismiss(false);
- }
-
- public void onHotwordError(int errorCode) {
- if (DEBUG) Log.d(TAG, "onHotwordError: " + errorCode);
- // TODO: Inspect the error code and handle the errors appropriately
- // instead of blindly failing.
- maybeStopHotwordDetector();
- }
- };
}
diff --git a/packages/PrintSpooler/AndroidManifest.xml b/packages/PrintSpooler/AndroidManifest.xml
index 6fa3ed4..83ec1ad 100644
--- a/packages/PrintSpooler/AndroidManifest.xml
+++ b/packages/PrintSpooler/AndroidManifest.xml
@@ -18,7 +18,6 @@
-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.android.printspooler"
- android:sharedUserId="android.uid.printspooler"
android:versionName="1"
android:versionCode="1">
diff --git a/packages/PrintSpooler/res/layout/print_job_config_activity_content_editing.xml b/packages/PrintSpooler/res/layout/print_job_config_activity_content_editing.xml
index 252dd81..abf3c03 100644
--- a/packages/PrintSpooler/res/layout/print_job_config_activity_content_editing.xml
+++ b/packages/PrintSpooler/res/layout/print_job_config_activity_content_editing.xml
@@ -67,7 +67,6 @@
android:layout_marginEnd="6dip"
android:layout_row="1"
android:layout_column="0"
- android:layout_gravity="start|bottom"
style="@style/PrintOptionTextViewStyle"
android:labelFor="@id/copies_edittext"
android:text="@string/label_copies">
diff --git a/packages/PrintSpooler/res/layout/spinner_dropdown_item.xml b/packages/PrintSpooler/res/layout/spinner_dropdown_item.xml
index d14c064..48189bd 100644
--- a/packages/PrintSpooler/res/layout/spinner_dropdown_item.xml
+++ b/packages/PrintSpooler/res/layout/spinner_dropdown_item.xml
@@ -21,7 +21,7 @@
android:paddingEnd="8dip"
android:minHeight="?android:attr/listPreferredItemHeightSmall"
android:orientation="vertical"
- android:gravity="left|center_vertical">
+ android:gravity="start|center_vertical">
<TextView
android:id="@+id/title"
diff --git a/packages/PrintSpooler/src/com/android/printspooler/FusedPrintersProvider.java b/packages/PrintSpooler/src/com/android/printspooler/FusedPrintersProvider.java
index 88da21f..7d6ca56 100644
--- a/packages/PrintSpooler/src/com/android/printspooler/FusedPrintersProvider.java
+++ b/packages/PrintSpooler/src/com/android/printspooler/FusedPrintersProvider.java
@@ -257,8 +257,96 @@
private boolean mReadHistoryCompleted;
private boolean mReadHistoryInProgress;
- private final AsyncTask<Void, Void, List<PrinterInfo>> mReadTask =
- new AsyncTask<Void, Void, List<PrinterInfo>>() {
+ private ReadTask mReadTask;
+
+ private PersistenceManager(Context context) {
+ mStatePersistFile = new AtomicFile(new File(context.getFilesDir(),
+ PERSIST_FILE_NAME));
+ }
+
+ public boolean isReadHistoryInProgress() {
+ return mReadHistoryInProgress;
+ }
+
+ public boolean isReadHistoryCompleted() {
+ return mReadHistoryCompleted;
+ }
+
+ public boolean stopReadPrinterHistory() {
+ final boolean cancelled = mReadTask.cancel(true);
+ mReadTask = null;
+ return cancelled;
+ }
+
+ public void readPrinterHistory() {
+ if (DEBUG) {
+ Log.i(LOG_TAG, "read history started");
+ }
+ mReadHistoryInProgress = true;
+ mReadTask = new ReadTask();
+ mReadTask.executeOnExecutor(AsyncTask.SERIAL_EXECUTOR, (Void[]) null);
+ }
+
+ @SuppressWarnings("unchecked")
+ public void addPrinterAndWritePrinterHistory(PrinterInfo printer) {
+ if (mHistoricalPrinters.size() >= MAX_HISTORY_LENGTH) {
+ mHistoricalPrinters.remove(0);
+ }
+ mHistoricalPrinters.add(printer);
+ new WriteTask().executeOnExecutor(AsyncTask.SERIAL_EXECUTOR,
+ new ArrayList<PrinterInfo>(mHistoricalPrinters));
+ }
+
+ private List<PrinterInfo> computeFavoritePrinters(List<PrinterInfo> printers) {
+ Map<PrinterId, PrinterRecord> recordMap =
+ new ArrayMap<PrinterId, PrinterRecord>();
+
+ // Recompute the weights.
+ float currentWeight = 1.0f;
+ final int printerCount = printers.size();
+ for (int i = printerCount - 1; i >= 0; i--) {
+ PrinterInfo printer = printers.get(i);
+ // Aggregate weight for the same printer
+ PrinterRecord record = recordMap.get(printer.getId());
+ if (record == null) {
+ record = new PrinterRecord(printer);
+ recordMap.put(printer.getId(), record);
+ }
+ record.weight += currentWeight;
+ currentWeight *= WEIGHT_DECAY_COEFFICIENT;
+ }
+
+ // Soft the favorite printers.
+ List<PrinterRecord> favoriteRecords = new ArrayList<PrinterRecord>(
+ recordMap.values());
+ Collections.sort(favoriteRecords);
+
+ // Write the favorites to the output.
+ final int favoriteCount = favoriteRecords.size();
+ List<PrinterInfo> favoritePrinters = new ArrayList<PrinterInfo>(favoriteCount);
+ for (int i = 0; i < favoriteCount; i++) {
+ PrinterInfo printer = favoriteRecords.get(i).printer;
+ favoritePrinters.add(printer);
+ }
+
+ return favoritePrinters;
+ }
+
+ private final class PrinterRecord implements Comparable<PrinterRecord> {
+ public final PrinterInfo printer;
+ public float weight;
+
+ public PrinterRecord(PrinterInfo printer) {
+ this.printer = printer;
+ }
+
+ @Override
+ public int compareTo(PrinterRecord another) {
+ return Float.floatToIntBits(another.weight) - Float.floatToIntBits(weight);
+ }
+ }
+
+ private final class ReadTask extends AsyncTask<Void, Void, List<PrinterInfo>> {
@Override
protected List<PrinterInfo> doInBackground(Void... args) {
return doReadPrinterHistory();
@@ -284,6 +372,9 @@
// Start loading the available printers.
loadInternal();
+
+ // We are done.
+ mReadTask = null;
}
private List<PrinterInfo> doReadPrinterHistory() {
@@ -411,8 +502,7 @@
}
};
- private final AsyncTask<List<PrinterInfo>, Void, Void> mWriteTask =
- new AsyncTask<List<PrinterInfo>, Void, Void>() {
+ private final class WriteTask extends AsyncTask<List<PrinterInfo>, Void, Void> {
@Override
protected Void doInBackground(List<PrinterInfo>... printers) {
doWritePrinterHistory(printers[0]);
@@ -473,89 +563,5 @@
}
}
};
-
- private PersistenceManager(Context context) {
- mStatePersistFile = new AtomicFile(new File(context.getFilesDir(),
- PERSIST_FILE_NAME));
- }
-
- public boolean isReadHistoryInProgress() {
- return mReadHistoryInProgress;
- }
-
- public boolean isReadHistoryCompleted() {
- return mReadHistoryCompleted;
- }
-
- public boolean stopReadPrinterHistory() {
- return mReadTask.cancel(true);
- }
-
- public void readPrinterHistory() {
- if (DEBUG) {
- Log.i(LOG_TAG, "read history started");
- }
- mReadHistoryInProgress = true;
- mReadTask.executeOnExecutor(AsyncTask.SERIAL_EXECUTOR, (Void[]) null);
- }
-
- @SuppressWarnings("unchecked")
- public void addPrinterAndWritePrinterHistory(PrinterInfo printer) {
- if (mHistoricalPrinters.size() >= MAX_HISTORY_LENGTH) {
- mHistoricalPrinters.remove(0);
- }
- mHistoricalPrinters.add(printer);
- mWriteTask.executeOnExecutor(AsyncTask.SERIAL_EXECUTOR,
- new ArrayList<PrinterInfo>(mHistoricalPrinters));
- }
-
- private List<PrinterInfo> computeFavoritePrinters(List<PrinterInfo> printers) {
- Map<PrinterId, PrinterRecord> recordMap =
- new ArrayMap<PrinterId, PrinterRecord>();
-
- // Recompute the weights.
- float currentWeight = 1.0f;
- final int printerCount = printers.size();
- for (int i = printerCount - 1; i >= 0; i--) {
- PrinterInfo printer = printers.get(i);
- // Aggregate weight for the same printer
- PrinterRecord record = recordMap.get(printer.getId());
- if (record == null) {
- record = new PrinterRecord(printer);
- recordMap.put(printer.getId(), record);
- }
- record.weight += currentWeight;
- currentWeight *= WEIGHT_DECAY_COEFFICIENT;
- }
-
- // Soft the favorite printers.
- List<PrinterRecord> favoriteRecords = new ArrayList<PrinterRecord>(
- recordMap.values());
- Collections.sort(favoriteRecords);
-
- // Write the favorites to the output.
- final int favoriteCount = favoriteRecords.size();
- List<PrinterInfo> favoritePrinters = new ArrayList<PrinterInfo>(favoriteCount);
- for (int i = 0; i < favoriteCount; i++) {
- PrinterInfo printer = favoriteRecords.get(i).printer;
- favoritePrinters.add(printer);
- }
-
- return favoritePrinters;
- }
-
- private final class PrinterRecord implements Comparable<PrinterRecord> {
- public final PrinterInfo printer;
- public float weight;
-
- public PrinterRecord(PrinterInfo printer) {
- this.printer = printer;
- }
-
- @Override
- public int compareTo(PrinterRecord another) {
- return Float.floatToIntBits(another.weight) - Float.floatToIntBits(weight);
- }
- }
}
}
diff --git a/packages/PrintSpooler/src/com/android/printspooler/PrintJobConfigActivity.java b/packages/PrintSpooler/src/com/android/printspooler/PrintJobConfigActivity.java
index 5361a1e..1040edf 100644
--- a/packages/PrintSpooler/src/com/android/printspooler/PrintJobConfigActivity.java
+++ b/packages/PrintSpooler/src/com/android/printspooler/PrintJobConfigActivity.java
@@ -42,7 +42,6 @@
import android.print.IWriteResultCallback;
import android.print.PageRange;
import android.print.PrintAttributes;
-import android.print.PrintAttributes.Margins;
import android.print.PrintAttributes.MediaSize;
import android.print.PrintAttributes.Resolution;
import android.print.PrintDocumentAdapter;
@@ -75,8 +74,6 @@
import android.widget.Spinner;
import android.widget.TextView;
-import libcore.io.IoUtils;
-
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
@@ -92,6 +89,8 @@
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import libcore.io.IoUtils;
+
/**
* Activity for configuring a print job.
*/
@@ -101,8 +100,6 @@
private static final boolean DEBUG = true && Build.IS_DEBUGGABLE;
- private static final boolean LIVE_PREVIEW_SUPPORTED = false;
-
public static final String EXTRA_PRINT_DOCUMENT_ADAPTER = "printDocumentAdapter";
public static final String EXTRA_PRINT_ATTRIBUTES = "printAttributes";
public static final String EXTRA_PRINT_JOB_ID = "printJobId";
@@ -111,6 +108,9 @@
private static final int LOADER_ID_PRINTERS_LOADER = 1;
+ private static final int ORIENTATION_PORTRAIT = 0;
+ private static final int ORIENTATION_LANDSCAPE = 1;
+
private static final int DEST_ADAPTER_MAX_ITEM_COUNT = 9;
private static final int DEST_ADAPTER_ITEM_ID_SAVE_AS_PDF = Integer.MAX_VALUE;
@@ -131,8 +131,7 @@
private static final int EDITOR_STATE_INITIALIZED = 1;
private static final int EDITOR_STATE_CONFIRMED_PRINT = 2;
-// private static final int EDITOR_STATE_CONFIRMED_PREVIEW = 3;
- private static final int EDITOR_STATE_CANCELLED = 4;
+ private static final int EDITOR_STATE_CANCELLED = 3;
private static final int MIN_COPIES = 1;
private static final String MIN_COPIES_STRING = String.valueOf(MIN_COPIES);
@@ -238,8 +237,7 @@
}
public boolean onTouchEvent(MotionEvent event) {
- if (!mEditor.isPrintConfirmed() && !mEditor.isPreviewConfirmed()
- && mEditor.shouldCloseOnTouch(event)) {
+ if (!mEditor.isPrintConfirmed() && mEditor.shouldCloseOnTouch(event)) {
if (!mController.isWorking()) {
PrintJobConfigActivity.this.finish();
}
@@ -343,10 +341,11 @@
if (!mController.hasStarted()) {
mController.start();
}
- if (!printAttributesChanged()) {
- // If the attributes changed, then we do not do a layout but may
- // have to ask the app to write some pages. Hence, pretend layout
- // completed and nothing changed, so we handle writing as usual.
+ if (!printAttributesChanged() && mDocument.info != null) {
+ // If the attributes didn't change and we have done a layout, then
+ // we do not do a layout but may have to ask the app to write some
+ // pages. Hence, pretend layout completed and nothing changed, so
+ // we handle writing as usual.
handleOnLayoutFinished(mDocument.info, false, mRequestCounter.get());
} else {
PrintSpoolerService.peekInstance().setPrintJobAttributesNoPersistence(
@@ -394,9 +393,6 @@
mPrintJobId, info);
}
- // Update the fitting mode based on the document type.
- updateCurrentFittingMode(info);
-
// If the document info or the layout changed, then
// drop the pages since we have to fetch them again.
if (infoChanged || layoutChanged) {
@@ -424,19 +420,7 @@
if (!infoChanged && !layoutChanged
&& PageRangeUtils.contains(mDocument.pages, mRequestedPages)) {
if (mEditor.isDone()) {
- PrintJobConfigActivity.this.finish();
- }
- return;
- }
-
- // If we do not support live preview and the current layout is
- // not for preview purposes, i.e. the user did not poke the
- // preview button, then just skip the write.
- if (!LIVE_PREVIEW_SUPPORTED && !mEditor.isPreviewConfirmed()
- && mMetadata.getBoolean(PrintDocumentAdapter.METADATA_KEY_PRINT_PREVIEW)) {
- mEditor.updateUi();
- if (mEditor.isDone()) {
- PrintJobConfigActivity.this.finish();
+ requestCreatePdfFileOrFinish();
}
return;
}
@@ -526,20 +510,20 @@
}
if (mEditor.isDone()) {
- // Update the print attributes based on whether the application
- // handled some of the print attribute constraints, e.g. rotation.
- updateAndSaveCurrentPrintAttributes(mDocument.info);
+ requestCreatePdfFileOrFinish();
+ }
+ }
- if (mEditor.isPrintingToPdf()) {
- PrintJobInfo printJob = PrintSpoolerService.peekInstance()
- .getPrintJobInfo(mPrintJobId, PrintManager.APP_ID_ANY);
- Intent intent = new Intent(Intent.ACTION_CREATE_DOCUMENT);
- intent.setType("application/pdf");
- intent.putExtra(Intent.EXTRA_TITLE, printJob.getLabel());
- startActivityForResult(intent, ACTIVITY_REQUEST_CREATE_FILE);
- } else {
- PrintJobConfigActivity.this.finish();
- }
+ private void requestCreatePdfFileOrFinish() {
+ if (mEditor.isPrintingToPdf()) {
+ PrintJobInfo printJob = PrintSpoolerService.peekInstance()
+ .getPrintJobInfo(mPrintJobId, PrintManager.APP_ID_ANY);
+ Intent intent = new Intent(Intent.ACTION_CREATE_DOCUMENT);
+ intent.setType("application/pdf");
+ intent.putExtra(Intent.EXTRA_TITLE, printJob.getLabel());
+ startActivityForResult(intent, ACTIVITY_REQUEST_CREATE_FILE);
+ } else {
+ PrintJobConfigActivity.this.finish();
}
}
@@ -552,58 +536,6 @@
PrintJobConfigActivity.this.finish();
}
- private void updateCurrentFittingMode(PrintDocumentInfo document) {
- // Update the fitting mode based on content type.
- switch (document.getContentType()) {
- case PrintDocumentInfo.CONTENT_TYPE_DOCUMENT: {
- mCurrPrintAttributes.setFittingMode(
- PrintAttributes.FITTING_MODE_SCALE_TO_FIT);
- } break;
-
- case PrintDocumentInfo.CONTENT_TYPE_PHOTO: {
- mCurrPrintAttributes.setFittingMode(
- PrintAttributes.FITTING_MODE_SCALE_TO_FILL);
- }
- }
- }
-
- private void updateAndSaveCurrentPrintAttributes(PrintDocumentInfo document) {
- PrintAttributes attributes = mTempPrintAttributes;
- attributes.copyFrom(mCurrPrintAttributes);
-
- // Update the orientation
- if (document.getOrientation() == PrintAttributes.ORIENTATION_LANDSCAPE) {
- if (attributes.getOrientation() == PrintAttributes.ORIENTATION_LANDSCAPE) {
- // If the document is in landscape and we want to print it in
- // landscape, then we do not need to rotate, so portrait.
- attributes.setOrientation(PrintAttributes.ORIENTATION_PORTRAIT);
- } else {
- // If the document is in landscape and we want to print it in
- // portrait, then we have to rotate the content, so landscape.
- attributes.setOrientation(PrintAttributes.ORIENTATION_LANDSCAPE);
- }
- }
-
- // Update margins.
- Margins documentMargins = document.getMargins();
- if (documentMargins.getLeftMils() != 0
- || documentMargins.getTopMils() != 0
- || documentMargins.getRightMils() != 0
- || documentMargins.getBottomMils() != 0) {
- // If the application has applied some of the margins, then
- // the printer should only apply the difference.
- Margins oldMargins = attributes.getMargins();
- attributes.setMargins(new Margins(
- oldMargins.getLeftMils() - documentMargins.getLeftMils(),
- oldMargins.getTopMils() - documentMargins.getTopMils(),
- oldMargins.getRightMils() - documentMargins.getRightMils(),
- oldMargins.getBottomMils() - documentMargins.getBottomMils()));
- }
-
- PrintSpoolerService.peekInstance().setPrintJobAttributesNoPersistence(
- mPrintJobId, attributes);
- }
-
private final class ControllerHandler extends Handler {
public static final int MSG_ON_LAYOUT_FINISHED = 1;
public static final int MSG_ON_LAYOUT_FAILED = 2;
@@ -878,7 +810,16 @@
}
SpinnerItem<Integer> orientationItem =
mOrientationSpinnerAdapter.getItem(position);
- mCurrPrintAttributes.setOrientation(orientationItem.value);
+ MediaSize mediaSize = mCurrPrintAttributes.getMediaSize();
+ if (orientationItem.value == ORIENTATION_PORTRAIT) {
+ if (!mediaSize.isPortrait()) {
+ mCurrPrintAttributes.setMediaSize(mediaSize.asPortrait());
+ }
+ } else {
+ if (mediaSize.isPortrait()) {
+ mCurrPrintAttributes.setMediaSize(mediaSize.asLandscape());
+ }
+ }
if (!hasErrors()) {
mController.update();
}
@@ -1108,6 +1049,12 @@
mOrientationSpinnerAdapter = new ArrayAdapter<SpinnerItem<Integer>>(
PrintJobConfigActivity.this,
R.layout.spinner_dropdown_item, R.id.title);
+ String[] orientationLabels = getResources().getStringArray(
+ R.array.orientation_labels);
+ mOrientationSpinnerAdapter.add(new SpinnerItem<Integer>(
+ ORIENTATION_PORTRAIT, orientationLabels[0]));
+ mOrientationSpinnerAdapter.add(new SpinnerItem<Integer>(
+ ORIENTATION_LANDSCAPE, orientationLabels[1]));
// Range options
mRangeOptionsSpinnerAdapter = new ArrayAdapter<SpinnerItem<Integer>>(
@@ -1142,7 +1089,8 @@
public void addCurrentPrinterToHistory() {
PrinterInfo printer = (PrinterInfo) mDestinationSpinner.getSelectedItem();
- if (printer != null) {
+ PrinterId fakePdfPritnerId = mDestinationSpinnerAdapter.mFakePdfPrinter.getId();
+ if (printer != null && !printer.getId().equals(fakePdfPritnerId)) {
FusedPrintersProvider printersLoader = (FusedPrintersProvider)
(Loader<?>) getLoaderManager().getLoader(
LOADER_ID_PRINTERS_LOADER);
@@ -1365,7 +1313,7 @@
}
public boolean isDone() {
- return isPrintConfirmed() || isPreviewConfirmed() || isCancelled();
+ return isPrintConfirmed() || isCancelled();
}
public boolean isPrintConfirmed() {
@@ -1378,10 +1326,6 @@
showUi(UI_GENERATING_PRINT_JOB, null);
}
- public boolean isPreviewConfirmed() {
- return mEditorState == EDITOR_STATE_CONFIRMED_PRINT;
- }
-
public PageRange[] getRequestedPages() {
if (hasErrors()) {
return null;
@@ -1491,7 +1435,7 @@
if (mCurrentUi != UI_EDITING_PRINT_JOB) {
return false;
}
- if (isPrintConfirmed() || isPreviewConfirmed() || isCancelled()) {
+ if (isPrintConfirmed() || isCancelled()) {
mDestinationSpinner.setEnabled(false);
mCopiesEditText.setEnabled(false);
mMediaSizeSpinner.setEnabled(false);
@@ -1539,9 +1483,9 @@
mColorModeSpinner.setEnabled(false);
// Orientation
- if (mOrientationSpinner.getSelectedItemPosition() != AdapterView.INVALID_POSITION) {
+ if (mOrientationSpinner.getSelectedItemPosition() != 0) {
mIgnoreNextOrientationChange = true;
- mOrientationSpinner.setSelection(AdapterView.INVALID_POSITION);
+ mOrientationSpinner.setSelection(0);
}
mOrientationSpinner.setEnabled(false);
@@ -1604,7 +1548,7 @@
oldMediaSizeNewIndex = i;
}
mMediaSizeSpinnerAdapter.add(new SpinnerItem<MediaSize>(
- mediaSize, mediaSize.getLabel()));
+ mediaSize, mediaSize.getLabel(getPackageManager())));
}
if (mediaSizeCount <= 0) {
@@ -1693,68 +1637,7 @@
}
mColorModeSpinner.setEnabled(true);
- // Orientation.
- final int orientations = capabilities.getOrientations();
-
- // If the orientations changed, we update the adapter and the spinner.
- boolean orientationsChanged = false;
- if (Integer.bitCount(orientations) != mOrientationSpinnerAdapter.getCount()) {
- orientationsChanged = true;
- } else {
- int remainingOrientations = orientations;
- int adapterIndex = 0;
- while (remainingOrientations != 0) {
- final int orientationBitOffset = Integer.numberOfTrailingZeros(
- remainingOrientations);
- final int orientation = 1 << orientationBitOffset;
- remainingOrientations &= ~orientation;
- if (orientation != mOrientationSpinnerAdapter.getItem(
- adapterIndex).value) {
- orientationsChanged = true;
- break;
- }
- adapterIndex++;
- }
- }
- if (orientationsChanged) {
- // Remember the old orientation to try selecting it again.
- int oldOrientationNewIndex = AdapterView.INVALID_POSITION;
- final int oldOrientation = mCurrPrintAttributes.getOrientation();
-
- mOrientationSpinnerAdapter.clear();
- String[] orientationLabels = getResources().getStringArray(
- R.array.orientation_labels);
- int remainingOrientations = orientations;
- while (remainingOrientations != 0) {
- final int orientationBitOffset = Integer.numberOfTrailingZeros(
- remainingOrientations);
- final int orientation = 1 << orientationBitOffset;
- if (orientation == oldOrientation) {
- // Update the index of the old selection.
- oldOrientationNewIndex = orientationBitOffset;
- }
- remainingOrientations &= ~orientation;
- mOrientationSpinnerAdapter.add(new SpinnerItem<Integer>(orientation,
- orientationLabels[orientationBitOffset]));
- }
- final int orientationCount = Integer.bitCount(orientations);
- if (orientationCount <= 0) {
- mOrientationSpinner.setEnabled(false);
- mOrientationSpinner.setSelection(AdapterView.INVALID_POSITION);
- } else {
- mOrientationSpinner.setEnabled(true);
- if (oldOrientationNewIndex != AdapterView.INVALID_POSITION) {
- // Select the old orientation - nothing really changed.
- setOrientationSpinnerSelectionNoCallback(oldOrientationNewIndex);
- } else {
- final int selectedOrientationIndex = Integer.numberOfTrailingZeros(
- (orientations & defaultAttributes.getOrientation()));
- someAttributeSelectionChanged =
- setOrientationSpinnerSelectionNoCallback(
- selectedOrientationIndex);
- }
- }
- }
+ // Orientation
mOrientationSpinner.setEnabled(true);
// Range options
@@ -1858,15 +1741,6 @@
return false;
}
- private boolean setOrientationSpinnerSelectionNoCallback(int position) {
- if (mOrientationSpinner.getSelectedItemPosition() != position) {
- mIgnoreNextOrientationChange = true;
- mOrientationSpinner.setSelection(position);
- return true;
- }
- return false;
- }
-
private void updateUiForNewPrinterCapabilities() {
// The printer changed so we want to start with a clean slate
// for the print options and let them be populated from the
@@ -1879,9 +1753,9 @@
mIgnoreNextColorModeChange = true;
mColorModeSpinnerAdapter.clear();
}
- if (!mOrientationSpinnerAdapter.isEmpty()) {
+ if (mOrientationSpinner.getSelectedItemPosition() != 0) {
mIgnoreNextOrientationChange = true;
- mOrientationSpinnerAdapter.clear();
+ mOrientationSpinner.setSelection(0);
}
if (mRangeOptionsSpinner.getSelectedItemPosition() != 0) {
mIgnoreNextRangeOptionChange = true;
@@ -2102,18 +1976,13 @@
PrinterCapabilitiesInfo capabilities =
new PrinterCapabilitiesInfo.Builder(printerId)
- .addMediaSize(MediaSize.createMediaSize(getPackageManager(),
- MediaSize.ISO_A4), true)
- .addMediaSize(MediaSize.createMediaSize(getPackageManager(),
- MediaSize.NA_LETTER), false)
+ .addMediaSize(MediaSize.ISO_A4, true)
+ .addMediaSize(MediaSize.NA_LETTER, false)
.addResolution(new Resolution("PDF resolution", "PDF resolution",
300, 300), true)
.setColorModes(PrintAttributes.COLOR_MODE_COLOR
| PrintAttributes.COLOR_MODE_MONOCHROME,
PrintAttributes.COLOR_MODE_COLOR)
- .setOrientations(PrintAttributes.ORIENTATION_PORTRAIT
- | PrintAttributes.ORIENTATION_LANDSCAPE,
- PrintAttributes.ORIENTATION_PORTRAIT)
.create();
return new PrinterInfo.Builder(printerId, getString(R.string.save_as_pdf),
diff --git a/packages/PrintSpooler/src/com/android/printspooler/PrintSpoolerService.java b/packages/PrintSpooler/src/com/android/printspooler/PrintSpoolerService.java
index dd2598c..7266af8 100644
--- a/packages/PrintSpooler/src/com/android/printspooler/PrintSpoolerService.java
+++ b/packages/PrintSpooler/src/com/android/printspooler/PrintSpoolerService.java
@@ -36,12 +36,12 @@
import android.print.PrintAttributes.Margins;
import android.print.PrintAttributes.MediaSize;
import android.print.PrintAttributes.Resolution;
-import android.print.PrintAttributes.Tray;
import android.print.PrintDocumentInfo;
import android.print.PrintJobInfo;
import android.print.PrintManager;
import android.print.PrinterId;
import android.print.PrinterInfo;
+import android.text.TextUtils;
import android.util.AtomicFile;
import android.util.Log;
import android.util.Slog;
@@ -51,8 +51,6 @@
import com.android.internal.os.SomeArgs;
import com.android.internal.util.FastXmlSerializer;
-import libcore.io.IoUtils;
-
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlSerializer;
@@ -65,6 +63,8 @@
import java.util.ArrayList;
import java.util.List;
+import libcore.io.IoUtils;
+
/**
* Service for exposing some of the {@link PrintSpooler} functionality to
* another process.
@@ -676,6 +676,8 @@
private static final String ATTR_ID = "id";
private static final String ATTR_LABEL = "label";
+ private static final String ATTR_LABEL_RES_ID = "labelResId";
+ private static final String ATTR_PACKAGE_NAME = "packageName";
private static final String ATTR_STATE = "state";
private static final String ATTR_APP_ID = "appId";
private static final String ATTR_USER_ID = "userId";
@@ -685,13 +687,8 @@
private static final String TAG_MEDIA_SIZE = "mediaSize";
private static final String TAG_RESOLUTION = "resolution";
private static final String TAG_MARGINS = "margins";
- private static final String TAG_INPUT_TRAY = "inputTray";
- private static final String TAG_OUTPUT_TRAY = "outputTray";
- private static final String ATTR_DUPLEX_MODE = "duplexMode";
private static final String ATTR_COLOR_MODE = "colorMode";
- private static final String ATTR_FITTING_MODE = "fittingMode";
- private static final String ATTR_ORIENTATION = "orientation";
private static final String ATTR_LOCAL_ID = "printerName";
private static final String ATTR_SERVICE_NAME = "serviceName";
@@ -806,32 +803,30 @@
if (attributes != null) {
serializer.startTag(null, TAG_ATTRIBUTES);
- final int duplexMode = attributes.getDuplexMode();
- serializer.attribute(null, ATTR_DUPLEX_MODE,
- String.valueOf(duplexMode));
-
final int colorMode = attributes.getColorMode();
serializer.attribute(null, ATTR_COLOR_MODE,
String.valueOf(colorMode));
- final int fittingMode = attributes.getFittingMode();
- serializer.attribute(null, ATTR_FITTING_MODE,
- String.valueOf(fittingMode));
-
- final int orientation = attributes.getOrientation();
- serializer.attribute(null, ATTR_ORIENTATION,
- String.valueOf(orientation));
-
MediaSize mediaSize = attributes.getMediaSize();
if (mediaSize != null) {
serializer.startTag(null, TAG_MEDIA_SIZE);
serializer.attribute(null, ATTR_ID, mediaSize.getId());
- serializer.attribute(null, ATTR_LABEL, mediaSize.getLabel()
- .toString());
serializer.attribute(null, ATTR_WIDTH_MILS, String.valueOf(
mediaSize.getWidthMils()));
serializer.attribute(null, ATTR_HEIGHT_MILS, String.valueOf(
mediaSize.getHeightMils()));
+ // We prefer to store only the package name and
+ // resource id and fallback to the label.
+ if (!TextUtils.isEmpty(mediaSize.mPackageName)
+ && mediaSize.mLabelResId > 0) {
+ serializer.attribute(null, ATTR_PACKAGE_NAME,
+ mediaSize.mPackageName);
+ serializer.attribute(null, ATTR_LABEL_RES_ID,
+ String.valueOf(mediaSize.mLabelResId));
+ } else {
+ serializer.attribute(null, ATTR_LABEL,
+ mediaSize.getLabel(getPackageManager()));
+ }
serializer.endTag(null, TAG_MEDIA_SIZE);
}
@@ -839,12 +834,22 @@
if (resolution != null) {
serializer.startTag(null, TAG_RESOLUTION);
serializer.attribute(null, ATTR_ID, resolution.getId());
- serializer.attribute(null, ATTR_LABEL, resolution.getLabel()
- .toString());
serializer.attribute(null, ATTR_HORIZONTAL_DPI, String.valueOf(
resolution.getHorizontalDpi()));
serializer.attribute(null, ATTR_VERTICAL_DPI, String.valueOf(
resolution.getVerticalDpi()));
+ // We prefer to store only the package name and
+ // resource id and fallback to the label.
+ if (!TextUtils.isEmpty(mediaSize.mPackageName)
+ && resolution.mLabelResId > 0) {
+ serializer.attribute(null, ATTR_PACKAGE_NAME,
+ resolution.mPackageName);
+ serializer.attribute(null, ATTR_LABEL_RES_ID,
+ String.valueOf(resolution.mLabelResId));
+ } else {
+ serializer.attribute(null, ATTR_LABEL,
+ resolution.getLabel(getPackageManager()));
+ }
serializer.endTag(null, TAG_RESOLUTION);
}
@@ -862,24 +867,6 @@
serializer.endTag(null, TAG_MARGINS);
}
- Tray inputTray = attributes.getInputTray();
- if (inputTray != null) {
- serializer.startTag(null, TAG_INPUT_TRAY);
- serializer.attribute(null, ATTR_ID, inputTray.getId());
- serializer.attribute(null, ATTR_LABEL, inputTray.getLabel()
- .toString());
- serializer.endTag(null, TAG_INPUT_TRAY);
- }
-
- Tray outputTray = attributes.getOutputTray();
- if (outputTray != null) {
- serializer.startTag(null, TAG_OUTPUT_TRAY);
- serializer.attribute(null, ATTR_ID, outputTray.getId());
- serializer.attribute(null, ATTR_LABEL, outputTray.getLabel()
- .toString());
- serializer.endTag(null, TAG_OUTPUT_TRAY);
- }
-
serializer.endTag(null, TAG_ATTRIBUTES);
}
@@ -1026,18 +1013,9 @@
PrintAttributes.Builder builder = new PrintAttributes.Builder();
- String duplexMode = parser.getAttributeValue(null, ATTR_DUPLEX_MODE);
- builder.setDuplexMode(Integer.parseInt(duplexMode));
-
String colorMode = parser.getAttributeValue(null, ATTR_COLOR_MODE);
builder.setColorMode(Integer.parseInt(colorMode));
- String fittingMode = parser.getAttributeValue(null, ATTR_FITTING_MODE);
- builder.setFittingMode(Integer.parseInt(fittingMode));
-
- String orientation = parser.getAttributeValue(null, ATTR_ORIENTATION);
- builder.setOrientation(Integer.parseInt(orientation));
-
parser.next();
skipEmptyTextTags(parser);
@@ -1048,7 +1026,12 @@
ATTR_WIDTH_MILS));
final int heightMils = Integer.parseInt(parser.getAttributeValue(null,
ATTR_HEIGHT_MILS));
- MediaSize mediaSize = new MediaSize(id, label, widthMils, heightMils);
+ String packageName = parser.getAttributeValue(null, ATTR_PACKAGE_NAME);
+ final int labelResId = Integer.parseInt(parser.getAttributeValue(null,
+ ATTR_LABEL_RES_ID));
+ label = parser.getAttributeValue(null, ATTR_LABEL);
+ MediaSize mediaSize = new MediaSize(id, label, packageName, labelResId,
+ widthMils, heightMils);
builder.setMediaSize(mediaSize);
parser.next();
skipEmptyTextTags(parser);
@@ -1064,7 +1047,11 @@
ATTR_HORIZONTAL_DPI));
final int verticalDpi = Integer.parseInt(parser.getAttributeValue(null,
ATTR_VERTICAL_DPI));
- Resolution resolution = new Resolution(id, label, horizontalDpi, verticalDpi);
+ String packageName = parser.getAttributeValue(null, ATTR_PACKAGE_NAME);
+ final int labelResId = Integer.parseInt(
+ parser.getAttributeValue(null, ATTR_LABEL_RES_ID));
+ Resolution resolution = new Resolution(id, label, packageName, labelResId,
+ horizontalDpi, verticalDpi);
builder.setResolution(resolution);
parser.next();
skipEmptyTextTags(parser);
@@ -1090,30 +1077,6 @@
parser.next();
}
- skipEmptyTextTags(parser);
- if (accept(parser, XmlPullParser.START_TAG, TAG_INPUT_TRAY)) {
- String id = parser.getAttributeValue(null, ATTR_ID);
- label = parser.getAttributeValue(null, ATTR_LABEL);
- Tray tray = new Tray(id, label);
- builder.setInputTray(tray);
- parser.next();
- skipEmptyTextTags(parser);
- expect(parser, XmlPullParser.END_TAG, TAG_INPUT_TRAY);
- parser.next();
- }
-
- skipEmptyTextTags(parser);
- if (accept(parser, XmlPullParser.START_TAG, TAG_OUTPUT_TRAY)) {
- String id = parser.getAttributeValue(null, ATTR_ID);
- label = parser.getAttributeValue(null, ATTR_LABEL);
- Tray tray = new Tray(id, label);
- builder.setOutputTray(tray);
- parser.next();
- skipEmptyTextTags(parser);
- expect(parser, XmlPullParser.END_TAG, TAG_OUTPUT_TRAY);
- parser.next();
- }
-
printJob.setAttributes(builder.create());
skipEmptyTextTags(parser);
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
index a5dab33..bc02b0d 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
@@ -567,8 +567,7 @@
* Fast path that avoids the use of chatty remoted Cursors.
*/
@Override
- public Bundle callFromPackage(String callingPackage, String method, String request,
- Bundle args) {
+ public Bundle call(String method, String request, Bundle args) {
int callingUser = UserHandle.getCallingUserId();
if (args != null) {
int reqUser = args.getInt(Settings.CALL_METHOD_USER_KEY, callingUser);
@@ -623,7 +622,7 @@
// Also need to take care of app op.
if (getAppOpsManager().noteOp(AppOpsManager.OP_WRITE_SETTINGS, Binder.getCallingUid(),
- callingPackage) != AppOpsManager.MODE_ALLOWED) {
+ getCallingPackage()) != AppOpsManager.MODE_ALLOWED) {
return null;
}
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_in.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_in.png
deleted file mode 100644
index 8b232c0..0000000
--- a/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_in.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_inout.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_inout.png
deleted file mode 100644
index 071f94a..0000000
--- a/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_inout.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_out.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_out.png
deleted file mode 100644
index da419e6..0000000
--- a/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_out.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_wifi_in.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_wifi_in.png
deleted file mode 100644
index 728a3c1..0000000
--- a/packages/SystemUI/res/drawable-hdpi/ic_qs_wifi_in.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_wifi_inout.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_wifi_inout.png
deleted file mode 100644
index 0490ab3..0000000
--- a/packages/SystemUI/res/drawable-hdpi/ic_qs_wifi_inout.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_wifi_out.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_wifi_out.png
deleted file mode 100644
index 9a7c36a..0000000
--- a/packages/SystemUI/res/drawable-hdpi/ic_qs_wifi_out.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_0.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_0.png
index 2bb9fd6..432b166 100644
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_0.png
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_0.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_0_fully.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_0_fully.png
index 594e5e2..aa071c77 100644
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_0_fully.png
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_0_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_1.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_1.png
index 7dce473..194698a 100644
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_1.png
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_1.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_1_fully.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_1_fully.png
index d005e04..0b4b368 100644
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_1_fully.png
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_1_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_2.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_2.png
index 7a7e4b6..8887f2e0 100644
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_2.png
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_2.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_2_fully.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_2_fully.png
index c5b1c78..87c3244 100644
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_2_fully.png
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_2_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_3.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_3.png
index 40b20ae..8206cd8 100644
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_3.png
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_3.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_3_fully.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_3_fully.png
index f0553cd..293f88c 100644
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_3_fully.png
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_3_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_disconnected.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_disconnected.png
index 8712938..cb9c8ac 100644
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_disconnected.png
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_disconnected.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_idle.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_idle.png
index 8442a51..88eafcb 100644
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_idle.png
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_wimax_signal_idle.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_in.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_in.png
deleted file mode 100644
index f3756ab..0000000
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_in.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_inout.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_inout.png
deleted file mode 100644
index 7fbdd59..0000000
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_inout.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_out.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_out.png
deleted file mode 100644
index 7520e2d..0000000
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_out.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_sync_error.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_sync_error.png
deleted file mode 100644
index 70f839f..0000000
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_sync_error.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_in.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_in.png
deleted file mode 100644
index 108972d..0000000
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_in.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_inout.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_inout.png
deleted file mode 100644
index bd40687..0000000
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_inout.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_out.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_out.png
deleted file mode 100644
index 7ecf801..0000000
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_out.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_notify_open_normal.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_notify_open_normal.png
index a2bb4d6..13f6b7f 100644
--- a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_notify_open_normal.png
+++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_notify_open_normal.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_notify_quicksettings_normal.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_notify_quicksettings_normal.png
index a528b94..ecdb240 100644
--- a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_notify_quicksettings_normal.png
+++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_notify_quicksettings_normal.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_in.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_in.png
deleted file mode 100644
index fc06d8a9..0000000
--- a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_in.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_inout.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_inout.png
deleted file mode 100644
index 3b8e49f..0000000
--- a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_inout.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_out.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_out.png
deleted file mode 100644
index acf6e06..0000000
--- a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_out.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_ringer_silent.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_ringer_silent.png
index 6872ec8..f3e9da2 100644
--- a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_ringer_silent.png
+++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_ringer_silent.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_ringer_vibrate.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_ringer_vibrate.png
index 98520d3..a90aef9 100644
--- a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_ringer_vibrate.png
+++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_ringer_vibrate.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_flightmode.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_flightmode.png
index 44d1afb..5171333 100644
--- a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_flightmode.png
+++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_flightmode.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_in.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_in.png
deleted file mode 100644
index 4f97e34..0000000
--- a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_in.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_inout.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_inout.png
deleted file mode 100644
index 2a3bb84..0000000
--- a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_inout.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_out.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_out.png
deleted file mode 100644
index e14818b..0000000
--- a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_out.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_notify_open_normal.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_notify_open_normal.png
index 8f6f7b5..c98911c 100644
--- a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_notify_open_normal.png
+++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_notify_open_normal.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_notify_quicksettings_normal.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_notify_quicksettings_normal.png
index 8d2f5a2..bb99022 100644
--- a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_notify_quicksettings_normal.png
+++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_notify_quicksettings_normal.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_in.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_in.png
deleted file mode 100644
index 5df91d4..0000000
--- a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_in.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_inout.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_inout.png
deleted file mode 100644
index 5838918..0000000
--- a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_inout.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_out.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_out.png
deleted file mode 100644
index 7db6ac6..0000000
--- a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_out.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_ringer_silent.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_ringer_silent.png
index 66b4741..b05bf78 100644
--- a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_ringer_silent.png
+++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_ringer_silent.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_ringer_vibrate.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_ringer_vibrate.png
index f8abf25..2f782cfc 100644
--- a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_ringer_vibrate.png
+++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_ringer_vibrate.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_flightmode.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_flightmode.png
index 9070357..1b45762 100644
--- a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_flightmode.png
+++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_flightmode.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_in.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_in.png
deleted file mode 100644
index e275f6a..0000000
--- a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_in.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_inout.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_inout.png
deleted file mode 100644
index 1ab14f4..0000000
--- a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_inout.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_out.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_out.png
deleted file mode 100644
index c8fccba..0000000
--- a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_out.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_notify_open_normal.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_notify_open_normal.png
index aa87849..d9d8b13 100644
--- a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_notify_open_normal.png
+++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_notify_open_normal.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_notify_quicksettings_normal.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_notify_quicksettings_normal.png
index 634a0115..09e0a3c 100644
--- a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_notify_quicksettings_normal.png
+++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_notify_quicksettings_normal.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_in.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_in.png
deleted file mode 100644
index 20ef55a..0000000
--- a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_in.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_inout.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_inout.png
deleted file mode 100644
index 89bff85..0000000
--- a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_inout.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_out.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_out.png
deleted file mode 100644
index 22b71f2..0000000
--- a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_out.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_ringer_silent.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_ringer_silent.png
index 629b5f8..8299301 100644
--- a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_ringer_silent.png
+++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_ringer_silent.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_ringer_vibrate.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_ringer_vibrate.png
index 8e3e8b4..e171d53 100644
--- a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_ringer_vibrate.png
+++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_ringer_vibrate.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_flightmode.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_flightmode.png
index 9ede64c..fcbfac1 100644
--- a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_flightmode.png
+++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_flightmode.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_in.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_in.png
deleted file mode 100644
index 79a4bf9..0000000
--- a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_in.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_inout.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_inout.png
deleted file mode 100644
index 442a6c0..0000000
--- a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_inout.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_out.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_out.png
deleted file mode 100644
index 8c5cd8f..0000000
--- a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_out.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xxhdpi/ic_notify_open_normal.png b/packages/SystemUI/res/drawable-ldrtl-xxhdpi/ic_notify_open_normal.png
index 60579f9..c0855b5 100644
--- a/packages/SystemUI/res/drawable-ldrtl-xxhdpi/ic_notify_open_normal.png
+++ b/packages/SystemUI/res/drawable-ldrtl-xxhdpi/ic_notify_open_normal.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xxhdpi/ic_notify_quicksettings_normal.png b/packages/SystemUI/res/drawable-ldrtl-xxhdpi/ic_notify_quicksettings_normal.png
index abb9b18..e3fb992 100644
--- a/packages/SystemUI/res/drawable-ldrtl-xxhdpi/ic_notify_quicksettings_normal.png
+++ b/packages/SystemUI/res/drawable-ldrtl-xxhdpi/ic_notify_quicksettings_normal.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xxhdpi/ic_qs_signal_in.png b/packages/SystemUI/res/drawable-ldrtl-xxhdpi/ic_qs_signal_in.png
deleted file mode 100644
index 858c379..0000000
--- a/packages/SystemUI/res/drawable-ldrtl-xxhdpi/ic_qs_signal_in.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xxhdpi/ic_qs_signal_inout.png b/packages/SystemUI/res/drawable-ldrtl-xxhdpi/ic_qs_signal_inout.png
deleted file mode 100644
index 5b63adc..0000000
--- a/packages/SystemUI/res/drawable-ldrtl-xxhdpi/ic_qs_signal_inout.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xxhdpi/ic_qs_signal_out.png b/packages/SystemUI/res/drawable-ldrtl-xxhdpi/ic_qs_signal_out.png
deleted file mode 100644
index 3cb10f3..0000000
--- a/packages/SystemUI/res/drawable-ldrtl-xxhdpi/ic_qs_signal_out.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_signal_in.png b/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_ringer_silent.png
similarity index 66%
copy from packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_signal_in.png
copy to packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_ringer_silent.png
index 1480682..1c847da2 100644
--- a/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_signal_in.png
+++ b/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_ringer_silent.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_signal_in.png b/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_ringer_vibrate.png
similarity index 64%
copy from packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_signal_in.png
copy to packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_ringer_vibrate.png
index 1480682..d0ab910 100644
--- a/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_signal_in.png
+++ b/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_ringer_vibrate.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_signal_in.png b/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_signal_flightmode.png
similarity index 69%
copy from packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_signal_in.png
copy to packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_signal_flightmode.png
index 1480682..4555731 100644
--- a/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_signal_in.png
+++ b/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_signal_flightmode.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_signal_inout.png b/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_signal_inout.png
deleted file mode 100644
index e90b0a7..0000000
--- a/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_signal_inout.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_signal_out.png b/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_signal_out.png
deleted file mode 100644
index bf61435..0000000
--- a/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_signal_out.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_in.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_in.png
deleted file mode 100644
index dd88339..0000000
--- a/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_in.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_inout.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_inout.png
deleted file mode 100644
index 9db534a..0000000
--- a/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_inout.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_out.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_out.png
deleted file mode 100644
index 69469c5..0000000
--- a/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_out.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_wifi_in.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_wifi_in.png
deleted file mode 100644
index af92e4c..0000000
--- a/packages/SystemUI/res/drawable-mdpi/ic_qs_wifi_in.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_wifi_inout.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_wifi_inout.png
deleted file mode 100644
index 2e00eff..0000000
--- a/packages/SystemUI/res/drawable-mdpi/ic_qs_wifi_inout.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_wifi_out.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_wifi_out.png
deleted file mode 100644
index f30a4fa..0000000
--- a/packages/SystemUI/res/drawable-mdpi/ic_qs_wifi_out.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_wimax_signal_0.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_wimax_signal_0.png
index 71862ff..e5a8f95 100644
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_wimax_signal_0.png
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_wimax_signal_0.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_wimax_signal_0_fully.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_wimax_signal_0_fully.png
index a30bea6..c1c2b5c 100644
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_wimax_signal_0_fully.png
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_wimax_signal_0_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_wimax_signal_1.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_wimax_signal_1.png
index 0791dd2..421eee8 100644
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_wimax_signal_1.png
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_wimax_signal_1.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_wimax_signal_1_fully.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_wimax_signal_1_fully.png
index 988a3ab..bfd2494 100644
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_wimax_signal_1_fully.png
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_wimax_signal_1_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_wimax_signal_2.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_wimax_signal_2.png
index 3fab095..b1af6786 100644
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_wimax_signal_2.png
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_wimax_signal_2.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_wimax_signal_2_fully.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_wimax_signal_2_fully.png
index 179bd5c..9ad245b 100644
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_wimax_signal_2_fully.png
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_wimax_signal_2_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_wimax_signal_3.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_wimax_signal_3.png
index 6c5e397..69a1a97 100644
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_wimax_signal_3.png
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_wimax_signal_3.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_wimax_signal_3_fully.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_wimax_signal_3_fully.png
index 5232f82..d865673 100644
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_wimax_signal_3_fully.png
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_wimax_signal_3_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_wimax_signal_disconnected.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_wimax_signal_disconnected.png
index fd7c4b5..6bd3189 100644
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_wimax_signal_disconnected.png
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_wimax_signal_disconnected.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_wimax_signal_idle.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_wimax_signal_idle.png
index 52f89dd..f7f0e93 100644
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_wimax_signal_idle.png
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_wimax_signal_idle.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_roaming_cdma_0.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_roaming_cdma_0.png
index 876d9ee..cb38896 100644
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_roaming_cdma_0.png
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_roaming_cdma_0.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_in.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_in.png
deleted file mode 100644
index e6d1e90..0000000
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_in.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_inout.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_inout.png
deleted file mode 100644
index c1e8095..0000000
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_inout.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_out.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_out.png
deleted file mode 100644
index 9726124..0000000
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_out.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_sync_error.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_sync_error.png
deleted file mode 100644
index 6db607d..0000000
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_sync_error.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_in.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_in.png
deleted file mode 100644
index be00a90..0000000
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_in.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_inout.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_inout.png
deleted file mode 100644
index 0fc02ae..0000000
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_inout.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_out.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_out.png
deleted file mode 100644
index 5c80022..0000000
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_out.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_in.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_in.png
deleted file mode 100644
index 0d35fac..0000000
--- a/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_in.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_inout.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_inout.png
deleted file mode 100644
index d03dad6..0000000
--- a/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_inout.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_out.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_out.png
deleted file mode 100644
index 9abdce8..0000000
--- a/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_out.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_wifi_in.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_wifi_in.png
deleted file mode 100644
index a3bb884..0000000
--- a/packages/SystemUI/res/drawable-xhdpi/ic_qs_wifi_in.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_wifi_inout.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_wifi_inout.png
deleted file mode 100644
index 4cd3c7a..0000000
--- a/packages/SystemUI/res/drawable-xhdpi/ic_qs_wifi_inout.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_wifi_out.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_wifi_out.png
deleted file mode 100644
index ee607c1..0000000
--- a/packages/SystemUI/res/drawable-xhdpi/ic_qs_wifi_out.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_wimax_signal_0.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_wimax_signal_0.png
index ecbe583..f64d582 100644
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_wimax_signal_0.png
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_wimax_signal_0.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_wimax_signal_0_fully.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_wimax_signal_0_fully.png
index ddd955e..31f5b90 100644
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_wimax_signal_0_fully.png
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_wimax_signal_0_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_wimax_signal_1.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_wimax_signal_1.png
index 0d2eafe..881d5e8 100644
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_wimax_signal_1.png
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_wimax_signal_1.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_wimax_signal_1_fully.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_wimax_signal_1_fully.png
index 72bbbd5..2d80c4d 100644
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_wimax_signal_1_fully.png
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_wimax_signal_1_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_wimax_signal_2.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_wimax_signal_2.png
index 285ded6..ad85c83 100644
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_wimax_signal_2.png
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_wimax_signal_2.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_wimax_signal_2_fully.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_wimax_signal_2_fully.png
index 6533b5e..bde43c6 100644
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_wimax_signal_2_fully.png
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_wimax_signal_2_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_wimax_signal_3.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_wimax_signal_3.png
index 5d4b982..914ac49 100644
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_wimax_signal_3.png
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_wimax_signal_3.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_wimax_signal_3_fully.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_wimax_signal_3_fully.png
index 8b3c4a6..c83e9fe 100644
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_wimax_signal_3_fully.png
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_wimax_signal_3_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_wimax_signal_disconnected.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_wimax_signal_disconnected.png
index da99575..48bca90 100644
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_wimax_signal_disconnected.png
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_wimax_signal_disconnected.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_wimax_signal_idle.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_wimax_signal_idle.png
index 0c15847..15514340 100644
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_wimax_signal_idle.png
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_wimax_signal_idle.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_in.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_in.png
deleted file mode 100644
index 429fcbe..0000000
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_in.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_inout.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_inout.png
deleted file mode 100644
index dc5e5b6..0000000
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_inout.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_out.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_out.png
deleted file mode 100644
index cdc2fd9..0000000
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_out.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_sync_error.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_sync_error.png
deleted file mode 100644
index 6276f47..0000000
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_sync_error.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_tty_mode.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_tty_mode.png
index d28972f..8c48af4 100644
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_tty_mode.png
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_tty_mode.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_in.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_in.png
deleted file mode 100644
index 0a30a19..0000000
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_in.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_inout.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_inout.png
deleted file mode 100644
index 4b6f647..0000000
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_inout.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_out.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_out.png
deleted file mode 100644
index 1bd4154..0000000
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_out.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_signal_in.png b/packages/SystemUI/res/drawable-xxhdpi/ic_qs_signal_in.png
deleted file mode 100644
index 4beb41e..0000000
--- a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_signal_in.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_signal_inout.png b/packages/SystemUI/res/drawable-xxhdpi/ic_qs_signal_inout.png
deleted file mode 100644
index df5a9ce..0000000
--- a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_signal_inout.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_signal_out.png b/packages/SystemUI/res/drawable-xxhdpi/ic_qs_signal_out.png
deleted file mode 100644
index a82aead..0000000
--- a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_signal_out.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_wifi_in.png b/packages/SystemUI/res/drawable-xxhdpi/ic_qs_wifi_in.png
deleted file mode 100644
index dee5ae82..0000000
--- a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_wifi_in.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_wifi_inout.png b/packages/SystemUI/res/drawable-xxhdpi/ic_qs_wifi_inout.png
deleted file mode 100644
index 2a364ba..0000000
--- a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_wifi_inout.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_wifi_out.png b/packages/SystemUI/res/drawable-xxhdpi/ic_qs_wifi_out.png
deleted file mode 100644
index b6b2f95..0000000
--- a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_wifi_out.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_data_wimax_signal_0.png b/packages/SystemUI/res/drawable-xxhdpi/stat_sys_data_wimax_signal_0.png
index 77ec7e4..21daf5c 100644
--- a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_data_wimax_signal_0.png
+++ b/packages/SystemUI/res/drawable-xxhdpi/stat_sys_data_wimax_signal_0.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_data_wimax_signal_0_fully.png b/packages/SystemUI/res/drawable-xxhdpi/stat_sys_data_wimax_signal_0_fully.png
index b1d4eb0..3397570 100644
--- a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_data_wimax_signal_0_fully.png
+++ b/packages/SystemUI/res/drawable-xxhdpi/stat_sys_data_wimax_signal_0_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_data_wimax_signal_1.png b/packages/SystemUI/res/drawable-xxhdpi/stat_sys_data_wimax_signal_1.png
index 537725e..87039c5 100644
--- a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_data_wimax_signal_1.png
+++ b/packages/SystemUI/res/drawable-xxhdpi/stat_sys_data_wimax_signal_1.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_data_wimax_signal_1_fully.png b/packages/SystemUI/res/drawable-xxhdpi/stat_sys_data_wimax_signal_1_fully.png
index 041e5d7..a21f3c4 100644
--- a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_data_wimax_signal_1_fully.png
+++ b/packages/SystemUI/res/drawable-xxhdpi/stat_sys_data_wimax_signal_1_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_data_wimax_signal_2.png b/packages/SystemUI/res/drawable-xxhdpi/stat_sys_data_wimax_signal_2.png
index b98f4e50..65b323f 100644
--- a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_data_wimax_signal_2.png
+++ b/packages/SystemUI/res/drawable-xxhdpi/stat_sys_data_wimax_signal_2.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_data_wimax_signal_2_fully.png b/packages/SystemUI/res/drawable-xxhdpi/stat_sys_data_wimax_signal_2_fully.png
index 196c23d..c5c3550 100644
--- a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_data_wimax_signal_2_fully.png
+++ b/packages/SystemUI/res/drawable-xxhdpi/stat_sys_data_wimax_signal_2_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_data_wimax_signal_3.png b/packages/SystemUI/res/drawable-xxhdpi/stat_sys_data_wimax_signal_3.png
index a3d07bb..801cb3c 100644
--- a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_data_wimax_signal_3.png
+++ b/packages/SystemUI/res/drawable-xxhdpi/stat_sys_data_wimax_signal_3.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_data_wimax_signal_3_fully.png b/packages/SystemUI/res/drawable-xxhdpi/stat_sys_data_wimax_signal_3_fully.png
index c93de67..149d227 100644
--- a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_data_wimax_signal_3_fully.png
+++ b/packages/SystemUI/res/drawable-xxhdpi/stat_sys_data_wimax_signal_3_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_data_wimax_signal_disconnected.png b/packages/SystemUI/res/drawable-xxhdpi/stat_sys_data_wimax_signal_disconnected.png
index c487d61..6edb37a 100644
--- a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_data_wimax_signal_disconnected.png
+++ b/packages/SystemUI/res/drawable-xxhdpi/stat_sys_data_wimax_signal_disconnected.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_data_wimax_signal_idle.png b/packages/SystemUI/res/drawable-xxhdpi/stat_sys_data_wimax_signal_idle.png
index 6f96ba3..2b01e9b 100644
--- a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_data_wimax_signal_idle.png
+++ b/packages/SystemUI/res/drawable-xxhdpi/stat_sys_data_wimax_signal_idle.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_signal_in.png b/packages/SystemUI/res/drawable-xxhdpi/stat_sys_signal_in.png
deleted file mode 100644
index ab3a4c8..0000000
--- a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_signal_in.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_signal_inout.png b/packages/SystemUI/res/drawable-xxhdpi/stat_sys_signal_inout.png
deleted file mode 100644
index 1c84c2d..0000000
--- a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_signal_inout.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_signal_out.png b/packages/SystemUI/res/drawable-xxhdpi/stat_sys_signal_out.png
deleted file mode 100644
index 09f21f7..0000000
--- a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_signal_out.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_sync_error.png b/packages/SystemUI/res/drawable-xxhdpi/stat_sys_sync_error.png
deleted file mode 100644
index 2f6a4c0..0000000
--- a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_sync_error.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_tty_mode.png b/packages/SystemUI/res/drawable-xxhdpi/stat_sys_tty_mode.png
new file mode 100644
index 0000000..075208a
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xxhdpi/stat_sys_tty_mode.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_wifi_in.png b/packages/SystemUI/res/drawable-xxhdpi/stat_sys_wifi_in.png
deleted file mode 100644
index 0f5b5ef..0000000
--- a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_wifi_in.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_wifi_inout.png b/packages/SystemUI/res/drawable-xxhdpi/stat_sys_wifi_inout.png
deleted file mode 100644
index 3121176..0000000
--- a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_wifi_inout.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_wifi_out.png b/packages/SystemUI/res/drawable-xxhdpi/stat_sys_wifi_out.png
deleted file mode 100644
index 27863686..0000000
--- a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_wifi_out.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/layout/signal_cluster_view.xml b/packages/SystemUI/res/layout/signal_cluster_view.xml
index 66b06ef..2b9cef91 100644
--- a/packages/SystemUI/res/layout/signal_cluster_view.xml
+++ b/packages/SystemUI/res/layout/signal_cluster_view.xml
@@ -39,12 +39,6 @@
android:layout_centerVertical="true"
android:scaleType="center"
/>
- <ImageView
- android:id="@+id/wifi_inout"
- android:layout_height="wrap_content"
- android:layout_width="wrap_content"
- android:layout_gravity="center|bottom"
- />
</FrameLayout>
<View
android:layout_height="6dp"
@@ -66,12 +60,6 @@
android:layout_centerVertical="true"
android:scaleType="center"
/>
- <ImageView
- android:id="@+id/wimax_inout"
- android:layout_height="wrap_content"
- android:layout_width="wrap_content"
- android:layout_gravity="center|bottom"
- />
</FrameLayout>
-->
<FrameLayout
@@ -98,12 +86,6 @@
android:layout_height="wrap_content"
android:layout_width="wrap_content"
/>
- <ImageView
- android:id="@+id/mobile_inout"
- android:layout_height="wrap_content"
- android:layout_width="wrap_content"
- android:layout_gravity="end|bottom"
- />
</FrameLayout>
</FrameLayout>
<ImageView
diff --git a/packages/SystemUI/src/com/android/systemui/BatteryMeterView.java b/packages/SystemUI/src/com/android/systemui/BatteryMeterView.java
index 1165b8d..6a0f6e3 100755
--- a/packages/SystemUI/src/com/android/systemui/BatteryMeterView.java
+++ b/packages/SystemUI/src/com/android/systemui/BatteryMeterView.java
@@ -29,11 +29,12 @@
import android.graphics.Typeface;
import android.graphics.drawable.Drawable;
import android.os.BatteryManager;
+import android.os.Bundle;
import android.provider.Settings;
import android.util.AttributeSet;
import android.view.View;
-public class BatteryMeterView extends View {
+public class BatteryMeterView extends View implements DemoMode {
public static final String TAG = BatteryMeterView.class.getSimpleName();
public static final String ACTION_LEVEL_TEST = "com.android.systemui.BATTERY_LEVEL_TEST";
@@ -204,7 +205,6 @@
}
private int getColorForLevel(int percent) {
- if (mTracker.plugged) return mChargeColor;
int thresh, color = 0;
for (int i=0; i<mColors.length; i+=2) {
thresh = mColors[i];
@@ -216,7 +216,8 @@
@Override
public void draw(Canvas c) {
- final int level = mTracker.level;
+ BatteryTracker tracker = mDemoMode ? mDemoTracker : mTracker;
+ final int level = tracker.level;
float drawFrac = (float) level / 100f;
final int pt = getPaddingTop();
final int pl = getPaddingLeft();
@@ -245,8 +246,8 @@
c.drawRect(frame, mFramePaint);
// fill 'er up
- final int pct = mTracker.level;
- final int color = getColorForLevel(pct);
+ final int pct = tracker.level;
+ final int color = tracker.plugged ? mChargeColor : getColorForLevel(pct);
mBatteryPaint.setColor(color);
if (level >= FULL) {
@@ -270,16 +271,16 @@
final float x = mWidth * 0.5f;
final float y = (mHeight + mWarningTextHeight) * 0.48f;
c.drawText(mWarningString, x, y, mWarningTextPaint);
- } else if (mTracker.plugged) {
+ } else if (tracker.plugged) {
final Rect r = new Rect(
(int)frame.left + width / 4, (int)frame.top + height / 5,
(int)frame.right - width / 4, (int)frame.bottom - height / 6);
mLightning.setBounds(r);
mLightning.draw(c);
- } else if (mShowPercent && !(mTracker.level == 100 && !SHOW_100_PERCENT)) {
+ } else if (mShowPercent && !(tracker.level == 100 && !SHOW_100_PERCENT)) {
mTextPaint.setTextSize(height *
(SINGLE_DIGIT_PERCENT ? 0.75f
- : (mTracker.level == 100 ? 0.38f : 0.5f)));
+ : (tracker.level == 100 ? 0.38f : 0.5f)));
mTextHeight = -mTextPaint.getFontMetrics().ascent;
final String str = String.valueOf(SINGLE_DIGIT_PERCENT ? (pct/10) : pct);
@@ -302,4 +303,29 @@
// c.drawRect(1, 1, mWidth, mHeight, pt);
}
}
+
+ private boolean mDemoMode;
+ private BatteryTracker mDemoTracker = new BatteryTracker();
+
+ @Override
+ public void dispatchDemoCommand(String command, Bundle args) {
+ if (!mDemoMode && command.equals(COMMAND_ENTER)) {
+ mDemoMode = true;
+ mDemoTracker.level = mTracker.level;
+ mDemoTracker.plugged = mTracker.plugged;
+ } else if (mDemoMode && command.equals(COMMAND_EXIT)) {
+ mDemoMode = false;
+ postInvalidate();
+ } else if (mDemoMode && command.equals(COMMAND_BATTERY)) {
+ String level = args.getString("level");
+ String plugged = args.getString("plugged");
+ if (level != null) {
+ mDemoTracker.level = Math.min(Math.max(Integer.parseInt(level), 0), 100);
+ }
+ if (plugged != null) {
+ mDemoTracker.plugged = Boolean.parseBoolean(plugged);
+ }
+ postInvalidate();
+ }
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/DemoMode.java b/packages/SystemUI/src/com/android/systemui/DemoMode.java
new file mode 100644
index 0000000..8d271e4
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/DemoMode.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2013 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.systemui;
+
+import android.os.Bundle;
+
+public interface DemoMode {
+
+ void dispatchDemoCommand(String command, Bundle args);
+
+ public static final String ACTION_DEMO = "com.android.systemui.demo";
+
+ public static final String COMMAND_ENTER = "enter";
+ public static final String COMMAND_EXIT = "exit";
+ public static final String COMMAND_CLOCK = "clock";
+ public static final String COMMAND_BATTERY = "battery";
+ public static final String COMMAND_NETWORK = "network";
+ public static final String COMMAND_BARS = "bars";
+ public static final String COMMAND_STATUS = "status";
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java
index ff85cb4..54c9f5d 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java
@@ -1097,7 +1097,7 @@
return km.inKeyguardRestrictedInputMode();
}
- public void setInteracting(boolean interacting) {
+ public void setInteracting(int barWindow, boolean interacting) {
// hook for subclasses
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/DelegateViewHelper.java b/packages/SystemUI/src/com/android/systemui/statusbar/DelegateViewHelper.java
index eef4f44..900e1e0 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/DelegateViewHelper.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/DelegateViewHelper.java
@@ -16,6 +16,7 @@
package com.android.systemui.statusbar;
+import android.app.StatusBarManager;
import android.graphics.RectF;
import android.view.MotionEvent;
import android.view.View;
@@ -86,9 +87,9 @@
}
if (action == MotionEvent.ACTION_DOWN) {
- mBar.setInteracting(true);
+ mBar.setInteracting(StatusBarManager.WINDOW_NAVIGATION_BAR, true);
} else if (action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_CANCEL) {
- mBar.setInteracting(false);
+ mBar.setInteracting(StatusBarManager.WINDOW_NAVIGATION_BAR, false);
}
mDelegateView.getLocationOnScreen(mTempPoint);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java b/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java
index ff84243..f1c8e01 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java
@@ -39,15 +39,15 @@
NetworkController mNC;
private boolean mWifiVisible = false;
- private int mWifiStrengthId = 0, mWifiActivityId = 0;
+ private int mWifiStrengthId = 0;
private boolean mMobileVisible = false;
- private int mMobileStrengthId = 0, mMobileActivityId = 0, mMobileTypeId = 0;
+ private int mMobileStrengthId = 0, mMobileTypeId = 0;
private boolean mIsAirplaneMode = false;
private int mAirplaneIconId = 0;
private String mWifiDescription, mMobileDescription, mMobileTypeDescription;
ViewGroup mWifiGroup, mMobileGroup;
- ImageView mWifi, mMobile, mWifiActivity, mMobileActivity, mMobileType, mAirplane;
+ ImageView mWifi, mMobile, mMobileType, mAirplane;
View mSpacer;
public SignalClusterView(Context context) {
@@ -73,10 +73,8 @@
mWifiGroup = (ViewGroup) findViewById(R.id.wifi_combo);
mWifi = (ImageView) findViewById(R.id.wifi_signal);
- mWifiActivity = (ImageView) findViewById(R.id.wifi_inout);
mMobileGroup = (ViewGroup) findViewById(R.id.mobile_combo);
mMobile = (ImageView) findViewById(R.id.mobile_signal);
- mMobileActivity = (ImageView) findViewById(R.id.mobile_inout);
mMobileType = (ImageView) findViewById(R.id.mobile_type);
mSpacer = findViewById(R.id.spacer);
mAirplane = (ImageView) findViewById(R.id.airplane);
@@ -88,10 +86,8 @@
protected void onDetachedFromWindow() {
mWifiGroup = null;
mWifi = null;
- mWifiActivity = null;
mMobileGroup = null;
mMobile = null;
- mMobileActivity = null;
mMobileType = null;
mSpacer = null;
mAirplane = null;
@@ -100,22 +96,19 @@
}
@Override
- public void setWifiIndicators(boolean visible, int strengthIcon, int activityIcon,
- String contentDescription) {
+ public void setWifiIndicators(boolean visible, int strengthIcon, String contentDescription) {
mWifiVisible = visible;
mWifiStrengthId = strengthIcon;
- mWifiActivityId = activityIcon;
mWifiDescription = contentDescription;
apply();
}
@Override
- public void setMobileDataIndicators(boolean visible, int strengthIcon, int activityIcon,
+ public void setMobileDataIndicators(boolean visible, int strengthIcon,
int typeIcon, String contentDescription, String typeContentDescription) {
mMobileVisible = visible;
mMobileStrengthId = strengthIcon;
- mMobileActivityId = activityIcon;
mMobileTypeId = typeIcon;
mMobileDescription = contentDescription;
mMobileTypeDescription = typeContentDescription;
@@ -149,16 +142,11 @@
if (mWifi != null) {
mWifi.setImageDrawable(null);
}
- if (mWifiActivity != null) {
- mWifiActivity.setImageDrawable(null);
- }
if (mMobile != null) {
mMobile.setImageDrawable(null);
}
- if (mMobileActivity != null) {
- mMobileActivity.setImageDrawable(null);
- }
+
if (mMobileType != null) {
mMobileType.setImageDrawable(null);
}
@@ -176,7 +164,6 @@
if (mWifiVisible) {
mWifi.setImageResource(mWifiStrengthId);
- mWifiActivity.setImageResource(mWifiActivityId);
mWifiGroup.setContentDescription(mWifiDescription);
mWifiGroup.setVisibility(View.VISIBLE);
@@ -185,13 +172,12 @@
}
if (DEBUG) Log.d(TAG,
- String.format("wifi: %s sig=%d act=%d",
+ String.format("wifi: %s sig=%d",
(mWifiVisible ? "VISIBLE" : "GONE"),
- mWifiStrengthId, mWifiActivityId));
+ mWifiStrengthId));
if (mMobileVisible && !mIsAirplaneMode) {
mMobile.setImageResource(mMobileStrengthId);
- mMobileActivity.setImageResource(mMobileActivityId);
mMobileType.setImageResource(mMobileTypeId);
mMobileGroup.setContentDescription(mMobileTypeDescription + " " + mMobileDescription);
@@ -214,9 +200,9 @@
}
if (DEBUG) Log.d(TAG,
- String.format("mobile: %s sig=%d act=%d typ=%d",
+ String.format("mobile: %s sig=%d typ=%d",
(mMobileVisible ? "VISIBLE" : "GONE"),
- mMobileStrengthId, mMobileActivityId, mMobileTypeId));
+ mMobileStrengthId, mMobileTypeId));
mMobileType.setVisibility(
!mWifiVisible ? View.VISIBLE : View.GONE);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/DemoStatusIcons.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/DemoStatusIcons.java
new file mode 100644
index 0000000..aba7afa
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/DemoStatusIcons.java
@@ -0,0 +1,151 @@
+/*
+ * Copyright (C) 2013 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.systemui.statusbar.phone;
+
+import android.os.Bundle;
+import android.os.UserHandle;
+import android.view.Gravity;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.LinearLayout;
+
+import com.android.internal.statusbar.StatusBarIcon;
+import com.android.systemui.DemoMode;
+import com.android.systemui.R;
+import com.android.systemui.statusbar.StatusBarIconView;
+import com.android.systemui.statusbar.policy.LocationController;
+
+public class DemoStatusIcons extends LinearLayout implements DemoMode {
+ private final LinearLayout mStatusIcons;
+ private final int mIconSize;
+
+ private boolean mDemoMode;
+
+ public DemoStatusIcons(LinearLayout statusIcons, int iconSize) {
+ super(statusIcons.getContext());
+ mStatusIcons = statusIcons;
+ mIconSize = iconSize;
+
+ setLayoutParams(mStatusIcons.getLayoutParams());
+ setOrientation(mStatusIcons.getOrientation());
+ setGravity(Gravity.CENTER_VERTICAL); // no LL.getGravity()
+ ViewGroup p = (ViewGroup) mStatusIcons.getParent();
+ p.addView(this, p.indexOfChild(mStatusIcons));
+ }
+
+ @Override
+ public void dispatchDemoCommand(String command, Bundle args) {
+ if (!mDemoMode && command.equals(COMMAND_ENTER)) {
+ mDemoMode = true;
+ mStatusIcons.setVisibility(View.GONE);
+ setVisibility(View.VISIBLE);
+ } else if (mDemoMode && command.equals(COMMAND_EXIT)) {
+ mDemoMode = false;
+ mStatusIcons.setVisibility(View.VISIBLE);
+ setVisibility(View.GONE);
+ } else if (mDemoMode && command.equals(COMMAND_STATUS)) {
+ String volume = args.getString("volume");
+ if (volume != null) {
+ int iconId = volume.equals("silent") ? R.drawable.stat_sys_ringer_silent
+ : volume.equals("vibrate") ? R.drawable.stat_sys_ringer_vibrate
+ : 0;
+ updateSlot("volume", null, iconId);
+ }
+ String bt = args.getString("bluetooth");
+ if (bt != null) {
+ int iconId = bt.equals("disconnected") ? R.drawable.stat_sys_data_bluetooth
+ : bt.equals("connected") ? R.drawable.stat_sys_data_bluetooth_connected
+ : 0;
+ updateSlot("bluetooth", null, iconId);
+ }
+ String location = args.getString("location");
+ if (location != null) {
+ int iconId = location.equals("show") ? LocationController.LOCATION_STATUS_ICON_ID
+ : 0;
+ updateSlot(LocationController.LOCATION_STATUS_ICON_PLACEHOLDER, null, iconId);
+ }
+ String alarm = args.getString("alarm");
+ if (alarm != null) {
+ int iconId = alarm.equals("show") ? R.drawable.stat_sys_alarm
+ : 0;
+ updateSlot("alarm_clock", null, iconId);
+ }
+ String sync = args.getString("sync");
+ if (sync != null) {
+ int iconId = sync.equals("show") ? R.drawable.stat_sys_sync
+ : 0;
+ updateSlot("sync_active", null, iconId);
+ }
+ String tty = args.getString("tty");
+ if (tty != null) {
+ int iconId = tty.equals("show") ? R.drawable.stat_sys_tty_mode
+ : 0;
+ updateSlot("tty", null, iconId);
+ }
+ String eri = args.getString("eri");
+ if (eri != null) {
+ int iconId = eri.equals("show") ? R.drawable.stat_sys_roaming_cdma_0
+ : 0;
+ updateSlot("cdma_eri", null, iconId);
+ }
+ String mute = args.getString("mute");
+ if (mute != null) {
+ int iconId = mute.equals("show") ? android.R.drawable.stat_notify_call_mute
+ : 0;
+ updateSlot("mute", null, iconId);
+ }
+ String speakerphone = args.getString("speakerphone");
+ if (speakerphone != null) {
+ int iconId = speakerphone.equals("show") ? android.R.drawable.stat_sys_speakerphone
+ : 0;
+ updateSlot("speakerphone", null, iconId);
+ }
+ }
+ }
+
+ private void updateSlot(String slot, String iconPkg, int iconId) {
+ if (!mDemoMode) return;
+ int removeIndex = -1;
+ for (int i = 0; i < getChildCount(); i++) {
+ StatusBarIconView v = (StatusBarIconView) getChildAt(i);
+ if (slot.equals(v.getTag())) {
+ if (iconId == 0) {
+ removeIndex = i;
+ break;
+ } else {
+ StatusBarIcon icon = v.getStatusBarIcon();
+ icon.iconPackage = iconPkg;
+ icon.iconId = iconId;
+ v.set(icon);
+ v.updateDrawable();
+ return;
+ }
+ }
+ }
+ if (iconId == 0) {
+ if (removeIndex != -1) {
+ removeViewAt(removeIndex);
+ return;
+ }
+ }
+ StatusBarIcon icon = new StatusBarIcon(iconPkg, UserHandle.CURRENT, iconId, 0, 0, "Demo");
+ StatusBarIconView v = new StatusBarIconView(mContext, null);
+ v.setTag(slot);
+ v.set(icon);
+ addView(v, 0, new LinearLayout.LayoutParams(mIconSize, mIconSize));
+ }
+}
\ No newline at end of file
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 bde3795..9db2805 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
@@ -47,6 +47,7 @@
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.inputmethodservice.InputMethodService;
+import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
@@ -79,6 +80,7 @@
import android.widget.TextView;
import com.android.internal.statusbar.StatusBarIcon;
+import com.android.systemui.DemoMode;
import com.android.systemui.EventLogTags;
import com.android.systemui.R;
import com.android.systemui.statusbar.BaseStatusBar;
@@ -102,7 +104,7 @@
import java.io.PrintWriter;
import java.util.ArrayList;
-public class PhoneStatusBar extends BaseStatusBar {
+public class PhoneStatusBar extends BaseStatusBar implements DemoMode {
static final String TAG = "PhoneStatusBar";
public static final boolean DEBUG = BaseStatusBar.DEBUG;
public static final boolean SPEW = false;
@@ -304,7 +306,7 @@
}
};
- private boolean mInteracting;
+ private int mInteractingWindows;
private boolean mAutohideSuspended;
private int mStatusBarMode;
private int mNavigationBarMode;
@@ -363,7 +365,6 @@
mStatusBarView = (PhoneStatusBarView) mStatusBarWindow.findViewById(R.id.status_bar);
mStatusBarView.setBar(this);
-
PanelHolder holder = (PanelHolder) mStatusBarWindow.findViewById(R.id.panel_holder);
mStatusBarView.setPanelHolder(holder);
@@ -605,18 +606,13 @@
}
}
-// final ImageView wimaxRSSI =
-// (ImageView)sb.findViewById(R.id.wimax_signal);
-// if (wimaxRSSI != null) {
-// mNetworkController.addWimaxIconView(wimaxRSSI);
-// }
-
// receive broadcasts
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_CONFIGURATION_CHANGED);
filter.addAction(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
filter.addAction(Intent.ACTION_SCREEN_OFF);
filter.addAction(Intent.ACTION_SCREEN_ON);
+ filter.addAction(ACTION_DEMO);
context.registerReceiver(mBroadcastReceiver, filter);
// listen for USER_SETUP_COMPLETE setting (per-user)
@@ -1382,7 +1378,7 @@
visibilityChanged(true);
- setInteracting(true);
+ setInteracting(StatusBarManager.WINDOW_STATUS_BAR, true);
}
public void animateCollapsePanels() {
@@ -1666,7 +1662,7 @@
mPostCollapseCleanup = null;
}
- setInteracting(false);
+ setInteracting(StatusBarManager.WINDOW_STATUS_BAR, false);
}
/**
@@ -1742,7 +1738,7 @@
}
if (mStatusBarWindowState == WINDOW_STATE_SHOWING) {
- setInteracting(true);
+ setInteracting(StatusBarManager.WINDOW_STATUS_BAR, true);
}
return false;
}
@@ -1874,7 +1870,9 @@
}
private void checkBarModes() {
- checkBarMode(mStatusBarMode, mStatusBarWindowState, mStatusBarView.getBarTransitions());
+ if (mDemoMode) return;
+ checkBarMode((mInteractingWindows & StatusBarManager.WINDOW_STATUS_BAR) != 0 ? MODE_OPAQUE
+ : mStatusBarMode, mStatusBarWindowState, mStatusBarView.getBarTransitions());
if (mNavigationBarView != null) {
checkBarMode(mNavigationBarMode,
mNavigationBarWindowState, mNavigationBarView.getBarTransitions());
@@ -1883,7 +1881,7 @@
private void checkBarMode(int mode, int windowState, BarTransitions transitions) {
final boolean imeVisible = (mNavigationIconHints & NAVIGATION_HINT_BACK_ALT) != 0;
- final int finalMode = imeVisible || mInteracting ? MODE_OPAQUE : mode;
+ final int finalMode = imeVisible ? MODE_OPAQUE : mode;
final boolean animate = windowState == WINDOW_STATE_SHOWING;
transitions.transitionTo(finalMode, animate);
}
@@ -1895,9 +1893,11 @@
}};
@Override
- public void setInteracting(boolean interacting) {
- mInteracting = interacting;
- if (mInteracting) {
+ public void setInteracting(int barWindow, boolean interacting) {
+ mInteractingWindows = interacting
+ ? (mInteractingWindows | barWindow)
+ : (mInteractingWindows & ~barWindow);
+ if (mInteractingWindows != 0) {
suspendAutohide();
} else {
resumeSuspendedAutohide();
@@ -2120,7 +2120,7 @@
+ " scroll " + mScrollView.getScrollX() + "," + mScrollView.getScrollY());
}
- pw.print(" mInteracting="); pw.println(mInteracting);
+ pw.print(" mInteractingWindows="); pw.println(mInteractingWindows);
pw.print(" mStatusBarWindowState=");
pw.println(windowStateToString(mStatusBarWindowState));
pw.print(" mStatusBarMode=");
@@ -2447,6 +2447,19 @@
repositionNavigationBar();
notifyNavigationBarScreenOn(true);
}
+ else if (ACTION_DEMO.equals(action)) {
+ Bundle bundle = intent.getExtras();
+ if (bundle != null) {
+ String command = bundle.getString("command", "").trim().toLowerCase();
+ if (command.length() > 0) {
+ try {
+ dispatchDemoCommand(command, bundle);
+ } catch (Throwable t) {
+ Log.w(TAG, "Error running demo command, intent=" + intent, t);
+ }
+ }
+ }
+ }
}
};
@@ -2676,4 +2689,66 @@
}
mContext.unregisterReceiver(mBroadcastReceiver);
}
+
+ private boolean mDemoModeAllowed;
+ private boolean mDemoMode;
+ private DemoStatusIcons mDemoStatusIcons;
+
+ @Override
+ public void dispatchDemoCommand(String command, Bundle args) {
+ if (!mDemoModeAllowed) {
+ mDemoModeAllowed = Settings.Global.getInt(mContext.getContentResolver(),
+ "sysui_demo_allowed", 0) != 0;
+ }
+ if (!mDemoModeAllowed) return;
+ if (command.equals(COMMAND_ENTER)) {
+ mDemoMode = true;
+ } else if (command.equals(COMMAND_EXIT)) {
+ mDemoMode = false;
+ checkBarModes();
+ } else if (!mDemoMode) {
+ // automatically enter demo mode on first demo command
+ dispatchDemoCommand(COMMAND_ENTER, new Bundle());
+ }
+ boolean modeChange = command.equals(COMMAND_ENTER) || command.equals(COMMAND_EXIT);
+ if (modeChange || command.equals(COMMAND_CLOCK)) {
+ dispatchDemoCommandToView(command, args, R.id.clock);
+ }
+ if (modeChange || command.equals(COMMAND_BATTERY)) {
+ dispatchDemoCommandToView(command, args, R.id.battery);
+ }
+ if (modeChange || command.equals(COMMAND_STATUS)) {
+ if (mDemoStatusIcons == null) {
+ mDemoStatusIcons = new DemoStatusIcons(mStatusIcons, mIconSize);
+ }
+ mDemoStatusIcons.dispatchDemoCommand(command, args);
+ }
+ if (mNetworkController != null && (modeChange || command.equals(COMMAND_NETWORK))) {
+ mNetworkController.dispatchDemoCommand(command, args);
+ }
+ if (command.equals(COMMAND_BARS)) {
+ String mode = args.getString("mode");
+ int barMode = "opaque".equals(mode) ? MODE_OPAQUE :
+ "transparent".equals(mode) ? MODE_TRANSPARENT :
+ "semi-transparent".equals(mode) ? MODE_SEMI_TRANSPARENT :
+ -1;
+ if (barMode != -1) {
+ boolean animate = true;
+ if (mStatusBarView != null) {
+ mStatusBarView.getBarTransitions().transitionTo(barMode, animate);
+ }
+ if (mNavigationBarView != null) {
+ mNavigationBarView.getBarTransitions().transitionTo(barMode, animate);
+ }
+ }
+ }
+ }
+
+ private void dispatchDemoCommandToView(String command, Bundle args, int id) {
+ if (mStatusBarView == null) return;
+ View v = mStatusBarView.findViewById(id);
+ if (v instanceof DemoMode) {
+ ((DemoMode)v).dispatchDemoCommand(command, args);
+ }
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java
index 4ee2a4b..159bc62 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java
@@ -157,9 +157,8 @@
// Sync state
mService.setIcon("sync_active", R.drawable.stat_sys_sync, 0, null);
- mService.setIcon("sync_failing", R.drawable.stat_sys_sync_error, 0, null);
mService.setIconVisibility("sync_active", false);
- mService.setIconVisibility("sync_failing", false);
+ // "sync_failing" is obsolete: b/1297963
// volume
mService.setIcon("volume", R.drawable.stat_sys_ringer_silent, 0, null);
@@ -175,10 +174,7 @@
private final void updateSyncState(Intent intent) {
if (!SHOW_SYNC_ICON) return;
boolean isActive = intent.getBooleanExtra("active", false);
- boolean isFailing = intent.getBooleanExtra("failing", false);
mService.setIconVisibility("sync_active", isActive);
- // Don't display sync failing icon: BUG 1297963 Set sync error timeout to "never"
- //mService.setIconVisibility("sync_failing", isFailing && !isActive);
}
private final void updateSimState(Intent intent) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java
index fa494c2..63e0c7a 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java
@@ -95,6 +95,7 @@
}
private void applyMode(int mode, boolean animate) {
+ if (mLeftSide == null || mRightSide == null) return;
float newAlpha = getAlphaFor(mode);
if (animate) {
ObjectAnimator lhs = animateTransitionTo(mLeftSide, newAlpha);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BluetoothController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BluetoothController.java
index fece57e..0e53f0d 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BluetoothController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BluetoothController.java
@@ -23,10 +23,6 @@
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
-import android.view.View;
-import android.widget.ImageView;
-
-import com.android.systemui.R;
import java.util.ArrayList;
import java.util.HashSet;
@@ -35,11 +31,6 @@
public class BluetoothController extends BroadcastReceiver {
private static final String TAG = "StatusBar.BluetoothController";
- private Context mContext;
- private ArrayList<ImageView> mIconViews = new ArrayList<ImageView>();
-
- private int mIconId = R.drawable.stat_sys_data_bluetooth;
- private int mContentDescriptionId = 0;
private boolean mEnabled = false;
private Set<BluetoothDevice> mBondedDevices = new HashSet<BluetoothDevice>();
@@ -48,7 +39,6 @@
new ArrayList<BluetoothStateChangeCallback>();
public BluetoothController(Context context) {
- mContext = context;
IntentFilter filter = new IntentFilter();
filter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);
@@ -59,16 +49,11 @@
final BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
if (adapter != null) {
handleAdapterStateChange(adapter.getState());
- handleConnectionStateChange(adapter.getConnectionState());
}
- refreshViews();
+ fireCallbacks();
updateBondedBluetoothDevices();
}
- public void addIconView(ImageView v) {
- mIconViews.add(v);
- }
-
public void addStateChangedCallback(BluetoothStateChangeCallback cb) {
mChangeCallbacks.add(cb);
}
@@ -84,14 +69,8 @@
if (action.equals(BluetoothAdapter.ACTION_STATE_CHANGED)) {
handleAdapterStateChange(
intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, BluetoothAdapter.ERROR));
- } else if (action.equals(BluetoothAdapter.ACTION_CONNECTION_STATE_CHANGED)) {
- handleConnectionStateChange(
- intent.getIntExtra(BluetoothAdapter.EXTRA_CONNECTION_STATE,
- BluetoothAdapter.STATE_DISCONNECTED));
- } else if (action.equals(BluetoothDevice.ACTION_BOND_STATE_CHANGED)) {
- // Fall through and update bonded devices and refresh view
}
- refreshViews();
+ fireCallbacks();
updateBondedBluetoothDevices();
}
@@ -111,31 +90,11 @@
}
}
- public void handleAdapterStateChange(int adapterState) {
+ private void handleAdapterStateChange(int adapterState) {
mEnabled = (adapterState == BluetoothAdapter.STATE_ON);
}
- public void handleConnectionStateChange(int connectionState) {
- final boolean connected = (connectionState == BluetoothAdapter.STATE_CONNECTED);
- if (connected) {
- mIconId = R.drawable.stat_sys_data_bluetooth_connected;
- mContentDescriptionId = R.string.accessibility_bluetooth_connected;
- } else {
- mIconId = R.drawable.stat_sys_data_bluetooth;
- mContentDescriptionId = R.string.accessibility_bluetooth_disconnected;
- }
- }
-
- public void refreshViews() {
- int N = mIconViews.size();
- for (int i=0; i<N; i++) {
- ImageView v = mIconViews.get(i);
- v.setImageResource(mIconId);
- v.setVisibility(mEnabled ? View.VISIBLE : View.GONE);
- v.setContentDescription((mContentDescriptionId == 0)
- ? null
- : mContext.getString(mContentDescriptionId));
- }
+ private void fireCallbacks() {
for (BluetoothStateChangeCallback cb : mChangeCallbacks) {
cb.onBluetoothStateChange(mEnabled);
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/Clock.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/Clock.java
index 93fb14f..8ced1c9 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/Clock.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/Clock.java
@@ -20,6 +20,7 @@
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
+import android.os.Bundle;
import android.text.Spannable;
import android.text.SpannableStringBuilder;
import android.text.format.DateFormat;
@@ -28,6 +29,8 @@
import android.util.AttributeSet;
import android.widget.TextView;
+import com.android.systemui.DemoMode;
+
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Locale;
@@ -38,7 +41,7 @@
/**
* Digital clock for the status bar.
*/
-public class Clock extends TextView {
+public class Clock extends TextView implements DemoMode {
private boolean mAttached;
private Calendar mCalendar;
private String mClockFormatString;
@@ -121,6 +124,7 @@
};
final void updateClock() {
+ if (mDemoMode) return;
mCalendar.setTimeInMillis(System.currentTimeMillis());
setText(getSmallTime());
}
@@ -196,5 +200,29 @@
return result;
}
+
+ private boolean mDemoMode;
+
+ @Override
+ public void dispatchDemoCommand(String command, Bundle args) {
+ if (!mDemoMode && command.equals(COMMAND_ENTER)) {
+ mDemoMode = true;
+ } else if (mDemoMode && command.equals(COMMAND_EXIT)) {
+ mDemoMode = false;
+ updateClock();
+ } else if (mDemoMode && command.equals(COMMAND_CLOCK)) {
+ String millis = args.getString("millis");
+ String hhmm = args.getString("hhmm");
+ if (millis != null) {
+ mCalendar.setTimeInMillis(Long.parseLong(millis));
+ } else if (hhmm != null && hhmm.length() == 4) {
+ int hh = Integer.parseInt(hhmm.substring(0, 2));
+ int mm = Integer.parseInt(hhmm.substring(2));
+ mCalendar.set(Calendar.HOUR, hh);
+ mCalendar.set(Calendar.MINUTE, mm);
+ }
+ setText(getSmallTime());
+ }
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/LocationController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/LocationController.java
index 3070a3a..312bba3 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/LocationController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/LocationController.java
@@ -42,8 +42,8 @@
public class LocationController extends BroadcastReceiver {
// The name of the placeholder corresponding to the location request status icon.
// This string corresponds to config_statusBarIcons in core/res/res/values/config.xml.
- private static final String LOCATION_STATUS_ICON_PLACEHOLDER = "location";
- private static final int LOCATION_STATUS_ICON_ID
+ public static final String LOCATION_STATUS_ICON_PLACEHOLDER = "location";
+ public static final int LOCATION_STATUS_ICON_ID
= R.drawable.stat_sys_device_access_location_found;
private static final int[] mHighPowerRequestAppOpArray
@@ -129,6 +129,8 @@
// setting won't be fully enabled until the user accepts the agreement.
int mode = enabled
? Settings.Secure.LOCATION_MODE_HIGH_ACCURACY : Settings.Secure.LOCATION_MODE_OFF;
+ // QuickSettings always runs as the owner, so specifically set the settings
+ // for the current foreground user.
return Settings.Secure
.putIntForUser(cr, Settings.Secure.LOCATION_MODE, mode, currentUserId);
}
@@ -137,14 +139,11 @@
* Returns true if location isn't disabled in settings.
*/
public boolean isLocationEnabled() {
- int currentUserId = ActivityManager.getCurrentUser();
- if (isUserLocationRestricted(currentUserId)) {
- return false;
- }
-
ContentResolver resolver = mContext.getContentResolver();
+ // QuickSettings always runs as the owner, so specifically retrieve the settings
+ // for the current foreground user.
int mode = Settings.Secure.getIntForUser(resolver, Settings.Secure.LOCATION_MODE,
- Settings.Secure.LOCATION_MODE_OFF, currentUserId);
+ Settings.Secure.LOCATION_MODE_OFF, ActivityManager.getCurrentUser());
return mode != Settings.Secure.LOCATION_MODE_OFF;
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java
index 34e3013..1e7e692 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java
@@ -27,6 +27,7 @@
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.net.wimax.WimaxManagerConstants;
+import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.Messenger;
@@ -37,13 +38,13 @@
import android.telephony.TelephonyManager;
import android.util.Log;
import android.view.View;
-import android.widget.ImageView;
import android.widget.TextView;
import com.android.internal.telephony.IccCardConstants;
import com.android.internal.telephony.TelephonyIntents;
import com.android.internal.telephony.cdma.EriInfo;
import com.android.internal.util.AsyncChannel;
+import com.android.systemui.DemoMode;
import com.android.systemui.R;
import java.io.FileDescriptor;
@@ -52,12 +53,14 @@
import java.util.List;
import java.util.Locale;
-public class NetworkController extends BroadcastReceiver {
+public class NetworkController extends BroadcastReceiver implements DemoMode {
// debug
static final String TAG = "StatusBar.NetworkController";
static final boolean DEBUG = false;
static final boolean CHATTY = false; // additional diagnostics, but not logspew
+ private static final int FLIGHT_MODE_ICON = R.drawable.stat_sys_signal_flightmode;
+
// telephony
boolean mHspaDataDistinguishable;
final TelephonyManager mPhone;
@@ -81,7 +84,6 @@
int mQSDataTypeIconId;
int mAirplaneIconId;
boolean mDataActive;
- int mMobileActivityIconId; // overlay arrows for data direction
int mLastSignalLevel;
boolean mShowPhoneRSSIForData = false;
boolean mShowAtLeastThreeGees = false;
@@ -101,7 +103,6 @@
String mWifiSsid;
int mWifiIconId = 0;
int mQSWifiIconId = 0;
- int mWifiActivityIconId = 0; // overlay arrows for wifi direction
int mWifiActivity = WifiManager.DATA_ACTIVITY_NONE;
// bluetooth
@@ -135,13 +136,6 @@
// our ui
Context mContext;
- ArrayList<ImageView> mPhoneSignalIconViews = new ArrayList<ImageView>();
- ArrayList<ImageView> mDataDirectionIconViews = new ArrayList<ImageView>();
- ArrayList<ImageView> mDataDirectionOverlayIconViews = new ArrayList<ImageView>();
- ArrayList<ImageView> mWifiIconViews = new ArrayList<ImageView>();
- ArrayList<ImageView> mWimaxIconViews = new ArrayList<ImageView>();
- ArrayList<ImageView> mCombinedSignalIconViews = new ArrayList<ImageView>();
- ArrayList<ImageView> mDataTypeIconViews = new ArrayList<ImageView>();
ArrayList<TextView> mCombinedLabelViews = new ArrayList<TextView>();
ArrayList<TextView> mMobileLabelViews = new ArrayList<TextView>();
ArrayList<TextView> mWifiLabelViews = new ArrayList<TextView>();
@@ -151,7 +145,6 @@
new ArrayList<NetworkSignalChangedCallback>();
int mLastPhoneSignalIconId = -1;
int mLastDataDirectionIconId = -1;
- int mLastDataDirectionOverlayIconId = -1;
int mLastWifiIconId = -1;
int mLastWimaxIconId = -1;
int mLastCombinedSignalIconId = -1;
@@ -163,9 +156,9 @@
boolean mDataAndWifiStacked = false;
public interface SignalCluster {
- void setWifiIndicators(boolean visible, int strengthIcon, int activityIcon,
+ void setWifiIndicators(boolean visible, int strengthIcon,
String contentDescription);
- void setMobileDataIndicators(boolean visible, int strengthIcon, int activityIcon,
+ void setMobileDataIndicators(boolean visible, int strengthIcon,
int typeIcon, String contentDescription, String typeContentDescription);
void setIsAirplaneMode(boolean is, int airplaneIcon);
}
@@ -261,33 +254,6 @@
return (mServiceState != null && mServiceState.isEmergencyOnly());
}
- public void addPhoneSignalIconView(ImageView v) {
- mPhoneSignalIconViews.add(v);
- }
-
- public void addDataDirectionIconView(ImageView v) {
- mDataDirectionIconViews.add(v);
- }
-
- public void addDataDirectionOverlayIconView(ImageView v) {
- mDataDirectionOverlayIconViews.add(v);
- }
-
- public void addWifiIconView(ImageView v) {
- mWifiIconViews.add(v);
- }
- public void addWimaxIconView(ImageView v) {
- mWimaxIconViews.add(v);
- }
-
- public void addCombinedSignalIconView(ImageView v) {
- mCombinedSignalIconViews.add(v);
- }
-
- public void addDataTypeIconView(ImageView v) {
- mDataTypeIconViews.add(v);
- }
-
public void addCombinedLabelView(TextView v) {
mCombinedLabelViews.add(v);
}
@@ -315,11 +281,11 @@
}
public void refreshSignalCluster(SignalCluster cluster) {
+ if (mDemoMode) return;
cluster.setWifiIndicators(
// only show wifi in the cluster if connected or if wifi-only
mWifiEnabled && (mWifiConnected || !mHasMobileDataFeature),
mWifiIconId,
- mWifiActivityIconId,
mContentDescriptionWifi);
if (mIsWimaxEnabled && mWimaxConnected) {
@@ -327,7 +293,6 @@
cluster.setMobileDataIndicators(
true,
mAlwaysShowCdmaRssi ? mPhoneSignalIconId : mWimaxIconId,
- mMobileActivityIconId,
mDataTypeIconId,
mContentDescriptionWimax,
mContentDescriptionDataType);
@@ -336,7 +301,6 @@
cluster.setMobileDataIndicators(
mHasMobileDataFeature,
mShowPhoneRSSIForData ? mPhoneSignalIconId : mDataSignalIconId,
- mMobileActivityIconId,
mDataTypeIconId,
mContentDescriptionPhoneSignal,
mContentDescriptionDataType);
@@ -1008,7 +972,6 @@
Context context = mContext;
int combinedSignalIconId = 0;
- int combinedActivityIconId = 0;
String combinedLabel = "";
String wifiLabel = "";
String mobileLabel = "";
@@ -1046,56 +1009,23 @@
// Now for things that should only be shown when actually using mobile data.
if (mDataConnected) {
combinedSignalIconId = mDataSignalIconId;
- switch (mDataActivity) {
- case TelephonyManager.DATA_ACTIVITY_IN:
- mMobileActivityIconId = R.drawable.stat_sys_signal_in;
- break;
- case TelephonyManager.DATA_ACTIVITY_OUT:
- mMobileActivityIconId = R.drawable.stat_sys_signal_out;
- break;
- case TelephonyManager.DATA_ACTIVITY_INOUT:
- mMobileActivityIconId = R.drawable.stat_sys_signal_inout;
- break;
- default:
- mMobileActivityIconId = 0;
- break;
- }
combinedLabel = mobileLabel;
- combinedActivityIconId = mMobileActivityIconId;
combinedSignalIconId = mDataSignalIconId; // set by updateDataIcon()
mContentDescriptionCombinedSignal = mContentDescriptionDataType;
- } else {
- mMobileActivityIconId = 0;
}
}
if (mWifiConnected) {
if (mWifiSsid == null) {
wifiLabel = context.getString(R.string.status_bar_settings_signal_meter_wifi_nossid);
- mWifiActivityIconId = 0; // no wifis, no bits
} else {
wifiLabel = mWifiSsid;
if (DEBUG) {
wifiLabel += "xxxxXXXXxxxxXXXX";
}
- switch (mWifiActivity) {
- case WifiManager.DATA_ACTIVITY_IN:
- mWifiActivityIconId = R.drawable.stat_sys_wifi_in;
- break;
- case WifiManager.DATA_ACTIVITY_OUT:
- mWifiActivityIconId = R.drawable.stat_sys_wifi_out;
- break;
- case WifiManager.DATA_ACTIVITY_INOUT:
- mWifiActivityIconId = R.drawable.stat_sys_wifi_inout;
- break;
- case WifiManager.DATA_ACTIVITY_NONE:
- mWifiActivityIconId = 0;
- break;
- }
}
- combinedActivityIconId = mWifiActivityIconId;
combinedLabel = wifiLabel;
combinedSignalIconId = mWifiIconId; // set by updateWifiIcons()
mContentDescriptionCombinedSignal = mContentDescriptionWifi;
@@ -1126,7 +1056,7 @@
// look again; your radios are now airplanes
mContentDescriptionPhoneSignal = mContext.getString(
R.string.accessibility_airplane_mode);
- mAirplaneIconId = R.drawable.stat_sys_signal_flightmode;
+ mAirplaneIconId = FLIGHT_MODE_ICON;
mPhoneSignalIconId = mDataSignalIconId = mDataTypeIconId = mQSDataTypeIconId = 0;
mQSPhoneSignalIconId = 0;
@@ -1178,7 +1108,6 @@
+ " combinedSignalIconId=0x"
+ Integer.toHexString(combinedSignalIconId)
+ "/" + getResourceName(combinedSignalIconId)
- + " combinedActivityIconId=0x" + Integer.toHexString(combinedActivityIconId)
+ " mobileLabel=" + mobileLabel
+ " wifiLabel=" + wifiLabel
+ " emergencyOnly=" + emergencyOnly
@@ -1197,7 +1126,6 @@
}
if (mLastPhoneSignalIconId != mPhoneSignalIconId
- || mLastDataDirectionOverlayIconId != combinedActivityIconId
|| mLastWifiIconId != mWifiIconId
|| mLastWimaxIconId != mWimaxIconId
|| mLastDataTypeIconId != mDataTypeIconId
@@ -1224,105 +1152,30 @@
// the phone icon on phones
if (mLastPhoneSignalIconId != mPhoneSignalIconId) {
mLastPhoneSignalIconId = mPhoneSignalIconId;
- N = mPhoneSignalIconViews.size();
- for (int i=0; i<N; i++) {
- final ImageView v = mPhoneSignalIconViews.get(i);
- if (mPhoneSignalIconId == 0) {
- v.setVisibility(View.GONE);
- } else {
- v.setVisibility(View.VISIBLE);
- v.setImageResource(mPhoneSignalIconId);
- v.setContentDescription(mContentDescriptionPhoneSignal);
- }
- }
}
// the data icon on phones
if (mLastDataDirectionIconId != mDataDirectionIconId) {
mLastDataDirectionIconId = mDataDirectionIconId;
- N = mDataDirectionIconViews.size();
- for (int i=0; i<N; i++) {
- final ImageView v = mDataDirectionIconViews.get(i);
- v.setImageResource(mDataDirectionIconId);
- v.setContentDescription(mContentDescriptionDataType);
- }
}
// the wifi icon on phones
if (mLastWifiIconId != mWifiIconId) {
mLastWifiIconId = mWifiIconId;
- N = mWifiIconViews.size();
- for (int i=0; i<N; i++) {
- final ImageView v = mWifiIconViews.get(i);
- if (mWifiIconId == 0) {
- v.setVisibility(View.GONE);
- } else {
- v.setVisibility(View.VISIBLE);
- v.setImageResource(mWifiIconId);
- v.setContentDescription(mContentDescriptionWifi);
- }
- }
}
// the wimax icon on phones
if (mLastWimaxIconId != mWimaxIconId) {
mLastWimaxIconId = mWimaxIconId;
- N = mWimaxIconViews.size();
- for (int i=0; i<N; i++) {
- final ImageView v = mWimaxIconViews.get(i);
- if (mWimaxIconId == 0) {
- v.setVisibility(View.GONE);
- } else {
- v.setVisibility(View.VISIBLE);
- v.setImageResource(mWimaxIconId);
- v.setContentDescription(mContentDescriptionWimax);
- }
- }
}
// the combined data signal icon
if (mLastCombinedSignalIconId != combinedSignalIconId) {
mLastCombinedSignalIconId = combinedSignalIconId;
- N = mCombinedSignalIconViews.size();
- for (int i=0; i<N; i++) {
- final ImageView v = mCombinedSignalIconViews.get(i);
- v.setImageResource(combinedSignalIconId);
- v.setContentDescription(mContentDescriptionCombinedSignal);
- }
}
// the data network type overlay
if (mLastDataTypeIconId != mDataTypeIconId) {
mLastDataTypeIconId = mDataTypeIconId;
- N = mDataTypeIconViews.size();
- for (int i=0; i<N; i++) {
- final ImageView v = mDataTypeIconViews.get(i);
- if (mDataTypeIconId == 0) {
- v.setVisibility(View.GONE);
- } else {
- v.setVisibility(View.VISIBLE);
- v.setImageResource(mDataTypeIconId);
- v.setContentDescription(mContentDescriptionDataType);
- }
- }
- }
-
- // the data direction overlay
- if (mLastDataDirectionOverlayIconId != combinedActivityIconId) {
- if (DEBUG) {
- Log.d(TAG, "changing data overlay icon id to " + combinedActivityIconId);
- }
- mLastDataDirectionOverlayIconId = combinedActivityIconId;
- N = mDataDirectionOverlayIconViews.size();
- for (int i=0; i<N; i++) {
- final ImageView v = mDataDirectionOverlayIconViews.get(i);
- if (combinedActivityIconId == 0) {
- v.setVisibility(View.GONE);
- } else {
- v.setVisibility(View.VISIBLE);
- v.setImageResource(combinedActivityIconId);
- v.setContentDescription(mContentDescriptionDataType);
- }
- }
}
// the combinedLabel in the notification panel
@@ -1481,10 +1334,6 @@
pw.print(Integer.toHexString(mLastDataDirectionIconId));
pw.print("/");
pw.println(getResourceName(mLastDataDirectionIconId));
- pw.print(" mLastDataDirectionOverlayIconId=0x");
- pw.print(Integer.toHexString(mLastDataDirectionOverlayIconId));
- pw.print("/");
- pw.println(getResourceName(mLastDataDirectionOverlayIconId));
pw.print(" mLastWifiIconId=0x");
pw.print(Integer.toHexString(mLastWifiIconId));
pw.print("/");
@@ -1515,4 +1364,87 @@
}
}
+ private boolean mDemoMode;
+ private int mDemoInetCondition;
+ private int mDemoWifiLevel;
+ private int mDemoDataTypeIconId;
+ private int mDemoMobileLevel;
+
+ @Override
+ public void dispatchDemoCommand(String command, Bundle args) {
+ if (!mDemoMode && command.equals(COMMAND_ENTER)) {
+ mDemoMode = true;
+ mDemoWifiLevel = mWifiLevel;
+ mDemoInetCondition = mInetCondition;
+ mDemoDataTypeIconId = mDataTypeIconId;
+ mDemoMobileLevel = mLastSignalLevel;
+ } else if (mDemoMode && command.equals(COMMAND_EXIT)) {
+ mDemoMode = false;
+ for (SignalCluster cluster : mSignalClusters) {
+ refreshSignalCluster(cluster);
+ }
+ } else if (mDemoMode && command.equals(COMMAND_NETWORK)) {
+ String airplane = args.getString("airplane");
+ if (airplane != null) {
+ boolean show = airplane.equals("show");
+ for (SignalCluster cluster : mSignalClusters) {
+ cluster.setIsAirplaneMode(show, FLIGHT_MODE_ICON);
+ }
+ }
+ String fully = args.getString("fully");
+ if (fully != null) {
+ mDemoInetCondition = Boolean.parseBoolean(fully) ? 1 : 0;
+ }
+ String wifi = args.getString("wifi");
+ if (wifi != null) {
+ boolean show = wifi.equals("show");
+ String level = args.getString("level");
+ if (level != null) {
+ mDemoWifiLevel = level.equals("null") ? -1
+ : Math.min(Integer.parseInt(level), WifiIcons.WIFI_LEVEL_COUNT - 1);
+ }
+ int iconId = mDemoWifiLevel < 0 ? R.drawable.stat_sys_wifi_signal_null
+ : WifiIcons.WIFI_SIGNAL_STRENGTH[mDemoInetCondition][mDemoWifiLevel];
+ for (SignalCluster cluster : mSignalClusters) {
+ cluster.setWifiIndicators(
+ show,
+ iconId,
+ "Demo");
+ }
+ }
+ String mobile = args.getString("mobile");
+ if (mobile != null) {
+ boolean show = mobile.equals("show");
+ String datatype = args.getString("datatype");
+ if (datatype != null) {
+ mDemoDataTypeIconId =
+ datatype.equals("1x") ? R.drawable.stat_sys_data_connected_1x :
+ datatype.equals("3g") ? R.drawable.stat_sys_data_connected_3g :
+ datatype.equals("4g") ? R.drawable.stat_sys_data_connected_4g :
+ datatype.equals("e") ? R.drawable.stat_sys_data_connected_e :
+ datatype.equals("g") ? R.drawable.stat_sys_data_connected_g :
+ datatype.equals("h") ? R.drawable.stat_sys_data_connected_h :
+ datatype.equals("lte") ? R.drawable.stat_sys_data_connected_lte :
+ datatype.equals("roam") ? R.drawable.stat_sys_data_connected_roam :
+ 0;
+ }
+ int[][] icons = TelephonyIcons.TELEPHONY_SIGNAL_STRENGTH;
+ String level = args.getString("level");
+ if (level != null) {
+ mDemoMobileLevel = level.equals("null") ? -1
+ : Math.min(Integer.parseInt(level), icons[0].length - 1);
+ }
+ int iconId = mDemoMobileLevel < 0 ? R.drawable.stat_sys_signal_null :
+ icons[mDemoInetCondition][mDemoMobileLevel];
+ for (SignalCluster cluster : mSignalClusters) {
+ cluster.setMobileDataIndicators(
+ show,
+ iconId,
+ mDemoDataTypeIconId,
+ "Demo",
+ "Demo");
+ }
+ }
+ }
+ }
}
diff --git a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
index c58ed6f..d377902 100644
--- a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
+++ b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
@@ -3334,7 +3334,8 @@
if (DEBUG_LAYOUT) Slog.i(TAG, "Win " + win + ": isVisibleOrBehindKeyguardLw="
+ win.isVisibleOrBehindKeyguardLw());
if (mTopFullscreenOpaqueWindowState == null && (win.getAttrs().privateFlags
- &WindowManager.LayoutParams.PRIVATE_FLAG_FORCE_SHOW_NAV_BAR) != 0) {
+ &WindowManager.LayoutParams.PRIVATE_FLAG_FORCE_SHOW_NAV_BAR) != 0
+ || (win.isVisibleLw() && attrs.type == TYPE_INPUT_METHOD)) {
if (mForcingShowNavBarLayer < 0) {
mForcingShowNavBar = true;
mForcingShowNavBarLayer = win.getSurfaceLayer();
@@ -5055,7 +5056,9 @@
if (statusBarHasFocus) {
int flags = View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
- | View.SYSTEM_UI_FLAG_IMMERSIVE;
+ | View.SYSTEM_UI_FLAG_IMMERSIVE
+ | View.SYSTEM_UI_FLAG_TRANSPARENT_STATUS
+ | View.SYSTEM_UI_FLAG_TRANSPARENT_NAVIGATION;
vis = (vis & ~flags) | (mLastSystemUiFlags & flags);
}
diff --git a/services/java/com/android/server/AlarmManagerService.java b/services/java/com/android/server/AlarmManagerService.java
index 212796c..98b5f66 100644
--- a/services/java/com/android/server/AlarmManagerService.java
+++ b/services/java/com/android/server/AlarmManagerService.java
@@ -91,7 +91,7 @@
= new Intent().addFlags(Intent.FLAG_FROM_BACKGROUND);
private static final IncreasingTimeOrder sIncreasingTimeOrder = new IncreasingTimeOrder();
- private static final boolean WAKEUP_STATS = true;
+ private static final boolean WAKEUP_STATS = false;
private final Context mContext;
diff --git a/services/java/com/android/server/AppOpsService.java b/services/java/com/android/server/AppOpsService.java
index 7af95f3..c6c4a94 100644
--- a/services/java/com/android/server/AppOpsService.java
+++ b/services/java/com/android/server/AppOpsService.java
@@ -552,6 +552,17 @@
}
@Override
+ public int checkPackage(int uid, String packageName) {
+ synchronized (this) {
+ if (getOpsLocked(uid, packageName, true) != null) {
+ return AppOpsManager.MODE_ALLOWED;
+ } else {
+ return AppOpsManager.MODE_ERRORED;
+ }
+ }
+ }
+
+ @Override
public int noteOperation(int code, int uid, String packageName) {
verifyIncomingUid(uid);
verifyIncomingOp(code);
@@ -560,7 +571,7 @@
if (ops == null) {
if (DEBUG) Log.d(TAG, "noteOperation: no op for code " + code + " uid " + uid
+ " package " + packageName);
- return AppOpsManager.MODE_IGNORED;
+ return AppOpsManager.MODE_ERRORED;
}
Op op = getOpLocked(ops, code, true);
if (op.duration == -1) {
@@ -594,7 +605,7 @@
if (ops == null) {
if (DEBUG) Log.d(TAG, "startOperation: no op for code " + code + " uid " + uid
+ " package " + packageName);
- return AppOpsManager.MODE_IGNORED;
+ return AppOpsManager.MODE_ERRORED;
}
Op op = getOpLocked(ops, code, true);
final int switchCode = AppOpsManager.opToSwitch(code);
diff --git a/services/java/com/android/server/ConnectivityService.java b/services/java/com/android/server/ConnectivityService.java
index 9c14654..7f9dc26 100644
--- a/services/java/com/android/server/ConnectivityService.java
+++ b/services/java/com/android/server/ConnectivityService.java
@@ -58,7 +58,7 @@
import android.net.INetworkStatsService;
import android.net.LinkAddress;
import android.net.LinkProperties;
-import android.net.LinkInfo;
+import android.net.LinkQualityInfo;
import android.net.LinkProperties.CompareResult;
import android.net.MobileDataStateTracker;
import android.net.NetworkConfig;
@@ -965,8 +965,7 @@
// Find the first Provisioning Network
NetworkInfo provNi = null;
for (NetworkInfo ni : getAllNetworkInfo()) {
- if (ni.getDetailedState()
- == NetworkInfo.DetailedState.CONNECTED_TO_PROVISIONING_NETWORK) {
+ if (ni.isConnectedToProvisioningNetwork()) {
provNi = ni;
break;
}
@@ -2919,7 +2918,8 @@
NetworkInfo.State state = info.getState();
if (VDBG || (state == NetworkInfo.State.CONNECTED) ||
- (state == NetworkInfo.State.DISCONNECTED)) {
+ (state == NetworkInfo.State.DISCONNECTED) ||
+ (state == NetworkInfo.State.SUSPENDED)) {
log("ConnectivityChange for " +
info.getTypeName() + ": " +
state + "/" + info.getDetailedState());
@@ -2934,7 +2934,8 @@
if (ConnectivityManager.isNetworkTypeMobile(info.getType())
&& (0 != Settings.Global.getInt(mContext.getContentResolver(),
Settings.Global.DEVICE_PROVISIONED, 0))
- && (state == NetworkInfo.State.CONNECTED)) {
+ && ((state == NetworkInfo.State.CONNECTED)
+ || info.isConnectedToProvisioningNetwork())) {
checkMobileProvisioning(CheckMp.MAX_TIMEOUT_MS);
}
@@ -2947,8 +2948,7 @@
} else if (info.getDetailedState() ==
DetailedState.CAPTIVE_PORTAL_CHECK) {
handleCaptivePortalTrackerCheck(info);
- } else if (info.getDetailedState() ==
- DetailedState.CONNECTED_TO_PROVISIONING_NETWORK) {
+ } else if (info.isConnectedToProvisioningNetwork()) {
/**
* TODO: Create ConnectivityManager.TYPE_MOBILE_PROVISIONING
* for now its an in between network, its a network that
@@ -4418,8 +4418,7 @@
// If provisioning network handle as a special case,
// otherwise launch browser with the intent directly.
NetworkInfo ni = getProvisioningNetworkInfo();
- if ((ni != null) && ni.getDetailedState() ==
- NetworkInfo.DetailedState.CONNECTED_TO_PROVISIONING_NETWORK) {
+ if ((ni != null) && ni.isConnectedToProvisioningNetwork()) {
if (DBG) log("handleMobileProvisioningAction: on provisioning network");
MobileDataStateTracker mdst = (MobileDataStateTracker)
mNetTrackers[ConnectivityManager.TYPE_MOBILE];
@@ -4689,39 +4688,39 @@
};
@Override
- public LinkInfo getLinkInfo(int networkType) {
+ public LinkQualityInfo getLinkQualityInfo(int networkType) {
enforceAccessPermission();
if (isNetworkTypeValid(networkType)) {
- return mNetTrackers[networkType].getLinkInfo();
+ return mNetTrackers[networkType].getLinkQualityInfo();
} else {
return null;
}
}
@Override
- public LinkInfo getActiveLinkInfo() {
+ public LinkQualityInfo getActiveLinkQualityInfo() {
enforceAccessPermission();
if (isNetworkTypeValid(mActiveDefaultNetwork)) {
- return mNetTrackers[mActiveDefaultNetwork].getLinkInfo();
+ return mNetTrackers[mActiveDefaultNetwork].getLinkQualityInfo();
} else {
return null;
}
}
@Override
- public LinkInfo[] getAllLinkInfo() {
+ public LinkQualityInfo[] getAllLinkQualityInfo() {
enforceAccessPermission();
- final ArrayList<LinkInfo> result = Lists.newArrayList();
+ final ArrayList<LinkQualityInfo> result = Lists.newArrayList();
for (NetworkStateTracker tracker : mNetTrackers) {
if (tracker != null) {
- LinkInfo li = tracker.getLinkInfo();
+ LinkQualityInfo li = tracker.getLinkQualityInfo();
if (li != null) {
result.add(li);
}
}
}
- return result.toArray(new LinkInfo[result.size()]);
+ return result.toArray(new LinkQualityInfo[result.size()]);
}
/* Infrastructure for network sampling */
diff --git a/services/java/com/android/server/DropBoxManagerService.java b/services/java/com/android/server/DropBoxManagerService.java
index 5008270..29b04da 100644
--- a/services/java/com/android/server/DropBoxManagerService.java
+++ b/services/java/com/android/server/DropBoxManagerService.java
@@ -24,6 +24,7 @@
import android.content.pm.PackageManager;
import android.database.ContentObserver;
import android.net.Uri;
+import android.os.Binder;
import android.os.Debug;
import android.os.DropBoxManager;
import android.os.FileUtils;
@@ -265,8 +266,13 @@
}
public boolean isTagEnabled(String tag) {
- return !"disabled".equals(Settings.Global.getString(
- mContentResolver, Settings.Global.DROPBOX_TAG_PREFIX + tag));
+ final long token = Binder.clearCallingIdentity();
+ try {
+ return !"disabled".equals(Settings.Global.getString(
+ mContentResolver, Settings.Global.DROPBOX_TAG_PREFIX + tag));
+ } finally {
+ Binder.restoreCallingIdentity(token);
+ }
}
public synchronized DropBoxManager.Entry getNextEntry(String tag, long millis) {
diff --git a/services/java/com/android/server/am/BatteryStatsService.java b/services/java/com/android/server/am/BatteryStatsService.java
index 12cad7b..0dd950e 100644
--- a/services/java/com/android/server/am/BatteryStatsService.java
+++ b/services/java/com/android/server/am/BatteryStatsService.java
@@ -481,7 +481,7 @@
private void dumpHelp(PrintWriter pw) {
pw.println("Battery stats (batterystats) dump options:");
- pw.println(" [--checkin] [--unplugged] [--reset] [--write] [-h] [<package.name>]");
+ pw.println(" [--checkin] [-c] [--unplugged] [--reset] [--write] [-h] [<package.name>]");
pw.println(" --checkin: format output for a checkin report.");
pw.println(" --unplugged: only output data since last unplugged.");
pw.println(" --reset: reset the stats, clearing all current data.");
@@ -501,6 +501,7 @@
}
boolean isCheckin = false;
+ boolean includeHistory = false;
boolean isUnpluggedOnly = false;
boolean noOutput = false;
int reqUid = -1;
@@ -508,6 +509,9 @@
for (String arg : args) {
if ("--checkin".equals(arg)) {
isCheckin = true;
+ } else if ("-c".equals(arg)) {
+ isCheckin = true;
+ includeHistory = true;
} else if ("--unplugged".equals(arg)) {
isUnpluggedOnly = true;
} else if ("--reset".equals(arg)) {
@@ -550,7 +554,7 @@
if (isCheckin) {
List<ApplicationInfo> apps = mContext.getPackageManager().getInstalledApplications(0);
synchronized (mStats) {
- mStats.dumpCheckinLocked(pw, apps, isUnpluggedOnly);
+ mStats.dumpCheckinLocked(pw, apps, isUnpluggedOnly, includeHistory);
}
} else {
synchronized (mStats) {
diff --git a/services/java/com/android/server/am/ReceiverList.java b/services/java/com/android/server/am/ReceiverList.java
index b19cc5d..fa8c1df 100644
--- a/services/java/com/android/server/am/ReceiverList.java
+++ b/services/java/com/android/server/am/ReceiverList.java
@@ -69,7 +69,7 @@
}
void dumpLocal(PrintWriter pw, String prefix) {
- pw.print(prefix); pw.print("app="); pw.print(app.toShortString());
+ pw.print(prefix); pw.print("app="); pw.print(app != null ? app.toShortString() : null);
pw.print(" pid="); pw.print(pid); pw.print(" uid="); pw.print(uid);
pw.print(" user="); pw.println(userId);
if (curBroadcast != null || linkedToDeath) {
diff --git a/services/java/com/android/server/pm/UserManagerService.java b/services/java/com/android/server/pm/UserManagerService.java
index af60f84..d0e9fe1 100644
--- a/services/java/com/android/server/pm/UserManagerService.java
+++ b/services/java/com/android/server/pm/UserManagerService.java
@@ -416,12 +416,6 @@
if (restrictions == null) return;
synchronized (mPackagesLock) {
- // If the user has restrictions already and call is trying to disallow restrictions,
- // don't modify the flag.
- if (hasRestrictionsPinLocked(userId)
- && restrictions.getBoolean(UserManager.DISALLOW_APP_RESTRICTIONS, false)) {
- restrictions.putBoolean(UserManager.DISALLOW_APP_RESTRICTIONS, false);
- }
mUserRestrictions.get(userId).clear();
mUserRestrictions.get(userId).putAll(restrictions);
writeUserLocked(mUsers.get(userId));
@@ -686,7 +680,6 @@
writeBoolean(serializer, restrictions, UserManager.DISALLOW_USB_FILE_TRANSFER);
writeBoolean(serializer, restrictions, UserManager.DISALLOW_CONFIG_CREDENTIALS);
writeBoolean(serializer, restrictions, UserManager.DISALLOW_REMOVE_USER);
- writeBoolean(serializer, restrictions, UserManager.DISALLOW_APP_RESTRICTIONS);
serializer.endTag(null, TAG_RESTRICTIONS);
}
serializer.endTag(null, TAG_USER);
@@ -817,7 +810,6 @@
readBoolean(parser, restrictions, UserManager.DISALLOW_USB_FILE_TRANSFER);
readBoolean(parser, restrictions, UserManager.DISALLOW_CONFIG_CREDENTIALS);
readBoolean(parser, restrictions, UserManager.DISALLOW_REMOVE_USER);
- readBoolean(parser, restrictions, UserManager.DISALLOW_APP_RESTRICTIONS);
}
}
}
@@ -1130,7 +1122,7 @@
}
@Override
- public boolean changeRestrictionsPin(String newPin) {
+ public boolean setRestrictionsChallenge(String newPin) {
checkManageUsersPermission("Only system can modify the restrictions pin");
int userId = UserHandle.getCallingUserId();
synchronized (mPackagesLock) {
@@ -1157,7 +1149,7 @@
}
@Override
- public int checkRestrictionsPin(String pin) {
+ public int checkRestrictionsChallenge(String pin) {
checkManageUsersPermission("Only system can verify the restrictions pin");
int userId = UserHandle.getCallingUserId();
synchronized (mPackagesLock) {
@@ -1200,7 +1192,7 @@
}
@Override
- public boolean hasRestrictionsPin() {
+ public boolean hasRestrictionsChallenge() {
int userId = UserHandle.getCallingUserId();
synchronized (mPackagesLock) {
return hasRestrictionsPinLocked(userId);
@@ -1227,7 +1219,7 @@
// Remove all user restrictions
setUserRestrictions(new Bundle(), userHandle);
// Remove restrictions pin
- changeRestrictionsPin(null);
+ setRestrictionsChallenge(null);
// Remove any app restrictions
cleanAppRestrictions(userHandle, true);
}
diff --git a/services/java/com/android/server/print/RemotePrintService.java b/services/java/com/android/server/print/RemotePrintService.java
index 3c67aa9..2ded202 100644
--- a/services/java/com/android/server/print/RemotePrintService.java
+++ b/services/java/com/android/server/print/RemotePrintService.java
@@ -684,20 +684,6 @@
}
}
- @Override
- public void onPrintersUpdated(List<PrinterInfo> printers) {
- RemotePrintService service = mWeakService.get();
- if (service != null) {
- throwIfPrinterIdsForPrinterInfoTampered(service.mComponentName, printers);
- final long identity = Binder.clearCallingIdentity();
- try {
- service.mUserState.onPrintersUpdated(printers);
- } finally {
- Binder.restoreCallingIdentity(identity);
- }
- }
- }
-
private void throwIfPrinterIdsForPrinterInfoTampered(ComponentName serviceName,
List<PrinterInfo> printerInfos) {
final int printerInfoCount = printerInfos.size();
diff --git a/services/java/com/android/server/print/UserState.java b/services/java/com/android/server/print/UserState.java
index b9c676d..8fe979b 100644
--- a/services/java/com/android/server/print/UserState.java
+++ b/services/java/com/android/server/print/UserState.java
@@ -276,22 +276,6 @@
}
}
- public void onPrintersUpdated(List<PrinterInfo> printers) {
- synchronized (mLock) {
- throwIfDestroyedLocked();
- // No services - nothing to do.
- if (mActiveServices.isEmpty()) {
- return;
- }
- // No session - nothing to do.
- if (mPrinterDiscoverySession == null) {
- return;
- }
- // Request an updated.
- mPrinterDiscoverySession.onPrintersUpdatedLocked(printers);
- }
- }
-
public void updateIfNeededLocked() {
throwIfDestroyedLocked();
if (readConfigurationLocked()) {
@@ -746,8 +730,8 @@
final int addedPrinterCount = printers.size();
for (int i = 0; i < addedPrinterCount; i++) {
PrinterInfo printer = printers.get(i);
- if (!mPrinters.containsKey(printer.getId())) {
- mPrinters.put(printer.getId(), printer);
+ PrinterInfo oldPrinter = mPrinters.put(printer.getId(), printer);
+ if (oldPrinter == null || !oldPrinter.equals(printer)) {
if (addedPrinters == null) {
addedPrinters = new ArrayList<PrinterInfo>();
}
@@ -785,32 +769,6 @@
}
}
- public void onPrintersUpdatedLocked(List<PrinterInfo> printers) {
- if (DEBUG) {
- Log.i(LOG_TAG, "onPrintersUpdatedLocked()");
- }
- if (mIsDestroyed) {
- Log.w(LOG_TAG, "Not updating printers - session destroyed");
- return;
- }
- List<PrinterInfo> updatedPrinters = null;
- final int updatedPrinterCount = printers.size();
- for (int i = 0; i < updatedPrinterCount; i++) {
- PrinterInfo updatedPrinter = printers.get(i);
- if (mPrinters.containsKey(updatedPrinter.getId())) {
- mPrinters.put(updatedPrinter.getId(), updatedPrinter);
- if (updatedPrinters == null) {
- updatedPrinters = new ArrayList<PrinterInfo>();
- }
- updatedPrinters.add(updatedPrinter);
- }
- }
- if (updatedPrinters != null) {
- mHandler.obtainMessage(SessionHandler.MSG_DISPATCH_PRINTERS_UPDATED,
- updatedPrinters).sendToTarget();
- }
- }
-
public void onServiceRemovedLocked(ComponentName serviceName) {
if (mIsDestroyed) {
Log.w(LOG_TAG, "Not updating removed service - session destroyed");
@@ -874,15 +832,6 @@
mDiscoveryObservers.finishBroadcast();
}
- private void handleDispatchPrintersUpdated(List<PrinterInfo> updatedPrinters) {
- final int observerCount = mDiscoveryObservers.beginBroadcast();
- for (int i = 0; i < observerCount; i++) {
- IPrinterDiscoveryObserver observer = mDiscoveryObservers.getBroadcastItem(i);
- handlePrintersUpdated(observer, updatedPrinters);
- }
- mDiscoveryObservers.finishBroadcast();
- }
-
private void handleDispatchCreatePrinterDiscoverySession(
List<RemotePrintService> services) {
final int serviceCount = services.size();
@@ -976,43 +925,21 @@
}
}
- private void handlePrintersUpdated(IPrinterDiscoveryObserver observer,
- List<PrinterInfo> updatedPrinters) {
- try {
- final int printerCount = updatedPrinters.size();
- if (printerCount <= MAX_ITEMS_PER_CALLBACK) {
- observer.onPrintersUpdated(updatedPrinters);
- } else {
- // Send the added printers in chunks avoiding the binder transaction limit.
- final int transactionCount = (printerCount / MAX_ITEMS_PER_CALLBACK) + 1;
- for (int i = 0; i < transactionCount; i++) {
- final int start = i * MAX_ITEMS_PER_CALLBACK;
- final int end = Math.min(start + MAX_ITEMS_PER_CALLBACK, printerCount);
- List<PrinterInfo> subPrinters = updatedPrinters.subList(start, end);
- observer.onPrintersUpdated(subPrinters);
- }
- }
- } catch (RemoteException re) {
- Log.e(LOG_TAG, "Error sending updated printers", re);
- }
- }
-
private final class SessionHandler extends Handler {
public static final int MSG_PRINTERS_ADDED = 1;
public static final int MSG_PRINTERS_REMOVED = 2;
public static final int MSG_DISPATCH_PRINTERS_ADDED = 3;
public static final int MSG_DISPATCH_PRINTERS_REMOVED = 4;
- public static final int MSG_DISPATCH_PRINTERS_UPDATED = 5;
- public static final int MSG_CREATE_PRINTER_DISCOVERY_SESSION = 6;
- public static final int MSG_START_PRINTER_DISCOVERY = 7;
- public static final int MSG_DISPATCH_CREATE_PRINTER_DISCOVERY_SESSION = 8;
- public static final int MSG_DISPATCH_DESTROY_PRINTER_DISCOVERY_SESSION = 9;
- public static final int MSG_DISPATCH_START_PRINTER_DISCOVERY = 10;
- public static final int MSG_DISPATCH_STOP_PRINTER_DISCOVERY = 11;
- public static final int MSG_VALIDATE_PRINTERS = 12;
- public static final int MSG_START_PRINTER_STATE_TRACKING = 13;
- public static final int MSG_STOP_PRINTER_STATE_TRACKING = 14;
+ public static final int MSG_CREATE_PRINTER_DISCOVERY_SESSION = 5;
+ public static final int MSG_START_PRINTER_DISCOVERY = 6;
+ public static final int MSG_DISPATCH_CREATE_PRINTER_DISCOVERY_SESSION = 7;
+ public static final int MSG_DISPATCH_DESTROY_PRINTER_DISCOVERY_SESSION = 8;
+ public static final int MSG_DISPATCH_START_PRINTER_DISCOVERY = 9;
+ public static final int MSG_DISPATCH_STOP_PRINTER_DISCOVERY = 10;
+ public static final int MSG_VALIDATE_PRINTERS = 11;
+ public static final int MSG_START_PRINTER_STATE_TRACKING = 12;
+ public static final int MSG_STOP_PRINTER_STATE_TRACKING = 13;
SessionHandler(Looper looper) {
super(looper, null, false);
@@ -1048,11 +975,6 @@
handleDispatchPrintersRemoved(removedPrinterIds);
} break;
- case MSG_DISPATCH_PRINTERS_UPDATED: {
- List<PrinterInfo> updatedPrinters = (List<PrinterInfo>) message.obj;
- handleDispatchPrintersUpdated(updatedPrinters);
- } break;
-
case MSG_CREATE_PRINTER_DISCOVERY_SESSION: {
RemotePrintService service = (RemotePrintService) message.obj;
service.createPrinterDiscoverySession();
diff --git a/telephony/java/com/android/internal/telephony/DctConstants.java b/telephony/java/com/android/internal/telephony/DctConstants.java
index c661b00..4be11b8 100644
--- a/telephony/java/com/android/internal/telephony/DctConstants.java
+++ b/telephony/java/com/android/internal/telephony/DctConstants.java
@@ -96,6 +96,7 @@
public static final int CMD_SET_ENABLE_FAIL_FAST_MOBILE_DATA = BASE + 36;
public static final int CMD_ENABLE_MOBILE_PROVISIONING = BASE + 37;
public static final int CMD_IS_PROVISIONING_APN = BASE + 38;
+ public static final int EVENT_PROVISIONING_APN_ALARM = BASE + 39;
/***** Constants *****/
diff --git a/tools/aapt/Command.cpp b/tools/aapt/Command.cpp
index cadac02..1e3b058 100644
--- a/tools/aapt/Command.cpp
+++ b/tools/aapt/Command.cpp
@@ -621,6 +621,7 @@
bool isLauncherActivity = false;
bool isSearchable = false;
bool withinApplication = false;
+ bool withinSupportsInput = false;
bool withinReceiver = false;
bool withinService = false;
bool withinIntentFilter = false;
@@ -711,11 +712,26 @@
String8 activityIcon;
String8 receiverName;
String8 serviceName;
+ Vector<String8> supportedInput;
while ((code=tree.next()) != ResXMLTree::END_DOCUMENT && code != ResXMLTree::BAD_DOCUMENT) {
if (code == ResXMLTree::END_TAG) {
depth--;
if (depth < 2) {
+ if (withinSupportsInput && !supportedInput.isEmpty()) {
+ printf("supports-input: '");
+ const size_t N = supportedInput.size();
+ for (size_t i=0; i<N; i++) {
+ printf("%s", supportedInput[i].string());
+ if (i != N - 1) {
+ printf("' '");
+ } else {
+ printf("'\n");
+ }
+ }
+ supportedInput.clear();
+ }
withinApplication = false;
+ withinSupportsInput = false;
} else if (depth < 3) {
if (withinActivity && isMainActivity && isLauncherActivity) {
const char *aName = getComponentName(pkg, activityName);
@@ -910,6 +926,8 @@
printf(" reqFiveWayNav='%d'", reqFiveWayNav);
}
printf("\n");
+ } else if (tag == "supports-input") {
+ withinSupportsInput = true;
} else if (tag == "supports-screens") {
smallScreen = getIntegerAttribute(tree,
SMALL_SCREEN_ATTR, NULL, 1);
@@ -1086,66 +1104,85 @@
}
}
}
- } else if (depth == 3 && withinApplication) {
+ } else if (depth == 3) {
withinActivity = false;
withinReceiver = false;
withinService = false;
hasIntentFilter = false;
- if(tag == "activity") {
- withinActivity = true;
- activityName = getAttribute(tree, NAME_ATTR, &error);
- if (error != "") {
- fprintf(stderr, "ERROR getting 'android:name' attribute: %s\n", error.string());
- goto bail;
- }
+ if (withinApplication) {
+ if(tag == "activity") {
+ withinActivity = true;
+ activityName = getAttribute(tree, NAME_ATTR, &error);
+ if (error != "") {
+ fprintf(stderr, "ERROR getting 'android:name' attribute: %s\n",
+ error.string());
+ goto bail;
+ }
- activityLabel = getResolvedAttribute(&res, tree, LABEL_ATTR, &error);
- if (error != "") {
- fprintf(stderr, "ERROR getting 'android:label' attribute: %s\n", error.string());
- goto bail;
- }
+ activityLabel = getResolvedAttribute(&res, tree, LABEL_ATTR, &error);
+ if (error != "") {
+ fprintf(stderr, "ERROR getting 'android:label' attribute: %s\n",
+ error.string());
+ goto bail;
+ }
- activityIcon = getResolvedAttribute(&res, tree, ICON_ATTR, &error);
- if (error != "") {
- fprintf(stderr, "ERROR getting 'android:icon' attribute: %s\n", error.string());
- goto bail;
- }
+ activityIcon = getResolvedAttribute(&res, tree, ICON_ATTR, &error);
+ if (error != "") {
+ fprintf(stderr, "ERROR getting 'android:icon' attribute: %s\n",
+ error.string());
+ goto bail;
+ }
- int32_t orien = getResolvedIntegerAttribute(&res, tree,
- SCREEN_ORIENTATION_ATTR, &error);
- if (error == "") {
- if (orien == 0 || orien == 6 || orien == 8) {
- // Requests landscape, sensorLandscape, or reverseLandscape.
- reqScreenLandscapeFeature = true;
- } else if (orien == 1 || orien == 7 || orien == 9) {
- // Requests portrait, sensorPortrait, or reversePortrait.
- reqScreenPortraitFeature = true;
+ int32_t orien = getResolvedIntegerAttribute(&res, tree,
+ SCREEN_ORIENTATION_ATTR, &error);
+ if (error == "") {
+ if (orien == 0 || orien == 6 || orien == 8) {
+ // Requests landscape, sensorLandscape, or reverseLandscape.
+ reqScreenLandscapeFeature = true;
+ } else if (orien == 1 || orien == 7 || orien == 9) {
+ // Requests portrait, sensorPortrait, or reversePortrait.
+ reqScreenPortraitFeature = true;
+ }
+ }
+ } else if (tag == "uses-library") {
+ String8 libraryName = getAttribute(tree, NAME_ATTR, &error);
+ if (error != "") {
+ fprintf(stderr,
+ "ERROR getting 'android:name' attribute for uses-library"
+ " %s\n", error.string());
+ goto bail;
+ }
+ int req = getIntegerAttribute(tree,
+ REQUIRED_ATTR, NULL, 1);
+ printf("uses-library%s:'%s'\n",
+ req ? "" : "-not-required", libraryName.string());
+ } else if (tag == "receiver") {
+ withinReceiver = true;
+ receiverName = getAttribute(tree, NAME_ATTR, &error);
+
+ if (error != "") {
+ fprintf(stderr,
+ "ERROR getting 'android:name' attribute for receiver:"
+ " %s\n", error.string());
+ goto bail;
+ }
+ } else if (tag == "service") {
+ withinService = true;
+ serviceName = getAttribute(tree, NAME_ATTR, &error);
+
+ if (error != "") {
+ fprintf(stderr, "ERROR getting 'android:name' attribute for"
+ " service: %s\n", error.string());
+ goto bail;
}
}
- } else if (tag == "uses-library") {
- String8 libraryName = getAttribute(tree, NAME_ATTR, &error);
- if (error != "") {
- fprintf(stderr, "ERROR getting 'android:name' attribute for uses-library: %s\n", error.string());
- goto bail;
- }
- int req = getIntegerAttribute(tree,
- REQUIRED_ATTR, NULL, 1);
- printf("uses-library%s:'%s'\n",
- req ? "" : "-not-required", libraryName.string());
- } else if (tag == "receiver") {
- withinReceiver = true;
- receiverName = getAttribute(tree, NAME_ATTR, &error);
-
- if (error != "") {
- fprintf(stderr, "ERROR getting 'android:name' attribute for receiver: %s\n", error.string());
- goto bail;
- }
- } else if (tag == "service") {
- withinService = true;
- serviceName = getAttribute(tree, NAME_ATTR, &error);
-
- if (error != "") {
- fprintf(stderr, "ERROR getting 'android:name' attribute for service: %s\n", error.string());
+ } else if (withinSupportsInput && tag == "input-type") {
+ String8 name = getAttribute(tree, NAME_ATTR, &error);
+ if (name != "" && error == "") {
+ supportedInput.add(name);
+ } else {
+ fprintf(stderr, "ERROR getting 'android:name' attribute: %s\n",
+ error.string());
goto bail;
}
}
diff --git a/tools/layoutlib/bridge/.classpath b/tools/layoutlib/bridge/.classpath
index 3c124d9..2e4274da 100644
--- a/tools/layoutlib/bridge/.classpath
+++ b/tools/layoutlib/bridge/.classpath
@@ -7,5 +7,6 @@
<classpathentry kind="var" path="ANDROID_PLAT_SRC/out/host/common/obj/JAVA_LIBRARIES/temp_layoutlib_intermediates/javalib.jar" sourcepath="/ANDROID_PLAT_SRC/frameworks/base"/>
<classpathentry kind="var" path="ANDROID_PLAT_SRC/prebuilts/misc/common/ninepatch/ninepatch-prebuilt.jar"/>
<classpathentry kind="var" path="ANDROID_PLAT_SRC/prebuilts/misc/common/tools-common/tools-common-prebuilt.jar"/>
+ <classpathentry kind="var" path="ANDROID_PLAT_SRC/prebuilts/misc/common/icu4j/icu4j.jar"/>
<classpathentry kind="output" path="bin"/>
</classpath>
diff --git a/tools/layoutlib/bridge/Android.mk b/tools/layoutlib/bridge/Android.mk
index 687a91f..e3d48fc 100644
--- a/tools/layoutlib/bridge/Android.mk
+++ b/tools/layoutlib/bridge/Android.mk
@@ -22,6 +22,7 @@
LOCAL_JAVA_LIBRARIES := \
kxml2-2.3.0 \
+ icu4j \
layoutlib_api-prebuilt \
tools-common-prebuilt
diff --git a/tools/layoutlib/bridge/resources/bars/ldrtl-hdpi/ic_sysbar_back.png b/tools/layoutlib/bridge/resources/bars/ldrtl-hdpi/ic_sysbar_back.png
new file mode 100644
index 0000000..782ebfe
--- /dev/null
+++ b/tools/layoutlib/bridge/resources/bars/ldrtl-hdpi/ic_sysbar_back.png
Binary files differ
diff --git a/tools/layoutlib/bridge/resources/bars/ldrtl-hdpi/ic_sysbar_recent.png b/tools/layoutlib/bridge/resources/bars/ldrtl-hdpi/ic_sysbar_recent.png
new file mode 100644
index 0000000..677b471
--- /dev/null
+++ b/tools/layoutlib/bridge/resources/bars/ldrtl-hdpi/ic_sysbar_recent.png
Binary files differ
diff --git a/tools/layoutlib/bridge/resources/bars/ldrtl-mdpi/ic_sysbar_back.png b/tools/layoutlib/bridge/resources/bars/ldrtl-mdpi/ic_sysbar_back.png
new file mode 100644
index 0000000..a1b8062
--- /dev/null
+++ b/tools/layoutlib/bridge/resources/bars/ldrtl-mdpi/ic_sysbar_back.png
Binary files differ
diff --git a/tools/layoutlib/bridge/resources/bars/ldrtl-mdpi/ic_sysbar_recent.png b/tools/layoutlib/bridge/resources/bars/ldrtl-mdpi/ic_sysbar_recent.png
new file mode 100644
index 0000000..fcdbefe
--- /dev/null
+++ b/tools/layoutlib/bridge/resources/bars/ldrtl-mdpi/ic_sysbar_recent.png
Binary files differ
diff --git a/tools/layoutlib/bridge/resources/bars/ldrtl-xhdpi/ic_sysbar_back.png b/tools/layoutlib/bridge/resources/bars/ldrtl-xhdpi/ic_sysbar_back.png
new file mode 100644
index 0000000..633d864
--- /dev/null
+++ b/tools/layoutlib/bridge/resources/bars/ldrtl-xhdpi/ic_sysbar_back.png
Binary files differ
diff --git a/tools/layoutlib/bridge/resources/bars/ldrtl-xhdpi/ic_sysbar_recent.png b/tools/layoutlib/bridge/resources/bars/ldrtl-xhdpi/ic_sysbar_recent.png
new file mode 100644
index 0000000..4665e2a
--- /dev/null
+++ b/tools/layoutlib/bridge/resources/bars/ldrtl-xhdpi/ic_sysbar_recent.png
Binary files differ
diff --git a/tools/layoutlib/bridge/src/android/graphics/BidiRenderer.java b/tools/layoutlib/bridge/src/android/graphics/BidiRenderer.java
new file mode 100644
index 0000000..62d0a0d
--- /dev/null
+++ b/tools/layoutlib/bridge/src/android/graphics/BidiRenderer.java
@@ -0,0 +1,215 @@
+/*
+ * Copyright (C) 2013 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.graphics;
+
+import java.awt.Font;
+import java.awt.Graphics2D;
+import java.awt.font.FontRenderContext;
+import java.awt.font.GlyphVector;
+import java.util.LinkedList;
+import java.util.List;
+
+import com.ibm.icu.lang.UScript;
+import com.ibm.icu.lang.UScriptRun;
+
+import android.graphics.Paint_Delegate.FontInfo;
+
+/**
+ * Render the text by breaking it into various scripts and using the right font for each script.
+ * Can be used to measure the text without actually drawing it.
+ */
+@SuppressWarnings("deprecation")
+public class BidiRenderer {
+
+ /* package */ static class ScriptRun {
+ int start;
+ int limit;
+ boolean isRtl;
+ int scriptCode;
+ FontInfo font;
+
+ public ScriptRun(int start, int limit, boolean isRtl) {
+ this.start = start;
+ this.limit = limit;
+ this.isRtl = isRtl;
+ this.scriptCode = UScript.INVALID_CODE;
+ }
+ }
+
+ /* package */ Graphics2D graphics;
+ /* package */ Paint_Delegate paint;
+ /* package */ char[] text;
+
+ /**
+ * @param graphics May be null.
+ * @param paint The Paint to use to get the fonts. Should not be null.
+ * @param text Unidirectional text. Should not be null.
+ */
+ /* package */ BidiRenderer(Graphics2D graphics, Paint_Delegate paint, char[] text) {
+ assert (paint != null);
+ this.graphics = graphics;
+ this.paint = paint;
+ this.text = text;
+ }
+
+ /**
+ * Render unidirectional text.
+ *
+ * This method can also be used to measure the width of the text without actually drawing it.
+ *
+ * @param start index of the first character
+ * @param limit index of the first character that should not be rendered.
+ * @param isRtl is the text right-to-left
+ * @param advances If not null, then advances for each character to be rendered are returned
+ * here.
+ * @param advancesIndex index into advances from where the advances need to be filled.
+ * @param draw If true and {@link graphics} is not null, draw the rendered text on the graphics
+ * at the given co-ordinates
+ * @param x The x-coordinate of the left edge of where the text should be drawn on the given
+ * graphics.
+ * @param y The y-coordinate at which to draw the text on the given graphics.
+ * @return The x-coordinate of the right edge of the drawn text. In other words,
+ * x + the width of the text.
+ */
+ /* package */ float renderText(int start, int limit, boolean isRtl, float advances[],
+ int advancesIndex, boolean draw, float x, float y) {
+ // We break the text into scripts and then select font based on it and then render each of
+ // the script runs.
+ for (ScriptRun run : getScriptRuns(text, start, limit, isRtl, paint.getFonts())) {
+ int flag = Font.LAYOUT_NO_LIMIT_CONTEXT | Font.LAYOUT_NO_START_CONTEXT;
+ flag |= isRtl ? Font.LAYOUT_RIGHT_TO_LEFT : Font.LAYOUT_LEFT_TO_RIGHT;
+ x = renderScript(run.start, run.limit, run.font, flag, advances, advancesIndex, draw,
+ x, y);
+ advancesIndex += run.limit - run.start;
+ }
+ return x;
+ }
+
+ /**
+ * Render a script run. Use the preferred font to render as much as possible. This also
+ * implements a fallback mechanism to render characters that cannot be drawn using the
+ * preferred font.
+ *
+ * @return x + width of the text drawn.
+ */
+ private float renderScript(int start, int limit, FontInfo preferredFont, int flag,
+ float advances[], int advancesIndex, boolean draw, float x, float y) {
+ List<FontInfo> fonts = paint.getFonts();
+ if (fonts == null || preferredFont == null) {
+ return x;
+ }
+
+ while (start < limit) {
+ boolean foundFont = false;
+ int canDisplayUpTo = preferredFont.mFont.canDisplayUpTo(text, start, limit);
+ if (canDisplayUpTo == -1) {
+ return render(start, limit, preferredFont, flag, advances, advancesIndex, draw,
+ x, y);
+ } else if (canDisplayUpTo > start) { // can draw something
+ x = render(start, canDisplayUpTo, preferredFont, flag, advances, advancesIndex,
+ draw, x, y);
+ advancesIndex += canDisplayUpTo - start;
+ start = canDisplayUpTo;
+ }
+
+ int charCount = Character.isHighSurrogate(text[start]) ? 2 : 1;
+ for (FontInfo font : fonts) {
+ canDisplayUpTo = font.mFont.canDisplayUpTo(text, start, start + charCount);
+ if (canDisplayUpTo == -1) {
+ x = render(start, start+charCount, font, flag, advances, advancesIndex, draw,
+ x, y);
+ start += charCount;
+ advancesIndex += charCount;
+ foundFont = true;
+ break;
+ }
+ }
+ if (!foundFont) {
+ // No font can display this char. Use the preferred font. The char will most
+ // probably appear as a box or a blank space. We could, probably, use some
+ // heuristics and break the character into the base character and diacritics and
+ // then draw it, but it's probably not worth the effort.
+ x = render(start, start + charCount, preferredFont, flag, advances, advancesIndex,
+ draw, x, y);
+ start += charCount;
+ advancesIndex += charCount;
+ }
+ }
+ return x;
+ }
+
+ /**
+ * Render the text with the given font.
+ */
+ private float render(int start, int limit, FontInfo font, int flag, float advances[],
+ int advancesIndex, boolean draw, float x, float y) {
+
+ float totalAdvance = 0;
+ // Since the metrics don't have anti-aliasing set, we create a new FontRenderContext with
+ // the anti-aliasing set.
+ FontRenderContext f = font.mMetrics.getFontRenderContext();
+ FontRenderContext frc = new FontRenderContext(f.getTransform(), paint.isAntiAliased(),
+ f.usesFractionalMetrics());
+ GlyphVector gv = font.mFont.layoutGlyphVector(frc, text, start, limit, flag);
+ int ng = gv.getNumGlyphs();
+ int[] ci = gv.getGlyphCharIndices(0, ng, null);
+ for (int i = 0; i < ng; i++) {
+ float adv = gv.getGlyphMetrics(i).getAdvanceX();
+ if (advances != null) {
+ int adv_idx = advancesIndex + ci[i];
+ advances[adv_idx] += adv;
+ }
+ totalAdvance += adv;
+ }
+ if (draw && graphics != null) {
+ graphics.drawGlyphVector(gv, x, y);
+ }
+ return x + totalAdvance;
+ }
+
+ // --- Static helper methods ---
+
+ /* package */ static List<ScriptRun> getScriptRuns(char[] text, int start, int limit,
+ boolean isRtl, List<FontInfo> fonts) {
+ LinkedList<ScriptRun> scriptRuns = new LinkedList<ScriptRun>();
+
+ int count = limit - start;
+ UScriptRun uScriptRun = new UScriptRun(text, start, count);
+ while (uScriptRun.next()) {
+ int scriptStart = uScriptRun.getScriptStart();
+ int scriptLimit = uScriptRun.getScriptLimit();
+ ScriptRun run = new ScriptRun(scriptStart, scriptLimit, isRtl);
+ run.scriptCode = uScriptRun.getScriptCode();
+ setScriptFont(text, run, fonts);
+ scriptRuns.add(run);
+ }
+
+ return scriptRuns;
+ }
+
+ // TODO: Replace this method with one which returns the font based on the scriptCode.
+ private static void setScriptFont(char[] text, ScriptRun run,
+ List<FontInfo> fonts) {
+ for (FontInfo fontInfo : fonts) {
+ if (fontInfo.mFont.canDisplayUpTo(text, run.start, run.limit) == -1) {
+ run.font = fontInfo;
+ return;
+ }
+ }
+ run.font = fonts.get(0);
+ }
+}
diff --git a/tools/layoutlib/bridge/src/android/graphics/Canvas_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/Canvas_Delegate.java
index 361f5d7..62b47bd 100644
--- a/tools/layoutlib/bridge/src/android/graphics/Canvas_Delegate.java
+++ b/tools/layoutlib/bridge/src/android/graphics/Canvas_Delegate.java
@@ -23,7 +23,6 @@
import com.android.tools.layoutlib.annotations.LayoutlibDelegate;
import android.graphics.Bitmap.Config;
-import android.graphics.Paint_Delegate.FontInfo;
import android.text.TextUtils;
import java.awt.Color;
@@ -35,7 +34,6 @@
import java.awt.geom.AffineTransform;
import java.awt.geom.Arc2D;
import java.awt.image.BufferedImage;
-import java.util.List;
/**
@@ -978,7 +976,8 @@
@LayoutlibDelegate
/*package*/ static void native_drawText(int nativeCanvas,
final char[] text, final int index, final int count,
- final float startX, final float startY, int flags, int paint) {
+ final float startX, final float startY, final int flags, int paint) {
+
draw(nativeCanvas, paint, false /*compositeOnly*/, false /*forceSrcMode*/,
new GcSnapshot.Drawable() {
@Override
@@ -988,10 +987,10 @@
// Paint.TextAlign indicates how the text is positioned relative to X.
// LEFT is the default and there's nothing to do.
float x = startX;
- float y = startY;
+ int limit = index + count;
+ boolean isRtl = flags == Canvas.DIRECTION_RTL;
if (paintDelegate.getTextAlign() != Paint.Align.LEFT.nativeInt) {
- // TODO: check the value of bidiFlags.
- float m = paintDelegate.measureText(text, index, count, 0);
+ float m = paintDelegate.measureText(text, index, count, isRtl);
if (paintDelegate.getTextAlign() == Paint.Align.CENTER.nativeInt) {
x -= m / 2;
} else if (paintDelegate.getTextAlign() == Paint.Align.RIGHT.nativeInt) {
@@ -999,87 +998,15 @@
}
}
- List<FontInfo> fonts = paintDelegate.getFonts();
-
- if (fonts.size() > 0) {
- FontInfo mainFont = fonts.get(0);
- int i = index;
- int lastIndex = index + count;
- while (i < lastIndex) {
- // always start with the main font.
- int upTo = mainFont.mFont.canDisplayUpTo(text, i, lastIndex);
- if (upTo == -1) {
- // draw all the rest and exit.
- graphics.setFont(mainFont.mFont);
- graphics.drawChars(text, i, lastIndex - i, (int)x, (int)y);
- return;
- } else if (upTo > 0) {
- // draw what's possible
- graphics.setFont(mainFont.mFont);
- graphics.drawChars(text, i, upTo - i, (int)x, (int)y);
-
- // compute the width that was drawn to increase x
- x += mainFont.mMetrics.charsWidth(text, i, upTo - i);
-
- // move index to the first non displayed char.
- i = upTo;
-
- // don't call continue at this point. Since it is certain the main font
- // cannot display the font a index upTo (now ==i), we move on to the
- // fallback fonts directly.
- }
-
- // no char supported, attempt to read the next char(s) with the
- // fallback font. In this case we only test the first character
- // and then go back to test with the main font.
- // Special test for 2-char characters.
- boolean foundFont = false;
- for (int f = 1 ; f < fonts.size() ; f++) {
- FontInfo fontInfo = fonts.get(f);
-
- // need to check that the font can display the character. We test
- // differently if the char is a high surrogate.
- int charCount = Character.isHighSurrogate(text[i]) ? 2 : 1;
- upTo = fontInfo.mFont.canDisplayUpTo(text, i, i + charCount);
- if (upTo == -1) {
- // draw that char
- graphics.setFont(fontInfo.mFont);
- graphics.drawChars(text, i, charCount, (int)x, (int)y);
-
- // update x
- x += fontInfo.mMetrics.charsWidth(text, i, charCount);
-
- // update the index in the text, and move on
- i += charCount;
- foundFont = true;
- break;
-
- }
- }
-
- // in case no font can display the char, display it with the main font.
- // (it'll put a square probably)
- if (foundFont == false) {
- int charCount = Character.isHighSurrogate(text[i]) ? 2 : 1;
-
- graphics.setFont(mainFont.mFont);
- graphics.drawChars(text, i, charCount, (int)x, (int)y);
-
- // measure it to advance x
- x += mainFont.mMetrics.charsWidth(text, i, charCount);
-
- // and move to the next chars.
- i += charCount;
- }
- }
- }
+ new BidiRenderer(graphics, paintDelegate, text).renderText(
+ index, limit, isRtl, null, 0, true, x, startY);
}
});
}
@LayoutlibDelegate
/*package*/ static void native_drawText(int nativeCanvas, String text,
- int start, int end, float x, float y, int flags, int paint) {
+ int start, int end, float x, float y, final int flags, int paint) {
int count = end - start;
char[] buffer = TemporaryBuffer.obtain(count);
TextUtils.getChars(text, start, end, buffer, 0);
diff --git a/tools/layoutlib/bridge/src/android/graphics/Paint_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/Paint_Delegate.java
index c9c9800..41953ed 100644
--- a/tools/layoutlib/bridge/src/android/graphics/Paint_Delegate.java
+++ b/tools/layoutlib/bridge/src/android/graphics/Paint_Delegate.java
@@ -32,7 +32,6 @@
import java.awt.Toolkit;
import java.awt.font.FontRenderContext;
import java.awt.geom.AffineTransform;
-import java.awt.geom.Rectangle2D;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@@ -576,7 +575,7 @@
return 0;
}
- return delegate.measureText(text, index, count, bidiFlags);
+ return delegate.measureText(text, index, count, isRtl(bidiFlags));
}
@LayoutlibDelegate
@@ -615,7 +614,7 @@
}
// measure from start to end
- float res = delegate.measureText(text, start, end - start + 1, bidiFlags);
+ float res = delegate.measureText(text, start, end - start + 1, isRtl(bidiFlags));
if (measuredWidth != null) {
measuredWidth[measureIndex] = res;
@@ -980,51 +979,27 @@
/*package*/ static float native_getTextRunAdvances(int native_object,
char[] text, int index, int count, int contextIndex, int contextCount,
int flags, float[] advances, int advancesIndex) {
+
+ if (advances != null)
+ for (int i = advancesIndex; i< advancesIndex+count; i++)
+ advances[i]=0;
// get the delegate from the native int.
Paint_Delegate delegate = sManager.getDelegate(native_object);
- if (delegate == null) {
+ if (delegate == null || delegate.mFonts == null || delegate.mFonts.size() == 0) {
return 0.f;
}
+ boolean isRtl = isRtl(flags);
- if (delegate.mFonts.size() > 0) {
- // FIXME: handle multi-char characters (see measureText)
- float totalAdvance = 0;
- for (int i = 0; i < count; i++) {
- char c = text[i + index];
- boolean found = false;
- for (FontInfo info : delegate.mFonts) {
- if (info.mFont.canDisplay(c)) {
- float adv = info.mMetrics.charWidth(c);
- totalAdvance += adv;
- if (advances != null) {
- advances[i] = adv;
- }
-
- found = true;
- break;
- }
- }
-
- if (found == false) {
- // no advance for this char.
- if (advances != null) {
- advances[i] = 0.f;
- }
- }
- }
-
- return totalAdvance;
- }
-
- return 0;
-
+ int limit = index + count;
+ return new BidiRenderer(null, delegate, text).renderText(
+ index, limit, isRtl, advances, advancesIndex, false, 0, 0);
}
@LayoutlibDelegate
/*package*/ static float native_getTextRunAdvances(int native_object,
String text, int start, int end, int contextStart, int contextEnd,
int flags, float[] advances, int advancesIndex) {
- // FIXME: support contextStart, contextEnd and direction flag
+ // FIXME: support contextStart and contextEnd
int count = end - start;
char[] buffer = TemporaryBuffer.obtain(count);
TextUtils.getChars(text, start, end, buffer, 0);
@@ -1080,19 +1055,12 @@
// get the delegate from the native int.
Paint_Delegate delegate = sManager.getDelegate(nativePaint);
- if (delegate == null) {
+ if (delegate == null || delegate.mFonts == null || delegate.mFonts.size() == 0) {
return;
}
-
- // FIXME should test if the main font can display all those characters.
- // See MeasureText
- if (delegate.mFonts.size() > 0) {
- FontInfo mainInfo = delegate.mFonts.get(0);
-
- Rectangle2D rect = mainInfo.mFont.getStringBounds(text, index, index + count,
- delegate.mFontContext);
- bounds.set(0, 0, (int) rect.getWidth(), (int) rect.getHeight());
- }
+ int w = (int) delegate.measureText(text, index, count, isRtl(bidiFlags));
+ int h= delegate.getFonts().get(0).mMetrics.getHeight();
+ bounds.set(0, 0, w, h);
}
@LayoutlibDelegate
@@ -1176,6 +1144,7 @@
info.mFont = info.mFont.deriveFont(new AffineTransform(
mTextScaleX, mTextSkewX, 0, 1, 0, 0));
}
+ // The metrics here don't have anti-aliasing set.
info.mMetrics = Toolkit.getDefaultToolkit().getFontMetrics(info.mFont);
infoList.add(info);
@@ -1185,64 +1154,9 @@
}
}
- /*package*/ float measureText(char[] text, int index, int count, int bidiFlags) {
- // TODO: find out what bidiFlags actually does.
-
- // WARNING: the logic in this method is similar to Canvas_Delegate.native_drawText
- // Any change to this method should be reflected there as well
-
- if (mFonts.size() > 0) {
- FontInfo mainFont = mFonts.get(0);
- int i = index;
- int lastIndex = index + count;
- float total = 0f;
- while (i < lastIndex) {
- // always start with the main font.
- int upTo = mainFont.mFont.canDisplayUpTo(text, i, lastIndex);
- if (upTo == -1) {
- // shortcut to exit
- return total + mainFont.mMetrics.charsWidth(text, i, lastIndex - i);
- } else if (upTo > 0) {
- total += mainFont.mMetrics.charsWidth(text, i, upTo - i);
- i = upTo;
- // don't call continue at this point. Since it is certain the main font
- // cannot display the font a index upTo (now ==i), we move on to the
- // fallback fonts directly.
- }
-
- // no char supported, attempt to read the next char(s) with the
- // fallback font. In this case we only test the first character
- // and then go back to test with the main font.
- // Special test for 2-char characters.
- boolean foundFont = false;
- for (int f = 1 ; f < mFonts.size() ; f++) {
- FontInfo fontInfo = mFonts.get(f);
-
- // need to check that the font can display the character. We test
- // differently if the char is a high surrogate.
- int charCount = Character.isHighSurrogate(text[i]) ? 2 : 1;
- upTo = fontInfo.mFont.canDisplayUpTo(text, i, i + charCount);
- if (upTo == -1) {
- total += fontInfo.mMetrics.charsWidth(text, i, charCount);
- i += charCount;
- foundFont = true;
- break;
-
- }
- }
-
- // in case no font can display the char, measure it with the main font.
- if (foundFont == false) {
- int size = Character.isHighSurrogate(text[i]) ? 2 : 1;
- total += mainFont.mMetrics.charsWidth(text, i, size);
- i += size;
- }
- }
-
- return total;
- }
-
- return 0;
+ /*package*/ float measureText(char[] text, int index, int count, boolean isRtl) {
+ return new BidiRenderer(null, this, text).renderText(
+ index, index + count, isRtl, null, 0, false, 0, 0);
}
private float getFontMetrics(FontMetrics metrics) {
@@ -1281,4 +1195,14 @@
}
}
+ private static boolean isRtl(int flag) {
+ switch(flag) {
+ case Paint.BIDI_RTL:
+ case Paint.BIDI_FORCE_RTL:
+ case Paint.BIDI_DEFAULT_RTL:
+ return true;
+ default:
+ return false;
+ }
+ }
}
diff --git a/tools/layoutlib/bridge/src/android/text/AndroidBidi_Delegate.java b/tools/layoutlib/bridge/src/android/text/AndroidBidi_Delegate.java
index 52b8f34..973fa0e 100644
--- a/tools/layoutlib/bridge/src/android/text/AndroidBidi_Delegate.java
+++ b/tools/layoutlib/bridge/src/android/text/AndroidBidi_Delegate.java
@@ -16,7 +16,10 @@
package android.text;
+import com.android.ide.common.rendering.api.LayoutLog;
+import com.android.layoutlib.bridge.Bridge;
import com.android.tools.layoutlib.annotations.LayoutlibDelegate;
+import com.ibm.icu.text.Bidi;
/**
@@ -29,9 +32,29 @@
public class AndroidBidi_Delegate {
@LayoutlibDelegate
- /*package*/ static int runBidi(int dir, char[] chs, byte[] chInfo, int n, boolean haveInfo) {
- // return the equivalent of Layout.DIR_LEFT_TO_RIGHT
- // TODO: actually figure the direction.
- return 0;
+ /*package*/ static int runBidi(int dir, char[] chars, byte[] charInfo, int count,
+ boolean haveInfo) {
+
+ switch (dir) {
+ case 0: // Layout.DIR_REQUEST_LTR
+ case 1: // Layout.DIR_REQUEST_RTL
+ break; // No change.
+ case -1:
+ dir = Bidi.LEVEL_DEFAULT_LTR;
+ break;
+ case -2:
+ dir = Bidi.LEVEL_DEFAULT_RTL;
+ break;
+ default:
+ // Invalid code. Log error, assume LEVEL_DEFAULT_LTR and continue.
+ Bridge.getLog().error(LayoutLog.TAG_BROKEN, "Invalid direction flag", null);
+ dir = Bidi.LEVEL_DEFAULT_LTR;
+ }
+ Bidi bidi = new Bidi(chars, 0, null, 0, count, dir);
+ if (charInfo != null) {
+ for (int i = 0; i < count; ++i)
+ charInfo[i] = bidi.getLevelAt(i);
+ }
+ return bidi.getParaLevel();
}
}
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/Bridge.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/Bridge.java
index 42257c5..ab4be71 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/Bridge.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/Bridge.java
@@ -35,6 +35,7 @@
import com.android.tools.layoutlib.create.MethodAdapter;
import com.android.tools.layoutlib.create.OverrideMethod;
import com.android.util.Pair;
+import com.ibm.icu.util.ULocale;
import android.content.res.BridgeAssetManager;
import android.graphics.Bitmap;
@@ -64,6 +65,8 @@
*/
public final class Bridge extends com.android.ide.common.rendering.api.Bridge {
+ private static final String ICU_LOCALE_DIRECTION_RTL = "right-to-left";
+
public static class StaticMethodNotImplementedException extends RuntimeException {
private static final long serialVersionUID = 1L;
@@ -211,7 +214,8 @@
Capability.ANIMATED_VIEW_MANIPULATION,
Capability.ADAPTER_BINDING,
Capability.EXTENDED_VIEWINFO,
- Capability.FIXED_SCALABLE_NINE_PATCH);
+ Capability.FIXED_SCALABLE_NINE_PATCH,
+ Capability.RTL);
BridgeAssetManager.initSystem();
@@ -411,6 +415,20 @@
throw new IllegalArgumentException("viewObject is not a View");
}
+ @Override
+ public boolean isRtl(String locale) {
+ return isLocaleRtl(locale);
+ }
+
+ public static boolean isLocaleRtl(String locale) {
+ if (locale == null) {
+ locale = "";
+ }
+ ULocale uLocale = new ULocale(locale);
+ return uLocale.getCharacterOrientation().equals(ICU_LOCALE_DIRECTION_RTL) ?
+ true : false;
+ }
+
/**
* Returns the lock for the bridge
*/
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 d63dcac..a1f2697 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
@@ -132,7 +132,8 @@
RenderResources renderResources,
IProjectCallback projectCallback,
Configuration config,
- int targetSdkVersion) {
+ int targetSdkVersion,
+ boolean hasRtlSupport) {
mProjectKey = projectKey;
mMetrics = metrics;
mProjectCallback = projectCallback;
@@ -142,6 +143,9 @@
mApplicationInfo = new ApplicationInfo();
mApplicationInfo.targetSdkVersion = targetSdkVersion;
+ if (hasRtlSupport) {
+ mApplicationInfo.flags = mApplicationInfo.flags | ApplicationInfo.FLAG_SUPPORTS_RTL;
+ }
mWindowManager = new WindowManagerImpl(mMetrics);
}
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 ea9d8d9..17b0eb6 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
@@ -25,6 +25,7 @@
import com.android.layoutlib.bridge.impl.ParserFactory;
import com.android.layoutlib.bridge.impl.ResourceHelper;
import com.android.resources.Density;
+import com.android.resources.LayoutDirection;
import com.android.resources.ResourceType;
import org.xmlpull.v1.XmlPullParser;
@@ -86,38 +87,53 @@
}
}
- private InputStream getIcon(String iconName, Density[] densityInOut, String[] pathOut,
- boolean tryOtherDensities) {
+ private InputStream getIcon(String iconName, Density[] densityInOut, LayoutDirection direction,
+ String[] pathOut, boolean tryOtherDensities) {
// current density
Density density = densityInOut[0];
// bitmap url relative to this class
- pathOut[0] = "/bars/" + density.getResourceValue() + "/" + iconName;
+ if (direction != null) {
+ pathOut[0] = "/bars/" + direction.getResourceValue() + "-" + density.getResourceValue()
+ + "/" + iconName;
+ } else {
+ pathOut[0] = "/bars/" + density.getResourceValue() + "/" + iconName;
+ }
InputStream stream = getClass().getResourceAsStream(pathOut[0]);
if (stream == null && tryOtherDensities) {
for (Density d : Density.values()) {
if (d != density) {
densityInOut[0] = d;
- stream = getIcon(iconName, densityInOut, pathOut, false /*tryOtherDensities*/);
+ stream = getIcon(iconName, densityInOut, direction, pathOut,
+ false /*tryOtherDensities*/);
if (stream != null) {
return stream;
}
}
}
+ // couldn't find resource with direction qualifier. try without.
+ if (direction != null) {
+ return getIcon(iconName, densityInOut, null, pathOut, true);
+ }
}
return stream;
}
protected void loadIcon(int index, String iconName, Density density) {
+ loadIcon(index, iconName, density, false);
+ }
+
+ protected void loadIcon(int index, String iconName, Density density, boolean isRtl) {
View child = getChildAt(index);
if (child instanceof ImageView) {
ImageView imageView = (ImageView) child;
String[] pathOut = new String[1];
Density[] densityInOut = new Density[] { density };
- InputStream stream = getIcon(iconName, densityInOut, pathOut,
+ LayoutDirection dir = isRtl ? LayoutDirection.RTL : LayoutDirection.LTR;
+ InputStream stream = getIcon(iconName, densityInOut, dir, pathOut,
true /*tryOtherDensities*/);
density = densityInOut[0];
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/NavigationBar.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/NavigationBar.java
index cc90d6b..84e676e 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/NavigationBar.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/NavigationBar.java
@@ -17,6 +17,7 @@
package com.android.layoutlib.bridge.bars;
import com.android.resources.Density;
+import com.android.layoutlib.bridge.Bridge;
import org.xmlpull.v1.XmlPullParserException;
@@ -26,7 +27,8 @@
public class NavigationBar extends CustomBar {
- public NavigationBar(Context context, Density density, int orientation) throws XmlPullParserException {
+ public NavigationBar(Context context, Density density, int orientation, boolean isRtl,
+ boolean rtlEnabled) throws XmlPullParserException {
super(context, density, orientation, "/bars/navigation_bar.xml", "navigation_bar.xml");
setBackgroundColor(0xFF000000);
@@ -37,14 +39,15 @@
// 0 is a spacer.
int back = 1;
int recent = 3;
- if (orientation == LinearLayout.VERTICAL) {
+ if (orientation == LinearLayout.VERTICAL || (isRtl && !rtlEnabled)) {
+ // If RTL is enabled, then layoutlib mirrors the layout for us.
back = 3;
recent = 1;
}
- loadIcon(back, "ic_sysbar_back.png", density);
- loadIcon(2, "ic_sysbar_home.png", density);
- loadIcon(recent, "ic_sysbar_recent.png", density);
+ loadIcon(back, "ic_sysbar_back.png", density, isRtl);
+ loadIcon(2, "ic_sysbar_home.png", density, isRtl);
+ loadIcon(recent, "ic_sysbar_recent.png", density, isRtl);
}
@Override
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/StatusBar.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/StatusBar.java
index 5c08412..baa956d 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/StatusBar.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/StatusBar.java
@@ -30,7 +30,10 @@
public class StatusBar extends CustomBar {
- public StatusBar(Context context, Density density) throws XmlPullParserException {
+ public StatusBar(Context context, Density density, int direction, boolean RtlEnabled)
+ throws XmlPullParserException {
+ // FIXME: if direction is RTL but it's not enabled in application manifest, mirror this bar.
+
super(context, density, LinearLayout.HORIZONTAL, "/bars/status_bar.xml", "status_bar.xml");
// FIXME: use FILL_H?
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/FontLoader.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/FontLoader.java
index 081ce67..108b651 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/FontLoader.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/FontLoader.java
@@ -52,6 +52,8 @@
private static final String NODE_NAME = "name";
private static final String NODE_FILE = "file";
+ private static final String ATTRIBUTE_VARIANT = "variant";
+ private static final String ATTRIBUTE_VALUE_ELEGANT = "elegant";
private static final String FONT_SUFFIX_NONE = ".ttf";
private static final String FONT_SUFFIX_REGULAR = "-Regular.ttf";
private static final String FONT_SUFFIX_BOLD = "-Bold.ttf";
@@ -189,6 +191,7 @@
private FontInfo mFontInfo = null;
private final StringBuilder mBuilder = new StringBuilder();
private List<FontInfo> mFontList = new ArrayList<FontInfo>();
+ private boolean isCompactFont = true;
private FontHandler(String osFontsLocation) {
super();
@@ -209,8 +212,21 @@
mFontList = new ArrayList<FontInfo>();
} else if (NODE_FAMILY.equals(localName)) {
if (mFontList != null) {
+ mFontInfo = null;
+ }
+ } else if (NODE_NAME.equals(localName)) {
+ if (mFontList != null && mFontInfo == null) {
mFontInfo = new FontInfo();
}
+ } else if (NODE_FILE.equals(localName)) {
+ if (mFontList != null && mFontInfo == null) {
+ mFontInfo = new FontInfo();
+ }
+ if (ATTRIBUTE_VALUE_ELEGANT.equals(attributes.getValue(ATTRIBUTE_VARIANT))) {
+ isCompactFont = false;
+ } else {
+ isCompactFont = true;
+ }
}
mBuilder.setLength(0);
@@ -223,7 +239,9 @@
*/
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
- mBuilder.append(ch, start, length);
+ if (isCompactFont) {
+ mBuilder.append(ch, start, length);
+ }
}
/* (non-Javadoc)
@@ -259,7 +277,7 @@
}
} else if (NODE_FILE.equals(localName)) {
// handle a new file for an existing Font Info
- if (mFontInfo != null) {
+ if (isCompactFont && mFontInfo != null) {
String fileName = trimXmlWhitespaces(mBuilder.toString());
Font font = getFont(fileName);
if (font != null) {
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/RenderAction.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/RenderAction.java
index b909bec..87047b3 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/RenderAction.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/RenderAction.java
@@ -121,7 +121,8 @@
// build the context
mContext = new BridgeContext(mParams.getProjectKey(), metrics, resources,
- mParams.getProjectCallback(), getConfiguration(), mParams.getTargetSdkVersion());
+ mParams.getProjectCallback(), getConfiguration(), mParams.getTargetSdkVersion(),
+ mParams.isRtlSupported());
setUp();
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/RenderSessionImpl.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/RenderSessionImpl.java
index 6011fdb..57771e3 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/RenderSessionImpl.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/RenderSessionImpl.java
@@ -224,13 +224,15 @@
SessionParams params = getParams();
HardwareConfig hardwareConfig = params.getHardwareConfig();
BridgeContext context = getContext();
-
+ boolean isRtl = Bridge.isLocaleRtl(params.getLocale());
+ int direction = isRtl ? View.LAYOUT_DIRECTION_RTL : View.LAYOUT_DIRECTION_LTR;
// the view group that receives the window background.
ViewGroup backgroundView = null;
if (mWindowIsFloating || params.isForceNoDecor()) {
backgroundView = mViewRoot = mContentRoot = new FrameLayout(context);
+ mViewRoot.setLayoutDirection(direction);
} else {
if (hasSoftwareButtons() && mNavigationBarOrientation == LinearLayout.VERTICAL) {
/*
@@ -252,12 +254,14 @@
the bottom
*/
LinearLayout topLayout = new LinearLayout(context);
+ topLayout.setLayoutDirection(direction);
mViewRoot = topLayout;
topLayout.setOrientation(LinearLayout.HORIZONTAL);
try {
NavigationBar navigationBar = new NavigationBar(context,
- hardwareConfig.getDensity(), LinearLayout.VERTICAL);
+ hardwareConfig.getDensity(), LinearLayout.VERTICAL, isRtl,
+ params.isRtlSupported());
navigationBar.setLayoutParams(
new LinearLayout.LayoutParams(
mNavigationBarSize,
@@ -289,6 +293,7 @@
LinearLayout topLayout = new LinearLayout(context);
topLayout.setOrientation(LinearLayout.VERTICAL);
+ topLayout.setLayoutDirection(direction);
// if we don't already have a view root this is it
if (mViewRoot == null) {
mViewRoot = topLayout;
@@ -300,13 +305,22 @@
// this is the case of soft buttons + vertical bar.
// this top layout is the first layout in the horizontal layout. see above)
- mViewRoot.addView(topLayout, 0);
+ if (isRtl && params.isRtlSupported()) {
+ // If RTL is enabled, layoutlib will mirror the layouts. So, add the
+ // topLayout to the right of Navigation Bar and layoutlib will draw it
+ // to the left.
+ mViewRoot.addView(topLayout);
+ } else {
+ // Add the top layout to the left of the Navigation Bar.
+ mViewRoot.addView(topLayout, 0);
+ }
}
if (mStatusBarSize > 0) {
// system bar
try {
- StatusBar systemBar = new StatusBar(context, hardwareConfig.getDensity());
+ StatusBar systemBar = new StatusBar(context, hardwareConfig.getDensity(),
+ direction, params.isRtlSupported());
systemBar.setLayoutParams(
new LinearLayout.LayoutParams(
LayoutParams.MATCH_PARENT, mStatusBarSize));
@@ -365,7 +379,8 @@
// system bar
try {
NavigationBar navigationBar = new NavigationBar(context,
- hardwareConfig.getDensity(), LinearLayout.HORIZONTAL);
+ hardwareConfig.getDensity(), LinearLayout.HORIZONTAL, isRtl,
+ params.isRtlSupported());
navigationBar.setLayoutParams(
new LinearLayout.LayoutParams(
LayoutParams.MATCH_PARENT, mNavigationBarSize));
diff --git a/wifi/java/android/net/wifi/WifiConfigStore.java b/wifi/java/android/net/wifi/WifiConfigStore.java
index 4baab1f..ea7904c 100644
--- a/wifi/java/android/net/wifi/WifiConfigStore.java
+++ b/wifi/java/android/net/wifi/WifiConfigStore.java
@@ -680,9 +680,15 @@
}
config.ipAssignment = IpAssignment.DHCP;
config.proxySettings = ProxySettings.NONE;
- mConfiguredNetworks.put(config.networkId, config);
- mNetworkIds.put(configKey(config), config.networkId);
- localLog("loaded configured network", config.networkId);
+
+ if (mNetworkIds.containsKey(configKey(config))) {
+ // That SSID is already known, just ignore this duplicate entry
+ localLog("discarded duplicate network", config.networkId);
+ } else {
+ mConfiguredNetworks.put(config.networkId, config);
+ mNetworkIds.put(configKey(config), config.networkId);
+ localLog("loaded configured network", config.networkId);
+ }
}
readIpAndProxyConfigurations();
diff --git a/wifi/java/android/net/wifi/WifiStateMachine.java b/wifi/java/android/net/wifi/WifiStateMachine.java
index d4e98c5..3ccdbea 100644
--- a/wifi/java/android/net/wifi/WifiStateMachine.java
+++ b/wifi/java/android/net/wifi/WifiStateMachine.java
@@ -51,6 +51,7 @@
import android.net.NetworkInfo;
import android.net.NetworkInfo.DetailedState;
import android.net.NetworkUtils;
+import android.net.RouteInfo;
import android.net.wifi.WpsResult.Status;
import android.net.wifi.p2p.WifiP2pManager;
import android.net.wifi.p2p.WifiP2pService;
@@ -79,9 +80,12 @@
import com.android.internal.util.State;
import com.android.internal.util.StateMachine;
+import com.android.server.net.BaseNetworkObserver;
+
import java.io.FileDescriptor;
import java.io.PrintWriter;
import java.net.InetAddress;
+import java.net.Inet6Address;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
@@ -198,8 +202,19 @@
/* Tracks sequence number on a driver time out */
private int mDriverStartToken = 0;
+ /**
+ * The link properties of the wifi interface.
+ * Do not modify this directly; use updateLinkProperties instead.
+ */
private LinkProperties mLinkProperties;
+ /**
+ * Subset of link properties coming from netlink.
+ * Currently includes IPv4 and IPv6 addresses. In the future will also include IPv6 DNS servers
+ * and domains obtained from router advertisements (RFC 6106).
+ */
+ private final LinkProperties mNetlinkLinkProperties;
+
/* Tracks sequence number on a periodic scan message */
private int mPeriodicScanToken = 0;
@@ -215,6 +230,39 @@
private SupplicantStateTracker mSupplicantStateTracker;
private DhcpStateMachine mDhcpStateMachine;
+ private class InterfaceObserver extends BaseNetworkObserver {
+ private WifiStateMachine mWifiStateMachine;
+
+ InterfaceObserver(WifiStateMachine wifiStateMachine) {
+ super();
+ mWifiStateMachine = wifiStateMachine;
+ }
+
+ @Override
+ public void addressUpdated(String address, String iface, int flags, int scope) {
+ if (mWifiStateMachine.mInterfaceName.equals(iface)) {
+ if (DBG) {
+ log("addressUpdated: " + address + " on " + iface +
+ " flags " + flags + " scope " + scope);
+ }
+ mWifiStateMachine.sendMessage(CMD_IP_ADDRESS_UPDATED, new LinkAddress(address));
+ }
+ }
+
+ @Override
+ public void addressRemoved(String address, String iface, int flags, int scope) {
+ if (mWifiStateMachine.mInterfaceName.equals(iface)) {
+ if (DBG) {
+ log("addressRemoved: " + address + " on " + iface +
+ " flags " + flags + " scope " + scope);
+ }
+ mWifiStateMachine.sendMessage(CMD_IP_ADDRESS_REMOVED, new LinkAddress(address));
+ }
+ }
+ }
+
+ private InterfaceObserver mInterfaceObserver;
+
private AlarmManager mAlarmManager;
private PendingIntent mScanIntent;
private PendingIntent mDriverStopIntent;
@@ -372,6 +420,12 @@
public static final int CMD_START_NEXT_BATCHED_SCAN = BASE + 136;
public static final int CMD_POLL_BATCHED_SCAN = BASE + 137;
+ /* Link configuration (IP address, DNS, ...) changes */
+ /* An new IP address was added to our interface, or an existing IP address was updated */
+ static final int CMD_IP_ADDRESS_UPDATED = BASE + 140;
+ /* An IP address was removed from our interface */
+ static final int CMD_IP_ADDRESS_REMOVED = BASE + 141;
+
public static final int CONNECT_MODE = 1;
public static final int SCAN_ONLY_MODE = 2;
public static final int SCAN_ONLY_WITH_WIFI_OFF_MODE = 3;
@@ -585,15 +639,22 @@
mSupplicantStateTracker = new SupplicantStateTracker(context, this, mWifiConfigStore,
getHandler());
mLinkProperties = new LinkProperties();
+ mNetlinkLinkProperties = new LinkProperties();
mWifiP2pManager = (WifiP2pManager) mContext.getSystemService(Context.WIFI_P2P_SERVICE);
mNetworkInfo.setIsAvailable(false);
- mLinkProperties.clear();
mLastBssid = null;
mLastNetworkId = WifiConfiguration.INVALID_NETWORK_ID;
mLastSignalLevel = -1;
+ mInterfaceObserver = new InterfaceObserver(this);
+ try {
+ mNwService.registerObserver(mInterfaceObserver);
+ } catch (RemoteException e) {
+ loge("Couldn't register interface observer: " + e.toString());
+ }
+
mAlarmManager = (AlarmManager)mContext.getSystemService(Context.ALARM_SERVICE);
Intent scanIntent = new Intent(ACTION_START_SCAN, null);
mScanIntent = PendingIntent.getBroadcast(mContext, SCAN_REQUEST, scanIntent, 0);
@@ -1906,19 +1967,82 @@
}
}
- private void configureLinkProperties() {
- if (mWifiConfigStore.isUsingStaticIp(mLastNetworkId)) {
- mLinkProperties = mWifiConfigStore.getLinkProperties(mLastNetworkId);
- } else {
- synchronized (mDhcpResultsLock) {
- if ((mDhcpResults != null) && (mDhcpResults.linkProperties != null)) {
- mLinkProperties = mDhcpResults.linkProperties;
+ /**
+ * Updates mLinkProperties by merging information from various sources.
+ *
+ * This is needed because the information in mLinkProperties comes from multiple sources (DHCP,
+ * netlink, static configuration, ...). When one of these sources of information has updated
+ * link properties, we can't just assign them to mLinkProperties or we'd lose track of the
+ * information that came from other sources. Instead, when one of those sources has new
+ * information, we update the object that tracks the information from that source and then
+ * call this method to apply the change to mLinkProperties.
+ *
+ * The information in mLinkProperties is currently obtained as follows:
+ * - Interface name: set in the constructor.
+ * - IPv4 and IPv6 addresses: netlink, via mInterfaceObserver.
+ * - IPv4 routes, DNS servers, and domains: DHCP.
+ * - HTTP proxy: the wifi config store.
+ */
+ private void updateLinkProperties() {
+ LinkProperties newLp = new LinkProperties();
+
+ // Interface name and proxy are locally configured.
+ newLp.setInterfaceName(mInterfaceName);
+ newLp.setHttpProxy(mWifiConfigStore.getProxyProperties(mLastNetworkId));
+
+ // IPv4 and IPv6 addresses come from netlink.
+ newLp.setLinkAddresses(mNetlinkLinkProperties.getLinkAddresses());
+
+ // For now, routing and DNS only come from DHCP or static configuration. In the future,
+ // we'll need to merge IPv6 DNS servers and domains coming from netlink.
+ synchronized (mDhcpResultsLock) {
+ // Even when we're using static configuration, we don't need to look at the config
+ // store, because static IP configuration also populates mDhcpResults.
+ if ((mDhcpResults != null) && (mDhcpResults.linkProperties != null)) {
+ LinkProperties lp = mDhcpResults.linkProperties;
+ for (RouteInfo route: lp.getRoutes()) {
+ newLp.addRoute(route);
}
+ for (InetAddress dns: lp.getDnses()) {
+ newLp.addDns(dns);
+ }
+ newLp.setDomains(lp.getDomains());
}
- mLinkProperties.setHttpProxy(mWifiConfigStore.getProxyProperties(mLastNetworkId));
}
- mLinkProperties.setInterfaceName(mInterfaceName);
- if (DBG) log("netId=" + mLastNetworkId + " Link configured: " + mLinkProperties);
+
+ // If anything has changed, and we're already connected, send out a notification.
+ // If we're still connecting, apps will be notified when we connect.
+ if (!newLp.equals(mLinkProperties)) {
+ if (DBG) {
+ log("Link configuration changed for netId: " + mLastNetworkId
+ + " old: " + mLinkProperties + "new: " + newLp);
+ }
+ mLinkProperties = newLp;
+ if (getNetworkDetailedState() == DetailedState.CONNECTED) {
+ sendLinkConfigurationChangedBroadcast();
+ }
+ }
+ }
+
+ /**
+ * Clears all our link properties.
+ */
+ private void clearLinkProperties() {
+ // If the network used DHCP, clear the LinkProperties we stored in the config store.
+ if (!mWifiConfigStore.isUsingStaticIp(mLastNetworkId)) {
+ mWifiConfigStore.clearLinkProperties(mLastNetworkId);
+ }
+
+ // Clear the link properties obtained from DHCP and netlink.
+ synchronized(mDhcpResultsLock) {
+ if (mDhcpResults != null && mDhcpResults.linkProperties != null) {
+ mDhcpResults.linkProperties.clear();
+ }
+ }
+ mNetlinkLinkProperties.clear();
+
+ // Now clear the merged link properties.
+ mLinkProperties.clear();
}
private int getMaxDhcpRetries() {
@@ -2041,16 +2165,11 @@
mWifiConfigStore.updateStatus(mLastNetworkId, DetailedState.DISCONNECTED);
/* Clear network properties */
- mLinkProperties.clear();
+ clearLinkProperties();
/* send event to CM & network change broadcast */
sendNetworkStateChangeBroadcast(mLastBssid);
- /* Clear IP settings if the network used DHCP */
- if (!mWifiConfigStore.isUsingStaticIp(mLastNetworkId)) {
- mWifiConfigStore.clearLinkProperties(mLastNetworkId);
- }
-
mLastBssid= null;
mLastNetworkId = WifiConfiguration.INVALID_NETWORK_ID;
}
@@ -2149,20 +2268,7 @@
}
mWifiInfo.setInetAddress(addr);
mWifiInfo.setMeteredHint(dhcpResults.hasMeteredHint());
- if (getNetworkDetailedState() == DetailedState.CONNECTED) {
- //DHCP renewal in connected state
- linkProperties.setHttpProxy(mWifiConfigStore.getProxyProperties(mLastNetworkId));
- if (!linkProperties.equals(mLinkProperties)) {
- if (DBG) {
- log("Link configuration changed for netId: " + mLastNetworkId
- + " old: " + mLinkProperties + "new: " + linkProperties);
- }
- mLinkProperties = linkProperties;
- sendLinkConfigurationChangedBroadcast();
- }
- } else {
- configureLinkProperties();
- }
+ updateLinkProperties();
}
private void handleFailedIpConfiguration() {
@@ -2387,6 +2493,17 @@
mTemporarilyDisconnectWifi = (message.arg1 == 1);
replyToMessage(message, WifiP2pService.DISCONNECT_WIFI_RESPONSE);
break;
+ case CMD_IP_ADDRESS_UPDATED:
+ // addLinkAddress is a no-op if called more than once with the same address.
+ if (mNetlinkLinkProperties.addLinkAddress((LinkAddress) message.obj)) {
+ updateLinkProperties();
+ }
+ break;
+ case CMD_IP_ADDRESS_REMOVED:
+ if (mNetlinkLinkProperties.removeLinkAddress((LinkAddress) message.obj)) {
+ updateLinkProperties();
+ }
+ break;
default:
loge("Error! unhandled message" + message);
break;
@@ -3405,8 +3522,7 @@
}
if (result.hasProxyChanged()) {
log("Reconfiguring proxy on connection");
- configureLinkProperties();
- sendLinkConfigurationChangedBroadcast();
+ updateLinkProperties();
}
}
@@ -3460,13 +3576,14 @@
@Override
public void enter() {
if (!mWifiConfigStore.isUsingStaticIp(mLastNetworkId)) {
+ // TODO: If we're switching between static IP configuration and DHCP, remove the
+ // static configuration first.
startDhcp();
} else {
// stop any running dhcp before assigning static IP
stopDhcp();
DhcpResults dhcpResults = new DhcpResults(
mWifiConfigStore.getLinkProperties(mLastNetworkId));
- dhcpResults.linkProperties.setInterfaceName(mInterfaceName);
InterfaceConfiguration ifcg = new InterfaceConfiguration();
Iterator<LinkAddress> addrs =
dhcpResults.linkProperties.getLinkAddresses().iterator();
diff --git a/wifi/java/android/net/wifi/WifiStateTracker.java b/wifi/java/android/net/wifi/WifiStateTracker.java
index 62630d6..615c893 100644
--- a/wifi/java/android/net/wifi/WifiStateTracker.java
+++ b/wifi/java/android/net/wifi/WifiStateTracker.java
@@ -22,12 +22,12 @@
import android.content.IntentFilter;
import android.net.BaseNetworkStateTracker;
import android.net.LinkCapabilities;
-import android.net.LinkInfo;
+import android.net.LinkQualityInfo;
import android.net.LinkProperties;
import android.net.NetworkInfo;
import android.net.NetworkInfo.DetailedState;
import android.net.SamplingDataTracker;
-import android.net.WifiLinkInfo;
+import android.net.WifiLinkQualityInfo;
import android.os.Handler;
import android.os.Message;
import android.os.Messenger;
@@ -203,35 +203,35 @@
/**
* Return link info
- * @return an object of type WifiLinkInfo
+ * @return an object of type WifiLinkQualityInfo
*/
@Override
- public LinkInfo getLinkInfo() {
+ public LinkQualityInfo getLinkQualityInfo() {
if (mNetworkInfo == null) {
// no data available yet; just return
return null;
}
- WifiLinkInfo li = new WifiLinkInfo();
- li.mNetworkType = mNetworkInfo.getType();
+ WifiLinkQualityInfo li = new WifiLinkQualityInfo();
+ li.setNetworkType(mNetworkInfo.getType());
synchronized(mSamplingDataTracker.mSamplingDataLock) {
- mSamplingDataTracker.setCommonLinkInfoFields(li);
- li.mTxGood = mSamplingDataTracker.getSampledTxPacketCount();
- li.mTxBad = mSamplingDataTracker.getSampledTxPacketErrorCount();
+ mSamplingDataTracker.setCommonLinkQualityInfoFields(li);
+ li.setTxGood(mSamplingDataTracker.getSampledTxPacketCount());
+ li.setTxBad(mSamplingDataTracker.getSampledTxPacketErrorCount());
}
// li.setTheoreticalRxBandwidth(??);
// li.setTheoreticalTxBandwidth(??);
if (mWifiInfo != null) {
- li.mBssid = mWifiInfo.getBSSID();
+ li.setBssid(mWifiInfo.getBSSID());
int rssi = mWifiInfo.getRssi();
- li.mRssi = rssi;
+ li.setRssi(rssi);
- li.mNormalizedSignalStrength = mWifiManager.calculateSignalLevel(rssi,
- LinkInfo.NORMALIZED_SIGNAL_STRENGTH_RANGE);
+ li.setNormalizedSignalStrength(mWifiManager.calculateSignalLevel(rssi,
+ LinkQualityInfo.NORMALIZED_SIGNAL_STRENGTH_RANGE));
}
return li;