diff options
Diffstat (limited to 'packages')
386 files changed, 2463 insertions, 634 deletions
diff --git a/packages/BackupRestoreConfirmation/res/values-ca/strings.xml b/packages/BackupRestoreConfirmation/res/values-ca/strings.xml index c511510..32cfefc 100644 --- a/packages/BackupRestoreConfirmation/res/values-ca/strings.xml +++ b/packages/BackupRestoreConfirmation/res/values-ca/strings.xml @@ -16,7 +16,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="backup_confirm_title" msgid="827563724209303345">"Fes una còpia de seguretat completa"</string> + <string name="backup_confirm_title" msgid="827563724209303345">"Còpia de seguretat completa"</string> <string name="restore_confirm_title" msgid="5469365809567486602">"Restaura completament"</string> <string name="backup_confirm_text" msgid="1878021282758896593">"S\'ha sol·licitat una còpia de seguretat completa de totes les dades a un equip de sobretaula connectat. Vols permetre que això passi?"\n" "\n"Si no has sol·licitat la còpia de seguretat tu mateix, no permetis que continuï l\'operació."</string> <string name="allow_backup_button_label" msgid="4217228747769644068">"Còpia de seguretat de dades"</string> diff --git a/packages/BackupRestoreConfirmation/res/values-fa/strings.xml b/packages/BackupRestoreConfirmation/res/values-fa/strings.xml index 6da7d4a..4349444 100644 --- a/packages/BackupRestoreConfirmation/res/values-fa/strings.xml +++ b/packages/BackupRestoreConfirmation/res/values-fa/strings.xml @@ -18,7 +18,7 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="backup_confirm_title" msgid="827563724209303345">"پشتیبانگیری کامل"</string> <string name="restore_confirm_title" msgid="5469365809567486602">"بازیابی کامل"</string> - <string name="backup_confirm_text" msgid="1878021282758896593">"درخواست پشتیبان گیری کامل از تمام دادهها به یک رایانه دسکتاپ متصل داده شده است. آیا میخواهید این عمل انجام شود؟"\n\n"اگر شما درخواست تهیه نسخهٔ پشتیبان را ندادهاید، اجازه ادامه عملیات را ندهید."</string> + <string name="backup_confirm_text" msgid="1878021282758896593">"درخواست پشتیبان گیری کامل از تمام دادهها به یک رایانه دسکتاپ متصل داده شده است. آیا میخواهید این عمل انجام شود؟"\n\n"اگر شما درخواست تهیهٔ نسخهٔ پشتیبان را ندادهاید، اجازه ادامه عملیات را ندهید."</string> <string name="allow_backup_button_label" msgid="4217228747769644068">"از دادههای من نسخهٔ پشتیبان تهیه شود"</string> <string name="deny_backup_button_label" msgid="6009119115581097708">"نسخهٔ پشتیبان تهیه نشود"</string> <string name="restore_confirm_text" msgid="7499866728030461776">"بازیابی کامل تمام دادهها از یک رایانه دسک تاپ متصل درخواست شده است. آیا میخواهید این اجازه را بدهید؟"\n\n"اگر خود شما درخواست بازیابی ندادهاید، اجازه ادامه این عملیات را ندهید. با این کار همه دادههایی که اکنون روی دستگاه است جایگزین میشود!"</string> diff --git a/packages/BackupRestoreConfirmation/res/values-hi/strings.xml b/packages/BackupRestoreConfirmation/res/values-hi/strings.xml index ccac982..1495f8e 100644 --- a/packages/BackupRestoreConfirmation/res/values-hi/strings.xml +++ b/packages/BackupRestoreConfirmation/res/values-hi/strings.xml @@ -24,12 +24,12 @@ <string name="restore_confirm_text" msgid="7499866728030461776">"कनेक्ट किए गए डेस्कटॉप कंप्यूटर से सभी डेटा की पूर्ण पुनर्स्थापना का अनुरोध किया गया है. क्या आप इसकी अनुमति देना चाहते हैं?"\n\n"यदि आपने स्वयं पुनर्प्राप्ति का अनुरोध नहीं किया है, तो प्रक्रिया जारी रखने की अनुमति न दें. इससे वर्तमान में आपके उपकरण पर मौजूद डेटा बदल जाएगा!"</string> <string name="allow_restore_button_label" msgid="3081286752277127827">"मेरा डेटा पुनर्स्थापित करें"</string> <string name="deny_restore_button_label" msgid="1724367334453104378">"पुनर्स्थापित न करें"</string> - <string name="current_password_text" msgid="8268189555578298067">"कृपया नीचे अपना वर्तमान बैकअप पासवर्ड दर्ज करें:"</string> - <string name="device_encryption_restore_text" msgid="1570864916855208992">"कृपया नीचे अपना उपकरण एन्क्रिप्शन पासवर्ड दर्ज करें."</string> + <string name="current_password_text" msgid="8268189555578298067">"कृपया नीचे अपना वर्तमान बैकअप पासवर्ड डालें:"</string> + <string name="device_encryption_restore_text" msgid="1570864916855208992">"कृपया नीचे अपना उपकरण एन्क्रिप्शन पासवर्ड डालें."</string> <string name="device_encryption_backup_text" msgid="5866590762672844664">"कृपया अपना उपकरण एन्क्रिप्शन पासवर्ड नीचे दर्ज करें. बैकअप संग्रहण को एन्क्रिप्ट करने के लिए भी इसका उपयोग किया जाएगा."</string> - <string name="backup_enc_password_text" msgid="4981585714795233099">"कृपया संपूर्ण बैकअप डेटा को एन्क्रिप्ट करने में उपयोग के लिए पासवर्ड दर्ज करें. यदि यह खाली छोड़ दिया जाता है, तो आपके वर्तमान बैकअप पासवर्ड का उपयोग किया जाएगा:"</string> - <string name="backup_enc_password_optional" msgid="1350137345907579306">"यदि आप संपूर्ण बैकअप डेटा एन्क्रिप्ट करना चाहते हैं, तो नीचे पासवर्ड दर्ज करें:"</string> - <string name="restore_enc_password_text" msgid="6140898525580710823">"यदि पुनर्स्थापित डेटा को एन्क्रिप्ट किया गया है, तो कृपया नीचे पासवर्ड दर्ज करें:"</string> + <string name="backup_enc_password_text" msgid="4981585714795233099">"कृपया संपूर्ण बैकअप डेटा को एन्क्रिप्ट करने में उपयोग के लिए पासवर्ड डालें. यदि यह खाली छोड़ दिया जाता है, तो आपके वर्तमान बैकअप पासवर्ड का उपयोग किया जाएगा:"</string> + <string name="backup_enc_password_optional" msgid="1350137345907579306">"यदि आप संपूर्ण बैकअप डेटा एन्क्रिप्ट करना चाहते हैं, तो नीचे पासवर्ड डालें:"</string> + <string name="restore_enc_password_text" msgid="6140898525580710823">"यदि पुनर्स्थापित डेटा को एन्क्रिप्ट किया गया है, तो कृपया नीचे पासवर्ड डालें:"</string> <string name="toast_backup_started" msgid="550354281452756121">"बैकअप प्रारंभ हो रहा है..."</string> <string name="toast_backup_ended" msgid="3818080769548726424">"बैकअप पूर्ण"</string> <string name="toast_restore_started" msgid="7881679218971277385">"पुनर्स्थापना प्रारंभ हो रही है..."</string> diff --git a/packages/BackupRestoreConfirmation/res/values-pt-rPT/strings.xml b/packages/BackupRestoreConfirmation/res/values-pt-rPT/strings.xml index 9540300..a486f54 100644 --- a/packages/BackupRestoreConfirmation/res/values-pt-rPT/strings.xml +++ b/packages/BackupRestoreConfirmation/res/values-pt-rPT/strings.xml @@ -18,15 +18,15 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="backup_confirm_title" msgid="827563724209303345">"Cópia de segurança completa"</string> <string name="restore_confirm_title" msgid="5469365809567486602">"Restauro completo"</string> - <string name="backup_confirm_text" msgid="1878021282758896593">"Foi solicitada uma cópia de segurança completa de todos os dados para um computador de secretária. Pretende permitir esta operação?"\n\n"Caso não tenha solicitado a cópia de segurança, não permita que a operação prossiga."</string> + <string name="backup_confirm_text" msgid="1878021282758896593">"Foi solicitada uma cópia de segurança completa de todos os dados para um computador. Pretende permitir esta operação?"\n\n"Caso não tenha solicitado a cópia de segurança, não permita que a operação prossiga."</string> <string name="allow_backup_button_label" msgid="4217228747769644068">"Fazer cópia de seg. dos dados"</string> <string name="deny_backup_button_label" msgid="6009119115581097708">"Não efetuar cópia de seg."</string> - <string name="restore_confirm_text" msgid="7499866728030461776">"Foi solicitado um restauro completo de todos os dados a partir de um computador de secretária. Pretende permitir esta operação?"\n\n"Caso não tenha solicitado o restauro, não permita que a operação prossiga. Isto substituirá os dados existentes no aparelho!"</string> + <string name="restore_confirm_text" msgid="7499866728030461776">"Foi solicitado um restauro completo de todos os dados a partir de um computador. Pretende permitir esta operação?"\n\n"Caso não tenha solicitado o restauro, não permita que a operação prossiga. Isto substituirá os dados existentes no equipamento!"</string> <string name="allow_restore_button_label" msgid="3081286752277127827">"Restaurar os meus dados"</string> <string name="deny_restore_button_label" msgid="1724367334453104378">"Não restaurar"</string> <string name="current_password_text" msgid="8268189555578298067">"Introduza a palavra-passe de cópia de segurança atual abaixo:"</string> - <string name="device_encryption_restore_text" msgid="1570864916855208992">"Introduza a palavra-passe de encriptação do aparelho abaixo."</string> - <string name="device_encryption_backup_text" msgid="5866590762672844664">"Introduza a palavra-passe de encriptação do aparelho abaixo. Esta também será utilizada para encriptar o arquivo da cópia de segurança."</string> + <string name="device_encryption_restore_text" msgid="1570864916855208992">"Introduza a palavra-passe de encriptação do dispositivo abaixo."</string> + <string name="device_encryption_backup_text" msgid="5866590762672844664">"Introduza a palavra-passe de encriptação do dispositivo abaixo. Esta também será utilizada para encriptar o arquivo da cópia de segurança."</string> <string name="backup_enc_password_text" msgid="4981585714795233099">"Introduza uma palavra-passe a utilizar para encriptar os dados da cópia de segurança completa. Se deixar o campo em branco, será utilizada a palavra-passe de cópia de segurança atual."</string> <string name="backup_enc_password_optional" msgid="1350137345907579306">"Se pretender encriptar os dados da cópia de segurança completa, introduza uma palavra-passe abaixo:"</string> <string name="restore_enc_password_text" msgid="6140898525580710823">"Se os dados a restaurar estiverem encriptados, introduza a palavra-passe abaixo:"</string> diff --git a/packages/BackupRestoreConfirmation/res/values-ru/strings.xml b/packages/BackupRestoreConfirmation/res/values-ru/strings.xml index 98b8bfc..0dbba05 100644 --- a/packages/BackupRestoreConfirmation/res/values-ru/strings.xml +++ b/packages/BackupRestoreConfirmation/res/values-ru/strings.xml @@ -32,7 +32,7 @@ <string name="restore_enc_password_text" msgid="6140898525580710823">"Если восстановленные данные зашифрованы, введите пароль:"</string> <string name="toast_backup_started" msgid="550354281452756121">"Резервное копирование..."</string> <string name="toast_backup_ended" msgid="3818080769548726424">"Резервное копирование завершено"</string> - <string name="toast_restore_started" msgid="7881679218971277385">"Восстановление..."</string> + <string name="toast_restore_started" msgid="7881679218971277385">"Синхронизация"</string> <string name="toast_restore_ended" msgid="1764041639199696132">"Восстановление завершено"</string> <string name="toast_timeout" msgid="5276598587087626877">"Время ожидания истекло"</string> </resources> diff --git a/packages/DefaultContainerService/AndroidManifest.xml b/packages/DefaultContainerService/AndroidManifest.xml index 3dcd232..57c87e4 100644 --- a/packages/DefaultContainerService/AndroidManifest.xml +++ b/packages/DefaultContainerService/AndroidManifest.xml @@ -7,6 +7,8 @@ <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 --> + <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" /> diff --git a/packages/DefaultContainerService/src/com/android/defcontainer/DefaultContainerService.java b/packages/DefaultContainerService/src/com/android/defcontainer/DefaultContainerService.java index 731a09c..de77cac 100644 --- a/packages/DefaultContainerService/src/com/android/defcontainer/DefaultContainerService.java +++ b/packages/DefaultContainerService/src/com/android/defcontainer/DefaultContainerService.java @@ -16,16 +16,12 @@ package com.android.defcontainer; -import com.android.internal.app.IMediaContainerService; -import com.android.internal.content.NativeLibraryHelper; -import com.android.internal.content.PackageHelper; - import android.app.IntentService; import android.content.Intent; -import android.content.pm.MacAuthenticatedInputStream; import android.content.pm.ContainerEncryptionParams; import android.content.pm.IPackageManager; import android.content.pm.LimitedLengthInputStream; +import android.content.pm.MacAuthenticatedInputStream; import android.content.pm.PackageCleanItem; import android.content.pm.PackageInfo; import android.content.pm.PackageInfoLite; @@ -43,10 +39,16 @@ import android.os.Process; import android.os.RemoteException; import android.os.ServiceManager; import android.os.StatFs; +import android.os.SystemClock; import android.provider.Settings; import android.util.DisplayMetrics; +import android.util.Log; import android.util.Slog; +import com.android.internal.app.IMediaContainerService; +import com.android.internal.content.NativeLibraryHelper; +import com.android.internal.content.PackageHelper; + import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; @@ -228,9 +230,10 @@ public class DefaultContainerService extends IntentService { public long calculateDirectorySize(String path) throws RemoteException { Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND); - final File directory = new File(path); - if (directory.exists() && directory.isDirectory()) { - return MeasurementUtils.measureDirectory(path); + final File dir = Environment.maybeTranslateEmulatedPathToInternal(new File(path)); + if (dir.exists() && dir.isDirectory()) { + final String targetPath = dir.getAbsolutePath(); + return MeasurementUtils.measureDirectory(targetPath); } else { return 0L; } diff --git a/packages/FusedLocation/Android.mk b/packages/FusedLocation/Android.mk index a81b9f1..318782f 100644 --- a/packages/FusedLocation/Android.mk +++ b/packages/FusedLocation/Android.mk @@ -23,6 +23,5 @@ LOCAL_JAVA_LIBRARIES := com.android.location.provider LOCAL_PACKAGE_NAME := FusedLocation LOCAL_CERTIFICATE := platform -LOCAL_SDK_VERSION := current include $(BUILD_PACKAGE) diff --git a/packages/FusedLocation/AndroidManifest.xml b/packages/FusedLocation/AndroidManifest.xml index 779428e..6a4d4bf 100644 --- a/packages/FusedLocation/AndroidManifest.xml +++ b/packages/FusedLocation/AndroidManifest.xml @@ -18,14 +18,17 @@ --> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.android.location.fused" - coreApp="true"> + coreApp="true" + android:sharedUserId="android.uid.system"> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.INSTALL_LOCATION_PROVIDER" /> + <uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL" /> <application - android:label="@string/app_label"> + android:label="@string/app_label" + android:process="system"> <uses-library android:name="com.android.location.provider" /> @@ -39,6 +42,7 @@ <action android:name="com.android.location.service.FusedLocationProvider" /> </intent-filter> <meta-data android:name="serviceVersion" android:value="0" /> + <meta-data android:name="serviceIsMultiuser" android:value="true" /> </service> </application> </manifest> diff --git a/packages/FusedLocation/src/com/android/location/fused/FusedLocationProvider.java b/packages/FusedLocation/src/com/android/location/fused/FusedLocationProvider.java index 7918882..56feb47 100644 --- a/packages/FusedLocation/src/com/android/location/fused/FusedLocationProvider.java +++ b/packages/FusedLocation/src/com/android/location/fused/FusedLocationProvider.java @@ -24,13 +24,17 @@ import com.android.location.provider.LocationProviderBase; import com.android.location.provider.ProviderPropertiesUnbundled; import com.android.location.provider.ProviderRequestUnbundled; +import android.content.BroadcastReceiver; import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; import android.location.Criteria; import android.location.LocationProvider; import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.os.Message; +import android.os.UserHandle; import android.os.WorkSource; public class FusedLocationProvider extends LocationProviderBase implements FusionEngine.Callback { @@ -60,6 +64,19 @@ public class FusedLocationProvider extends LocationProviderBase implements Fusio super(TAG, PROPERTIES); mContext = context; mEngine = new FusionEngine(context, Looper.myLooper()); + + // listen for user change + IntentFilter intentFilter = new IntentFilter(); + intentFilter.addAction(Intent.ACTION_USER_SWITCHED); + mContext.registerReceiverAsUser(new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + String action = intent.getAction(); + if (Intent.ACTION_USER_SWITCHED.equals(action)) { + mEngine.switchUser(); + } + } + }, UserHandle.ALL, intentFilter, null, mHandler); } /** diff --git a/packages/FusedLocation/src/com/android/location/fused/FusionEngine.java b/packages/FusedLocation/src/com/android/location/fused/FusionEngine.java index f909158..4ba6c34 100644 --- a/packages/FusedLocation/src/com/android/location/fused/FusionEngine.java +++ b/packages/FusedLocation/src/com/android/location/fused/FusionEngine.java @@ -300,4 +300,12 @@ public class FusionEngine implements LocationListener { s.append(" ").append(mStats.get(NETWORK)).append('\n'); pw.append(s); } + + /** Called on mLooper thread */ + public void switchUser() { + // reset state to prevent location data leakage + mFusedLocation = null; + mGpsLocation = null; + mNetworkLocation = null; + } } diff --git a/packages/SettingsProvider/res/values/defaults.xml b/packages/SettingsProvider/res/values/defaults.xml index ac4795e..bfb0931 100644 --- a/packages/SettingsProvider/res/values/defaults.xml +++ b/packages/SettingsProvider/res/values/defaults.xml @@ -43,8 +43,6 @@ --> <string name="def_location_providers_allowed" translatable="false">gps</string> <bool name="assisted_gps_enabled">true</bool> - <!-- 0 == mobile, 1 == wifi. --> - <integer name="def_network_preference">1</integer> <bool name="def_netstats_enabled">true</bool> <bool name="def_usb_mass_storage_enabled">true</bool> <bool name="def_wifi_on">false</bool> diff --git a/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java b/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java index f92bba0..5838526 100644 --- a/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java +++ b/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java @@ -71,7 +71,7 @@ public class DatabaseHelper extends SQLiteOpenHelper { // database gets upgraded properly. At a minimum, please confirm that 'upgradeVersion' // is properly propagated through your change. Not doing so will result in a loss of user // settings. - private static final int DATABASE_VERSION = 95; + private static final int DATABASE_VERSION = 97; private Context mContext; private int mUserHandle; @@ -1487,7 +1487,6 @@ public class DatabaseHelper extends SQLiteOpenHelper { // Redo this step, since somehow it didn't work the first time for some users if (mUserHandle == UserHandle.USER_OWNER) { db.beginTransaction(); - SQLiteStatement stmt = null; try { // Migrate now-global settings String[] settingsToMove = hashsetToStringArray(SettingsProvider.sSystemGlobalKeys); @@ -1498,7 +1497,6 @@ public class DatabaseHelper extends SQLiteOpenHelper { db.setTransactionSuccessful(); } finally { db.endTransaction(); - if (stmt != null) stmt.close(); } } upgradeVersion = 94; @@ -1523,6 +1521,25 @@ public class DatabaseHelper extends SQLiteOpenHelper { upgradeVersion = 95; } + if (upgradeVersion == 95) { + if (mUserHandle == UserHandle.USER_OWNER) { + db.beginTransaction(); + try { + String[] settingsToMove = { Settings.Global.BUGREPORT_IN_POWER_MENU }; + moveSettingsToNewTable(db, TABLE_SECURE, TABLE_GLOBAL, settingsToMove, true); + db.setTransactionSuccessful(); + } finally { + db.endTransaction(); + } + } + upgradeVersion = 96; + } + + if (upgradeVersion == 96) { + // NOP bump due to a reverted change that some people got on upgrade. + upgradeVersion = 97; + } + // *** Remember to update DATABASE_VERSION above! if (upgradeVersion != currentVersion) { @@ -2179,9 +2196,6 @@ public class DatabaseHelper extends SQLiteOpenHelper { loadBooleanSetting(stmt, Settings.Global.INSTALL_NON_MARKET_APPS, R.bool.def_install_non_market_apps); - loadIntegerSetting(stmt, Settings.Global.NETWORK_PREFERENCE, - R.integer.def_network_preference); - loadBooleanSetting(stmt, Settings.Global.USB_MASS_STORAGE_ENABLED, R.bool.def_usb_mass_storage_enabled); diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java index 621e662..a446e40 100644 --- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java +++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java @@ -16,8 +16,6 @@ package com.android.providers.settings; -import java.util.Locale; - import android.app.ActivityManagerNative; import android.app.IActivityManager; import android.app.backup.IBackupManager; @@ -28,9 +26,12 @@ import android.media.AudioManager; import android.os.IPowerManager; import android.os.RemoteException; import android.os.ServiceManager; +import android.os.UserManager; import android.provider.Settings; import android.text.TextUtils; +import java.util.Locale; + public class SettingsHelper { private Context mContext; private AudioManager mAudioManager; @@ -96,8 +97,12 @@ public class SettingsHelper { } private void setGpsLocation(String value) { + UserManager um = (UserManager) mContext.getSystemService(Context.USER_SERVICE); + if (um.hasUserRestriction(UserManager.DISALLOW_SHARE_LOCATION)) { + return; + } final String GPS = LocationManager.GPS_PROVIDER; - boolean enabled = + boolean enabled = GPS.equals(value) || value.startsWith(GPS + ",") || value.endsWith("," + GPS) || diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java index f18338a..45319a8 100644 --- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java +++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java @@ -23,6 +23,7 @@ import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; import android.app.ActivityManager; +import android.app.AppOpsManager; import android.app.backup.BackupManager; import android.content.BroadcastReceiver; import android.content.ContentProvider; @@ -323,6 +324,7 @@ public class SettingsProvider extends ContentProvider { mBackupManager = new BackupManager(getContext()); mUserManager = (UserManager) getContext().getSystemService(Context.USER_SERVICE); + setAppOps(AppOpsManager.OP_NONE, AppOpsManager.OP_WRITE_SETTINGS); establishDbTracking(UserHandle.USER_OWNER); IntentFilter userFilter = new IntentFilter(); @@ -544,7 +546,8 @@ public class SettingsProvider extends ContentProvider { * Fast path that avoids the use of chatty remoted Cursors. */ @Override - public Bundle call(String method, String request, Bundle args) { + public Bundle callFromPackage(String callingPackage, String method, String request, + Bundle args) { int callingUser = UserHandle.getCallingUserId(); if (args != null) { int reqUser = args.getInt(Settings.CALL_METHOD_USER_KEY, callingUser); @@ -586,7 +589,22 @@ public class SettingsProvider extends ContentProvider { // Put methods - new value is in the args bundle under the key named by // the Settings.NameValueTable.VALUE static. final String newValue = (args == null) - ? null : args.getString(Settings.NameValueTable.VALUE); + ? null : args.getString(Settings.NameValueTable.VALUE); + + // Framework can't do automatic permission checking for calls, so we need + // to do it here. + if (getContext().checkCallingOrSelfPermission(android.Manifest.permission.WRITE_SETTINGS) + != PackageManager.PERMISSION_GRANTED) { + throw new SecurityException( + String.format("Permission denial: writing to settings requires %1$s", + android.Manifest.permission.WRITE_SETTINGS)); + } + + // Also need to take care of app op. + if (getAppOpsManager().noteOp(AppOpsManager.OP_WRITE_SETTINGS, Binder.getCallingUid(), + callingPackage) != AppOpsManager.MODE_ALLOWED) { + return null; + } final ContentValues values = new ContentValues(); values.put(Settings.NameValueTable.NAME, request); @@ -757,7 +775,7 @@ public class SettingsProvider extends ContentProvider { * @returns whether the database needs to be updated or not, also modifying * 'initialValues' if needed. */ - private boolean parseProviderList(Uri url, ContentValues initialValues) { + private boolean parseProviderList(Uri url, ContentValues initialValues, int desiredUser) { String value = initialValues.getAsString(Settings.Secure.VALUE); String newProviders = null; if (value != null && value.length() > 1) { @@ -770,7 +788,7 @@ public class SettingsProvider extends ContentProvider { String providers = ""; String[] columns = {Settings.Secure.VALUE}; String where = Settings.Secure.NAME + "=\'" + Settings.Secure.LOCATION_PROVIDERS_ALLOWED + "\'"; - Cursor cursor = query(url, columns, where, null, null); + Cursor cursor = queryForUser(url, columns, where, null, null, desiredUser); if (cursor != null && cursor.getCount() == 1) { try { cursor.moveToFirst(); @@ -847,7 +865,7 @@ public class SettingsProvider extends ContentProvider { // Support enabling/disabling a single provider (using "+" or "-" prefix) String name = initialValues.getAsString(Settings.Secure.NAME); if (Settings.Secure.LOCATION_PROVIDERS_ALLOWED.equals(name)) { - if (!parseProviderList(url, initialValues)) return null; + if (!parseProviderList(url, initialValues, desiredUserHandle)) return null; } // If this is an insert() of a key that has been migrated to the global store, diff --git a/packages/SharedStorageBackup/AndroidManifest.xml b/packages/SharedStorageBackup/AndroidManifest.xml index fc21df3..b8df88e 100644 --- a/packages/SharedStorageBackup/AndroidManifest.xml +++ b/packages/SharedStorageBackup/AndroidManifest.xml @@ -24,5 +24,12 @@ <application android:allowClearUserData="false" android:permission="android.permission.CONFIRM_FULL_BACKUP" android:backupAgent="SharedStorageAgent" > + + <service android:name=".ObbBackupService" + android:enabled="true" + android:exported="true"> + </service> + </application> + </manifest> diff --git a/packages/SharedStorageBackup/proguard.flags b/packages/SharedStorageBackup/proguard.flags index f43cb81..6a66a47 100644 --- a/packages/SharedStorageBackup/proguard.flags +++ b/packages/SharedStorageBackup/proguard.flags @@ -1 +1,2 @@ -keep class com.android.sharedstoragebackup.SharedStorageAgent +-keep class com.android.sharedstoragebackup.ObbBackupService diff --git a/packages/SharedStorageBackup/src/com/android/sharedstoragebackup/ObbBackupService.java b/packages/SharedStorageBackup/src/com/android/sharedstoragebackup/ObbBackupService.java new file mode 100644 index 0000000..7ebe096 --- /dev/null +++ b/packages/SharedStorageBackup/src/com/android/sharedstoragebackup/ObbBackupService.java @@ -0,0 +1,151 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.sharedstoragebackup; + +import android.app.Service; +import android.app.backup.BackupDataOutput; +import android.app.backup.FullBackup; +import android.app.backup.IBackupManager; +import android.content.Intent; +import android.os.Environment; +import android.os.IBinder; +import android.os.ParcelFileDescriptor; +import android.os.RemoteException; +import android.util.Log; + +import java.io.File; +import java.io.FileDescriptor; +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.ArrayList; + +import com.android.internal.backup.IObbBackupService; + +/** + * Service that the Backup Manager Services delegates OBB backup/restore operations to, + * because those require accessing external storage. + * + * {@hide} + */ +public class ObbBackupService extends Service { + static final String TAG = "ObbBackupService"; + static final boolean DEBUG = true; + + /** + * IObbBackupService interface implementation + */ + IObbBackupService mService = new IObbBackupService.Stub() { + /* + * Back up a package's OBB directory tree + */ + @Override + public void backupObbs(String packageName, ParcelFileDescriptor data, + int token, IBackupManager callbackBinder) { + final FileDescriptor outFd = data.getFileDescriptor(); + try { + File obbDir = Environment.getExternalStorageAppObbDirectory(packageName); + if (obbDir != null) { + if (obbDir.exists()) { + ArrayList<File> obbList = allFileContents(obbDir); + if (obbList != null) { + // okay, there's at least something there + if (DEBUG) { + Log.i(TAG, obbList.size() + " files to back up"); + } + final String rootPath = obbDir.getCanonicalPath(); + final BackupDataOutput out = new BackupDataOutput(outFd); + for (File f : obbList) { + final String filePath = f.getCanonicalPath(); + if (DEBUG) { + Log.i(TAG, "storing: " + filePath); + } + FullBackup.backupToTar(packageName, FullBackup.OBB_TREE_TOKEN, null, + rootPath, filePath, out); + } + } + } + } + } catch (IOException e) { + Log.w(TAG, "Exception backing up OBBs for " + packageName, e); + } finally { + // Send the EOD marker indicating that there is no more data + try { + FileOutputStream out = new FileOutputStream(outFd); + byte[] buf = new byte[4]; + out.write(buf); + } catch (IOException e) { + Log.e(TAG, "Unable to finalize obb backup stream!"); + } + + try { + callbackBinder.opComplete(token); + } catch (RemoteException e) { + } + } + } + + /* + * Restore an OBB file for the given package from the incoming stream + */ + @Override + public void restoreObbFile(String packageName, ParcelFileDescriptor data, + long fileSize, int type, String path, long mode, long mtime, + int token, IBackupManager callbackBinder) { + try { + File outFile = Environment.getExternalStorageAppObbDirectory(packageName); + if (outFile != null) { + outFile = new File(outFile, path); + } + // outFile is null here if we couldn't get access to external storage, + // in which case restoreFile() will discard the data cleanly and let + // us proceed with the next file segment in the stream. We pass -1 + // for the file mode to suppress attempts to chmod() on shared storage. + FullBackup.restoreFile(data, fileSize, type, -1, mtime, outFile); + } catch (IOException e) { + Log.i(TAG, "Exception restoring OBB " + path, e); + } finally { + try { + callbackBinder.opComplete(token); + } catch (RemoteException e) { + } + } + } + + ArrayList<File> allFileContents(File rootDir) { + final ArrayList<File> files = new ArrayList<File>(); + final ArrayList<File> dirs = new ArrayList<File>(); + + dirs.add(rootDir); + while (!dirs.isEmpty()) { + File dir = dirs.remove(0); + File[] contents = dir.listFiles(); + if (contents != null) { + for (File f : contents) { + if (f.isDirectory()) dirs.add(f); + else if (f.isFile()) files.add(f); + } + } + } + return files; + } + }; + + @Override + public IBinder onBind(Intent intent) { + return mService.asBinder(); + } +} diff --git a/packages/SharedStorageBackup/src/com/android/sharedstoragebackup/SharedStorageAgent.java b/packages/SharedStorageBackup/src/com/android/sharedstoragebackup/SharedStorageAgent.java index a6415b2..89f84fc 100644 --- a/packages/SharedStorageBackup/src/com/android/sharedstoragebackup/SharedStorageAgent.java +++ b/packages/SharedStorageBackup/src/com/android/sharedstoragebackup/SharedStorageAgent.java @@ -4,6 +4,7 @@ import android.app.backup.FullBackupAgent; import android.app.backup.FullBackup; import android.app.backup.FullBackupDataOutput; import android.content.Context; +import android.os.Environment; import android.os.ParcelFileDescriptor; import android.os.storage.StorageManager; import android.os.storage.StorageVolume; @@ -11,6 +12,7 @@ import android.util.Slog; import java.io.File; import java.io.IOException; +import java.util.HashSet; public class SharedStorageAgent extends FullBackupAgent { static final String TAG = "SharedStorageAgent"; @@ -38,13 +40,20 @@ public class SharedStorageAgent extends FullBackupAgent { // "primary" shared storage volume is first in the list. if (mVolumes != null) { if (DEBUG) Slog.i(TAG, "Backing up " + mVolumes.length + " shared volumes"); + // Ignore all apps' getExternalFilesDir() content; it is backed up as part of + // each app-specific payload. + HashSet<String> externalFilesDirFilter = new HashSet<String>(); + final File externalAndroidRoot = new File(Environment.getExternalStorageDirectory(), + Environment.DIRECTORY_ANDROID); + externalFilesDirFilter.add(externalAndroidRoot.getCanonicalPath()); + for (int i = 0; i < mVolumes.length; i++) { StorageVolume v = mVolumes[i]; // Express the contents of volume N this way in the tar stream: // shared/N/path/to/file // The restore will then extract to the given volume String domain = FullBackup.SHARED_PREFIX + i; - fullBackupFileTree(null, domain, v.getPath(), null, output); + fullBackupFileTree(null, domain, v.getPath(), externalFilesDirFilter, output); } } } diff --git a/packages/Shell/Android.mk b/packages/Shell/Android.mk new file mode 100644 index 0000000..fc4c0f5 --- /dev/null +++ b/packages/Shell/Android.mk @@ -0,0 +1,13 @@ +LOCAL_PATH:= $(call my-dir) +include $(CLEAR_VARS) + +LOCAL_MODULE_TAGS := optional + +LOCAL_SRC_FILES := $(call all-subdir-java-files) + +LOCAL_STATIC_JAVA_LIBRARIES := android-support-v4 + +LOCAL_PACKAGE_NAME := Shell +LOCAL_CERTIFICATE := platform + +include $(BUILD_PACKAGE) diff --git a/packages/Shell/AndroidManifest.xml b/packages/Shell/AndroidManifest.xml new file mode 100644 index 0000000..ffb4c20 --- /dev/null +++ b/packages/Shell/AndroidManifest.xml @@ -0,0 +1,99 @@ +<manifest xmlns:android="http://schemas.android.com/apk/res/android" + package="com.android.shell" + coreApp="true" + android:sharedUserId="android.uid.shell" + > + + <!-- Standard permissions granted to the shell. --> + <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> + <uses-permission android:name="android.permission.SEND_SMS" /> + <uses-permission android:name="android.permission.CALL_PHONE" /> + <uses-permission android:name="android.permission.READ_CONTACTS" /> + <uses-permission android:name="android.permission.WRITE_CONTACTS" /> + <uses-permission android:name="android.permission.READ_CALENDAR" /> + <uses-permission android:name="android.permission.WRITE_CALENDAR" /> + <uses-permission android:name="android.permission.READ_USER_DICTIONARY" /> + <uses-permission android:name="android.permission.WRITE_USER_DICTIONARY" /> + <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> + <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> + <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" /> + <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> + <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> + <uses-permission android:name="android.permission.BLUETOOTH" /> + <uses-permission android:name="android.permission.EXPAND_STATUS_BAR" /> + <!-- System tool permissions granted to the shell. --> + <uses-permission android:name="android.permission.GET_TASKS" /> + <uses-permission android:name="android.permission.CHANGE_CONFIGURATION" /> + <uses-permission android:name="android.permission.REORDER_TASKS" /> + <uses-permission android:name="android.permission.SET_ANIMATION_SCALE" /> + <uses-permission android:name="android.permission.SET_PREFERRED_APPLICATIONS" /> + <uses-permission android:name="android.permission.WRITE_SETTINGS" /> + <uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" /> + <uses-permission android:name="android.permission.BROADCAST_STICKY" /> + <!-- Development tool permissions granted to the shell. --> + <uses-permission android:name="android.permission.SET_DEBUG_APP" /> + <uses-permission android:name="android.permission.SET_PROCESS_LIMIT" /> + <uses-permission android:name="android.permission.SET_ALWAYS_FINISH" /> + <uses-permission android:name="android.permission.DUMP" /> + <uses-permission android:name="android.permission.SIGNAL_PERSISTENT_PROCESSES" /> + <uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" /> + <!-- Internal permissions granted to the shell. --> + <uses-permission android:name="android.permission.FORCE_BACK" /> + <uses-permission android:name="android.permission.BATTERY_STATS" /> + <uses-permission android:name="android.permission.INTERNAL_SYSTEM_WINDOW" /> + <uses-permission android:name="android.permission.INJECT_EVENTS" /> + <uses-permission android:name="android.permission.RETRIEVE_WINDOW_CONTENT" /> + <uses-permission android:name="android.permission.SET_ACTIVITY_WATCHER" /> + <uses-permission android:name="android.permission.READ_INPUT_STATE" /> + <uses-permission android:name="android.permission.SET_ORIENTATION" /> + <uses-permission android:name="android.permission.INSTALL_PACKAGES" /> + <uses-permission android:name="android.permission.CLEAR_APP_USER_DATA" /> + <uses-permission android:name="android.permission.DELETE_CACHE_FILES" /> + <uses-permission android:name="android.permission.DELETE_PACKAGES" /> + <uses-permission android:name="android.permission.ACCESS_SURFACE_FLINGER" /> + <uses-permission android:name="android.permission.READ_FRAME_BUFFER" /> + <uses-permission android:name="android.permission.DEVICE_POWER" /> + <uses-permission android:name="android.permission.INSTALL_LOCATION_PROVIDER" /> + <uses-permission android:name="android.permission.BACKUP" /> + <uses-permission android:name="android.permission.FORCE_STOP_PACKAGES" /> + <uses-permission android:name="android.permission.STOP_APP_SWITCHES" /> + <uses-permission android:name="android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY" /> + <uses-permission android:name="android.permission.GRANT_REVOKE_PERMISSIONS" /> + <uses-permission android:name="android.permission.SET_KEYBOARD_LAYOUT" /> + <uses-permission android:name="android.permission.GET_DETAILED_TASKS" /> + <uses-permission android:name="android.permission.SET_SCREEN_COMPATIBILITY" /> + <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> + <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> + <uses-permission android:name="android.permission.INTERACT_ACROSS_USERS" /> + <uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL" /> + <uses-permission android:name="android.permission.MANAGE_USERS" /> + <uses-permission android:name="android.permission.BLUETOOTH_STACK" /> + <uses-permission android:name="android.permission.GET_ACCOUNTS" /> + + <application android:label="@string/app_label"> + <provider + android:name="android.support.v4.content.FileProvider" + android:authorities="com.android.shell" + android:grantUriPermissions="true" + android:exported="false"> + <meta-data + android:name="android.support.FILE_PROVIDER_PATHS" + android:resource="@xml/file_provider_paths" /> + </provider> + + <activity + android:name=".BugreportWarningActivity" + android:theme="@*android:style/Theme.Holo.Dialog.Alert" + android:finishOnCloseSystemDialogs="true" + android:excludeFromRecents="true" + android:exported="false" /> + + <receiver + android:name=".BugreportReceiver" + android:permission="android.permission.DUMP"> + <intent-filter> + <action android:name="android.intent.action.BUGREPORT_FINISHED" /> + </intent-filter> + </receiver> + </application> +</manifest> diff --git a/packages/Shell/res/layout/confirm_repeat.xml b/packages/Shell/res/layout/confirm_repeat.xml new file mode 100644 index 0000000..dc250d6 --- /dev/null +++ b/packages/Shell/res/layout/confirm_repeat.xml @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2013 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<LinearLayout + xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:paddingStart="16dip" + android:paddingEnd="16dip" + android:paddingTop="8dip" + android:paddingBottom="16dip" + android:orientation="vertical"> + <TextView + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:text="@string/bugreport_confirm" + android:paddingBottom="16dip" + style="?android:attr/textAppearanceMedium" /> + <CheckBox + android:id="@android:id/checkbox" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:text="@string/bugreport_confirm_repeat" /> +</LinearLayout> diff --git a/packages/Shell/res/values/strings.xml b/packages/Shell/res/values/strings.xml new file mode 100644 index 0000000..e5606c7 --- /dev/null +++ b/packages/Shell/res/values/strings.xml @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2013 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<resources> + <string name="app_label">Shell</string> + + <!-- Title of notification indicating a bugreport has been successfully captured. [CHAR LIMIT=50] --> + <string name="bugreport_finished_title">Bug report captured</string> + <!-- Text of notification indicating that touching will share the captured bugreport. [CHAR LIMIT=100] --> + <string name="bugreport_finished_text">Touch to share your bug report</string> + + <!-- Body of dialog informing user about contents of a bugreport. [CHAR LIMIT=NONE] --> + <string name="bugreport_confirm">Bug reports contain data from the system\'s various log files, including personal and private information. Only share bug reports with apps and people you trust.</string> + <!-- Checkbox that indicates this dialog should be shown again when the next bugreport is taken. [CHAR LIMIT=50] --> + <string name="bugreport_confirm_repeat">Show this message next time</string> +</resources> diff --git a/packages/Shell/res/xml/file_provider_paths.xml b/packages/Shell/res/xml/file_provider_paths.xml new file mode 100644 index 0000000..225c757 --- /dev/null +++ b/packages/Shell/res/xml/file_provider_paths.xml @@ -0,0 +1,3 @@ +<paths xmlns:android="http://schemas.android.com/apk/res/android"> + <files-path name="bugreports" path="bugreports/" /> +</paths> diff --git a/packages/Shell/src/com/android/shell/BugreportPrefs.java b/packages/Shell/src/com/android/shell/BugreportPrefs.java new file mode 100644 index 0000000..3748e89 --- /dev/null +++ b/packages/Shell/src/com/android/shell/BugreportPrefs.java @@ -0,0 +1,45 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.shell; + +import android.content.Context; +import android.content.SharedPreferences; + +/** + * Preferences related to bug reports. + */ +public class BugreportPrefs { + private static final String PREFS_BUGREPORT = "bugreports"; + + private static final String KEY_WARNING_STATE = "warning-state"; + + public static final int STATE_UNKNOWN = 0; + public static final int STATE_SHOW = 1; + public static final int STATE_HIDE = 2; + + public static int getWarningState(Context context, int def) { + final SharedPreferences prefs = context.getSharedPreferences( + PREFS_BUGREPORT, Context.MODE_PRIVATE); + return prefs.getInt(KEY_WARNING_STATE, def); + } + + public static void setWarningState(Context context, int value) { + final SharedPreferences prefs = context.getSharedPreferences( + PREFS_BUGREPORT, Context.MODE_PRIVATE); + prefs.edit().putInt(KEY_WARNING_STATE, value).apply(); + } +} diff --git a/packages/Shell/src/com/android/shell/BugreportReceiver.java b/packages/Shell/src/com/android/shell/BugreportReceiver.java new file mode 100644 index 0000000..7a659ee --- /dev/null +++ b/packages/Shell/src/com/android/shell/BugreportReceiver.java @@ -0,0 +1,181 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.shell; + +import static com.android.shell.BugreportPrefs.STATE_SHOW; +import static com.android.shell.BugreportPrefs.getWarningState; + +import android.accounts.Account; +import android.accounts.AccountManager; +import android.app.Notification; +import android.app.NotificationManager; +import android.app.PendingIntent; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.net.Uri; +import android.os.AsyncTask; +import android.os.FileUtils; +import android.os.SystemProperties; +import android.support.v4.content.FileProvider; +import android.text.format.DateUtils; +import android.util.Patterns; + +import com.google.android.collect.Lists; + +import java.io.File; +import java.util.ArrayList; + +/** + * Receiver that handles finished bugreports, usually by attaching them to an + * {@link Intent#ACTION_SEND}. + */ +public class BugreportReceiver extends BroadcastReceiver { + private static final String TAG = "Shell"; + + private static final String AUTHORITY = "com.android.shell"; + + private static final String EXTRA_BUGREPORT = "android.intent.extra.BUGREPORT"; + private static final String EXTRA_SCREENSHOT = "android.intent.extra.SCREENSHOT"; + + /** + * Always keep the newest 8 bugreport files; 4 reports and 4 screenshots are + * roughly 17MB of disk space. + */ + private static final int MIN_KEEP_COUNT = 8; + + /** + * Always keep bugreports taken in the last week. + */ + private static final long MIN_KEEP_AGE = DateUtils.WEEK_IN_MILLIS; + + @Override + public void onReceive(Context context, Intent intent) { + final File bugreportFile = getFileExtra(intent, EXTRA_BUGREPORT); + final File screenshotFile = getFileExtra(intent, EXTRA_SCREENSHOT); + + // Files are kept on private storage, so turn into Uris that we can + // grant temporary permissions for. + final Uri bugreportUri = FileProvider.getUriForFile(context, AUTHORITY, bugreportFile); + final Uri screenshotUri = FileProvider.getUriForFile(context, AUTHORITY, screenshotFile); + + Intent sendIntent = buildSendIntent(context, bugreportUri, screenshotUri); + Intent notifIntent; + + // Send through warning dialog by default + if (getWarningState(context, STATE_SHOW) == STATE_SHOW) { + notifIntent = buildWarningIntent(context, sendIntent); + } else { + notifIntent = sendIntent; + } + notifIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + + final Notification.Builder builder = new Notification.Builder(context); + builder.setSmallIcon(com.android.internal.R.drawable.stat_sys_adb); + builder.setContentTitle(context.getString(R.string.bugreport_finished_title)); + builder.setTicker(context.getString(R.string.bugreport_finished_title)); + builder.setContentText(context.getString(R.string.bugreport_finished_text)); + builder.setContentIntent(PendingIntent.getActivity( + context, 0, notifIntent, PendingIntent.FLAG_CANCEL_CURRENT)); + builder.setAutoCancel(true); + NotificationManager.from(context).notify(TAG, 0, builder.build()); + + // Clean up older bugreports in background + final PendingResult result = goAsync(); + new AsyncTask<Void, Void, Void>() { + @Override + protected Void doInBackground(Void... params) { + FileUtils.deleteOlderFiles( + bugreportFile.getParentFile(), MIN_KEEP_COUNT, MIN_KEEP_AGE); + result.finish(); + return null; + } + }.execute(); + } + + private static Intent buildWarningIntent(Context context, Intent sendIntent) { + final Intent intent = new Intent(context, BugreportWarningActivity.class); + intent.putExtra(Intent.EXTRA_INTENT, sendIntent); + return intent; + } + + /** + * Build {@link Intent} that can be used to share the given bugreport. + */ + private static Intent buildSendIntent(Context context, Uri bugreportUri, Uri screenshotUri) { + final Intent intent = new Intent(Intent.ACTION_SEND_MULTIPLE); + intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); + intent.addCategory(Intent.CATEGORY_DEFAULT); + intent.setType("application/vnd.android.bugreport"); + + intent.putExtra(Intent.EXTRA_SUBJECT, bugreportUri.getLastPathSegment()); + intent.putExtra(Intent.EXTRA_TEXT, SystemProperties.get("ro.build.description")); + + final ArrayList<Uri> attachments = Lists.newArrayList(bugreportUri, screenshotUri); + intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, attachments); + + final Account sendToAccount = findSendToAccount(context); + if (sendToAccount != null) { + intent.putExtra(Intent.EXTRA_EMAIL, new String[] { sendToAccount.name }); + } + + return intent; + } + + /** + * Find the best matching {@link Account} based on build properties. + */ + private static Account findSendToAccount(Context context) { + final AccountManager am = (AccountManager) context.getSystemService( + Context.ACCOUNT_SERVICE); + + String preferredDomain = SystemProperties.get("sendbug.preferred.domain"); + if (!preferredDomain.startsWith("@")) { + preferredDomain = "@" + preferredDomain; + } + + final Account[] accounts = am.getAccounts(); + Account foundAccount = null; + for (Account account : accounts) { + if (Patterns.EMAIL_ADDRESS.matcher(account.name).matches()) { + if (!preferredDomain.isEmpty()) { + // if we have a preferred domain and it matches, return; otherwise keep + // looking + if (account.name.endsWith(preferredDomain)) { + return account; + } else { + foundAccount = account; + } + // if we don't have a preferred domain, just return since it looks like + // an email address + } else { + return account; + } + } + } + return foundAccount; + } + + private static File getFileExtra(Intent intent, String key) { + final String path = intent.getStringExtra(key); + if (path != null) { + return new File(path); + } else { + return null; + } + } +} diff --git a/packages/Shell/src/com/android/shell/BugreportWarningActivity.java b/packages/Shell/src/com/android/shell/BugreportWarningActivity.java new file mode 100644 index 0000000..a1d879a --- /dev/null +++ b/packages/Shell/src/com/android/shell/BugreportWarningActivity.java @@ -0,0 +1,77 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.shell; + +import static com.android.shell.BugreportPrefs.STATE_HIDE; +import static com.android.shell.BugreportPrefs.STATE_SHOW; +import static com.android.shell.BugreportPrefs.STATE_UNKNOWN; +import static com.android.shell.BugreportPrefs.getWarningState; +import static com.android.shell.BugreportPrefs.setWarningState; + +import android.app.AlertDialog; +import android.content.DialogInterface; +import android.content.Intent; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.widget.CheckBox; + +import com.android.internal.app.AlertActivity; +import com.android.internal.app.AlertController; + +/** + * Dialog that warns about contents of a bugreport. + */ +public class BugreportWarningActivity extends AlertActivity + implements DialogInterface.OnClickListener { + + private Intent mSendIntent; + private CheckBox mConfirmRepeat; + + @Override + public void onCreate(Bundle icicle) { + super.onCreate(icicle); + + mSendIntent = getIntent().getParcelableExtra(Intent.EXTRA_INTENT); + + // We need to touch the extras to unpack them so they get migrated to + // ClipData correctly. + mSendIntent.hasExtra(Intent.EXTRA_STREAM); + + final AlertController.AlertParams ap = mAlertParams; + ap.mView = LayoutInflater.from(this).inflate(R.layout.confirm_repeat, null); + ap.mPositiveButtonText = getString(android.R.string.ok); + ap.mNegativeButtonText = getString(android.R.string.cancel); + ap.mPositiveButtonListener = this; + ap.mNegativeButtonListener = this; + + mConfirmRepeat = (CheckBox) ap.mView.findViewById(android.R.id.checkbox); + mConfirmRepeat.setChecked(getWarningState(this, STATE_UNKNOWN) == STATE_SHOW); + + setupAlert(); + } + + @Override + public void onClick(DialogInterface dialog, int which) { + if (which == AlertDialog.BUTTON_POSITIVE) { + // Remember confirm state, and launch target + setWarningState(this, mConfirmRepeat.isChecked() ? STATE_SHOW : STATE_HIDE); + startActivity(mSendIntent); + } + + finish(); + } +} diff --git a/packages/SystemUI/Android.mk b/packages/SystemUI/Android.mk index 6026258..262000e 100644 --- a/packages/SystemUI/Android.mk +++ b/packages/SystemUI/Android.mk @@ -4,7 +4,8 @@ include $(CLEAR_VARS) LOCAL_MODULE_TAGS := optional LOCAL_SRC_FILES := $(call all-java-files-under, src) \ - ../../../ex/carousel/java/com/android/ex/carousel/carousel.rs + ../../../ex/carousel/java/com/android/ex/carousel/carousel.rs \ + src/com/android/systemui/EventLogTags.logtags LOCAL_JAVA_LIBRARIES := services telephony-common diff --git a/packages/SystemUI/AndroidManifest.xml b/packages/SystemUI/AndroidManifest.xml index cfe70dc..66080f3 100644 --- a/packages/SystemUI/AndroidManifest.xml +++ b/packages/SystemUI/AndroidManifest.xml @@ -10,6 +10,7 @@ <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.INJECT_EVENTS" /> + <uses-permission android:name="android.permission.DUMP" /> <uses-permission android:name="android.permission.WRITE_SETTINGS" /> <uses-permission android:name="android.permission.STATUS_BAR_SERVICE" /> @@ -49,7 +50,8 @@ <uses-permission android:name="android.permission.SET_SCREEN_COMPATIBILITY" /> <uses-permission android:name="android.permission.START_ANY_ACTIVITY" /> <uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL" /> - + <uses-permission android:name="android.permission.GET_TOP_ACTIVITY_INFO" /> + <!-- WindowManager --> <uses-permission android:name="android.permission.INTERNAL_SYSTEM_WINDOW" /> <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> @@ -68,7 +70,8 @@ android:allowBackup="false" android:hardwareAccelerated="true" android:label="@string/app_label" - android:icon="@*android:drawable/platlogo"> + android:icon="@*android:drawable/platlogo" + android:supportsRtl="true"> <!-- Broadcast receiver that gets the broadcast at boot time and starts up everything else. diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_notifications_normal.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_notifications_normal.png Binary files differnew file mode 100644 index 0000000..a937a7d --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_notifications_normal.png diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_notify_clear_normal.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_notify_clear_normal.png Binary files differnew file mode 100644 index 0000000..b0cca26 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_notify_clear_normal.png diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_notify_clear_pressed.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_notify_clear_pressed.png Binary files differnew file mode 100644 index 0000000..f9489bb --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_notify_clear_pressed.png diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_notify_open_normal.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_notify_open_normal.png Binary files differnew file mode 100644 index 0000000..d26aab0 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_notify_open_normal.png diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_notify_open_pressed.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_notify_open_pressed.png Binary files differnew file mode 100644 index 0000000..c02c794 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_notify_open_pressed.png diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_notify_quicksettings_normal.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_notify_quicksettings_normal.png Binary files differnew file mode 100644 index 0000000..fb8c108 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_notify_quicksettings_normal.png diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_notify_quicksettings_pressed.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_notify_quicksettings_pressed.png Binary files differnew file mode 100644 index 0000000..293debc --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_notify_quicksettings_pressed.png diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_airplane_off.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_airplane_off.png Binary files differnew file mode 100644 index 0000000..1403416 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_airplane_off.png diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_airplane_on.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_airplane_on.png Binary files differnew file mode 100644 index 0000000..c35c34d --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_airplane_on.png diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_default_user.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_default_user.png Binary files differnew file mode 100644 index 0000000..28df7e82 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_default_user.png diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_0.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_0.png Binary files differnew file mode 100644 index 0000000..3cc2ab4 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_0.png diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_1.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_1.png Binary files differnew file mode 100644 index 0000000..258e49b --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_1.png diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_1x.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_1x.png Binary files differnew file mode 100644 index 0000000..075250a --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_1x.png diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_2.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_2.png Binary files differnew file mode 100644 index 0000000..b485967 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_2.png diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_3.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_3.png Binary files differnew file mode 100644 index 0000000..a9e0a06 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_3.png diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_3g.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_3g.png Binary files differnew file mode 100644 index 0000000..b03296c --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_3g.png diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_4.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_4.png Binary files differnew file mode 100644 index 0000000..2974c2f --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_4.png diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_4g.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_4g.png Binary files differnew file mode 100644 index 0000000..58b84fc --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_4g.png diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_e.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_e.png Binary files differnew file mode 100644 index 0000000..6a4da0d --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_e.png diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_full_0.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_full_0.png Binary files differnew file mode 100644 index 0000000..4e2cb12 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_full_0.png diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_full_1.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_full_1.png Binary files differnew file mode 100644 index 0000000..abadd36 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_full_1.png diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_full_1x.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_full_1x.png Binary files differnew file mode 100644 index 0000000..a644516 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_full_1x.png diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_full_2.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_full_2.png Binary files differnew file mode 100644 index 0000000..dd52748 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_full_2.png diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_full_3.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_full_3.png Binary files differnew file mode 100644 index 0000000..ecbed41 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_full_3.png diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_full_3g.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_full_3g.png Binary files differnew file mode 100644 index 0000000..6471056 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_full_3g.png diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_full_4.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_full_4.png Binary files differnew file mode 100644 index 0000000..964574d --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_full_4.png diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_full_4g.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_full_4g.png Binary files differnew file mode 100644 index 0000000..e34a1ab --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_full_4g.png diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_full_e.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_full_e.png Binary files differnew file mode 100644 index 0000000..2454d81 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_full_e.png diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_full_g.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_full_g.png Binary files differnew file mode 100644 index 0000000..d3e9a16 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_full_g.png diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_full_h.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_full_h.png Binary files differnew file mode 100644 index 0000000..43bccb3 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_full_h.png diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_full_r.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_full_r.png Binary files differnew file mode 100644 index 0000000..071e569 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_full_r.png diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_g.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_g.png Binary files differnew file mode 100644 index 0000000..b8b298b --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_g.png diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_h.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_h.png Binary files differnew file mode 100644 index 0000000..fb633cc --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_h.png diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_in.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_in.png Binary files differnew file mode 100644 index 0000000..fb08a0c --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_in.png diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_inout.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_inout.png Binary files differnew file mode 100644 index 0000000..013881f --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_inout.png diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_no_network.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_no_network.png Binary files differnew file mode 100644 index 0000000..f0e3410 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_no_network.png diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_no_signal.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_no_signal.png Binary files differnew file mode 100644 index 0000000..7c22391 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_no_signal.png diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_out.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_out.png Binary files differnew file mode 100644 index 0000000..a6ed1f9 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_out.png diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_r.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_r.png Binary files differnew file mode 100644 index 0000000..d4ecfb9 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_r.png diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_sysbar_back.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_sysbar_back.png Binary files differnew file mode 100644 index 0000000..782ebfe --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_sysbar_back.png diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_sysbar_back_land.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_sysbar_back_land.png Binary files differnew file mode 100644 index 0000000..efca67e --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_sysbar_back_land.png diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_sysbar_recent.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_sysbar_recent.png Binary files differnew file mode 100644 index 0000000..677b471 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_sysbar_recent.png diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_sysbar_recent_land.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_sysbar_recent_land.png Binary files differnew file mode 100644 index 0000000..478b9ca --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_sysbar_recent_land.png diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_connected_1x.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_connected_1x.png Binary files differnew file mode 100644 index 0000000..bbf897f --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_connected_1x.png diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_connected_3g.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_connected_3g.png Binary files differnew file mode 100644 index 0000000..292f5b7 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_connected_3g.png diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_connected_4g.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_connected_4g.png Binary files differnew file mode 100644 index 0000000..851892c --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_connected_4g.png diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_connected_e.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_connected_e.png Binary files differnew file mode 100644 index 0000000..8ad379e --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_connected_e.png diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_connected_g.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_connected_g.png Binary files differnew file mode 100644 index 0000000..ca1800c --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_connected_g.png diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_connected_h.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_connected_h.png Binary files differnew file mode 100644 index 0000000..1e71680 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_connected_h.png diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_connected_roam.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_connected_roam.png Binary files differnew file mode 100644 index 0000000..b1cb4b8 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_connected_roam.png diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_fully_connected_1x.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_fully_connected_1x.png Binary files differnew file mode 100644 index 0000000..983ba67 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_fully_connected_1x.png diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_fully_connected_3g.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_fully_connected_3g.png Binary files differnew file mode 100644 index 0000000..fa5ffe9 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_fully_connected_3g.png diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_fully_connected_4g.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_fully_connected_4g.png Binary files differnew file mode 100644 index 0000000..859adb9 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_fully_connected_4g.png diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_fully_connected_e.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_fully_connected_e.png Binary files differnew file mode 100644 index 0000000..0d78728 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_fully_connected_e.png diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_fully_connected_g.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_fully_connected_g.png Binary files differnew file mode 100644 index 0000000..5290dc4 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_fully_connected_g.png diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_fully_connected_h.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_fully_connected_h.png Binary files differnew file mode 100644 index 0000000..f034fbf --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_fully_connected_h.png diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_ringer_silent.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_ringer_silent.png Binary files differnew file mode 100644 index 0000000..6872ec8 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_ringer_silent.png diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_ringer_vibrate.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_ringer_vibrate.png Binary files differnew file mode 100644 index 0000000..98520d3 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_ringer_vibrate.png diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_0.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_0.png Binary files differnew file mode 100644 index 0000000..733563d --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_0.png diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_0_fully.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_0_fully.png Binary files differnew file mode 100644 index 0000000..3ac0231 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_0_fully.png diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_1.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_1.png Binary files differnew file mode 100644 index 0000000..50a3078 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_1.png diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_1_fully.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_1_fully.png Binary files differnew file mode 100644 index 0000000..9e353da --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_1_fully.png diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_2.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_2.png Binary files differnew file mode 100644 index 0000000..5ff0ac6 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_2.png diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_2_fully.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_2_fully.png Binary files differnew file mode 100644 index 0000000..91ca89a --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_2_fully.png diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_3.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_3.png Binary files differnew file mode 100644 index 0000000..784c5da --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_3.png diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_3_fully.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_3_fully.png Binary files differnew file mode 100644 index 0000000..484d4b8 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_3_fully.png diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_4.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_4.png Binary files differnew file mode 100644 index 0000000..db06343 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_4.png diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_4_fully.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_4_fully.png Binary files differnew file mode 100644 index 0000000..62130a0 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_4_fully.png diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_flightmode.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_flightmode.png Binary files differnew file mode 100644 index 0000000..44d1afb --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_flightmode.png diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_in.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_in.png Binary files differnew file mode 100644 index 0000000..f2bd618 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_in.png diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_inout.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_inout.png Binary files differnew file mode 100644 index 0000000..468dec9 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_inout.png diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_null.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_null.png Binary files differnew file mode 100644 index 0000000..7bbe2cc --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_null.png diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_out.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_out.png Binary files differnew file mode 100644 index 0000000..b2f7f59 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_out.png diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_notifications_normal.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_notifications_normal.png Binary files differnew file mode 100644 index 0000000..78c4a5f --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_notifications_normal.png diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_notify_clear_normal.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_notify_clear_normal.png Binary files differnew file mode 100644 index 0000000..a9dbc93 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_notify_clear_normal.png diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_notify_clear_pressed.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_notify_clear_pressed.png Binary files differnew file mode 100644 index 0000000..5bba00f --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_notify_clear_pressed.png diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_notify_open_normal.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_notify_open_normal.png Binary files differnew file mode 100644 index 0000000..b38ddd6 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_notify_open_normal.png diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_notify_open_pressed.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_notify_open_pressed.png Binary files differnew file mode 100644 index 0000000..032ce42 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_notify_open_pressed.png diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_notify_quicksettings_normal.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_notify_quicksettings_normal.png Binary files differnew file mode 100644 index 0000000..d815761 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_notify_quicksettings_normal.png diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_notify_quicksettings_pressed.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_notify_quicksettings_pressed.png Binary files differnew file mode 100644 index 0000000..369bb61 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_notify_quicksettings_pressed.png diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_airplane_off.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_airplane_off.png Binary files differnew file mode 100644 index 0000000..6587c2d --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_airplane_off.png diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_airplane_on.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_airplane_on.png Binary files differnew file mode 100644 index 0000000..833b7f0 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_airplane_on.png diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_default_user.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_default_user.png Binary files differnew file mode 100644 index 0000000..16743ef --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_default_user.png diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_0.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_0.png Binary files differnew file mode 100644 index 0000000..c8020e0 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_0.png diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_1.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_1.png Binary files differnew file mode 100644 index 0000000..a968e96 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_1.png diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_1x.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_1x.png Binary files differnew file mode 100644 index 0000000..712cce4 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_1x.png diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_2.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_2.png Binary files differnew file mode 100644 index 0000000..5ac3715 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_2.png diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_3.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_3.png Binary files differnew file mode 100644 index 0000000..8b4c97c --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_3.png diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_3g.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_3g.png Binary files differnew file mode 100644 index 0000000..835219c --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_3g.png diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_4.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_4.png Binary files differnew file mode 100644 index 0000000..7fea77c --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_4.png diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_4g.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_4g.png Binary files differnew file mode 100644 index 0000000..ec861fa --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_4g.png diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_e.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_e.png Binary files differnew file mode 100644 index 0000000..3bef9e7 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_e.png diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_full_0.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_full_0.png Binary files differnew file mode 100644 index 0000000..31637c2 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_full_0.png diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_full_1.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_full_1.png Binary files differnew file mode 100644 index 0000000..4bedf72 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_full_1.png diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_full_1x.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_full_1x.png Binary files differnew file mode 100644 index 0000000..0cb5f26 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_full_1x.png diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_full_2.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_full_2.png Binary files differnew file mode 100644 index 0000000..c779281 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_full_2.png diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_full_3.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_full_3.png Binary files differnew file mode 100644 index 0000000..7e0f98d --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_full_3.png diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_full_3g.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_full_3g.png Binary files differnew file mode 100644 index 0000000..c258489 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_full_3g.png diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_full_4.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_full_4.png Binary files differnew file mode 100644 index 0000000..d479043 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_full_4.png diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_full_4g.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_full_4g.png Binary files differnew file mode 100644 index 0000000..e1ce328 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_full_4g.png diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_full_e.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_full_e.png Binary files differnew file mode 100644 index 0000000..b1d5d5c --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_full_e.png diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_full_g.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_full_g.png Binary files differnew file mode 100644 index 0000000..b907713 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_full_g.png diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_full_h.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_full_h.png Binary files differnew file mode 100644 index 0000000..6396b64 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_full_h.png diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_full_r.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_full_r.png Binary files differnew file mode 100644 index 0000000..fd3b644 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_full_r.png diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_g.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_g.png Binary files differnew file mode 100644 index 0000000..07f514c --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_g.png diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_h.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_h.png Binary files differnew file mode 100644 index 0000000..9ccd5aa --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_h.png diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_in.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_in.png Binary files differnew file mode 100644 index 0000000..efee374 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_in.png diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_inout.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_inout.png Binary files differnew file mode 100644 index 0000000..e69f3f7 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_inout.png diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_no_network.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_no_network.png Binary files differnew file mode 100644 index 0000000..f465084 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_no_network.png diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_no_signal.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_no_signal.png Binary files differnew file mode 100644 index 0000000..dc52a7b --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_no_signal.png diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_out.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_out.png Binary files differnew file mode 100644 index 0000000..69f15e3 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_out.png diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_r.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_r.png Binary files differnew file mode 100644 index 0000000..bf1f50e --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_r.png diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_sysbar_back.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_sysbar_back.png Binary files differnew file mode 100644 index 0000000..a1b8062 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_sysbar_back.png diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_sysbar_back_land.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_sysbar_back_land.png Binary files differnew file mode 100644 index 0000000..23318ae --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_sysbar_back_land.png diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_sysbar_recent.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_sysbar_recent.png Binary files differnew file mode 100644 index 0000000..fcdbefe --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_sysbar_recent.png diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_sysbar_recent_land.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_sysbar_recent_land.png Binary files differnew file mode 100644 index 0000000..7f0cc51 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_sysbar_recent_land.png diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_connected_1x.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_connected_1x.png Binary files differnew file mode 100644 index 0000000..f6d53bb --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_connected_1x.png diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_connected_3g.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_connected_3g.png Binary files differnew file mode 100644 index 0000000..2fec581 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_connected_3g.png diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_connected_4g.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_connected_4g.png Binary files differnew file mode 100644 index 0000000..df46db2 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_connected_4g.png diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_connected_e.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_connected_e.png Binary files differnew file mode 100644 index 0000000..d556d57 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_connected_e.png diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_connected_g.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_connected_g.png Binary files differnew file mode 100644 index 0000000..546cff9 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_connected_g.png diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_connected_h.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_connected_h.png Binary files differnew file mode 100644 index 0000000..0ed7558 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_connected_h.png diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_connected_roam.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_connected_roam.png Binary files differnew file mode 100644 index 0000000..0f0cf49 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_connected_roam.png diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_fully_connected_1x.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_fully_connected_1x.png Binary files differnew file mode 100644 index 0000000..2ac1a96 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_fully_connected_1x.png diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_fully_connected_3g.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_fully_connected_3g.png Binary files differnew file mode 100644 index 0000000..2625fab --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_fully_connected_3g.png diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_fully_connected_4g.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_fully_connected_4g.png Binary files differnew file mode 100644 index 0000000..17a77b1 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_fully_connected_4g.png diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_fully_connected_e.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_fully_connected_e.png Binary files differnew file mode 100644 index 0000000..e482a26 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_fully_connected_e.png diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_fully_connected_g.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_fully_connected_g.png Binary files differnew file mode 100644 index 0000000..05628d0 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_fully_connected_g.png diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_fully_connected_h.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_fully_connected_h.png Binary files differnew file mode 100644 index 0000000..7dc5d96 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_fully_connected_h.png diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_ringer_silent.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_ringer_silent.png Binary files differnew file mode 100644 index 0000000..66b4741 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_ringer_silent.png diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_ringer_vibrate.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_ringer_vibrate.png Binary files differnew file mode 100644 index 0000000..f8abf25 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_ringer_vibrate.png diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_0.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_0.png Binary files differnew file mode 100644 index 0000000..9be8d23 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_0.png diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_0_fully.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_0_fully.png Binary files differnew file mode 100644 index 0000000..0002165 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_0_fully.png diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_1.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_1.png Binary files differnew file mode 100644 index 0000000..d142737 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_1.png diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_1_fully.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_1_fully.png Binary files differnew file mode 100644 index 0000000..dc31490 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_1_fully.png diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_2.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_2.png Binary files differnew file mode 100644 index 0000000..4e5b7d3 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_2.png diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_2_fully.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_2_fully.png Binary files differnew file mode 100644 index 0000000..6acb475 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_2_fully.png diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_3.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_3.png Binary files differnew file mode 100644 index 0000000..509d175 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_3.png diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_3_fully.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_3_fully.png Binary files differnew file mode 100644 index 0000000..5791615 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_3_fully.png diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_4.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_4.png Binary files differnew file mode 100644 index 0000000..01b27ec --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_4.png diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_4_fully.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_4_fully.png Binary files differnew file mode 100644 index 0000000..c970e0e --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_4_fully.png diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_flightmode.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_flightmode.png Binary files differnew file mode 100644 index 0000000..9070357 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_flightmode.png diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_in.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_in.png Binary files differnew file mode 100644 index 0000000..e0b0f9b --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_in.png diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_inout.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_inout.png Binary files differnew file mode 100644 index 0000000..2fb3c2e --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_inout.png diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_null.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_null.png Binary files differnew file mode 100644 index 0000000..8691360 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_null.png diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_out.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_out.png Binary files differnew file mode 100644 index 0000000..0fe8012 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_out.png diff --git a/packages/SystemUI/res/drawable-ldrtl-sw600dp-hdpi/ic_sysbar_back.png b/packages/SystemUI/res/drawable-ldrtl-sw600dp-hdpi/ic_sysbar_back.png Binary files differnew file mode 100644 index 0000000..194a843 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-sw600dp-hdpi/ic_sysbar_back.png diff --git a/packages/SystemUI/res/drawable-ldrtl-sw600dp-hdpi/ic_sysbar_back_land.png b/packages/SystemUI/res/drawable-ldrtl-sw600dp-hdpi/ic_sysbar_back_land.png Binary files differnew file mode 100644 index 0000000..ed08779 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-sw600dp-hdpi/ic_sysbar_back_land.png diff --git a/packages/SystemUI/res/drawable-ldrtl-sw600dp-hdpi/ic_sysbar_recent.png b/packages/SystemUI/res/drawable-ldrtl-sw600dp-hdpi/ic_sysbar_recent.png Binary files differnew file mode 100644 index 0000000..542a93b --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-sw600dp-hdpi/ic_sysbar_recent.png diff --git a/packages/SystemUI/res/drawable-ldrtl-sw600dp-hdpi/ic_sysbar_recent_land.png b/packages/SystemUI/res/drawable-ldrtl-sw600dp-hdpi/ic_sysbar_recent_land.png Binary files differnew file mode 100644 index 0000000..e96f340 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-sw600dp-hdpi/ic_sysbar_recent_land.png diff --git a/packages/SystemUI/res/drawable-ldrtl-sw600dp-mdpi/ic_sysbar_back.png b/packages/SystemUI/res/drawable-ldrtl-sw600dp-mdpi/ic_sysbar_back.png Binary files differnew file mode 100644 index 0000000..a345a4e --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-sw600dp-mdpi/ic_sysbar_back.png diff --git a/packages/SystemUI/res/drawable-ldrtl-sw600dp-mdpi/ic_sysbar_back_land.png b/packages/SystemUI/res/drawable-ldrtl-sw600dp-mdpi/ic_sysbar_back_land.png Binary files differnew file mode 100644 index 0000000..96ea0c9 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-sw600dp-mdpi/ic_sysbar_back_land.png diff --git a/packages/SystemUI/res/drawable-ldrtl-sw600dp-mdpi/ic_sysbar_recent.png b/packages/SystemUI/res/drawable-ldrtl-sw600dp-mdpi/ic_sysbar_recent.png Binary files differnew file mode 100644 index 0000000..70dc8af --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-sw600dp-mdpi/ic_sysbar_recent.png diff --git a/packages/SystemUI/res/drawable-ldrtl-sw600dp-mdpi/ic_sysbar_recent_land.png b/packages/SystemUI/res/drawable-ldrtl-sw600dp-mdpi/ic_sysbar_recent_land.png Binary files differnew file mode 100644 index 0000000..db4d907 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-sw600dp-mdpi/ic_sysbar_recent_land.png diff --git a/packages/SystemUI/res/drawable-ldrtl-sw600dp-xhdpi/ic_sysbar_back.png b/packages/SystemUI/res/drawable-ldrtl-sw600dp-xhdpi/ic_sysbar_back.png Binary files differnew file mode 100644 index 0000000..9f9afd4 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-sw600dp-xhdpi/ic_sysbar_back.png diff --git a/packages/SystemUI/res/drawable-ldrtl-sw600dp-xhdpi/ic_sysbar_back_land.png b/packages/SystemUI/res/drawable-ldrtl-sw600dp-xhdpi/ic_sysbar_back_land.png Binary files differnew file mode 100644 index 0000000..cc376c4 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-sw600dp-xhdpi/ic_sysbar_back_land.png diff --git a/packages/SystemUI/res/drawable-ldrtl-sw600dp-xhdpi/ic_sysbar_recent.png b/packages/SystemUI/res/drawable-ldrtl-sw600dp-xhdpi/ic_sysbar_recent.png Binary files differnew file mode 100644 index 0000000..ea4a8ca --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-sw600dp-xhdpi/ic_sysbar_recent.png diff --git a/packages/SystemUI/res/drawable-ldrtl-sw600dp-xhdpi/ic_sysbar_recent_land.png b/packages/SystemUI/res/drawable-ldrtl-sw600dp-xhdpi/ic_sysbar_recent_land.png Binary files differnew file mode 100644 index 0000000..73ef87b --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-sw600dp-xhdpi/ic_sysbar_recent_land.png diff --git a/packages/SystemUI/res/drawable-ldrtl-sw720dp-hdpi/ic_sysbar_signal_0.png b/packages/SystemUI/res/drawable-ldrtl-sw720dp-hdpi/ic_sysbar_signal_0.png Binary files differnew file mode 100644 index 0000000..db07305 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-sw720dp-hdpi/ic_sysbar_signal_0.png diff --git a/packages/SystemUI/res/drawable-ldrtl-sw720dp-hdpi/ic_sysbar_signal_0_fully.png b/packages/SystemUI/res/drawable-ldrtl-sw720dp-hdpi/ic_sysbar_signal_0_fully.png Binary files differnew file mode 100644 index 0000000..4518ad5 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-sw720dp-hdpi/ic_sysbar_signal_0_fully.png diff --git a/packages/SystemUI/res/drawable-ldrtl-sw720dp-hdpi/ic_sysbar_signal_1.png b/packages/SystemUI/res/drawable-ldrtl-sw720dp-hdpi/ic_sysbar_signal_1.png Binary files differnew file mode 100644 index 0000000..3b6f74a --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-sw720dp-hdpi/ic_sysbar_signal_1.png diff --git a/packages/SystemUI/res/drawable-ldrtl-sw720dp-hdpi/ic_sysbar_signal_1_fully.png b/packages/SystemUI/res/drawable-ldrtl-sw720dp-hdpi/ic_sysbar_signal_1_fully.png Binary files differnew file mode 100644 index 0000000..396d51d --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-sw720dp-hdpi/ic_sysbar_signal_1_fully.png diff --git a/packages/SystemUI/res/drawable-ldrtl-sw720dp-hdpi/ic_sysbar_signal_2.png b/packages/SystemUI/res/drawable-ldrtl-sw720dp-hdpi/ic_sysbar_signal_2.png Binary files differnew file mode 100644 index 0000000..bb90a95 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-sw720dp-hdpi/ic_sysbar_signal_2.png diff --git a/packages/SystemUI/res/drawable-ldrtl-sw720dp-hdpi/ic_sysbar_signal_2_fully.png b/packages/SystemUI/res/drawable-ldrtl-sw720dp-hdpi/ic_sysbar_signal_2_fully.png Binary files differnew file mode 100644 index 0000000..34dc19f --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-sw720dp-hdpi/ic_sysbar_signal_2_fully.png diff --git a/packages/SystemUI/res/drawable-ldrtl-sw720dp-hdpi/ic_sysbar_signal_3.png b/packages/SystemUI/res/drawable-ldrtl-sw720dp-hdpi/ic_sysbar_signal_3.png Binary files differnew file mode 100644 index 0000000..64c2de2 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-sw720dp-hdpi/ic_sysbar_signal_3.png diff --git a/packages/SystemUI/res/drawable-ldrtl-sw720dp-hdpi/ic_sysbar_signal_3_fully.png b/packages/SystemUI/res/drawable-ldrtl-sw720dp-hdpi/ic_sysbar_signal_3_fully.png Binary files differnew file mode 100644 index 0000000..9d93d2b --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-sw720dp-hdpi/ic_sysbar_signal_3_fully.png diff --git a/packages/SystemUI/res/drawable-ldrtl-sw720dp-hdpi/ic_sysbar_signal_4.png b/packages/SystemUI/res/drawable-ldrtl-sw720dp-hdpi/ic_sysbar_signal_4.png Binary files differnew file mode 100644 index 0000000..28ae311 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-sw720dp-hdpi/ic_sysbar_signal_4.png diff --git a/packages/SystemUI/res/drawable-ldrtl-sw720dp-hdpi/ic_sysbar_signal_4_fully.png b/packages/SystemUI/res/drawable-ldrtl-sw720dp-hdpi/ic_sysbar_signal_4_fully.png Binary files differnew file mode 100644 index 0000000..cd4f706 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-sw720dp-hdpi/ic_sysbar_signal_4_fully.png diff --git a/packages/SystemUI/res/drawable-ldrtl-sw720dp-hdpi/ic_sysbar_signal_in.png b/packages/SystemUI/res/drawable-ldrtl-sw720dp-hdpi/ic_sysbar_signal_in.png Binary files differnew file mode 100644 index 0000000..cbce322 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-sw720dp-hdpi/ic_sysbar_signal_in.png diff --git a/packages/SystemUI/res/drawable-ldrtl-sw720dp-hdpi/ic_sysbar_signal_inout.png b/packages/SystemUI/res/drawable-ldrtl-sw720dp-hdpi/ic_sysbar_signal_inout.png Binary files differnew file mode 100644 index 0000000..6788da8 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-sw720dp-hdpi/ic_sysbar_signal_inout.png diff --git a/packages/SystemUI/res/drawable-ldrtl-sw720dp-hdpi/ic_sysbar_signal_null.png b/packages/SystemUI/res/drawable-ldrtl-sw720dp-hdpi/ic_sysbar_signal_null.png Binary files differnew file mode 100644 index 0000000..0f00fb0 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-sw720dp-hdpi/ic_sysbar_signal_null.png diff --git a/packages/SystemUI/res/drawable-ldrtl-sw720dp-hdpi/ic_sysbar_signal_out.png b/packages/SystemUI/res/drawable-ldrtl-sw720dp-hdpi/ic_sysbar_signal_out.png Binary files differnew file mode 100644 index 0000000..db05c5f --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-sw720dp-hdpi/ic_sysbar_signal_out.png diff --git a/packages/SystemUI/res/drawable-ldrtl-sw720dp-mdpi/ic_sysbar_signal_0.png b/packages/SystemUI/res/drawable-ldrtl-sw720dp-mdpi/ic_sysbar_signal_0.png Binary files differnew file mode 100644 index 0000000..9b99940 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-sw720dp-mdpi/ic_sysbar_signal_0.png diff --git a/packages/SystemUI/res/drawable-ldrtl-sw720dp-mdpi/ic_sysbar_signal_0_fully.png b/packages/SystemUI/res/drawable-ldrtl-sw720dp-mdpi/ic_sysbar_signal_0_fully.png Binary files differnew file mode 100644 index 0000000..2cd8c90 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-sw720dp-mdpi/ic_sysbar_signal_0_fully.png diff --git a/packages/SystemUI/res/drawable-ldrtl-sw720dp-mdpi/ic_sysbar_signal_1.png b/packages/SystemUI/res/drawable-ldrtl-sw720dp-mdpi/ic_sysbar_signal_1.png Binary files differnew file mode 100644 index 0000000..f5363c3 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-sw720dp-mdpi/ic_sysbar_signal_1.png diff --git a/packages/SystemUI/res/drawable-ldrtl-sw720dp-mdpi/ic_sysbar_signal_1_fully.png b/packages/SystemUI/res/drawable-ldrtl-sw720dp-mdpi/ic_sysbar_signal_1_fully.png Binary files differnew file mode 100644 index 0000000..ded5029 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-sw720dp-mdpi/ic_sysbar_signal_1_fully.png diff --git a/packages/SystemUI/res/drawable-ldrtl-sw720dp-mdpi/ic_sysbar_signal_2.png b/packages/SystemUI/res/drawable-ldrtl-sw720dp-mdpi/ic_sysbar_signal_2.png Binary files differnew file mode 100644 index 0000000..01f4eb0 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-sw720dp-mdpi/ic_sysbar_signal_2.png diff --git a/packages/SystemUI/res/drawable-ldrtl-sw720dp-mdpi/ic_sysbar_signal_2_fully.png b/packages/SystemUI/res/drawable-ldrtl-sw720dp-mdpi/ic_sysbar_signal_2_fully.png Binary files differnew file mode 100644 index 0000000..9963e97 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-sw720dp-mdpi/ic_sysbar_signal_2_fully.png diff --git a/packages/SystemUI/res/drawable-ldrtl-sw720dp-mdpi/ic_sysbar_signal_3.png b/packages/SystemUI/res/drawable-ldrtl-sw720dp-mdpi/ic_sysbar_signal_3.png Binary files differnew file mode 100644 index 0000000..3123cc9 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-sw720dp-mdpi/ic_sysbar_signal_3.png diff --git a/packages/SystemUI/res/drawable-ldrtl-sw720dp-mdpi/ic_sysbar_signal_3_fully.png b/packages/SystemUI/res/drawable-ldrtl-sw720dp-mdpi/ic_sysbar_signal_3_fully.png Binary files differnew file mode 100644 index 0000000..34363fa --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-sw720dp-mdpi/ic_sysbar_signal_3_fully.png diff --git a/packages/SystemUI/res/drawable-ldrtl-sw720dp-mdpi/ic_sysbar_signal_4.png b/packages/SystemUI/res/drawable-ldrtl-sw720dp-mdpi/ic_sysbar_signal_4.png Binary files differnew file mode 100644 index 0000000..186844c --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-sw720dp-mdpi/ic_sysbar_signal_4.png diff --git a/packages/SystemUI/res/drawable-ldrtl-sw720dp-mdpi/ic_sysbar_signal_4_fully.png b/packages/SystemUI/res/drawable-ldrtl-sw720dp-mdpi/ic_sysbar_signal_4_fully.png Binary files differnew file mode 100644 index 0000000..680f806 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-sw720dp-mdpi/ic_sysbar_signal_4_fully.png diff --git a/packages/SystemUI/res/drawable-ldrtl-sw720dp-mdpi/ic_sysbar_signal_in.png b/packages/SystemUI/res/drawable-ldrtl-sw720dp-mdpi/ic_sysbar_signal_in.png Binary files differnew file mode 100644 index 0000000..4d5bb0b --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-sw720dp-mdpi/ic_sysbar_signal_in.png diff --git a/packages/SystemUI/res/drawable-ldrtl-sw720dp-mdpi/ic_sysbar_signal_inout.png b/packages/SystemUI/res/drawable-ldrtl-sw720dp-mdpi/ic_sysbar_signal_inout.png Binary files differnew file mode 100644 index 0000000..253d15c --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-sw720dp-mdpi/ic_sysbar_signal_inout.png diff --git a/packages/SystemUI/res/drawable-ldrtl-sw720dp-mdpi/ic_sysbar_signal_null.png b/packages/SystemUI/res/drawable-ldrtl-sw720dp-mdpi/ic_sysbar_signal_null.png Binary files differnew file mode 100644 index 0000000..5d688aa --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-sw720dp-mdpi/ic_sysbar_signal_null.png diff --git a/packages/SystemUI/res/drawable-ldrtl-sw720dp-mdpi/ic_sysbar_signal_out.png b/packages/SystemUI/res/drawable-ldrtl-sw720dp-mdpi/ic_sysbar_signal_out.png Binary files differnew file mode 100644 index 0000000..8198fdc --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-sw720dp-mdpi/ic_sysbar_signal_out.png diff --git a/packages/SystemUI/res/drawable-ldrtl-sw720dp-xhdpi/ic_sysbar_signal_0.png b/packages/SystemUI/res/drawable-ldrtl-sw720dp-xhdpi/ic_sysbar_signal_0.png Binary files differnew file mode 100644 index 0000000..a8691dc --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-sw720dp-xhdpi/ic_sysbar_signal_0.png diff --git a/packages/SystemUI/res/drawable-ldrtl-sw720dp-xhdpi/ic_sysbar_signal_0_fully.png b/packages/SystemUI/res/drawable-ldrtl-sw720dp-xhdpi/ic_sysbar_signal_0_fully.png Binary files differnew file mode 100644 index 0000000..77ade2f --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-sw720dp-xhdpi/ic_sysbar_signal_0_fully.png diff --git a/packages/SystemUI/res/drawable-ldrtl-sw720dp-xhdpi/ic_sysbar_signal_1.png b/packages/SystemUI/res/drawable-ldrtl-sw720dp-xhdpi/ic_sysbar_signal_1.png Binary files differnew file mode 100644 index 0000000..0974b2c --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-sw720dp-xhdpi/ic_sysbar_signal_1.png diff --git a/packages/SystemUI/res/drawable-ldrtl-sw720dp-xhdpi/ic_sysbar_signal_1_fully.png b/packages/SystemUI/res/drawable-ldrtl-sw720dp-xhdpi/ic_sysbar_signal_1_fully.png Binary files differnew file mode 100644 index 0000000..4be5612 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-sw720dp-xhdpi/ic_sysbar_signal_1_fully.png diff --git a/packages/SystemUI/res/drawable-ldrtl-sw720dp-xhdpi/ic_sysbar_signal_2.png b/packages/SystemUI/res/drawable-ldrtl-sw720dp-xhdpi/ic_sysbar_signal_2.png Binary files differnew file mode 100644 index 0000000..79f8b88 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-sw720dp-xhdpi/ic_sysbar_signal_2.png diff --git a/packages/SystemUI/res/drawable-ldrtl-sw720dp-xhdpi/ic_sysbar_signal_2_fully.png b/packages/SystemUI/res/drawable-ldrtl-sw720dp-xhdpi/ic_sysbar_signal_2_fully.png Binary files differnew file mode 100644 index 0000000..6167246 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-sw720dp-xhdpi/ic_sysbar_signal_2_fully.png diff --git a/packages/SystemUI/res/drawable-ldrtl-sw720dp-xhdpi/ic_sysbar_signal_3.png b/packages/SystemUI/res/drawable-ldrtl-sw720dp-xhdpi/ic_sysbar_signal_3.png Binary files differnew file mode 100644 index 0000000..d2ecd47 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-sw720dp-xhdpi/ic_sysbar_signal_3.png diff --git a/packages/SystemUI/res/drawable-ldrtl-sw720dp-xhdpi/ic_sysbar_signal_3_fully.png b/packages/SystemUI/res/drawable-ldrtl-sw720dp-xhdpi/ic_sysbar_signal_3_fully.png Binary files differnew file mode 100644 index 0000000..92871c3 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-sw720dp-xhdpi/ic_sysbar_signal_3_fully.png diff --git a/packages/SystemUI/res/drawable-ldrtl-sw720dp-xhdpi/ic_sysbar_signal_4.png b/packages/SystemUI/res/drawable-ldrtl-sw720dp-xhdpi/ic_sysbar_signal_4.png Binary files differnew file mode 100644 index 0000000..4b86ca4 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-sw720dp-xhdpi/ic_sysbar_signal_4.png diff --git a/packages/SystemUI/res/drawable-ldrtl-sw720dp-xhdpi/ic_sysbar_signal_4_fully.png b/packages/SystemUI/res/drawable-ldrtl-sw720dp-xhdpi/ic_sysbar_signal_4_fully.png Binary files differnew file mode 100644 index 0000000..200d1cb --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-sw720dp-xhdpi/ic_sysbar_signal_4_fully.png diff --git a/packages/SystemUI/res/drawable-ldrtl-sw720dp-xhdpi/ic_sysbar_signal_in.png b/packages/SystemUI/res/drawable-ldrtl-sw720dp-xhdpi/ic_sysbar_signal_in.png Binary files differnew file mode 100644 index 0000000..f4c5281 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-sw720dp-xhdpi/ic_sysbar_signal_in.png diff --git a/packages/SystemUI/res/drawable-ldrtl-sw720dp-xhdpi/ic_sysbar_signal_inout.png b/packages/SystemUI/res/drawable-ldrtl-sw720dp-xhdpi/ic_sysbar_signal_inout.png Binary files differnew file mode 100644 index 0000000..42e2170 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-sw720dp-xhdpi/ic_sysbar_signal_inout.png diff --git a/packages/SystemUI/res/drawable-ldrtl-sw720dp-xhdpi/ic_sysbar_signal_null.png b/packages/SystemUI/res/drawable-ldrtl-sw720dp-xhdpi/ic_sysbar_signal_null.png Binary files differnew file mode 100644 index 0000000..eaff2c0 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-sw720dp-xhdpi/ic_sysbar_signal_null.png diff --git a/packages/SystemUI/res/drawable-ldrtl-sw720dp-xhdpi/ic_sysbar_signal_out.png b/packages/SystemUI/res/drawable-ldrtl-sw720dp-xhdpi/ic_sysbar_signal_out.png Binary files differnew file mode 100644 index 0000000..9feb041 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-sw720dp-xhdpi/ic_sysbar_signal_out.png diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_notifications_normal.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_notifications_normal.png Binary files differnew file mode 100644 index 0000000..a2787eb --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_notifications_normal.png diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_notify_clear_normal.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_notify_clear_normal.png Binary files differnew file mode 100644 index 0000000..53a74c9 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_notify_clear_normal.png diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_notify_clear_pressed.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_notify_clear_pressed.png Binary files differnew file mode 100644 index 0000000..c9d50c0 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_notify_clear_pressed.png diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_notify_open_normal.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_notify_open_normal.png Binary files differnew file mode 100644 index 0000000..57faad8 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_notify_open_normal.png diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_notify_open_pressed.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_notify_open_pressed.png Binary files differnew file mode 100644 index 0000000..c736dcd --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_notify_open_pressed.png diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_notify_quicksettings_normal.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_notify_quicksettings_normal.png Binary files differnew file mode 100644 index 0000000..c8ff8a6 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_notify_quicksettings_normal.png diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_notify_quicksettings_pressed.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_notify_quicksettings_pressed.png Binary files differnew file mode 100644 index 0000000..3add352 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_notify_quicksettings_pressed.png diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_airplane_off.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_airplane_off.png Binary files differnew file mode 100644 index 0000000..d16e3d3 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_airplane_off.png diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_airplane_on.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_airplane_on.png Binary files differnew file mode 100644 index 0000000..53523f6 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_airplane_on.png diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_default_user.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_default_user.png Binary files differnew file mode 100644 index 0000000..73db61d --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_default_user.png diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_0.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_0.png Binary files differnew file mode 100644 index 0000000..3f87163 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_0.png diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_1.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_1.png Binary files differnew file mode 100644 index 0000000..5fae5fe --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_1.png diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_1x.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_1x.png Binary files differnew file mode 100644 index 0000000..24c8fde --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_1x.png diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_2.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_2.png Binary files differnew file mode 100644 index 0000000..2e68d0f --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_2.png diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_3.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_3.png Binary files differnew file mode 100644 index 0000000..01af7f9 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_3.png diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_3g.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_3g.png Binary files differnew file mode 100644 index 0000000..f5e4b7e --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_3g.png diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_4.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_4.png Binary files differnew file mode 100644 index 0000000..2368f71 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_4.png diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_4g.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_4g.png Binary files differnew file mode 100644 index 0000000..eeeed04 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_4g.png diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_e.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_e.png Binary files differnew file mode 100644 index 0000000..6188ec3 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_e.png diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_full_0.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_full_0.png Binary files differnew file mode 100644 index 0000000..cd41a81 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_full_0.png diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_full_1.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_full_1.png Binary files differnew file mode 100644 index 0000000..637c8bb --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_full_1.png diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_full_1x.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_full_1x.png Binary files differnew file mode 100644 index 0000000..c8348d4 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_full_1x.png diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_full_2.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_full_2.png Binary files differnew file mode 100644 index 0000000..b499d01 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_full_2.png diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_full_3.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_full_3.png Binary files differnew file mode 100644 index 0000000..589f41b --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_full_3.png diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_full_3g.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_full_3g.png Binary files differnew file mode 100644 index 0000000..c756e15 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_full_3g.png diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_full_4.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_full_4.png Binary files differnew file mode 100644 index 0000000..0208cdb --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_full_4.png diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_full_4g.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_full_4g.png Binary files differnew file mode 100644 index 0000000..9cd1154 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_full_4g.png diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_full_e.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_full_e.png Binary files differnew file mode 100644 index 0000000..01c8876 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_full_e.png diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_full_g.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_full_g.png Binary files differnew file mode 100644 index 0000000..5516e0f --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_full_g.png diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_full_h.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_full_h.png Binary files differnew file mode 100644 index 0000000..8f411c3 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_full_h.png diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_full_r.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_full_r.png Binary files differnew file mode 100644 index 0000000..ef65b74 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_full_r.png diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_g.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_g.png Binary files differnew file mode 100644 index 0000000..6e51ecb --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_g.png diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_h.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_h.png Binary files differnew file mode 100644 index 0000000..7c8155c --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_h.png diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_in.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_in.png Binary files differnew file mode 100644 index 0000000..fd5f0e5 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_in.png diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_inout.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_inout.png Binary files differnew file mode 100644 index 0000000..1f04910 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_inout.png diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_no_network.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_no_network.png Binary files differnew file mode 100644 index 0000000..74b5b92 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_no_network.png diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_no_signal.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_no_signal.png Binary files differnew file mode 100644 index 0000000..bcdd82d --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_no_signal.png diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_out.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_out.png Binary files differnew file mode 100644 index 0000000..d95b997 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_out.png diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_r.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_r.png Binary files differnew file mode 100644 index 0000000..1e6aef5 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_r.png diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_sysbar_back.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_sysbar_back.png Binary files differnew file mode 100644 index 0000000..633d864 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_sysbar_back.png diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_sysbar_back_land.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_sysbar_back_land.png Binary files differnew file mode 100644 index 0000000..7b9613c --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_sysbar_back_land.png diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_sysbar_recent.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_sysbar_recent.png Binary files differnew file mode 100644 index 0000000..4665e2a --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_sysbar_recent.png diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_sysbar_recent_land.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_sysbar_recent_land.png Binary files differnew file mode 100644 index 0000000..6d33a6e --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_sysbar_recent_land.png diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_connected_1x.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_connected_1x.png Binary files differnew file mode 100644 index 0000000..d3b57c3 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_connected_1x.png diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_connected_3g.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_connected_3g.png Binary files differnew file mode 100644 index 0000000..cc2256f --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_connected_3g.png diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_connected_4g.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_connected_4g.png Binary files differnew file mode 100644 index 0000000..e1f1ab9 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_connected_4g.png diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_connected_e.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_connected_e.png Binary files differnew file mode 100644 index 0000000..5a04dde --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_connected_e.png diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_connected_g.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_connected_g.png Binary files differnew file mode 100644 index 0000000..65c4fe1 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_connected_g.png diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_connected_h.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_connected_h.png Binary files differnew file mode 100644 index 0000000..066405f --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_connected_h.png diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_connected_roam.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_connected_roam.png Binary files differnew file mode 100644 index 0000000..97d5d5b --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_connected_roam.png diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_fully_connected_1x.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_fully_connected_1x.png Binary files differnew file mode 100644 index 0000000..a3d2b35 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_fully_connected_1x.png diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_fully_connected_3g.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_fully_connected_3g.png Binary files differnew file mode 100644 index 0000000..8e13caa --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_fully_connected_3g.png diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_fully_connected_4g.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_fully_connected_4g.png Binary files differnew file mode 100644 index 0000000..23fcf42 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_fully_connected_4g.png diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_fully_connected_e.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_fully_connected_e.png Binary files differnew file mode 100644 index 0000000..4370c22 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_fully_connected_e.png diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_fully_connected_g.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_fully_connected_g.png Binary files differnew file mode 100644 index 0000000..3504a75 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_fully_connected_g.png diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_fully_connected_h.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_fully_connected_h.png Binary files differnew file mode 100644 index 0000000..21fc58c --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_fully_connected_h.png diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_ringer_silent.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_ringer_silent.png Binary files differnew file mode 100644 index 0000000..629b5f8 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_ringer_silent.png diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_ringer_vibrate.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_ringer_vibrate.png Binary files differnew file mode 100644 index 0000000..8e3e8b4 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_ringer_vibrate.png diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_0.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_0.png Binary files differnew file mode 100644 index 0000000..62d1d34 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_0.png diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_0_fully.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_0_fully.png Binary files differnew file mode 100644 index 0000000..b263831 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_0_fully.png diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_1.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_1.png Binary files differnew file mode 100644 index 0000000..6f9620e --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_1.png diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_1_fully.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_1_fully.png Binary files differnew file mode 100644 index 0000000..7adae9f --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_1_fully.png diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_2.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_2.png Binary files differnew file mode 100644 index 0000000..906b418 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_2.png diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_2_fully.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_2_fully.png Binary files differnew file mode 100644 index 0000000..ebdf136 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_2_fully.png diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_3.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_3.png Binary files differnew file mode 100644 index 0000000..1a2ab1c --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_3.png diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_3_fully.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_3_fully.png Binary files differnew file mode 100644 index 0000000..c0170a6 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_3_fully.png diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_4.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_4.png Binary files differnew file mode 100644 index 0000000..2cc587b --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_4.png diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_4_fully.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_4_fully.png Binary files differnew file mode 100644 index 0000000..11a26c6 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_4_fully.png diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_flightmode.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_flightmode.png Binary files differnew file mode 100644 index 0000000..9ede64c --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_flightmode.png diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_in.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_in.png Binary files differnew file mode 100644 index 0000000..3afb5b2 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_in.png diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_inout.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_inout.png Binary files differnew file mode 100644 index 0000000..fcf7f6e --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_inout.png diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_null.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_null.png Binary files differnew file mode 100644 index 0000000..815de33 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_null.png diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_out.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_out.png Binary files differnew file mode 100644 index 0000000..f153216 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_out.png diff --git a/packages/SystemUI/res/layout-land/status_bar_help.xml b/packages/SystemUI/res/layout-land/status_bar_help.xml index 5a635ae..a885b86 100644 --- a/packages/SystemUI/res/layout-land/status_bar_help.xml +++ b/packages/SystemUI/res/layout-land/status_bar_help.xml @@ -22,19 +22,19 @@ xmlns:systemui="http://schemas.android.com/apk/res/com.android.systemui" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/status_bar_cling" - android:paddingLeft="40dp" - android:paddingRight="40dp" + android:paddingStart="40dp" + android:paddingEnd="40dp" android:background="#DD000000" android:focusable="true" android:orientation="horizontal" - android:gravity="top|left" + android:gravity="top|start" > <ImageView android:layout_width="wrap_content" android:layout_weight="0" android:layout_height="wrap_content" - android:layout_marginRight="50dp" + android:layout_marginEnd="50dp" android:gravity="center" android:src="@drawable/arrow_dashed" tools:ignore="ContentDescription" /> @@ -64,8 +64,8 @@ style="@style/ClingButton" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:paddingLeft="50dp" - android:paddingRight="50dp" + android:paddingStart="50dp" + android:paddingEnd="50dp" android:text="@android:string/ok" /> </LinearLayout> </LinearLayout> diff --git a/packages/SystemUI/res/layout-land/status_bar_recent_item.xml b/packages/SystemUI/res/layout-land/status_bar_recent_item.xml index 10e313e..1257641 100644 --- a/packages/SystemUI/res/layout-land/status_bar_recent_item.xml +++ b/packages/SystemUI/res/layout-land/status_bar_recent_item.xml @@ -22,8 +22,8 @@ xmlns:android="http://schemas.android.com/apk/res/android" android:layout_height="match_parent" android:layout_width="wrap_content" - android:paddingLeft="@dimen/status_bar_recents_item_padding" - android:paddingRight="@dimen/status_bar_recents_item_padding" + android:paddingStart="@dimen/status_bar_recents_item_padding" + android:paddingEnd="@dimen/status_bar_recents_item_padding" android:importantForAccessibility="no" android:clipChildren="false"> @@ -38,10 +38,10 @@ <FrameLayout android:id="@+id/app_thumbnail" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_alignParentLeft="true" + android:layout_alignParentStart="true" android:layout_alignParentTop="true" android:layout_marginTop="@dimen/status_bar_recents_thumbnail_top_margin" - android:layout_marginLeft="@dimen/status_bar_recents_thumbnail_left_margin" + android:layout_marginStart="@dimen/status_bar_recents_thumbnail_left_margin" android:background="@drawable/recents_thumbnail_bg" android:foreground="@drawable/recents_thumbnail_fg" android:visibility="invisible"> @@ -55,8 +55,8 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="@dimen/status_bar_recents_app_icon_top_margin" - android:layout_marginLeft="@dimen/status_bar_recents_app_icon_left_margin" - android:layout_alignParentLeft="true" + android:layout_marginStart="@dimen/status_bar_recents_app_icon_left_margin" + android:layout_alignParentStart="true" android:layout_alignParentTop="true" android:maxWidth="@dimen/status_bar_recents_app_icon_max_width" android:maxHeight="@dimen/status_bar_recents_app_icon_max_height" @@ -72,10 +72,10 @@ android:fadingEdge="horizontal" android:fadingEdgeLength="@dimen/status_bar_recents_text_fading_edge_length" android:scrollHorizontally="true" - android:layout_alignLeft="@id/app_thumbnail" + android:layout_alignStart="@id/app_thumbnail" android:layout_below="@id/app_thumbnail" android:layout_marginTop="@dimen/status_bar_recents_text_description_padding" - android:layout_marginLeft="@dimen/status_bar_recents_app_label_left_margin" + android:layout_marginStart="@dimen/status_bar_recents_app_label_left_margin" android:singleLine="true" android:ellipsize="marquee" android:textColor="@color/status_bar_recents_app_label_color" @@ -89,7 +89,7 @@ android:fadingEdge="horizontal" android:fadingEdgeLength="@dimen/status_bar_recents_text_fading_edge_length" android:scrollHorizontally="true" - android:layout_alignLeft="@id/app_thumbnail" + android:layout_alignStart="@id/app_thumbnail" android:layout_below="@id/app_label" android:layout_marginTop="@dimen/status_bar_recents_text_description_padding" android:singleLine="true" diff --git a/packages/SystemUI/res/layout-land/status_bar_recent_panel.xml b/packages/SystemUI/res/layout-land/status_bar_recent_panel.xml index 8fdde92..b06166d 100644 --- a/packages/SystemUI/res/layout-land/status_bar_recent_panel.xml +++ b/packages/SystemUI/res/layout-land/status_bar_recent_panel.xml @@ -41,11 +41,14 @@ android:fadingEdge="horizontal" android:scrollbars="none" android:layout_gravity="right" - android:fadingEdgeLength="@dimen/status_bar_recents_scroll_fading_edge_length"> + android:fadingEdgeLength="@dimen/status_bar_recents_scroll_fading_edge_length" + android:fitsSystemWindows="true"> <LinearLayout android:id="@+id/recents_linear_layout" android:layout_width="wrap_content" android:layout_height="match_parent" + android:layoutDirection="ltr" + android:layout_gravity="left" android:orientation="horizontal"> </LinearLayout> diff --git a/packages/SystemUI/res/layout-land/status_bar_search_panel.xml b/packages/SystemUI/res/layout-land/status_bar_search_panel.xml index f56b03b..a109191 100644 --- a/packages/SystemUI/res/layout-land/status_bar_search_panel.xml +++ b/packages/SystemUI/res/layout-land/status_bar_search_panel.xml @@ -36,7 +36,7 @@ android:id="@+id/search_panel_container" android:layout_width="wrap_content" android:layout_height="match_parent" - android:layout_alignParentRight="true"> + android:layout_alignParentEnd="true"> <com.android.internal.widget.multiwaveview.GlowPadView android:id="@+id/glow_pad_view" @@ -44,7 +44,7 @@ android:layout_width="@dimen/navbar_search_panel_height" android:layout_height="match_parent" android:layout_alignParentBottom="true" - android:gravity="left" + android:gravity="start" prvandroid:targetDrawables="@array/navbar_search_targets" prvandroid:targetDescriptions="@array/navbar_search_target_descriptions" diff --git a/packages/SystemUI/res/layout-ldrtl/navigation_bar.xml b/packages/SystemUI/res/layout-ldrtl/navigation_bar.xml new file mode 100644 index 0000000..03ca729 --- /dev/null +++ b/packages/SystemUI/res/layout-ldrtl/navigation_bar.xml @@ -0,0 +1,322 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/* apps/common/assets/default/default/skins/StatusBar.xml +** +** Copyright 2011, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ +--> + +<com.android.systemui.statusbar.phone.NavigationBarView + xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:systemui="http://schemas.android.com/apk/res/com.android.systemui" + android:layout_height="match_parent" + android:layout_width="match_parent" + android:background="#FF000000" + > + + <FrameLayout android:id="@+id/rot0" + android:layout_height="match_parent" + android:layout_width="match_parent" + > + + <LinearLayout + android:layout_height="match_parent" + android:layout_width="match_parent" + android:orientation="horizontal" + android:clipChildren="false" + android:clipToPadding="false" + android:id="@+id/nav_buttons" + android:animateLayoutChanges="true" + > + + <!-- navigation controls --> + <View + android:layout_width="40dp" + android:layout_height="match_parent" + android:layout_weight="0" + android:visibility="invisible" + /> + <com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/back" + android:layout_width="@dimen/navigation_key_width" + android:layout_height="match_parent" + android:src="@drawable/ic_sysbar_back" + systemui:keyCode="4" + android:layout_weight="0" + android:scaleType="center" + systemui:glowBackground="@drawable/ic_sysbar_highlight" + android:contentDescription="@string/accessibility_back" + /> + <View + android:layout_width="match_parent" + android:layout_height="match_parent" + android:layout_weight="1" + android:visibility="invisible" + /> + <com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/home" + android:layout_width="@dimen/navigation_key_width" + android:layout_height="match_parent" + android:src="@drawable/ic_sysbar_home" + systemui:keyCode="3" + systemui:keyRepeat="false" + android:layout_weight="0" + systemui:glowBackground="@drawable/ic_sysbar_highlight" + android:contentDescription="@string/accessibility_home" + /> + <View + android:layout_width="match_parent" + android:layout_height="match_parent" + android:layout_weight="1" + android:visibility="invisible" + /> + <com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/recent_apps" + android:layout_width="@dimen/navigation_key_width" + android:layout_height="match_parent" + android:src="@drawable/ic_sysbar_recent" + android:layout_weight="0" + systemui:glowBackground="@drawable/ic_sysbar_highlight" + android:contentDescription="@string/accessibility_recent" + /> + <com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/menu" + android:layout_width="@dimen/navigation_menu_key_width" + android:layout_height="match_parent" + android:src="@drawable/ic_sysbar_menu" + systemui:keyCode="82" + android:layout_weight="0" + android:visibility="invisible" + android:contentDescription="@string/accessibility_menu" + systemui:glowBackground="@drawable/ic_sysbar_highlight" + /> + </LinearLayout> + + <!-- lights out layout to match exactly --> + <LinearLayout + android:layout_height="match_parent" + android:layout_width="match_parent" + android:orientation="horizontal" + android:id="@+id/lights_out" + android:visibility="gone" + > + <ImageView + android:layout_width="80dp" + android:layout_height="match_parent" + android:layout_marginStart="40dp" + android:src="@drawable/ic_sysbar_lights_out_dot_small" + android:scaleType="center" + android:layout_weight="0" + /> + <View + android:layout_width="match_parent" + android:layout_height="match_parent" + android:layout_weight="1" + android:visibility="invisible" + /> + <ImageView + android:layout_width="80dp" + android:layout_height="match_parent" + android:src="@drawable/ic_sysbar_lights_out_dot_large" + android:scaleType="center" + android:layout_weight="0" + /> + <View + android:layout_width="match_parent" + android:layout_height="match_parent" + android:layout_weight="1" + android:visibility="invisible" + /> + <ImageView + android:layout_width="80dp" + android:layout_marginEnd="40dp" + android:layout_height="match_parent" + android:src="@drawable/ic_sysbar_lights_out_dot_small" + android:scaleType="center" + android:layout_weight="0" + /> + </LinearLayout> + + <com.android.systemui.statusbar.policy.KeyButtonView + android:layout_width="80dp" + android:id="@+id/search_light" + android:layout_height="match_parent" + android:layout_gravity="center_horizontal" + android:src="@drawable/search_light" + android:scaleType="center" + android:visibility="gone" + /> + + <com.android.systemui.statusbar.policy.DeadZone + android:id="@+id/deadzone" + android:layout_height="match_parent" + android:layout_width="match_parent" + systemui:minSize="@dimen/navigation_bar_deadzone_size" + systemui:maxSize="@dimen/navigation_bar_deadzone_size_max" + systemui:holdTime="@integer/navigation_bar_deadzone_hold" + systemui:decayTime="@integer/navigation_bar_deadzone_decay" + systemui:orientation="horizontal" + android:layout_gravity="top" + /> + </FrameLayout> + + <FrameLayout android:id="@+id/rot90" + android:layout_height="match_parent" + android:layout_width="match_parent" + android:visibility="gone" + android:paddingTop="0dp" + > + + <LinearLayout + android:layout_height="match_parent" + android:layout_width="match_parent" + android:orientation="vertical" + android:clipChildren="false" + android:clipToPadding="false" + android:id="@+id/nav_buttons" + android:animateLayoutChanges="true" + > + + <!-- navigation controls --> + <com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/menu" + android:layout_height="40dp" + android:layout_width="match_parent" + android:src="@drawable/ic_sysbar_menu_land" + systemui:keyCode="82" + android:layout_weight="0" + android:visibility="invisible" + android:contentDescription="@string/accessibility_menu" + systemui:glowBackground="@drawable/ic_sysbar_highlight_land" + /> + <com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/back" + android:layout_height="80dp" + android:layout_width="match_parent" + android:src="@drawable/ic_sysbar_back_land" + android:scaleType="center" + systemui:keyCode="4" + android:layout_weight="0" + android:contentDescription="@string/accessibility_back" + systemui:glowBackground="@drawable/ic_sysbar_highlight_land" + /> + <View + android:layout_height="match_parent" + android:layout_width="match_parent" + android:layout_weight="1" + android:visibility="invisible" + /> + <com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/home" + android:layout_height="80dp" + android:layout_width="match_parent" + android:src="@drawable/ic_sysbar_home_land" + systemui:keyCode="3" + systemui:keyRepeat="false" + android:layout_weight="0" + android:contentDescription="@string/accessibility_home" + systemui:glowBackground="@drawable/ic_sysbar_highlight_land" + /> + <View + android:layout_height="match_parent" + android:layout_width="match_parent" + android:layout_weight="1" + android:visibility="invisible" + /> + <com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/recent_apps" + android:layout_height="80dp" + android:layout_width="match_parent" + android:src="@drawable/ic_sysbar_recent_land" + android:layout_weight="0" + android:contentDescription="@string/accessibility_recent" + systemui:glowBackground="@drawable/ic_sysbar_highlight_land" + /> + <View + android:layout_height="40dp" + android:layout_width="match_parent" + android:layout_weight="0" + android:visibility="invisible" + /> + </LinearLayout> + + <!-- lights out layout to match exactly --> + <LinearLayout + android:layout_height="match_parent" + android:layout_width="match_parent" + android:orientation="vertical" + android:id="@+id/lights_out" + android:visibility="gone" + > + <ImageView + android:layout_height="80dp" + android:layout_marginTop="40dp" + android:layout_width="match_parent" + android:src="@drawable/ic_sysbar_lights_out_dot_small" + android:scaleType="center" + android:layout_weight="0" + /> + <View + android:layout_height="match_parent" + android:layout_width="match_parent" + android:layout_weight="1" + android:visibility="invisible" + /> + <ImageView + android:layout_height="80dp" + android:layout_width="match_parent" + android:src="@drawable/ic_sysbar_lights_out_dot_large" + android:scaleType="center" + android:layout_weight="0" + /> + <View + android:layout_height="match_parent" + android:layout_width="match_parent" + android:layout_weight="1" + android:visibility="invisible" + /> + <ImageView + android:layout_height="80dp" + android:layout_marginBottom="40dp" + android:layout_width="match_parent" + android:src="@drawable/ic_sysbar_lights_out_dot_small" + android:scaleType="center" + android:layout_weight="0" + /> + </LinearLayout> + + <com.android.systemui.statusbar.policy.KeyButtonView + android:id="@+id/search_light" + android:layout_height="80dp" + android:layout_width="match_parent" + android:layout_gravity="center_vertical" + android:src="@drawable/search_light" + android:scaleType="center" + android:visibility="gone" + /> + + <com.android.systemui.statusbar.policy.DeadZone + android:id="@+id/deadzone" + android:layout_height="match_parent" + android:layout_width="match_parent" + systemui:minSize="@dimen/navigation_bar_deadzone_size" + systemui:maxSize="@dimen/navigation_bar_deadzone_size_max" + systemui:holdTime="@integer/navigation_bar_deadzone_hold" + systemui:decayTime="@integer/navigation_bar_deadzone_decay" + systemui:orientation="vertical" + android:layout_gravity="top" + /> + </FrameLayout> + + <!-- not used --> + <View android:id="@+id/rot270" + android:layout_height="match_parent" + android:layout_width="match_parent" + android:visibility="gone" + /> + +</com.android.systemui.statusbar.phone.NavigationBarView> diff --git a/packages/SystemUI/res/layout-sw600dp/navigation_bar.xml b/packages/SystemUI/res/layout-sw600dp/navigation_bar.xml index b1104cc..47db1c7 100644 --- a/packages/SystemUI/res/layout-sw600dp/navigation_bar.xml +++ b/packages/SystemUI/res/layout-sw600dp/navigation_bar.xml @@ -45,7 +45,7 @@ android:layout_width="48dp" android:layout_height="match_parent" android:layout_weight="0" - android:layout_marginLeft="2dp" + android:layout_marginStart="2dp" android:visibility="invisible" /> <Space @@ -54,7 +54,7 @@ android:layout_weight="1" /> <com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/back" - android:layout_width="128dp" android:paddingLeft="25dp" android:paddingRight="25dp" + android:layout_width="128dp" android:paddingStart="25dp" android:paddingEnd="25dp" android:layout_height="match_parent" android:src="@drawable/ic_sysbar_back" systemui:keyCode="4" @@ -63,7 +63,7 @@ android:contentDescription="@string/accessibility_back" /> <com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/home" - android:layout_width="128dp" android:paddingLeft="25dp" android:paddingRight="25dp" + android:layout_width="128dp" android:paddingStart="25dp" android:paddingEnd="25dp" android:layout_height="match_parent" android:src="@drawable/ic_sysbar_home" systemui:keyCode="3" @@ -73,7 +73,7 @@ android:contentDescription="@string/accessibility_home" /> <com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/recent_apps" - android:layout_width="128dp" android:paddingLeft="25dp" android:paddingRight="25dp" + android:layout_width="128dp" android:paddingStart="25dp" android:paddingEnd="25dp" android:layout_height="match_parent" android:src="@drawable/ic_sysbar_recent" android:layout_weight="0" @@ -89,7 +89,7 @@ android:layout_width="48dp" android:layout_height="match_parent" android:src="@drawable/ic_sysbar_menu" - android:layout_marginRight="2dp" + android:layout_marginEnd="2dp" systemui:keyCode="82" android:layout_weight="0" android:visibility="invisible" @@ -112,23 +112,23 @@ android:layout_weight="1" /> <ImageView - android:layout_width="128dp" android:paddingLeft="25dp" android:paddingRight="25dp" + android:layout_width="128dp" android:paddingStart="25dp" android:paddingEnd="25dp" android:layout_height="match_parent" - android:layout_marginLeft="40dp" + android:layout_marginStart="40dp" android:src="@drawable/ic_sysbar_lights_out_dot_small" android:scaleType="center" android:layout_weight="0" /> <ImageView - android:layout_width="128dp" android:paddingLeft="25dp" android:paddingRight="25dp" + android:layout_width="128dp" android:paddingStart="25dp" android:paddingEnd="25dp" android:layout_height="match_parent" android:src="@drawable/ic_sysbar_lights_out_dot_large" android:scaleType="center" android:layout_weight="0" /> <ImageView - android:layout_width="128dp" android:paddingLeft="25dp" android:paddingRight="25dp" - android:layout_marginRight="40dp" + android:layout_width="128dp" android:paddingStart="25dp" android:paddingEnd="25dp" + android:layout_marginEnd="40dp" android:layout_height="match_parent" android:src="@drawable/ic_sysbar_lights_out_dot_small" android:scaleType="center" @@ -186,7 +186,7 @@ android:layout_width="48dp" android:layout_height="match_parent" android:layout_weight="0" - android:layout_marginLeft="2dp" + android:layout_marginStart="2dp" android:visibility="invisible" /> <Space @@ -195,7 +195,7 @@ android:layout_weight="1" /> <com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/back" - android:layout_width="162dp" android:paddingLeft="42dp" android:paddingRight="42dp" + android:layout_width="162dp" android:paddingStart="42dp" android:paddingEnd="42dp" android:layout_height="match_parent" android:src="@drawable/ic_sysbar_back" systemui:keyCode="4" @@ -204,7 +204,7 @@ android:contentDescription="@string/accessibility_back" /> <com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/home" - android:layout_width="162dp" android:paddingLeft="42dp" android:paddingRight="42dp" + android:layout_width="162dp" android:paddingStart="42dp" android:paddingEnd="42dp" android:layout_height="match_parent" android:src="@drawable/ic_sysbar_home" systemui:keyCode="3" @@ -214,7 +214,7 @@ android:contentDescription="@string/accessibility_home" /> <com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/recent_apps" - android:layout_width="162dp" android:paddingLeft="42dp" android:paddingRight="42dp" + android:layout_width="162dp" android:paddingStart="42dp" android:paddingEnd="42dp" android:layout_height="match_parent" android:src="@drawable/ic_sysbar_recent" android:layout_weight="0" @@ -229,7 +229,7 @@ <com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/menu" android:layout_width="48dp" android:layout_height="match_parent" - android:layout_marginRight="2dp" + android:layout_marginEnd="2dp" android:src="@drawable/ic_sysbar_menu" systemui:keyCode="82" android:layout_weight="0" @@ -253,23 +253,23 @@ android:layout_weight="1" /> <ImageView - android:layout_width="162dp" android:paddingLeft="42dp" android:paddingRight="42dp" + android:layout_width="162dp" android:paddingStart="42dp" android:paddingEnd="42dp" android:layout_height="match_parent" - android:layout_marginLeft="40dp" + android:layout_marginStart="40dp" android:src="@drawable/ic_sysbar_lights_out_dot_small" android:scaleType="center" android:layout_weight="0" /> <ImageView - android:layout_width="162dp" android:paddingLeft="42dp" android:paddingRight="42dp" + android:layout_width="162dp" android:paddingStart="42dp" android:paddingEnd="42dp" android:layout_height="match_parent" android:src="@drawable/ic_sysbar_lights_out_dot_large" android:scaleType="center" android:layout_weight="0" /> <ImageView - android:layout_width="162dp" android:paddingLeft="42dp" android:paddingRight="42dp" - android:layout_marginRight="40dp" + android:layout_width="162dp" android:paddingStart="42dp" android:paddingEnd="42dp" + android:layout_marginEnd="40dp" android:layout_height="match_parent" android:src="@drawable/ic_sysbar_lights_out_dot_small" android:scaleType="center" diff --git a/packages/SystemUI/res/layout-sw600dp/super_status_bar.xml b/packages/SystemUI/res/layout-sw600dp/super_status_bar.xml index b68632a..0947c6f 100644 --- a/packages/SystemUI/res/layout-sw600dp/super_status_bar.xml +++ b/packages/SystemUI/res/layout-sw600dp/super_status_bar.xml @@ -41,12 +41,12 @@ <include layout="@layout/status_bar_expanded" android:layout_width="@dimen/notification_panel_width" android:layout_height="wrap_content" - android:layout_gravity="left|top" + android:layout_gravity="start|top" /> <include layout="@layout/quick_settings" android:layout_width="@dimen/notification_panel_width" android:layout_height="wrap_content" - android:layout_gravity="right|top" + android:layout_gravity="end|top" /> </com.android.systemui.statusbar.phone.PanelHolder> </com.android.systemui.statusbar.phone.StatusBarWindowView> diff --git a/packages/SystemUI/res/layout/battery_low.xml b/packages/SystemUI/res/layout/battery_low.xml index 3061743..2373355 100644 --- a/packages/SystemUI/res/layout/battery_low.xml +++ b/packages/SystemUI/res/layout/battery_low.xml @@ -30,7 +30,7 @@ android:layout_height="wrap_content" android:textSize="18sp" android:textColor="#ffffffff" - android:gravity="left" + android:gravity="start" android:text="@string/battery_low_subtitle" /> @@ -39,7 +39,7 @@ android:layout_height="wrap_content" android:textSize="18sp" android:textColor="#ffffffff" - android:gravity="left" + android:gravity="start" android:paddingBottom="16dp" /> diff --git a/packages/SystemUI/res/layout/compat_mode_help.xml b/packages/SystemUI/res/layout/compat_mode_help.xml index a354336..566d07d 100644 --- a/packages/SystemUI/res/layout/compat_mode_help.xml +++ b/packages/SystemUI/res/layout/compat_mode_help.xml @@ -27,9 +27,9 @@ android:id="@+id/header" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginLeft="80dp" + android:layout_marginStart="80dp" android:layout_marginTop="80dp" - android:layout_marginRight="80dp" + android:layout_marginEnd="80dp" android:textSize="60sp" android:maxLines="1" android:shadowRadius="8" @@ -51,15 +51,15 @@ android:layout_height="190dp" android:background="@drawable/compat_mode_help_divider_bottom" android:layout_marginBottom="55dp" - android:layout_marginRight="80dp" - android:layout_alignLeft="@id/header" + android:layout_marginEnd="80dp" + android:layout_alignStart="@id/header" android:layout_alignParentBottom="true" > <ImageView android:id="@+id/icon" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_alignParentRight="true" + android:layout_alignParentEnd="true" android:layout_centerVertical="true" android:src="@drawable/compat_mode_help_icon" android:contentDescription="@string/accessibility_compatibility_zoom_button" @@ -69,9 +69,9 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_centerVertical="true" - android:layout_alignParentLeft="true" - android:layout_toLeftOf="@id/icon" - android:layout_marginRight="10dp" + android:layout_alignParentStart="true" + android:layout_toStartOf="@id/icon" + android:layout_marginEnd="10dp" android:shadowRadius="4" android:shadowColor="#FF000000" android:textSize="28sp" @@ -82,7 +82,7 @@ android:id="@+id/button" android:layout_width="208dp" android:layout_height="48dp" - android:layout_alignLeft="@id/header" + android:layout_alignStart="@id/header" android:layout_alignParentBottom="true" android:layout_marginBottom="20dp" android:textSize="28sp" diff --git a/packages/SystemUI/res/layout/navigation_bar.xml b/packages/SystemUI/res/layout/navigation_bar.xml index da52d89..09923a7 100644 --- a/packages/SystemUI/res/layout/navigation_bar.xml +++ b/packages/SystemUI/res/layout/navigation_bar.xml @@ -111,7 +111,7 @@ <ImageView android:layout_width="80dp" android:layout_height="match_parent" - android:layout_marginLeft="40dp" + android:layout_marginStart="40dp" android:src="@drawable/ic_sysbar_lights_out_dot_small" android:scaleType="center" android:layout_weight="0" @@ -137,7 +137,7 @@ /> <ImageView android:layout_width="80dp" - android:layout_marginRight="40dp" + android:layout_marginEnd="40dp" android:layout_height="match_parent" android:src="@drawable/ic_sysbar_lights_out_dot_small" android:scaleType="center" diff --git a/packages/SystemUI/res/layout/quick_settings_brightness_dialog.xml b/packages/SystemUI/res/layout/quick_settings_brightness_dialog.xml index f7b1d78..a6f4e9b 100644 --- a/packages/SystemUI/res/layout/quick_settings_brightness_dialog.xml +++ b/packages/SystemUI/res/layout/quick_settings_brightness_dialog.xml @@ -24,15 +24,15 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" - android:paddingRight="10dp" + android:paddingEnd="10dp" android:src="@drawable/ic_qs_brightness_auto_off" /> - <com.android.systemui.statusbar.policy.ToggleSlider + <com.android.systemui.settings.ToggleSlider android:id="@+id/brightness_slider" android:layout_width="0dp" android:layout_height="40dp" android:layout_weight="1" - android:layout_marginRight="2dp" + android:layout_marginEnd="2dp" android:layout_gravity="center_vertical" systemui:text="@string/status_bar_settings_auto_brightness_label" /> diff --git a/packages/SystemUI/res/layout/signal_cluster_view.xml b/packages/SystemUI/res/layout/signal_cluster_view.xml index 66c64c4..aab5083 100644 --- a/packages/SystemUI/res/layout/signal_cluster_view.xml +++ b/packages/SystemUI/res/layout/signal_cluster_view.xml @@ -28,13 +28,13 @@ android:id="@+id/wifi_combo" android:layout_height="wrap_content" android:layout_width="wrap_content" - android:layout_marginRight="-6dp" + android:layout_marginEnd="-6dp" > <ImageView android:id="@+id/wifi_signal" android:layout_height="wrap_content" android:layout_width="wrap_content" - android:layout_alignParentRight="true" + android:layout_alignParentEnd="true" android:layout_centerVertical="true" android:scaleType="center" /> @@ -55,13 +55,13 @@ android:id="@+id/wimax_combo" android:layout_height="wrap_content" android:layout_width="wrap_content" - android:layout_marginRight="-6dp" + android:layout_marginEnd="-6dp" > <ImageView android:id="@+id/wimax_signal" android:layout_height="wrap_content" android:layout_width="wrap_content" - android:layout_alignParentRight="true" + android:layout_alignParentEnd="true" android:layout_centerVertical="true" android:scaleType="center" /> @@ -101,7 +101,7 @@ android:id="@+id/mobile_inout" android:layout_height="wrap_content" android:layout_width="wrap_content" - android:layout_gravity="right|bottom" + android:layout_gravity="end|bottom" /> </FrameLayout> </FrameLayout> diff --git a/packages/SystemUI/res/layout/status_bar.xml b/packages/SystemUI/res/layout/status_bar.xml index bf20e9d..b27536d 100644 --- a/packages/SystemUI/res/layout/status_bar.xml +++ b/packages/SystemUI/res/layout/status_bar.xml @@ -34,7 +34,7 @@ android:id="@+id/notification_lights_out" android:layout_width="@dimen/status_bar_icon_size" android:layout_height="match_parent" - android:paddingLeft="6dip" + android:paddingStart="6dip" android:paddingBottom="2dip" android:src="@drawable/ic_sysbar_lights_out_dot_small" android:scaleType="center" @@ -44,8 +44,8 @@ <LinearLayout android:id="@+id/status_bar_contents" android:layout_width="match_parent" android:layout_height="match_parent" - android:paddingLeft="6dip" - android:paddingRight="6dip" + android:paddingStart="6dip" + android:paddingEnd="6dip" android:orientation="horizontal" > @@ -66,7 +66,7 @@ <com.android.systemui.statusbar.phone.IconMerger android:id="@+id/notificationIcons" android:layout_width="match_parent" android:layout_height="match_parent" - android:layout_alignParentLeft="true" + android:layout_alignParentStart="true" android:gravity="center_vertical" android:orientation="horizontal"/> </LinearLayout> @@ -86,7 +86,7 @@ android:id="@+id/signal_battery_cluster" android:layout_width="wrap_content" android:layout_height="match_parent" - android:paddingLeft="2dp" + android:paddingStart="2dp" android:orientation="horizontal" android:gravity="center" > @@ -99,7 +99,7 @@ android:id="@+id/battery" android:layout_height="wrap_content" android:layout_width="wrap_content" - android:paddingLeft="4dip" + android:paddingStart="4dip" /> </LinearLayout> @@ -109,8 +109,8 @@ android:layout_width="wrap_content" android:layout_height="match_parent" android:singleLine="true" - android:paddingLeft="6dip" - android:gravity="center_vertical|left" + android:paddingStart="6dip" + android:gravity="center_vertical|start" /> </LinearLayout> </LinearLayout> @@ -118,13 +118,13 @@ <LinearLayout android:id="@+id/ticker" android:layout_width="match_parent" android:layout_height="match_parent" - android:paddingLeft="6dip" + android:paddingStart="6dip" android:animationCache="false" android:orientation="horizontal" > <ImageSwitcher android:id="@+id/tickerIcon" android:layout_width="@dimen/status_bar_icon_size" android:layout_height="@dimen/status_bar_icon_size" - android:layout_marginRight="4dip" + android:layout_marginEnd="4dip" > <com.android.systemui.statusbar.AnimatedImageView android:layout_width="@dimen/status_bar_icon_size" @@ -142,7 +142,7 @@ android:layout_weight="1" android:layout_height="wrap_content" android:paddingTop="2dip" - android:paddingRight="10dip"> + android:paddingEnd="10dip"> <TextView android:textAppearance="@style/TextAppearance.StatusBar.PhoneTicker" android:layout_width="match_parent" diff --git a/packages/SystemUI/res/layout/status_bar_expanded.xml b/packages/SystemUI/res/layout/status_bar_expanded.xml index b71025e..1693e01 100644 --- a/packages/SystemUI/res/layout/status_bar_expanded.xml +++ b/packages/SystemUI/res/layout/status_bar_expanded.xml @@ -26,7 +26,7 @@ android:layout_height="wrap_content" android:background="@drawable/notification_panel_bg" android:paddingTop="@dimen/notification_panel_padding_top" - android:layout_marginLeft="@dimen/notification_panel_margin_left" + android:layout_marginStart="@dimen/notification_panel_margin_left" > <View diff --git a/packages/SystemUI/res/layout/status_bar_expanded_header.xml b/packages/SystemUI/res/layout/status_bar_expanded_header.xml index 556210e..9aa7cfd 100644 --- a/packages/SystemUI/res/layout/status_bar_expanded_header.xml +++ b/packages/SystemUI/res/layout/status_bar_expanded_header.xml @@ -30,8 +30,8 @@ android:id="@+id/datetime" android:layout_width="wrap_content" android:layout_height="match_parent" - android:paddingLeft="8dp" - android:paddingRight="8dp" + android:paddingStart="8dp" + android:paddingEnd="8dp" android:background="@drawable/ic_notify_button_bg" android:enabled="false" > @@ -39,7 +39,7 @@ android:id="@+id/clock" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginRight="8dp" + android:layout_marginEnd="8dp" android:singleLine="true" android:textAppearance="@style/TextAppearance.StatusBar.Expanded.Clock" android:layout_centerVertical="true" @@ -50,7 +50,7 @@ android:layout_height="wrap_content" android:singleLine="true" android:textAppearance="@style/TextAppearance.StatusBar.Expanded.Date" - android:layout_toRightOf="@id/clock" + android:layout_toEndOf="@id/clock" android:layout_alignBaseline="@id/clock" /> </RelativeLayout> @@ -86,7 +86,7 @@ <FrameLayout android:id="@+id/settings_button_holder" android:layout_width="50dp" android:layout_height="50dp" - android:layout_marginLeft="12dp" + android:layout_marginStart="12dp" > <ImageView android:id="@+id/settings_button" android:layout_width="50dp" diff --git a/packages/SystemUI/res/layout/status_bar_help.xml b/packages/SystemUI/res/layout/status_bar_help.xml index 41bde4b..f638767 100644 --- a/packages/SystemUI/res/layout/status_bar_help.xml +++ b/packages/SystemUI/res/layout/status_bar_help.xml @@ -22,12 +22,12 @@ xmlns:systemui="http://schemas.android.com/apk/res/com.android.systemui" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/status_bar_cling" - android:paddingLeft="40dp" - android:paddingRight="40dp" + android:paddingStart="40dp" + android:paddingEnd="40dp" android:background="#DD000000" android:focusable="true" android:orientation="vertical" - android:gravity="top|left" + android:gravity="top|start" > <ImageView @@ -56,8 +56,8 @@ style="@style/ClingButton" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:paddingLeft="50dp" - android:paddingRight="50dp" + android:paddingStart="50dp" + android:paddingEnd="50dp" android:text="@android:string/ok" /> </LinearLayout>
\ No newline at end of file diff --git a/packages/SystemUI/res/layout/status_bar_icon.xml b/packages/SystemUI/res/layout/status_bar_icon.xml index d2ebf9e..063212e 100644 --- a/packages/SystemUI/res/layout/status_bar_icon.xml +++ b/packages/SystemUI/res/layout/status_bar_icon.xml @@ -33,8 +33,8 @@ <TextView android:id="@+id/number" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_gravity="right|bottom" - android:layout_marginRight="1dp" + android:layout_gravity="end|bottom" + android:layout_marginEnd="1dp" android:layout_marginBottom="1dp" android:textSize="10sp" android:textColor="#ffffffff" diff --git a/packages/SystemUI/res/layout/status_bar_notification_row.xml b/packages/SystemUI/res/layout/status_bar_notification_row.xml index 3dcdae8..7a5ff3c 100644 --- a/packages/SystemUI/res/layout/status_bar_notification_row.xml +++ b/packages/SystemUI/res/layout/status_bar_notification_row.xml @@ -17,11 +17,11 @@ android:id="@+id/veto" android:layout_width="48dp" android:layout_height="match_parent" - android:gravity="right" - android:layout_marginRight="-80dp" + android:gravity="end" + android:layout_marginEnd="-80dp" android:background="@null" - android:paddingRight="8dp" - android:paddingLeft="8dp" + android:paddingEnd="8dp" + android:paddingStart="8dp" /> <com.android.systemui.statusbar.LatestItemView android:id="@+id/content" @@ -54,7 +54,7 @@ android:visibility="invisible" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_gravity="bottom|right" + android:layout_gravity="bottom|end" android:fontFamily="sans-serif-condensed" android:textSize="9dp" android:textStyle="bold" diff --git a/packages/SystemUI/res/layout/status_bar_recent_item.xml b/packages/SystemUI/res/layout/status_bar_recent_item.xml index e2b5723..6290bb3 100644 --- a/packages/SystemUI/res/layout/status_bar_recent_item.xml +++ b/packages/SystemUI/res/layout/status_bar_recent_item.xml @@ -40,21 +40,22 @@ android:fadingEdge="horizontal" android:fadingEdgeLength="@dimen/status_bar_recents_text_fading_edge_length" android:scrollHorizontally="true" - android:layout_alignParentLeft="true" + android:layout_alignParentStart="true" android:layout_alignTop="@+id/app_icon" android:paddingTop="2dp" - android:layout_marginLeft="@dimen/status_bar_recents_app_label_left_margin" + android:layout_marginStart="@dimen/status_bar_recents_app_label_left_margin" android:singleLine="true" android:ellipsize="marquee" android:textColor="@color/status_bar_recents_app_label_color" android:importantForAccessibility="no" + android:textAlignment="viewStart" /> <FrameLayout android:id="@+id/app_thumbnail" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" - android:layout_toRightOf="@id/app_label" - android:layout_marginLeft="@dimen/status_bar_recents_thumbnail_left_margin" + android:layout_toEndOf="@id/app_label" + android:layout_marginStart="@dimen/status_bar_recents_thumbnail_left_margin" android:background="@drawable/recents_thumbnail_bg" android:foreground="@drawable/recents_thumbnail_fg" android:visibility="invisible"> @@ -66,11 +67,11 @@ <View android:id="@+id/recents_callout_line" android:layout_width="@dimen/status_bar_recents_app_label_width" android:layout_height="1dip" - android:layout_alignParentLeft="true" - android:layout_marginLeft="@dimen/status_bar_recents_app_label_left_margin" - android:layout_toLeftOf="@id/app_thumbnail" + android:layout_alignParentStart="true" + android:layout_marginStart="@dimen/status_bar_recents_app_label_left_margin" + android:layout_toStartOf="@id/app_thumbnail" android:layout_below="@id/app_label" - android:layout_marginRight="3dip" + android:layout_marginEnd="3dip" android:layout_marginTop="3dip" android:background="@drawable/recents_callout_line" /> @@ -78,8 +79,8 @@ <ImageView android:id="@id/app_icon" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_toRightOf="@id/app_label" - android:layout_marginLeft="@dimen/status_bar_recents_app_icon_left_margin" + android:layout_toEndOf="@id/app_label" + android:layout_marginStart="@dimen/status_bar_recents_app_icon_left_margin" android:layout_marginTop="@dimen/status_bar_recents_app_icon_top_margin" android:maxWidth="@dimen/status_bar_recents_app_icon_max_width" android:maxHeight="@dimen/status_bar_recents_app_icon_max_height" @@ -95,12 +96,13 @@ android:fadingEdge="horizontal" android:fadingEdgeLength="@dimen/status_bar_recents_text_fading_edge_length" android:scrollHorizontally="true" - android:layout_alignParentLeft="true" - android:layout_marginLeft="@dimen/status_bar_recents_app_label_left_margin" + android:layout_alignParentStart="true" + android:layout_marginStart="@dimen/status_bar_recents_app_label_left_margin" android:layout_below="@id/recents_callout_line" android:layout_marginTop="3dip" android:singleLine="true" android:ellipsize="marquee" + android:textAlignment="viewStart" /> </RelativeLayout> diff --git a/packages/SystemUI/res/layout/status_bar_recent_panel.xml b/packages/SystemUI/res/layout/status_bar_recent_panel.xml index 7335f86..305aaf2 100644 --- a/packages/SystemUI/res/layout/status_bar_recent_panel.xml +++ b/packages/SystemUI/res/layout/status_bar_recent_panel.xml @@ -37,15 +37,16 @@ android:id="@+id/recents_container" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginRight="0dp" + android:layout_marginEnd="0dp" android:divider="@null" android:stackFromBottom="true" android:fadingEdge="vertical" android:scrollbars="none" android:fadingEdgeLength="@dimen/status_bar_recents_scroll_fading_edge_length" - android:layout_gravity="bottom|left" + android:layout_gravity="bottom|start" android:clipToPadding="false" - android:clipChildren="false"> + android:clipChildren="false" + android:fitsSystemWindows="true"> <LinearLayout android:id="@+id/recents_linear_layout" android:layout_width="match_parent" diff --git a/packages/SystemUI/res/layout/status_bar_toggle_slider.xml b/packages/SystemUI/res/layout/status_bar_toggle_slider.xml index 3105dab..834cc2c 100644 --- a/packages/SystemUI/res/layout/status_bar_toggle_slider.xml +++ b/packages/SystemUI/res/layout/status_bar_toggle_slider.xml @@ -24,7 +24,7 @@ android:id="@+id/toggle" android:layout_width="48dp" android:layout_height="0dp" - android:layout_alignParentLeft="true" + android:layout_alignParentStart="true" android:layout_alignParentTop="true" android:layout_alignParentBottom="true" android:button="@null" @@ -33,18 +33,18 @@ android:id="@+id/slider" android:layout_width="0dp" android:layout_height="wrap_content" - android:layout_toRightOf="@id/toggle" + android:layout_toEndOf="@id/toggle" android:layout_centerVertical="true" - android:layout_alignParentRight="true" - android:paddingLeft="20dp" - android:paddingRight="20dp" + android:layout_alignParentEnd="true" + android:paddingStart="20dp" + android:paddingEnd="20dp" /> <TextView android:id="@+id/label" android:layout_width="0dp" android:layout_height="wrap_content" - android:layout_alignLeft="@id/toggle" - android:layout_alignRight="@id/toggle" + android:layout_alignStart="@id/toggle" + android:layout_alignEnd="@id/toggle" android:layout_centerVertical="true" android:gravity="center" android:paddingTop="26dp" diff --git a/packages/SystemUI/res/layout/system_bar.xml b/packages/SystemUI/res/layout/system_bar.xml index c13b113..28c9dc0 100644 --- a/packages/SystemUI/res/layout/system_bar.xml +++ b/packages/SystemUI/res/layout/system_bar.xml @@ -39,7 +39,7 @@ <include layout="@layout/system_bar_notification_area" android:layout_width="wrap_content" android:layout_height="match_parent" - android:layout_alignParentRight="true" + android:layout_alignParentEnd="true" android:layout_marginTop="1dp" /> @@ -48,7 +48,7 @@ android:id="@+id/navigationArea" android:layout_width="wrap_content" android:layout_height="match_parent" - android:layout_alignParentLeft="true" + android:layout_alignParentStart="true" android:orientation="horizontal" android:clipChildren="false" android:clipToPadding="false" @@ -91,10 +91,10 @@ <com.android.systemui.statusbar.policy.EventHole android:id="@+id/fake_space_bar" android:layout_height="match_parent" android:layout_width="0dp" - android:paddingLeft="8dip" - android:paddingRight="8dip" - android:layout_toRightOf="@+id/navigationArea" - android:layout_toLeftOf="@+id/notificationArea" + android:paddingStart="8dip" + android:paddingEnd="8dip" + android:layout_toEndOf="@+id/navigationArea" + android:layout_toStartOf="@+id/notificationArea" android:visibility="gone" /> </RelativeLayout> @@ -119,7 +119,7 @@ android:layout_width="80dip" android:layout_height="48dip" android:src="@drawable/ic_sysbar_lights_out_dot_small" - android:layout_alignParentLeft="true" + android:layout_alignParentStart="true" android:layout_alignParentBottom="true" /> <ImageView @@ -127,7 +127,7 @@ android:layout_width="80dip" android:layout_height="48dip" android:src="@drawable/ic_sysbar_lights_out_dot_large" - android:layout_toRightOf="@+id/dot0" + android:layout_toEndOf="@+id/dot0" android:layout_alignParentBottom="true" /> <ImageView @@ -135,7 +135,7 @@ android:layout_width="80dip" android:layout_height="48dip" android:src="@drawable/ic_sysbar_lights_out_dot_small" - android:layout_toRightOf="@+id/dot1" + android:layout_toEndOf="@+id/dot1" android:layout_alignParentBottom="true" /> <ImageView @@ -143,7 +143,7 @@ android:layout_width="80dip" android:layout_height="48dip" android:src="@drawable/ic_sysbar_lights_out_dot_small" - android:layout_alignParentRight="true" + android:layout_alignParentEnd="true" android:layout_alignParentBottom="true" /> </RelativeLayout> diff --git a/packages/SystemUI/res/layout/system_bar_compat_mode_panel.xml b/packages/SystemUI/res/layout/system_bar_compat_mode_panel.xml index a33741e..9ad9e05 100644 --- a/packages/SystemUI/res/layout/system_bar_compat_mode_panel.xml +++ b/packages/SystemUI/res/layout/system_bar_compat_mode_panel.xml @@ -22,7 +22,7 @@ android:layout_height="wrap_content" android:layout_width="match_parent" android:paddingBottom="@dimen/panel_float" - android:paddingRight="20dp" + android:paddingEnd="20dp" > <RadioGroup android:id="@+id/compat_mode_radio_group" android:background="@*android:drawable/dialog_full_holo_dark" diff --git a/packages/SystemUI/res/layout/system_bar_input_methods_item.xml b/packages/SystemUI/res/layout/system_bar_input_methods_item.xml index 5515559..1a95ec1 100644 --- a/packages/SystemUI/res/layout/system_bar_input_methods_item.xml +++ b/packages/SystemUI/res/layout/system_bar_input_methods_item.xml @@ -24,8 +24,8 @@ android:minHeight="?android:attr/listPreferredItemHeight" android:background="@drawable/status_bar_item_background" android:orientation="vertical" - android:paddingRight="6dip" - android:paddingLeft="6dip" + android:paddingEnd="6dip" + android:paddingStart="6dip" android:paddingTop="5dip" android:paddingBottom="5dip" android:gravity="center_vertical"> @@ -71,7 +71,7 @@ <TextView android:id="@+id/item_subtitle" android:layout_marginTop="-4dip" - android:layout_gravity="center_vertical|left" + android:layout_gravity="center_vertical|start" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceSmall" /> @@ -87,10 +87,10 @@ android:id="@+id/item_settings_icon" android:layout_width="wrap_content" android:layout_height="match_parent" - android:layout_marginLeft="5dip" + android:layout_marginStart="5dip" android:layout_gravity="center_vertical" - android:paddingRight="10dip" - android:paddingLeft="10dip" + android:paddingEnd="10dip" + android:paddingStart="10dip" android:src="@drawable/ic_sysbar_quicksettings" android:visibility="visible" android:clickable="true" diff --git a/packages/SystemUI/res/layout/system_bar_input_methods_panel.xml b/packages/SystemUI/res/layout/system_bar_input_methods_panel.xml index 8dede50..547f937 100644 --- a/packages/SystemUI/res/layout/system_bar_input_methods_panel.xml +++ b/packages/SystemUI/res/layout/system_bar_input_methods_panel.xml @@ -36,7 +36,7 @@ <LinearLayout android:layout_width="450dip" android:layout_height="wrap_content" - android:layout_marginLeft="20dip" + android:layout_marginStart="20dip" android:orientation="vertical" android:background="@drawable/notify_panel_clock_bg"> <!-- Hard keyboard switch --> @@ -57,8 +57,8 @@ android:minHeight="?android:attr/listPreferredItemHeight" android:background="?android:attr/selectableItemBackground" android:orientation="vertical" - android:paddingRight="6dip" - android:paddingLeft="30dip" + android:paddingEnd="6dip" + android:paddingStart="30dip" android:paddingTop="5dip" android:paddingBottom="5dip" android:gravity="center_vertical" @@ -71,7 +71,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" - android:layout_marginRight="16dip" /> + android:layout_marginEnd="16dip" /> </LinearLayout> <View android:layout_width="match_parent" @@ -103,8 +103,8 @@ android:minHeight="?android:attr/listPreferredItemHeight" android:background="?android:attr/selectableItemBackground" android:orientation="vertical" - android:paddingRight="6dip" - android:paddingLeft="30dip" + android:paddingEnd="6dip" + android:paddingStart="30dip" android:paddingTop="5dip" android:paddingBottom="5dip" android:gravity="center_vertical" diff --git a/packages/SystemUI/res/layout/system_bar_no_recent_apps.xml b/packages/SystemUI/res/layout/system_bar_no_recent_apps.xml index bc89281..c023ef7 100644 --- a/packages/SystemUI/res/layout/system_bar_no_recent_apps.xml +++ b/packages/SystemUI/res/layout/system_bar_no_recent_apps.xml @@ -30,7 +30,7 @@ android:textSize="20dp" android:textColor="@android:color/holo_blue_light" android:text="@string/status_bar_no_recent_apps" - android:gravity="left" - android:layout_gravity="bottom|left" + android:gravity="start" + android:layout_gravity="bottom|start" /> </FrameLayout> diff --git a/packages/SystemUI/res/layout/system_bar_notification_area.xml b/packages/SystemUI/res/layout/system_bar_notification_area.xml index a59dad2..2fd91ef 100644 --- a/packages/SystemUI/res/layout/system_bar_notification_area.xml +++ b/packages/SystemUI/res/layout/system_bar_notification_area.xml @@ -22,7 +22,7 @@ android:id="@+id/notificationArea" android:layout_width="wrap_content" android:layout_height="match_parent" - android:layout_alignParentRight="true" + android:layout_alignParentEnd="true" android:orientation="horizontal" android:background="?android:attr/listChoiceBackgroundIndicator" android:clickable="true" @@ -39,7 +39,7 @@ android:id="@+id/imeSwitchButton" android:layout_width="wrap_content" android:layout_height="match_parent" - android:layout_marginLeft="8dip" + android:layout_marginStart="8dip" android:src="@drawable/ic_sysbar_ime_default" android:visibility="gone" android:contentDescription="@string/accessibility_ime_switch_button" @@ -49,7 +49,7 @@ android:id="@+id/compatModeButton" android:layout_width="wrap_content" android:layout_height="match_parent" - android:layout_marginLeft="8dip" + android:layout_marginStart="8dip" android:src="@drawable/ic_sysbar_zoom" android:visibility="gone" android:contentDescription="@string/accessibility_compatibility_zoom_button" @@ -66,7 +66,7 @@ android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="center_vertical" - android:layout_marginLeft="8dp" + android:layout_marginStart="8dp" android:alpha="0.4" /> </com.android.systemui.statusbar.tablet.NotificationIconArea> @@ -84,17 +84,17 @@ android:layout_width="wrap_content" android:layout_height="match_parent" android:singleLine="true" - android:paddingLeft="6dip" - android:layout_marginRight="8dip" - android:gravity="center_vertical|left" + android:paddingStart="6dip" + android:layout_marginEnd="8dip" + android:gravity="center_vertical|start" /> <TextView android:id="@+id/network_text" android:layout_width="wrap_content" android:layout_height="match_parent" - android:layout_marginRight="6dip" - android:layout_marginLeft="6dip" + android:layout_marginEnd="6dip" + android:layout_marginStart="6dip" android:gravity="center" android:singleLine="true" android:visibility="gone" @@ -106,7 +106,7 @@ android:id="@+id/signal_battery_cluster" android:layout_width="wrap_content" android:layout_height="match_parent" - android:layout_marginRight="16dp" + android:layout_marginEnd="16dp" android:orientation="horizontal" android:gravity="center" > @@ -119,14 +119,14 @@ android:id="@+id/bluetooth" android:layout_height="wrap_content" android:layout_width="wrap_content" - android:paddingLeft="4dip" + android:paddingStart="4dip" android:visibility="gone" /> <ImageView android:id="@+id/battery" android:layout_height="wrap_content" android:layout_width="wrap_content" - android:paddingLeft="4dip" + android:paddingStart="4dip" /> </LinearLayout> </LinearLayout> diff --git a/packages/SystemUI/res/layout/system_bar_notification_panel.xml b/packages/SystemUI/res/layout/system_bar_notification_panel.xml index 315639e..58a6de3 100644 --- a/packages/SystemUI/res/layout/system_bar_notification_panel.xml +++ b/packages/SystemUI/res/layout/system_bar_notification_panel.xml @@ -21,7 +21,7 @@ android:id="@+id/content_parent" android:layout_height="match_parent" android:layout_width="match_parent" - android:gravity="right" + android:gravity="end" > <!-- lift the panel up off the status bar while leaving a touchable are --> @@ -29,7 +29,7 @@ android:id="@+id/system_bar_notification_panel_bottom_space" android:layout_height="56dp" android:layout_width="478dp" - android:layout_alignParentRight="true" + android:layout_alignParentEnd="true" android:layout_alignParentBottom="true" /> @@ -39,7 +39,7 @@ android:layout_height="wrap_content" android:layout_width="478dp" android:orientation="vertical" - android:layout_alignParentRight="true" + android:layout_alignParentEnd="true" android:layout_above="@id/system_bar_notification_panel_bottom_space" android:paddingBottom="8dp" > @@ -48,7 +48,7 @@ android:layout_width="match_parent" android:layout_height="130dp" android:layout_above="@id/content_frame" - android:layout_alignParentRight="true" + android:layout_alignParentEnd="true" android:layout_weight="0" /> diff --git a/packages/SystemUI/res/layout/system_bar_notification_panel_title.xml b/packages/SystemUI/res/layout/system_bar_notification_panel_title.xml index 59544f4..d08fbce 100644 --- a/packages/SystemUI/res/layout/system_bar_notification_panel_title.xml +++ b/packages/SystemUI/res/layout/system_bar_notification_panel_title.xml @@ -23,16 +23,16 @@ android:layout_height="wrap_content" android:clickable="true" android:orientation="vertical" - android:paddingLeft="26dp" + android:paddingStart="26dp" android:paddingTop="14dp" - android:paddingRight="26dp" + android:paddingEnd="26dp" > <TableLayout android:id="@+id/icons" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_alignParentLeft="true" + android:layout_alignParentStart="true" android:layout_alignParentBottom="true" android:layout_marginTop="16dp" android:layout_marginBottom="16dp" @@ -52,7 +52,7 @@ android:id="@+id/bluetooth" android:layout_height="wrap_content" android:layout_width="wrap_content" - android:paddingRight="16dp" + android:paddingEnd="16dp" android:visibility="gone" android:contentDescription="@null" android:layout_gravity="center_vertical" @@ -65,7 +65,7 @@ android:layout_height="wrap_content" android:layout_width="wrap_content" android:layout_gravity="center_vertical" - android:paddingRight="6dp" + android:paddingEnd="6dp" > <ImageView @@ -86,10 +86,10 @@ <TextView android:id="@+id/mobile_text" style="@style/SystemBarNotificationText" - android:layout_gravity="left|center_vertical" + android:layout_gravity="start|center_vertical" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:paddingRight="12dp" + android:paddingEnd="12dp" android:singleLine="true" android:ellipsize="end" android:text="@string/status_bar_settings_settings_button" @@ -101,7 +101,7 @@ android:layout_height="wrap_content" android:layout_width="wrap_content" android:layout_gravity="center_vertical" - android:paddingRight="6dp" + android:paddingEnd="6dp" > <ImageView @@ -122,10 +122,10 @@ <TextView android:id="@+id/wifi_text" style="@style/SystemBarNotificationText" - android:layout_gravity="left|center_vertical" + android:layout_gravity="start|center_vertical" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:paddingRight="12dp" + android:paddingEnd="12dp" android:singleLine="true" android:ellipsize="end" android:text="@string/status_bar_settings_settings_button" @@ -138,7 +138,7 @@ android:scaleType="centerInside" android:layout_gravity="center_vertical" android:layout_alignBaseline="@id/wifi_signal" - android:paddingRight="6dp" + android:paddingEnd="6dp" android:contentDescription="@null" /> @@ -147,8 +147,8 @@ style="@style/SystemBarNotificationText" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_gravity="left|center_vertical" - android:paddingRight="2dp" + android:layout_gravity="start|center_vertical" + android:paddingEnd="2dp" android:singleLine="true" android:text="@string/status_bar_settings_settings_button" /> @@ -209,8 +209,8 @@ android:id="@+id/date" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginLeft="8dp" - android:layout_marginRight="8dp" + android:layout_marginStart="8dp" + android:layout_marginEnd="8dp" android:textAppearance="@style/TextAppearance.SystemBar.Expanded.Date" /> diff --git a/packages/SystemUI/res/layout/system_bar_recent_item.xml b/packages/SystemUI/res/layout/system_bar_recent_item.xml index b5f7da7..34f60b2 100644 --- a/packages/SystemUI/res/layout/system_bar_recent_item.xml +++ b/packages/SystemUI/res/layout/system_bar_recent_item.xml @@ -30,9 +30,9 @@ android:fadingEdge="horizontal" android:fadingEdgeLength="@dimen/status_bar_recents_text_fading_edge_length" android:scrollHorizontally="true" - android:layout_alignParentLeft="true" + android:layout_alignParentStart="true" android:layout_alignParentTop="true" - android:layout_marginLeft="@dimen/status_bar_recents_app_label_left_margin" + android:layout_marginStart="@dimen/status_bar_recents_app_label_left_margin" android:layout_marginTop="32dip" android:singleLine="true" android:ellipsize="marquee" @@ -43,8 +43,8 @@ <FrameLayout android:id="@+id/app_thumbnail" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_toRightOf="@id/app_label" - android:layout_marginLeft="@dimen/status_bar_recents_thumbnail_left_margin" + android:layout_toEndOf="@id/app_label" + android:layout_marginStart="@dimen/status_bar_recents_thumbnail_left_margin" android:scaleType="center" android:background="@drawable/recents_thumbnail_bg" android:foreground="@drawable/recents_thumbnail_fg" @@ -59,8 +59,8 @@ <ImageView android:id="@+id/app_icon" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_toRightOf="@id/app_label" - android:layout_marginLeft="@dimen/status_bar_recents_app_icon_left_margin" + android:layout_toEndOf="@id/app_label" + android:layout_marginStart="@dimen/status_bar_recents_app_icon_left_margin" android:layout_marginTop="@dimen/status_bar_recents_app_icon_top_margin" android:maxWidth="@dimen/status_bar_recents_app_icon_max_width" android:maxHeight="@dimen/status_bar_recents_app_icon_max_height" @@ -75,10 +75,10 @@ android:layout_height="1dip" android:layout_below="@id/app_label" android:layout_marginTop="3dip" - android:layout_alignParentLeft="true" - android:layout_marginLeft="@dimen/status_bar_recents_app_label_left_margin" - android:layout_toLeftOf="@id/app_thumbnail" - android:layout_marginRight="3dip" + android:layout_alignParentStart="true" + android:layout_marginStart="@dimen/status_bar_recents_app_label_left_margin" + android:layout_toStartOf="@id/app_thumbnail" + android:layout_marginEnd="3dip" android:background="@drawable/recents_callout_line" /> @@ -89,9 +89,9 @@ android:fadingEdge="horizontal" android:fadingEdgeLength="@dimen/status_bar_recents_text_fading_edge_length" android:scrollHorizontally="true" - android:layout_alignParentLeft="true" + android:layout_alignParentStart="true" android:layout_below="@id/recents_callout_line" - android:layout_marginLeft="@dimen/status_bar_recents_app_label_left_margin" + android:layout_marginStart="@dimen/status_bar_recents_app_label_left_margin" android:layout_marginTop="3dip" android:singleLine="true" android:ellipsize="marquee" diff --git a/packages/SystemUI/res/layout/system_bar_recent_panel.xml b/packages/SystemUI/res/layout/system_bar_recent_panel.xml index 3951bba..3d15d9b 100644 --- a/packages/SystemUI/res/layout/system_bar_recent_panel.xml +++ b/packages/SystemUI/res/layout/system_bar_recent_panel.xml @@ -41,15 +41,16 @@ <com.android.systemui.recent.RecentsVerticalScrollView android:id="@+id/recents_container" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginRight="@dimen/status_bar_recents_right_glow_margin" + android:layout_marginEnd="@dimen/status_bar_recents_right_glow_margin" android:divider="@null" android:stackFromBottom="true" android:fadingEdge="vertical" android:scrollbars="none" android:fadingEdgeLength="20dip" - android:layout_gravity="bottom|left" + android:layout_gravity="bottom|start" android:clipToPadding="false" - android:clipChildren="false"> + android:clipChildren="false" + android:fitsSystemWindows="true"> <LinearLayout android:id="@+id/recents_linear_layout" android:layout_width="wrap_content" @@ -65,7 +66,7 @@ android:id="@+id/recents_no_apps" android:layout_width="match_parent" android:layout_height="match_parent" - android:layout_marginLeft="58dip" + android:layout_marginStart="58dip" android:layout_marginBottom="36dip" android:visibility="invisible" /> @@ -76,7 +77,7 @@ android:layout_width="match_parent" android:layout_height="@*android:dimen/system_bar_height" android:layout_alignParentBottom="true" - android:layout_alignParentLeft="true" + android:layout_alignParentStart="true" /> diff --git a/packages/SystemUI/res/layout/system_bar_settings_view.xml b/packages/SystemUI/res/layout/system_bar_settings_view.xml index d07e45d..4987dd9 100644 --- a/packages/SystemUI/res/layout/system_bar_settings_view.xml +++ b/packages/SystemUI/res/layout/system_bar_settings_view.xml @@ -43,7 +43,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" - android:layout_marginRight="5dp" + android:layout_marginEnd="5dp" /> </LinearLayout> <View style="@style/SystemBarPanelSettingsPanelSeparator" /> @@ -86,7 +86,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" - android:layout_marginRight="5dp" + android:layout_marginEnd="5dp" /> </LinearLayout> <View @@ -100,12 +100,12 @@ style="@style/SystemBarPanelSettingsIcon" android:src="@drawable/ic_sysbar_brightness" /> - <com.android.systemui.statusbar.policy.ToggleSlider + <com.android.systemui.settings.ToggleSlider android:id="@+id/brightness" android:layout_width="0dp" android:layout_height="fill_parent" android:layout_weight="1" - android:layout_marginRight="2dp" + android:layout_marginEnd="2dp" systemui:text="@string/status_bar_settings_auto_brightness_label" /> </LinearLayout> @@ -130,7 +130,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" - android:layout_marginRight="5dp" + android:layout_marginEnd="5dp" /> </LinearLayout> <View style="@style/SystemBarPanelSettingsPanelSeparator" /> diff --git a/packages/SystemUI/res/layout/system_bar_ticker_compat.xml b/packages/SystemUI/res/layout/system_bar_ticker_compat.xml index 0d255e7..14cdc40 100644 --- a/packages/SystemUI/res/layout/system_bar_ticker_compat.xml +++ b/packages/SystemUI/res/layout/system_bar_ticker_compat.xml @@ -50,7 +50,7 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="center_vertical" - android:layout_marginLeft="12dp" + android:layout_marginStart="12dp" android:gravity="center_vertical" android:maxLines="2" /> diff --git a/packages/SystemUI/res/layout/system_bar_ticker_panel.xml b/packages/SystemUI/res/layout/system_bar_ticker_panel.xml index 1738b48..49d0405 100644 --- a/packages/SystemUI/res/layout/system_bar_ticker_panel.xml +++ b/packages/SystemUI/res/layout/system_bar_ticker_panel.xml @@ -25,7 +25,7 @@ android:layout_height="@*android:dimen/system_bar_height" android:layout_width="match_parent" android:background="@drawable/system_bar_ticker_background" - android:layout_alignParentLeft="true" + android:layout_alignParentStart="true" android:layout_alignParentBottom="true" android:clickable="false" /> @@ -36,7 +36,7 @@ android:layout_height="@android:dimen/notification_large_icon_width" android:scaleType="center" android:visibility="gone" - android:layout_alignParentLeft="true" + android:layout_alignParentStart="true" android:layout_alignParentBottom="true" /> @@ -45,7 +45,7 @@ android:layout_weight="1" android:layout_height="@*android:dimen/system_bar_height" android:layout_width="match_parent" - android:layout_toRightOf="@id/large_icon" + android:layout_toEndOf="@id/large_icon" android:layout_alignParentBottom="true" android:layout_alignWithParentIfMissing="true" /> diff --git a/packages/SystemUI/res/layout/universe.xml b/packages/SystemUI/res/layout/universe.xml index 6102d2e..390c467 100644 --- a/packages/SystemUI/res/layout/universe.xml +++ b/packages/SystemUI/res/layout/universe.xml @@ -22,7 +22,7 @@ <Button android:id="@+id/close" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_alignParentTop="true" android:layout_alignParentRight="true" + android:layout_alignParentTop="true" android:layout_alignParentEnd="true" android:text="@string/close_universe" /> <TextView android:id="@+id/title" diff --git a/packages/SystemUI/res/values-pt-rPT/strings.xml b/packages/SystemUI/res/values-pt-rPT/strings.xml index 1b8370b..fa70492 100644 --- a/packages/SystemUI/res/values-pt-rPT/strings.xml +++ b/packages/SystemUI/res/values-pt-rPT/strings.xml @@ -26,7 +26,7 @@ <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Remover da lista"</string> <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Informações da aplicação"</string> <string name="status_bar_no_recent_apps" msgid="6576392951053994640">"Não existem aplicações recentes"</string> - <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Rejeitar aplicações recentes"</string> + <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Ignorar aplicações recentes"</string> <plurals name="status_bar_accessibility_recent_apps"> <item quantity="one" msgid="5854176083865845541">"1 aplicação recente"</item> <item quantity="other" msgid="1040784359794890744">"%d aplicações recentes"</item> diff --git a/packages/SystemUI/res/values-ru/strings.xml b/packages/SystemUI/res/values-ru/strings.xml index 28fe0d2..ccf4fd4 100644 --- a/packages/SystemUI/res/values-ru/strings.xml +++ b/packages/SystemUI/res/values-ru/strings.xml @@ -25,7 +25,7 @@ <string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Показать уведомления"</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="6576392951053994640">"В последнее время вы не запускали приложения."</string> + <string name="status_bar_no_recent_apps" msgid="6576392951053994640">"Список недавно использованных приложений пуст."</string> <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Закрыть недавние приложения"</string> <plurals name="status_bar_accessibility_recent_apps"> <item quantity="one" msgid="5854176083865845541">"Недавних приложений: 1"</item> diff --git a/packages/SystemUI/res/values-sw/strings.xml b/packages/SystemUI/res/values-sw/strings.xml index 3e4af20..139854c 100644 --- a/packages/SystemUI/res/values-sw/strings.xml +++ b/packages/SystemUI/res/values-sw/strings.xml @@ -41,7 +41,7 @@ <string name="status_bar_settings_wifi_button" msgid="1733928151698311923">"Mtandao-Hewa"</string> <string name="status_bar_settings_airplane" msgid="4879879698500955300">"Hali ya Ndege"</string> <string name="status_bar_settings_auto_rotation" msgid="3790482541357798421">"Zungusha otomatiki skrini"</string> - <string name="status_bar_settings_mute_label" msgid="554682549917429396">"NYAMAZISHA"</string> + <string name="status_bar_settings_mute_label" msgid="554682549917429396">"PUUZA"</string> <string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"KIOTOMATIKI"</string> <string name="status_bar_settings_notifications" msgid="397146176280905137">"Arifa"</string> <string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetooth imefungwa"</string> diff --git a/packages/SystemUI/res/values-sw600dp/dimens.xml b/packages/SystemUI/res/values-sw600dp/dimens.xml index fc80f5c..ad4dcf9 100644 --- a/packages/SystemUI/res/values-sw600dp/dimens.xml +++ b/packages/SystemUI/res/values-sw600dp/dimens.xml @@ -24,9 +24,9 @@ <dimen name="notification_panel_margin_left">16dp</dimen> <!-- Gravity for the notification & quick settings panels --> - <!-- 0x33 = left|top ; 0x35 = right|top --> - <integer name="notification_panel_layout_gravity">0x33</integer> - <integer name="settings_panel_layout_gravity">0x35</integer> + <!-- 0x800033 = start|top ; 0x800035 = end|top --> + <integer name="notification_panel_layout_gravity">0x800033</integer> + <integer name="settings_panel_layout_gravity">0x800035</integer> <!-- Diameter of outer shape drawable shown in navbar search--> <dimen name="navbar_search_outerring_diameter">430dip</dimen> diff --git a/packages/SystemUI/res/values-sw720dp/styles.xml b/packages/SystemUI/res/values-sw720dp/styles.xml index e0b1774..5009395 100644 --- a/packages/SystemUI/res/values-sw720dp/styles.xml +++ b/packages/SystemUI/res/values-sw720dp/styles.xml @@ -39,13 +39,13 @@ <item name="android:layout_height">wrap_content</item> <item name="android:layout_width">0dp</item> <item name="android:layout_weight">1</item> - <item name="android:layout_gravity">left|center_vertical</item> + <item name="android:layout_gravity">start|center_vertical</item> <item name="android:textColor">?android:attr/textColorPrimary</item> <item name="android:textSize">18sp</item> </style> <style name="SystemBarPanelSettingsPanelSeparator"> - <item name="android:layout_marginRight">0dp</item> + <item name="android:layout_marginEnd">0dp</item> <item name="android:layout_width">match_parent</item> <item name="android:layout_height">1dp</item> <item name="android:background">@android:drawable/divider_horizontal_dark</item> diff --git a/packages/SystemUI/res/values/donottranslate.xml b/packages/SystemUI/res/values/donottranslate.xml index 41ea6f3..351a1fd 100644 --- a/packages/SystemUI/res/values/donottranslate.xml +++ b/packages/SystemUI/res/values/donottranslate.xml @@ -18,6 +18,6 @@ --> <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <!-- Date format for display: should match the lockscreen in /policy. --> - <string name="abbrev_wday_month_day_no_year">@*android:string/abbrev_wday_month_day_no_year</string> + <string name="system_ui_date_pattern">@*android:string/system_ui_date_pattern</string> </resources> diff --git a/packages/SystemUI/src/com/android/systemui/EventLogTags.logtags b/packages/SystemUI/src/com/android/systemui/EventLogTags.logtags new file mode 100644 index 0000000..aa32e9c --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/EventLogTags.logtags @@ -0,0 +1,33 @@ +# See system/core/logcat/event.logtags for a description of the format of this file. + +option java_package com.android.systemui; + +# --------------------------- +# PhoneStatusBar.java +# --------------------------- +36000 sysui_statusbar_touch (type|1),(x|1),(y|1),(enabled|1) + +# --------------------------- +# PhoneStatusBarView.java +# --------------------------- +36010 sysui_panelbar_touch (type|1),(x|1),(y|1),(enabled|1) + +# --------------------------- +# NotificationPanelView.java +# --------------------------- +36020 sysui_notificationpanel_touch (type|1),(x|1),(y|1) + +# --------------------------- +# SettingsPanelView.java +# --------------------------- +36030 sysui_quickpanel_touch (type|1),(x|1),(y|1) + +# --------------------------- +# PanelHolder.java +# --------------------------- +36040 sysui_panelholder_touch (type|1),(x|1),(y|1) + +# --------------------------- +# SearchPanelView.java +# --------------------------- +36050 sysui_searchpanel_touch (type|1),(x|1),(y|1) diff --git a/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java b/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java index 8d0fe75..627235f 100644 --- a/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java +++ b/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java @@ -31,7 +31,6 @@ import android.os.SystemProperties; import android.renderscript.Matrix4f; import android.service.wallpaper.WallpaperService; import android.util.Log; -import android.view.Display; import android.view.MotionEvent; import android.view.SurfaceHolder; import android.view.WindowManager; @@ -41,7 +40,6 @@ import javax.microedition.khronos.egl.EGLConfig; import javax.microedition.khronos.egl.EGLContext; import javax.microedition.khronos.egl.EGLDisplay; import javax.microedition.khronos.egl.EGLSurface; -import javax.microedition.khronos.opengles.GL; import java.io.IOException; import java.nio.ByteBuffer; import java.nio.ByteOrder; @@ -93,6 +91,7 @@ public class ImageWallpaper extends WallpaperService { return "1".equals(SystemProperties.get(PROPERTY_KERNEL_QEMU, "0")); } + @Override public Engine onCreateEngine() { mEngine = new DrawableEngine(); return mEngine; @@ -102,8 +101,6 @@ public class ImageWallpaper extends WallpaperService { static final int EGL_CONTEXT_CLIENT_VERSION = 0x3098; static final int EGL_OPENGL_ES2_BIT = 4; - private final Object mLock = new Object[0]; - // TODO: Not currently used, keeping around until we know we don't need it @SuppressWarnings({"UnusedDeclaration"}) private WallpaperObserver mReceiver; @@ -125,7 +122,6 @@ public class ImageWallpaper extends WallpaperService { private EGLConfig mEglConfig; private EGLContext mEglContext; private EGLSurface mEglSurface; - private GL mGL; private static final String sSimpleVS = "attribute vec4 position;\n" + @@ -150,17 +146,16 @@ public class ImageWallpaper extends WallpaperService { private static final int TRIANGLE_VERTICES_DATA_UV_OFFSET = 3; class WallpaperObserver extends BroadcastReceiver { + @Override public void onReceive(Context context, Intent intent) { if (DEBUG) { Log.d(TAG, "onReceive"); } - synchronized (mLock) { - mLastSurfaceWidth = mLastSurfaceHeight = -1; - mBackground = null; - mRedrawNeeded = true; - drawFrameLocked(); - } + mLastSurfaceWidth = mLastSurfaceHeight = -1; + mBackground = null; + mRedrawNeeded = true; + drawFrame(); } } @@ -234,14 +229,12 @@ public class ImageWallpaper extends WallpaperService { Log.d(TAG, "onVisibilityChanged: mVisible, visible=" + mVisible + ", " + visible); } - synchronized (mLock) { - if (mVisible != visible) { - if (DEBUG) { - Log.d(TAG, "Visibility changed to visible=" + visible); - } - mVisible = visible; - drawFrameLocked(); + if (mVisible != visible) { + if (DEBUG) { + Log.d(TAG, "Visibility changed to visible=" + visible); } + mVisible = visible; + drawFrame(); } } @@ -260,17 +253,15 @@ public class ImageWallpaper extends WallpaperService { + ", xPixels=" + xPixels + ", yPixels=" + yPixels); } - synchronized (mLock) { - if (mXOffset != xOffset || mYOffset != yOffset) { - if (DEBUG) { - Log.d(TAG, "Offsets changed to (" + xOffset + "," + yOffset + ")."); - } - mXOffset = xOffset; - mYOffset = yOffset; - mOffsetsChanged = true; + if (mXOffset != xOffset || mYOffset != yOffset) { + if (DEBUG) { + Log.d(TAG, "Offsets changed to (" + xOffset + "," + yOffset + ")."); } - drawFrameLocked(); + mXOffset = xOffset; + mYOffset = yOffset; + mOffsetsChanged = true; } + drawFrame(); } @Override @@ -281,9 +272,7 @@ public class ImageWallpaper extends WallpaperService { super.onSurfaceChanged(holder, format, width, height); - synchronized (mLock) { - drawFrameLocked(); - } + drawFrame(); } @Override @@ -305,12 +294,10 @@ public class ImageWallpaper extends WallpaperService { } super.onSurfaceRedrawNeeded(holder); - synchronized (mLock) { - drawFrameLocked(); - } + drawFrame(); } - void drawFrameLocked() { + void drawFrame() { SurfaceHolder sh = getSurfaceHolder(); final Rect frame = sh.getSurfaceFrame(); final int dw = frame.width(); @@ -499,14 +486,12 @@ public class ImageWallpaper extends WallpaperService { glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); - if (!mEgl.eglSwapBuffers(mEglDisplay, mEglSurface)) { - throw new RuntimeException("Cannot swap buffers"); - } + boolean status = mEgl.eglSwapBuffers(mEglDisplay, mEglSurface); checkEglError(); finishGL(); - return true; + return status; } private FloatBuffer createMesh(int left, int top, float right, float bottom) { @@ -578,7 +563,7 @@ public class ImageWallpaper extends WallpaperService { return program; } - + private int buildShader(String source, int type) { int shader = glCreateShader(type); @@ -599,27 +584,28 @@ public class ImageWallpaper extends WallpaperService { return shader; } - + private void checkEglError() { int error = mEgl.eglGetError(); if (error != EGL_SUCCESS) { Log.w(GL_LOG_TAG, "EGL error = " + GLUtils.getEGLErrorString(error)); } } - + private void checkGlError() { int error = glGetError(); if (error != GL_NO_ERROR) { Log.w(GL_LOG_TAG, "GL error = 0x" + Integer.toHexString(error), new Throwable()); } } - + private void finishGL() { mEgl.eglMakeCurrent(mEglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT); mEgl.eglDestroySurface(mEglDisplay, mEglSurface); mEgl.eglDestroyContext(mEglDisplay, mEglContext); + mEgl.eglTerminate(mEglDisplay); } - + private boolean initGL(SurfaceHolder surfaceHolder) { mEgl = (EGL10) EGLContext.getEGL(); @@ -641,10 +627,26 @@ public class ImageWallpaper extends WallpaperService { } mEglContext = createContext(mEgl, mEglDisplay, mEglConfig); + if (mEglContext == EGL_NO_CONTEXT) { + throw new RuntimeException("createContext failed " + + GLUtils.getEGLErrorString(mEgl.eglGetError())); + } + + int attribs[] = { + EGL_WIDTH, 1, + EGL_HEIGHT, 1, + EGL_NONE + }; + EGLSurface tmpSurface = mEgl.eglCreatePbufferSurface(mEglDisplay, mEglConfig, attribs); + mEgl.eglMakeCurrent(mEglDisplay, tmpSurface, tmpSurface, mEglContext); int[] maxSize = new int[1]; Rect frame = surfaceHolder.getSurfaceFrame(); glGetIntegerv(GL_MAX_TEXTURE_SIZE, maxSize, 0); + + mEgl.eglMakeCurrent(mEglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT); + mEgl.eglDestroySurface(mEglDisplay, tmpSurface); + if(frame.width() > maxSize[0] || frame.height() > maxSize[0]) { mEgl.eglDestroyContext(mEglDisplay, mEglContext); mEgl.eglTerminate(mEglDisplay); @@ -653,9 +655,8 @@ public class ImageWallpaper extends WallpaperService { maxSize[0] + "x" + maxSize[0]); return false; } - + mEglSurface = mEgl.eglCreateWindowSurface(mEglDisplay, mEglConfig, surfaceHolder, null); - if (mEglSurface == null || mEglSurface == EGL_NO_SURFACE) { int error = mEgl.eglGetError(); if (error == EGL_BAD_NATIVE_WINDOW || error == EGL_BAD_ALLOC) { @@ -671,8 +672,6 @@ public class ImageWallpaper extends WallpaperService { throw new RuntimeException("eglMakeCurrent failed " + GLUtils.getEGLErrorString(mEgl.eglGetError())); } - - mGL = mEglContext.getGL(); return true; } diff --git a/packages/SystemUI/src/com/android/systemui/LoadAverageService.java b/packages/SystemUI/src/com/android/systemui/LoadAverageService.java index 67dc3cd..2b45ad1 100644 --- a/packages/SystemUI/src/com/android/systemui/LoadAverageService.java +++ b/packages/SystemUI/src/com/android/systemui/LoadAverageService.java @@ -293,7 +293,7 @@ public class LoadAverageService extends Service { WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE| WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE, PixelFormat.TRANSLUCENT); - params.gravity = Gravity.RIGHT | Gravity.TOP; + params.gravity = Gravity.END | Gravity.TOP; params.setTitle("Load Average"); WindowManager wm = (WindowManager)getSystemService(WINDOW_SERVICE); wm.addView(mView, params); diff --git a/packages/SystemUI/src/com/android/systemui/SearchPanelView.java b/packages/SystemUI/src/com/android/systemui/SearchPanelView.java index daac9ed..1f29990 100644 --- a/packages/SystemUI/src/com/android/systemui/SearchPanelView.java +++ b/packages/SystemUI/src/com/android/systemui/SearchPanelView.java @@ -31,6 +31,7 @@ import android.os.UserHandle; import android.os.Vibrator; import android.provider.Settings; import android.util.AttributeSet; +import android.util.EventLog; import android.util.Slog; import android.view.IWindowManager; import android.view.MotionEvent; @@ -42,6 +43,8 @@ import android.widget.FrameLayout; import com.android.internal.widget.multiwaveview.GlowPadView; import com.android.internal.widget.multiwaveview.GlowPadView.OnTriggerListener; + +import com.android.systemui.EventLogTags; import com.android.systemui.R; import com.android.systemui.recent.StatusBarTouchProxy; import com.android.systemui.statusbar.BaseStatusBar; @@ -55,6 +58,7 @@ public class SearchPanelView extends FrameLayout implements private static final int SEARCH_PANEL_HOLD_DURATION = 0; static final String TAG = "SearchPanelView"; static final boolean DEBUG = TabletStatusBar.DEBUG || PhoneStatusBar.DEBUG || false; + public static final boolean DEBUG_GESTURES = true; private static final String ASSIST_ICON_METADATA_NAME = "com.android.systemui.action_assist_icon"; private final Context mContext; @@ -99,7 +103,7 @@ public class SearchPanelView extends FrameLayout implements } else { // Otherwise, keyguard isn't showing so launch it from here. Intent intent = ((SearchManager) mContext.getSystemService(Context.SEARCH_SERVICE)) - .getAssistIntent(mContext, UserHandle.USER_CURRENT); + .getAssistIntent(mContext, true, UserHandle.USER_CURRENT); if (intent == null) return; try { @@ -176,7 +180,7 @@ public class SearchPanelView extends FrameLayout implements private void maybeSwapSearchIcon() { Intent intent = ((SearchManager) mContext.getSystemService(Context.SEARCH_SERVICE)) - .getAssistIntent(mContext, UserHandle.USER_CURRENT); + .getAssistIntent(mContext, false, UserHandle.USER_CURRENT); if (intent != null) { ComponentName component = intent.getComponent(); if (component == null || !mGlowPadView.replaceTargetDrawablesIfPresent(component, @@ -304,6 +308,17 @@ public class SearchPanelView extends FrameLayout implements } } + @Override + public boolean onTouchEvent(MotionEvent event) { + if (DEBUG_GESTURES) { + if (event.getActionMasked() != MotionEvent.ACTION_MOVE) { + EventLog.writeEvent(EventLogTags.SYSUI_SEARCHPANEL_TOUCH, + event.getActionMasked(), (int) event.getX(), (int) event.getY()); + } + } + return super.onTouchEvent(event); + } + private LayoutTransition createLayoutTransitioner() { LayoutTransition transitioner = new LayoutTransition(); transitioner.setDuration(200); @@ -314,6 +329,6 @@ public class SearchPanelView extends FrameLayout implements public boolean isAssistantAvailable() { return ((SearchManager) mContext.getSystemService(Context.SEARCH_SERVICE)) - .getAssistIntent(mContext, UserHandle.USER_CURRENT) != null; + .getAssistIntent(mContext, false, UserHandle.USER_CURRENT) != null; } } diff --git a/packages/SystemUI/src/com/android/systemui/SwipeHelper.java b/packages/SystemUI/src/com/android/systemui/SwipeHelper.java index ceb8654..f824a8e 100644 --- a/packages/SystemUI/src/com/android/systemui/SwipeHelper.java +++ b/packages/SystemUI/src/com/android/systemui/SwipeHelper.java @@ -154,6 +154,19 @@ public class SwipeHelper implements Gefingerpoken { return Math.max(mMinAlpha, result); } + private void updateAlphaFromOffset(View animView, boolean dismissable) { + if (FADE_OUT_DURING_SWIPE && dismissable) { + float alpha = getAlphaForOffset(animView); + if (alpha != 0f && alpha != 1f) { + animView.setLayerType(View.LAYER_TYPE_HARDWARE, null); + } else { + animView.setLayerType(View.LAYER_TYPE_NONE, null); + } + animView.setAlpha(getAlphaForOffset(animView)); + } + invalidateGlobalRegion(animView); + } + // invalidate the view's own bounds all the way up the view hierarchy public static void invalidateGlobalRegion(View view) { invalidateGlobalRegion( @@ -290,10 +303,7 @@ public class SwipeHelper implements Gefingerpoken { }); anim.addUpdateListener(new AnimatorUpdateListener() { public void onAnimationUpdate(ValueAnimator animation) { - if (FADE_OUT_DURING_SWIPE && canAnimViewBeDismissed) { - animView.setAlpha(getAlphaForOffset(animView)); - } - invalidateGlobalRegion(animView); + updateAlphaFromOffset(animView, canAnimViewBeDismissed); } }); anim.start(); @@ -307,10 +317,12 @@ public class SwipeHelper implements Gefingerpoken { anim.setDuration(duration); anim.addUpdateListener(new AnimatorUpdateListener() { public void onAnimationUpdate(ValueAnimator animation) { - if (FADE_OUT_DURING_SWIPE && canAnimViewBeDismissed) { - animView.setAlpha(getAlphaForOffset(animView)); - } - invalidateGlobalRegion(animView); + updateAlphaFromOffset(animView, canAnimViewBeDismissed); + } + }); + anim.addListener(new AnimatorListenerAdapter() { + public void onAnimationEnd(Animator animator) { + updateAlphaFromOffset(animView, canAnimViewBeDismissed); } }); anim.start(); @@ -347,10 +359,8 @@ public class SwipeHelper implements Gefingerpoken { } } setTranslation(mCurrAnimView, delta); - if (FADE_OUT_DURING_SWIPE && mCanCurrViewBeDimissed) { - mCurrAnimView.setAlpha(getAlphaForOffset(mCurrAnimView)); - } - invalidateGlobalRegion(mCurrView); + + updateAlphaFromOffset(mCurrAnimView, mCanCurrViewBeDimissed); } break; case MotionEvent.ACTION_UP: diff --git a/packages/SystemUI/src/com/android/systemui/SystemUIService.java b/packages/SystemUI/src/com/android/systemui/SystemUIService.java index 427fe91..1f3e942 100644 --- a/packages/SystemUI/src/com/android/systemui/SystemUIService.java +++ b/packages/SystemUI/src/com/android/systemui/SystemUIService.java @@ -44,6 +44,7 @@ public class SystemUIService extends Service { 0, // system bar or status bar, filled in below. com.android.systemui.power.PowerUI.class, com.android.systemui.media.RingtonePlayer.class, + com.android.systemui.settings.SettingsUI.class, }; /** diff --git a/packages/SystemUI/src/com/android/systemui/media/NotificationPlayer.java b/packages/SystemUI/src/com/android/systemui/media/NotificationPlayer.java index 6a12eb1..8979fc2 100644 --- a/packages/SystemUI/src/com/android/systemui/media/NotificationPlayer.java +++ b/packages/SystemUI/src/com/android/systemui/media/NotificationPlayer.java @@ -21,15 +21,11 @@ import android.media.AudioManager; import android.media.MediaPlayer; import android.media.MediaPlayer.OnCompletionListener; import android.net.Uri; -import android.os.Handler; import android.os.Looper; -import android.os.Message; import android.os.PowerManager; import android.os.SystemClock; import android.util.Log; -import java.io.IOException; -import java.lang.IllegalStateException; import java.lang.Thread; import java.util.LinkedList; @@ -90,14 +86,29 @@ public class NotificationPlayer implements OnCompletionListener { player.prepare(); if ((mCmd.uri != null) && (mCmd.uri.getEncodedPath() != null) && (mCmd.uri.getEncodedPath().length() > 0)) { - if (mCmd.looping) { - audioManager.requestAudioFocus(null, mCmd.stream, - AudioManager.AUDIOFOCUS_GAIN); - } else { - audioManager.requestAudioFocus(null, mCmd.stream, - AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK); + if (!audioManager.isMusicActiveRemotely()) { + synchronized(mQueueAudioFocusLock) { + if (mAudioManagerWithAudioFocus == null) { + if (mDebug) Log.d(mTag, "requesting AudioFocus"); + if (mCmd.looping) { + audioManager.requestAudioFocus(null, mCmd.stream, + AudioManager.AUDIOFOCUS_GAIN); + } else { + audioManager.requestAudioFocus(null, mCmd.stream, + AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK); + } + mAudioManagerWithAudioFocus = audioManager; + } else { + if (mDebug) Log.d(mTag, "AudioFocus was previously requested"); + } + } } } + // FIXME Having to start a new thread so we can receive completion callbacks + // is wrong, as we kill this thread whenever a new sound is to be played. This + // can lead to AudioFocus being released too early, before the second sound is + // done playing. This class should be modified to use a single thread, on which + // command are issued, and on which it receives the completion callbacks. player.setOnCompletionListener(NotificationPlayer.this); player.start(); if (mPlayer != null) { @@ -108,7 +119,6 @@ public class NotificationPlayer implements OnCompletionListener { catch (Exception e) { Log.w(mTag, "error loading sound for " + mCmd.uri, e); } - mAudioManager = audioManager; this.notify(); } Looper.loop(); @@ -179,8 +189,12 @@ public class NotificationPlayer implements OnCompletionListener { mPlayer.stop(); mPlayer.release(); mPlayer = null; - mAudioManager.abandonAudioFocus(null); - mAudioManager = null; + synchronized(mQueueAudioFocusLock) { + if (mAudioManagerWithAudioFocus != null) { + mAudioManagerWithAudioFocus.abandonAudioFocus(null); + mAudioManagerWithAudioFocus = null; + } + } if((mLooper != null) && (mLooper.getThread().getState() != Thread.State.TERMINATED)) { mLooper.quit(); @@ -207,8 +221,14 @@ public class NotificationPlayer implements OnCompletionListener { } public void onCompletion(MediaPlayer mp) { - if (mAudioManager != null) { - mAudioManager.abandonAudioFocus(null); + synchronized(mQueueAudioFocusLock) { + if (mAudioManagerWithAudioFocus != null) { + if (mDebug) Log.d(mTag, "onCompletion() abandonning AudioFocus"); + mAudioManagerWithAudioFocus.abandonAudioFocus(null); + mAudioManagerWithAudioFocus = null; + } else { + if (mDebug) Log.d(mTag, "onCompletion() no need to abandon AudioFocus"); + } } // if there are no more sounds to play, end the Looper to listen for media completion synchronized (mCmdQueue) { @@ -229,7 +249,8 @@ public class NotificationPlayer implements OnCompletionListener { private final Object mCompletionHandlingLock = new Object(); private MediaPlayer mPlayer; private PowerManager.WakeLock mWakeLock; - private AudioManager mAudioManager; + private final Object mQueueAudioFocusLock = new Object(); + private AudioManager mAudioManagerWithAudioFocus; // synchronized on mQueueAudioFocusLock // The current state according to the caller. Reality lags behind // because of the asynchronous nature of this class. diff --git a/packages/SystemUI/src/com/android/systemui/recent/RecentsActivity.java b/packages/SystemUI/src/com/android/systemui/recent/RecentsActivity.java index 676326a..c325937 100644 --- a/packages/SystemUI/src/com/android/systemui/recent/RecentsActivity.java +++ b/packages/SystemUI/src/com/android/systemui/recent/RecentsActivity.java @@ -177,6 +177,7 @@ public class RecentsActivity extends Activity { setContentView(R.layout.status_bar_recent_panel); mRecentsPanel = (RecentsPanelView) findViewById(R.id.recents_root); mRecentsPanel.setOnTouchListener(new TouchOutsideListener(mRecentsPanel)); + mRecentsPanel.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN); final RecentTasksLoader recentTasksLoader = RecentTasksLoader.getInstance(this); recentTasksLoader.setRecentsPanel(mRecentsPanel, mRecentsPanel); diff --git a/packages/SystemUI/src/com/android/systemui/recent/RecentsHorizontalScrollView.java b/packages/SystemUI/src/com/android/systemui/recent/RecentsHorizontalScrollView.java index 3330301..217b7fd 100644 --- a/packages/SystemUI/src/com/android/systemui/recent/RecentsHorizontalScrollView.java +++ b/packages/SystemUI/src/com/android/systemui/recent/RecentsHorizontalScrollView.java @@ -256,7 +256,7 @@ public class RecentsHorizontalScrollView extends HorizontalScrollView mPerformanceHelper.drawCallback(canvas, left, right, top, bottom, mScrollX, mScrollY, 0, 0, - getLeftFadingEdgeStrength(), getRightFadingEdgeStrength()); + getLeftFadingEdgeStrength(), getRightFadingEdgeStrength(), mPaddingTop); } } diff --git a/packages/SystemUI/src/com/android/systemui/recent/RecentsPanelView.java b/packages/SystemUI/src/com/android/systemui/recent/RecentsPanelView.java index 9a1e38d..9c2bca9 100644 --- a/packages/SystemUI/src/com/android/systemui/recent/RecentsPanelView.java +++ b/packages/SystemUI/src/com/android/systemui/recent/RecentsPanelView.java @@ -45,6 +45,8 @@ import android.view.MenuItem; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; +import android.view.ViewTreeObserver; +import android.view.ViewTreeObserver.OnGlobalLayoutListener; import android.view.accessibility.AccessibilityEvent; import android.view.animation.AnimationUtils; import android.view.animation.DecelerateInterpolator; @@ -81,6 +83,7 @@ public class RecentsPanelView extends FrameLayout implements OnItemClickListener private boolean mAnimateIconOfFirstTask; private boolean mWaitingForWindowAnimation; private long mWindowAnimationStartTime; + private boolean mCallUiHiddenBeforeNextReload; private RecentTasksLoader mRecentTasksLoader; private ArrayList<TaskDescription> mRecentTaskDescriptions; @@ -162,7 +165,7 @@ public class RecentsPanelView extends FrameLayout implements OnItemClickListener if (convertView == null) { convertView = createView(parent); } - ViewHolder holder = (ViewHolder) convertView.getTag(); + final ViewHolder holder = (ViewHolder) convertView.getTag(); // index is reverse since most recent appears at the bottom... final int index = mRecentTaskDescriptions.size() - position - 1; @@ -178,37 +181,64 @@ public class RecentsPanelView extends FrameLayout implements OnItemClickListener } if (index == 0) { if (mAnimateIconOfFirstTask) { - if (mItemToAnimateInWhenWindowAnimationIsFinished != null) { - holder.iconView.setAlpha(1f); - holder.iconView.setTranslationX(0f); - holder.iconView.setTranslationY(0f); - holder.labelView.setAlpha(1f); - holder.labelView.setTranslationX(0f); - holder.labelView.setTranslationY(0f); - if (holder.calloutLine != null) { - holder.calloutLine.setAlpha(1f); - holder.calloutLine.setTranslationX(0f); - holder.calloutLine.setTranslationY(0f); + ViewHolder oldHolder = mItemToAnimateInWhenWindowAnimationIsFinished; + if (oldHolder != null) { + oldHolder.iconView.setAlpha(1f); + oldHolder.iconView.setTranslationX(0f); + oldHolder.iconView.setTranslationY(0f); + oldHolder.labelView.setAlpha(1f); + oldHolder.labelView.setTranslationX(0f); + oldHolder.labelView.setTranslationY(0f); + if (oldHolder.calloutLine != null) { + oldHolder.calloutLine.setAlpha(1f); + oldHolder.calloutLine.setTranslationX(0f); + oldHolder.calloutLine.setTranslationY(0f); } } - mItemToAnimateInWhenWindowAnimationIsFinished = holder; - final int translation = -getResources().getDimensionPixelSize( - R.dimen.status_bar_recents_app_icon_translate_distance); - final Configuration config = getResources().getConfiguration(); - if (config.orientation == Configuration.ORIENTATION_PORTRAIT) { - holder.iconView.setAlpha(0f); - holder.iconView.setTranslationX(translation); - holder.labelView.setAlpha(0f); - holder.labelView.setTranslationX(translation); - holder.calloutLine.setAlpha(0f); - holder.calloutLine.setTranslationX(translation); - } else { - holder.iconView.setAlpha(0f); - holder.iconView.setTranslationY(translation); - } - if (!mWaitingForWindowAnimation) { - animateInIconOfFirstTask(); - } + mItemToAnimateInWhenWindowAnimationIsFinished = null; + + final ViewTreeObserver observer = getViewTreeObserver(); + final OnGlobalLayoutListener animateFirstIcon = new OnGlobalLayoutListener() { + public void onGlobalLayout() { + ViewHolder oldHolder = mItemToAnimateInWhenWindowAnimationIsFinished; + if (oldHolder != null) { + oldHolder.iconView.setAlpha(1f); + oldHolder.iconView.setTranslationX(0f); + oldHolder.iconView.setTranslationY(0f); + oldHolder.labelView.setAlpha(1f); + oldHolder.labelView.setTranslationX(0f); + oldHolder.labelView.setTranslationY(0f); + if (oldHolder.calloutLine != null) { + oldHolder.calloutLine.setAlpha(1f); + oldHolder.calloutLine.setTranslationX(0f); + oldHolder.calloutLine.setTranslationY(0f); + } + } + mItemToAnimateInWhenWindowAnimationIsFinished = holder; + int translation = -getResources().getDimensionPixelSize( + R.dimen.status_bar_recents_app_icon_translate_distance); + final Configuration config = getResources().getConfiguration(); + if (config.orientation == Configuration.ORIENTATION_PORTRAIT) { + if (getLayoutDirection() == View.LAYOUT_DIRECTION_RTL) { + translation = -translation; + } + holder.iconView.setAlpha(0f); + holder.iconView.setTranslationX(translation); + holder.labelView.setAlpha(0f); + holder.labelView.setTranslationX(translation); + holder.calloutLine.setAlpha(0f); + holder.calloutLine.setTranslationX(translation); + } else { + holder.iconView.setAlpha(0f); + holder.iconView.setTranslationY(translation); + } + if (!mWaitingForWindowAnimation) { + animateInIconOfFirstTask(); + } + getViewTreeObserver().removeOnGlobalLayoutListener(this); + } + }; + observer.addOnGlobalLayoutListener(animateFirstIcon); } } @@ -298,8 +328,15 @@ public class RecentsPanelView extends FrameLayout implements OnItemClickListener public void show(boolean show, ArrayList<TaskDescription> recentTaskDescriptions, boolean firstScreenful, boolean animateIconOfFirstTask) { - mAnimateIconOfFirstTask = animateIconOfFirstTask; - mWaitingForWindowAnimation = animateIconOfFirstTask; + if (show && mCallUiHiddenBeforeNextReload) { + onUiHidden(); + recentTaskDescriptions = null; + mAnimateIconOfFirstTask = false; + mWaitingForWindowAnimation = false; + } else { + mAnimateIconOfFirstTask = animateIconOfFirstTask; + mWaitingForWindowAnimation = animateIconOfFirstTask; + } if (show) { mWaitingToShow = true; refreshRecentTasksList(recentTaskDescriptions, firstScreenful); @@ -345,6 +382,7 @@ public class RecentsPanelView extends FrameLayout implements OnItemClickListener } else { mWaitingToShow = false; // call onAnimationEnd() and clearRecentTasksList() in onUiHidden() + mCallUiHiddenBeforeNextReload = true; if (mPopup != null) { mPopup.dismiss(); } @@ -352,6 +390,7 @@ public class RecentsPanelView extends FrameLayout implements OnItemClickListener } public void onUiHidden() { + mCallUiHiddenBeforeNextReload = false; if (!mShowing && mRecentTaskDescriptions != null) { onAnimationEnd(null); clearRecentTasksList(); @@ -682,8 +721,12 @@ public class RecentsPanelView extends FrameLayout implements OnItemClickListener | Intent.FLAG_ACTIVITY_TASK_ON_HOME | Intent.FLAG_ACTIVITY_NEW_TASK); if (DEBUG) Log.v(TAG, "Starting activity " + intent); - context.startActivityAsUser(intent, opts, - new UserHandle(UserHandle.USER_CURRENT)); + try { + context.startActivityAsUser(intent, opts, + new UserHandle(UserHandle.USER_CURRENT)); + } catch (SecurityException e) { + Log.e(TAG, "Recents does not have the permission to launch " + intent, e); + } } if (usingDrawingCache) { holder.thumbnailViewImage.setDrawingCacheEnabled(false); diff --git a/packages/SystemUI/src/com/android/systemui/recent/RecentsScrollViewPerformanceHelper.java b/packages/SystemUI/src/com/android/systemui/recent/RecentsScrollViewPerformanceHelper.java index 71cc1e4..f17766b 100644 --- a/packages/SystemUI/src/com/android/systemui/recent/RecentsScrollViewPerformanceHelper.java +++ b/packages/SystemUI/src/com/android/systemui/recent/RecentsScrollViewPerformanceHelper.java @@ -38,6 +38,10 @@ public class RecentsScrollViewPerformanceHelper { private int mFadingEdgeLength; private boolean mIsVertical; private boolean mSoftwareRendered = false; + private Paint mBlackPaint; + private Paint mFadePaint; + private Matrix mFadeMatrix; + private LinearGradient mFade; public static RecentsScrollViewPerformanceHelper create(Context context, AttributeSet attrs, View scrollView, boolean isVertical) { @@ -81,18 +85,19 @@ public class RecentsScrollViewPerformanceHelper { public void drawCallback(Canvas canvas, int left, int right, int top, int bottom, int scrollX, int scrollY, float topFadingEdgeStrength, float bottomFadingEdgeStrength, - float leftFadingEdgeStrength, float rightFadingEdgeStrength) { + float leftFadingEdgeStrength, float rightFadingEdgeStrength, int mPaddingTop) { if ((mSoftwareRendered && OPTIMIZE_SW_RENDERED_RECENTS) || USE_DARK_FADE_IN_HW_ACCELERATED_MODE) { - Paint p = new Paint(); - Matrix matrix = new Matrix(); - // use use a height of 1, and then wack the matrix each time we - // actually use it. - Shader fade = new LinearGradient(0, 0, 0, 1, 0xCC000000, 0, Shader.TileMode.CLAMP); - // PULL OUT THIS CONSTANT - - p.setShader(fade); + if (mFadePaint == null) { + mFadePaint = new Paint(); + mFadeMatrix = new Matrix(); + // use use a height of 1, and then wack the matrix each time we + // actually use it. + mFade = new LinearGradient(0, 0, 0, 1, 0xCC000000, 0, Shader.TileMode.CLAMP); + // PULL OUT THIS CONSTANT + mFadePaint.setShader(mFade); + } // draw the fade effect boolean drawTop = false; @@ -134,34 +139,41 @@ public class RecentsScrollViewPerformanceHelper { } if (drawTop) { - matrix.setScale(1, fadeHeight * topFadeStrength); - matrix.postTranslate(left, top); - fade.setLocalMatrix(matrix); - canvas.drawRect(left, top, right, top + length, p); + mFadeMatrix.setScale(1, fadeHeight * topFadeStrength); + mFadeMatrix.postTranslate(left, top); + mFade.setLocalMatrix(mFadeMatrix); + canvas.drawRect(left, top, right, top + length, mFadePaint); + + if (mBlackPaint == null) { + // Draw under the status bar at the top + mBlackPaint = new Paint(); + mBlackPaint.setColor(0xFF000000); + } + canvas.drawRect(left, top - mPaddingTop, right, top, mBlackPaint); } if (drawBottom) { - matrix.setScale(1, fadeHeight * bottomFadeStrength); - matrix.postRotate(180); - matrix.postTranslate(left, bottom); - fade.setLocalMatrix(matrix); - canvas.drawRect(left, bottom - length, right, bottom, p); + mFadeMatrix.setScale(1, fadeHeight * bottomFadeStrength); + mFadeMatrix.postRotate(180); + mFadeMatrix.postTranslate(left, bottom); + mFade.setLocalMatrix(mFadeMatrix); + canvas.drawRect(left, bottom - length, right, bottom, mFadePaint); } if (drawLeft) { - matrix.setScale(1, fadeHeight * leftFadeStrength); - matrix.postRotate(-90); - matrix.postTranslate(left, top); - fade.setLocalMatrix(matrix); - canvas.drawRect(left, top, left + length, bottom, p); + mFadeMatrix.setScale(1, fadeHeight * leftFadeStrength); + mFadeMatrix.postRotate(-90); + mFadeMatrix.postTranslate(left, top); + mFade.setLocalMatrix(mFadeMatrix); + canvas.drawRect(left, top, left + length, bottom, mFadePaint); } if (drawRight) { - matrix.setScale(1, fadeHeight * rightFadeStrength); - matrix.postRotate(90); - matrix.postTranslate(right, top); - fade.setLocalMatrix(matrix); - canvas.drawRect(right - length, top, right, bottom, p); + mFadeMatrix.setScale(1, fadeHeight * rightFadeStrength); + mFadeMatrix.postRotate(90); + mFadeMatrix.postTranslate(right, top); + mFade.setLocalMatrix(mFadeMatrix); + canvas.drawRect(right - length, top, right, bottom, mFadePaint); } } } diff --git a/packages/SystemUI/src/com/android/systemui/recent/RecentsVerticalScrollView.java b/packages/SystemUI/src/com/android/systemui/recent/RecentsVerticalScrollView.java index b3adbaf..403c643 100644 --- a/packages/SystemUI/src/com/android/systemui/recent/RecentsVerticalScrollView.java +++ b/packages/SystemUI/src/com/android/systemui/recent/RecentsVerticalScrollView.java @@ -21,6 +21,7 @@ import android.content.Context; import android.content.res.Configuration; import android.database.DataSetObserver; import android.graphics.Canvas; +import android.graphics.Paint; import android.util.AttributeSet; import android.util.DisplayMetrics; import android.util.FloatMath; @@ -68,7 +69,7 @@ public class RecentsVerticalScrollView extends ScrollView } private int scrollPositionOfMostRecent() { - return mLinearLayout.getHeight() - getHeight(); + return mLinearLayout.getHeight() - getHeight() + mPaddingTop; } private void addToRecycledViews(View v) { @@ -265,7 +266,7 @@ public class RecentsVerticalScrollView extends ScrollView mPerformanceHelper.drawCallback(canvas, left, right, top, bottom, mScrollX, mScrollY, getTopFadingEdgeStrength(), getBottomFadingEdgeStrength(), - 0, 0); + 0, 0, mPaddingTop); } } diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java b/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java index f25ac0d..b498368 100644 --- a/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java +++ b/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java @@ -45,10 +45,12 @@ import android.os.Environment; import android.os.Process; import android.provider.MediaStore; import android.util.DisplayMetrics; +import android.util.Log; import android.view.Display; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.Surface; +import android.view.SurfaceControl; import android.view.View; import android.view.ViewGroup; import android.view.WindowManager; @@ -72,6 +74,13 @@ class SaveImageInBackgroundData { Runnable finisher; int iconSize; int result; + + void clearImage() { + context = null; + image = null; + imageUri = null; + iconSize = 0; + } } /** @@ -79,17 +88,22 @@ class SaveImageInBackgroundData { */ class SaveImageInBackgroundTask extends AsyncTask<SaveImageInBackgroundData, Void, SaveImageInBackgroundData> { + private static final String TAG = "SaveImageInBackgroundTask"; + private static final String SCREENSHOTS_DIR_NAME = "Screenshots"; private static final String SCREENSHOT_FILE_NAME_TEMPLATE = "Screenshot_%s.png"; - private static final String SCREENSHOT_FILE_PATH_TEMPLATE = "%s/%s/%s"; - - private int mNotificationId; - private NotificationManager mNotificationManager; - private Notification.Builder mNotificationBuilder; - private String mImageFileName; - private String mImageFilePath; - private long mImageTime; - private BigPictureStyle mNotificationStyle; + private static final String SCREENSHOT_SHARE_SUBJECT_TEMPLATE = "Screenshot (%s)"; + + private final int mNotificationId; + private final NotificationManager mNotificationManager; + private final Notification.Builder mNotificationBuilder; + private final File mScreenshotDir; + private final String mImageFileName; + private final String mImageFilePath; + private final long mImageTime; + private final BigPictureStyle mNotificationStyle; + private final int mImageWidth; + private final int mImageHeight; // WORKAROUND: We want the same notification across screenshots that we update so that we don't // spam a user's notification drawer. However, we only show the ticker for the saving state @@ -105,18 +119,18 @@ class SaveImageInBackgroundTask extends AsyncTask<SaveImageInBackgroundData, Voi // Prepare all the output metadata mImageTime = System.currentTimeMillis(); String imageDate = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss").format(new Date(mImageTime)); - String imageDir = Environment.getExternalStoragePublicDirectory( - Environment.DIRECTORY_PICTURES).getAbsolutePath(); mImageFileName = String.format(SCREENSHOT_FILE_NAME_TEMPLATE, imageDate); - mImageFilePath = String.format(SCREENSHOT_FILE_PATH_TEMPLATE, imageDir, - SCREENSHOTS_DIR_NAME, mImageFileName); + + mScreenshotDir = new File(Environment.getExternalStoragePublicDirectory( + Environment.DIRECTORY_PICTURES), SCREENSHOTS_DIR_NAME); + mImageFilePath = new File(mScreenshotDir, mImageFileName).getAbsolutePath(); // Create the large notification icon - int imageWidth = data.image.getWidth(); - int imageHeight = data.image.getHeight(); + mImageWidth = data.image.getWidth(); + mImageHeight = data.image.getHeight(); int iconSize = data.iconSize; - final int shortSide = imageWidth < imageHeight ? imageWidth : imageHeight; + final int shortSide = mImageWidth < mImageHeight ? mImageWidth : mImageHeight; Bitmap preview = Bitmap.createBitmap(shortSide, shortSide, data.image.getConfig()); Canvas c = new Canvas(preview); Paint paint = new Paint(); @@ -124,10 +138,11 @@ class SaveImageInBackgroundTask extends AsyncTask<SaveImageInBackgroundData, Voi desat.setSaturation(0.25f); paint.setColorFilter(new ColorMatrixColorFilter(desat)); Matrix matrix = new Matrix(); - matrix.postTranslate((shortSide - imageWidth) / 2, - (shortSide - imageHeight) / 2); + matrix.postTranslate((shortSide - mImageWidth) / 2, + (shortSide - mImageHeight) / 2); c.drawBitmap(data.image, matrix, paint); c.drawColor(0x40FFFFFF); + c.setBitmap(null); Bitmap croppedIcon = Bitmap.createScaledBitmap(preview, iconSize, iconSize, true); @@ -157,11 +172,18 @@ class SaveImageInBackgroundTask extends AsyncTask<SaveImageInBackgroundData, Voi mNotificationBuilder.setLargeIcon(croppedIcon); // But we still don't set it for the expanded view, allowing the smallIcon to show here. mNotificationStyle.bigLargeIcon(null); + + Log.d(TAG, "SaveImageInBackgroundTask constructor"); } @Override protected SaveImageInBackgroundData doInBackground(SaveImageInBackgroundData... params) { if (params.length != 1) return null; + if (isCancelled()) { + params[0].clearImage(); + Log.d(TAG, "doInBackground cancelled"); + return null; + } // By default, AsyncTask sets the worker thread to have background thread priority, so bump // it back up so that we save a little quicker. @@ -172,6 +194,9 @@ class SaveImageInBackgroundTask extends AsyncTask<SaveImageInBackgroundData, Voi Resources r = context.getResources(); try { + // Create screenshot directory if it doesn't exist + mScreenshotDir.mkdirs(); + // Save the screenshot to the MediaStore ContentValues values = new ContentValues(); ContentResolver resolver = context.getContentResolver(); @@ -182,11 +207,17 @@ class SaveImageInBackgroundTask extends AsyncTask<SaveImageInBackgroundData, Voi values.put(MediaStore.Images.ImageColumns.DATE_ADDED, mImageTime); values.put(MediaStore.Images.ImageColumns.DATE_MODIFIED, mImageTime); values.put(MediaStore.Images.ImageColumns.MIME_TYPE, "image/png"); + values.put(MediaStore.Images.ImageColumns.WIDTH, mImageWidth); + values.put(MediaStore.Images.ImageColumns.HEIGHT, mImageHeight); Uri uri = resolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values); + String subjectDate = new SimpleDateFormat("hh:mma, MMM dd, yyyy") + .format(new Date(mImageTime)); + String subject = String.format(SCREENSHOT_SHARE_SUBJECT_TEMPLATE, subjectDate); Intent sharingIntent = new Intent(Intent.ACTION_SEND); sharingIntent.setType("image/png"); sharingIntent.putExtra(Intent.EXTRA_STREAM, uri); + sharingIntent.putExtra(Intent.EXTRA_SUBJECT, subject); Intent chooserIntent = Intent.createChooser(sharingIntent, null); chooserIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK @@ -208,18 +239,34 @@ class SaveImageInBackgroundTask extends AsyncTask<SaveImageInBackgroundData, Voi resolver.update(uri, values, null, null); params[0].imageUri = uri; + params[0].image = null; params[0].result = 0; } catch (Exception e) { // IOException/UnsupportedOperationException may be thrown if external storage is not // mounted + params[0].clearImage(); params[0].result = 1; + Log.d(TAG, "doInBackground failed"); + } + + // Recycle the bitmap data + if (image != null) { + image.recycle(); } + Log.d(TAG, "doInBackground complete"); return params[0]; } @Override protected void onPostExecute(SaveImageInBackgroundData params) { + if (isCancelled()) { + params.finisher.run(); + params.clearImage(); + Log.d(TAG, "onPostExecute cancelled"); + return; + } + if (params.result > 0) { // Show a message that we've failed to save the image to disk GlobalScreenshot.notifyScreenshotError(params.context, mNotificationManager); @@ -244,6 +291,7 @@ class SaveImageInBackgroundTask extends AsyncTask<SaveImageInBackgroundData, Voi mNotificationManager.notify(mNotificationId, n); } params.finisher.run(); + Log.d(TAG, "onPostExecute complete"); } } @@ -254,6 +302,8 @@ class SaveImageInBackgroundTask extends AsyncTask<SaveImageInBackgroundData, Voi * type of gallery? */ class GlobalScreenshot { + private static final String TAG = "GlobalScreenshot"; + private static final int SCREENSHOT_NOTIFICATION_ID = 789; private static final int SCREENSHOT_FLASH_TO_PEAK_DURATION = 130; private static final int SCREENSHOT_DROP_IN_DURATION = 430; @@ -288,6 +338,8 @@ class GlobalScreenshot { private float mBgPadding; private float mBgPaddingScale; + private AsyncTask<SaveImageInBackgroundData, Void, SaveImageInBackgroundData> mSaveInBgTask; + private MediaActionSound mCameraSound; @@ -343,18 +395,25 @@ class GlobalScreenshot { // Setup the Camera shutter sound mCameraSound = new MediaActionSound(); mCameraSound.load(MediaActionSound.SHUTTER_CLICK); + + Log.d(TAG, "GlobalScreenshot constructor"); } /** * Creates a new worker thread and saves the screenshot to the media store. */ private void saveScreenshotInWorkerThread(Runnable finisher) { + Log.d(TAG, "saveScreenshotInWorkerThread"); SaveImageInBackgroundData data = new SaveImageInBackgroundData(); data.context = mContext; data.image = mScreenBitmap; data.iconSize = mNotificationIconSize; data.finisher = finisher; - new SaveImageInBackgroundTask(mContext, data, mNotificationManager, + if (mSaveInBgTask != null) { + mSaveInBgTask.cancel(false); + Log.d(TAG, "saveScreenshotInWorkerThread cancel"); + } + mSaveInBgTask = new SaveImageInBackgroundTask(mContext, data, mNotificationManager, SCREENSHOT_NOTIFICATION_ID).execute(data); } @@ -377,6 +436,8 @@ class GlobalScreenshot { * Takes a screenshot of the current display and shows an animation. */ void takeScreenshot(Runnable finisher, boolean statusBarVisible, boolean navBarVisible) { + Log.d(TAG, "takeScreenshot"); + // We need to orient the screenshot correctly (and the Surface api seems to take screenshots // only in the natural orientation of the device :!) mDisplay.getRealMetrics(mDisplayMetrics); @@ -390,13 +451,16 @@ class GlobalScreenshot { mDisplayMatrix.mapPoints(dims); dims[0] = Math.abs(dims[0]); dims[1] = Math.abs(dims[1]); + + Log.d(TAG, "takeScreenshot requiresRotation"); } // Take the screenshot - mScreenBitmap = Surface.screenshot((int) dims[0], (int) dims[1]); + mScreenBitmap = SurfaceControl.screenshot((int) dims[0], (int) dims[1]); if (mScreenBitmap == null) { notifyScreenshotError(mContext, mNotificationManager); finisher.run(); + Log.d(TAG, "takeScreenshot null bitmap"); return; } @@ -410,7 +474,10 @@ class GlobalScreenshot { c.translate(-dims[0] / 2, -dims[1] / 2); c.drawBitmap(mScreenBitmap, 0, 0, null); c.setBitmap(null); + // Recycle the previous bitmap + mScreenBitmap.recycle(); mScreenBitmap = ss; + Log.d(TAG, "takeScreenshot rotation bitmap created"); } // Optimizations @@ -420,6 +487,7 @@ class GlobalScreenshot { // Start the post-screenshot animation startAnimation(finisher, mDisplayMetrics.widthPixels, mDisplayMetrics.heightPixels, statusBarVisible, navBarVisible); + Log.d(TAG, "takeScreenshot startedAnimation"); } @@ -428,6 +496,7 @@ class GlobalScreenshot { */ private void startAnimation(final Runnable finisher, int w, int h, boolean statusBarVisible, boolean navBarVisible) { + Log.d(TAG, "startAnimation"); // Add the view for the animation mScreenshotView.setImageBitmap(mScreenBitmap); mScreenshotLayout.requestFocus(); @@ -435,9 +504,12 @@ class GlobalScreenshot { // Setup the animation with the screenshot just taken if (mScreenshotAnimation != null) { mScreenshotAnimation.end(); + mScreenshotAnimation.removeAllListeners(); + Log.d(TAG, "startAnimation reset previous animations"); } mWindowManager.addView(mScreenshotLayout, mWindowLayoutParams); + Log.d(TAG, "startAnimation layout added to WM"); ValueAnimator screenshotDropInAnim = createScreenshotDropInAnimation(); ValueAnimator screenshotFadeOutAnim = createScreenshotDropOutAnimation(w, h, statusBarVisible, navBarVisible); @@ -449,6 +521,11 @@ class GlobalScreenshot { // Save the screenshot once we have a bit of time now saveScreenshotInWorkerThread(finisher); mWindowManager.removeView(mScreenshotLayout); + + // Clear any references to the bitmap + mScreenBitmap = null; + mScreenshotView.setImageBitmap(null); + Log.d(TAG, "startAnimation onAnimationEnd"); } }); mScreenshotLayout.post(new Runnable() { @@ -460,6 +537,7 @@ class GlobalScreenshot { mScreenshotView.setLayerType(View.LAYER_TYPE_HARDWARE, null); mScreenshotView.buildLayer(); mScreenshotAnimation.start(); + Log.d(TAG, "startAnimation post runnable"); } }); } @@ -597,17 +675,21 @@ class GlobalScreenshot { } static void notifyScreenshotError(Context context, NotificationManager nManager) { + Log.d(TAG, "notifyScreenshotError"); Resources r = context.getResources(); // Clear all existing notification, compose the new notification and show it - Notification n = new Notification.Builder(context) + Notification.Builder b = new Notification.Builder(context) .setTicker(r.getString(R.string.screenshot_failed_title)) .setContentTitle(r.getString(R.string.screenshot_failed_title)) .setContentText(r.getString(R.string.screenshot_failed_text)) .setSmallIcon(R.drawable.stat_notify_image_error) .setWhen(System.currentTimeMillis()) - .setAutoCancel(true) - .getNotification(); + .setAutoCancel(true); + Notification n = + new Notification.BigTextStyle(b) + .bigText(r.getString(R.string.screenshot_failed_text)) + .build(); nManager.notify(SCREENSHOT_NOTIFICATION_ID, n); } } diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/TakeScreenshotService.java b/packages/SystemUI/src/com/android/systemui/screenshot/TakeScreenshotService.java index 456b5fa..1954af8 100644 --- a/packages/SystemUI/src/com/android/systemui/screenshot/TakeScreenshotService.java +++ b/packages/SystemUI/src/com/android/systemui/screenshot/TakeScreenshotService.java @@ -23,6 +23,7 @@ import android.os.IBinder; import android.os.Message; import android.os.Messenger; import android.os.RemoteException; +import android.util.Log; public class TakeScreenshotService extends Service { private static final String TAG = "TakeScreenshotService"; @@ -37,12 +38,15 @@ public class TakeScreenshotService extends Service { final Messenger callback = msg.replyTo; if (mScreenshot == null) { mScreenshot = new GlobalScreenshot(TakeScreenshotService.this); + Log.d(TAG, "Global screenshot initialized"); } + Log.d(TAG, "Global screenshot captured"); mScreenshot.takeScreenshot(new Runnable() { @Override public void run() { Message reply = Message.obtain(null, 1); try { callback.send(reply); + Log.d(TAG, "Global screenshot completed"); } catch (RemoteException e) { } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BrightnessController.java b/packages/SystemUI/src/com/android/systemui/settings/BrightnessController.java index e18b28a..fdeead1 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BrightnessController.java +++ b/packages/SystemUI/src/com/android/systemui/settings/BrightnessController.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010 The Android Open Source Project + * Copyright (C) 2013 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,15 +14,20 @@ * limitations under the License. */ -package com.android.systemui.statusbar.policy; +package com.android.systemui.settings; import android.content.ContentResolver; import android.content.Context; +import android.content.Intent; +import android.database.ContentObserver; +import android.net.Uri; import android.os.AsyncTask; +import android.os.Handler; import android.os.IPowerManager; import android.os.PowerManager; import android.os.RemoteException; import android.os.ServiceManager; +import android.os.UserHandle; import android.provider.Settings; import android.provider.Settings.SettingNotFoundException; import android.util.Slog; @@ -30,8 +35,6 @@ import android.view.IWindowManager; import android.widget.CompoundButton; import android.widget.ImageView; -import com.android.systemui.statusbar.policy.BatteryController.BatteryStateChangeCallback; - import java.util.ArrayList; public class BrightnessController implements ToggleSlider.Listener { @@ -46,6 +49,8 @@ public class BrightnessController implements ToggleSlider.Listener { private final boolean mAutomaticAvailable; private final IPowerManager mPower; private final CurrentUserTracker mUserTracker; + private final Handler mHandler; + private final BrightnessObserver mBrightnessObserver; private ArrayList<BrightnessStateChangeCallback> mChangeCallbacks = new ArrayList<BrightnessStateChangeCallback>(); @@ -54,11 +59,71 @@ public class BrightnessController implements ToggleSlider.Listener { public void onBrightnessLevelChanged(); } + /** ContentObserver to watch brightness **/ + private class BrightnessObserver extends ContentObserver { + + private final Uri BRIGHTNESS_MODE_URI = + Settings.System.getUriFor(Settings.System.SCREEN_BRIGHTNESS_MODE); + private final Uri BRIGHTNESS_URI = + Settings.System.getUriFor(Settings.System.SCREEN_BRIGHTNESS); + + public BrightnessObserver(Handler handler) { + super(handler); + } + + @Override + public void onChange(boolean selfChange) { + onChange(selfChange, null); + } + + @Override + public void onChange(boolean selfChange, Uri uri) { + if (selfChange) return; + if (BRIGHTNESS_MODE_URI.equals(uri)) { + updateMode(); + } else if (BRIGHTNESS_URI.equals(uri)) { + updateSlider(); + } else { + updateMode(); + updateSlider(); + } + for (BrightnessStateChangeCallback cb : mChangeCallbacks) { + cb.onBrightnessLevelChanged(); + } + } + + public void startObserving() { + final ContentResolver cr = mContext.getContentResolver(); + cr.unregisterContentObserver(this); + cr.registerContentObserver( + BRIGHTNESS_MODE_URI, + false, this, UserHandle.USER_ALL); + cr.registerContentObserver( + BRIGHTNESS_URI, + false, this, UserHandle.USER_ALL); + } + + public void stopObserving() { + final ContentResolver cr = mContext.getContentResolver(); + cr.unregisterContentObserver(this); + } + + } + public BrightnessController(Context context, ImageView icon, ToggleSlider control) { mContext = context; mIcon = icon; mControl = control; - mUserTracker = new CurrentUserTracker(mContext); + mHandler = new Handler(); + mUserTracker = new CurrentUserTracker(mContext) { + @Override + public void onUserSwitched(int newUserId) { + updateMode(); + updateSlider(); + } + }; + mBrightnessObserver = new BrightnessObserver(mHandler); + mBrightnessObserver.startObserving(); PowerManager pm = (PowerManager)context.getSystemService(Context.POWER_SERVICE); mMinimumBacklight = pm.getMinimumScreenBrightnessSetting(); @@ -68,6 +133,11 @@ public class BrightnessController implements ToggleSlider.Listener { com.android.internal.R.bool.config_automatic_brightness_available); mPower = IPowerManager.Stub.asInterface(ServiceManager.getService("power")); + // Update the slider and mode before attaching the listener so we don't receive the + // onChanged notifications for the initial values. + updateMode(); + updateSlider(); + control.setOnChangedListener(this); } @@ -75,36 +145,20 @@ public class BrightnessController implements ToggleSlider.Listener { mChangeCallbacks.add(cb); } + public boolean removeStateChangedCallback(BrightnessStateChangeCallback cb) { + return mChangeCallbacks.remove(cb); + } + @Override public void onInit(ToggleSlider control) { - if (mAutomaticAvailable) { - int automatic; - try { - automatic = Settings.System.getIntForUser(mContext.getContentResolver(), - Settings.System.SCREEN_BRIGHTNESS_MODE, - mUserTracker.getCurrentUserId()); - } catch (SettingNotFoundException snfe) { - automatic = 0; - } - control.setChecked(automatic != 0); - updateIcon(automatic != 0); - } else { - control.setChecked(false); - updateIcon(false /*automatic*/); - //control.hideToggle(); - } - - int value; - try { - value = Settings.System.getIntForUser(mContext.getContentResolver(), - Settings.System.SCREEN_BRIGHTNESS, - mUserTracker.getCurrentUserId()); - } catch (SettingNotFoundException ex) { - value = mMaximumBacklight; - } + // Do nothing + } - control.setMax(mMaximumBacklight - mMinimumBacklight); - control.setValue(value - mMinimumBacklight); + /** Unregister all call backs, both to and from the controller */ + public void unregisterCallbacks() { + mBrightnessObserver.stopObserving(); + mChangeCallbacks.clear(); + mUserTracker.stopTracking(); } public void onChanged(ToggleSlider view, boolean tracking, boolean automatic, int value) { @@ -119,7 +173,7 @@ public class BrightnessController implements ToggleSlider.Listener { public void run() { Settings.System.putIntForUser(mContext.getContentResolver(), Settings.System.SCREEN_BRIGHTNESS, val, - mUserTracker.getCurrentUserId()); + UserHandle.USER_CURRENT); } }); } @@ -135,12 +189,12 @@ public class BrightnessController implements ToggleSlider.Listener { Settings.System.SCREEN_BRIGHTNESS_MODE, mode, mUserTracker.getCurrentUserId()); } - + private void setBrightness(int brightness) { try { mPower.setTemporaryScreenBrightnessSettingOverride(brightness); } catch (RemoteException ex) { - } + } } private void updateIcon(boolean automatic) { @@ -150,4 +204,38 @@ public class BrightnessController implements ToggleSlider.Listener { com.android.systemui.R.drawable.ic_qs_brightness_auto_off); } } + + /** Fetch the brightness mode from the system settings and update the icon */ + private void updateMode() { + if (mAutomaticAvailable) { + int automatic; + try { + automatic = Settings.System.getIntForUser(mContext.getContentResolver(), + Settings.System.SCREEN_BRIGHTNESS_MODE, + UserHandle.USER_CURRENT); + } catch (SettingNotFoundException snfe) { + automatic = 0; + } + mControl.setChecked(automatic != 0); + updateIcon(automatic != 0); + } else { + mControl.setChecked(false); + updateIcon(false /*automatic*/); + } + } + + /** Fetch the brightness from the system settings and update the slider */ + private void updateSlider() { + int value; + try { + value = Settings.System.getIntForUser(mContext.getContentResolver(), + Settings.System.SCREEN_BRIGHTNESS, + UserHandle.USER_CURRENT); + } catch (SettingNotFoundException ex) { + value = mMaximumBacklight; + } + mControl.setMax(mMaximumBacklight - mMinimumBacklight); + mControl.setValue(value - mMinimumBacklight); + } + } diff --git a/packages/SystemUI/src/com/android/systemui/settings/BrightnessDialog.java b/packages/SystemUI/src/com/android/systemui/settings/BrightnessDialog.java new file mode 100644 index 0000000..1b05084 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/settings/BrightnessDialog.java @@ -0,0 +1,114 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.settings; + +import com.android.systemui.R; + +import android.app.Dialog; +import android.content.Context; +import android.content.res.Resources; +import android.os.Bundle; +import android.os.Handler; +import android.util.Log; +import android.view.Window; +import android.view.WindowManager; +import android.widget.ImageView; + +import java.lang.Runnable; + +/** A dialog that provides controls for adjusting the screen brightness. */ +public class BrightnessDialog extends Dialog implements + BrightnessController.BrightnessStateChangeCallback { + + private static final String TAG = "BrightnessDialog"; + private static final boolean DEBUG = false; + + protected Handler mHandler = new Handler(); + + private BrightnessController mBrightnessController; + private final int mBrightnessDialogLongTimeout; + private final int mBrightnessDialogShortTimeout; + + private final Runnable mDismissDialogRunnable = new Runnable() { + public void run() { + if (BrightnessDialog.this.isShowing()) { + BrightnessDialog.this.dismiss(); + } + }; + }; + + + public BrightnessDialog(Context ctx) { + super(ctx); + Resources r = ctx.getResources(); + mBrightnessDialogLongTimeout = + r.getInteger(R.integer.quick_settings_brightness_dialog_long_timeout); + mBrightnessDialogShortTimeout = + r.getInteger(R.integer.quick_settings_brightness_dialog_short_timeout); + } + + + /** + * Create the brightness dialog and any resources that are used for the + * entire lifetime of the dialog. + */ + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + Window window = getWindow(); + window.setType(WindowManager.LayoutParams.TYPE_VOLUME_OVERLAY); + window.getAttributes().privateFlags |= + WindowManager.LayoutParams.PRIVATE_FLAG_SHOW_FOR_ALL_USERS; + window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND); + window.requestFeature(Window.FEATURE_NO_TITLE); + + setContentView(R.layout.quick_settings_brightness_dialog); + setCanceledOnTouchOutside(true); + } + + + @Override + protected void onStart() { + super.onStart(); + mBrightnessController = new BrightnessController(getContext(), + (ImageView) findViewById(R.id.brightness_icon), + (ToggleSlider) findViewById(R.id.brightness_slider)); + dismissBrightnessDialog(mBrightnessDialogLongTimeout); + mBrightnessController.addStateChangedCallback(this); + } + + @Override + protected void onStop() { + super.onStop(); + mBrightnessController.unregisterCallbacks(); + removeAllBrightnessDialogCallbacks(); + } + + public void onBrightnessLevelChanged() { + dismissBrightnessDialog(mBrightnessDialogShortTimeout); + } + + private void dismissBrightnessDialog(int timeout) { + removeAllBrightnessDialogCallbacks(); + mHandler.postDelayed(mDismissDialogRunnable, timeout); + } + + private void removeAllBrightnessDialogCallbacks() { + mHandler.removeCallbacks(mDismissDialogRunnable); + } + +} diff --git a/packages/SystemUI/src/com/android/systemui/settings/CurrentUserTracker.java b/packages/SystemUI/src/com/android/systemui/settings/CurrentUserTracker.java new file mode 100644 index 0000000..122f81e --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/settings/CurrentUserTracker.java @@ -0,0 +1,57 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.settings; + +import android.app.ActivityManager; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; + +public abstract class CurrentUserTracker extends BroadcastReceiver { + + private Context mContext; + private int mCurrentUserId; + + public CurrentUserTracker(Context context) { + IntentFilter filter = new IntentFilter(Intent.ACTION_USER_SWITCHED); + context.registerReceiver(this, filter); + mCurrentUserId = ActivityManager.getCurrentUser(); + mContext = context; + } + + public int getCurrentUserId() { + return mCurrentUserId; + } + + @Override + public void onReceive(Context context, Intent intent) { + if (Intent.ACTION_USER_SWITCHED.equals(intent.getAction())) { + int oldUserId = mCurrentUserId; + mCurrentUserId = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, 0); + if (oldUserId != mCurrentUserId) { + onUserSwitched(mCurrentUserId); + } + } + } + + public void stopTracking() { + mContext.unregisterReceiver(this); + } + + public abstract void onUserSwitched(int newUserId); +} diff --git a/packages/SystemUI/src/com/android/systemui/settings/SettingsUI.java b/packages/SystemUI/src/com/android/systemui/settings/SettingsUI.java new file mode 100644 index 0000000..f65123a --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/settings/SettingsUI.java @@ -0,0 +1,76 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.settings; + +import java.io.FileDescriptor; +import java.io.PrintWriter; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.content.IntentFilter; +import android.os.Handler; +import android.util.Slog; + +import com.android.systemui.SystemUI; + +public class SettingsUI extends SystemUI { + private static final String TAG = "SettingsUI"; + private static final boolean DEBUG = false; + + private final Handler mHandler = new Handler(); + private BrightnessDialog mBrightnessDialog; + + private BroadcastReceiver mIntentReceiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + String action = intent.getAction(); + if (action.equals(Intent.ACTION_SHOW_BRIGHTNESS_DIALOG)) { + if (DEBUG) Slog.d(TAG, "showing brightness dialog"); + + if (mBrightnessDialog == null) { + mBrightnessDialog = new BrightnessDialog(mContext); + mBrightnessDialog.setOnDismissListener(new DialogInterface.OnDismissListener() { + @Override + public void onDismiss(DialogInterface dialog) { + mBrightnessDialog = null; + } + }); + } + + if (!mBrightnessDialog.isShowing()) { + mBrightnessDialog.show(); + } + + } else { + Slog.w(TAG, "unknown intent: " + intent); + } + } + }; + + public void start() { + IntentFilter filter = new IntentFilter(); + filter.addAction(Intent.ACTION_SHOW_BRIGHTNESS_DIALOG); + mContext.registerReceiver(mIntentReceiver, filter, null, mHandler); + } + + public void dump(FileDescriptor fd, PrintWriter pw, String[] args) { + pw.print("mBrightnessDialog="); + pw.println(mBrightnessDialog == null ? "null" : mBrightnessDialog.toString()); + } +} diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/ToggleSlider.java b/packages/SystemUI/src/com/android/systemui/settings/ToggleSlider.java index 39f8fcc..c7c361c 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/ToggleSlider.java +++ b/packages/SystemUI/src/com/android/systemui/settings/ToggleSlider.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010 The Android Open Source Project + * Copyright (C) 2013 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.systemui.statusbar.policy; +package com.android.systemui.settings; import android.content.Context; import android.content.res.Resources; @@ -31,7 +31,7 @@ import android.widget.TextView; import com.android.systemui.R; -public class ToggleSlider extends RelativeLayout +public class ToggleSlider extends RelativeLayout implements CompoundButton.OnCheckedChangeListener, SeekBar.OnSeekBarChangeListener { private static final String TAG = "StatusBar.ToggleSlider"; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java index fe33b02..7bdcf6e 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java @@ -17,6 +17,7 @@ package com.android.systemui.statusbar; +import android.content.res.Configuration; import com.android.internal.statusbar.IStatusBarService; import com.android.internal.statusbar.StatusBarIcon; import com.android.internal.statusbar.StatusBarIconList; @@ -44,7 +45,6 @@ import android.content.Intent; import android.content.IntentFilter; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager.NameNotFoundException; -import android.content.res.Configuration; import android.content.res.Resources; import android.database.ContentObserver; import android.graphics.Bitmap; @@ -80,6 +80,7 @@ import android.widget.RemoteViews; import android.widget.TextView; import java.util.ArrayList; +import java.util.Locale; public abstract class BaseStatusBar extends SystemUI implements CommandQueue.Callbacks { @@ -124,6 +125,9 @@ public abstract class BaseStatusBar extends SystemUI implements protected int mCurrentUserId = 0; + protected int mLayoutDirection; + private Locale mLocale; + // UI-specific methods /** @@ -134,6 +138,8 @@ public abstract class BaseStatusBar extends SystemUI implements protected WindowManager mWindowManager; protected IWindowManager mWindowManagerService; + protected abstract void refreshLayout(int layoutDirection); + protected Display mDisplay; private boolean mDeviceProvisioned = false; @@ -203,6 +209,9 @@ public abstract class BaseStatusBar extends SystemUI implements mBarService = IStatusBarService.Stub.asInterface( ServiceManager.getService(Context.STATUS_BAR_SERVICE)); + mLocale = mContext.getResources().getConfiguration().locale; + mLayoutDirection = TextUtils.getLayoutDirectionFromLocale(mLocale); + // Connect in to the status bar manager service StatusBarIconList iconList = new StatusBarIconList(); ArrayList<IBinder> notificationKeys = new ArrayList<IBinder>(); @@ -274,6 +283,8 @@ public abstract class BaseStatusBar extends SystemUI implements userSwitched(mCurrentUserId); } }}, filter); + + mLocale = mContext.getResources().getConfiguration().locale; } public void userSwitched(int newUserId) { @@ -291,6 +302,16 @@ public abstract class BaseStatusBar extends SystemUI implements || thisUserId == notificationUserId; } + @Override + protected void onConfigurationChanged(Configuration newConfig) { + final Locale newLocale = mContext.getResources().getConfiguration().locale; + if (! newLocale.equals(mLocale)) { + mLocale = newLocale; + mLayoutDirection = TextUtils.getLayoutDirectionFromLocale(mLocale); + refreshLayout(mLayoutDirection); + } + } + protected View updateNotificationVetoButton(View row, StatusBarNotification n) { View vetoButton = row.findViewById(R.id.veto); if (n.isClearable()) { @@ -426,7 +447,6 @@ public abstract class BaseStatusBar extends SystemUI implements protected abstract WindowManager.LayoutParams getSearchLayoutParams( LayoutParams layoutParams); - protected void updateSearchPanel() { // Search Panel boolean visible = false; @@ -539,6 +559,11 @@ public abstract class BaseStatusBar extends SystemUI implements + thumbBgPadding + thumbLeftMargin); y = (int) (dm.heightPixels - res.getDimensionPixelSize(R.dimen.status_bar_recents_thumbnail_height) - thumbBgPadding); + if (mLayoutDirection == View.LAYOUT_DIRECTION_RTL) { + x = dm.widthPixels - x - res + .getDimensionPixelSize(R.dimen.status_bar_recents_thumbnail_width); + } + } else { // if (config.orientation == Configuration.ORIENTATION_LANDSCAPE) { float thumbTopMargin = res .getDimensionPixelSize(R.dimen.status_bar_recents_thumbnail_top_margin); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java b/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java index 1321ade..baaefab 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java @@ -148,10 +148,14 @@ public class SignalClusterView if (mWifiGroup == null) return; if (mWifiVisible) { - mWifiGroup.setVisibility(View.VISIBLE); + mWifi.setImageDrawable(null); + mWifiActivity.setImageDrawable(null); + mWifi.setImageResource(mWifiStrengthId); mWifiActivity.setImageResource(mWifiActivityId); + mWifiGroup.setContentDescription(mWifiDescription); + mWifiGroup.setVisibility(View.VISIBLE); } else { mWifiGroup.setVisibility(View.GONE); } @@ -162,18 +166,24 @@ public class SignalClusterView mWifiStrengthId, mWifiActivityId)); if (mMobileVisible && !mIsAirplaneMode) { - mMobileGroup.setVisibility(View.VISIBLE); + mMobile.setImageDrawable(null); + mMobileActivity.setImageDrawable(null); + mMobileType.setImageDrawable(null); + mMobile.setImageResource(mMobileStrengthId); mMobileActivity.setImageResource(mMobileActivityId); mMobileType.setImageResource(mMobileTypeId); + mMobileGroup.setContentDescription(mMobileTypeDescription + " " + mMobileDescription); + mMobileGroup.setVisibility(View.VISIBLE); } else { mMobileGroup.setVisibility(View.GONE); } if (mIsAirplaneMode) { - mAirplane.setVisibility(View.VISIBLE); + mAirplane.setImageDrawable(null); mAirplane.setImageResource(mAirplaneIconId); + mAirplane.setVisibility(View.VISIBLE); } else { mAirplane.setVisibility(View.GONE); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java index dbc55c8..39d56a4 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java @@ -118,12 +118,7 @@ public class StatusBarIconView extends AnimatedImageView { mIcon = icon.clone(); setContentDescription(icon.contentDescription); if (!iconEquals) { - Drawable drawable = getIcon(icon); - if (drawable == null) { - Slog.w(TAG, "No icon for slot " + mSlot); - return false; - } - setImageDrawable(drawable); + if (!updateDrawable(false /* no clear */)) return false; } if (!levelEquals) { setImageLevel(icon.iconLevel); @@ -149,6 +144,23 @@ public class StatusBarIconView extends AnimatedImageView { return true; } + public void updateDrawable() { + updateDrawable(true /* with clear */); + } + + private boolean updateDrawable(boolean withClear) { + Drawable drawable = getIcon(mIcon); + if (drawable == null) { + Slog.w(TAG, "No icon for slot " + mSlot); + return false; + } + if (withClear) { + setImageDrawable(null); + } + setImageDrawable(drawable); + return true; + } + private Drawable getIcon(StatusBarIcon icon) { return getIcon(getContext(), icon); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java index 5eeef93..54c4666 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java @@ -74,7 +74,9 @@ public class NavigationBarView extends LinearLayout { int mNavigationIconHints = 0; private Drawable mBackIcon, mBackLandIcon, mBackAltIcon, mBackAltLandIcon; - + private Drawable mRecentIcon; + private Drawable mRecentLandIcon; + private DelegateViewHelper mDelegateHelper; private DeadZone mDeadZone; @@ -169,10 +171,23 @@ public class NavigationBarView extends LinearLayout { mShowMenu = false; mDelegateHelper = new DelegateViewHelper(this); + getIcons(res); + } + + private void getIcons(Resources res) { mBackIcon = res.getDrawable(R.drawable.ic_sysbar_back); mBackLandIcon = res.getDrawable(R.drawable.ic_sysbar_back_land); mBackAltIcon = res.getDrawable(R.drawable.ic_sysbar_back_ime); mBackAltLandIcon = res.getDrawable(R.drawable.ic_sysbar_back_ime); + mRecentIcon = res.getDrawable(R.drawable.ic_sysbar_recent); + mRecentLandIcon = res.getDrawable(R.drawable.ic_sysbar_recent_land); + } + + @Override + public void setLayoutDirection(int layoutDirection) { + getIcons(mContext.getResources()); + + super.setLayoutDirection(layoutDirection); } public void notifyScreenOn(boolean screenOn) { @@ -225,6 +240,8 @@ public class NavigationBarView extends LinearLayout { ? (mVertical ? mBackAltLandIcon : mBackAltIcon) : (mVertical ? mBackLandIcon : mBackIcon)); + ((ImageView)getRecentsButton()).setImageDrawable(mVertical ? mRecentLandIcon : mRecentIcon); + setDisabledFlags(mDisabledFlags, true); } 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 2bad353..ff36485 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java @@ -21,14 +21,17 @@ import android.content.res.Resources; import android.graphics.Canvas; import android.graphics.drawable.Drawable; import android.util.AttributeSet; +import android.util.EventLog; import android.util.Slog; import android.view.MotionEvent; import android.view.View; +import com.android.systemui.EventLogTags; import com.android.systemui.R; import com.android.systemui.statusbar.GestureRecorder; public class NotificationPanelView extends PanelView { + public static final boolean DEBUG_GESTURES = true; Drawable mHandleBar; int mHandleBarHeight; @@ -91,6 +94,12 @@ public class NotificationPanelView extends PanelView { @Override public boolean onTouchEvent(MotionEvent event) { + if (DEBUG_GESTURES) { + if (event.getActionMasked() != MotionEvent.ACTION_MOVE) { + EventLog.writeEvent(EventLogTags.SYSUI_NOTIFICATIONPANEL_TOUCH, + event.getActionMasked(), (int) event.getX(), (int) event.getY()); + } + } if (PhoneStatusBar.SETTINGS_DRAG_SHORTCUT && mStatusBar.mHasFlipSettings) { switch (event.getActionMasked()) { case MotionEvent.ACTION_DOWN: diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelBar.java index 4b07b00..565a3f2 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelBar.java @@ -96,14 +96,21 @@ public class PanelBar extends FrameLayout { @Override public boolean onTouchEvent(MotionEvent event) { // Allow subclasses to implement enable/disable semantics - if (!panelsEnabled()) return false; + if (!panelsEnabled()) { + if (event.getAction() == MotionEvent.ACTION_DOWN) { + Slog.v(TAG, String.format("onTouch: all panels disabled, ignoring touch at (%d,%d)", + (int) event.getX(), (int) event.getY())); + } + return false; + } // figure out which panel needs to be talked to here if (event.getAction() == MotionEvent.ACTION_DOWN) { final PanelView panel = selectPanelForTouch(event); if (panel == null) { // panel is not there, so we'll eat the gesture - if (DEBUG) LOG("PanelBar.onTouch: no panel for x=%d, bailing", event.getX()); + Slog.v(TAG, String.format("onTouch: no panel for touch at (%d,%d)", + (int) event.getX(), (int) event.getY())); mTouchingPanel = null; return true; } @@ -112,6 +119,9 @@ public class PanelBar extends FrameLayout { (enabled ? "" : " (disabled)")); if (!enabled) { // panel is disabled, so we'll eat the gesture + Slog.v(TAG, String.format( + "onTouch: panel (%s) is disabled, ignoring touch at (%d,%d)", + panel, (int) event.getX(), (int) event.getY())); mTouchingPanel = null; return true; } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelHolder.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelHolder.java index 8a54347..c229a09 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelHolder.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelHolder.java @@ -18,10 +18,14 @@ package com.android.systemui.statusbar.phone; import android.content.Context; import android.util.AttributeSet; +import android.util.EventLog; import android.view.MotionEvent; import android.widget.FrameLayout; +import com.android.systemui.EventLogTags; + public class PanelHolder extends FrameLayout { + public static final boolean DEBUG_GESTURES = true; private int mSelectedPanelIndex = -1; private PanelBar mBar; @@ -67,6 +71,12 @@ public class PanelHolder extends FrameLayout { @Override public boolean onTouchEvent(MotionEvent event) { + if (DEBUG_GESTURES) { + if (event.getActionMasked() != MotionEvent.ACTION_MOVE) { + EventLog.writeEvent(EventLogTags.SYSUI_PANELHOLDER_TOUCH, + event.getActionMasked(), (int) event.getX(), (int) event.getY()); + } + } switch (event.getAction()) { case MotionEvent.ACTION_DOWN: PanelBar.LOG("PanelHolder got touch in open air, closing panels"); 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 5d9c7bc..e351429 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java @@ -16,8 +16,9 @@ package com.android.systemui.statusbar.phone; +import java.io.FileDescriptor; +import java.io.PrintWriter; import java.util.ArrayDeque; -import java.util.ArrayList; import java.util.Iterator; import android.animation.ObjectAnimator; @@ -28,7 +29,6 @@ import android.content.res.Resources; import android.util.AttributeSet; import android.util.Slog; import android.view.MotionEvent; -import android.view.VelocityTracker; import android.view.View; import android.widget.FrameLayout; @@ -37,6 +37,9 @@ import com.android.systemui.R; public class PanelView extends FrameLayout { public static final boolean DEBUG = PanelBar.DEBUG; public static final String TAG = PanelView.class.getSimpleName(); + + public static final boolean DEBUG_NAN = true; // http://b/7686690 + public final void LOG(String fmt, Object... args) { if (!DEBUG) return; Slog.v(TAG, (mViewName != null ? (mViewName + ": ") : "") + String.format(fmt, args)); @@ -139,17 +142,38 @@ public class PanelView extends FrameLayout { last = event; i++; } - mVX /= totalweight; - mVY /= totalweight; + if (totalweight > 0) { + mVX /= totalweight; + mVY /= totalweight; + } else { + if (DEBUG_NAN) { + Slog.v("FlingTracker", "computeCurrentVelocity warning: totalweight=0", + new Throwable()); + } + // so as not to contaminate the velocities with NaN + mVX = mVY = 0; + } if (FlingTracker.DEBUG) { Slog.v("FlingTracker", "computed: vx=" + mVX + " vy=" + mVY); } } public float getXVelocity() { + if (Float.isNaN(mVX)) { + if (DEBUG_NAN) { + Slog.v("FlingTracker", "warning: vx=NaN"); + } + mVX = 0; + } return mVX; } public float getYVelocity() { + if (Float.isNaN(mVY)) { + if (DEBUG_NAN) { + Slog.v("FlingTracker", "warning: vx=NaN"); + } + mVY = 0; + } return mVY; } public void recycle() { @@ -282,6 +306,9 @@ public class PanelView extends FrameLayout { || ((mRubberbanding || !mClosing) && mExpandedHeight == fh)) { post(mStopAnimator); } + } else { + Slog.v(TAG, "animationTick called with dtms=" + dtms + "; nothing to do (h=" + + mExpandedHeight + " v=" + mVel + ")"); } } @@ -372,7 +399,7 @@ public class PanelView extends FrameLayout { case MotionEvent.ACTION_MOVE: final float h = rawY - mAbsPos[1] - mTouchOffset; if (h > mPeekHeight) { - if (mPeekAnimator != null && mPeekAnimator.isRunning()) { + if (mPeekAnimator != null && mPeekAnimator.isStarted()) { mPeekAnimator.cancel(); } mJustPeeked = false; @@ -503,7 +530,7 @@ public class PanelView extends FrameLayout { public void setExpandedHeight(float height) { if (DEBUG) LOG("setExpandedHeight(%.1f)", height); mRubberbanding = false; - if (mTimeAnimator.isRunning()) { + if (mTimeAnimator.isStarted()) { post(mStopAnimator); } setExpandedHeightInternal(height); @@ -517,6 +544,15 @@ public class PanelView extends FrameLayout { } public void setExpandedHeightInternal(float h) { + if (Float.isNaN(h)) { + // If a NaN gets in here, it will freeze the Animators. + if (DEBUG_NAN) { + Slog.v(TAG, "setExpandedHeightInternal: warning: h=NaN, using 0 instead", + new Throwable()); + } + h = 0; + } + float fh = getFullHeight(); if (fh == 0) { // Hmm, full height hasn't been computed yet @@ -524,6 +560,7 @@ public class PanelView extends FrameLayout { if (h < 0) h = 0; if (!(mRubberbandingEnabled && (mTracking || mRubberbanding)) && h > fh) h = fh; + mExpandedHeight = h; if (DEBUG) LOG("setExpansion: height=%.1f fh=%.1f tracking=%s rubber=%s", h, fh, mTracking?"T":"f", mRubberbanding?"T":"f"); @@ -546,6 +583,14 @@ public class PanelView extends FrameLayout { } public void setExpandedFraction(float frac) { + if (Float.isNaN(frac)) { + // If a NaN gets in here, it will freeze the Animators. + if (DEBUG_NAN) { + Slog.v(TAG, "setExpandedFraction: frac=NaN, using 0 instead", + new Throwable()); + } + frac = 0; + } setExpandedHeight(getFullHeight() * frac); } @@ -594,4 +639,20 @@ public class PanelView extends FrameLayout { if (DEBUG) LOG("skipping expansion: is expanded"); } } + + public void dump(FileDescriptor fd, PrintWriter pw, String[] args) { + pw.println(String.format("[PanelView(%s): expandedHeight=%f fullHeight=%f closing=%s" + + " tracking=%s rubberbanding=%s justPeeked=%s peekAnim=%s%s timeAnim=%s%s" + + "]", + this.getClass().getSimpleName(), + getExpandedHeight(), + getFullHeight(), + mClosing?"T":"f", + mTracking?"T":"f", + mRubberbanding?"T":"f", + mJustPeeked?"T":"f", + mPeekAnimator, ((mPeekAnimator!=null && mPeekAnimator.isStarted())?" (started)":""), + mTimeAnimator, ((mTimeAnimator!=null && mTimeAnimator.isStarted())?" (started)":"") + )); + } } 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 7d7e7a3..9f54573 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java @@ -52,6 +52,7 @@ import android.provider.Settings; import android.service.dreams.DreamService; import android.service.dreams.IDreamManager; import android.util.DisplayMetrics; +import android.util.EventLog; import android.util.Log; import android.util.Slog; import android.view.Display; @@ -76,6 +77,7 @@ import android.widget.TextView; import com.android.internal.statusbar.StatusBarIcon; import com.android.internal.statusbar.StatusBarNotification; +import com.android.systemui.EventLogTags; import com.android.systemui.R; import com.android.systemui.statusbar.BaseStatusBar; import com.android.systemui.statusbar.CommandQueue; @@ -103,7 +105,7 @@ public class PhoneStatusBar extends BaseStatusBar { public static final boolean DEBUG = BaseStatusBar.DEBUG; public static final boolean SPEW = DEBUG; public static final boolean DUMPTRUCK = true; // extra dumpsys info - public static final boolean DEBUG_GESTURES = false; + public static final boolean DEBUG_GESTURES = true; public static final boolean DEBUG_CLINGS = false; @@ -244,16 +246,6 @@ public class PhoneStatusBar extends BaseStatusBar { private ViewGroup mCling; private boolean mSuppressStatusBarDrags; // while a cling is up, briefly deaden the bar to give things time to settle - boolean mAnimating; - boolean mClosing; // only valid when mAnimating; indicates the initial acceleration - float mAnimY; - float mAnimVel; - float mAnimAccel; - long mAnimLastTimeNanos; - boolean mAnimatingReveal = false; - int mViewDelta; - float mFlingVelocity; - int mFlingY; int[] mAbsPos = new int[2]; Runnable mPostCollapseCleanup = null; @@ -350,7 +342,7 @@ public class PhoneStatusBar extends BaseStatusBar { @Override public boolean onTouch(View v, MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN) { - if (mExpandedVisible && !mAnimating) { + if (mExpandedVisible) { animateCollapsePanels(); } } @@ -438,7 +430,7 @@ public class PhoneStatusBar extends BaseStatusBar { mHasFlipSettings = res.getBoolean(R.bool.config_hasFlipSettingsPanel); mDateTimeView = mNotificationPanelHeader.findViewById(R.id.datetime); - if (mHasFlipSettings) { + if (mDateTimeView != null) { mDateTimeView.setOnClickListener(mClockClickListener); mDateTimeView.setEnabled(true); } @@ -640,7 +632,7 @@ public class PhoneStatusBar extends BaseStatusBar { lp.flags |= WindowManager.LayoutParams.FLAG_DIM_BEHIND; lp.dimAmount = 0.75f; } - lp.gravity = Gravity.BOTTOM | Gravity.LEFT; + lp.gravity = Gravity.BOTTOM | Gravity.START; lp.setTitle("RecentsPanel"); lp.windowAnimations = com.android.internal.R.style.Animation_RecentApplications; lp.softInputMode = WindowManager.LayoutParams.SOFT_INPUT_STATE_UNCHANGED @@ -662,7 +654,7 @@ public class PhoneStatusBar extends BaseStatusBar { if (ActivityManager.isHighEndGfx()) { lp.flags |= WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED; } - lp.gravity = Gravity.BOTTOM | Gravity.LEFT; + lp.gravity = Gravity.BOTTOM | Gravity.START; lp.setTitle("SearchPanel"); // TODO: Define custom animation for Search panel lp.windowAnimations = com.android.internal.R.style.Animation_RecentApplications; @@ -833,6 +825,21 @@ public class PhoneStatusBar extends BaseStatusBar { mWindowManager.addView(mIntruderAlertView, lp); } + public void refreshAllStatusBarIcons() { + refreshAllIconsForLayout(mStatusIcons); + refreshAllIconsForLayout(mNotificationIcons); + } + + private void refreshAllIconsForLayout(LinearLayout ll) { + final int count = ll.getChildCount(); + for (int n = 0; n < count; n++) { + View child = ll.getChildAt(n); + if (child instanceof StatusBarIconView) { + ((StatusBarIconView) child).updateDrawable(); + } + } + } + public void addIcon(String slot, int index, int viewIndex, StatusBarIcon icon) { if (SPEW) Slog.d(TAG, "addIcon slot=" + slot + " index=" + index + " viewIndex=" + viewIndex + " icon=" + icon); @@ -944,7 +951,7 @@ public class PhoneStatusBar extends BaseStatusBar { mHandler.sendEmptyMessage(MSG_HIDE_INTRUDER); } - if (CLOSE_PANEL_WHEN_EMPTIED && mNotificationData.size() == 0 && !mAnimating) { + if (CLOSE_PANEL_WHEN_EMPTIED && mNotificationData.size() == 0) { animateCollapsePanels(); } } @@ -952,6 +959,33 @@ public class PhoneStatusBar extends BaseStatusBar { setAreThereNotifications(); } + @Override + protected void refreshLayout(int layoutDirection) { + if (mNavigationBarView != null) { + mNavigationBarView.setLayoutDirection(layoutDirection); + } + + if (mClearButton != null && mClearButton instanceof ImageView) { + // Force asset reloading + ((ImageView)mClearButton).setImageDrawable(null); + ((ImageView)mClearButton).setImageResource(R.drawable.ic_notify_clear); + } + + if (mSettingsButton != null) { + // Force asset reloading + mSettingsButton.setImageDrawable(null); + mSettingsButton.setImageResource(R.drawable.ic_notify_quicksettings); + } + + if (mNotificationButton != null) { + // Force asset reloading + mNotificationButton.setImageDrawable(null); + mNotificationButton.setImageResource(R.drawable.ic_notifications); + } + + refreshAllStatusBarIcons(); + } + private void updateShowSearchHoldoff() { mShowSearchHoldoff = mContext.getResources().getInteger( R.integer.config_show_search_delay); @@ -1359,10 +1393,6 @@ public class PhoneStatusBar extends BaseStatusBar { if (SPEW) { Slog.d(TAG, "animateCollapse():" + " mExpandedVisible=" + mExpandedVisible - + " mAnimating=" + mAnimating - + " mAnimatingReveal=" + mAnimatingReveal - + " mAnimY=" + mAnimY - + " mAnimVel=" + mAnimVel + " flags=" + flags); } @@ -1742,6 +1772,14 @@ public class PhoneStatusBar extends BaseStatusBar { } public boolean interceptTouchEvent(MotionEvent event) { + if (DEBUG_GESTURES) { + if (event.getActionMasked() != MotionEvent.ACTION_MOVE) { + EventLog.writeEvent(EventLogTags.SYSUI_STATUSBAR_TOUCH, + event.getActionMasked(), (int) event.getX(), (int) event.getY(), mDisabled); + } + + } + if (SPEW) { Slog.d(TAG, "Touch: rawY=" + event.getRawY() + " event=" + event + " mDisabled=" + mDisabled + " mTracking=" + mTracking); @@ -1991,16 +2029,6 @@ public class PhoneStatusBar extends BaseStatusBar { + ", mTrackingPosition=" + mTrackingPosition); pw.println(" mTicking=" + mTicking); pw.println(" mTracking=" + mTracking); - pw.println(" mNotificationPanel=" + - ((mNotificationPanel == null) - ? "null" - : (mNotificationPanel + " params=" + mNotificationPanel.getLayoutParams().debug("")))); - pw.println(" mAnimating=" + mAnimating - + ", mAnimY=" + mAnimY + ", mAnimVel=" + mAnimVel - + ", mAnimAccel=" + mAnimAccel); - pw.println(" mAnimLastTimeNanos=" + mAnimLastTimeNanos); - pw.println(" mAnimatingReveal=" + mAnimatingReveal - + " mViewDelta=" + mViewDelta); pw.println(" mDisplayMetrics=" + mDisplayMetrics); pw.println(" mPile: " + viewInfo(mPile)); pw.println(" mTickerView: " + viewInfo(mTickerView)); @@ -2015,6 +2043,20 @@ public class PhoneStatusBar extends BaseStatusBar { mNavigationBarView.dump(fd, pw, args); } + pw.println(" Panels: "); + if (mNotificationPanel != null) { + pw.println(" mNotificationPanel=" + + mNotificationPanel + " params=" + mNotificationPanel.getLayoutParams().debug("")); + pw.print (" "); + mNotificationPanel.dump(fd, pw, args); + } + if (mSettingsPanel != null) { + pw.println(" mSettingsPanel=" + + mSettingsPanel + " params=" + mSettingsPanel.getLayoutParams().debug("")); + pw.print (" "); + mSettingsPanel.dump(fd, pw, args); + } + if (DUMPTRUCK) { synchronized (mNotificationData) { int N = mNotificationData.size(); @@ -2122,13 +2164,13 @@ public class PhoneStatusBar extends BaseStatusBar { FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) mNotificationPanel.getLayoutParams(); lp.gravity = mNotificationPanelGravity; - lp.leftMargin = mNotificationPanelMarginPx; + lp.setMarginStart(mNotificationPanelMarginPx); mNotificationPanel.setLayoutParams(lp); if (mSettingsPanel != null) { lp = (FrameLayout.LayoutParams) mSettingsPanel.getLayoutParams(); lp.gravity = mSettingsPanelGravity; - lp.rightMargin = mNotificationPanelMarginPx; + lp.setMarginEnd(mNotificationPanelMarginPx); mSettingsPanel.setLayoutParams(lp); } @@ -2193,7 +2235,8 @@ public class PhoneStatusBar extends BaseStatusBar { View sampleView = snapshot.get(0); int width = sampleView.getWidth(); - final int velocity = width * 8; // 1000/8 = 125 ms duration + final int dir = sampleView.isLayoutRtl() ? -1 : +1; + final int velocity = dir * width * 8; // 1000/8 = 125 ms duration for (final View _v : snapshot) { mHandler.postDelayed(new Runnable() { @Override @@ -2395,11 +2438,12 @@ public class PhoneStatusBar extends BaseStatusBar { = (int) res.getDimension(R.dimen.notification_panel_margin_left); mNotificationPanelGravity = res.getInteger(R.integer.notification_panel_layout_gravity); if (mNotificationPanelGravity <= 0) { - mNotificationPanelGravity = Gravity.LEFT | Gravity.TOP; + mNotificationPanelGravity = Gravity.START | Gravity.TOP; } mSettingsPanelGravity = res.getInteger(R.integer.settings_panel_layout_gravity); + Log.d(TAG, "mSettingsPanelGravity = " + mSettingsPanelGravity); if (mSettingsPanelGravity <= 0) { - mSettingsPanelGravity = Gravity.RIGHT | Gravity.TOP; + mSettingsPanelGravity = Gravity.END | Gravity.TOP; } mCarrierLabelHeight = res.getDimensionPixelSize(R.dimen.carrier_label_height); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java index af6a149..de9f750 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java @@ -22,15 +22,19 @@ import android.content.Context; import android.content.res.Resources; import android.content.res.Resources.NotFoundException; import android.util.AttributeSet; +import android.util.EventLog; import android.util.Slog; import android.view.MotionEvent; import android.view.View; import android.view.accessibility.AccessibilityEvent; + +import com.android.systemui.EventLogTags; import com.android.systemui.R; public class PhoneStatusBarView extends PanelBar { private static final String TAG = "PhoneStatusBarView"; private static final boolean DEBUG = PhoneStatusBar.DEBUG; + private static final boolean DEBUG_GESTURES = true; PhoneStatusBar mBar; int mScrimColor; @@ -106,6 +110,7 @@ public class PhoneStatusBarView extends PanelBar { @Override public PanelView selectPanelForTouch(MotionEvent touch) { final float x = touch.getX(); + final boolean isLayoutRtl = isLayoutRtl(); if (mFullWidthNotifications) { // No double swiping. If either panel is open, nothing else can be pulled down. @@ -130,7 +135,8 @@ public class PhoneStatusBarView extends PanelBar { if (region < mSettingsPanelDragzoneMin) region = mSettingsPanelDragzoneMin; - return (w - x < region) ? mSettingsPanel : mNotificationPanel; + final boolean showSettings = isLayoutRtl ? (x < region) : (w - region < x); + return showSettings ? mSettingsPanel : mNotificationPanel; } @Override @@ -173,7 +179,17 @@ public class PhoneStatusBarView extends PanelBar { @Override public boolean onTouchEvent(MotionEvent event) { - return mBar.interceptTouchEvent(event) || super.onTouchEvent(event); + boolean barConsumedEvent = mBar.interceptTouchEvent(event); + + if (DEBUG_GESTURES) { + if (event.getActionMasked() != MotionEvent.ACTION_MOVE) { + EventLog.writeEvent(EventLogTags.SYSUI_PANELBAR_TOUCH, + event.getActionMasked(), (int) event.getX(), (int) event.getY(), + barConsumedEvent ? 1 : 0); + } + } + + return barConsumedEvent || super.onTouchEvent(event); } @Override diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettings.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettings.java index 9b0a320..60e22c5 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettings.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettings.java @@ -27,10 +27,8 @@ import com.android.systemui.statusbar.phone.QuickSettingsModel.UserState; import com.android.systemui.statusbar.phone.QuickSettingsModel.WifiState; import com.android.systemui.statusbar.policy.BatteryController; import com.android.systemui.statusbar.policy.BluetoothController; -import com.android.systemui.statusbar.policy.BrightnessController; import com.android.systemui.statusbar.policy.LocationController; import com.android.systemui.statusbar.policy.NetworkController; -import com.android.systemui.statusbar.policy.ToggleSlider; import android.app.ActivityManagerNative; import android.app.AlertDialog; @@ -70,7 +68,6 @@ import android.util.Pair; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.view.Window; import android.view.WindowManager; import android.view.WindowManagerGlobal; import android.widget.ImageView; @@ -100,19 +97,15 @@ class QuickSettings { private BluetoothAdapter mBluetoothAdapter; private WifiManager mWifiManager; - private BrightnessController mBrightnessController; private BluetoothController mBluetoothController; - private Dialog mBrightnessDialog; - private int mBrightnessDialogShortTimeout; - private int mBrightnessDialogLongTimeout; - private AsyncTask<Void, Void, Pair<String, Drawable>> mUserInfoTask; private LevelListDrawable mBatteryLevels; private LevelListDrawable mChargingBatteryLevels; boolean mTilesSetUp = false; + boolean mUseDefaultAvatar = false; private Handler mHandler; @@ -145,16 +138,13 @@ class QuickSettings { mBatteryLevels = (LevelListDrawable) r.getDrawable(R.drawable.qs_sys_battery); mChargingBatteryLevels = (LevelListDrawable) r.getDrawable(R.drawable.qs_sys_battery_charging); - mBrightnessDialogLongTimeout = - r.getInteger(R.integer.quick_settings_brightness_dialog_long_timeout); - mBrightnessDialogShortTimeout = - r.getInteger(R.integer.quick_settings_brightness_dialog_short_timeout); IntentFilter filter = new IntentFilter(); filter.addAction(DisplayManager.ACTION_WIFI_DISPLAY_STATUS_CHANGED); filter.addAction(BluetoothAdapter.ACTION_CONNECTION_STATE_CHANGED); filter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED); filter.addAction(Intent.ACTION_USER_SWITCHED); + filter.addAction(Intent.ACTION_CONFIGURATION_CHANGED); mContext.registerReceiver(mReceiver, filter); IntentFilter profileFilter = new IntentFilter(); @@ -228,6 +218,7 @@ class QuickSettings { avatar = new BitmapDrawable(mContext.getResources(), rawAvatar); } else { avatar = mContext.getResources().getDrawable(R.drawable.ic_qs_default_user); + mUseDefaultAvatar = true; } // If it's a single-user device, get the profile name, since the nickname is not @@ -349,7 +340,6 @@ class QuickSettings { TextView tv = (TextView) view.findViewById(R.id.brightness_textview); tv.setCompoundDrawablesWithIntrinsicBounds(0, state.iconId, 0, 0); tv.setText(state.label); - dismissBrightnessDialog(mBrightnessDialogShortTimeout); } }); parent.addView(brightnessTile); @@ -468,6 +458,8 @@ class QuickSettings { ImageView iv = (ImageView) view.findViewById(R.id.rssi_image); ImageView iov = (ImageView) view.findViewById(R.id.rssi_overlay_image); TextView tv = (TextView) view.findViewById(R.id.rssi_textview); + // Force refresh + iv.setImageDrawable(null); iv.setImageResource(rssiState.signalIconId); if (rssiState.dataTypeIconId > 0) { @@ -771,72 +763,12 @@ class QuickSettings { } ((QuickSettingsContainerView)mContainerView).updateResources(); mContainerView.requestLayout(); - - // Reset the dialog - boolean isBrightnessDialogVisible = false; - if (mBrightnessDialog != null) { - removeAllBrightnessDialogCallbacks(); - - isBrightnessDialogVisible = mBrightnessDialog.isShowing(); - mBrightnessDialog.dismiss(); - } - mBrightnessDialog = null; - if (isBrightnessDialogVisible) { - showBrightnessDialog(); - } } - private void removeAllBrightnessDialogCallbacks() { - mHandler.removeCallbacks(mDismissBrightnessDialogRunnable); - } - - private Runnable mDismissBrightnessDialogRunnable = new Runnable() { - public void run() { - if (mBrightnessDialog != null && mBrightnessDialog.isShowing()) { - mBrightnessDialog.dismiss(); - } - removeAllBrightnessDialogCallbacks(); - }; - }; private void showBrightnessDialog() { - if (mBrightnessDialog == null) { - mBrightnessDialog = new Dialog(mContext); - mBrightnessDialog.requestWindowFeature(Window.FEATURE_NO_TITLE); - mBrightnessDialog.setContentView(R.layout.quick_settings_brightness_dialog); - mBrightnessDialog.setCanceledOnTouchOutside(true); - - mBrightnessController = new BrightnessController(mContext, - (ImageView) mBrightnessDialog.findViewById(R.id.brightness_icon), - (ToggleSlider) mBrightnessDialog.findViewById(R.id.brightness_slider)); - mBrightnessController.addStateChangedCallback(mModel); - mBrightnessDialog.setOnDismissListener(new DialogInterface.OnDismissListener() { - @Override - public void onDismiss(DialogInterface dialog) { - mBrightnessController = null; - } - }); - - mBrightnessDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT); - mBrightnessDialog.getWindow().getAttributes().privateFlags |= - WindowManager.LayoutParams.PRIVATE_FLAG_SHOW_FOR_ALL_USERS; - mBrightnessDialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND); - } - if (!mBrightnessDialog.isShowing()) { - try { - WindowManagerGlobal.getWindowManagerService().dismissKeyguard(); - } catch (RemoteException e) { - } - mBrightnessDialog.show(); - dismissBrightnessDialog(mBrightnessDialogLongTimeout); - } - } - - private void dismissBrightnessDialog(int timeout) { - removeAllBrightnessDialogCallbacks(); - if (mBrightnessDialog != null) { - mHandler.postDelayed(mDismissBrightnessDialogRunnable, timeout); - } + Intent intent = new Intent(Intent.ACTION_SHOW_BRIGHTNESS_DIALOG); + mContext.sendBroadcast(intent); } private void showBugreportDialog() { @@ -916,6 +848,10 @@ class QuickSettings { applyBluetoothStatus(); } else if (Intent.ACTION_USER_SWITCHED.equals(action)) { reloadUserInfo(); + } else if (Intent.ACTION_CONFIGURATION_CHANGED.equals(action)) { + if (mUseDefaultAvatar) { + queryForUserInformation(); + } } } }; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettingsContainerView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettingsContainerView.java index 4e8339e..17ee017 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettingsContainerView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettingsContainerView.java @@ -68,7 +68,7 @@ class QuickSettingsContainerView extends FrameLayout { float cellWidth = (float) Math.ceil(((float) availableWidth) / mNumColumns); // Update each of the children's widths accordingly to the cell width - int N = getChildCount(); + final int N = getChildCount(); int cellHeight = 0; int cursor = 0; for (int i = 0; i < N; ++i) { @@ -102,36 +102,50 @@ class QuickSettingsContainerView extends FrameLayout { @Override protected void onLayout(boolean changed, int left, int top, int right, int bottom) { - int N = getChildCount(); - int x = getPaddingLeft(); + final int N = getChildCount(); + final boolean isLayoutRtl = isLayoutRtl(); + final int width = getWidth(); + + int x = getPaddingStart(); int y = getPaddingTop(); int cursor = 0; + for (int i = 0; i < N; ++i) { - QuickSettingsTileView v = (QuickSettingsTileView) getChildAt(i); - ViewGroup.LayoutParams lp = (ViewGroup.LayoutParams) v.getLayoutParams(); - if (v.getVisibility() != GONE) { - int col = cursor % mNumColumns; - int colSpan = v.getColumnSpan(); + QuickSettingsTileView child = (QuickSettingsTileView) getChildAt(i); + ViewGroup.LayoutParams lp = child.getLayoutParams(); + if (child.getVisibility() != GONE) { + final int col = cursor % mNumColumns; + final int colSpan = child.getColumnSpan(); + + final int childWidth = lp.width; + final int childHeight = lp.height; + int row = (int) (cursor / mNumColumns); // Push the item to the next row if it can't fit on this one if ((col + colSpan) > mNumColumns) { - x = getPaddingLeft(); - y += lp.height + mCellGap; + x = getPaddingStart(); + y += childHeight + mCellGap; row++; } + final int childLeft = (isLayoutRtl) ? width - x - childWidth : x; + final int childRight = childLeft + childWidth; + + final int childTop = y; + final int childBottom = childTop + childHeight; + // Layout the container - v.layout(x, y, x + lp.width, y + lp.height); + child.layout(childLeft, childTop, childRight, childBottom); // Offset the position by the cell gap or reset the position and cursor when we // reach the end of the row - cursor += v.getColumnSpan(); + cursor += child.getColumnSpan(); if (cursor < (((row + 1) * mNumColumns))) { - x += lp.width + mCellGap; + x += childWidth + mCellGap; } else { - x = getPaddingLeft(); - y += lp.height + mCellGap; + x = getPaddingStart(); + y += childHeight + mCellGap; } } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettingsModel.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettingsModel.java index 00991c1..435ea4c 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettingsModel.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettingsModel.java @@ -42,9 +42,9 @@ import android.view.inputmethod.InputMethodSubtype; import com.android.internal.view.RotationPolicy; import com.android.systemui.R; +import com.android.systemui.settings.CurrentUserTracker; +import com.android.systemui.settings.BrightnessController.BrightnessStateChangeCallback; import com.android.systemui.statusbar.policy.BatteryController.BatteryStateChangeCallback; -import com.android.systemui.statusbar.policy.BrightnessController.BrightnessStateChangeCallback; -import com.android.systemui.statusbar.policy.CurrentUserTracker; import com.android.systemui.statusbar.policy.LocationController.LocationGpsStateChangeCallback; import com.android.systemui.statusbar.policy.NetworkController.NetworkSignalChangedCallback; @@ -139,7 +139,7 @@ class QuickSettingsModel implements BluetoothStateChangeCallback, public void startObserving() { final ContentResolver cr = mContext.getContentResolver(); cr.registerContentObserver( - Settings.Secure.getUriFor(Settings.Secure.BUGREPORT_IN_POWER_MENU), false, this); + Settings.Global.getUriFor(Settings.Global.BUGREPORT_IN_POWER_MENU), false, this); } } @@ -239,10 +239,12 @@ class QuickSettingsModel implements BluetoothStateChangeCallback, mContext = context; mHandler = new Handler(); mUserTracker = new CurrentUserTracker(mContext) { - @Override - public void onReceive(Context context, Intent intent) { - super.onReceive(context, intent); - onUserSwitched(); + public void onUserSwitched(int newUserId) { + mBrightnessObserver.startObserving(); + onRotationLockChanged(); + onBrightnessLevelChanged(); + onNextAlarmChanged(); + onBugreportChanged(); } }; @@ -544,7 +546,7 @@ class QuickSettingsModel implements BluetoothStateChangeCallback, final ContentResolver cr = mContext.getContentResolver(); boolean enabled = false; try { - enabled = (Settings.Secure.getInt(cr, Settings.Secure.BUGREPORT_IN_POWER_MENU) != 0); + enabled = (Settings.Global.getInt(cr, Settings.Global.BUGREPORT_IN_POWER_MENU) != 0); } catch (SettingNotFoundException e) { } @@ -705,13 +707,4 @@ class QuickSettingsModel implements BluetoothStateChangeCallback, void refreshBrightnessTile() { onBrightnessLevelChanged(); } - - // User switch: need to update visuals of all tiles known to have per-user state - void onUserSwitched() { - mBrightnessObserver.startObserving(); - onRotationLockChanged(); - onBrightnessLevelChanged(); - onNextAlarmChanged(); - onBugreportChanged(); - } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/SettingsPanelView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/SettingsPanelView.java index bbb8455..2314d93 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/SettingsPanelView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/SettingsPanelView.java @@ -23,10 +23,13 @@ import android.content.res.Resources; import android.graphics.Canvas; import android.graphics.drawable.Drawable; import android.util.AttributeSet; +import android.util.EventLog; import android.view.LayoutInflater; +import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; +import com.android.systemui.EventLogTags; import com.android.systemui.R; import com.android.systemui.statusbar.BaseStatusBar; import com.android.systemui.statusbar.GestureRecorder; @@ -36,6 +39,7 @@ import com.android.systemui.statusbar.policy.LocationController; import com.android.systemui.statusbar.policy.NetworkController; public class SettingsPanelView extends PanelView { + public static final boolean DEBUG_GESTURES = true; private QuickSettings mQS; private QuickSettingsContainerView mQSContainer; @@ -136,4 +140,15 @@ public class SettingsPanelView extends PanelView { mHandleBar.draw(canvas); canvas.translate(0, -off); } + + @Override + public boolean onTouchEvent(MotionEvent event) { + if (DEBUG_GESTURES) { + if (event.getActionMasked() != MotionEvent.ACTION_MOVE) { + EventLog.writeEvent(EventLogTags.SYSUI_QUICKPANEL_TOUCH, + event.getActionMasked(), (int) event.getX(), (int) event.getY()); + } + } + return super.onTouchEvent(event); + } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/DateView.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/DateView.java index a7baebe..27a3a15 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/DateView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/DateView.java @@ -20,7 +20,6 @@ import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; -import android.text.format.DateFormat; import android.util.AttributeSet; import android.view.View; import android.view.ViewParent; @@ -28,7 +27,11 @@ import android.widget.TextView; import com.android.systemui.R; +import java.text.SimpleDateFormat; import java.util.Date; +import java.util.Locale; + +import libcore.icu.ICU; public class DateView extends TextView { private static final String TAG = "DateView"; @@ -88,8 +91,11 @@ public class DateView extends TextView { } protected void updateClock() { - final String dateFormat = getContext().getString(R.string.abbrev_wday_month_day_no_year); - setText(DateFormat.format(dateFormat, new Date())); + final String dateFormat = getContext().getString(R.string.system_ui_date_pattern); + final Locale l = Locale.getDefault(); + String fmt = ICU.getBestDateTimePattern(dateFormat, l.toString()); + SimpleDateFormat sdf = new SimpleDateFormat(fmt, l); + setText(sdf.format(new Date())); } private boolean isVisible() { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/DeadZone.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/DeadZone.java index e5ef5fe..6eb88be 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/DeadZone.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/DeadZone.java @@ -135,7 +135,7 @@ public class DeadZone extends View { mLastPokeTime = event.getEventTime(); if (DEBUG) Slog.v(TAG, "poked! size=" + getSize(mLastPokeTime)); - postInvalidate(); + if (mShouldFlash) postInvalidate(); } public void setFlash(float f) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/LocationController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/LocationController.java index 776cf36..0944b40 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/LocationController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/LocationController.java @@ -120,7 +120,7 @@ public class LocationController extends BroadcastReceiver { int[] idOut = new int[1]; mNotificationService.enqueueNotificationWithTag( - mContext.getPackageName(), + mContext.getPackageName(), mContext.getBasePackageName(), null, GPS_NOTIFICATION_ID, n, diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java index bbb90c8..cda3675 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java @@ -54,6 +54,7 @@ import java.io.FileDescriptor; import java.io.PrintWriter; import java.util.ArrayList; import java.util.List; +import java.util.Locale; public class NetworkController extends BroadcastReceiver { // debug @@ -133,6 +134,9 @@ public class NetworkController extends BroadcastReceiver { private boolean mAirplaneMode = false; private boolean mLastAirplaneMode = true; + private Locale mLocale = null; + private Locale mLastLocale = null; + // our ui Context mContext; ArrayList<ImageView> mPhoneSignalIconViews = new ArrayList<ImageView>(); @@ -251,6 +255,8 @@ public class NetworkController extends BroadcastReceiver { // yuck mBatteryStats = BatteryStatsService.getService(); + + mLastLocale = mContext.getResources().getConfiguration().locale; } public boolean hasMobileDataFeature() { @@ -398,8 +404,10 @@ public class NetworkController extends BroadcastReceiver { updateConnectivity(intent); refreshViews(); } else if (action.equals(Intent.ACTION_CONFIGURATION_CHANGED)) { + refreshLocale(); refreshViews(); } else if (action.equals(Intent.ACTION_AIRPLANE_MODE_CHANGED)) { + refreshLocale(); updateAirplaneMode(); refreshViews(); } else if (action.equals(WimaxManagerConstants.NET_4G_STATE_CHANGED_ACTION) || @@ -521,6 +529,10 @@ public class NetworkController extends BroadcastReceiver { Settings.Global.AIRPLANE_MODE_ON, 0) == 1); } + private void refreshLocale() { + mLocale = mContext.getResources().getConfiguration().locale; + } + private final void updateTelephonySignalStrength() { if (!hasService()) { if (CHATTY) Slog.d(TAG, "updateTelephonySignalStrength: !hasService()"); @@ -1188,7 +1200,8 @@ public class NetworkController extends BroadcastReceiver { || mLastWifiIconId != mWifiIconId || mLastWimaxIconId != mWimaxIconId || mLastDataTypeIconId != mDataTypeIconId - || mLastAirplaneMode != mAirplaneMode) + || mLastAirplaneMode != mAirplaneMode + || mLastLocale != mLocale) { // NB: the mLast*s will be updated later for (SignalCluster cluster : mSignalClusters) { @@ -1203,6 +1216,10 @@ public class NetworkController extends BroadcastReceiver { mLastAirplaneMode = mAirplaneMode; } + if (mLastLocale != mLocale) { + mLastLocale = mLocale; + } + // the phone icon on phones if (mLastPhoneSignalIconId != mPhoneSignalIconId) { mLastPhoneSignalIconId = mPhoneSignalIconId; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/VolumeController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/VolumeController.java index 6fee432..70f9ac8 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/VolumeController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/VolumeController.java @@ -27,6 +27,8 @@ import android.util.Slog; import android.view.IWindowManager; import android.widget.CompoundButton; +import com.android.systemui.settings.ToggleSlider; + public class VolumeController implements ToggleSlider.Listener { private static final String TAG = "StatusBar.VolumeController"; private static final int STREAM = AudioManager.STREAM_NOTIFICATION; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/NotificationPanel.java b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/NotificationPanel.java index b431287..87fc6fc 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/NotificationPanel.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/NotificationPanel.java @@ -34,6 +34,7 @@ import android.view.ViewTreeObserver; import android.view.animation.AccelerateInterpolator; import android.view.animation.DecelerateInterpolator; import android.view.animation.Interpolator; +import android.widget.ImageView; import android.widget.RelativeLayout; import com.android.systemui.ExpandHelper; @@ -54,8 +55,8 @@ public class NotificationPanel extends RelativeLayout implements StatusBarPanel, boolean mHasClearableNotifications = false; int mNotificationCount = 0; NotificationPanelTitle mTitleArea; - View mSettingsButton; - View mNotificationButton; + ImageView mSettingsButton; + ImageView mNotificationButton; View mNotificationScroller; ViewGroup mContentFrame; Rect mContentArea = new Rect(); @@ -94,8 +95,8 @@ public class NotificationPanel extends RelativeLayout implements StatusBarPanel, mTitleArea = (NotificationPanelTitle) findViewById(R.id.title_area); mTitleArea.setPanel(this); - mSettingsButton = findViewById(R.id.settings_button); - mNotificationButton = findViewById(R.id.notification_button); + mSettingsButton = (ImageView) findViewById(R.id.settings_button); + mNotificationButton = (ImageView) findViewById(R.id.notification_button); mNotificationScroller = findViewById(R.id.notification_scroller); mContentFrame = (ViewGroup)findViewById(R.id.content_frame); @@ -449,5 +450,15 @@ public class NotificationPanel extends RelativeLayout implements StatusBarPanel, mSettingsButton.setVisibility(settingsEnabled ? View.VISIBLE : View.GONE); } } + + public void refreshLayout(int layoutDirection) { + // Force asset reloading + mSettingsButton.setImageDrawable(null); + mSettingsButton.setImageResource(R.drawable.ic_notify_settings); + + // Force asset reloading + mNotificationButton.setImageDrawable(null); + mNotificationButton.setImageResource(R.drawable.ic_notifications); + } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/SettingsView.java b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/SettingsView.java index f71842e..e0dcbcd 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/SettingsView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/SettingsView.java @@ -30,11 +30,11 @@ import android.widget.ImageView; import android.widget.TextView; import com.android.systemui.R; +import com.android.systemui.settings.BrightnessController; +import com.android.systemui.settings.ToggleSlider; import com.android.systemui.statusbar.policy.AirplaneModeController; import com.android.systemui.statusbar.policy.AutoRotateController; -import com.android.systemui.statusbar.policy.BrightnessController; import com.android.systemui.statusbar.policy.DoNotDisturbController; -import com.android.systemui.statusbar.policy.ToggleSlider; import com.android.systemui.statusbar.policy.VolumeController; public class SettingsView extends LinearLayout implements View.OnClickListener { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java index 86c247a..3d6bfe7 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java @@ -291,7 +291,7 @@ public class TabletStatusBar extends BaseStatusBar implements | WindowManager.LayoutParams.FLAG_SPLIT_TOUCH | WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED, PixelFormat.TRANSLUCENT); - lp.gravity = Gravity.BOTTOM | Gravity.RIGHT; + lp.gravity = Gravity.BOTTOM | Gravity.END; lp.setTitle("NotificationPanel"); lp.softInputMode = WindowManager.LayoutParams.SOFT_INPUT_STATE_UNCHANGED | WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING; @@ -322,7 +322,7 @@ public class TabletStatusBar extends BaseStatusBar implements | WindowManager.LayoutParams.FLAG_SPLIT_TOUCH | WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED, PixelFormat.TRANSLUCENT); - lp.gravity = Gravity.BOTTOM | Gravity.RIGHT; + lp.gravity = Gravity.BOTTOM | Gravity.END; lp.setTitle("InputMethodsPanel"); lp.windowAnimations = R.style.Animation_RecentPanel; @@ -345,7 +345,7 @@ public class TabletStatusBar extends BaseStatusBar implements | WindowManager.LayoutParams.FLAG_SPLIT_TOUCH | WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED, PixelFormat.TRANSLUCENT); - lp.gravity = Gravity.BOTTOM | Gravity.RIGHT; + lp.gravity = Gravity.BOTTOM | Gravity.END; lp.setTitle("CompatModePanel"); lp.windowAnimations = android.R.style.Animation_Dialog; @@ -381,6 +381,7 @@ public class TabletStatusBar extends BaseStatusBar implements @Override protected void onConfigurationChanged(Configuration newConfig) { + super.onConfigurationChanged(newConfig); loadDimens(); mNotificationPanelParams.height = getNotificationPanelHeight(); mWindowManager.updateViewLayout(mNotificationPanel, mNotificationPanelParams); @@ -389,6 +390,11 @@ public class TabletStatusBar extends BaseStatusBar implements updateSearchPanel(); } + @Override + protected void refreshLayout(int layoutDirection) { + mNotificationPanel.refreshLayout(layoutDirection); + } + protected void loadDimens() { final Resources res = mContext.getResources(); @@ -612,7 +618,7 @@ public class TabletStatusBar extends BaseStatusBar implements | WindowManager.LayoutParams.FLAG_SPLIT_TOUCH | WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED, PixelFormat.TRANSLUCENT); - lp.gravity = Gravity.BOTTOM | Gravity.LEFT; + lp.gravity = Gravity.BOTTOM | Gravity.START; lp.setTitle("RecentsPanel"); lp.windowAnimations = com.android.internal.R.style.Animation_RecentApplications; lp.softInputMode = WindowManager.LayoutParams.SOFT_INPUT_STATE_UNCHANGED @@ -638,7 +644,7 @@ public class TabletStatusBar extends BaseStatusBar implements lp.flags |= WindowManager.LayoutParams.FLAG_DIM_BEHIND; lp.dimAmount = 0.7f; } - lp.gravity = Gravity.BOTTOM | Gravity.LEFT; + lp.gravity = Gravity.BOTTOM | Gravity.START; lp.setTitle("SearchPanel"); // TODO: Define custom animation for Search panel lp.windowAnimations = com.android.internal.R.style.Animation_RecentApplications; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletTicker.java b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletTicker.java index ea97941..0859874 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletTicker.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletTicker.java @@ -226,7 +226,7 @@ public class TabletTicker WindowManager.LayoutParams lp = new WindowManager.LayoutParams(width, mLargeIconHeight, WindowManager.LayoutParams.TYPE_NAVIGATION_BAR_PANEL, windowFlags, PixelFormat.TRANSLUCENT); - lp.gravity = Gravity.BOTTOM | Gravity.RIGHT; + lp.gravity = Gravity.BOTTOM | Gravity.END; // lp.windowAnimations = com.android.internal.R.style.Animation_Toast; mLayoutTransition = new LayoutTransition(); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/tv/TvStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/tv/TvStatusBar.java index 519d3c1..413cc78 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/tv/TvStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/tv/TvStatusBar.java @@ -145,4 +145,9 @@ public class TvStatusBar extends BaseStatusBar { @Override public void animateExpandSettingsPanel() { } + + @Override + protected void refreshLayout(int layoutDirection) { + } + } |