diff options
Diffstat (limited to 'packages')
63 files changed, 382 insertions, 134 deletions
diff --git a/packages/DefaultContainerService/AndroidManifest.xml b/packages/DefaultContainerService/AndroidManifest.xml index 14777a9..6a72d83 100644 --- a/packages/DefaultContainerService/AndroidManifest.xml +++ b/packages/DefaultContainerService/AndroidManifest.xml @@ -5,10 +5,10 @@ <uses-permission android:name="android.permission.ASEC_DESTROY"/> <uses-permission android:name="android.permission.ASEC_MOUNT_UNMOUNT"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> - <!-- Used to improve MeasureUtils performance on emulated storage --> + <!-- Used to improve MeasureUtils performance on emulated storage, and to + view storage for all users --> <uses-permission android:name="android.permission.WRITE_MEDIA_STORAGE" /> <uses-permission android:name="android.permission.ACCESS_CACHE_FILESYSTEM" /> - <uses-permission android:name="android.permission.ACCESS_ALL_EXTERNAL_STORAGE" /> <application android:label="@string/service_name" android:allowBackup="false"> diff --git a/packages/DocumentsUI/res/layout-sw720dp/activity.xml b/packages/DocumentsUI/res/layout-sw720dp/activity.xml index 2a273f4..221de13 100644 --- a/packages/DocumentsUI/res/layout-sw720dp/activity.xml +++ b/packages/DocumentsUI/res/layout-sw720dp/activity.xml @@ -55,6 +55,7 @@ android:layout_height="match_parent" android:layout_weight="1" android:orientation="vertical" + android:background="@color/material_grey_50" android:elevation="8dp"> <com.android.documentsui.DirectoryContainerView @@ -67,6 +68,7 @@ android:id="@+id/container_save" android:layout_width="match_parent" android:layout_height="wrap_content" + android:background="@color/material_grey_50" android:elevation="8dp" /> </LinearLayout> diff --git a/packages/DocumentsUI/res/layout/activity.xml b/packages/DocumentsUI/res/layout/activity.xml index 43fdaf2..32431e3 100644 --- a/packages/DocumentsUI/res/layout/activity.xml +++ b/packages/DocumentsUI/res/layout/activity.xml @@ -51,6 +51,7 @@ android:id="@+id/container_save" android:layout_width="match_parent" android:layout_height="wrap_content" + android:background="@color/material_grey_50" android:elevation="8dp" /> </LinearLayout> diff --git a/packages/DocumentsUI/res/layout/fragment_directory.xml b/packages/DocumentsUI/res/layout/fragment_directory.xml index 2c08e72..4717839 100644 --- a/packages/DocumentsUI/res/layout/fragment_directory.xml +++ b/packages/DocumentsUI/res/layout/fragment_directory.xml @@ -16,7 +16,8 @@ <com.android.documentsui.DirectoryView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" - android:layout_height="match_parent"> + android:layout_height="match_parent" + android:background="@color/material_grey_50"> <TextView android:id="@android:id/empty" diff --git a/packages/DocumentsUI/res/values-bn-rBD/strings.xml b/packages/DocumentsUI/res/values-bn-rBD/strings.xml index a999300..4167194 100644 --- a/packages/DocumentsUI/res/values-bn-rBD/strings.xml +++ b/packages/DocumentsUI/res/values-bn-rBD/strings.xml @@ -22,7 +22,7 @@ <string name="menu_create_dir" msgid="5947289605844398389">"ফোল্ডার তৈরি করুন"</string> <string name="menu_grid" msgid="6878021334497835259">"গ্রিড দৃশ্য"</string> <string name="menu_list" msgid="7279285939892417279">"তালিকা দৃশ্য"</string> - <string name="menu_sort" msgid="7677740407158414452">"এর দ্বারা সাজান"</string> + <string name="menu_sort" msgid="7677740407158414452">"এই অনুসারে বাছুন"</string> <string name="menu_search" msgid="3816712084502856974">"অনুসন্ধান করুন"</string> <string name="menu_settings" msgid="6008033148948428823">"সেটিংস"</string> <string name="menu_open" msgid="432922957274920903">"খুলুন"</string> diff --git a/packages/DocumentsUI/res/values-fr-rCA/strings.xml b/packages/DocumentsUI/res/values-fr-rCA/strings.xml index 14f82ce..03f09ff 100644 --- a/packages/DocumentsUI/res/values-fr-rCA/strings.xml +++ b/packages/DocumentsUI/res/values-fr-rCA/strings.xml @@ -17,7 +17,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="2783841764617238354">"Documents"</string> - <string name="title_open" msgid="4353228937663917801">"Ouvert à partir de"</string> + <string name="title_open" msgid="4353228937663917801">"Ouvrir à partir de"</string> <string name="title_save" msgid="2433679664882857999">"Enregistrer dans"</string> <string name="menu_create_dir" msgid="5947289605844398389">"Créer un dossier"</string> <string name="menu_grid" msgid="6878021334497835259">"Grille"</string> diff --git a/packages/DocumentsUI/res/values-pl/strings.xml b/packages/DocumentsUI/res/values-pl/strings.xml index 2b79f8e..84e5495 100644 --- a/packages/DocumentsUI/res/values-pl/strings.xml +++ b/packages/DocumentsUI/res/values-pl/strings.xml @@ -56,7 +56,7 @@ <string name="empty" msgid="7858882803708117596">"Brak elementów"</string> <string name="toast_no_application" msgid="1339885974067891667">"Nie można otworzyć pliku"</string> <string name="toast_failed_delete" msgid="2180678019407244069">"Nie można usunąć niektórych dokumentów"</string> - <string name="share_via" msgid="8966594246261344259">"Udostępnij przez"</string> + <string name="share_via" msgid="8966594246261344259">"Udostępnij przez:"</string> <string name="copy_notification_title" msgid="6374299806748219777">"Kopiowanie plików"</string> <string name="copy_remaining" msgid="6283790937387975095">"Pozostało: <xliff:g id="DURATION">%s</xliff:g>"</string> <plurals name="copy_begin" formatted="false" msgid="9071199452634086365"> diff --git a/packages/DocumentsUI/res/values-sl/strings.xml b/packages/DocumentsUI/res/values-sl/strings.xml index 65e857b..c753c57 100644 --- a/packages/DocumentsUI/res/values-sl/strings.xml +++ b/packages/DocumentsUI/res/values-sl/strings.xml @@ -17,8 +17,8 @@ <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="2783841764617238354">"Dokumenti"</string> - <string name="title_open" msgid="4353228937663917801">"Odpiranje iz"</string> - <string name="title_save" msgid="2433679664882857999">"Shranjevanje v"</string> + <string name="title_open" msgid="4353228937663917801">"Odpri iz mape"</string> + <string name="title_save" msgid="2433679664882857999">"Shrani v"</string> <string name="menu_create_dir" msgid="5947289605844398389">"Ustvarjanje mape"</string> <string name="menu_grid" msgid="6878021334497835259">"Mrežni pogled"</string> <string name="menu_list" msgid="7279285939892417279">"Pogled seznama"</string> @@ -30,7 +30,7 @@ <string name="menu_share" msgid="3075149983979628146">"Skupna raba"</string> <string name="menu_delete" msgid="8138799623850614177">"Izbriši"</string> <string name="menu_select_all" msgid="8323579667348729928">"Izberi vse"</string> - <string name="menu_copy" msgid="3612326052677229148">"Kopiranje v …"</string> + <string name="menu_copy" msgid="3612326052677229148">"Kopiraj v …"</string> <string name="menu_advanced_show" product="nosdcard" msgid="4693652895715631401">"Pokaži notranjo shrambo"</string> <string name="menu_advanced_show" product="default" msgid="5792182900084144261">"Pokaži kartico SD"</string> <string name="menu_advanced_hide" product="nosdcard" msgid="4218809952721972589">"Skrij notranjo shrambo"</string> diff --git a/packages/DocumentsUI/res/values/colors.xml b/packages/DocumentsUI/res/values/colors.xml index 2b839d4..ba8d69f 100644 --- a/packages/DocumentsUI/res/values/colors.xml +++ b/packages/DocumentsUI/res/values/colors.xml @@ -15,6 +15,7 @@ --> <resources> + <color name="material_grey_50">#fffafafa</color> <color name="material_grey_300">#ffeeeeee</color> <color name="item_doc_grid_background">@color/material_grey_300</color> diff --git a/packages/DocumentsUI/src/com/android/documentsui/DirectoryFragment.java b/packages/DocumentsUI/src/com/android/documentsui/DirectoryFragment.java index f4be9c5..006f6e9 100644 --- a/packages/DocumentsUI/src/com/android/documentsui/DirectoryFragment.java +++ b/packages/DocumentsUI/src/com/android/documentsui/DirectoryFragment.java @@ -50,6 +50,8 @@ import android.net.Uri; import android.os.AsyncTask; import android.os.Bundle; import android.os.CancellationSignal; +import android.os.Handler; +import android.os.Looper; import android.os.OperationCanceledException; import android.os.Parcelable; import android.provider.DocumentsContract; @@ -135,6 +137,8 @@ public class DirectoryFragment extends Fragment { private final int mLoaderId = 42; + private final Handler mHandler = new Handler(Looper.getMainLooper()); + public static void showNormal(FragmentManager fm, RootInfo root, DocumentInfo doc, int anim) { show(fm, TYPE_NORMAL, root, doc, null, anim); } @@ -297,6 +301,21 @@ public class DirectoryFragment extends Fragment { @Override public void onLoadFinished(Loader<DirectoryResult> loader, DirectoryResult result) { + if (result == null || result.exception != null) { + // onBackPressed does a fragment transaction, which can't be done inside + // onLoadFinished + mHandler.post(new Runnable() { + @Override + public void run() { + final Activity activity = getActivity(); + if (activity != null) { + activity.onBackPressed(); + } + } + }); + return; + } + if (!isAdded()) return; mAdapter.swapResult(result); diff --git a/packages/DocumentsUI/src/com/android/documentsui/DirectoryLoader.java b/packages/DocumentsUI/src/com/android/documentsui/DirectoryLoader.java index 8e4ec8c..a8a61d2 100644 --- a/packages/DocumentsUI/src/com/android/documentsui/DirectoryLoader.java +++ b/packages/DocumentsUI/src/com/android/documentsui/DirectoryLoader.java @@ -31,7 +31,10 @@ import android.content.Context; import android.database.Cursor; import android.net.Uri; import android.os.CancellationSignal; +import android.os.Handler; +import android.os.Looper; import android.os.OperationCanceledException; +import android.os.RemoteException; import android.provider.DocumentsContract; import android.provider.DocumentsContract.Document; import android.util.Log; @@ -163,6 +166,10 @@ public class DirectoryLoader extends AsyncTaskLoader<DirectoryResult> { cursor = client.query( mUri, null, null, null, getQuerySortOrder(result.sortOrder), mSignal); + if (cursor == null) { + throw new RemoteException("Provider returned null"); + } + cursor.registerContentObserver(mObserver); cursor = new RootCursorWrapper(mUri.getAuthority(), mRoot.rootId, cursor, -1); diff --git a/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java b/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java index 4143e15..4f0c6a41 100644 --- a/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java +++ b/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java @@ -62,6 +62,9 @@ public class ExternalStorageProvider extends DocumentsProvider { public static final String AUTHORITY = "com.android.externalstorage.documents"; + private static final Uri BASE_URI = + new Uri.Builder().scheme(ContentResolver.SCHEME_CONTENT).authority(AUTHORITY).build(); + // docId format: root:path/to/file private static final String[] DEFAULT_ROOT_PROJECTION = new String[] { @@ -170,8 +173,10 @@ public class ExternalStorageProvider extends DocumentsProvider { Log.d(TAG, "After updating volumes, found " + mRoots.size() + " active roots"); - getContext().getContentResolver() - .notifyChange(DocumentsContract.buildRootsUri(AUTHORITY), null, false); + // Note this affects content://com.android.externalstorage.documents/root/39BD-07C5 + // as well as content://com.android.externalstorage.documents/document/*/children, + // so just notify on content://com.android.externalstorage.documents/. + getContext().getContentResolver().notifyChange(BASE_URI, null, false); } private static String[] resolveRootProjection(String[] projection) { diff --git a/packages/Keyguard/res/values-el/strings.xml b/packages/Keyguard/res/values-el/strings.xml index 3ee70f0..8c38901 100644 --- a/packages/Keyguard/res/values-el/strings.xml +++ b/packages/Keyguard/res/values-el/strings.xml @@ -28,7 +28,7 @@ <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Αγγίξτε για εισαγ. κωδ. πρόσβ."</font></string> <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Πληκτρολογήστε τον κωδικό πρόσβασης για ξεκλείδωμα"</string> <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Πληκτρολογήστε τον αριθμό PIN για ξεκλείδωμα"</string> - <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"Εσφαλμένος κωδικός PIN."</string> + <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"Λανθασμένος κωδικός PIN."</string> <string name="keyguard_charged" msgid="3272223906073492454">"Φορτίστηκε"</string> <string name="keyguard_plugged_in" msgid="9087497435553252863">"Φόρτιση"</string> <string name="keyguard_low_battery" msgid="8143808018719173859">"Συνδέστε τον φορτιστή."</string> @@ -57,8 +57,8 @@ <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string> <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Ξεχάσατε το μοτίβο"</string> <string name="kg_wrong_pattern" msgid="1850806070801358830">"Λάθος μοτίβο"</string> - <string name="kg_wrong_password" msgid="2333281762128113157">"Εσφαλμένος κωδικός πρόσβασης"</string> - <string name="kg_wrong_pin" msgid="1131306510833563801">"Εσφαλμένος κωδικός PIN"</string> + <string name="kg_wrong_password" msgid="2333281762128113157">"Λανθασμένος κωδικός πρόσβασης"</string> + <string name="kg_wrong_pin" msgid="1131306510833563801">"Λανθασμένος κωδικός PIN"</string> <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"Δοκιμάστε ξανά σε <xliff:g id="NUMBER">%d</xliff:g> δευτερόλεπτα."</string> <string name="kg_pattern_instructions" msgid="398978611683075868">"Σχεδιάστε το μοτίβο σας"</string> <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Εισαγωγή PIN SIM"</string> @@ -92,15 +92,15 @@ <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4951507352869831265">"Δοκιμάσατε να ξεκλειδώσετε το τηλέφωνο <xliff:g id="NUMBER">%d</xliff:g> φορές χωρίς επιτυχία. Το προφίλ εργασίας θα καταργηθεί, και έτσι θα διαγραφούν όλα τα δεδομένα προφίλ."</string> <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Σχεδιάσατε το μοτίβο ξεκλειδώματος εσφαλμένα <xliff:g id="NUMBER_0">%d</xliff:g> φορές. Μετά από <xliff:g id="NUMBER_1">%d</xliff:g> ανεπιτυχείς προσπάθειες ακόμη, θα σας ζητηθεί να ξεκλειδώσετε το tablet σας με τη χρήση ενός λογαριασμού ηλεκτρονικού ταχυδρομείου.\n\n Δοκιμάστε να συνδεθείτε ξανά σε <xliff:g id="NUMBER_2">%d</xliff:g> δευτερόλεπτα."</string> <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Σχεδιάσατε το μοτίβο ξεκλειδώματος εσφαλμένα <xliff:g id="NUMBER_0">%d</xliff:g> φορές. Μετά από <xliff:g id="NUMBER_1">%d</xliff:g> ανεπιτυχείς προσπάθειες ακόμη, θα σας ζητηθεί να ξεκλειδώσετε το τηλέφωνό σας με τη χρήση ενός λογαριασμού ηλεκτρονικού ταχυδρομείου.\n\n Δοκιμάστε ξανά σε <xliff:g id="NUMBER_2">%d</xliff:g> δευτερόλεπτα."</string> - <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"Εσφαλμένος κωδικός PIN κάρτας SIM. Θα πρέπει να επικοινωνήσετε με τον πάροχο κινητής τηλεφωνίας σας για να ξεκλειδώσετε τη συσκευή σας."</string> + <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"Λανθασμένος κωδικός PIN κάρτας SIM. Θα πρέπει να επικοινωνήσετε με τον πάροχο κινητής τηλεφωνίας σας για να ξεκλειδώσετε τη συσκευή σας."</string> <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="6721575017538162249"> - <item quantity="other">Εσφαλμένος κωδικός PIN κάρτας SIM. Απομένουν άλλες <xliff:g id="NUMBER_1">%d</xliff:g> προσπάθειες. </item> - <item quantity="one">Εσφαλμένος κωδικός PIN κάρτας SIM. Απομένει άλλη <xliff:g id="NUMBER_0">%d</xliff:g> προσπάθεια. Στη συνέχεια, θα πρέπει να επικοινωνήσετε με τον πάροχο κινητής τηλεφωνίας σας για να ξεκλειδώσετε τη συσκευή σας.</item> + <item quantity="other">Λανθασμένος κωδικός PIN κάρτας SIM. Απομένουν άλλες <xliff:g id="NUMBER_1">%d</xliff:g> προσπάθειες. </item> + <item quantity="one">Λανθασμένος κωδικός PIN κάρτας SIM. Απομένει άλλη <xliff:g id="NUMBER_0">%d</xliff:g> προσπάθεια. Στη συνέχεια, θα πρέπει να επικοινωνήσετε με τον πάροχο κινητής τηλεφωνίας σας για να ξεκλειδώσετε τη συσκευή σας.</item> </plurals> <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"Η κάρτα SIM δεν μπορεί να χρησιμοποιηθεί. Επικοινωνήστε με τον πάροχο κινητής τηλεφωνίας σας."</string> <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="7576227366999858780"> - <item quantity="other">Εσφαλμένος κωδικός PUK κάρτας SIM. Απομένουν άλλες <xliff:g id="NUMBER_1">%d</xliff:g> προσπάθειες προτού να μην είναι πλέον δυνατή η χρήση της κάρτας SIM.</item> - <item quantity="one">Εσφαλμένος κωδικός PUK κάρτας SIM. Απομένει άλλη <xliff:g id="NUMBER_0">%d</xliff:g> προσπάθεια προτού να μην είναι πλέον δυνατή η χρήση της κάρτας SIM.</item> + <item quantity="other">Λανθασμένος κωδικός PUK κάρτας SIM. Απομένουν άλλες <xliff:g id="NUMBER_1">%d</xliff:g> προσπάθειες προτού να μην είναι πλέον δυνατή η χρήση της κάρτας SIM.</item> + <item quantity="one">Λανθασμένος κωδικός PUK κάρτας SIM. Απομένει άλλη <xliff:g id="NUMBER_0">%d</xliff:g> προσπάθεια προτού να μην είναι πλέον δυνατή η χρήση της κάρτας SIM.</item> </plurals> <string name="kg_password_pin_failed" msgid="6268288093558031564">"Αποτυχία λειτουργίας κωδικού PIN κάρτας SIM!"</string> <string name="kg_password_puk_failed" msgid="2838824369502455984">"Αποτυχία λειτουργίας κωδικού PUK κάρτας SIM!"</string> diff --git a/packages/Keyguard/res/values-fa/strings.xml b/packages/Keyguard/res/values-fa/strings.xml index 6c4ecee..7f516a7 100644 --- a/packages/Keyguard/res/values-fa/strings.xml +++ b/packages/Keyguard/res/values-fa/strings.xml @@ -52,7 +52,7 @@ <string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"قسمت پین"</string> <string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"قسمت پین سیمکارت"</string> <string name="keyguard_accessibility_sim_puk_area" msgid="1880823406954996207">"قسمت PUK سیمکارت"</string> - <string name="keyguard_accessibility_next_alarm" msgid="7269583073750518672">"زنگ هشدار بعدی برای <xliff:g id="ALARM">%1$s</xliff:g> تنظیم شد"</string> + <string name="keyguard_accessibility_next_alarm" msgid="7269583073750518672">"هشدار بعدی برای <xliff:g id="ALARM">%1$s</xliff:g> تنظیم شد"</string> <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Delete"</string> <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string> <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"الگو را فراموش کردهاید"</string> diff --git a/packages/Keyguard/res/values-uz-rUZ/strings.xml b/packages/Keyguard/res/values-uz-rUZ/strings.xml index 756c0a7..daf5318 100644 --- a/packages/Keyguard/res/values-uz-rUZ/strings.xml +++ b/packages/Keyguard/res/values-uz-rUZ/strings.xml @@ -22,36 +22,36 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_name" msgid="719438068451601849">"Keyguard"</string> <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"PIN-kodni kiriting"</string> - <string name="keyguard_password_enter_puk_code" msgid="3035856550289724338">"SIM karta PUK kodi va yangi PIN kodni tering"</string> - <string name="keyguard_password_enter_puk_prompt" msgid="1801941051094974609">"SIM karta PUK kodi"</string> - <string name="keyguard_password_enter_pin_prompt" msgid="3201151840570492538">"Yangi SIM karta PIN kodi"</string> + <string name="keyguard_password_enter_puk_code" msgid="3035856550289724338">"SIM-karta PUK kodi va yangi PIN kodni tering"</string> + <string name="keyguard_password_enter_puk_prompt" msgid="1801941051094974609">"SIM-karta PUK kodi"</string> + <string name="keyguard_password_enter_pin_prompt" msgid="3201151840570492538">"Yangi SIM-karta PIN kodi"</string> <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Parolni kiritish uchun bosing"</font></string> <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Qulfni ochish uchun parolni kiriting"</string> <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Qulfni ochish uchun PIN-kodni kiriting"</string> - <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"Noto‘g‘ri PIN kod."</string> + <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"Noto‘g‘ri PIN-kod."</string> <string name="keyguard_charged" msgid="3272223906073492454">"Batareya quvvati to‘ldi"</string> <string name="keyguard_plugged_in" msgid="9087497435553252863">"Quvvat olmoqda"</string> <string name="keyguard_low_battery" msgid="8143808018719173859">"Zaryadlagichni ulang."</string> <string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Qulfni ochish uchun \"Menyu\"ga bosing."</string> <string name="keyguard_network_locked_message" msgid="9169717779058037168">"Tarmoq qulflangan"</string> - <string name="keyguard_missing_sim_message_short" msgid="494980561304211931">"SIM karta yo‘q"</string> - <string name="keyguard_missing_sim_message" product="tablet" msgid="1445849005909260039">"Ushbu planshetda SIM karta yo‘q."</string> - <string name="keyguard_missing_sim_message" product="default" msgid="3481110395508637643">"Ushbu telefonda SIM karta yo‘q."</string> + <string name="keyguard_missing_sim_message_short" msgid="494980561304211931">"SIM-karta yo‘q"</string> + <string name="keyguard_missing_sim_message" product="tablet" msgid="1445849005909260039">"Ushbu planshetda SIM-karta yo‘q."</string> + <string name="keyguard_missing_sim_message" product="default" msgid="3481110395508637643">"Ushbu telefonda SIM-karta yo‘q."</string> <string name="keyguard_missing_sim_instructions" msgid="5210891509995942250">"Telefonga SIM kartani joylashtiring."</string> - <string name="keyguard_missing_sim_instructions_long" msgid="5968985489463870358">"SIM karta qo‘yilmagan yoki o‘qib bo‘lmayapti. SIM kartani joylashtiring."</string> + <string name="keyguard_missing_sim_instructions_long" msgid="5968985489463870358">"SIM-karta qo‘yilmagan yoki o‘qib bo‘lmayapti. SIM-kartani joylashtiring."</string> <string name="keyguard_permanent_disabled_sim_message_short" msgid="8340813989586622356">"SIM kartadan foydalanib bo‘lmaydi."</string> - <string name="keyguard_permanent_disabled_sim_instructions" msgid="5892940909699723544">"SIM kartangiz butunlay o‘chirilgan.\n Boshqa SIM karta olish uchun aloqa operatori bilan bog‘laning."</string> - <string name="keyguard_sim_locked_message" msgid="6875773413306380902">"SIM karta qulflangan."</string> - <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM karta PUK kod bilan qulflangan."</string> - <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"SIM karta qulfi ochilmoqda…"</string> + <string name="keyguard_permanent_disabled_sim_instructions" msgid="5892940909699723544">"SIM-kartangiz butunlay o‘chirilgan.\n Boshqa SIM-karta olish uchun aloqa operatori bilan bog‘laning."</string> + <string name="keyguard_sim_locked_message" msgid="6875773413306380902">"SIM-karta qulflangan."</string> + <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM-karta PUK kod bilan qulflangan."</string> + <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"SIM-karta qulfi ochilmoqda…"</string> <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Chizmali qulfni ochish."</string> <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Pin qulfini ochish."</string> <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Parolli qulfni ochish."</string> <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Chizmali qulf maydoni."</string> <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Maydonni silang"</string> - <string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"PIN kod maydoni"</string> - <string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"SIM karta PIN kodi maydoni"</string> - <string name="keyguard_accessibility_sim_puk_area" msgid="1880823406954996207">"SIM karta PUK kodi maydoni"</string> + <string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"PIN-kod maydoni"</string> + <string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"SIM-karta PIN kodi maydoni"</string> + <string name="keyguard_accessibility_sim_puk_area" msgid="1880823406954996207">"SIM-karta PUK kodi maydoni"</string> <string name="keyguard_accessibility_next_alarm" msgid="7269583073750518672">"Uyg‘otkich signali <xliff:g id="ALARM">%1$s</xliff:g> da chalinadi."</string> <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"O‘chirish"</string> <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Kiritish"</string> @@ -65,11 +65,11 @@ <string name="kg_sim_pin_instructions_multi" msgid="7818515973197201434">"“<xliff:g id="CARRIER">%1$s</xliff:g>” SIM kartasi uchun PIN kodni kiriting"</string> <string name="kg_pin_instructions" msgid="2377242233495111557">"PIN kodni tering"</string> <string name="kg_password_instructions" msgid="5753646556186936819">"Parol kiriting"</string> - <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"SIM karta hozir o‘chirilgan. Davom etish uchun PUK kodni kiriting. To‘liqroq ma’lumot olish uchun tarmoq operatori bilan bog‘laning."</string> + <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"SIM-karta hozir o‘chirilgan. Davom etish uchun PUK kodni kiriting. To‘liqroq ma’lumot olish uchun tarmoq operatori bilan bog‘laning."</string> <string name="kg_puk_enter_puk_hint_multi" msgid="363822494559783025">"“<xliff:g id="CARRIER">%1$s</xliff:g>” SIM kartasi o‘chirib qo‘yildi. Davom etish uchun PUK kodni kiriting. Tafsilotlar uchun aloqa operatoringizga murojaat qiling."</string> <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"So‘ralgan PIN kodni kiriting"</string> <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"So‘ralgan PIN kodni tasdiqlang"</string> - <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"SIM karta qulfi ochilmoqda…"</string> + <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"SIM-karta qulfi ochilmoqda…"</string> <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"4 tadan 8 ta raqamgacha bo‘lgan PIN kodni kiriting."</string> <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK kod kamida 8 ta raqam bo‘lishi shart."</string> <string name="kg_invalid_puk" msgid="3638289409676051243">"To‘g‘ri PUK kodni qayta kiriting. Qayta-qayta urinishlar SIM kartani butunlay o‘chirib qo‘yadi."</string> @@ -92,18 +92,18 @@ <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4951507352869831265">"Siz telefonni qulfdan chiqarish uchun <xliff:g id="NUMBER">%d</xliff:g> marta noto‘g‘ri urinish qildingiz. Endi, ishchi profil o‘chirib tashlanadi va undagi barcha ma’lumotlar ham o‘chib ketadi."</string> <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Siz chizmali kalitni <xliff:g id="NUMBER_0">%d</xliff:g> marta noto‘g‘ri kiritdingiz. <xliff:g id="NUMBER_1">%d</xliff:g> marta muvaffaqiyatsiz urinishdan so‘ng, sizdan e-pochtangizdan foydalanib, planshet qulfini ochishingiz so‘raladi.\n\n <xliff:g id="NUMBER_2">%d</xliff:g> soniyadan so‘ng yana urinib ko‘ring."</string> <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Siz chizmali kalitni <xliff:g id="NUMBER_0">%d</xliff:g> marta noto‘g‘ri chizdingiz. <xliff:g id="NUMBER_1">%d</xliff:g> marta muvaffaqiyatsiz urinishdan so‘ng, sizdan e-pochtangizdan foydalanib, telefon qulfini ochishingiz so‘raladi.\n\n <xliff:g id="NUMBER_2">%d</xliff:g> soniyadan so‘ng yana urinib ko‘ring."</string> - <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"SIM karta PIN kodi noto‘g‘ri. Qurilma qulfini ochish uchun aloqa operatoringiz bilan bog‘laning."</string> + <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"SIM-karta PIN kodi noto‘g‘ri. Qurilma qulfini ochish uchun aloqa operatoringiz bilan bog‘laning."</string> <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="6721575017538162249"> <item quantity="other">SIM kartaning PIN kodi noto‘g‘ri. Sizda yana <xliff:g id="NUMBER_1">%d</xliff:g> ta urinish qoldi.</item> <item quantity="one">SIM kartaning PIN kodi noto‘g‘ri. Qurilmani qulfdan chiqarish uchun sizda yana <xliff:g id="NUMBER_0">%d</xliff:g> ta urinish qoldi.</item> </plurals> <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"SIM kartadan foydalanib bo‘lmaydi. Aloqa operatoringiz bilan bog‘laning."</string> <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="7576227366999858780"> - <item quantity="other">SIM kartaning PUK kodi noto‘g‘ri kiritildi. Yana <xliff:g id="NUMBER_1">%d</xliff:g> ta muvaffaqiyatsiz urinishdan so‘ng SIM karta butunlay ishdan chiqadi.</item> - <item quantity="one">SIM kartaning PUK kodi noto‘g‘ri kiritildi. Yana <xliff:g id="NUMBER_0">%d</xliff:g> ta muvaffaqiyatsiz urinishdan so‘ng SIM karta butunlay ishdan chiqadi.</item> + <item quantity="other">SIM-kartaning PUK kodi noto‘g‘ri kiritildi. Yana <xliff:g id="NUMBER_1">%d</xliff:g> ta muvaffaqiyatsiz urinishdan so‘ng SIM-karta butunlay ishdan chiqadi.</item> + <item quantity="one">SIM-kartaning PUK kodi noto‘g‘ri kiritildi. Yana <xliff:g id="NUMBER_0">%d</xliff:g> ta muvaffaqiyatsiz urinishdan so‘ng SIM-karta butunlay ishdan chiqadi.</item> </plurals> - <string name="kg_password_pin_failed" msgid="6268288093558031564">"SIM karta PIN jarayoni amalga oshmadi!"</string> - <string name="kg_password_puk_failed" msgid="2838824369502455984">"SIM karta PUK jarayoni amalga oshmadi!"</string> + <string name="kg_password_pin_failed" msgid="6268288093558031564">"SIM-karta PIN jarayoni amalga oshmadi!"</string> + <string name="kg_password_puk_failed" msgid="2838824369502455984">"SIM-karta PUK jarayoni amalga oshmadi!"</string> <string name="kg_pin_accepted" msgid="1448241673570020097">"Kod qabul qilindi!"</string> <string name="keyguard_carrier_default" msgid="8700650403054042153">"Aloqa yo‘q."</string> <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Kiritish uslubi tugmasini almashtirish."</string> diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardConstants.java b/packages/Keyguard/src/com/android/keyguard/KeyguardConstants.java index 10baf23..e5f3dc9 100644 --- a/packages/Keyguard/src/com/android/keyguard/KeyguardConstants.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardConstants.java @@ -25,6 +25,6 @@ public class KeyguardConstants { * Turns on debugging information for the whole Keyguard. This is very verbose and should only * be used temporarily for debugging. */ - public static final boolean DEBUG = true; - public static final boolean DEBUG_SIM_STATES = true; + public static final boolean DEBUG = false; + public static final boolean DEBUG_SIM_STATES = false; } diff --git a/packages/PrintSpooler/res/values-cs/strings.xml b/packages/PrintSpooler/res/values-cs/strings.xml index 9e164da..99ed75d 100644 --- a/packages/PrintSpooler/res/values-cs/strings.xml +++ b/packages/PrintSpooler/res/values-cs/strings.xml @@ -20,7 +20,7 @@ <string name="more_options_button" msgid="2243228396432556771">"Další možnosti"</string> <string name="label_destination" msgid="9132510997381599275">"Cíl"</string> <string name="label_copies" msgid="3634531042822968308">"Kopie"</string> - <string name="label_copies_summary" msgid="3861966063536529540">"Počet kopií:"</string> + <string name="label_copies_summary" msgid="3861966063536529540">"Kopie:"</string> <string name="label_paper_size" msgid="908654383827777759">"Velikost papíru"</string> <string name="label_paper_size_summary" msgid="5668204981332138168">"Velikost papíru:"</string> <string name="label_color" msgid="1108690305218188969">"Barva"</string> diff --git a/packages/PrintSpooler/res/values-it/strings.xml b/packages/PrintSpooler/res/values-it/strings.xml index 238211d..b052341 100644 --- a/packages/PrintSpooler/res/values-it/strings.xml +++ b/packages/PrintSpooler/res/values-it/strings.xml @@ -21,8 +21,8 @@ <string name="label_destination" msgid="9132510997381599275">"Destinazione"</string> <string name="label_copies" msgid="3634531042822968308">"Copie"</string> <string name="label_copies_summary" msgid="3861966063536529540">"Copie:"</string> - <string name="label_paper_size" msgid="908654383827777759">"Dimensioni carta"</string> - <string name="label_paper_size_summary" msgid="5668204981332138168">"Dimensioni carta:"</string> + <string name="label_paper_size" msgid="908654383827777759">"Formato carta"</string> + <string name="label_paper_size_summary" msgid="5668204981332138168">"Formato carta:"</string> <string name="label_color" msgid="1108690305218188969">"A colori"</string> <string name="label_duplex" msgid="5370037254347072243">"Con doppia funzione"</string> <string name="label_orientation" msgid="2853142581990496477">"Orientamento"</string> diff --git a/packages/PrintSpooler/res/values-kn-rIN/strings.xml b/packages/PrintSpooler/res/values-kn-rIN/strings.xml index b16960e..72e0bac 100644 --- a/packages/PrintSpooler/res/values-kn-rIN/strings.xml +++ b/packages/PrintSpooler/res/values-kn-rIN/strings.xml @@ -35,7 +35,7 @@ <string name="printing_app_crashed" msgid="854477616686566398">"ಮುದ್ರಣದ ಅಪ್ಲಿಕೇಶನ್ ಕ್ರ್ಯಾಶ್ ಆಗಿದೆ"</string> <string name="generating_print_job" msgid="3119608742651698916">"ಮುದ್ರಣ ಕಾರ್ಯ ರಚಿಸಲಾಗುತ್ತಿದೆ"</string> <string name="save_as_pdf" msgid="5718454119847596853">"PDF ರೂಪದಲ್ಲಿ ಉಳಿಸಿ"</string> - <string name="all_printers" msgid="5018829726861876202">"ಎಲ್ಲಾ ಮುದ್ರಕಗಳು…"</string> + <string name="all_printers" msgid="5018829726861876202">"ಎಲ್ಲಾ ಪ್ರಿಂಟರ್ಗಳು…"</string> <string name="print_dialog" msgid="32628687461331979">"ಮುದ್ರಣ ಸಂವಾದ"</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> <string name="page_description_template" msgid="6831239682256197161">"ಪುಟ <xliff:g id="CURRENT_PAGE">%1$d</xliff:g> / <xliff:g id="PAGE_COUNT">%2$d</xliff:g>"</string> @@ -47,7 +47,7 @@ <string name="print_options_expanded" msgid="6944679157471691859">"ಪ್ರಿಂಟ್ ಆಯ್ಕೆಗಳನ್ನು ವಿಸ್ತರಿಸಲಾಗಿದೆ"</string> <string name="print_options_collapsed" msgid="7455930445670414332">"ಪ್ರಿಂಟ್ ಆಯ್ಕೆಗಳನ್ನು ಮುಚ್ಚಲಾಗಿದೆ"</string> <string name="search" msgid="5421724265322228497">"ಹುಡುಕು"</string> - <string name="all_printers_label" msgid="3178848870161526399">"ಎಲ್ಲಾ ಮುದ್ರಕಗಳು"</string> + <string name="all_printers_label" msgid="3178848870161526399">"ಎಲ್ಲಾ ಪ್ರಿಂಟರ್ಗಳು"</string> <string name="add_print_service_label" msgid="5356702546188981940">"ಸೇವೆಯನ್ನು ಸೇರಿಸು"</string> <string name="print_search_box_shown_utterance" msgid="7967404953901376090">"ಹುಡುಕಾಟ ಪೆಟ್ಟಿಗೆಯನ್ನು ತೋರಿಸಲಾಗಿದೆ"</string> <string name="print_search_box_hidden_utterance" msgid="5727755169343113351">"ಹುಡುಕಾಟ ಪೆಟ್ಟಿಗೆಯನ್ನು ಮರೆಮಾಡಲಾಗಿದೆ"</string> diff --git a/packages/PrintSpooler/res/values-sk/strings.xml b/packages/PrintSpooler/res/values-sk/strings.xml index 5b522e3f..3e82076 100644 --- a/packages/PrintSpooler/res/values-sk/strings.xml +++ b/packages/PrintSpooler/res/values-sk/strings.xml @@ -20,7 +20,7 @@ <string name="more_options_button" msgid="2243228396432556771">"Ďalšie možnosti"</string> <string name="label_destination" msgid="9132510997381599275">"Cieľ"</string> <string name="label_copies" msgid="3634531042822968308">"Kópie"</string> - <string name="label_copies_summary" msgid="3861966063536529540">"Počet kópií:"</string> + <string name="label_copies_summary" msgid="3861966063536529540">"Kópie:"</string> <string name="label_paper_size" msgid="908654383827777759">"Veľkosť papiera"</string> <string name="label_paper_size_summary" msgid="5668204981332138168">"Veľkosť papiera:"</string> <string name="label_color" msgid="1108690305218188969">"Farba"</string> diff --git a/packages/PrintSpooler/res/values-sr/strings.xml b/packages/PrintSpooler/res/values-sr/strings.xml index 394dd04..58e9622 100644 --- a/packages/PrintSpooler/res/values-sr/strings.xml +++ b/packages/PrintSpooler/res/values-sr/strings.xml @@ -20,7 +20,7 @@ <string name="more_options_button" msgid="2243228396432556771">"Још опција"</string> <string name="label_destination" msgid="9132510997381599275">"Одредиште"</string> <string name="label_copies" msgid="3634531042822968308">"Копије"</string> - <string name="label_copies_summary" msgid="3861966063536529540">"Копије:"</string> + <string name="label_copies_summary" msgid="3861966063536529540">"Копија:"</string> <string name="label_paper_size" msgid="908654383827777759">"Величина папира"</string> <string name="label_paper_size_summary" msgid="5668204981332138168">"Величина папира:"</string> <string name="label_color" msgid="1108690305218188969">"Боја"</string> diff --git a/packages/PrintSpooler/res/values-uz-rUZ/strings.xml b/packages/PrintSpooler/res/values-uz-rUZ/strings.xml index 804c72e..8e41a34 100644 --- a/packages/PrintSpooler/res/values-uz-rUZ/strings.xml +++ b/packages/PrintSpooler/res/values-uz-rUZ/strings.xml @@ -34,8 +34,8 @@ <string name="install_for_print_preview" msgid="6366303997385509332">"PDF ko‘rsatuvchi dasturni o‘rnatish"</string> <string name="printing_app_crashed" msgid="854477616686566398">"Chop etish dasturi buzildi"</string> <string name="generating_print_job" msgid="3119608742651698916">"Chop etish buyrug‘i yaratilyapti"</string> - <string name="save_as_pdf" msgid="5718454119847596853">"PDF formatda saqlash"</string> - <string name="all_printers" msgid="5018829726861876202">"Barcha printerlar…"</string> + <string name="save_as_pdf" msgid="5718454119847596853">"PDF formatida saqlash"</string> + <string name="all_printers" msgid="5018829726861876202">"Barcha printerlar"</string> <string name="print_dialog" msgid="32628687461331979">"Chop etish oynasi"</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> <string name="page_description_template" msgid="6831239682256197161">"Sahifa: <xliff:g id="CURRENT_PAGE">%1$d</xliff:g>/<xliff:g id="PAGE_COUNT">%2$d</xliff:g>"</string> diff --git a/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java b/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java index ef08e19..33f993e 100644 --- a/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java +++ b/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java @@ -176,10 +176,7 @@ public class WifiTracker { mScanner = new Scanner(); } - mScanResultCache.clear(); - mSeenBssids.clear(); - mScanId = 0; - + mWorkHandler.sendEmptyMessage(WorkHandler.MSG_RESUME); if (mWifiManager.isWifiEnabled()) { mScanner.resume(); } @@ -251,6 +248,12 @@ public class WifiTracker { } } + private void handleResume() { + mScanResultCache.clear(); + mSeenBssids.clear(); + mScanId = 0; + } + private Collection<ScanResult> fetchScanResults() { mScanId++; final List<ScanResult> newResults = mWifiManager.getScanResults(); @@ -544,6 +547,7 @@ public class WifiTracker { private final class WorkHandler extends Handler { private static final int MSG_UPDATE_ACCESS_POINTS = 0; private static final int MSG_UPDATE_NETWORK_INFO = 1; + private static final int MSG_RESUME = 2; public WorkHandler(Looper looper) { super(looper); @@ -558,6 +562,9 @@ public class WifiTracker { case MSG_UPDATE_NETWORK_INFO: updateNetworkInfo((NetworkInfo) msg.obj); break; + case MSG_RESUME: + handleResume(); + break; } } } diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java index 41043eb..8d9f3fd 100644 --- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java +++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java @@ -1774,6 +1774,26 @@ public class SettingsProvider extends ContentProvider { Uri uri = getNotificationUriFor(key, name); sendNotify(uri, userId); + if (isSecureSettingsKey(key)) { + maybeNotifyProfiles(userId, uri, name, sSecureCloneToManagedSettings); + } else if (isSystemSettingsKey(key)) { + maybeNotifyProfiles(userId, uri, name, sSystemCloneToManagedSettings); + } + } + + private void maybeNotifyProfiles(int userId, Uri uri, String name, + Set<String> keysCloned) { + if (keysCloned.contains(name)) { + List<UserInfo> profiles = mUserManager.getProfiles(userId); + int size = profiles.size(); + for (int i = 0; i < size; i++) { + UserInfo profile = profiles.get(i); + // the notification for userId has already been sent. + if (profile.id != userId) { + sendNotify(uri, profile.id); + } + } + } } private int makeKey(int type, int userId) { diff --git a/packages/SystemUI/AndroidManifest.xml b/packages/SystemUI/AndroidManifest.xml index c259573..ea032b3 100644 --- a/packages/SystemUI/AndroidManifest.xml +++ b/packages/SystemUI/AndroidManifest.xml @@ -25,7 +25,8 @@ <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> - <uses-permission android:name="android.permission.ACCESS_ALL_EXTERNAL_STORAGE" /> + <!-- Used to read storage for all users --> + <uses-permission android:name="android.permission.WRITE_MEDIA_STORAGE" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.INJECT_EVENTS" /> @@ -177,10 +178,6 @@ android:label="@*android:string/usb_storage_activity_title" android:excludeFromRecents="true"> </activity> - <activity android:name="com.android.internal.app.ExternalMediaFormatActivity" - android:theme="@*android:style/Theme.Dialog.Alert" - android:excludeFromRecents="true"> - </activity> <activity android:name=".tuner.TunerActivity" android:enabled="false" diff --git a/packages/SystemUI/res/layout/quick_settings_brightness_dialog.xml b/packages/SystemUI/res/layout/quick_settings_brightness_dialog.xml index 38ea6e1..0bef513 100644 --- a/packages/SystemUI/res/layout/quick_settings_brightness_dialog.xml +++ b/packages/SystemUI/res/layout/quick_settings_brightness_dialog.xml @@ -36,6 +36,7 @@ android:layout_gravity="center_vertical" android:layout_weight="1" android:contentDescription="@string/accessibility_brightness" + android:importantForAccessibility="no" systemui:text="@string/status_bar_settings_auto_brightness_label" /> </LinearLayout> diff --git a/packages/SystemUI/res/layout/volume_dialog_row.xml b/packages/SystemUI/res/layout/volume_dialog_row.xml index 1a6d34e..91e931d 100644 --- a/packages/SystemUI/res/layout/volume_dialog_row.xml +++ b/packages/SystemUI/res/layout/volume_dialog_row.xml @@ -50,6 +50,8 @@ android:layout_below="@id/volume_row_header" android:layout_toEndOf="@id/volume_row_icon" android:layout_toStartOf="@+id/volume_settings_button" + android:focusable="true" + android:focusableInTouchMode="true" android:paddingEnd="8dp" android:paddingStart="8dp" /> diff --git a/packages/SystemUI/res/values-ca/strings.xml b/packages/SystemUI/res/values-ca/strings.xml index 49b9a36..29a8163 100644 --- a/packages/SystemUI/res/values-ca/strings.xml +++ b/packages/SystemUI/res/values-ca/strings.xml @@ -24,7 +24,7 @@ <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Elimina de la llista"</string> <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Informació de l\'aplicació"</string> <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Aquí es mostren les teves pantalles recents."</string> - <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Omet les aplicacions recents"</string> + <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Ignora les aplicacions recents"</string> <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759"> <item quantity="other">%d pantalles en la visió general</item> <item quantity="one">1 pantalla en la visió general</item> @@ -169,7 +169,7 @@ <string name="accessibility_ringer_silent" msgid="9061243307939135383">"Mode silenci."</string> <!-- no translation found for accessibility_casting (6887382141726543668) --> <skip /> - <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Descarta <xliff:g id="APP">%s</xliff:g>."</string> + <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Ignora <xliff:g id="APP">%s</xliff:g>."</string> <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"S\'ha omès <xliff:g id="APP">%s</xliff:g>."</string> <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"S\'han descartat totes les aplicacions recents."</string> <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"S\'està iniciant <xliff:g id="APP">%s</xliff:g>."</string> @@ -302,7 +302,7 @@ <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"fixació de pantalla"</string> <string name="recents_search_bar_label" msgid="8074997400187836677">"cerca"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"No s\'ha pogut iniciar <xliff:g id="APP">%s</xliff:g>."</string> - <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Descarta totes les aplicacions"</string> + <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Ignora totes les aplicacions"</string> <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Divisió horitzontal"</string> <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Divisió vertical"</string> <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Divisió personalitzada"</string> diff --git a/packages/SystemUI/res/values-da/strings.xml b/packages/SystemUI/res/values-da/strings.xml index 895da77..37aa1cc 100644 --- a/packages/SystemUI/res/values-da/strings.xml +++ b/packages/SystemUI/res/values-da/strings.xml @@ -417,7 +417,7 @@ <string name="status_bar_work" msgid="6022553324802866373">"Arbejdsprofil"</string> <string name="status_bar_airplane" msgid="7057575501472249002">"Flytilstand"</string> <string name="add_tile" msgid="2995389510240786221">"Tilføj et felt"</string> - <string name="broadcast_tile" msgid="3894036511763289383">"Felt for udsendelser"</string> + <string name="broadcast_tile" msgid="3894036511763289383">"Broadcast-ikon"</string> <string name="zen_alarm_warning_indef" msgid="3482966345578319605">"Du vil ikke kunne høre din næste alarm <xliff:g id="WHEN">%1$s</xliff:g>, medmindre du slår funktionen fra inden da"</string> <string name="zen_alarm_warning" msgid="444533119582244293">"Du vil ikke kunne høre din næste alarm <xliff:g id="WHEN">%1$s</xliff:g>"</string> <string name="alarm_template" msgid="3980063409350522735">"kl. <xliff:g id="WHEN">%1$s</xliff:g>"</string> diff --git a/packages/SystemUI/res/values-el/strings.xml b/packages/SystemUI/res/values-el/strings.xml index 3f28569..a0afec3 100644 --- a/packages/SystemUI/res/values-el/strings.xml +++ b/packages/SystemUI/res/values-el/strings.xml @@ -20,7 +20,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="7164937344850004466">"UI συστήματ."</string> - <string name="status_bar_clear_all_button" msgid="7774721344716731603">"Εκκαθάριση"</string> + <string name="status_bar_clear_all_button" msgid="7774721344716731603">"Διαγραφή"</string> <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Κατάργηση από τη λίστα"</string> <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Πληροφορίες εφαρμογής"</string> <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Οι πρόσφατες οθόνες σας εμφανίζονται εδώ"</string> @@ -79,7 +79,7 @@ <string name="use_ptp_button_title" msgid="7517127540301625751">"Προσάρτηση ως κάμερας (PTP)"</string> <string name="installer_cd_button_title" msgid="2312667578562201583">"Εγκατάστ. της εφαρμ. μεταφ.αρχείων Android για Mac"</string> <string name="accessibility_back" msgid="567011538994429120">"Πίσω"</string> - <string name="accessibility_home" msgid="8217216074895377641">"Αρχική σελίδα"</string> + <string name="accessibility_home" msgid="8217216074895377641">"Αρχική οθόνη"</string> <string name="accessibility_menu" msgid="316839303324695949">"Μενού"</string> <string name="accessibility_recent" msgid="5208608566793607626">"Επισκόπηση"</string> <string name="accessibility_search_light" msgid="1103867596330271848">"Αναζήτηση"</string> diff --git a/packages/SystemUI/res/values-fa/strings.xml b/packages/SystemUI/res/values-fa/strings.xml index 65d3866..f9b279f 100644 --- a/packages/SystemUI/res/values-fa/strings.xml +++ b/packages/SystemUI/res/values-fa/strings.xml @@ -60,7 +60,7 @@ <string name="label_view" msgid="6304565553218192990">"مشاهده"</string> <string name="always_use_device" msgid="1450287437017315906">"استفاده به صورت پیشفرض برای این دستگاه USB"</string> <string name="always_use_accessory" msgid="1210954576979621596">"استفاده به صورت پیشفرض برای این دستگاه USB"</string> - <string name="usb_debugging_title" msgid="4513918393387141949">"اجازه به اشکالزدایی USB؟"</string> + <string name="usb_debugging_title" msgid="4513918393387141949">"اشکالزدایی USB مجاز است؟"</string> <string name="usb_debugging_message" msgid="2220143855912376496">"اثر انگشت کلید RSA رایانه: \n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string> <string name="usb_debugging_always" msgid="303335496705863070">"همیشه از این رایانه انجام شود"</string> <string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"اشکالزدایی USB مجاز نیست"</string> @@ -399,8 +399,8 @@ <string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"دفعه بعد که آن را روشن کنید، در تنظیمات نشان داده میشود."</string> <string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"پنهان کردن"</string> <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> میخواهد کنترلکننده صدا باشد."</string> - <string name="volumeui_prompt_allow" msgid="7954396902482228786">"مجاز"</string> - <string name="volumeui_prompt_deny" msgid="5720663643411696731">"رد کردن"</string> + <string name="volumeui_prompt_allow" msgid="7954396902482228786">"مجاز است"</string> + <string name="volumeui_prompt_deny" msgid="5720663643411696731">"اجازه ندارد"</string> <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> کنترلکننده صدا است"</string> <string name="volumeui_notification_text" msgid="1826889705095768656">"برای بازیابی کنترلکننده اصلی، لمس کنید."</string> <string name="managed_profile_foreground_toast" msgid="5421487114739245972">"درحال استفاده از نمایه کاریتان هستید"</string> diff --git a/packages/SystemUI/res/values-fi/strings.xml b/packages/SystemUI/res/values-fi/strings.xml index 2f4f5a1..e54eba4 100644 --- a/packages/SystemUI/res/values-fi/strings.xml +++ b/packages/SystemUI/res/values-fi/strings.xml @@ -44,7 +44,7 @@ <string name="battery_saver_start_action" msgid="5576697451677486320">"Ota virransäästö käyttöön"</string> <string name="status_bar_settings_settings_button" msgid="3023889916699270224">"Asetukset"</string> <string name="status_bar_settings_wifi_button" msgid="1733928151698311923">"Wi-Fi"</string> - <string name="status_bar_settings_auto_rotation" msgid="3790482541357798421">"Kierrä näyttöä automaattisesti"</string> + <string name="status_bar_settings_auto_rotation" msgid="3790482541357798421">"Näytön automaattinen kierto"</string> <string name="status_bar_settings_mute_label" msgid="554682549917429396">"ÄÄNET."</string> <string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"AUTO"</string> <string name="status_bar_settings_notifications" msgid="397146176280905137">"Ilmoitukset"</string> diff --git a/packages/SystemUI/res/values-iw/strings.xml b/packages/SystemUI/res/values-iw/strings.xml index 52da800..0703066 100644 --- a/packages/SystemUI/res/values-iw/strings.xml +++ b/packages/SystemUI/res/values-iw/strings.xml @@ -345,7 +345,7 @@ <string name="guest_exit_guest_dialog_title" msgid="8480693520521766688">"להסיר אורח?"</string> <string name="guest_exit_guest_dialog_message" msgid="4155503224769676625">"כל האפליקציות והנתונים בפעילות זו באתר יימחקו."</string> <string name="guest_exit_guest_dialog_remove" msgid="7402231963862520531">"הסר"</string> - <string name="guest_wipe_session_title" msgid="6419439912885956132">"ברוך שובך, אורח!"</string> + <string name="guest_wipe_session_title" msgid="6419439912885956132">"שמחים לראותך שוב!"</string> <string name="guest_wipe_session_message" msgid="8476238178270112811">"האם ברצונך להמשיך בפעילות באתר?"</string> <string name="guest_wipe_session_wipe" msgid="5065558566939858884">"התחל מחדש"</string> <string name="guest_wipe_session_dontwipe" msgid="1401113462524894716">"כן, המשך"</string> diff --git a/packages/SystemUI/res/values-uz-rUZ/strings.xml b/packages/SystemUI/res/values-uz-rUZ/strings.xml index a971aaf..bfe4c1b 100644 --- a/packages/SystemUI/res/values-uz-rUZ/strings.xml +++ b/packages/SystemUI/res/values-uz-rUZ/strings.xml @@ -151,7 +151,7 @@ <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"Rouming"</string> <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string> <string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"Wi-Fi"</string> - <string name="accessibility_no_sim" msgid="8274017118472455155">"SIM karta yo‘q."</string> + <string name="accessibility_no_sim" msgid="8274017118472455155">"SIM-karta yo‘q."</string> <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Bluetooth modem"</string> <string name="accessibility_airplane_mode" msgid="834748999790763092">"Parvoz rejimi"</string> <string name="accessibility_no_sims" msgid="3957997018324995781">"Hech qanday SIM-karta yo‘q."</string> diff --git a/packages/SystemUI/src/com/android/systemui/assist/AssistDisclosure.java b/packages/SystemUI/src/com/android/systemui/assist/AssistDisclosure.java index 585f9ba..c3a8f2e 100644 --- a/packages/SystemUI/src/com/android/systemui/assist/AssistDisclosure.java +++ b/packages/SystemUI/src/com/android/systemui/assist/AssistDisclosure.java @@ -32,6 +32,7 @@ import android.graphics.PorterDuffXfermode; import android.os.Handler; import android.view.View; import android.view.WindowManager; +import android.view.accessibility.AccessibilityEvent; import android.view.animation.AnimationUtils; /** @@ -166,6 +167,7 @@ public class AssistDisclosure { super.onAttachedToWindow(); startAnimation(); + sendAccessibilityEvent(AccessibilityEvent.TYPE_ASSIST_READING_CONTEXT); } @Override diff --git a/packages/SystemUI/src/com/android/systemui/assist/AssistManager.java b/packages/SystemUI/src/com/android/systemui/assist/AssistManager.java index 6ba5626..51d0bf1 100644 --- a/packages/SystemUI/src/com/android/systemui/assist/AssistManager.java +++ b/packages/SystemUI/src/com/android/systemui/assist/AssistManager.java @@ -131,7 +131,7 @@ public class AssistManager { } final boolean isService = isAssistantService(); - if (isService || !isVoiceSessionRunning()) { + if (!isService || !isVoiceSessionRunning()) { showOrb(); mView.postDelayed(mHideRunnable, isService ? TIMEOUT_SERVICE @@ -227,10 +227,6 @@ public class AssistManager { mAssistUtils.launchVoiceAssistFromKeyguard(); } - private boolean getVoiceInteractorSupportsAssistGesture() { - return mAssistUtils.activeServiceSupportsAssistGesture(); - } - public boolean canVoiceAssistBeLaunchedFromKeyguard() { return mAssistUtils.activeServiceSupportsLaunchFromKeyguard(); } diff --git a/packages/SystemUI/src/com/android/systemui/media/RingtonePlayer.java b/packages/SystemUI/src/com/android/systemui/media/RingtonePlayer.java index 7eed7f2..e9a256c 100644 --- a/packages/SystemUI/src/com/android/systemui/media/RingtonePlayer.java +++ b/packages/SystemUI/src/com/android/systemui/media/RingtonePlayer.java @@ -92,7 +92,8 @@ public class RingtonePlayer extends SystemUI { private IRingtonePlayer mCallback = new IRingtonePlayer.Stub() { @Override - public void play(IBinder token, Uri uri, AudioAttributes aa) throws RemoteException { + public void play(IBinder token, Uri uri, AudioAttributes aa, float volume, boolean looping) + throws RemoteException { if (LOGD) { Log.d(TAG, "play(token=" + token + ", uri=" + uri + ", uid=" + Binder.getCallingUid() + ")"); @@ -107,6 +108,8 @@ public class RingtonePlayer extends SystemUI { mClients.put(token, client); } } + client.mRingtone.setLooping(looping); + client.mRingtone.setVolume(volume); client.mRingtone.play(); } @@ -138,6 +141,19 @@ public class RingtonePlayer extends SystemUI { } @Override + public void setPlaybackProperties(IBinder token, float volume, boolean looping) { + Client client; + synchronized (mClients) { + client = mClients.get(token); + } + if (client != null) { + client.mRingtone.setVolume(volume); + client.mRingtone.setLooping(looping); + } + // else no client for token when setting playback properties but will be set at play() + } + + @Override public void playAsync(Uri uri, UserHandle user, boolean looping, AudioAttributes aa) { if (LOGD) Log.d(TAG, "playAsync(uri=" + uri + ", user=" + user + ")"); if (Binder.getCallingUid() != Process.SYSTEM_UID) { diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java b/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java index 4b1453d..2ded919 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java @@ -472,6 +472,7 @@ public class QSPanel extends ViewGroup { rows = r + 1; } + View previousView = mBrightnessView; for (TileRecord record : mRecords) { if (record.tileView.setDual(record.tile.supportsDualTargets())) { record.tileView.handleStateChanged(record.tile.getState()); @@ -480,6 +481,7 @@ public class QSPanel extends ViewGroup { final int cw = record.row == 0 ? mLargeCellWidth : mCellWidth; final int ch = record.row == 0 ? mLargeCellHeight : mCellHeight; record.tileView.measure(exactly(cw), exactly(ch)); + previousView = record.tileView.updateAccessibilityOrder(previousView); } int h = rows == 0 ? brightnessHeight : (getRowTop(rows) + mPanelPaddingBottom); if (mFooter.hasFooter()) { diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSTileView.java b/packages/SystemUI/src/com/android/systemui/qs/QSTileView.java index af9d3a5..6d26a3b 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSTileView.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSTileView.java @@ -83,6 +83,7 @@ public class QSTileView extends ViewGroup { setClipChildren(false); mTopBackgroundView = new View(context); + mTopBackgroundView.setId(View.generateViewId()); addView(mTopBackgroundView); mIcon = createIcon(); @@ -95,8 +96,8 @@ public class QSTileView extends ViewGroup { addView(mDivider); setClickable(true); - updateTopPadding(); + setId(View.generateViewId()); } private void updateTopPadding() { @@ -137,7 +138,7 @@ public class QSTileView extends ViewGroup { final Resources res = mContext.getResources(); if (mDual) { mDualLabel = new QSDualTileLabel(mContext); - mDualLabel.setId(android.R.id.title); + mDualLabel.setId(View.generateViewId()); mDualLabel.setBackgroundResource(R.drawable.btn_borderless_rect); mDualLabel.setFirstLineCaret(mContext.getDrawable(R.drawable.qs_dual_tile_caret)); mDualLabel.setTextColor(mContext.getColor(R.color.qs_tile_text)); @@ -155,9 +156,9 @@ public class QSTileView extends ViewGroup { mDualLabel.setContentDescription(labelDescription); } addView(mDualLabel); + mDualLabel.setAccessibilityTraversalAfter(mTopBackgroundView.getId()); } else { mLabel = new TextView(mContext); - mLabel.setId(android.R.id.title); mLabel.setTextColor(mContext.getColor(R.color.qs_tile_text)); mLabel.setGravity(Gravity.CENTER_HORIZONTAL); mLabel.setMinLines(2); @@ -328,6 +329,26 @@ public class QSTileView extends ViewGroup { mHandler.obtainMessage(H.STATE_CHANGED, state).sendToTarget(); } + /** + * Update the accessibility order for this view. + * + * @param previousView the view which should be before this one + * @return the last view in this view which is accessible + */ + public View updateAccessibilityOrder(View previousView) { + View firstView; + View lastView; + if (mDual) { + lastView = mDualLabel; + firstView = mTopBackgroundView; + } else { + firstView = this; + lastView = this; + } + firstView.setAccessibilityTraversalAfter(previousView.getId()); + return lastView; + } + private class H extends Handler { private static final int STATE_CHANGED = 1; public H() { diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/DndTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/DndTile.java index 1b74eb6..359ed5f 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/DndTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/DndTile.java @@ -28,6 +28,7 @@ import android.view.LayoutInflater; import android.view.View; import android.view.View.OnAttachStateChangeListener; import android.view.ViewGroup; +import android.widget.Toast; import com.android.internal.logging.MetricsLogger; import com.android.systemui.Prefs; @@ -98,6 +99,14 @@ public class DndTile extends QSTile<QSTile.BooleanState> { @Override public void handleClick() { + if (mController.isVolumeRestricted()) { + // Collapse the panels, so the user can see the toast. + mHost.collapsePanels(); + Toast.makeText(mContext, mContext.getString( + com.android.internal.R.string.error_message_change_not_allowed), + Toast.LENGTH_LONG).show(); + return; + } mDisable.setAllowAnimation(true); mDisableTotalSilence.setAllowAnimation(true); MetricsLogger.action(mContext, getMetricsCategory(), !mState.value); diff --git a/packages/SystemUI/src/com/android/systemui/recents/Constants.java b/packages/SystemUI/src/com/android/systemui/recents/Constants.java index 18c213d..a4acf83 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/Constants.java +++ b/packages/SystemUI/src/com/android/systemui/recents/Constants.java @@ -20,6 +20,14 @@ package com.android.systemui.recents; * Constants */ public class Constants { + + public static class Metrics { + // DO NOT MODIFY THE ORDER OF THESE METRICS + public static final int DismissSourceKeyboard = 0; + public static final int DismissSourceSwipeGesture = 1; + public static final int DismissSourceHeaderButton = 2; + } + public static class DebugFlags { // Enable this with any other debug flag to see more info public static final boolean Verbose = false; diff --git a/packages/SystemUI/src/com/android/systemui/recents/Recents.java b/packages/SystemUI/src/com/android/systemui/recents/Recents.java index 6a45369..8c2ac88 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/Recents.java +++ b/packages/SystemUI/src/com/android/systemui/recents/Recents.java @@ -39,6 +39,8 @@ import android.util.MutableBoolean; import android.view.Display; import android.view.LayoutInflater; import android.view.View; + +import com.android.internal.logging.MetricsLogger; import com.android.systemui.Prefs; import com.android.systemui.R; import com.android.systemui.RecentsComponent; @@ -453,6 +455,9 @@ public class Recents extends SystemUI return; } + // Keep track of actually launched affiliated tasks + MetricsLogger.count(mContext, "overview_affiliated_task_launch", 1); + // Launch the task if (toTask.isActive) { // Bring an active task to the foreground @@ -465,11 +470,15 @@ public class Recents extends SystemUI @Override public void showNextAffiliatedTask() { + // Keep track of when the affiliated task is triggered + MetricsLogger.count(mContext, "overview_affiliated_task_next", 1); showRelativeAffiliatedTask(true); } @Override public void showPrevAffiliatedTask() { + // Keep track of when the affiliated task is triggered + MetricsLogger.count(mContext, "overview_affiliated_task_prev", 1); showRelativeAffiliatedTask(false); } diff --git a/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java b/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java index bf15c68..789457d 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java +++ b/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java @@ -33,6 +33,8 @@ import android.view.View; import android.view.ViewStub; import android.widget.Toast; +import com.android.internal.logging.MetricsConstants; +import com.android.internal.logging.MetricsLogger; import com.android.systemui.Prefs; import com.android.systemui.R; import com.android.systemui.recents.misc.Console; @@ -224,6 +226,7 @@ public class RecentsActivity extends Activity implements RecentsView.RecentsView // Mark the task that is the launch target int taskStackCount = stacks.size(); + int launchTaskIndexInStack = 0; if (mConfig.launchedToTaskId != -1) { for (int i = 0; i < taskStackCount; i++) { TaskStack stack = stacks.get(i); @@ -233,6 +236,7 @@ public class RecentsActivity extends Activity implements RecentsView.RecentsView Task t = tasks.get(j); if (t.key.id == mConfig.launchedToTaskId) { t.isLaunchTarget = true; + launchTaskIndexInStack = tasks.size() - j - 1; break; } } @@ -259,6 +263,28 @@ public class RecentsActivity extends Activity implements RecentsView.RecentsView // Animate the SystemUI scrims into view mScrimViews.prepareEnterRecentsAnimation(); + + // Keep track of whether we launched from the nav bar button or via alt-tab + if (mConfig.launchedWithAltTab) { + MetricsLogger.count(this, "overview_trigger_alttab", 1); + } else { + MetricsLogger.count(this, "overview_trigger_nav_btn", 1); + } + // Keep track of whether we launched from an app or from home + if (mConfig.launchedFromAppWithThumbnail) { + MetricsLogger.count(this, "overview_source_app", 1); + // If from an app, track the stack index of the app in the stack (for affiliated tasks) + MetricsLogger.histogram(this, "overview_source_app_index", launchTaskIndexInStack); + } else { + MetricsLogger.count(this, "overview_source_home", 1); + } + // Keep track of the total stack task count + int taskCount = 0; + for (int i = 0; i < stacks.size(); i++) { + TaskStack stack = stacks.get(i); + taskCount += stack.getTaskCount(); + } + MetricsLogger.histogram(this, "overview_task_count", taskCount); } /** Dismisses recents if we are already visible and the intent is to toggle the recents view */ @@ -374,6 +400,7 @@ public class RecentsActivity extends Activity implements RecentsView.RecentsView @Override protected void onStart() { super.onStart(); + MetricsLogger.visible(this, MetricsLogger.OVERVIEW_ACTIVITY); RecentsTaskLoader loader = RecentsTaskLoader.getInstance(); SystemServicesProxy ssp = loader.getSystemServicesProxy(); Recents.notifyVisibilityChanged(this, ssp, true); @@ -414,6 +441,7 @@ public class RecentsActivity extends Activity implements RecentsView.RecentsView @Override protected void onStop() { super.onStop(); + MetricsLogger.hidden(this, MetricsLogger.OVERVIEW_ACTIVITY); RecentsTaskLoader loader = RecentsTaskLoader.getInstance(); SystemServicesProxy ssp = loader.getSystemServicesProxy(); Recents.notifyVisibilityChanged(this, ssp, false); @@ -498,6 +526,9 @@ public class RecentsActivity extends Activity implements RecentsView.RecentsView case KeyEvent.KEYCODE_DEL: case KeyEvent.KEYCODE_FORWARD_DEL: { mRecentsView.dismissFocusedTask(); + // Keep track of deletions by keyboard + MetricsLogger.histogram(this, "overview_task_dismissed_source", + Constants.Metrics.DismissSourceKeyboard); return true; } default: @@ -591,6 +622,8 @@ public class RecentsActivity extends Activity implements RecentsView.RecentsView RecentsTaskLoader loader = RecentsTaskLoader.getInstance(); SystemServicesProxy ssp = loader.getSystemServicesProxy(); Recents.startScreenPinning(this, ssp); + + MetricsLogger.count(this, "overview_screen_pinned", 1); } @Override diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java b/packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java index 6cb11b1..947c19c 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java +++ b/packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java @@ -37,6 +37,7 @@ import android.view.WindowInsets; import android.view.WindowManagerGlobal; import android.widget.FrameLayout; +import com.android.internal.logging.MetricsLogger; import com.android.systemui.R; import com.android.systemui.recents.Constants; import com.android.systemui.recents.RecentsAppWidgetHostView; @@ -589,11 +590,22 @@ public class RecentsView extends FrameLayout implements TaskStackView.TaskStackV if (mCb != null) { mCb.onTaskLaunchFailed(); } + + // Keep track of failed launches + MetricsLogger.count(getContext(), "overview_task_launch_failed", 1); } } } }; + // Keep track of the index of the task launch + int taskIndexFromFront = 0; + int taskIndex = stack.indexOfTask(task); + if (taskIndex > -1) { + taskIndexFromFront = stack.getTaskCount() - taskIndex - 1; + } + MetricsLogger.histogram(getContext(), "overview_task_launch_index", taskIndexFromFront); + // Launch the app right away if there is no task view, otherwise, animate the icon out first if (tv == null) { launchRunnable.run(); @@ -644,6 +656,9 @@ public class RecentsView extends FrameLayout implements TaskStackView.TaskStackV } mCb.onAllTaskViewsDismissed(); + + // Keep track of all-deletions + MetricsLogger.count(getContext(), "overview_task_all_dismissed", 1); } /** Final callback after Recents is finally hidden. */ diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java index ebfc796..abdebf3 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java +++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java @@ -29,6 +29,8 @@ import android.view.View; import android.view.accessibility.AccessibilityEvent; import android.view.accessibility.AccessibilityNodeInfo; import android.widget.FrameLayout; + +import com.android.internal.logging.MetricsLogger; import com.android.systemui.R; import com.android.systemui.recents.Constants; import com.android.systemui.recents.RecentsConfiguration; @@ -1361,6 +1363,9 @@ public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCal public void onTaskViewAppInfoClicked(TaskView tv) { if (mCb != null) { mCb.onTaskViewAppInfoClicked(tv.getTask()); + + // Keep track of app-info invocations + MetricsLogger.count(getContext(), "overview_app_info", 1); } } diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackViewTouchHandler.java b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackViewTouchHandler.java index 13bdbd2..78b3512 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackViewTouchHandler.java +++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackViewTouchHandler.java @@ -23,6 +23,7 @@ import android.view.VelocityTracker; import android.view.View; import android.view.ViewConfiguration; import android.view.ViewParent; +import com.android.internal.logging.MetricsLogger; import com.android.systemui.recents.Constants; import com.android.systemui.recents.Recents; import com.android.systemui.recents.RecentsConfiguration; @@ -452,6 +453,9 @@ class TaskStackViewTouchHandler implements SwipeHelper.Callback { tv.setTouchEnabled(true); // Remove the task view from the stack mSv.onTaskViewDismissed(tv); + // Keep track of deletions by keyboard + MetricsLogger.histogram(tv.getContext(), "overview_task_dismissed_source", + Constants.Metrics.DismissSourceSwipeGesture); } @Override diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/TaskView.java b/packages/SystemUI/src/com/android/systemui/recents/views/TaskView.java index 5906ef1..cbfe842 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/views/TaskView.java +++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskView.java @@ -27,6 +27,7 @@ import android.view.View; import android.view.ViewOutlineProvider; import android.view.animation.AccelerateInterpolator; import android.widget.FrameLayout; +import com.android.internal.logging.MetricsLogger; import com.android.systemui.R; import com.android.systemui.recents.Constants; import com.android.systemui.recents.RecentsConfiguration; @@ -741,6 +742,9 @@ public class TaskView extends FrameLayout implements Task.TaskCallbacks, } } else if (v == mHeaderView.mDismissButton) { dismissTask(); + // Keep track of deletions by the dismiss button + MetricsLogger.histogram(getContext(), "overview_task_dismissed_source", + Constants.Metrics.DismissSourceHeaderButton); } else if (v == mHeaderView.mMoveTaskButton) { if (mCb != null) { mCb.onTaskResize(tv); diff --git a/packages/SystemUI/src/com/android/systemui/settings/ToggleSeekBar.java b/packages/SystemUI/src/com/android/systemui/settings/ToggleSeekBar.java index a0a5561..8829794 100644 --- a/packages/SystemUI/src/com/android/systemui/settings/ToggleSeekBar.java +++ b/packages/SystemUI/src/com/android/systemui/settings/ToggleSeekBar.java @@ -19,9 +19,13 @@ package com.android.systemui.settings; import android.content.Context; import android.util.AttributeSet; import android.view.MotionEvent; +import android.view.View; +import android.view.accessibility.AccessibilityNodeInfo; import android.widget.SeekBar; public class ToggleSeekBar extends SeekBar { + private String mAccessibilityLabel; + public ToggleSeekBar(Context context) { super(context); } @@ -42,4 +46,16 @@ public class ToggleSeekBar extends SeekBar { return super.onTouchEvent(event); } + + public void setAccessibilityLabel(String label) { + mAccessibilityLabel = label; + } + + @Override + public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) { + super.onInitializeAccessibilityNodeInfo(info); + if (mAccessibilityLabel != null) { + info.setText(mAccessibilityLabel); + } + } } diff --git a/packages/SystemUI/src/com/android/systemui/settings/ToggleSlider.java b/packages/SystemUI/src/com/android/systemui/settings/ToggleSlider.java index d247711..b263707 100644 --- a/packages/SystemUI/src/com/android/systemui/settings/ToggleSlider.java +++ b/packages/SystemUI/src/com/android/systemui/settings/ToggleSlider.java @@ -43,7 +43,7 @@ public class ToggleSlider extends RelativeLayout { private boolean mTracking; private CompoundButton mToggle; - private SeekBar mSlider; + private ToggleSeekBar mSlider; private TextView mLabel; private ToggleSlider mMirror; @@ -69,13 +69,13 @@ public class ToggleSlider extends RelativeLayout { mToggle = (CompoundButton) findViewById(R.id.toggle); mToggle.setOnCheckedChangeListener(mCheckListener); - mSlider = (SeekBar) findViewById(R.id.slider); + mSlider = (ToggleSeekBar) findViewById(R.id.slider); mSlider.setOnSeekBarChangeListener(mSeekListener); mLabel = (TextView) findViewById(R.id.label); mLabel.setText(a.getString(R.styleable.ToggleSlider_text)); - setLabelFor(R.id.slider); // use our a11y text to annotate, not replace, the slider's + mSlider.setAccessibilityLabel(getContentDescription().toString()); a.recycle(); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java index 3e66907..6ad0ef9 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java @@ -1623,7 +1623,13 @@ public abstract class BaseStatusBar extends SystemUI implements boolean clearNotificationEffects = !isPanelFullyCollapsed() && (mShowLockscreenNotifications || (mState == StatusBarState.SHADE || mState == StatusBarState.SHADE_LOCKED)); - mBarService.onPanelRevealed(clearNotificationEffects); + int notificationLoad = mNotificationData.getActiveNotifications().size(); + if (mHeadsUpManager.hasPinnedHeadsUp() && isPanelFullyCollapsed()) { + notificationLoad = 1; + } else { + MetricsLogger.histogram(mContext, "note_load", notificationLoad); + } + mBarService.onPanelRevealed(clearNotificationEffects, notificationLoad); } else { mBarService.onPanelHidden(); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java index cf0d670..094b9b5 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java @@ -721,7 +721,6 @@ public class NotificationPanelView extends PanelView implements if (mListenForHeadsUp && !mHeadsUpTouchHelper.isTrackingHeadsUp() && mHeadsUpTouchHelper.onInterceptTouchEvent(event)) { mIsExpansionFromHeadsUp = true; - MetricsLogger.count(mContext, COUNTER_PANEL_OPEN, 1); MetricsLogger.count(mContext, COUNTER_PANEL_OPEN_PEEK, 1); } if ((!mIsExpanding || mHintAnimationRunning) @@ -1126,38 +1125,41 @@ public class NotificationPanelView extends PanelView implements }; private void animateKeyguardStatusBarOut() { - mKeyguardStatusBar.animate() - .alpha(0f) - .setStartDelay(mStatusBar.isKeyguardFadingAway() - ? mStatusBar.getKeyguardFadingAwayDelay() - : 0) - .setDuration(mStatusBar.isKeyguardFadingAway() - ? mStatusBar.getKeyguardFadingAwayDuration() / 2 - : StackStateAnimator.ANIMATION_DURATION_STANDARD) - .setInterpolator(PhoneStatusBar.ALPHA_OUT) - .setUpdateListener(mStatusBarAnimateAlphaListener) - .withEndAction(mAnimateKeyguardStatusBarInvisibleEndRunnable) - .start(); + ValueAnimator anim = ValueAnimator.ofFloat(mKeyguardStatusBar.getAlpha(), 0f); + anim.addUpdateListener(mStatusBarAnimateAlphaListener); + anim.setStartDelay(mStatusBar.isKeyguardFadingAway() + ? mStatusBar.getKeyguardFadingAwayDelay() + : 0); + anim.setDuration(mStatusBar.isKeyguardFadingAway() + ? mStatusBar.getKeyguardFadingAwayDuration() / 2 + : StackStateAnimator.ANIMATION_DURATION_STANDARD); + anim.setInterpolator(mDozeAnimationInterpolator); + anim.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + mAnimateKeyguardStatusBarInvisibleEndRunnable.run(); + } + }); + anim.start(); } private final ValueAnimator.AnimatorUpdateListener mStatusBarAnimateAlphaListener = new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { - mKeyguardStatusBarAnimateAlpha = mKeyguardStatusBar.getAlpha(); + mKeyguardStatusBarAnimateAlpha = (float) animation.getAnimatedValue(); + updateHeaderKeyguardAlpha(); } }; private void animateKeyguardStatusBarIn(long duration) { mKeyguardStatusBar.setVisibility(View.VISIBLE); mKeyguardStatusBar.setAlpha(0f); - mKeyguardStatusBar.animate() - .alpha(1f) - .setStartDelay(0) - .setDuration(duration) - .setInterpolator(mDozeAnimationInterpolator) - .setUpdateListener(mStatusBarAnimateAlphaListener) - .start(); + ValueAnimator anim = ValueAnimator.ofFloat(0f, 1f); + anim.addUpdateListener(mStatusBarAnimateAlphaListener); + anim.setDuration(duration); + anim.setInterpolator(mDozeAnimationInterpolator); + anim.start(); } private final Runnable mAnimateKeyguardBottomAreaInvisibleEndRunnable = new Runnable() { @@ -1716,12 +1718,16 @@ public class NotificationPanelView extends PanelView implements return alpha; } - private void updateHeaderKeyguard() { + private void updateHeaderKeyguardAlpha() { float alphaQsExpansion = 1 - Math.min(1, getQsExpansionFraction() * 2); mKeyguardStatusBar.setAlpha(Math.min(getKeyguardContentsAlpha(), alphaQsExpansion) * mKeyguardStatusBarAnimateAlpha); mKeyguardStatusBar.setVisibility(mKeyguardStatusBar.getAlpha() != 0f && !mDozing ? VISIBLE : INVISIBLE); + } + + private void updateHeaderKeyguard() { + updateHeaderKeyguardAlpha(); setQsTranslation(mQsExpansionHeight); } @@ -1811,6 +1817,7 @@ public class NotificationPanelView extends PanelView implements || mStatusBar.getBarState() == StatusBarState.SHADE_LOCKED) { mAfforanceHelper.animateHideLeftRightIcon(); } + mNotificationStackScroller.onPanelTrackingStarted(); } @Override @@ -1820,6 +1827,7 @@ public class NotificationPanelView extends PanelView implements mNotificationStackScroller.setOverScrolledPixels( 0.0f, true /* onTop */, true /* animate */); } + mNotificationStackScroller.onPanelTrackingStopped(); if (expand && (mStatusBar.getBarState() == StatusBarState.KEYGUARD || mStatusBar.getBarState() == StatusBarState.SHADE_LOCKED)) { if (!mHintAnimationRunning) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java index 39a06aa..9343172 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java @@ -834,8 +834,10 @@ public abstract class PanelView extends FrameLayout { } } else if (!isFullyCollapsed() && !mTracking && !mClosing) { cancelHeightAnimator(); - mClosing = true; notifyExpandingStarted(); + + // Set after notifyExpandingStarted, as notifyExpandingStarted resets the closing state. + mClosing = true; if (delayed) { mNextCollapseSpeedUpFactor = speedUpFactor; postDelayed(mFlingCollapseRunnable, 120); 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 3678cf1..20f4dc7 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java @@ -1180,6 +1180,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, notification.getKey()); notification.getNotification().fullScreenIntent.send(); shadeEntry.notifyFullScreenIntentLaunched(); + MetricsLogger.count(mContext, "note_fullscreen", 1); } catch (PendingIntent.CanceledException e) { } } @@ -2913,6 +2914,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, updateRowStates(); mIconController.updateResources(); mScreenPinningRequest.onConfigurationChanged(); + mNetworkController.handleConfigurationChanged(); } @Override diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/HeadsUpManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/HeadsUpManager.java index 98bbe7c..63f5711 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/HeadsUpManager.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/HeadsUpManager.java @@ -29,6 +29,7 @@ import android.view.View; import android.view.ViewTreeObserver; import android.view.accessibility.AccessibilityEvent; +import com.android.internal.logging.MetricsLogger; import com.android.systemui.R; import com.android.systemui.statusbar.ExpandableNotificationRow; import com.android.systemui.statusbar.NotificationData; @@ -82,6 +83,7 @@ public class HeadsUpManager implements ViewTreeObserver.OnComputeInternalInsetsL private final View mStatusBarWindowView; private final int mStatusBarHeight; private final int mNotificationsTopPadding; + private final Context mContext; private PhoneStatusBar mBar; private int mSnoozeLengthMs; private ContentObserver mSettingsObserver; @@ -101,7 +103,8 @@ public class HeadsUpManager implements ViewTreeObserver.OnComputeInternalInsetsL private boolean mIsObserving; public HeadsUpManager(final Context context, View statusBarWindowView) { - Resources resources = context.getResources(); + mContext = context; + Resources resources = mContext.getResources(); mTouchAcceptanceDelay = resources.getInteger(R.integer.touch_acceptance_delay); mSnoozedPackages = new ArrayMap<>(); mDefaultSnoozeLengthMs = resources.getInteger(R.integer.heads_up_default_snooze_length_ms); @@ -165,6 +168,7 @@ public class HeadsUpManager implements ViewTreeObserver.OnComputeInternalInsetsL */ public void showNotification(NotificationData.Entry headsUp) { if (DEBUG) Log.v(TAG, "showNotification"); + MetricsLogger.count(mContext, "note_peek", 1); addHeadsUpEntry(headsUp); updateNotification(headsUp, true); headsUp.setInterruption(); @@ -522,7 +526,6 @@ public class HeadsUpManager implements ViewTreeObserver.OnComputeInternalInsetsL }); } - /** * This represents a notification and how long it is in a heads up mode. It also manages its * lifecycle automatically when created. diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java index ff0e8a3..24e3c78 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java @@ -340,7 +340,6 @@ public class NetworkControllerImpl extends BroadcastReceiver action.equals(ConnectivityManager.INET_CONDITION_ACTION)) { updateConnectivity(); } else if (action.equals(Intent.ACTION_CONFIGURATION_CHANGED)) { - mConfig = Config.readConfig(mContext); handleConfigurationChanged(); } else if (action.equals(Intent.ACTION_AIRPLANE_MODE_CHANGED)) { refreshLocale(); @@ -374,8 +373,8 @@ public class NetworkControllerImpl extends BroadcastReceiver } } - @VisibleForTesting - void handleConfigurationChanged() { + public void handleConfigurationChanged() { + mConfig = Config.readConfig(mContext); for (MobileSignalController mobileSignalController : mMobileSignalControllers.values()) { mobileSignalController.setConfiguration(mConfig); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/ZenModeController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/ZenModeController.java index 9d84a85..b2df40a 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/ZenModeController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/ZenModeController.java @@ -36,6 +36,7 @@ public interface ZenModeController { ComponentName getEffectsSuppressor(); boolean isCountdownConditionSupported(); int getCurrentUser(); + boolean isVolumeRestricted(); public static class Callback { public void onZenChanged(int zen) {} diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/ZenModeControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/ZenModeControllerImpl.java index 5b80ac2..c07f1a8 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/ZenModeControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/ZenModeControllerImpl.java @@ -29,6 +29,7 @@ import android.database.ContentObserver; import android.net.Uri; import android.os.Handler; import android.os.UserHandle; +import android.os.UserManager; import android.provider.Settings.Global; import android.provider.Settings.Secure; import android.service.notification.Condition; @@ -57,6 +58,7 @@ public class ZenModeControllerImpl implements ZenModeController { private final LinkedHashMap<Uri, Condition> mConditions = new LinkedHashMap<Uri, Condition>(); private final AlarmManager mAlarmManager; private final SetupObserver mSetupObserver; + private final UserManager mUserManager; private int mUserId; private boolean mRequesting; @@ -84,6 +86,13 @@ public class ZenModeControllerImpl implements ZenModeController { mAlarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); mSetupObserver = new SetupObserver(handler); mSetupObserver.register(); + mUserManager = context.getSystemService(UserManager.class); + } + + @Override + public boolean isVolumeRestricted() { + return mUserManager.hasUserRestriction(UserManager.DISALLOW_ADJUST_VOLUME, + new UserHandle(mUserId)); } @Override diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java b/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java index 36d33d9..bde07de 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java @@ -163,6 +163,7 @@ public class NotificationStackScrollLayout extends ViewGroup private boolean mChildrenUpdateRequested; private SpeedBumpView mSpeedBumpView; private boolean mIsExpansionChanging; + private boolean mPanelTracking; private boolean mExpandingNotification; private boolean mExpandedInThisMotion; private boolean mScrollingEnabled; @@ -1513,7 +1514,7 @@ public class NotificationStackScrollLayout extends ViewGroup } if (mExpandedInThisMotion) { return RUBBER_BAND_FACTOR_AFTER_EXPAND; - } else if (mIsExpansionChanging) { + } else if (mIsExpansionChanging || mPanelTracking) { return RUBBER_BAND_FACTOR_ON_PANEL_EXPAND; } else if (mScrolledToTopOnFirstDown) { return 1.0f; @@ -1527,7 +1528,7 @@ public class NotificationStackScrollLayout extends ViewGroup * overscroll view (e.g. expand QS). */ private boolean isRubberbanded(boolean onTop) { - return !onTop || mExpandedInThisMotion || mIsExpansionChanging + return !onTop || mExpandedInThisMotion || mIsExpansionChanging || mPanelTracking || !mScrolledToTopOnFirstDown; } @@ -2257,6 +2258,13 @@ public class NotificationStackScrollLayout extends ViewGroup } } + public void onPanelTrackingStarted() { + mPanelTracking = true; + } + public void onPanelTrackingStopped() { + mPanelTracking = false; + } + public void resetScrollPosition() { mScroller.abortAnimation(); mOwnScrollY = 0; diff --git a/packages/SystemUI/src/com/android/systemui/usb/StorageNotification.java b/packages/SystemUI/src/com/android/systemui/usb/StorageNotification.java index 92cfaa1..180d918 100644 --- a/packages/SystemUI/src/com/android/systemui/usb/StorageNotification.java +++ b/packages/SystemUI/src/com/android/systemui/usb/StorageNotification.java @@ -499,8 +499,10 @@ public class StorageNotification extends SystemUI { final PendingIntent intent; if (privateVol != null && privateVol.getDisk() != null) { intent = buildWizardReadyPendingIntent(privateVol.getDisk()); - } else { + } else if (privateVol != null) { intent = buildVolumeSettingsPendingIntent(privateVol); + } else { + intent = null; } final Notification notif = new Notification.Builder(mContext) diff --git a/packages/SystemUI/src/com/android/systemui/volume/SegmentedButtons.java b/packages/SystemUI/src/com/android/systemui/volume/SegmentedButtons.java index 81461bd..f432808 100644 --- a/packages/SystemUI/src/com/android/systemui/volume/SegmentedButtons.java +++ b/packages/SystemUI/src/com/android/systemui/volume/SegmentedButtons.java @@ -57,7 +57,7 @@ public class SegmentedButtons extends LinearLayout { return mSelectedValue; } - public void setSelectedValue(Object value) { + public void setSelectedValue(Object value, boolean fromClick) { if (Objects.equals(value, mSelectedValue)) return; mSelectedValue = value; for (int i = 0; i < getChildCount(); i++) { @@ -67,7 +67,7 @@ public class SegmentedButtons extends LinearLayout { c.setSelected(selected); c.setTypeface(selected ? MEDIUM : REGULAR); } - fireOnSelected(); + fireOnSelected(fromClick); } public void addButton(int labelResId, int contentDescriptionResId, Object value) { @@ -100,9 +100,9 @@ public class SegmentedButtons extends LinearLayout { } } - private void fireOnSelected() { + private void fireOnSelected(boolean fromClick) { if (mCallback != null) { - mCallback.onSelected(mSelectedValue); + mCallback.onSelected(mSelectedValue, fromClick); } } @@ -115,11 +115,11 @@ public class SegmentedButtons extends LinearLayout { private final View.OnClickListener mClick = new View.OnClickListener() { @Override public void onClick(View v) { - setSelectedValue(v.getTag()); + setSelectedValue(v.getTag(), true /* fromClick */); } }; public interface Callback extends Interaction.Callback { - void onSelected(Object value); + void onSelected(Object value, boolean fromClick); } } diff --git a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialog.java b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialog.java index 0ab0392..a4ccfd1 100644 --- a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialog.java +++ b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialog.java @@ -462,6 +462,9 @@ public class VolumeDialog { } protected void dismissH(int reason) { + if (mMotion.isAnimating()) { + return; + } mHandler.removeMessages(H.DISMISS); mHandler.removeMessages(H.SHOW); if (!mShowing) return; @@ -741,12 +744,7 @@ public class VolumeDialog { private void updateVolumeRowSliderTintH(VolumeRow row, boolean isActive) { if (isActive && mExpanded) { - row.slider.setFocusable(true); - row.slider.setFocusableInTouchMode(true); row.slider.requestFocus(); - } else { - row.slider.setFocusableInTouchMode(false); - row.slider.setFocusable(false); } final ColorStateList tint = isActive && row.slider.isEnabled() ? mActiveSliderTint : mInactiveSliderTint; diff --git a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogMotion.java b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogMotion.java index 7de02f3..4bb1011 100644 --- a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogMotion.java +++ b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogMotion.java @@ -126,6 +126,11 @@ public class VolumeDialogMotion { return mChevron.getHeight() / 6; } + private int chevronPosY() { + final Object tag = mChevron == null ? null : mChevron.getTag(); + return tag == null ? 0 : (Integer) tag; + } + private void startShowAnimation() { if (D.BUG) Log.d(TAG, "startShowAnimation"); mDialogView.animate() @@ -139,7 +144,7 @@ public class VolumeDialogMotion { if (mChevronPositionAnimator == null) return; // reposition chevron final float v = (Float) mChevronPositionAnimator.getAnimatedValue(); - final int posY = (Integer) mChevron.getTag(); + final int posY = chevronPosY(); mChevron.setTranslationY(posY + v + -mDialogView.getTranslationY()); }}) .start(); @@ -216,7 +221,7 @@ public class VolumeDialogMotion { @Override public void onAnimationUpdate(ValueAnimator animation) { mContents.setTranslationY(-mDialogView.getTranslationY()); - int posY = (Integer) mChevron.getTag(); + final int posY = chevronPosY(); mChevron.setTranslationY(posY + -mDialogView.getTranslationY()); } }) diff --git a/packages/SystemUI/src/com/android/systemui/volume/ZenModePanel.java b/packages/SystemUI/src/com/android/systemui/volume/ZenModePanel.java index 8035cd3..3c9a7fc 100644 --- a/packages/SystemUI/src/com/android/systemui/volume/ZenModePanel.java +++ b/packages/SystemUI/src/com/android/systemui/volume/ZenModePanel.java @@ -391,7 +391,7 @@ public class ZenModePanel extends LinearLayout { setExpanded(isShown()); mSessionZen = zen; } - mZenButtons.setSelectedValue(zen); + mZenButtons.setSelectedValue(zen, false /* fromClick */); updateWidgets(); handleUpdateConditions(); if (mExpanded) { @@ -968,10 +968,12 @@ public class ZenModePanel extends LinearLayout { private final SegmentedButtons.Callback mZenButtonsCallback = new SegmentedButtons.Callback() { @Override - public void onSelected(final Object value) { + public void onSelected(final Object value, boolean fromClick) { if (value != null && mZenButtons.isShown() && isAttachedToWindow()) { final int zen = (Integer) value; - MetricsLogger.action(mContext, MetricsLogger.QS_DND_ZEN_SELECT, zen); + if (fromClick) { + MetricsLogger.action(mContext, MetricsLogger.QS_DND_ZEN_SELECT, zen); + } if (DEBUG) Log.d(mTag, "mZenButtonsCallback selected=" + zen); final Uri realConditionId = getRealConditionId(mSessionExitCondition); AsyncTask.execute(new Runnable() { |