diff options
47 files changed, 462 insertions, 66 deletions
diff --git a/core/java/android/os/storage/IMountService.java b/core/java/android/os/storage/IMountService.java index 84a879c99562..bce5f178a996 100644 --- a/core/java/android/os/storage/IMountService.java +++ b/core/java/android/os/storage/IMountService.java @@ -1192,6 +1192,37 @@ public interface IMountService extends IInterface { _data.recycle(); } } + + @Override + public void createNewUserDir(int userHandle, String path) throws RemoteException { + Parcel _data = Parcel.obtain(); + Parcel _reply = Parcel.obtain(); + try { + _data.writeInterfaceToken(DESCRIPTOR); + _data.writeInt(userHandle); + _data.writeString(path); + mRemote.transact(Stub.TRANSACTION_createNewUserDir, _data, _reply, 0); + _reply.readException(); + } finally { + _reply.recycle(); + _data.recycle(); + } + } + + @Override + public void deleteUserKey(int userHandle) throws RemoteException { + Parcel _data = Parcel.obtain(); + Parcel _reply = Parcel.obtain(); + try { + _data.writeInterfaceToken(DESCRIPTOR); + _data.writeInt(userHandle); + mRemote.transact(Stub.TRANSACTION_deleteUserKey, _data, _reply, 0); + _reply.readException(); + } finally { + _reply.recycle(); + _data.recycle(); + } + } } private static final String DESCRIPTOR = "IMountService"; @@ -1309,6 +1340,9 @@ public interface IMountService extends IInterface { static final int TRANSACTION_remountUid = IBinder.FIRST_CALL_TRANSACTION + 61; + static final int TRANSACTION_createNewUserDir = IBinder.FIRST_CALL_TRANSACTION + 62; + static final int TRANSACTION_deleteUserKey = IBinder.FIRST_CALL_TRANSACTION + 63; + /** * Cast an IBinder object into an IMountService interface, generating a * proxy if needed. @@ -1869,6 +1903,21 @@ public interface IMountService extends IInterface { reply.writeNoException(); return true; } + case TRANSACTION_createNewUserDir: { + data.enforceInterface(DESCRIPTOR); + int userHandle = data.readInt(); + String path = data.readString(); + createNewUserDir(userHandle, path); + reply.writeNoException(); + return true; + } + case TRANSACTION_deleteUserKey: { + data.enforceInterface(DESCRIPTOR); + int userHandle = data.readInt(); + deleteUserKey(userHandle); + reply.writeNoException(); + return true; + } } return super.onTransact(code, data, reply, flags); } @@ -2180,4 +2229,19 @@ public interface IMountService extends IInterface { throws RemoteException; public void remountUid(int uid) throws RemoteException; + + /** + * Creates the user data directory, possibly encrypted + * @param userHandle Handle of the user whose directory we are creating + * @param path Path at which to create the directory. + */ + public void createNewUserDir(int userHandle, String path) + throws RemoteException; + + /** + * Securely delete the user's encryption key + * @param userHandle Handle of the user whose key we are deleting + */ + public void deleteUserKey(int userHandle) + throws RemoteException; } diff --git a/core/java/android/os/storage/StorageManager.java b/core/java/android/os/storage/StorageManager.java index f03e04e50112..f58ae009374d 100644 --- a/core/java/android/os/storage/StorageManager.java +++ b/core/java/android/os/storage/StorageManager.java @@ -946,6 +946,24 @@ public class StorageManager { } /** {@hide} */ + public void createNewUserDir(int userHandle, File path) { + try { + mMountService.createNewUserDir(userHandle, path.getAbsolutePath()); + } catch (RemoteException e) { + throw e.rethrowAsRuntimeException(); + } + } + + /** {@hide} */ + public void deleteUserKey(int userHandle) { + try { + mMountService.deleteUserKey(userHandle); + } catch (RemoteException e) { + throw e.rethrowAsRuntimeException(); + } + } + + /** {@hide} */ public static File maybeTranslateEmulatedPathToInternal(File path) { final IMountService mountService = IMountService.Stub.asInterface( ServiceManager.getService("mount")); diff --git a/core/res/res/values-az-rAZ-watch/strings.xml b/core/res/res/values-az-rAZ-watch/strings.xml new file mode 100644 index 000000000000..7e4a7620d794 --- /dev/null +++ b/core/res/res/values-az-rAZ-watch/strings.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2015, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="android_upgrading_apk" msgid="1090732262010398759">"Tətbiq <xliff:g id="NUMBER_0">%1$d</xliff:g>/<xliff:g id="NUMBER_1">%2$d</xliff:g>."</string> +</resources> diff --git a/core/res/res/values-mcc310-mnc260-az-rAZ/strings.xml b/core/res/res/values-mcc310-mnc260-az-rAZ/strings.xml new file mode 100644 index 000000000000..32d21c56fca5 --- /dev/null +++ b/core/res/res/values-mcc310-mnc260-az-rAZ/strings.xml @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +** Copyright 2015, 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 my obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + --> + +<!-- These resources are around just to allow their values to be customized + for different hardware and product builds. --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string-array name="wfcOperatorErrorAlertMessages"> + <item msgid="7239039348648848288">"Wi-Fi üzərindən zəng etmək və mesaj göndərmək üçün ilk öncə operatordan bu xidməti ayarlamağı tələb edin. Sonra Ayarlardan Wi-Fi çağrısını aktivləşdirin."</item> + </string-array> + <string-array name="wfcOperatorErrorNotificationMessages"> + <item msgid="483847327467331298">"Operatorla qeydiyyatdan keçin"</item> + </string-array> + <string name="wfcSpnFormat" msgid="4982938551498609442">"%s Wi-Fi Zəngi"</string> +</resources> diff --git a/core/res/res/values-mcc310-mnc260-de/strings.xml b/core/res/res/values-mcc310-mnc260-de/strings.xml index f357bb65118a..3994bba0c3df 100644 --- a/core/res/res/values-mcc310-mnc260-de/strings.xml +++ b/core/res/res/values-mcc310-mnc260-de/strings.xml @@ -23,10 +23,10 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string-array name="wfcOperatorErrorAlertMessages"> - <item msgid="7239039348648848288">"Um über WLAN Anrufe durchführen und Nachrichten senden zu können, bitten Sie zuerst Ihren Mobilfunkanbieter, diesen Dienst einzurichten. Aktivieren Sie WLAN-Anrufe dann erneut über die Einstellungen."</item> + <item msgid="7239039348648848288">"Um über WLAN telefonieren und Nachrichten senden zu können, bitten Sie zuerst Ihren Mobilfunkanbieter, diesen Dienst einzurichten. Aktivieren Sie die Option \"Anrufe über WLAN\" dann erneut über die Einstellungen."</item> </string-array> <string-array name="wfcOperatorErrorNotificationMessages"> <item msgid="483847327467331298">"Registrieren Sie sich bei Ihrem Mobilfunkanbieter."</item> </string-array> - <string name="wfcSpnFormat" msgid="4982938551498609442">"%s WLAN-Anrufe"</string> + <string name="wfcSpnFormat" msgid="4982938551498609442">"%s Anrufe über WLAN"</string> </resources> diff --git a/core/res/res/values-mcc310-mnc260-kn-rIN/strings.xml b/core/res/res/values-mcc310-mnc260-kn-rIN/strings.xml index f24bed092a1d..0a9d58dfc26e 100644 --- a/core/res/res/values-mcc310-mnc260-kn-rIN/strings.xml +++ b/core/res/res/values-mcc310-mnc260-kn-rIN/strings.xml @@ -23,10 +23,10 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string-array name="wfcOperatorErrorAlertMessages"> - <item msgid="7239039348648848288">"ವೈ-ಫೈ ಬಳಸಿಕೊಂಡು ಕರೆ ಮಾಡಲು ಮತ್ತು ಸಂದೇಶಗಳನ್ನು ಕಳುಹಿಸಲು, ಮೊದಲು ಈ ಸಾಧನವನ್ನು ಹೊಂದಿಸಲು ನಿಮ್ಮ ವಾಹಕವನ್ನು ಕೇಳಿ. ತದನಂತರ ಸೆಟ್ಟಿಂಗ್ಗಳಲ್ಲಿ ಮತ್ತೆ ವೈ-ಫೈ ಆನ್ ಮಾಡಿ."</item> + <item msgid="7239039348648848288">"Wi-Fi ಬಳಸಿಕೊಂಡು ಕರೆ ಮಾಡಲು ಮತ್ತು ಸಂದೇಶಗಳನ್ನು ಕಳುಹಿಸಲು, ಮೊದಲು ಈ ಸಾಧನವನ್ನು ಹೊಂದಿಸಲು ನಿಮ್ಮ ವಾಹಕವನ್ನು ಕೇಳಿ. ತದನಂತರ ಸೆಟ್ಟಿಂಗ್ಗಳಲ್ಲಿ ಮತ್ತೆ Wi-Fi ಆನ್ ಮಾಡಿ."</item> </string-array> <string-array name="wfcOperatorErrorNotificationMessages"> <item msgid="483847327467331298">"ನಿಮ್ಮ ವಾಹಕದಲ್ಲಿ ನೋಂದಾಯಿಸಿಕೊಳ್ಳಿ"</item> </string-array> - <string name="wfcSpnFormat" msgid="4982938551498609442">"%s ವೈ-ಫೈ ಕರೆ ಮಾಡುವಿಕೆ"</string> + <string name="wfcSpnFormat" msgid="4982938551498609442">"%s Wi-Fi ಕರೆ ಮಾಡುವಿಕೆ"</string> </resources> diff --git a/core/res/res/values-mcc310-mnc260-ml-rIN/strings.xml b/core/res/res/values-mcc310-mnc260-ml-rIN/strings.xml index 764b79234810..a94680d128b4 100644 --- a/core/res/res/values-mcc310-mnc260-ml-rIN/strings.xml +++ b/core/res/res/values-mcc310-mnc260-ml-rIN/strings.xml @@ -23,10 +23,10 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string-array name="wfcOperatorErrorAlertMessages"> - <item msgid="7239039348648848288">"Wi-Fi വഴി കോളുകൾ വിളിക്കാനും സന്ദേശങ്ങൾ അയയ്ക്കാനും ആദ്യം നിങ്ങളുടെ കാരിയറോട് ഈ സേവനം സജ്ജമാക്കാൻ ആവശ്യപ്പെടുക. ക്രമീകരണത്തിൽ നിന്ന് വീണ്ടും Wi-Fi കോളിംഗ് ഓണാക്കുക."</item> + <item msgid="7239039348648848288">"വൈഫൈ വഴി കോളുകൾ വിളിക്കാനും സന്ദേശങ്ങൾ അയയ്ക്കാനും ആദ്യം നിങ്ങളുടെ കാരിയറോട് ഈ സേവനം സജ്ജമാക്കാൻ ആവശ്യപ്പെടുക. ക്രമീകരണത്തിൽ നിന്ന് വീണ്ടും വൈഫൈ കോളിംഗ് ഓണാക്കുക."</item> </string-array> <string-array name="wfcOperatorErrorNotificationMessages"> <item msgid="483847327467331298">"നിങ്ങളുടെ കാരിയറിൽ രജിസ്റ്റർ ചെയ്യുക"</item> </string-array> - <string name="wfcSpnFormat" msgid="4982938551498609442">"%s Wi-Fi കോളിംഗ്"</string> + <string name="wfcSpnFormat" msgid="4982938551498609442">"%s വൈഫൈ കോളിംഗ്"</string> </resources> diff --git a/libs/hwui/thread/TaskManager.cpp b/libs/hwui/thread/TaskManager.cpp index f0ed0bbfedc1..e9dde294b2aa 100644 --- a/libs/hwui/thread/TaskManager.cpp +++ b/libs/hwui/thread/TaskManager.cpp @@ -33,7 +33,9 @@ TaskManager::TaskManager() { // Get the number of available CPUs. This value does not change over time. int cpuCount = sysconf(_SC_NPROCESSORS_CONF); - int workerCount = MathUtils::max(1, cpuCount / 2); + // Really no point in making more than 2 of these worker threads, but + // we do want to limit ourselves to 1 worker thread on dual-core devices. + int workerCount = cpuCount > 2 ? 2 : 1; for (int i = 0; i < workerCount; i++) { String8 name; name.appendFormat("hwuiTask%d", i + 1); diff --git a/packages/BackupRestoreConfirmation/res/values-fa/strings.xml b/packages/BackupRestoreConfirmation/res/values-fa/strings.xml index 4c16374ab45b..96ef731f5063 100644 --- a/packages/BackupRestoreConfirmation/res/values-fa/strings.xml +++ b/packages/BackupRestoreConfirmation/res/values-fa/strings.xml @@ -19,7 +19,7 @@ <string name="backup_confirm_title" msgid="827563724209303345">"پشتیبانگیری کامل"</string> <string name="restore_confirm_title" msgid="5469365809567486602">"بازیابی کامل"</string> <string name="backup_confirm_text" msgid="1878021282758896593">"درخواست پشتیبان گیری کامل از تمام دادهها به یک رایانه دسکتاپ متصل داده شده است. آیا میخواهید این عمل انجام شود؟\n\nاگر شما درخواست تهیهٔ نسخهٔ پشتیبان را ندادهاید، اجازه ادامه عملیات را ندهید."</string> - <string name="allow_backup_button_label" msgid="4217228747769644068">"از دادههای من نسخهٔ پشتیبان تهیه شود"</string> + <string name="allow_backup_button_label" msgid="4217228747769644068">"پشتیبانگیری از دادههای من"</string> <string name="deny_backup_button_label" msgid="6009119115581097708">"نسخهٔ پشتیبان تهیه نشود"</string> <string name="restore_confirm_text" msgid="7499866728030461776">"بازیابی کامل تمام دادهها از یک رایانه دسک تاپ متصل درخواست شده است. آیا میخواهید این اجازه را بدهید؟\n\nاگر خود شما درخواست بازیابی ندادهاید، اجازه ادامه این عملیات را ندهید. با این کار همه دادههایی که اکنون روی دستگاه است جایگزین میشود!"</string> <string name="allow_restore_button_label" msgid="3081286752277127827">"بازیابی دادههای من"</string> diff --git a/packages/BackupRestoreConfirmation/res/values-hr/strings.xml b/packages/BackupRestoreConfirmation/res/values-hr/strings.xml index 66037f34098e..cda36cbfda90 100644 --- a/packages/BackupRestoreConfirmation/res/values-hr/strings.xml +++ b/packages/BackupRestoreConfirmation/res/values-hr/strings.xml @@ -19,7 +19,7 @@ <string name="backup_confirm_title" msgid="827563724209303345">"Puna sigurnosna kopija"</string> <string name="restore_confirm_title" msgid="5469365809567486602">"Potpuno vraćanje"</string> <string name="backup_confirm_text" msgid="1878021282758896593">"Zatražena je potpuna sigurnosna kopija svih podataka na povezano stolno računalo. Želite li to dozvoliti?\n\nAko niste vi zatražili sigurnosnu kopiju, ne dozvolite nastavak te radnje."</string> - <string name="allow_backup_button_label" msgid="4217228747769644068">"Izradi sigurnosnu kopiju mojih podataka"</string> + <string name="allow_backup_button_label" msgid="4217228747769644068">"Sigurnosno kopiranje"</string> <string name="deny_backup_button_label" msgid="6009119115581097708">"Ne radi sigurnosnu kopiju"</string> <string name="restore_confirm_text" msgid="7499866728030461776">"Zatraženo je potpuno vraćanje svih podataka s povezanog stolnog računala. Želite li to dozvoliti?\n\nAko niste sami zatražili vraćanje, ne dozvolite nastavak radnje. To će zamijeniti sve podatke koji se trenutačno nalaze na uređaju!"</string> <string name="allow_restore_button_label" msgid="3081286752277127827">"Vrati moje podatke"</string> @@ -28,8 +28,8 @@ <string name="device_encryption_restore_text" msgid="1570864916855208992">"U nastavku unesite svoju zaporku za enkripciju uređaja."</string> <string name="device_encryption_backup_text" msgid="5866590762672844664">"U nastavku unesite svoju zaporku enkripcije za uređaj. Ona će se upotrijebiti i za enkripciju te za arhivu sigurnosnih kopija."</string> <string name="backup_enc_password_text" msgid="4981585714795233099">"Unesite zaporku koju ćete upotrebljavati za kriptiranje podataka potpune sigurnosne kopije. Ako je ostavite praznom, bit će upotrijebljena vaša trenutačna zaporka za sigurnosno kopiranje:"</string> - <string name="backup_enc_password_optional" msgid="1350137345907579306">"Ako želite kriptirati podatke potpune sigurnosne kopije, u nastavku unesite zaporku:"</string> - <string name="backup_enc_password_required" msgid="7889652203371654149">"Budući da vam je uređaj kriptiran, morate kriptirati sigurnosne kopije. Unesite zaporku u nastavku:"</string> + <string name="backup_enc_password_optional" msgid="1350137345907579306">"Ako želite šifrirati podatke potpune sigurnosne kopije, u nastavku unesite zaporku:"</string> + <string name="backup_enc_password_required" msgid="7889652203371654149">"Budući da vam je uređaj kriptiran, morate šifrirati sigurnosne kopije. Unesite zaporku u nastavku:"</string> <string name="restore_enc_password_text" msgid="6140898525580710823">"Ako su podaci za vraćanje kriptirani, unesite zaporku u nastavku:"</string> <string name="toast_backup_started" msgid="550354281452756121">"Započinje stvaranje sigurnosne kopije..."</string> <string name="toast_backup_ended" msgid="3818080769548726424">"Sigurnosna kopija dovršena"</string> diff --git a/packages/BackupRestoreConfirmation/res/values-iw/strings.xml b/packages/BackupRestoreConfirmation/res/values-iw/strings.xml index 8c2ffaf1ece8..4c13c73acab8 100644 --- a/packages/BackupRestoreConfirmation/res/values-iw/strings.xml +++ b/packages/BackupRestoreConfirmation/res/values-iw/strings.xml @@ -19,7 +19,7 @@ <string name="backup_confirm_title" msgid="827563724209303345">"גיבוי מלא"</string> <string name="restore_confirm_title" msgid="5469365809567486602">"שחזור מלא"</string> <string name="backup_confirm_text" msgid="1878021282758896593">"הוגשה בקשה לגיבוי מלא של כל הנתונים במחשב שולחני מחובר. האם אתה רוצה לאפשר פעולה זו? \n\nאם לא ביקשת את הגיבוי בעצמך, אל תאפשר לפעולה להמשיך."</string> - <string name="allow_backup_button_label" msgid="4217228747769644068">"גבה את הנתונים שלי"</string> + <string name="allow_backup_button_label" msgid="4217228747769644068">"גיבוי הנתונים שלי"</string> <string name="deny_backup_button_label" msgid="6009119115581097708">"אל תגבה"</string> <string name="restore_confirm_text" msgid="7499866728030461776">"הוגשה בקשה לשחזור מלא של כל הנתונים ממחשב שולחני מחובר. האם אתה רוצה לאפשר פעולה זו? \n \n אם לא ביקשת את השחזור בעצמך, אל תאפשר לפעולה להמשיך. פעולה זו תחליף את כל הנתונים שנמצאים כעת במכשיר!"</string> <string name="allow_restore_button_label" msgid="3081286752277127827">"שחזר את הנתונים שלי"</string> diff --git a/packages/BackupRestoreConfirmation/res/values-ml-rIN/strings.xml b/packages/BackupRestoreConfirmation/res/values-ml-rIN/strings.xml index b2b4bcb9718b..5f97afa6e8cd 100644 --- a/packages/BackupRestoreConfirmation/res/values-ml-rIN/strings.xml +++ b/packages/BackupRestoreConfirmation/res/values-ml-rIN/strings.xml @@ -19,7 +19,7 @@ <string name="backup_confirm_title" msgid="827563724209303345">"പൂർണ്ണ ബാക്കപ്പ്"</string> <string name="restore_confirm_title" msgid="5469365809567486602">"പൂർണ്ണമായി പുനഃസ്ഥാപിക്കൽ"</string> <string name="backup_confirm_text" msgid="1878021282758896593">"കണക്റ്റുചെയ്ത ഡെസ്ക്ടോപ്പ് കമ്പ്യൂട്ടറിലേക്കുള്ള എല്ലാ ഡാറ്റയുടെയും പൂർണ്ണ ബാക്കപ്പ് ആവശ്യപ്പെട്ടു. ഇത് സംഭവിക്കാൻ അനുവദിക്കണോ?\n\nനിങ്ങൾ സ്വയം ബാക്കപ്പുചെയ്യാൻ ആവശ്യപ്പെട്ടില്ലെങ്കിൽ, ഈ പ്രവർത്തനം തുടരാൻ അനുവദിക്കരുത്."</string> - <string name="allow_backup_button_label" msgid="4217228747769644068">"എന്റെ ഡാറ്റ ബാക്കപ്പുചെയ്യുക"</string> + <string name="allow_backup_button_label" msgid="4217228747769644068">"ഡാറ്റ ബാക്കപ്പുചെയ്യൂ"</string> <string name="deny_backup_button_label" msgid="6009119115581097708">"ബാക്കപ്പ് ചെയ്യരുത്"</string> <string name="restore_confirm_text" msgid="7499866728030461776">"കണക്റ്റുചെയ്ത ഡെസ്ക്ടോപ്പ് കമ്പ്യൂട്ടറിലേക്കുള്ള എല്ലാ ഡാറ്റയുടെയും പൂർണ്ണ ബാക്കപ്പ് ആവശ്യപ്പെട്ടു. ഇത് സംഭവിക്കാൻ അനുവദിക്കണോ?\n\nനിങ്ങൾ സ്വയം ബാക്കപ്പുചെയ്യാൻ ആവശ്യപ്പെട്ടില്ലെങ്കിൽ, ഈ പ്രവർത്തനം തുടരാൻ അനുവദിക്കരുത്. ഇത് ഉപകരണത്തിൽ നിലവിലുള്ള എല്ലാ ഡാറ്റയേയും മാറ്റി പകരം വയ്ക്കും!"</string> <string name="allow_restore_button_label" msgid="3081286752277127827">"എന്റെ ഡാറ്റ പുനഃസ്ഥാപിക്കുക"</string> diff --git a/packages/BackupRestoreConfirmation/res/values-sk/strings.xml b/packages/BackupRestoreConfirmation/res/values-sk/strings.xml index a231d23d0631..804f980b1674 100644 --- a/packages/BackupRestoreConfirmation/res/values-sk/strings.xml +++ b/packages/BackupRestoreConfirmation/res/values-sk/strings.xml @@ -19,7 +19,7 @@ <string name="backup_confirm_title" msgid="827563724209303345">"Úplná záloha"</string> <string name="restore_confirm_title" msgid="5469365809567486602">"Úplné obnovenie"</string> <string name="backup_confirm_text" msgid="1878021282758896593">"Bola vyžiadaná úplná záloha všetkých dát do pripojeného počítača. Chcete túto akciu povoliť?\n\nAk ste zálohu nevyžiadali vy, túto operáciu nepovoľujte."</string> - <string name="allow_backup_button_label" msgid="4217228747769644068">"Zálohovať údaje"</string> + <string name="allow_backup_button_label" msgid="4217228747769644068">"Zálohovať dáta"</string> <string name="deny_backup_button_label" msgid="6009119115581097708">"Nezálohovať"</string> <string name="restore_confirm_text" msgid="7499866728030461776">"Z pripojeného počítača bolo vyžiadané úplné obnovenie všetkých údajov. Chcete túto akciu povoliť?\n\nAk ste toto obnovenie nevyžiadali vy, túto operáciu nepovoľujte. Táto akcia nahradí všetky údaje v zariadení."</string> <string name="allow_restore_button_label" msgid="3081286752277127827">"Obnoviť údaje"</string> diff --git a/packages/BackupRestoreConfirmation/res/values-sv/strings.xml b/packages/BackupRestoreConfirmation/res/values-sv/strings.xml index 3ae37cf701d4..dee8bc2e88ba 100644 --- a/packages/BackupRestoreConfirmation/res/values-sv/strings.xml +++ b/packages/BackupRestoreConfirmation/res/values-sv/strings.xml @@ -19,7 +19,7 @@ <string name="backup_confirm_title" msgid="827563724209303345">"Fullständig säkerhetskopiering"</string> <string name="restore_confirm_title" msgid="5469365809567486602">"Fullständig återställning"</string> <string name="backup_confirm_text" msgid="1878021282758896593">"En fullständig säkerhetskopia av alla data till en ansluten dator har begärts. Vill du tillåta detta?\n\nOm du inte själv begärde säkerhetskopian ska du inte tillåta detta."</string> - <string name="allow_backup_button_label" msgid="4217228747769644068">"Säkerhetskopiera mina data"</string> + <string name="allow_backup_button_label" msgid="4217228747769644068">"Säkerhetskopiera data"</string> <string name="deny_backup_button_label" msgid="6009119115581097708">"Säkerhetskopiera inte"</string> <string name="restore_confirm_text" msgid="7499866728030461776">"En fullständig återställning av alla data från en ansluten dator har begärts. Vill du tillåta detta? \n \n Om du inte själv har begärt återställningen ska du inte tillåta den. Alla data som finns på enheten kommer då att ersättas!"</string> <string name="allow_restore_button_label" msgid="3081286752277127827">"Återställ mina data"</string> diff --git a/packages/DefaultContainerService/res/values-fr/strings.xml b/packages/DefaultContainerService/res/values-fr/strings.xml index 5c458bcaddd8..216d715996c7 100644 --- a/packages/DefaultContainerService/res/values-fr/strings.xml +++ b/packages/DefaultContainerService/res/values-fr/strings.xml @@ -20,5 +20,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="service_name" msgid="4841491635055379553">"Aide accès au package"</string> + <string name="service_name" msgid="4841491635055379553">"Package Access Helper"</string> </resources> diff --git a/packages/DocumentsUI/res/values-ml-rIN/strings.xml b/packages/DocumentsUI/res/values-ml-rIN/strings.xml index 56b22b1645aa..4c4b4819312e 100644 --- a/packages/DocumentsUI/res/values-ml-rIN/strings.xml +++ b/packages/DocumentsUI/res/values-ml-rIN/strings.xml @@ -31,9 +31,9 @@ <string name="menu_delete" msgid="8138799623850614177">"ഇല്ലാതാക്കുക"</string> <string name="menu_select_all" msgid="8323579667348729928">"എല്ലാം തിരഞ്ഞെടുക്കുക"</string> <string name="menu_copy" msgid="3612326052677229148">"ഇതിൽ പകർത്തുക…"</string> - <string name="menu_advanced_show" product="nosdcard" msgid="4693652895715631401">"ആന്തരിക സംഭരണം കാണിക്കുക"</string> + <string name="menu_advanced_show" product="nosdcard" msgid="4693652895715631401">"ആന്തരിക സ്റ്റോറേജ് കാണിക്കുക"</string> <string name="menu_advanced_show" product="default" msgid="5792182900084144261">"SD കാർഡ് കാണിക്കുക"</string> - <string name="menu_advanced_hide" product="nosdcard" msgid="4218809952721972589">"ആന്തരിക സംഭരണം മറയ്ക്കുക"</string> + <string name="menu_advanced_hide" product="nosdcard" msgid="4218809952721972589">"ആന്തരിക സ്റ്റോറേജ് മറയ്ക്കുക"</string> <string name="menu_advanced_hide" product="default" msgid="4845869969015718848">"SD കാർഡ് മറയ്ക്കുക"</string> <string name="menu_file_size_show" msgid="3240323619260823076">"ഫയൽ വലുപ്പം കാണിക്കുക"</string> <string name="menu_file_size_hide" msgid="8881975928502581042">"ഫയൽ വലുപ്പം മറയ്ക്കുക"</string> diff --git a/packages/ExternalStorageProvider/res/values-da/strings.xml b/packages/ExternalStorageProvider/res/values-da/strings.xml index a9ecb691d727..dc565aeca851 100644 --- a/packages/ExternalStorageProvider/res/values-da/strings.xml +++ b/packages/ExternalStorageProvider/res/values-da/strings.xml @@ -16,7 +16,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="app_label" msgid="7123375275748530234">"Ekstern lagring"</string> - <string name="root_internal_storage" msgid="827844243068584127">"Intern lagring"</string> + <string name="app_label" msgid="7123375275748530234">"Ekstern lagerplads"</string> + <string name="root_internal_storage" msgid="827844243068584127">"Intern lagerplads"</string> <string name="root_documents" msgid="4051252304075469250">"Dokumenter"</string> </resources> diff --git a/packages/ExternalStorageProvider/res/values-ml-rIN/strings.xml b/packages/ExternalStorageProvider/res/values-ml-rIN/strings.xml index 204b336bd30d..08e6dae52b53 100644 --- a/packages/ExternalStorageProvider/res/values-ml-rIN/strings.xml +++ b/packages/ExternalStorageProvider/res/values-ml-rIN/strings.xml @@ -16,7 +16,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="app_label" msgid="7123375275748530234">"ബാഹ്യ സംഭരണം"</string> - <string name="root_internal_storage" msgid="827844243068584127">"ആന്തരിക സംഭരണം"</string> + <string name="app_label" msgid="7123375275748530234">"ബാഹ്യ സ്റ്റോറേജ്"</string> + <string name="root_internal_storage" msgid="827844243068584127">"ആന്തരിക സ്റ്റോറേജ്"</string> <string name="root_documents" msgid="4051252304075469250">"പ്രമാണങ്ങൾ"</string> </resources> diff --git a/packages/ExternalStorageProvider/res/values-ru/strings.xml b/packages/ExternalStorageProvider/res/values-ru/strings.xml index b6c109513bb0..740272f7b5cd 100644 --- a/packages/ExternalStorageProvider/res/values-ru/strings.xml +++ b/packages/ExternalStorageProvider/res/values-ru/strings.xml @@ -17,6 +17,6 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_label" msgid="7123375275748530234">"Внешний накопитель"</string> - <string name="root_internal_storage" msgid="827844243068584127">"Внутренняя память"</string> + <string name="root_internal_storage" msgid="827844243068584127">"Внутренний накопитель"</string> <string name="root_documents" msgid="4051252304075469250">"Документы"</string> </resources> diff --git a/packages/InputDevices/res/values-uk/strings.xml b/packages/InputDevices/res/values-uk/strings.xml index d8152d40723c..43a3fe63766d 100644 --- a/packages/InputDevices/res/values-uk/strings.xml +++ b/packages/InputDevices/res/values-uk/strings.xml @@ -3,7 +3,7 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_label" msgid="8016145283189546017">"Пристрої вводу"</string> <string name="keyboard_layouts_label" msgid="6688773268302087545">"Клавіатура Android"</string> - <string name="keyboard_layout_english_uk_label" msgid="6664258463319999632">"англійська (Великобританія)"</string> + <string name="keyboard_layout_english_uk_label" msgid="6664258463319999632">"англійська (Велика Британія)"</string> <string name="keyboard_layout_english_us_label" msgid="8994890249649106291">"англійська (США)"</string> <string name="keyboard_layout_english_us_intl" msgid="3705168594034233583">"англійська (США), міжнародна"</string> <string name="keyboard_layout_english_us_colemak_label" msgid="4194969610343455380">"англійська (США), розкладка Colemak"</string> diff --git a/packages/PrintSpooler/res/values-fr/strings.xml b/packages/PrintSpooler/res/values-fr/strings.xml index 5f3d5b6c79ac..1f5c71680c5f 100644 --- a/packages/PrintSpooler/res/values-fr/strings.xml +++ b/packages/PrintSpooler/res/values-fr/strings.xml @@ -34,7 +34,7 @@ <string name="install_for_print_preview" msgid="6366303997385509332">"Installer un lecteur PDF pour afficher l\'aperçu"</string> <string name="printing_app_crashed" msgid="854477616686566398">"L\'application à l\'origine de l\'impression a planté"</string> <string name="generating_print_job" msgid="3119608742651698916">"Génération tâche impression…"</string> - <string name="save_as_pdf" msgid="5718454119847596853">"Enregistrer au format .PDF"</string> + <string name="save_as_pdf" msgid="5718454119847596853">"Enregistrer au format PDF"</string> <string name="all_printers" msgid="5018829726861876202">"Toutes les imprim."</string> <string name="print_dialog" msgid="32628687461331979">"Boîte de dialogue d\'impression"</string> <string name="current_page_template" msgid="1386638343571771292">"<xliff:g id="CURRENT_PAGE">%1$d</xliff:g>/<xliff:g id="PAGE_COUNT">%2$d</xliff:g>"</string> diff --git a/packages/SettingsLib/res/values-ml-rIN/strings.xml b/packages/SettingsLib/res/values-ml-rIN/strings.xml index 22a6da4e891a..c7ffdd729b45 100644 --- a/packages/SettingsLib/res/values-ml-rIN/strings.xml +++ b/packages/SettingsLib/res/values-ml-rIN/strings.xml @@ -30,7 +30,7 @@ <string name="wifi_not_in_range" msgid="1136191511238508967">"പരിധിയിലില്ല"</string> <string name="wifi_no_internet" msgid="9151470775868728896">"ഇന്റർനെറ്റ് ആക്സസ്സൊന്നും കണ്ടെത്താത്തതിനാൽ സ്വയം വീണ്ടും കണക്റ്റുചെയ്യില്ല."</string> <string name="saved_network" msgid="4352716707126620811">"<xliff:g id="NAME">%1$s</xliff:g> സംരക്ഷിച്ചത്"</string> - <string name="connected_via_wfa" msgid="3805736726317410714">"Wi‑Fi അസിസ്റ്റന്റ് മുഖേന കണക്റ്റുചെയ്തു"</string> + <string name="connected_via_wfa" msgid="3805736726317410714">"വൈഫൈ അസിസ്റ്റന്റ് മുഖേന കണക്റ്റുചെയ്തു"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s വഴി ബന്ധിപ്പിച്ചു"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"%1$s വഴി ലഭ്യം"</string> <string name="wifi_connected_no_internet" msgid="3149853966840874992">"കണക്റ്റുചെയ്തിരിക്കുന്നു, ഇന്റർനെറ്റില്ല"</string> diff --git a/packages/SettingsProvider/res/values-pt-rPT/strings.xml b/packages/SettingsProvider/res/values-pt-rPT/strings.xml index 6bd62e349a04..c7dc9e6dc6dd 100644 --- a/packages/SettingsProvider/res/values-pt-rPT/strings.xml +++ b/packages/SettingsProvider/res/values-pt-rPT/strings.xml @@ -19,5 +19,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="app_label" msgid="4567566098528588863">"Armazenamento de Definições"</string> + <string name="app_label" msgid="4567566098528588863">"Armazenamento de definições"</string> </resources> diff --git a/packages/SettingsProvider/res/values-vi/strings.xml b/packages/SettingsProvider/res/values-vi/strings.xml index 504479d68d5e..015fbfda9b82 100644 --- a/packages/SettingsProvider/res/values-vi/strings.xml +++ b/packages/SettingsProvider/res/values-vi/strings.xml @@ -19,5 +19,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="app_label" msgid="4567566098528588863">"Lưu trữ cài đặt"</string> + <string name="app_label" msgid="4567566098528588863">"Lưu trữ bộ nhớ"</string> </resources> diff --git a/packages/Shell/res/values-bg/strings.xml b/packages/Shell/res/values-bg/strings.xml index 2d779b6bea39..381d5d8514d3 100644 --- a/packages/Shell/res/values-bg/strings.xml +++ b/packages/Shell/res/values-bg/strings.xml @@ -22,5 +22,5 @@ <string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Докоснете, за да споделите отчета си за програмни грешки"</string> <string name="bugreport_confirm" msgid="5130698467795669780">"Отчетите за програмни грешки съдържат данни от различни регистрационни файлове на системата, включително лична и поверителна информация. Споделяйте ги само с приложения и хора, на които имате доверие."</string> <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Това съобщение да се показва следващия път"</string> - <string name="bugreport_storage_title" msgid="5332488144740527109">"Отчети за програмни грешки"</string> + <string name="bugreport_storage_title" msgid="5332488144740527109">"Отчети за прогр. грешки"</string> </resources> diff --git a/packages/Shell/res/values-ca/strings.xml b/packages/Shell/res/values-ca/strings.xml index 327fdc23bc5c..b07bafd37778 100644 --- a/packages/Shell/res/values-ca/strings.xml +++ b/packages/Shell/res/values-ca/strings.xml @@ -18,7 +18,7 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_label" msgid="3701846017049540910">"Protecció"</string> <string name="bugreport_finished_title" msgid="2293711546892863898">"S\'ha registrat l\'informe d\'error"</string> - <string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Fes lliscar el dit cap a l\'esquerra per compartir l\'informe d\'errors."</string> + <string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Llisca cap a l\'esquerra per compartir l\'informe d\'errors."</string> <string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Toca aquí per compartir el teu informe d\'error."</string> <string name="bugreport_confirm" msgid="5130698467795669780">"Els informes d\'error contenen dades dels diferents fitxers de registre del sistema, inclosa informació privada i personal. Comparteix els informes d\'error només amb les aplicacions i amb les persones en qui confies."</string> <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Mostra aquest missatge la propera vegada"</string> diff --git a/packages/Shell/res/values-hr/strings.xml b/packages/Shell/res/values-hr/strings.xml index cf122abcacb1..a2cb3b0d0327 100644 --- a/packages/Shell/res/values-hr/strings.xml +++ b/packages/Shell/res/values-hr/strings.xml @@ -22,5 +22,5 @@ <string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Dodirnite za dijeljenje prijave programske pogreške"</string> <string name="bugreport_confirm" msgid="5130698467795669780">"Prijave programskih pogrešaka sadržavaju podatke iz različitih datoteka zapisnika sustava, uključujući osobne i privatne informacije. Prijave programskih pogrešaka dijelite samo s aplikacijama i osobama koje smatrate pouzdanima."</string> <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Prikaži tu poruku sljedeći put"</string> - <string name="bugreport_storage_title" msgid="5332488144740527109">"Izvješća o programskim pogreškama"</string> + <string name="bugreport_storage_title" msgid="5332488144740527109">"Izvj. o prog. pogreš."</string> </resources> diff --git a/packages/Shell/res/values-pl/strings.xml b/packages/Shell/res/values-pl/strings.xml index 266f070a8d7e..96b8f2ac8cd3 100644 --- a/packages/Shell/res/values-pl/strings.xml +++ b/packages/Shell/res/values-pl/strings.xml @@ -22,5 +22,5 @@ <string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Kliknij, by udostępnić raport o błędach"</string> <string name="bugreport_confirm" msgid="5130698467795669780">"Raporty o błędach zawierają dane z różnych plików dzienników systemu, w tym dane osobowe i prywatne. Udostępniaj je tylko aplikacjom i osobom, którym ufasz."</string> <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Pokaż ten komunikat następnym razem"</string> - <string name="bugreport_storage_title" msgid="5332488144740527109">"Zgłoszenia błędów"</string> + <string name="bugreport_storage_title" msgid="5332488144740527109">"Raporty o błędach"</string> </resources> diff --git a/packages/Shell/res/values-sk/strings.xml b/packages/Shell/res/values-sk/strings.xml index a79059dead87..4228dd3d1ce2 100644 --- a/packages/Shell/res/values-sk/strings.xml +++ b/packages/Shell/res/values-sk/strings.xml @@ -22,5 +22,5 @@ <string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Hlásenie o chybách môžete zdielať klepnutím"</string> <string name="bugreport_confirm" msgid="5130698467795669780">"Správy o chybách obsahujú údaje z rôznych súborov denníkov systému vrátane osobných a súkromných informácií. Zdieľajte ich iba s dôveryhodnými aplikáciami a ľuďmi."</string> <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Zobraziť túto správu nabudúce"</string> - <string name="bugreport_storage_title" msgid="5332488144740527109">"Hlásenia o chybe"</string> + <string name="bugreport_storage_title" msgid="5332488144740527109">"Hlásenia chýb"</string> </resources> diff --git a/services/core/java/com/android/server/MountService.java b/services/core/java/com/android/server/MountService.java index da552dd8e6fd..ce06d1369093 100644 --- a/services/core/java/com/android/server/MountService.java +++ b/services/core/java/com/android/server/MountService.java @@ -2559,6 +2559,63 @@ class MountService extends IMountService.Stub } @Override + public void createNewUserDir(int userHandle, String path) { + if (Binder.getCallingUid() != Process.SYSTEM_UID) { + throw new SecurityException("Only SYSTEM_UID can create user directories"); + } + + waitForReady(); + + if (DEBUG_EVENTS) { + Slog.i(TAG, "Creating new user dir"); + } + + try { + NativeDaemonEvent event = mCryptConnector.execute( + "cryptfs", "createnewuserdir", userHandle, path); + if (!"0".equals(event.getMessage())) { + String error = "createnewuserdir sent unexpected message: " + + event.getMessage(); + Slog.e(TAG, error); + // ext4enc:TODO is this the right exception? + throw new RuntimeException(error); + } + } catch (NativeDaemonConnectorException e) { + Slog.e(TAG, "createnewuserdir threw exception", e); + throw new RuntimeException("createnewuserdir threw exception", e); + } + } + + // ext4enc:TODO duplication between this and createNewUserDir is nasty + @Override + public void deleteUserKey(int userHandle) { + if (Binder.getCallingUid() != Process.SYSTEM_UID) { + throw new SecurityException("Only SYSTEM_UID can delete user keys"); + } + + waitForReady(); + + if (DEBUG_EVENTS) { + Slog.i(TAG, "Deleting user key"); + } + + try { + NativeDaemonEvent event = mCryptConnector.execute( + "cryptfs", "deleteuserkey", userHandle); + if (!"0".equals(event.getMessage())) { + String error = "deleteuserkey sent unexpected message: " + + event.getMessage(); + Slog.e(TAG, error); + // ext4enc:TODO is this the right exception? + throw new RuntimeException(error); + } + } catch (NativeDaemonConnectorException e) { + Slog.e(TAG, "deleteuserkey threw exception", e); + throw new RuntimeException("deleteuserkey threw exception", e); + } + } + + @Override public int mkdirs(String callingPkg, String appPath) { final int userId = UserHandle.getUserId(Binder.getCallingUid()); final UserEnvironment userEnv = new UserEnvironment(userId); diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 13aca79c2f58..cdeb68791962 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -15539,7 +15539,7 @@ public class PackageManagerService extends IPackageManager.Stub { if (userDir.exists()) continue; try { - UserManagerService.prepareUserDirectory(userDir); + UserManagerService.prepareUserDirectory(mContext, volumeUuid, user.id); UserManagerService.enforceSerialNumber(userDir, user.serialNumber); } catch (IOException e) { Log.wtf(TAG, "Failed to create user directory on " + volumeUuid, e); diff --git a/services/core/java/com/android/server/pm/Settings.java b/services/core/java/com/android/server/pm/Settings.java index bdcd71464721..a312f7fc4616 100644 --- a/services/core/java/com/android/server/pm/Settings.java +++ b/services/core/java/com/android/server/pm/Settings.java @@ -38,13 +38,17 @@ import android.os.Binder; import android.os.Build; import android.os.Environment; import android.os.FileUtils; +import android.os.IBinder; import android.os.Handler; import android.os.Message; import android.os.PatternMatcher; import android.os.Process; +import android.os.RemoteException; +import android.os.ServiceManager; import android.os.SystemClock; import android.os.UserHandle; import android.os.UserManager; +import android.os.storage.StorageManager; import android.os.storage.VolumeInfo; import android.util.AtomicFile; import android.text.TextUtils; diff --git a/services/core/java/com/android/server/pm/UserManagerService.java b/services/core/java/com/android/server/pm/UserManagerService.java index 23cb76771b58..8ca10d36f13a 100644 --- a/services/core/java/com/android/server/pm/UserManagerService.java +++ b/services/core/java/com/android/server/pm/UserManagerService.java @@ -1263,7 +1263,7 @@ public class UserManagerService extends IUserManager.Stub { try { final File userDir = Environment.getDataUserDirectory(volumeUuid, userId); - prepareUserDirectory(userDir); + prepareUserDirectory(mContext, volumeUuid, userId); enforceSerialNumber(userDir, userInfo.serialNumber); } catch (IOException e) { Log.wtf(LOG_TAG, "Failed to create user directory on " + volumeUuid, e); @@ -1471,6 +1471,8 @@ public class UserManagerService extends IUserManager.Stub { } private void removeUserStateLocked(final int userHandle) { + mContext.getSystemService(StorageManager.class) + .deleteUserKey(userHandle); // Cleanup package manager settings mPm.cleanUpUserLILPw(this, userHandle); @@ -1877,16 +1879,10 @@ public class UserManagerService extends IUserManager.Stub { * Create new {@code /data/user/[id]} directory and sets default * permissions. */ - public static void prepareUserDirectory(File file) throws IOException { - if (!file.exists()) { - if (!file.mkdir()) { - throw new IOException("Failed to create " + file); - } - } - if (FileUtils.setPermissions(file.getAbsolutePath(), 0771, Process.SYSTEM_UID, - Process.SYSTEM_UID) != 0) { - throw new IOException("Failed to prepare " + file); - } + public static void prepareUserDirectory(Context context, String volumeUuid, int userId) { + final StorageManager storage = context.getSystemService(StorageManager.class); + final File userDir = Environment.getDataUserDirectory(volumeUuid, userId); + storage.createNewUserDir(userId, userDir); } /** diff --git a/telecomm/java/android/telecom/Call.java b/telecomm/java/android/telecom/Call.java index 4569549e5993..49f738bbdf5e 100644 --- a/telecomm/java/android/telecom/Call.java +++ b/telecomm/java/android/telecom/Call.java @@ -970,7 +970,6 @@ public final class Call { unregisterCallback(listener); } - /** {@hide} */ Call(Phone phone, String telecomCallId, InCallAdapter inCallAdapter) { mPhone = phone; @@ -980,6 +979,14 @@ public final class Call { } /** {@hide} */ + Call(Phone phone, String telecomCallId, InCallAdapter inCallAdapter, int state) { + mPhone = phone; + mTelecomCallId = telecomCallId; + mInCallAdapter = inCallAdapter; + mState = state; + } + + /** {@hide} */ final String internalGetCallId() { return mTelecomCallId; } diff --git a/telecomm/java/android/telecom/Connection.java b/telecomm/java/android/telecom/Connection.java index f304d1d966a9..93cea97ea5fe 100644 --- a/telecomm/java/android/telecom/Connection.java +++ b/telecomm/java/android/telecom/Connection.java @@ -252,6 +252,13 @@ public abstract class Connection extends Conferenceable { // Next CAPABILITY value: 0x00400000 //********************************************************************************************** + /** + * Call extras key to pack/unpack call history info. + * The value for this key should be an ArrayList of Strings. + * @hide + */ + public static final String EXTRA_CALL_HISTORY_INFO = "EXTRA_CALL_HISTORY_INFO"; + // Flag controlling whether PII is emitted into the logs private static final boolean PII_DEBUG = Log.isLoggable(android.util.Log.DEBUG); diff --git a/telecomm/java/android/telecom/ConnectionService.java b/telecomm/java/android/telecom/ConnectionService.java index d2e7a74977e0..966b2ae12614 100644 --- a/telecomm/java/android/telecom/ConnectionService.java +++ b/telecomm/java/android/telecom/ConnectionService.java @@ -655,6 +655,9 @@ public abstract class ConnectionService extends Service { connection.getDisconnectCause(), createIdList(connection.getConferenceables()), connection.getExtras())); + if (isUnknown) { + triggerConferenceRecalculate(); + } } private void abort(String callId) { @@ -1014,6 +1017,16 @@ public abstract class ConnectionService extends Service { } /** + * Trigger recalculate functinality for conference calls. This is used when a Telephony + * Connection is part of a conference controller but is not yet added to Connection + * Service and hence cannot be added to the conference call. + * + * @hide + */ + public void triggerConferenceRecalculate() { + } + + /** * Create a {@code Connection} given an outgoing request. This is used to initiate new * outgoing calls. * diff --git a/telecomm/java/android/telecom/Phone.java b/telecomm/java/android/telecom/Phone.java index 8eb091b732af..47154da242f4 100644 --- a/telecomm/java/android/telecom/Phone.java +++ b/telecomm/java/android/telecom/Phone.java @@ -122,7 +122,8 @@ public final class Phone { } final void internalAddCall(ParcelableCall parcelableCall) { - Call call = new Call(this, parcelableCall.getId(), mInCallAdapter); + Call call = new Call(this, parcelableCall.getId(), mInCallAdapter, + parcelableCall.getState()); mCallByTelecomCallId.put(parcelableCall.getId(), call); mCalls.add(call); checkCallTree(parcelableCall); diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java index 89e9d2e1eb12..c1440c86ce31 100644 --- a/telephony/java/android/telephony/TelephonyManager.java +++ b/telephony/java/android/telephony/TelephonyManager.java @@ -4342,13 +4342,13 @@ public class TelephonyManager { } } - /** - * Returns the Status of Volte - *@hide - */ - public boolean isVolteEnabled() { + /** + * Returns the Status of Volte + * @hide + */ + public boolean isVolteAvailable() { try { - return getITelephony().isVolteEnabled(); + return getITelephony().isVolteAvailable(); } catch (RemoteException ex) { return false; } catch (NullPointerException ex) { @@ -4356,13 +4356,27 @@ public class TelephonyManager { } } - /** - * Returns the Status of Wi-Fi Calling - *@hide - */ - public boolean isWifiCallingEnabled() { + /** + * Returns the Status of video telephony (VT) + * @hide + */ + public boolean isVideoTelephonyAvailable() { + try { + return getITelephony().isVideoTelephonyAvailable(); + } catch (RemoteException ex) { + return false; + } catch (NullPointerException ex) { + return false; + } + } + + /** + * Returns the Status of Wi-Fi Calling + * @hide + */ + public boolean isWifiCallingAvailable() { try { - return getITelephony().isWifiCallingEnabled(); + return getITelephony().isWifiCallingAvailable(); } catch (RemoteException ex) { return false; } catch (NullPointerException ex) { diff --git a/telephony/java/com/android/ims/ImsCallProfile.java b/telephony/java/com/android/ims/ImsCallProfile.java index 2c4354b953df..f263b4da7b29 100644 --- a/telephony/java/com/android/ims/ImsCallProfile.java +++ b/telephony/java/com/android/ims/ImsCallProfile.java @@ -174,11 +174,19 @@ public class ImsCallProfile implements Parcelable { * cna : Calling name * ussd : For network-initiated USSD, MT only * remote_uri : Connected user identity (it can be used for the conference) + * ChildNum: Child number info. + * Codec: Codec info. + * DisplayText: Display text for the call. + * AdditionalCallInfo: Additional call info. */ public static final String EXTRA_OI = "oi"; public static final String EXTRA_CNA = "cna"; public static final String EXTRA_USSD = "ussd"; public static final String EXTRA_REMOTE_URI = "remote_uri"; + public static final String EXTRA_CHILD_NUMBER = "ChildNum"; + public static final String EXTRA_CODEC = "Codec"; + public static final String EXTRA_DISPLAY_TEXT = "DisplayText"; + public static final String EXTRA_ADDITIONAL_CALL_INFO = "AdditionalCallInfo"; public int mServiceType; public int mCallType; diff --git a/telephony/java/com/android/ims/ImsReasonInfo.java b/telephony/java/com/android/ims/ImsReasonInfo.java index 96289158cc05..2769a2b27968 100644 --- a/telephony/java/com/android/ims/ImsReasonInfo.java +++ b/telephony/java/com/android/ims/ImsReasonInfo.java @@ -99,6 +99,9 @@ public class ImsReasonInfo implements Parcelable { // MT : No action from user after alerting the call public static final int CODE_TIMEOUT_NO_ANSWER_CALL_UPDATE = 203; + //Call failures for FDN + public static final int CODE_FDN_BLOCKED = 241; + /** * STATUSCODE (SIP response code) (IMS -> Telephony) */ @@ -227,6 +230,12 @@ public class ImsReasonInfo implements Parcelable { public static final int CODE_CALL_DROP_IWLAN_TO_LTE_UNAVAILABLE = 1100; /** + * MT call has ended due to a release from the network + * because the call was answered elsewhere + */ + public static final int CODE_ANSWERED_ELSEWHERE = 1014; + + /** * Network string error messages. * mExtraMessage may have these values. */ diff --git a/telephony/java/com/android/ims/ImsSsInfo.java b/telephony/java/com/android/ims/ImsSsInfo.java index dbde1c62c515..7acc3bfd45c9 100644 --- a/telephony/java/com/android/ims/ImsSsInfo.java +++ b/telephony/java/com/android/ims/ImsSsInfo.java @@ -34,6 +34,7 @@ public class ImsSsInfo implements Parcelable { // 0: disabled, 1: enabled public int mStatus; + public String mIcbNum; public ImsSsInfo() { } @@ -50,6 +51,7 @@ public class ImsSsInfo implements Parcelable { @Override public void writeToParcel(Parcel out, int flags) { out.writeInt(mStatus); + out.writeString(mIcbNum); } @Override @@ -59,6 +61,7 @@ public class ImsSsInfo implements Parcelable { private void readFromParcel(Parcel in) { mStatus = in.readInt(); + mIcbNum = in.readString(); } public static final Creator<ImsSsInfo> CREATOR = diff --git a/telephony/java/com/android/ims/ImsSuppServiceNotification.aidl b/telephony/java/com/android/ims/ImsSuppServiceNotification.aidl new file mode 100644 index 000000000000..6b4479f467c2 --- /dev/null +++ b/telephony/java/com/android/ims/ImsSuppServiceNotification.aidl @@ -0,0 +1,20 @@ +/* + * Copyright (c) 2015 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.ims; + +parcelable ImsSuppServiceNotification; diff --git a/telephony/java/com/android/ims/ImsSuppServiceNotification.java b/telephony/java/com/android/ims/ImsSuppServiceNotification.java new file mode 100644 index 000000000000..faf749972b91 --- /dev/null +++ b/telephony/java/com/android/ims/ImsSuppServiceNotification.java @@ -0,0 +1,101 @@ +/* + * Copyright (c) 2015 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.ims; + +import android.os.Parcel; +import android.os.Parcelable; + +import java.util.Arrays; + + +/** + * Parcelable object to handle IMS supplementary service notifications. + * + * @hide + */ +public class ImsSuppServiceNotification implements Parcelable { + private static final String TAG = "ImsSuppServiceNotification"; + + /** Type of notification: 0 = MO; 1 = MT */ + public int notificationType; + /** TS 27.007 7.17 "code1" or "code2" */ + public int code; + /** TS 27.007 7.17 "index" - Not used currently*/ + public int index; + /** TS 27.007 7.17 "type" (MT only) - Not used currently */ + public int type; + /** TS 27.007 7.17 "number" (MT only) */ + public String number; + /** List of forwarded numbers, if any */ + public String[] history; + + public ImsSuppServiceNotification() { + } + + public ImsSuppServiceNotification(Parcel in) { + readFromParcel(in); + } + + @Override + public String toString() { + return "{ notificationType=" + notificationType + + ", code=" + code + + ", index=" + index + + ", type=" + type + + ", number=" + number + + ", history=" + Arrays.toString(history) + + " }"; + } + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel out, int flags) { + out.writeInt(notificationType); + out.writeInt(code); + out.writeInt(index); + out.writeInt(type); + out.writeString(number); + out.writeStringArray(history); + } + + private void readFromParcel(Parcel in) { + notificationType = in.readInt(); + code = in.readInt(); + index = in.readInt(); + type = in.readInt(); + number = in.readString(); + history = in.createStringArray(); + } + + public static final Creator<ImsSuppServiceNotification> CREATOR = + new Creator<ImsSuppServiceNotification>() { + @Override + public ImsSuppServiceNotification createFromParcel(Parcel in) { + return new ImsSuppServiceNotification(in); + } + + @Override + public ImsSuppServiceNotification[] newArray(int size) { + return new ImsSuppServiceNotification[size]; + } + }; +} diff --git a/telephony/java/com/android/ims/internal/IImsCallSessionListener.aidl b/telephony/java/com/android/ims/internal/IImsCallSessionListener.aidl index 0443c3edb974..d562eccd83fc 100644 --- a/telephony/java/com/android/ims/internal/IImsCallSessionListener.aidl +++ b/telephony/java/com/android/ims/internal/IImsCallSessionListener.aidl @@ -21,6 +21,7 @@ import com.android.ims.ImsCallProfile; import com.android.ims.ImsReasonInfo; import com.android.ims.ImsConferenceState; import com.android.ims.internal.IImsCallSession; +import com.android.ims.ImsSuppServiceNotification; /** * A listener type for receiving notification on IMS call session events. @@ -123,4 +124,10 @@ interface IImsCallSessionListener { * @param isMultiParty {@code true} if the session became multiparty, {@code false} otherwise. */ void callSessionMultipartyStateChanged(in IImsCallSession session, in boolean isMultiParty); + + /** + * Notifies the supplementary service information for the current session. + */ + void callSessionSuppServiceReceived(in IImsCallSession session, + in ImsSuppServiceNotification suppSrvNotification); } diff --git a/telephony/java/com/android/ims/internal/IImsRegistrationListener.aidl b/telephony/java/com/android/ims/internal/IImsRegistrationListener.aidl index c91060019c60..a6a26584411b 100644 --- a/telephony/java/com/android/ims/internal/IImsRegistrationListener.aidl +++ b/telephony/java/com/android/ims/internal/IImsRegistrationListener.aidl @@ -72,4 +72,10 @@ interface IImsRegistrationListener { */ void registrationFeatureCapabilityChanged(int serviceClass, out int[] enabledFeatures, out int[] disabledFeatures); + + /** + * Updates the application with the waiting voice message count. + * @param count The number of waiting voice messages. + */ + void voiceMessageCountUpdate(int count); } diff --git a/telephony/java/com/android/ims/internal/IImsUt.aidl b/telephony/java/com/android/ims/internal/IImsUt.aidl index c531ea59ce45..4ab5ee3c4f8c 100644 --- a/telephony/java/com/android/ims/internal/IImsUt.aidl +++ b/telephony/java/com/android/ims/internal/IImsUt.aidl @@ -74,7 +74,7 @@ interface IImsUt { /** * Updates the configuration of the call barring. */ - int updateCallBarring(int cbType, boolean enable, in String[] barrList); + int updateCallBarring(int cbType, int action, in String[] barrList); /** * Updates the configuration of the call forward. diff --git a/telephony/java/com/android/internal/telephony/ITelephony.aidl b/telephony/java/com/android/internal/telephony/ITelephony.aidl index a93e465d992c..661f12db3f9c 100644 --- a/telephony/java/com/android/internal/telephony/ITelephony.aidl +++ b/telephony/java/com/android/internal/telephony/ITelephony.aidl @@ -951,6 +951,7 @@ interface ITelephony { * @return {@code true} if the device supports hearing aid compatibility. */ boolean isHearingAidCompatibilitySupported(); + /** * Get IMS Registration Status */ @@ -958,15 +959,18 @@ interface ITelephony { /** * Returns the Status of Wi-Fi Calling - *@hide */ - boolean isWifiCallingEnabled(); + boolean isWifiCallingAvailable(); + + /** + * Returns the Status of Volte + */ + boolean isVolteAvailable(); /** - * Returns the Status of Volte - *@hide + * Returns the Status of VT (video telephony) */ - boolean isVolteEnabled(); + boolean isVideoTelephonyAvailable(); /** * Returns the unique device ID of phone, for example, the IMEI for @@ -995,7 +999,6 @@ interface ITelephony { /** * Return the modem activity info. - *@hide */ ModemActivityInfo getModemActivityInfo(); } |