summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--AndroidManifest.xml6
-rw-r--r--proguard.flags1
-rw-r--r--res/drawable-hdpi/ic_privacy_guard.pngbin0 -> 1523 bytes
-rw-r--r--res/drawable-hdpi/ic_privacy_guard_off.pngbin0 -> 1810 bytes
-rw-r--r--res/drawable-mdpi/ic_privacy_guard.pngbin0 -> 1250 bytes
-rw-r--r--res/drawable-mdpi/ic_privacy_guard_off.pngbin0 -> 1507 bytes
-rw-r--r--res/drawable-xhdpi/ic_privacy_guard.pngbin0 -> 1579 bytes
-rw-r--r--res/drawable-xhdpi/ic_privacy_guard_off.pngbin0 -> 1642 bytes
-rw-r--r--res/drawable-xxhdpi/ic_privacy_guard.pngbin0 -> 1694 bytes
-rw-r--r--res/drawable-xxhdpi/ic_privacy_guard_off.pngbin0 -> 1743 bytes
-rw-r--r--res/layout/preference_memoryusage.xml23
-rw-r--r--res/layout/privacy_guard_manager.xml46
-rw-r--r--res/layout/privacy_guard_manager_list_row.xml49
-rw-r--r--res/menu/privacy_guard_manager.xml28
-rw-r--r--res/values-af/cm_strings.xml42
-rw-r--r--res/values-cs/cm_strings.xml83
-rw-r--r--res/values-de/cm_strings.xml23
-rw-r--r--res/values-es/cm_strings.xml22
-rw-r--r--res/values-es/strings.xml2
-rw-r--r--res/values-fr/cm_strings.xml21
-rw-r--r--res/values-hu/cm_strings.xml23
-rw-r--r--res/values-it/cm_strings.xml23
-rw-r--r--res/values-nl/cm_strings.xml173
-rw-r--r--res/values-pt/cm_arrays.xml4
-rw-r--r--res/values-pt/cm_strings.xml23
-rw-r--r--res/values-ru/cm_strings.xml29
-rw-r--r--res/values-sk/cm_strings.xml17
-rw-r--r--res/values/cm_strings.xml29
-rw-r--r--res/xml/device_admin_lockscreen.xml5
-rw-r--r--res/xml/display_rotation.xml6
-rw-r--r--res/xml/lockscreen_interface_settings.xml140
-rw-r--r--res/xml/privacy_guard_prefs.xml26
-rw-r--r--res/xml/security_settings_app_cyanogenmod.xml10
-rw-r--r--src/com/android/settings/AccessibilitySettings.java3
-rw-r--r--src/com/android/settings/DeviceInfoSettings.java17
-rw-r--r--src/com/android/settings/DisplaySettings.java24
-rw-r--r--src/com/android/settings/SecuritySettings.java13
-rw-r--r--src/com/android/settings/SettingsPreferenceFragment.java7
-rw-r--r--src/com/android/settings/applications/InstalledAppDetails.java28
-rw-r--r--src/com/android/settings/cyanogenmod/DisplayRotation.java24
-rw-r--r--src/com/android/settings/cyanogenmod/LockscreenInterface.java65
-rw-r--r--src/com/android/settings/cyanogenmod/QuickSettings.java90
-rw-r--r--src/com/android/settings/cyanogenmod/QuickSettingsTiles.java63
-rw-r--r--src/com/android/settings/cyanogenmod/QuickSettingsUtil.java197
-rw-r--r--src/com/android/settings/cyanogenmod/privacyguard/PrivacyGuardAppListAdapter.java140
-rw-r--r--src/com/android/settings/cyanogenmod/privacyguard/PrivacyGuardManager.java346
-rw-r--r--src/com/android/settings/cyanogenmod/privacyguard/PrivacyGuardPrefs.java86
-rw-r--r--src/com/android/settings/deviceinfo/StorageVolumePreferenceCategory.java62
-rw-r--r--src/com/android/settings/deviceinfo/UsageBarPreference.java64
-rw-r--r--src/com/android/settings/inputmethod/StylusGestures.java3
50 files changed, 1716 insertions, 370 deletions
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 4939009..eeee2a5 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -96,6 +96,12 @@
android:hardwareAccelerated="true"
android:supportsRtl="true">
+ <receiver android:name=".cyanogenmod.LockscreenInterface$DeviceAdminLockscreenReceiver"
+ android:permission="android.permission.BIND_DEVICE_ADMIN">
+ <meta-data android:name="android.app.device_admin"
+ android:resource="@xml/device_admin_lockscreen" />
+ </receiver>
+
<!-- Only system/su can open this activity -->
<!-- This activity will then call the MultitaskSuRequestActivity to create a new task stack -->
<activity
diff --git a/proguard.flags b/proguard.flags
index 2022452..d0862da 100644
--- a/proguard.flags
+++ b/proguard.flags
@@ -14,6 +14,7 @@
-keep class com.android.settings.users.*
-keep class com.koushikdutta.**
-keep class com.android.settings.cyanogenmod.superuser.**
+-keep class com.android.settings.cyanogenmod.privacyguard.**
# Keep click responders
-keepclassmembers class com.android.settings.inputmethod.UserDictionaryAddWordActivity {
diff --git a/res/drawable-hdpi/ic_privacy_guard.png b/res/drawable-hdpi/ic_privacy_guard.png
new file mode 100644
index 0000000..0f58fce
--- /dev/null
+++ b/res/drawable-hdpi/ic_privacy_guard.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_privacy_guard_off.png b/res/drawable-hdpi/ic_privacy_guard_off.png
new file mode 100644
index 0000000..f5dce61
--- /dev/null
+++ b/res/drawable-hdpi/ic_privacy_guard_off.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_privacy_guard.png b/res/drawable-mdpi/ic_privacy_guard.png
new file mode 100644
index 0000000..a749b20
--- /dev/null
+++ b/res/drawable-mdpi/ic_privacy_guard.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_privacy_guard_off.png b/res/drawable-mdpi/ic_privacy_guard_off.png
new file mode 100644
index 0000000..8d9db2e
--- /dev/null
+++ b/res/drawable-mdpi/ic_privacy_guard_off.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_privacy_guard.png b/res/drawable-xhdpi/ic_privacy_guard.png
new file mode 100644
index 0000000..f7b4a4c
--- /dev/null
+++ b/res/drawable-xhdpi/ic_privacy_guard.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_privacy_guard_off.png b/res/drawable-xhdpi/ic_privacy_guard_off.png
new file mode 100644
index 0000000..6425549
--- /dev/null
+++ b/res/drawable-xhdpi/ic_privacy_guard_off.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_privacy_guard.png b/res/drawable-xxhdpi/ic_privacy_guard.png
new file mode 100644
index 0000000..b432ed4
--- /dev/null
+++ b/res/drawable-xxhdpi/ic_privacy_guard.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_privacy_guard_off.png b/res/drawable-xxhdpi/ic_privacy_guard_off.png
new file mode 100644
index 0000000..c1964f4
--- /dev/null
+++ b/res/drawable-xxhdpi/ic_privacy_guard_off.png
Binary files differ
diff --git a/res/layout/preference_memoryusage.xml b/res/layout/preference_memoryusage.xml
index ddc619d..edabcee 100644
--- a/res/layout/preference_memoryusage.xml
+++ b/res/layout/preference_memoryusage.xml
@@ -20,8 +20,27 @@
android:layout_height="wrap_content"
android:minHeight="?android:attr/listPreferredItemHeight"
android:gravity="center_vertical"
- android:paddingEnd="?android:attr/scrollbarSize"
- android:paddingStart="@*android:dimen/preference_widget_width">
+ android:paddingEnd="?android:attr/scrollbarSize">
+
+ <ImageView android:id="@+id/memory_usage_rescan_media"
+ android:layout_width="48dip"
+ android:layout_height="48dip"
+ android:padding="6dp"
+ android:layout_gravity="center"
+ android:clickable="true"
+ android:focusable="false"
+ android:focusableInTouchMode="false"
+ android:src="@drawable/ic_menu_refresh_holo_dark"
+ android:background="@*android:drawable/list_selector_holo_dark"
+ android:contentDescription="@string/storage_rescan_media"/>
+
+ <ProgressBar android:id="@+id/memory_usage_rescan_media_waiting"
+ android:layout_width="48dip"
+ android:layout_height="48dip"
+ android:padding="6dp"
+ android:layout_gravity="center"
+ android:visibility="gone"
+ android:indeterminateOnly="true"/>
<com.android.settings.deviceinfo.PercentageBarChart
android:id="@+id/percentage_bar_chart"
diff --git a/res/layout/privacy_guard_manager.xml b/res/layout/privacy_guard_manager.xml
new file mode 100644
index 0000000..6e6f743
--- /dev/null
+++ b/res/layout/privacy_guard_manager.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2013 Slimroms 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:orientation="vertical"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+ <fragment
+ android:id="@+id/privacy_guard_prefs"
+ android:name="com.android.settings.cyanogenmod.privacyguard.PrivacyGuardPrefs"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content" />
+ <View
+ android:layout_width="match_parent"
+ android:layout_height="1dp"
+ android:background="@android:color/darker_gray"/>
+ <TextView
+ android:id="@+id/error"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="20dip"
+ android:layout_gravity="center"
+ android:gravity="center_horizontal"
+ android:textColor="@android:color/white"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:visibility="gone" />
+ <ListView android:id="@+id/apps_list"
+ android:drawSelectorOnTop="false"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:clipToPadding="false"
+ android:scrollbarStyle="@*android:integer/preference_fragment_scrollbarStyle" />
+</LinearLayout>
diff --git a/res/layout/privacy_guard_manager_list_row.xml b/res/layout/privacy_guard_manager_list_row.xml
new file mode 100644
index 0000000..eb6a327
--- /dev/null
+++ b/res/layout/privacy_guard_manager_list_row.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2013 Slimroms 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.
+-->
+
+<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:minHeight="?android:attr/listPreferredItemHeight"
+ android:paddingStart="?android:attr/listPreferredItemPaddingStart"
+ android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
+ android:paddingTop="8dip"
+ android:paddingBottom="8dip" >
+ <ImageView
+ android:id="@+id/app_icon"
+ android:layout_width="36dip"
+ android:layout_height="36dip"
+ android:layout_marginEnd="8dip"
+ android:layout_gravity="center_vertical"
+ android:scaleType="centerInside"
+ android:contentDescription="@null" />
+ <TextView
+ android:id="@+id/app_title"
+ android:layout_width="0dip"
+ android:layout_gravity="fill_horizontal|center_vertical"
+ android:layout_marginTop="2dip"
+ android:singleLine="true"
+ android:ellipsize="marquee"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:textAlignment="viewStart" />
+ <ImageView
+ android:id="@+id/app_privacy_guard_icon"
+ android:layout_width="@android:dimen/app_icon_size"
+ android:layout_height="@android:dimen/app_icon_size"
+ android:layout_gravity="center_vertical"
+ android:scaleType="centerInside"
+ android:contentDescription="@null" />
+</GridLayout>
diff --git a/res/menu/privacy_guard_manager.xml b/res/menu/privacy_guard_manager.xml
new file mode 100644
index 0000000..a1332d0
--- /dev/null
+++ b/res/menu/privacy_guard_manager.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2013 Slimroms 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.
+-->
+
+<menu xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:id="@+id/help"
+ android:title="@string/privacy_guard_help_title" />
+ <item android:id="@+id/reset"
+ android:title="@string/privacy_guard_reset_title" />
+ <item android:id="@+id/filter_app_permissions"
+ android:title="@string/privacy_guard_manager_filter_permissions"
+ android:checkable="true" />
+ <item android:id="@+id/show_system_apps"
+ android:title="@string/privacy_guard_manager_show_system_apps"
+ android:checkable="true" />
+</menu>
diff --git a/res/values-af/cm_strings.xml b/res/values-af/cm_strings.xml
index c21540a..e32617c 100644
--- a/res/values-af/cm_strings.xml
+++ b/res/values-af/cm_strings.xml
@@ -491,6 +491,7 @@
<string name="title_tile_airplane">Vliegtuigmodus</string>
<string name="title_tile_battery">Battery statistieke</string>
<string name="title_tile_bluetooth">Bluetooth</string>
+ <string name="title_tile_camera">Kamera</string>
<string name="title_tile_brightness">Helderheid</string>
<string name="title_tile_sleep">Sluimer</string>
<string name="title_tile_gps">GPS</string>
@@ -550,8 +551,6 @@
<string name="lock_clock_summary">Bestuur hoe die \'cLock\' tuisskerm en slotskerm legstuk sal vertoon</string>
<string name="stylus_icon_enabled_title">Toon ikoon tydens die gebruik van \'n stillus</string>
<string name="stylus_icon_enabled_summary">Toon die wyser ikoon tydens die beweeg of trek met die stillus</string>
- <string name="lockscreen_maximize_widgets_title">Maksimeer legstukke</string>
- <string name="lockscreen_maximize_widgets_summary">Wys legstukke gemaksimaliseer en die slot geminimaliseer wanneer die skerm aangeskakel word</string>
<string name="lockscreen_custom_background_title">Agtergrond</string>
<string name="lockscreen_custom_background_dialog_title">Kies kleur</string>
<string name="lockscreen_background_result_successful">Agtergrond suksesvol verander</string>
@@ -688,8 +687,8 @@ die verlangde helderheid van die skerm gestoor. Kies \'Verdeel\' om \'n item te
<string name="wifi_channel">Kanaal</string>
<string name="wifi_mhz">MHz</string>
<string name="power_notifications_category_title">Laaier-klank</string>
- <string name="power_notifications_category_summary">Speel \'n klank wanneer die laaier in of uitgeprop word</string>
<string name="power_notifications_enable_title">Aktiveer</string>
+ <string name="power_notifications_enable_summary">Speel \'n klank wanneer die laaier in of uitgeprop word</string>
<string name="power_notifications_vibrate_title">Vibreer</string>
<string name="power_notifications_ringtone_title">Kennisgewing-luitoon</string>
<string name="power_notifications_ringtone_silent">Gedemp</string>
@@ -698,4 +697,41 @@ die verlangde helderheid van die skerm gestoor. Kies \'Verdeel\' om \'n item te
<string name="screen_off_animation_summary">Wys die elektronstraal animasie wanneer die skerm afgeskakel word</string>
<string name="confirm_delete_apn">Die TPN sal verwyder word.</string>
+ <string name="privacy_guard_switch_label">Privaatheidswag</string>
+ <string name="privacy_guard_dlg_title">Aktiveer Privaatheidswag?</string>
+ <string name="privacy_guard_dlg_text">Wanneer Privaatheidswag geaktiveer is, kan programme nie toegang tot persoonlike data soos kontakte, boodskappe en oproep geskiedenis kry nie.</string>
+ <string name="privacy_guard_default_title">Standaard instelling</string>
+ <string name="privacy_guard_default_summary">Aktiveer as \'n standaard instelling vir nuut-geinstalleerde programme</string>
+ <string name="privacy_guard_manager_title">Privaatheidswag</string>
+ <string name="privacy_guard_manager_summary">Bestuur programme se toegang tot persoonlike data</string>
+ <string name="privacy_guard_no_user_apps">Geen programme is geinstalleer nie</string>
+ <string name="privacy_guard_filter_does_not_match">Geen programme met toepaslike regte is geinstaller nie</string>
+ <string name="privacy_guard_help_title">Help</string>
+ <string name="privacy_guard_reset_title">Herstel</string>
+ <string name="privacy_guard_help_text">Selekteer vir watter programme Privaatheidswag geaktiveer is deur die program ikoon te raak. Geselekteerde programme sal nie toegang tot persoonlike data soos kontakte, boodskappe en oproep geskiedenis kan kry nie. Lang-raak op \'n program om die program besonderhede te sien.\n\nBy verstek word interne programme uitgesluit. Om die filters vir sigbare programme te verander, selekteer die toepaslike opsies in die kieslys.</string>
+ <string name="privacy_guard_manager_show_system_apps">Sluit interne programme in</string>
+ <string name="privacy_guard_manager_filter_permissions">Slegs toepaslike regte</string>
+ <string name="privacy_guard_dlg_system_app_text">Wanneer Privaatheidswag vir interne programme geaktiveer word, sal die programme nie toegang tot persoonlike data kan kry nie, dit kan veroorsaak dat ander programme wangedra.</string>
+ <string name="lockscreen_widgets_category_title">Legstukke</string>
+ <string name="lockscreen_maximize_widgets_title">Maksimeer legstukke</string>
+ <string name="lockscreen_maximize_widgets_summary">Wys legstukke gemaksimaliseer en die slot geminimaliseer wanneer die skerm aangeskakel word</string>
+ <string name="lockscreen_enable_widgets_title">Legstuk blaaier</string>
+ <string name="lockscreen_enable_widgets_summary">Laat die aanvoeg en keuse van meervuldige legstuk skerms toe</string>
+ <string name="lockscreen_enable_camera_title">Kamera</string>
+ <string name="lockscreen_enable_camera_summary">Wys die kamera legstuk aan die regterkant van die ontsluit skerm</string>
+ <string name="lockscreen_music_controls_title">Musiek beheer</string>
+ <string name="lockscreen_music_controls_summary">Wys die beheer legstuk wanneer musiek gespeel word</string>
+
+ <string name="notification_vibrate_during_calls_title">Vibreer tydens oproep</string>
+ <string name="notification_vibrate_during_calls_summary">Inkomende kennisgewings sal saggies vibreer tydens oproepe</string>
+
+ <string name="profile_trigger_connect">Konnektering</string>
+ <string name="profile_trigger_disconnect">Diskonnektering</string>
+ <string name="profile_trigger_notrigger">Geen sneller nie</string>
+ <string name="profile_trigger_configure">Sneller konfigurasie</string>
+ <string name="profile_triggers">Snellers</string>
+ <string name="profile_trigger_filter_all">Alle snellers</string>
+ <string name="profile_trigger_filter_wifi">Wi-Fi snellers</string>
+ <string name="profile_trigger_filter_bluetooth">Bluetooth snellers</string>
+
</resources>
diff --git a/res/values-cs/cm_strings.xml b/res/values-cs/cm_strings.xml
index 33558aa..e4a3d2f 100644
--- a/res/values-cs/cm_strings.xml
+++ b/res/values-cs/cm_strings.xml
@@ -27,7 +27,7 @@
<string name="wifi_mode_ibss_short">Ad-Hoc</string>
<string name="wifi_setting_countrycode_title">Kód regionu Wi-Fi</string>
- <string name="wifi_setting_countrycode_summary">Uveďte kód regionu Wi-Fi</string>
+ <string name="wifi_setting_countrycode_summary">Zvolte kód regionu Wi-Fi</string>
<string name="wifi_setting_countrycode_error">Při nastavení kódu regionu došlo k problému.</string>
<string name="wifi_setting_priority_title">Wi-Fi priorita</string>
<string name="wifi_setting_priority_summary">Určit prioritu Wi-Fi sítí</string>
@@ -84,6 +84,9 @@
<string name="notification_convert_sound_to_vibration_title">Vibrace při upozornění</string>
<string name="notification_convert_sound_to_vibration_summary">V režimu pouze vibrace způsobí všechna upozornění vibraci bez ohledu na nastavení jednotlivých aplikací</string>
+ <string name="notification_vibrate_during_calls_title">Vibrovat při hovoru</string>
+ <string name="notification_vibrate_during_calls_summary">Při hovoru způsobí upozornění jemné zavibrování</string>
+
<string name="device_hostname">Hostitelské jméno zařízení</string>
<string name="mod_version">Verze CyanogenModu</string>
@@ -145,7 +148,7 @@
<string name="profiles_add">Přidat</string>
<string name="profile_menu_delete">Smazat</string>
<string name="profile_settings_title">Profil</string>
- <string name="profile_empty_list_profiles_off">Ke konfiguraci a použítí systémových profilů zapněte službu profily.</string>
+ <string name="profile_empty_list_profiles_off">Ke konfiguraci a použítí systémových profilů zapněte službu Profily.</string>
<string name="add_profile_dialog_title">Vytvořit nový profil</string>
<string name="profile_name_title">Název</string>
@@ -185,6 +188,9 @@
<string name="profile_settings">Nastavení profilu</string>
<string name="profile_name">Jméno profilu</string>
+ <string name="profile_trigger_connect">Při připojení</string>
+ <string name="profile_trigger_disconnect">Při odpojení</string>
+ <string name="profile_trigger_notrigger">Bez podmínky</string>
<string name="sound_mode">Režim upozornění</string>
<string name="ringer_mode">Režim vyzvánění</string>
@@ -242,7 +248,7 @@
<string name="screen_security_title">Zámek obrazovky</string>
<string name="screen_security_summary">Zobrazit nebo změnit nastavení zámku obrazovky, zpoždění a časové limity</string>
<string name="additional_options_title">Další možnosti</string>
- <string name="unlock_menu_unlock_title">Tlačítkem Nabídka</string>
+ <string name="unlock_menu_unlock_title">Odemknout tlačítkem Nabídka</string>
<string name="unlock_menu_unlock_summary">Po stisknutí tlačítka Nabídka se zařízení odemkne</string>
<string name="unlock_home_unlock_title">Tlačítkem Domů</string>
<string name="unlock_home_unlock_summary">Po stisknutí tlačítka Domů se zařízení odemkne</string>
@@ -266,10 +272,10 @@
<string name="performance_settings_title">Nastavení výkonu</string>
<string name="performance_settings_warning_title">Postupujte s opatrností!</string>
- <string name="performance_settings_warning">Tato nastavení jsou určena pouze pro experimentování a jakékoliv změny v nich může vést k nestabilitě či pádům systému, ztrátě dat nebo selhání hardware.\nNeposílejte prosím hlášení o chybách, pokud jste je jakkoliv měnili.</string>
+ <string name="performance_settings_warning">Tato nastavení jsou určena pouze pro experimentování a jakékoliv změny v nich můžou vést k nestabilitě či pádům systému, ztrátě dat nebo selhání hardware.\nNeposílejte prosím hlášení o chybách, pokud jste je jakkoliv měnili.</string>
<string name="processor_title">Procesor</string>
- <string name="processor_summary">Změna CPU regulátora a frekvence</string>
+ <string name="processor_summary">Změna CPU regulátoru a frekvence</string>
<string name="cpu_cur_freq_title">Aktuální frekvence CPU</string>
<string name="cpu_governors_title">CPU regulátor</string>
@@ -357,6 +363,11 @@
<string name="increasing_ring_interval_5seconds">5 sekund</string>
<string name="increasing_ring_interval_10seconds">10 sekund</string>
+ <string name="profile_trigger_configure">Upravit vynucenou změnu</string>
+ <string name="profile_triggers">Vynucené změny profilu</string>
+ <string name="profile_trigger_filter_all">Všechny podmínky</string>
+ <string name="profile_trigger_filter_wifi">Wi-Fi podmínky</string>
+ <string name="profile_trigger_filter_bluetooth">Bluetooth podmínky</string>
<string name="profile_write_nfc_tag">Zapsat do NFC tagu</string>
<string name="profile_write_touch_tag">Pro zápis zvolte tag</string>
<string name="profile_write_success">Tag úspěšně zapsán</string>
@@ -479,7 +490,7 @@
<string name="title_toggle_networkmode">2G/3G</string>
<string name="title_toggle_autorotate">Orientace</string>
<string name="title_toggle_airplane">Režim V letadle</string>
- <string name="title_toggle_flashlight">LED baterka</string>
+ <string name="title_toggle_flashlight">Svítilna</string>
<string name="title_toggle_sleep">Uspat</string>
<string name="title_toggle_media_play_pause">Média: Přehrát/pozastavit</string>
<string name="title_toggle_media_previous">Média: Předchozí</string>
@@ -488,13 +499,13 @@
<string name="title_toggle_wimax">WiMAX</string>
<string name="title_button_modes">Módy tlačítek</string>
<string name="pref_brightness_mode_title">Režimy jasu</string>
- <string name="pref_brightness_mode_summary">Zvolte, jak tlačítko jasu přepíná režimy</string>
+ <string name="pref_brightness_mode_summary">Zvolte možnosti přepínání jasu</string>
<string name="cm_brightness_mode_auto">Automaticky</string>
<string name="cm_brightness_mode_dim">Potemnění</string>
<string name="pref_network_mode_title">Režimy sítě</string>
<string name="pref_screentimeout_mode_title">Režimy časového limitu obrazovky</string>
<string name="pref_ring_mode_title">Režim zvuku</string>
- <string name="pref_ring_mode_summary">Zvolte, jak tlačítko zvuku přepíná režimy</string>
+ <string name="pref_ring_mode_summary">Zvolte možnosti přepínání zvuku</string>
<string name="cm_sound_mode_silent">Ticho</string>
<string name="cm_sound_mode_vibrate">Vibrace</string>
<string name="cm_sound_mode_sound">Zvuk</string>
@@ -565,6 +576,8 @@
<string name="usb_mass_storage_title">Paměťové úložiště</string>
<string name="usb_mass_storage_summary">Povolit USB paměťové úložiště</string>
+ <string name="storage_rescan_media">Prohledat úložiště pro média</string>
+ <string name="storage_rescan_media_complete">Prohledávání dokončeno</string>
<string name="adb_over_network">ADB přes síť</string>
<string name="adb_over_network_summary">Povolit ladění přes síťové připojení (např. Wi-Fi nebo síť USB). Toto nastavení bude obnoveno po restartu.</string>
@@ -576,10 +589,10 @@
<string name="lockscreen_long_press_home_title">Dlouhý stisk tlačítka Domů</string>
<string name="lockscreen_long_press_menu_title">Dlouhý stisk tlačítka Nabídka</string>
<string name="lockscreen_buttons_no_action">Žádná akce</string>
- <string name="lockscreen_buttons_flashlight">LED Baterka</string>
+ <string name="lockscreen_buttons_flashlight">Svítilna</string>
<string name="lockscreen_buttons_next">Další skladba</string>
<string name="lockscreen_buttons_previous">Předchozí skladba</string>
- <string name="lockscreen_buttons_playpause">Přehrát/pozastavit hudbu</string>
+ <string name="lockscreen_buttons_playpause">Přehrávat/pozastavit skladbu</string>
<string name="lockscreen_buttons_toggle_sound">Přepnout zvukový režim</string>
<string name="quick_settings_panel_title">Panel rychlého nastavení</string>
@@ -593,6 +606,7 @@
<string name="title_tile_battery">Stav baterie</string>
<string name="title_tile_bluetooth">Bluetooth</string>
<string name="title_tile_brightness">Jas</string>
+ <string name="title_tile_camera">Fotoaparát</string>
<string name="title_tile_sleep">Uspat</string>
<string name="title_tile_gps">GPS</string>
<string name="title_tile_torch">Svítilna</string>
@@ -628,7 +642,7 @@
<string name="title_general">Obecné</string>
<string name="title_quick_pulldown">Rychlé vysunutí nabídky</string>
- <string name="summary_quick_pulldown">Použitím %1$s strany stavového řádku bude vysunuta rychlá nabídka nastavení</string>
+ <string name="summary_quick_pulldown">Tažením dolů z %1$s strany stavového řádku bude vysunuta rychlá nabídka nastavení</string>
<string name="quick_pulldown_summary_left">levé</string>
<string name="quick_pulldown_summary_right">pravé</string>
<string name="quick_pulldown_off">Zrušeno</string>
@@ -659,8 +673,16 @@
<string name="stylus_icon_enabled_title">Zobrazit ikonu, když je použitý stylus</string>
<string name="stylus_icon_enabled_summary">Zobrazit ikonu při najetí kurzoru nebo kreslení pomocí tužky</string>
+ <string name="lockscreen_widgets_category_title">Widgety</string>
<string name="lockscreen_maximize_widgets_title">Maximalizovat widgety</string>
<string name="lockscreen_maximize_widgets_summary">Na obrazovce zámku zobrazit widgety maximalizované a ovládání zámku minimalizované</string>
+ <string name="lockscreen_other_category_title">Ostatní</string>
+ <string name="lockscreen_enable_widgets_title">Stránky widgetů</string>
+ <string name="lockscreen_enable_widgets_summary">Umožnit více stránek pro widgety</string>
+ <string name="lockscreen_enable_camera_title">Widget fotoaparátu</string>
+ <string name="lockscreen_enable_camera_summary">Zobrazit widget fotoaparátu vpravo od obrazovky odmeknutí</string>
+ <string name="lockscreen_music_controls_title">Ovládání hudby</string>
+ <string name="lockscreen_music_controls_summary">Zobrazit ovládací prvky přehrávače při přehrávání hudby</string>
<string name="lockscreen_custom_background_title">Pozadí</string>
<string name="lockscreen_custom_background_dialog_title">Zvolte barvu</string>
@@ -769,26 +791,26 @@ jednotlivě měnit a tím zvětšit počet řídících bodů. \'Odstranit\' sma
<string name="gestures_settings_title">Gesta stylusem</string>
<string name="category_spen_title">Gesta stylusem</string>
<string name="enable_subcat_title">Stylus</string>
- <string name="enable_spen_title_head">Povolit gesta stylusem</string>
- <string name="enable_spen_summary_head">Spustit vlastní akci pomocí tlačítka na stylusu. Upozornění: aplikaci nebude možné použít dokud bude stisknuto tlačítko na stylusu</string>
+ <string name="enable_spen_title_head">Povolit gesta</string>
+ <string name="enable_spen_summary_head">Spustit vlastní akci pomocí gesta a podržením tlačítka na stylusu</string>
<string name="gestures_subcat_title">Gesta</string>
<string name="gestures_left_spen_title_head">Levé posunutí</string>
- <string name="gestures_left_spen_summary_head">Spustit vlastní aplikaci posunutím vlevo</string>
+ <string name="gestures_left_spen_summary_head">Spustit vlastní akci posunutím vlevo</string>
<string name="gestures_right_spen_title_head">Pravé posunutí</string>
- <string name="gestures_right_spen_summary_head">Spustit vlastní aplikaci posunutím vpravo</string>
+ <string name="gestures_right_spen_summary_head">Spustit vlastní akci posunutím vpravo</string>
<string name="gestures_up_spen_title_head">Horní posunutí</string>
- <string name="gestures_up_spen_summary_head">Spustit vlastní aplikaci posunutím nahoru</string>
+ <string name="gestures_up_spen_summary_head">Spustit vlastní akci posunutím nahoru</string>
<string name="gestures_down_spen_title_head">Dolní posunutí</string>
- <string name="gestures_down_spen_summary_head">Spustit vlastní aplikaci posunutím dolů</string>
+ <string name="gestures_down_spen_summary_head">Spustit vlastní akci posunutím dolů</string>
<string name="gestures_long_spen_title_head">Dlouhý dotyk</string>
- <string name="gestures_long_spen_summary_head">Spustit vlastní aplikaci dlouhým dotykem</string>
+ <string name="gestures_long_spen_summary_head">Spustit vlastní akci dlouhým dotykem</string>
<string name="gestures_double_spen_title_head">Dvojklik</string>
- <string name="gestures_double_spen_summary_head">Spustit vlastní aplikaci dvoj-klikem</string>
+ <string name="gestures_double_spen_summary_head">Spustit vlastní akci dvoj-klikem</string>
<string name="gestures_action_empty">Bez akce</string>
- <string name="gestures_action_home">Emulace tlačítka Domů</string>
- <string name="gestures_action_back">Emulace tlačítka Zpět</string>
- <string name="gestures_action_menu">Emulace tlačítka Nabídka</string>
+ <string name="gestures_action_home">Domů</string>
+ <string name="gestures_action_back">Zpět</string>
+ <string name="gestures_action_menu">Nabídka</string>
<string name="gestures_action_search">Spustit vyhledávání</string>
<string name="gestures_action_recent">Nedávné aplikace</string>
@@ -801,6 +823,7 @@ jednotlivě měnit a tím zvětšit počet řídících bodů. \'Odstranit\' sma
<string name="power_notifications_category_title">Zvuk nabíječky</string>
<string name="power_notifications_enable_title">Povolit</string>
+ <string name="power_notifications_enable_summary">Přehrát zvuk při připojení/odpojení nabíječky</string>
<string name="power_notifications_vibrate_title">Vibrovat</string>
<string name="power_notifications_ringtone_title">Zvuk upozornění</string>
<string name="power_notifications_ringtone_silent">Tichý</string>
@@ -809,4 +832,20 @@ jednotlivě měnit a tím zvětšit počet řídících bodů. \'Odstranit\' sma
<string name="screen_off_animation_summary">Zobrazit animaci elektronového paprsku při vypnutí obrazovky</string>
<string name="confirm_delete_apn">Položka APN bude smazána.</string>
+
+ <string name="privacy_guard_switch_label">Povolit Ochranu soukromí</string>
+ <string name="privacy_guard_dlg_title">Povolit Ochranu soukromí?</string>
+ <string name="privacy_guard_dlg_text">Pokud je Ochrana soukromí povolen, aplikaci je znemožněn přístup k osobním datům jako jsou kontakty, zprávy nebo historie volání.</string>
+ <string name="privacy_guard_dlg_system_app_text">Při povolení Ochrany soukromí pro systémové aplikace, tyto aplikace nemůžou přistupovat nebo poskytovat osobní data. To může způsobit chybnou funkci ostatních aplikací.</string>
+ <string name="privacy_guard_default_title">Ve výchozím stavu povolen</string>
+ <string name="privacy_guard_default_summary">Automaticky aktivovat Ochranu soukromí pro nově nainstalované aplikace</string>
+ <string name="privacy_guard_manager_title">Ochrana soukromí</string>
+ <string name="privacy_guard_manager_summary">Spravovat aplikace, které mohou mít přístup k osobním údajům</string>
+ <string name="privacy_guard_no_user_apps">Není nainstalována žádná aplikace</string>
+ <string name="privacy_guard_filter_does_not_match">Není naisntalována žádná aplikace s příslušným oprávněním</string>
+ <string name="privacy_guard_help_title">Nápověda</string>
+ <string name="privacy_guard_reset_title">Obnovit</string>
+ <string name="privacy_guard_help_text">Na této obrazovce můžete vybrat, která aplikace má být sledována Ochranou soukromí. Zvolené aplikace nebudou mít umožněno přistupovat k soukromím údajům, jako jsou kontakty, zprávy nebo seznamy hovorů. Dlouhým stiskem na dané aplikaci se zobrazí její systémové informace.\n\nVe výchozím stavu se systémové aplikace nezobrazují. Pokud chcete zobrazit i systémové aplikace, nebo jen takové, které vyžadují oprávnění pro přístup k osobním údajům, vyberte danou volbu z nabídky.</string>
+ <string name="privacy_guard_manager_show_system_apps">Zobrazit systémové aplikace</string>
+ <string name="privacy_guard_manager_filter_permissions">Filtr oprávnění</string>
</resources>
diff --git a/res/values-de/cm_strings.xml b/res/values-de/cm_strings.xml
index 2f0a817..00daf21 100644
--- a/res/values-de/cm_strings.xml
+++ b/res/values-de/cm_strings.xml
@@ -48,6 +48,8 @@
<string name="end_time_title">Ende</string>
<string name="notification_convert_sound_to_vibration_title">Bei Benachrichtigungen vibrieren</string>
<string name="notification_convert_sound_to_vibration_summary">Im Vibrationsmodus erfolgt unabhängig von in Apps gesetzten Einstellungen bei jeder Benachrichtigung eine Vibration</string>
+ <string name="notification_vibrate_during_calls_title">Während Anruf vibrieren</string>
+ <string name="notification_vibrate_during_calls_summary">Bei eingehenden Benachrichtigungen während eines Anrufs sanft vibrieren</string>
<string name="device_hostname">Hostname des Geräts</string>
<string name="mod_version">CyanogenMod-Version</string>
<string name="mod_version_default">Unbekannt</string>
@@ -568,13 +570,22 @@
<string name="navigation_bar_reset_toast">Die Vorgaben der Navigationsleiste wurden wiederhergestellt</string>
<string name="navigation_bar_menu_editable">Änderbar</string>
<string name="navigation_bar_menu_locked">Gesperrt</string>
+ <string name="lockscreen_widgets_category_title">Widgets</string>
<string name="lockscreen_maximize_widgets_title">Widgets maximieren</string>
<string name="lockscreen_maximize_widgets_summary">Beim Einschalten Widgets maximiert und Bildschirmsperre minimiert anzeigen</string>
+ <string name="lockscreen_enable_widgets_title">Widget-Seiten</string>
+ <string name="lockscreen_enable_widgets_summary">Hinzufügen von zusätzlichen Widgets aktivieren</string>
+ <string name="lockscreen_enable_camera_title">Kamera</string>
+ <string name="lockscreen_enable_camera_summary">Kamera auf der rechten Seite der Bildschirmsperre anzeigen</string>
+ <string name="lockscreen_music_controls_title">Musiksteuerung</string>
+ <string name="lockscreen_music_controls_summary">Während des Abspielens von Musik Wiedergabe-Steuerelemente anzeigen</string>
<string name="headset_category_title">Kopfhörer</string>
<string name="headset_connect_player_title">Musik-App starten</string>
<string name="headset_connect_player_summary">Beim Verbinden eines Kopfhörers die Standard-Musik-App starten</string>
<string name="usb_mass_storage_title">Massenspeicher</string>
<string name="usb_mass_storage_summary">USB-Massenspeicher aktivieren</string>
+ <string name="storage_rescan_media">Speicher erneut durchsuchen</string>
+ <string name="storage_rescan_media_complete">Suchvorgang wurde abgeschlossen</string>
<string name="lockscreen_custom_background_title">Hintergrund</string>
<string name="lockscreen_custom_background_dialog_title">Farbe auswählen</string>
<string name="lockscreen_background_result_successful">Hintergrund wurde geändert</string>
@@ -719,6 +730,16 @@ Mittels \"Entfernen\" kann die ausgewählte Stützstelle aus dem Helligkeitsverl
<string name="privacy_guard_switch_label">Datenschutz aktivieren</string>
<string name="privacy_guard_dlg_title">Datenschutz aktivieren?</string>
<string name="privacy_guard_dlg_text">Bei aktiviertem Datenschutz hat die App keinen Zugriff auf persönliche Daten wie Kontakte, Nachrichten oder das Anrufprotokoll.</string>
- <string name="privacy_guard_default_title">Datenschutz</string>
+ <string name="privacy_guard_dlg_system_app_text">Wenn der Datenschutz für eine integrierte App aktiviert wird, kann diese App weder auf persönliche Daten zugreifen noch diese bereitstellen. Dies kann zu unerwünschtem Verhalten anderer Apps führen.</string>
+ <string name="privacy_guard_default_title">Standardmäßig aktivieren</string>
<string name="privacy_guard_default_summary">Für neu installierte Apps standardmäßig den Datenschutz aktivieren</string>
+ <string name="privacy_guard_manager_title">Datenschutz</string>
+ <string name="privacy_guard_manager_summary">Apps mit Zugriff auf persönliche Daten verwalten</string>
+ <string name="privacy_guard_no_user_apps">Es sind keine Apps installiert</string>
+ <string name="privacy_guard_filter_does_not_match">Es sind keine Apps mit passenden Berechtigungen installiert</string>
+ <string name="privacy_guard_help_title">Hilfe</string>
+ <string name="privacy_guard_reset_title">Zurücksetzen</string>
+ <string name="privacy_guard_help_text">An dieser Stelle kann der Datenschutz für einzelne Apps durch einfache Berührung ein- und ausgeschaltet werden. Ausgewählte Apps haben keinen Zugriff auf persönliche Daten wie Kontakte, Nachrichten oder das Anrufprotokoll. Langes Drücken auf einen Eintrag öffnet die Detailanzeige für diese App.\n\nStandardmäßig werden System-Apps nicht angezeigt. Wenn diese angezeigt werden sollen oder Apps, die anhand ihrer Berechtigungen keinen Zugriff auf persönliche Daten anfordern, ausgeblendet werden sollen, kann dies mit der entsprechenden Menü-Option ausgewählt werden.</string>
+ <string name="privacy_guard_manager_show_system_apps">System-Apps anzeigen</string>
+ <string name="privacy_guard_manager_filter_permissions">Berechtigungsfilter</string>
</resources>
diff --git a/res/values-es/cm_strings.xml b/res/values-es/cm_strings.xml
index ce50070..e2aa9d0 100644
--- a/res/values-es/cm_strings.xml
+++ b/res/values-es/cm_strings.xml
@@ -69,6 +69,8 @@
<string name="end_time_title">Fin</string>
<string name="notification_convert_sound_to_vibration_title">Vibración en notificaciones</string>
<string name="notification_convert_sound_to_vibration_summary">En el modo vibración todas las notificaciones vibrarán, independientemente de la configuración específica de la aplicación</string>
+ <string name="notification_vibrate_during_calls_title">Vibrar durante llamadas</string>
+ <string name="notification_vibrate_during_calls_summary">Las notificaciones entrantes vibrarán levemente durante una llamada</string>
<string name="device_hostname">Nombre del dispositivo</string>
<string name="mod_version">Versión CyanogenMod</string>
<string name="mod_version_default">Desconocida</string>
@@ -495,6 +497,8 @@
<string name="development_tools_title">Iniciar Herramientas</string>
<string name="usb_mass_storage_title">Almacenamiento masivo</string>
<string name="usb_mass_storage_summary">Habilitar el almacenamiento masivo USB</string>
+ <string name="storage_rescan_media">Refrescar contenido multimedia</string>
+ <string name="storage_rescan_media_complete">Refresco completado</string>
<string name="adb_over_network">ADB sobre TCP/IP</string>
<string name="adb_over_network_summary">Activar la depuración TCP/IP sobre las interfaces de red (Wi-Fi, redes USB). Esta configuración se restablece al reiniciar el dispositivo</string>
<string name="adb_over_network_warning">AVISO: ¡Cuando ADB sobre TCP/IP esté activo, el dispositivo estará abierto a intrusiones en todas las redes conectadas, incluida la red de datos GSM!\n\nUsa sólo esta característica cuando estés conectado a redes de confianza.\n\n¿Deseas realmente activar esta función?</string>
@@ -577,8 +581,15 @@
<string name="lock_clock_summary">Ver o cambiar cómo se mostrará el widget del reloj cLock</string>
<string name="stylus_icon_enabled_title">Stylus</string>
<string name="stylus_icon_enabled_summary">Mostrar el cursor cuando se arrastra o dibuja con Stylus</string>
+ <string name="lockscreen_widgets_category_title">Widgets</string>
<string name="lockscreen_maximize_widgets_title">Maximizar widgets</string>
<string name="lockscreen_maximize_widgets_summary">Mostrar los widgets maximizados y el widget de bloqueo minimizado al encender la pantalla</string>
+ <string name="lockscreen_enable_widgets_title">Paginar widgets</string>
+ <string name="lockscreen_enable_widgets_summary">Permitir múltiples páginas de widgets</string>
+ <string name="lockscreen_enable_camera_title">Widget de cámara</string>
+ <string name="lockscreen_enable_camera_summary">Mostrar el widget de cámara a la derecha del bloqueo de pantalla</string>
+ <string name="lockscreen_music_controls_title">Controles de música</string>
+ <string name="lockscreen_music_controls_summary">Mostrar los controles de música mientras ésta se reproduzca</string>
<string name="lockscreen_custom_background_title">Fondo</string>
<string name="lockscreen_custom_background_dialog_title">Elegir color</string>
<string name="lockscreen_background_result_successful">Fondo cambiado correctamente</string>
@@ -717,6 +728,17 @@ podrás crear una nueva línea con el fin de insertar puntos de control adiciona
<string name="privacy_guard_switch_label">Habilitar privacidad</string>
<string name="privacy_guard_dlg_title">¿Habilitar privacidad?</string>
<string name="privacy_guard_dlg_text">Cuando la privacidad está habilitada, la aplicación no podrá acceder a los datos personales, tales como contactos, mensajes o registros de llamadas.</string>
+ <string name="privacy_guard_dlg_system_app_text">Cuando la privacidad está habilitada para una aplicación de sistema, la aplicación no podrá acceder a los datos personales, tales como contactos, mensajes o registros de llamadas. Esto puede causar un comportamiento anómalo en otras aplicaciones.</string>
<string name="privacy_guard_default_title">Privacidad</string>
<string name="privacy_guard_default_summary">Habilitar la privacidad por defecto para nuevas aplicaciones</string>
+ <string name="privacy_guard_manager_title">Privacidad</string>
+ <string name="privacy_guard_manager_summary">Gestionar las aplicaciones que podrán acceder a los datos personales</string>
+ <string name="privacy_guard_no_user_apps">No hay aplicaciones instaladas</string>
+ <string name="privacy_guard_filter_does_not_match">No hay aplicaciones instaladas con permisos relevantes</string>
+ <string name="privacy_guard_help_title">Ayuda</string>
+ <string name="privacy_guard_reset_title">Restablecer</string>
+ <string name="privacy_guard_help_text">En esta pantalla podrás elegir las aplicaciones para las que activar la privacidad, tan solo con tocar sobre ellas. Las aplicaciones seleccionadas no podrán acceder a los datos personales, tales como contactos, mensajes o registros de llamadas. Una pulsación larga mostrará los detalles de la aplicación.\n\nPor defecto, las aplicaciones del sistema no están visibles. Si deseas mostrarlas o filtrar aquellas que definen permisos de acceso a los datos personales, selecciona la opción correspondiente en el menú.</string>
+ <string name="privacy_guard_manager_show_system_apps">Aplicaciones del sistema</string>
+ <string name="privacy_guard_manager_filter_permissions">Filtrar permisos</string>
+
</resources>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index b058035..3b5ef23 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -1076,7 +1076,7 @@
<string name="show_background_processes" msgid="2009840211972293429">"Procesos en caché"</string>
<string name="reset_app_preferences" msgid="1321050641018356925">"Restablecer preferencias"</string>
<string name="reset_app_preferences_title" msgid="6093179367325336662">"¿Restablecer preferencias?"</string>
- <string name="reset_app_preferences_desc" msgid="1118129530999596317">"Se restablecerán todas las preferencias de:"\n\n" "<li>"Aplicaciones inhabilitadas"</li>\n" "<li>"Notificaciones de aplicaciones inhabilitadas"</li>\n" "<li>"Aplicaciones para acciones predeterminadas"</li>\n" "<li>"Restricciones de datos en segundo plano para aplicaciones"</li>\n\n"No perderás los datos de las aplicaciones."</string>
+ <string name="reset_app_preferences_desc" msgid="1118129530999596317">"Se restablecerán todas las preferencias de:"\n\n" "<li>"Aplicaciones inhabilitadas"</li>\n" "<li>"Notificaciones de aplicaciones inhabilitadas"</li>\n" "<li>"Aplicaciones para acciones predeterminadas"</li>\n" "<li>"Restricciones de datos en segundo plano para aplicaciones"</li>\n" "<li>"La protección de la privacidad"</li>\n\n"No perderás los datos de las aplicaciones."</string>
<string name="reset_app_preferences_button" msgid="2559089511841281242">"Restablecer aplicaciones"</string>
<string name="manage_space_text" msgid="8852711522447794676">"Administrar espacio"</string>
<string name="filter" msgid="2018011724373033887">"Filtrar"</string>
diff --git a/res/values-fr/cm_strings.xml b/res/values-fr/cm_strings.xml
index 9b8f32c..8fdffab 100644
--- a/res/values-fr/cm_strings.xml
+++ b/res/values-fr/cm_strings.xml
@@ -67,6 +67,8 @@
<string name="end_time_title">Fin</string>
<string name="notification_convert_sound_to_vibration_title">Vibrer à la notification</string>
<string name="notification_convert_sound_to_vibration_summary">En mode vibreur, toutes les notifications vibrent indépendamment des paramètres individuels des applications</string>
+ <string name="notification_vibrate_during_calls_title">Vibreur pendant un appel</string>
+ <string name="notification_vibrate_during_calls_summary">Les notifications vibrent légèrement pendant un appel téléphonique</string>
<string name="device_hostname">Nom d\'hôte de l\'appareil</string>
<string name="mod_version">Version CyanogenMod</string>
<string name="mod_version_default">Inconnue</string>
@@ -496,6 +498,8 @@
<string name="development_tools_title">Outils de développement</string>
<string name="usb_mass_storage_title">Stockage de masse</string>
<string name="usb_mass_storage_summary">Activer le stockage de masse USB</string>
+ <string name="storage_rescan_media">Analyser les médias du volume de stockage</string>
+ <string name="storage_rescan_media_complete">Analyse terminée</string>
<string name="adb_over_network">ADB par réseau</string>
<string name="adb_over_network_summary">Activer le débogage TCP/IP sur toutes les interfaces réseaux (réseaux USB, Wi-Fi et Bluetooth). Ce paramètre est rénitialisé au redémarrage</string>
<string name="adb_over_network_warning">ATTENTION : Lorsque cette fonction est activée, votre appareil est ouvert aux intrusions sur toutes les réseaux connectées, y compris via le réseau mobile\u00A0!\n\nN\'utilisez cette fontionnalité que sur des réseaux de confiance.\n\nContinuer\u00A0?</string>
@@ -578,8 +582,15 @@
<string name="lock_clock_summary">Afficher ou modifier la façon dont \'cLock\' est affiché sur l\'écran d\'accueil ou de verrouillage</string>
<string name="stylus_icon_enabled_title">Afficher l\'icône quand un stylet est utilisé</string>
<string name="stylus_icon_enabled_summary">Afficher le pointeur du stylet quand celui-ci approche ou dessine sur l\'écran</string>
+ <string name="lockscreen_widgets_category_title">Widgets</string>
<string name="lockscreen_maximize_widgets_title">Maximiser les widgets</string>
<string name="lockscreen_maximize_widgets_summary">Afficher les widgets maximisés et le système de déverrouillage minimisé lorque l\'écran est déverrouillé</string>
+ <string name="lockscreen_enable_widgets_title">Page de widget</string>
+ <string name="lockscreen_enable_widgets_summary">Autorise l\'ajout et la sélection de plusieurs pages de widgets</string>
+ <string name="lockscreen_enable_camera_title">Widget appareil photo</string>
+ <string name="lockscreen_enable_camera_summary">Afficher le widget de l\'appareil photo à droite de l\'écran de verrouillage</string>
+ <string name="lockscreen_music_controls_title">Contrôle de la musique</string>
+ <string name="lockscreen_music_controls_summary">Afficher le contrôleur de musique lors d\'une lecture en cours</string>
<string name="lockscreen_custom_background_title">Fond d\'écran</string>
<string name="lockscreen_custom_background_dialog_title">Choisir une couleur</string>
<string name="lockscreen_background_result_successful">Fond d\'écran changé avec succès</string>
@@ -702,6 +713,16 @@ Des options supplémentaires sont disponibles en appuyant longtemps sur une lign
<string name="privacy_guard_switch_label">Activer la protection des données</string>
<string name="privacy_guard_dlg_title">Activer la protection des données\u00A0?</string>
<string name="privacy_guard_dlg_text">Lorsque la protection des données est activée, les applications n\'ont pas accès à vos données personnelles telles que les contacts, les messages ou le journal d\'appels.</string>
+ <string name="privacy_guard_dlg_system_app_text">Lorsque la protection des données est activée pour une application système, cette application ne sera pas en mesure d\'accéder ou de fournir des données personnelles. Cela peut provoquer des dysfonctionnements avec d\'autres applications.</string>
<string name="privacy_guard_default_title">Protection des données</string>
<string name="privacy_guard_default_summary">Activer par défaut la protection des données pour les applications nouvellement installées</string>
+ <string name="privacy_guard_manager_title">Protection des données</string>
+ <string name="privacy_guard_manager_summary">Contrôler l\'accès des applications à vos données personnelles</string>
+ <string name="privacy_guard_no_user_apps">Pas d\'application installée</string>
+ <string name="privacy_guard_filter_does_not_match">Aucune application demandant des autorisations sensibles n\'est installée</string>
+ <string name="privacy_guard_help_title">Aide</string>
+ <string name="privacy_guard_reset_title">Réinitialiser</string>
+ <string name="privacy_guard_help_text">Dans cet écran, vous pouvez sélectionner pour quelles applications la protection des données est activée. Les applications sélectionnées ne seront pas en mesure d\'accéder à vos données personnelles telles que les contacts, les messages ou le journal d\'appels. Obtenez les détails de l\'application par un appui long sur celle-ci.\n\nPar défaut, les applications du système ne sont pas affichées. Si vous voulez les afficher ou ne filtrer que les applications qui demandent une autorisation d\'accès à des données personnelles, sélectionnez les options respectives dans le menu.</string>
+ <string name="privacy_guard_manager_show_system_apps">Afficher les applications système</string>
+ <string name="privacy_guard_manager_filter_permissions">Filtre de permissions</string>
</resources>
diff --git a/res/values-hu/cm_strings.xml b/res/values-hu/cm_strings.xml
index 1461fef..e4b4d8a 100644
--- a/res/values-hu/cm_strings.xml
+++ b/res/values-hu/cm_strings.xml
@@ -61,6 +61,8 @@
<string name="end_time_title">Vége</string>
<string name="notification_convert_sound_to_vibration_title">Rezgés értesítéskor</string>
<string name="notification_convert_sound_to_vibration_summary">Rezgő módban az értesítések az egyes alkalmazások beállításaitól függetlenül mindig rezegni fognak</string>
+ <string name="notification_vibrate_during_calls_title">Rezgés hívás közben</string>
+ <string name="notification_vibrate_during_calls_summary">Lágy rezgés engedélyezése hívás közben</string>
<string name="device_hostname">Eszköz elérési neve</string>
<string name="mod_version">CyanogenMod verzió</string>
<string name="mod_version_default">Ismeretlen</string>
@@ -249,6 +251,7 @@
<string name="display_rotation_title">Képernyő elforgatás</string>
<string name="display_rotation_disabled">Letiltva</string>
<string name="display_rotation_unit">fok</string>
+ <string name="display_lockscreen_rotation_title">Képernyőzár elforgatása</string>
<string name="display_rotation_category_title">Forgatás módok</string>
<string name="display_rotation_0_title">0 fok</string>
<string name="display_rotation_90_title">90 fok</string>
@@ -485,6 +488,8 @@
<string name="development_tools_title">Fejlesztői eszközök</string>
<string name="usb_mass_storage_title">USB háttértár</string>
<string name="usb_mass_storage_summary">USB háttértár mód engedélyezése</string>
+ <string name="storage_rescan_media">Médiakeresés újraindítása az adathordozón</string>
+ <string name="storage_rescan_media_complete">Keresés befejezve</string>
<string name="adb_over_network">ADB hálózaton keresztül</string>
<string name="adb_over_network_summary">Engedélyezi a TCP/IP hibakeresést hálózati eszközön keresztül (Wi-Fi, USB hálózatok). Újraindítás után alaphelyzetbe áll vissza.</string>
<string name="adb_over_network_warning">VIGYÁZAT: Ha a funkció engedélyezve van, az eszköz nyitva áll bármilyen behatolásra az összes kapcsolodó hálózaton keresztül!\n\nCsak biztonságos hálózatra csatlakozva érdemes engedélyezni.\n\nBiztosan engedélyezni szeretné?</string>
@@ -567,8 +572,15 @@
<string name="lock_clock_summary">A kezdőképernyőn, illetve a képernyőzáron található \"cLock\" modul beállításai</string>
<string name="stylus_icon_enabled_title">Ikon megjelenítése stylus használatakor</string>
<string name="stylus_icon_enabled_summary">Stylus használatakor megjelenít egy ikont az értesítési sávon</string>
+ <string name="lockscreen_widgets_category_title">Modulok</string>
<string name="lockscreen_maximize_widgets_title">Teljes méretű modulok</string>
<string name="lockscreen_maximize_widgets_summary">Modulok megjelenése maximális méretben (feloldás a lakat ikonnal)</string>
+ <string name="lockscreen_enable_widgets_title">Modul lapozó</string>
+ <string name="lockscreen_enable_widgets_summary">További modulok hozzáadásának és kiválasztásának engedélyezése</string>
+ <string name="lockscreen_enable_camera_title">Kamera modul</string>
+ <string name="lockscreen_enable_camera_summary">Kamera modul megjelenítése a jobb oldali képernyőzáron</string>
+ <string name="lockscreen_music_controls_title">Zenevezérlés</string>
+ <string name="lockscreen_music_controls_summary">Zenelejátszó megjelenítése lejátszáskor</string>
<string name="lockscreen_custom_background_title">Háttérkép</string>
<string name="lockscreen_custom_background_dialog_title">Szín kiválasztása</string>
<string name="lockscreen_background_result_successful">Háttérkép beállítva</string>
@@ -712,6 +724,17 @@ Az \"Eltávolítás\" törli a kiválasztott sort.
<string name="privacy_guard_switch_label">Adatvédelem engedélyezése</string>
<string name="privacy_guard_dlg_title">Engedélyezi az adatvédelemi módot?</string>
<string name="privacy_guard_dlg_text">Amikor az adatvédelmi mód be van kapcsolva, az alkalmazás nem fér hozzá az Ön személyes adataihoz, mint a névjegyzékéhez, üzeneteihez, vagy a hívásnaplójához</string>
+ <string name="privacy_guard_dlg_system_app_text">Amennyiben egy rendszeralkalmazásra aktiválja az adatvédelmi módot, az más alkalmazások hibás működését eredményezheti.</string>
<string name="privacy_guard_default_title">Adatvédelem</string>
<string name="privacy_guard_default_summary">Adatvédelmi mód engedélyezése az újonnan telepített alkalmazások számára</string>
+ <string name="privacy_guard_manager_title">Adatvédelmi beállítások</string>
+ <string name="privacy_guard_manager_summary">Alkalmazások személyes adatokhoz való hozzáférésének korlátozása</string>
+ <string name="privacy_guard_no_user_apps">Nincsenek telepítve alkalmazások</string>
+ <string name="privacy_guard_filter_does_not_match">Nincs telepítve hozzáférést igénylő alkalmazás</string>
+ <string name="privacy_guard_help_title">Súgó</string>
+ <string name="privacy_guard_reset_title">Összes kikapcsolása</string>
+ <string name="privacy_guard_help_text">Ezen a képernyőn egyszerű érintéssel kiválaszthatja, hogy mely alkalmazásoknál legyen aktív az adatvédelmi mód. A kiválasztott alkalmazás nem fog hozzáférni a személyes adataihoz, mint például a névjegyzéke, üzenetei, vagy a hívásnaplója. Egy sort hosszan megérintve megjelenik az adott alkalmazás részleteit tartalmazó képernyő.\n\nAlapértelmezetten a rendszeralkalmazások nem jelennek meg. Amennyiben szeretné, hogy a rendszeralkalmazások, vagy csak azon alkalmazások jelenjenek meg, amelyek hozzáférést kérnek a személyes adatokhoz, válassza ki a megfelelő beállításokat a menüben.</string>
+ <string name="privacy_guard_manager_show_system_apps">Rendszeralkalmazások megjelenítése</string>
+ <string name="privacy_guard_manager_filter_permissions">Hozzáférést kérő alkalmazások</string>
+ <string name="intent_sender_data_label"><xliff:g id="data">Adat:</xliff:g></string>
</resources>
diff --git a/res/values-it/cm_strings.xml b/res/values-it/cm_strings.xml
index ea311d4..89aca38 100644
--- a/res/values-it/cm_strings.xml
+++ b/res/values-it/cm_strings.xml
@@ -64,6 +64,8 @@
<string name="end_time_title">Fine</string>
<string name="notification_convert_sound_to_vibration_title">Vibra alle notifiche</string>
<string name="notification_convert_sound_to_vibration_summary">In modalità vibrazione, tutte le notifiche faranno vibrare il dispositivo indipendentemente dalla impostazioni delle applicazioni</string>
+ <string name="notification_vibrate_during_calls_title">Vibra durante la chiamata</string>
+ <string name="notification_vibrate_during_calls_summary">Le notifiche produrranno una leggera vibrazione durante le chiamate</string>
<string name="device_hostname">Hostname dispositivo</string>
<string name="mod_version">Versione CyanogenMod</string>
<string name="mod_version_default">Sconoscito</string>
@@ -249,6 +251,7 @@
<string name="display_rotation_title">Rotazione schermo</string>
<string name="display_rotation_disabled">Disattivata</string>
<string name="display_rotation_unit">gradi</string>
+ <string name="display_lockscreen_rotation_title">Rotazione schermata sblocco</string>
<string name="display_rotation_category_title">Modalità rotazione schermo</string>
<string name="display_rotation_0_title">0 gradi</string>
<string name="display_rotation_90_title">90 gradi</string>
@@ -487,6 +490,8 @@
<string name="development_tools_title">Esegui dev. tools</string>
<string name="usb_mass_storage_title">Memoria di massa</string>
<string name="usb_mass_storage_summary">Abilita la memoria di massa USB</string>
+ <string name="storage_rescan_media">Riesegui la scansione dei media sulla memoria di massa</string>
+ <string name="storage_rescan_media_complete">Scansione completata</string>
<string name="adb_over_network">ADB attraverso la rete</string>
<string name="adb_over_network_summary">Attiva il debugging TCP/IP attraverso interfacce di rete (Wi-Fi, Reti USB). Questa impostazione è resettata al riavvio</string>
<string name="adb_over_network_warning">ATTENZIONE: Quando è attivo l\'ADB attraverso interfacce di rete il dispositivo è vulnerabile ad intrusioni da parte di tutte le reti connesse, inclusa quella GSM!\n\nUsare questa funzione esclusivamente se si è connessi a reti affidabili.\n\nSei sicuro di voler attivare questa funzione?</string>
@@ -511,6 +516,7 @@
<string name="title_tile_battery">Statistiche batteria</string>
<string name="title_tile_bluetooth">Bluetooth</string>
<string name="title_tile_brightness">Luminosità</string>
+ <string name="title_tile_camera">Fotocamera</string>
<string name="title_tile_sleep">Blocca telefono</string>
<string name="title_tile_gps">GPS</string>
<string name="title_tile_torch">Torcia LED</string>
@@ -566,10 +572,17 @@
<string name="sms_security_check_limit_default">30 (predefinito)</string>
<string name="lock_clock_title">Widget orologio</string>
<string name="lock_clock_summary">Visualizza o modifica le opzioni di visualizzazione di \'cLock\' per la schermata Home o di sblocco</string>
+ <string name="lockscreen_widgets_category_title">Widget</string>
<string name="stylus_icon_enabled_title">Icona uso dello stilo</string>
<string name="stylus_icon_enabled_summary">Mostra l\'icona del puntatore durante il movimento o il disegno con lo stilo</string>
<string name="lockscreen_maximize_widgets_title">Massimizza widget</string>
<string name="lockscreen_maximize_widgets_summary">Mostra i widget massimizzati e lo sblocco minimizzato quando lo schermo viene acceso</string>
+ <string name="lockscreen_enable_widgets_title">Gestore widget</string>
+ <string name="lockscreen_enable_widgets_summary">Consenti di aggiungere e selezionare diverse pagine di widget</string>
+ <string name="lockscreen_enable_camera_title">Widget fotocamera</string>
+ <string name="lockscreen_enable_camera_summary">Mostra il widget fotocamera alla destra della schermata di sblocco</string>
+ <string name="lockscreen_music_controls_title">Controlli musicali</string>
+ <string name="lockscreen_music_controls_summary">Mostra i controlli musicali mentre il player è attivo</string>
<string name="lockscreen_custom_background_title">Sfondo</string>
<string name="lockscreen_custom_background_dialog_title">Colore dello sfondo</string>
<string name="lockscreen_background_result_successful">Sfondo modificato con successo</string>
@@ -710,6 +723,16 @@ inserire punti di controllo aggiuntivi. \'Rimuovi\' cancella la riga selezionata
<string name="privacy_guard_switch_label">Attiva Privacy Guard</string>
<string name="privacy_guard_dlg_title">Attivare Privacy Guard?</string>
<string name="privacy_guard_dlg_text">Quando Privacy Guard è attivato, l\'applicazione non è in grado di accedere a dati personali come contatti, lista chiamate, messaggi.</string>
+ <string name="privacy_guard_dlg_system_app_text">Quando Privacy Guard è attivato per un\'applicazione di sistema, essa non sarà in grado di accedere o di fornire dati personali. Ciò può causare problemi in altre applicazioni.</string>
<string name="privacy_guard_default_title">Privacy Guard</string>
<string name="privacy_guard_default_summary">Attiva Privacy Guard in modo automatico per le nuove applicazioni</string>
+ <string name="privacy_guard_manager_title">Privacy Guard</string>
+ <string name="privacy_guard_manager_summary">Gestisci quali applicazioni hanno accesso ai tuoi dati personali</string>
+ <string name="privacy_guard_no_user_apps">Nessuna applicazione installata</string>
+ <string name="privacy_guard_filter_does_not_match">Nessuna applicazione con permessi di rilievo è installata</string>
+ <string name="privacy_guard_help_title">Guida</string>
+ <string name="privacy_guard_reset_title">Ripristina</string>
+ <string name="privacy_guard_help_text">In questa schermata puoi decidere per quali applicazioni sarà attivo Privacy Guard semplicemente selezionandole. Le applicazioni selezionate non saranno in grado di accedere ai tuoi dati personali, quali contatti, messaggi o elenco chiamate. Una pressione prolungata apre la schermata di dettaglio per l\'applicazione selezionata.\n\nLe applicazioni integrate non sono visualizzate, in modo predefinito. Se vuoi renderle visibili, o visualizzare solo le applicazioni che in base ai loro permessi richiedono un accesso ai tuoi dati personali, attiva le rispettive opzioni nel menu.</string>
+ <string name="privacy_guard_manager_show_system_apps">Mostra applicazioni integrate</string>
+ <string name="privacy_guard_manager_filter_permissions">Filtro sui permessi</string>
</resources>
diff --git a/res/values-nl/cm_strings.xml b/res/values-nl/cm_strings.xml
index a956554..0aa66e2 100644
--- a/res/values-nl/cm_strings.xml
+++ b/res/values-nl/cm_strings.xml
@@ -18,12 +18,22 @@
<string name="default_date_format"><xliff:g id="default_date_format">dd/MM/yyyy</xliff:g></string>
<string name="intent_sender_data_label"><xliff:g id="data">Gegevens:</xliff:g></string>
<string name="debug_intent_sender_label">Foutopsporing toepassen op intent-verzender</string>
+ <string name="testing_sim_toolkit">SIM-toolkit</string>
+ <string name="bluetooth_mas_request">Verzoek tot berichtentoegang</string>
+ <string name="bluetooth_mas_acceptance_dialog_text">%1$s wil toegang tot uw berichten. Toegang toestaan aan %2$s?</string>
+ <string name="bluetooth_mas_remember_choice">Niet meer vragen</string>
+ <string name="wifi_mode">Modus</string>
+ <string name="wifi_mode_ibss">Ad-hoc-netwerk (IBSS)</string>
+ <string name="wifi_mode_ibss_short">Ad hoc</string>
<string name="wifi_setting_countrycode_title">Wi-Fi-regiocode</string>
<string name="wifi_setting_countrycode_summary">Regiocode opgeven voor Wi-Fi</string>
<string name="wifi_setting_countrycode_error">Kan regiocode niet instellen</string>
- <string name="status_imei">IMEI</string>
- <string name="status_imei_sv">IMEISV</string>
- <string name="testing_sim_toolkit">SIM-toolkit</string>
+ <string name="wifi_setting_priority_title">Wi-Fi-prioriteit</string>
+ <string name="wifi_setting_priority_summary">Prioriteit instellen van Wi-Fi-netwerken</string>
+ <string name="volume_adjust_sounds_enable_title">Aanpassingsgeluid volume</string>
+ <string name="volume_adjust_sounds_enable_summary">Geluid afspelen bij aanpassen van volume met volumeknoppen</string>
+ <string name="lockpattern_settings_enable_error_path_title">Patroonfout tonen</string>
+ <string name="lockpattern_settings_enable_dots_title">Patroonpunten tonen</string>
<string name="root_access">Root-toegang</string>
<string name="root_access_warning_title">Root-toegang toestaan?</string>
<string name="root_access_warning_message">Root-toegang toestaan kan zeer gevaarlijk zijn en kan uw systeem onveilig maken</string>
@@ -31,6 +41,8 @@
<string name="root_access_apps">Alleen apps</string>
<string name="root_access_adb">Alleen ADB</string>
<string name="root_access_all">Apps en ADB</string>
+ <string name="accessibility_home_button_answers_call_prerefence_title">Oproep aannemen met thuisknop</string>
+ <string name="headset_category_title">Headset</string>
<string name="ok">OK</string>
<string name="quiet_hours_title">Stille uren</string>
<string name="quiet_hours_summary">Uren instellen waarin apparaat stil moet zijn</string>
@@ -59,12 +71,30 @@
<string name="quiet_hours_active_to">tot</string>
<string name="start_time_title">Begin</string>
<string name="end_time_title">Einde</string>
+ <string name="notification_vibrate_during_calls_title">Trillen tijdens bellen</string>
+ <string name="notification_vibrate_during_calls_summary">Zacht trillen bij inkomende meldingen tijdens het bellen</string>
+ <string name="notification_convert_sound_to_vibration_title">Trillen bij melding</string>
+ <string name="notification_convert_sound_to_vibration_summary">Trillen bij melding in trilstand, ongeacht de app-instelling</string>
<string name="device_hostname">Hostnaam apparaat</string>
<string name="mod_version">CyanogenMod-versie</string>
<string name="mod_version_default">Onbekend</string>
<string name="build_date">Build-datum</string>
<string name="cpu_info">CPU</string>
<string name="mem_info">Geheugen</string>
+ <string name="anonymous_statistics_title">Statistieken</string>
+ <string name="anonymous_statistics_summary">Help CyanogenMod te verbeteren door anonieme statistieken te verzenden</string>
+ <string name="anonymous_statistics_warning_title">Over</string>
+ <string name="anonymous_statistics_warning">Door statistieken verzenden toe te staan worden tijdens het opstarten anonieme gegevens naar de ontwikkelaars van CyanogenMod verzonden om unieke installaties te kunnen volgen. In de gegevens zit een uniek id-nummer verwerkt, dat uw privacy niet schendt.\n\nOm een voorbeeld te zien, tikt u op \'Voorbeeld van gegevens\'.</string>
+ <string name="enable_reporting_title">Statistieken verzenden</string>
+ <string name="preview_data_title">Voorbeeld van gegevens</string>
+ <string name="view_stats_title">Statistieken tonen</string>
+ <string name="anonymous_learn_more">Lees meer</string>
+ <string name="anonymous_notification_desc">Statistieken in-/uitschakelen</string>
+ <string name="preview_id_title">Uniek id</string>
+ <string name="preview_device_title">Apparaat</string>
+ <string name="preview_version_title">Versie</string>
+ <string name="preview_country_title">Land</string>
+ <string name="preview_carrier_title">Provider</string>
<string name="header_category_interface">UITERLIJK</string>
<string name="launcher_settings_title">Launcher</string>
<string name="themes_settings_title">Thema\'s</string>
@@ -338,8 +368,6 @@ Let op:\nAangezien het beginvolume hoger is ingesteld dan het beltoonvolume, wor
<string name="volume_overlay_title">Volumepaneel</string>
<string name="volbtn_music_controls_title">Muziek beheren met volumeknoppen</string>
<string name="volbtn_music_controls_summary">Als het scherm uit is springen de volumeknoppen, indien lang ingedrukt, naar het vorige/volgende nummer</string>
- <string name="headset_connect_player_title">Muziek-app openen</string>
- <string name="headset_connect_player_summary">Standaardmuziek-app openen indien headset wordt aangesloten</string>
<string name="volume_ring_only_description">Beltonen</string>
<string name="ring_mode_title">Belmodus</string>
<string name="ring_mode_normal">Normaal</string>
@@ -365,6 +393,17 @@ Let op:\nAangezien het beginvolume hoger is ingesteld dan het beltoonvolume, wor
<string name="hardware_keys_action_search">Zoek-app</string>
<string name="hardware_keys_action_voice_search">Spraakgestuurd zoeken</string>
<string name="hardware_keys_action_in_app_search">Zoeken in apps</string>
+ <string name="swap_volume_buttons_title">Volumeknoppen omdraaien</string>
+ <string name="swap_volume_buttons_summary">Volumeknoppen omdraaien indien het scherm gedraaid is</string>
+ <string name="navigation_bar_title">Navigatiebalk</string>
+ <string name="navigation_bar_help_text">1 - Kies het vergrendelingspictogram om te beginnen\n\n2 - Kies een knop om een functie aan toe te wijzen of te wijzigen\n\n3 - Raak een knop lang aan om de positie te wijzigen\n\n4 - Tik nogmaals op het vergrendelingspictogram om op te slaan\n\n5 - Tik op \'Herstellen\' om de standaardinstellingen te herstellen\n\n</string>
+ <string name="navigation_bar_tips">&#8226; Acties kunnen slechts aan één knop worden toegewezen\n\n&#8226; De thuisknop kan niet opnieuw worden toegewezen\n\n&#8226; Randknoppen kunnen niet worden herschikt</string>
+ <string name="navigation_bar_tips_title">Snelle tips</string>
+ <string name="navigation_bar_reset_message">Huidige instellingen verwijderen en standaardinstellingen herstellen?</string>
+ <string name="navigation_bar_save_message">Navigatiebalkinstellingen opgeslagen</string>
+ <string name="navigation_bar_reset_toast">Navigatiebalk hersteld naar standaardinstellingen</string>
+ <string name="navigation_bar_menu_editable">Bewerkbaar</string>
+ <string name="navigation_bar_menu_locked">Vergrendeld</string>
<string name="power_widget_title">Energiewidget</string>
<string name="title_expanded_widget">Energiewidget</string>
<string name="power_widget_behavior">Widgetgedrag</string>
@@ -383,6 +422,7 @@ Let op:\nAangezien het beginvolume hoger is ingesteld dan het beltoonvolume, wor
<string name="title_toggle_brightness">Helderheid</string>
<string name="title_toggle_sync">Synchronisatie</string>
<string name="title_toggle_wifiap">Draagbare Wi-Fi-hotspot</string>
+ <string name="title_toggle_screentimeout">Schermtime-out</string>
<string name="title_toggle_mobiledata">Mobiele gegevens</string>
<string name="title_toggle_lockscreen">Schermvergrendeling</string>
<string name="title_toggle_networkmode">Netwerkmodus</string>
@@ -420,6 +460,9 @@ Let op:\nAangezien het beginvolume hoger is ingesteld dan het beltoonvolume, wor
<string name="power_menu_title">Aan/uit-knop</string>
<string name="power_menu_reboot_title">Herstarten</string>
<string name="power_menu_screenshot_title">Schermafdruk</string>
+ <string name="expanded_desktop_disabled">Uitgeschakeld</string>
+ <string name="expanded_desktop_status_bar">Statusbalk zichtbaar</string>
+ <string name="expanded_desktop_no_status_bar">Statusbalk verborgen</string>
<string name="power_menu_expanded_desktop">Uitgebreid bureaublad</string>
<string name="power_menu_profiles_title">Profielen</string>
<string name="power_menu_airplane_title">Vliegmodus</string>
@@ -457,6 +500,8 @@ Let op:\nAangezien het beginvolume hoger is ingesteld dan het beltoonvolume, wor
<string name="adb_notify">USB-foutopsporingsmodus melden</string>
<string name="adb_notify_summary">Melding tonen indien USB-foutopsporingmodus is ingeschakeld</string>
<string name="development_tools_title">Tools openen</string>
+ <string name="usb_mass_storage_title">Massaopslag</string>
+ <string name="usb_mass_storage_summary">USB-massaopslag inschakelen</string>
<string name="adb_over_network">ADB over netwek</string>
<string name="adb_over_network_summary">TCP/IP-foutopsporing inschakelen over netwerkinterfaces (Wi-Fi, USB-netwerken etc.). Wordt hersteld bij opstarten</string>
<string name="adb_over_network_warning">Let op: als ADB over netwerk is ingeschakeld, kan op uw apparaat worden ingebroken via alle aangesloten netwerken, inclusief via uw GSM-gegevensnetwerk!\n\nGebruik deze functie alleen indien u verbonden bent met vertrouwde netwerken.\n\nWeet u zeker dat u deze functie wilt inschakelen?</string>
@@ -501,11 +546,15 @@ Let op:\nAangezien het beginvolume hoger is ingesteld dan het beltoonvolume, wor
<string name="title_tile_nfc">NFC</string>
<string name="title_tile_screen_timeout">Schermtime-out</string>
<string name="title_tile_usb_tether">USB-tethering</string>
+ <string name="title_tile_quiet_hours">Stille uren</string>
+ <string name="title_tile_volume">Volume</string>
+ <string name="title_tile_expanded_desktop">Uitgebreid bureaublad</string>
<string name="title_dynamic_tiles">Dynamische tegels</string>
<string name="dynamic_tiles_note_title">Let op</string>
<string name="dynamic_tiles_note_summary">Dynamische tegels zijn alleen zichtbaar indien opgeroepen door een systeemgebeurtenis</string>
<string name="title_dynamic_alarm">Alarmklok</string>
<string name="title_dynamic_bugreport">Foutrapport</string>
+ <string name="title_dynamic_dock_battery">Dock-accu</string>
<string name="title_dynamic_ime">IME-keuze</string>
<string name="title_dynamic_usbtether">USB-tethering</string>
<string name="title_dynamic_wifi">Draadloze display</string>
@@ -531,33 +580,19 @@ Let op:\nAangezien het beginvolume hoger is ingesteld dan het beltoonvolume, wor
<string name="sms_security_check_limit_title">Limiet sms-berichten</string>
<string name="sms_security_check_limit_summary">Apps kunnen %d berichten verzenden in 30 minuten zonder bevestiging</string>
<string name="sms_security_check_limit_default">30 (standaard)</string>
- <string name="title_toggle_screentimeout">Schermtime-out</string>
<string name="lock_clock_title">Klokwidget</string>
<string name="lock_clock_summary">Weergave beheren van \'cLock\'</string>
<string name="stylus_icon_enabled_title">Pictogram bij stylusgebruik</string>
<string name="stylus_icon_enabled_summary">Cursor tonen als een stylus wordt gebruikt</string>
- <string name="navigation_bar_title">Navigatiebalk</string>
- <string name="navigation_bar_help_text">1 - Kies het vergrendelingspictogram om te beginnen\n\n2 - Kies een knop om een functie aan toe te wijzen of te wijzigen\n\n3 - Raak een knop lang aan om de positie te wijzigen\n\n4 - Tik nogmaals op het vergrendelingspictogram om op te slaan\n\n5 - Tik op \'Herstellen\' om de standaardinstellingen te herstellen\n\n</string>
- <string name="navigation_bar_tips">&#8226; Acties kunnen slechts aan één knop worden toegewezen\n\n&#8226; De thuisknop kan niet opnieuw worden toegewezen\n\n&#8226; Randknoppen kunnen niet worden herschikt</string>
- <string name="navigation_bar_tips_title">Snelle tips</string>
- <string name="navigation_bar_reset_message">Huidige instellingen verwijderen en standaardinstellingen herstellen?</string>
- <string name="navigation_bar_save_message">Navigatiebalkinstellingen opgeslagen</string>
- <string name="navigation_bar_reset_toast">Navigatiebalk hersteld naar standaardinstellingen</string>
- <string name="navigation_bar_menu_editable">Bewerkbaar</string>
- <string name="navigation_bar_menu_locked">Vergrendeld</string>
- <string name="accessibility_home_button_answers_call_prerefence_title">Oproep aannemen met thuisknop</string>
- <string name="headset_category_title">Headset</string>
+ <string name="lockscreen_widgets_category_title">Widgets</string>
<string name="lockscreen_maximize_widgets_title">Widgets maximaliseren</string>
<string name="lockscreen_maximize_widgets_summary">Widgets gemaximaliseerd en ontgrendeling geminimaliseerd tonen indien het scherm wordt ingeschakeld</string>
- <string name="bluetooth_mas_request">Verzoek tot berichtentoegang</string>
- <string name="bluetooth_mas_acceptance_dialog_text">%1$s wil toegang tot uw berichten. Toegang toestaan aan %2$s?</string>
- <string name="bluetooth_mas_remember_choice">Niet meer vragen</string>
- <string name="wifi_setting_priority_title">Wi-Fi-prioriteit</string>
- <string name="wifi_setting_priority_summary">Prioriteit instellen van Wi-Fi-netwerken</string>
- <string name="notification_convert_sound_to_vibration_title">Trillen bij melding</string>
- <string name="notification_convert_sound_to_vibration_summary">Apparaat laten trillen bij melding in trilstand, ongeacht de app-instelling</string>
- <string name="usb_mass_storage_title">Massaopslag</string>
- <string name="usb_mass_storage_summary">USB-massaopslag inschakelen</string>
+ <string name="lockscreen_enable_widgets_title">Widgetschermen</string>
+ <string name="lockscreen_enable_widgets_summary">Meerdere widgetschermen kiezen en toevoegen</string>
+ <string name="lockscreen_enable_camera_title">Camera</string>
+ <string name="lockscreen_enable_camera_summary">Camerawidget aan de rechterkant van het vergrendelscherm laten zien</string>
+ <string name="lockscreen_music_controls_title">Muziekknoppen</string>
+ <string name="lockscreen_music_controls_summary">Muziekknoppen laten zien tijdens muziek afspelen</string>
<string name="lockscreen_custom_background_title">Achtergrond</string>
<string name="lockscreen_custom_background_dialog_title">Kies een kleur</string>
<string name="lockscreen_background_result_successful">Achtergrond succesvol gewijzigd</string>
@@ -565,21 +600,23 @@ Let op:\nAangezien het beginvolume hoger is ingesteld dan het beltoonvolume, wor
<string name="lockscreen_background_color_fill">Vullen met een kleur</string>
<string name="lockscreen_background_custom_image">Aangepaste afbeelding</string>
<string name="lockscreen_background_default_wallpaper">Standaardachtergrond</string>
- <string name="title_tile_quiet_hours">Stille uren</string>
+ <string name="headset_connect_player_title">Muziek-app openen</string>
+ <string name="headset_connect_player_summary">Standaardmuziek-app openen indien headset wordt aangesloten</string>
<string name="safe_headset_volume_title">Veilig headsetvolume</string>
<string name="safe_headset_volume_summary">Hoog volume voorkomen als de headset voor het eerst wordt aangesloten</string>
<string name="cyanogenmod_waiver_title">Afstandsverklaring</string>
<string name="cyanogenmod_waiver_body">Het wijzigen van deze instelling kan in overtreding zijn met de regelgeving in uw staat/land.\n\nDoor te tikken op \'OK\' erkent u deze waarschuwing en doet u afstand van en vrijwaart u CyanogenMod en/of haar bijdragers van alle wettelijke verplichtingen</string>
- <string name="expanded_desktop_disabled">Uitgeschakeld</string>
- <string name="expanded_desktop_status_bar">Statusbalk zichtbaar</string>
- <string name="expanded_desktop_no_status_bar">Statusbalk verborgen</string>
<string name="light_sensor_current_value">Huidige lichtsensorwaarde: <xliff:g id="light_level">%d</xliff:g> lux</string>
<string name="auto_brightness_dialog_title">Autom. helderheidsstanden</string>
<string name="auto_brightness_level_format"><xliff:g id="level">%1$d</xliff:g> lux</string>
<string name="auto_brightness_last_level_format"><xliff:g id="level">%1$d</xliff:g> -\n\u221e lux</string>
<string name="auto_brightness_adjust_button">Aanpassen</string>
+ <string name="auto_brightness_close_button">Sluiten</string>
<string name="auto_brightness_reset_button">Herstellen</string>
<string name="auto_brightness_split_dialog_title">Helderheidsstand opsplitsen</string>
+ <string name="auto_brightness_level_dialog_title">Lichtniveau-instelling</string>
+ <string name="auto_brightness_lux">Omgevingslichtsterkte (lux)</string>
+ <string name="auto_brightness_backlight">Schermhelderheid (%)</string>
<string name="auto_brightness_reset_dialog_title">Standen herstellen?</string>
<string name="auto_brightness_reset_confirmation">Alle helderheidsstanden worden hersteld naar standaard</string>
<string name="auto_brightness_split_lux_format">Plaats van opsplitsing (tussen <xliff:g id="min">%1$d</xliff:g> en <xliff:g id="max">%2$d</xliff:g> lux)</string>
@@ -587,15 +624,25 @@ Let op:\nAangezien het beginvolume hoger is ingesteld dan het beltoonvolume, wor
<string name="auto_brightness_menu_edit">Aanpassen</string>
<string name="auto_brightness_menu_split">Opsplitsen</string>
<string name="auto_brightness_menu_remove">Verwijderen</string>
- <string name="volume_adjust_sounds_enable_title">Aanpassingsgeluid volume</string>
- <string name="volume_adjust_sounds_enable_summary">Geluid afspelen bij aanpassen van volume met volumeknoppen</string>
+ <string name="auto_brightness_preview">Voorbeeld</string>
+ <string name="auto_brightness_preview_dialog_title">Voorbeeld helderheidscurve</string>
+ <string name="auto_brightness_help_dialog_title">Help</string>
+ <string name="auto_brightness_help_text"><b>Hoe wordt de helderheid berekend?</b>
+\n\n
+De helderheidscurve wordt berekend door <i>kubische spline-interpolatie</i> toe te passen op een bepaald aantal <i>controlepunten</i>. Het is geen \'bucket-type\'-berekening, waarbij de schermhelderheid gelijk blijft voor een specifiek bereik van omgevingslichtsterkte. Op deze manier hebben kleine veranderingen in omgevingslichtsterkte geen grote invloed op de schermhelderheid. Het is echter lastig om de precieze gevolgen van het veranderen van controlepunten te voorspellen.\nOm daarbij te helpen is het mogelijk om een voorbeeld van de helderheidscurve te bekijken. Houd er rekening mee dat het voorbeeld wordt weergegeven met een <i>logaritmische</i> schaal, zodat alle controlepunten apart kunnen worden weergegeven. Als een lineaire schaal gebruikt zou worden, zou het niet mogelijk zijn om de belangrijkere controlepunten te kunnen onderscheiden in het onderste bereik van de omgevingslichtsterkte.
+\n\n
+<b>Hoe kan de helderheidscurve worden bewerkt?</b>
+\n\n
+Elke regel in de lijst van helderheidsstanden komt overeen met één <i>controlepunt</i> op de helderheidscurve. Tijdens het verplaatsen van de schuifbalk wordt de schermhelderheid automatisch aangepast om een voorbeeld te geven van het lichtniveau.\nExtra opties zijn beschikbaar door een regel lang aan te raken. Door \'Aanpassen\' te kiezen kan zowel de omgevingslichtsterkte als de gewenste schermhelderheid aangepast worden. Met \'Opsplitsen\' kan een regel gedupliceerd worden om een extra controlepunt in te voegen en \'Verwijderen\' verwijdert de geselecteerde regel.
+ </string>
+ <string name="auto_brightness_sensitivity_title">Aanpassingsgevoeligheid</string>
+ <string name="auto_brightness_sensitivity_verylow">Zeer laag</string>
+ <string name="auto_brightness_sensitivity_low">Laag</string>
+ <string name="auto_brightness_sensitivity_medium">Gemiddeld</string>
+ <string name="auto_brightness_sensitivity_high">Hoog</string>
+ <string name="auto_brightness_sensitivity_veryhigh">Zeer hoog</string>
<string name="advanced_reboot_title">Geavanceerd herstarten</string>
<string name="advanced_reboot_summary">Indien ontgrendeld, opties tonen in het aan/uit-knopmenu voor herstarten naar recovery of bootloader</string>
- <string name="lockpattern_settings_enable_error_path_title">Patroonfout tonen</string>
- <string name="lockpattern_settings_enable_dots_title">Patroonpunten tonen</string>
- <string name="swap_volume_buttons_title">Volumeknoppen omdraaien</string>
- <string name="swap_volume_buttons_summary">Volumeknoppen omdraaien indien het scherm gedraaid is</string>
- <string name="title_tile_volume">Volume</string>
<string name="navigation_bar_category">Navigatiebalk</string>
<string name="navigation_ring_title">Snelkoppelingen</string>
<string name="navring_target_reset_message">Alle snelkoppelingen herstellen naar standaard?</string>
@@ -627,22 +674,6 @@ Let op:\nAangezien het beginvolume hoger is ingesteld dan het beltoonvolume, wor
<string name="pie_control_trigger_right">Rechterrand scherm</string>
<string name="pie_control_trigger_top">Onderrand scherm</string>
<string name="pie_control_trigger_top_summary">Alleen navigatie wordt bovenaan getoond</string>
- <string name="anonymous_statistics_title">Statistieken</string>
- <string name="anonymous_statistics_summary">Help CyanogenMod te verbeteren door anonieme statistieken te verzenden</string>
- <string name="anonymous_statistics_warning_title">Over</string>
- <string name="anonymous_statistics_warning">Door statistieken verzenden toe te staan worden tijdens het opstarten anonieme gegevens naar de ontwikkelaars van CyanogenMod verzonden om unieke installaties te kunnen volgen. In de gegevens zit een uniek id-nummer verwerkt, dat uw privacy niet schendt.\n\nOm een voorbeeld te zien, tikt u op \'Voorbeeld van gegevens\'.</string>
- <string name="enable_reporting_title">Statistieken verzenden</string>
- <string name="preview_data_title">Voorbeeld van gegevens</string>
- <string name="view_stats_title">Statistieken tonen</string>
- <string name="anonymous_learn_more">Lees meer</string>
- <string name="anonymous_notification_desc">Statistieken in-/uitschakelen</string>
- <string name="preview_id_title">Uniek id</string>
- <string name="preview_device_title">Apparaat</string>
- <string name="preview_version_title">Versie</string>
- <string name="preview_country_title">Land</string>
- <string name="preview_carrier_title">Provider</string>
- <string name="title_tile_expanded_desktop">Uitgebreid bureaublad</string>
- <string name="title_dynamic_dock_battery">Dock-accu</string>
<string name="gestures_settings_title">Stylusgebaren</string>
<string name="category_spen_title">Stylusgebaren</string>
<string name="enable_subcat_title">Stylus</string>
@@ -668,30 +699,6 @@ Let op:\nAangezien het beginvolume hoger is ingesteld dan het beltoonvolume, wor
<string name="gestures_action_search">Zoekknop nabootsen</string>
<string name="gestures_action_recent">Recente apps</string>
<string name="stylus_app_not_installed">%s is niet geïnstalleerd</string>
- <string name="wifi_mode">Modus</string>
- <string name="wifi_mode_ibss">Ad-hoc-netwerk (IBSS)</string>
- <string name="wifi_mode_ibss_short">Ad hoc</string>
- <string name="auto_brightness_close_button">Sluiten</string>
- <string name="auto_brightness_level_dialog_title">Lichtniveau-instelling</string>
- <string name="auto_brightness_lux">Omgevingslichtsterkte (lux)</string>
- <string name="auto_brightness_backlight">Schermhelderheid (%)</string>
- <string name="auto_brightness_preview">Voorbeeld</string>
- <string name="auto_brightness_preview_dialog_title">Voorbeeld helderheidscurve</string>
- <string name="auto_brightness_help_dialog_title">Help</string>
- <string name="auto_brightness_help_text"><b>Hoe wordt de helderheid berekend?</b>
-\n\n
-De helderheidscurve wordt berekend door <i>kubische spline-interpolatie</i> toe te passen op een bepaald aantal <i>controlepunten</i>. Het is geen \'bucket-type\'-berekening, waarbij de schermhelderheid gelijk blijft voor een specifiek bereik van omgevingslichtsterkte. Op deze manier hebben kleine veranderingen in omgevingslichtsterkte geen grote invloed op de schermhelderheid. Het is echter lastig om de precieze gevolgen van het veranderen van controlepunten te voorspellen.\nOm daarbij te helpen is het mogelijk om een voorbeeld van de helderheidscurve te bekijken. Houd er rekening mee dat het voorbeeld wordt weergegeven met een <i>logaritmische</i> schaal, zodat alle controlepunten apart kunnen worden weergegeven. Als een lineaire schaal gebruikt zou worden, zou het niet mogelijk zijn om de belangrijkere controlepunten te kunnen onderscheiden in het onderste bereik van de omgevingslichtsterkte.
-\n\n
-<b>Hoe kan de helderheidscurve worden bewerkt?</b>
-\n\n
-Elke regel in de lijst van helderheidsstanden komt overeen met één <i>controlepunt</i> op de helderheidscurve. Tijdens het verplaatsen van de schuifbalk wordt de schermhelderheid automatisch aangepast om een voorbeeld te geven van het lichtniveau.\nExtra opties zijn beschikbaar door een regel lang aan te raken. Door \'Aanpassen\' te kiezen kan zowel de omgevingslichtsterkte als de gewenste schermhelderheid aangepast worden. Met \'Opsplitsen\' kan een regel gedupliceerd worden om een extra controlepunt in te voegen en \'Verwijderen\' verwijdert de geselecteerde regel.
- </string>
- <string name="auto_brightness_sensitivity_title">Aanpassingsgevoeligheid</string>
- <string name="auto_brightness_sensitivity_verylow">Zeer laag</string>
- <string name="auto_brightness_sensitivity_low">Laag</string>
- <string name="auto_brightness_sensitivity_medium">Gemiddeld</string>
- <string name="auto_brightness_sensitivity_high">Hoog</string>
- <string name="auto_brightness_sensitivity_veryhigh">Zeer hoog</string>
<string name="wifi_ibss_freq_title">Kanaal/frequentie</string>
<string name="wifi_channel">Kanaal</string>
<string name="wifi_mhz">MHz</string>
@@ -707,6 +714,16 @@ Elke regel in de lijst van helderheidsstanden komt overeen met één <i>controle
<string name="privacy_guard_switch_label">Privacybescherming</string>
<string name="privacy_guard_dlg_title">Privacybescherming inschakelen?</string>
<string name="privacy_guard_dlg_text">Als Privacybescherming is ingeschakeld, zal de app geen toegang hebben tot persoonsgegevens zoals contacten, berichten of gespreksstatistieken.</string>
- <string name="privacy_guard_default_title">Privacybescherming</string>
+ <string name="privacy_guard_dlg_system_app_text">Als Privacybescherming is ingeschakeld voor een ingebouwde app, zal de app geen toegang hebben tot persoonsgegevens of persoonsgegevens kunnen verstrekken. Dit kan ervoor zorgen dat andere apps niet meer goed werken.</string>
+ <string name="privacy_guard_default_title">Standaard ingeschakeld</string>
<string name="privacy_guard_default_summary">Privacybescherming standaard inschakelen voor nieuw geïnstalleerde apps</string>
+ <string name="privacy_guard_manager_title">Privacybescherming</string>
+ <string name="privacy_guard_manager_summary">Beheren welke apps toegang hebben tot persoonsgegevens</string>
+ <string name="privacy_guard_no_user_apps">Geen apps geïnstalleerd</string>
+ <string name="privacy_guard_filter_does_not_match">Geen apps geïnstalleerd met relevante machtigingen</string>
+ <string name="privacy_guard_help_title">Help</string>
+ <string name="privacy_guard_reset_title">Opnieuw instellen</string>
+ <string name="privacy_guard_help_text">Op dit scherm kunt u kiezen voor welke apps Privacybescherming ingeschakeld moet zijn door op ze te tikken. Geselecteerde apps zullen geen toegang hebben tot persoonsgegevens zoals contacten, berichten of gespreksstatistieken. Door een app lang aan te raken opent het info-scherm voor die app.\n\nStandaard worden ingebouwde apps niet getoond. Als u deze apps of alleen apps die met hun machtigingen toegang tot persoonsgegevens vragen wilt zien, selecteer u de desbetreffende opties in het menu.</string>
+ <string name="privacy_guard_manager_show_system_apps">Ingebouwde apps tonen</string>
+ <string name="privacy_guard_manager_filter_permissions">Machtigingenfilter</string>
</resources>
diff --git a/res/values-pt/cm_arrays.xml b/res/values-pt/cm_arrays.xml
index 8f7b96c..eab4f4c 100644
--- a/res/values-pt/cm_arrays.xml
+++ b/res/values-pt/cm_arrays.xml
@@ -67,4 +67,8 @@
<item>Cingapura</item>
<item>Brasil</item>
</string-array>
+ <string-array name="entries_screentimeout_widget">
+ <item>15s | 1m | 5m</item>
+ <item>30s | 2m | 5m</item>
+ </string-array>
</resources>
diff --git a/res/values-pt/cm_strings.xml b/res/values-pt/cm_strings.xml
index 7e3eb68..115a2f5 100644
--- a/res/values-pt/cm_strings.xml
+++ b/res/values-pt/cm_strings.xml
@@ -723,4 +723,27 @@ controle adicionais. \'Remover\' apaga a linha selecionada.
<string name="icon_picker_chrome">Chrome</string>
<string name="title_tile_camera">Câmera</string>
<string name="title_tile_nfc">NFC</string>
+ <string name="notification_vibrate_during_calls_title">Vibrar durante a ligação</string>
+ <string name="notification_vibrate_during_calls_summary">Notificações recebidas irão vibrar suavemente durante ligações</string>
+ <string name="lockscreen_music_controls_title">Controles de música</string>
+ <string name="lockscreen_music_controls_summary">Mostrar controles do tocador enquanto uma música estiver tocando</string>
+ <string name="lockscreen_widgets_category_title">Widgets</string>
+ <string name="lockscreen_enable_widgets_title">Paginamento de widget</string>
+ <string name="lockscreen_enable_widgets_summary">Permitir páginas múltiplas de widget a serem adicionadas e selecionadas</string>
+ <string name="lockscreen_enable_camera_title">Widget da câmera</string>
+ <string name="lockscreen_enable_camera_summary">Exibir o widget da câmera à direita da tela de bloqueio</string>
+ <string name="privacy_guard_manager_title">Proteção à Privacidade</string>
+ <string name="privacy_guard_manager_summary">Gerenciar quais aplicativos têm acesso aos seus dados pessoais</string>
+ <string name="privacy_guard_no_user_apps">Nenhum aplicativo está instalado</string>
+ <string name="privacy_guard_filter_does_not_match">Nenhum aplicativo com permissões relevantes está instalado</string>
+ <string name="privacy_guard_help_title">Ajuda</string>
+ <string name="privacy_guard_reset_title">Redefinir</string>
+ <string name="privacy_guard_manager_show_system_apps">Mostrar aplicativos de sistema</string>
+ <string name="privacy_guard_manager_filter_permissions">Filtro de permissão</string>
+ <string name="privacy_guard_help_text">Nesta tela você pode escolher quais aplicativos a Proteção à Privacidade irá ser ativada ao apertar neles. Aplicativos selecionados não poderão acessar seus dados pessoais, como contatos, mensagens e registro de chamadas. A tela de detalhes do aplicativo irá abrir ao tocar e segurar em uma entrada.\n\nPor padrão, aplicativos de sistema não serão mostrados. Se você deseja mostrá-los ou filtrar aplicativos para mostrar somente aqueles requisitando acesso a dados pessoais através das suas permissões, selecione a opção respectiva no menu.</string>
+ <string name="privacy_guard_dlg_system_app_text">Ao ativar a Proteção à Privacidade para um aplicativo de sistema, o aplicativo não será capaz de acessar ou prover dados pessoais. Isto pode causar problemas em outros aplicativos.</string>
+ <string name="storage_rescan_media">Nova varredura por mídia no volume de armazenamento</string>
+ <string name="storage_rescan_media_complete">Varredura completada</string>
+ <string name="notification_light_default_value">Padrão</string>
+ <string name="display_lockscreen_rotation_title">Rotacionar tela de bloqueio</string>
</resources> \ No newline at end of file
diff --git a/res/values-ru/cm_strings.xml b/res/values-ru/cm_strings.xml
index 11be4f3..7e0da3f 100644
--- a/res/values-ru/cm_strings.xml
+++ b/res/values-ru/cm_strings.xml
@@ -50,6 +50,10 @@
<string name="notification_convert_sound_to_vibration_title">Вибрация при уведомлениях</string>
<string name="notification_convert_sound_to_vibration_summary">В режиме \"Вибро\" вибрировать при уведомлениях независимо от настроек приложений</string>
+ <!-- vibrate during phone calls -->
+ <string name="notification_vibrate_during_calls_title">Вибрация во время звонка</string>
+ <string name="notification_vibrate_during_calls_summary">Вибрировать при уведомлениях во время телефонного разговора</string>
+
<!-- Hostname setting -->
<string name="device_hostname">Имя хоста</string>
@@ -324,6 +328,7 @@
<string name="display_rotation_title">Поворот экрана</string>
<string name="display_rotation_disabled">Выключено</string>
<string name="display_rotation_unit">градусов</string>
+ <string name="display_lockscreen_rotation_title">Поворот экрана блокировки</string>
<string name="display_rotation_category_title">Режимы вращения</string>
<string name="display_rotation_0_title">0 градусов</string>
<string name="display_rotation_90_title">90 градусов</string>
@@ -609,6 +614,8 @@
<!-- USB Mass Storage -->
<string name="usb_mass_storage_title">USB-накопитель</string>
<string name="usb_mass_storage_summary">Включить режим USB-накопителя (UMS)</string>
+ <string name="storage_rescan_media">Пересканировать память</string>
+ <string name="storage_rescan_media_complete">Сканирование завершено</string>
<!-- Android debugging over WiFi -->
<string name="adb_over_network">ADB по сети</string>
@@ -716,8 +723,16 @@
<string name="stylus_icon_enabled_title">Указатель пера</string>
<string name="stylus_icon_enabled_summary">Показывать значок указателя при работе с пером</string>
+ <!-- Lock screen widgets -->
+ <string name="lockscreen_widgets_category_title">Виджеты</string>
<string name="lockscreen_maximize_widgets_title">Развёрнутые виджеты</string>
<string name="lockscreen_maximize_widgets_summary">Показывать виджеты экрана блокировки развёрнутыми, а разблокировку экрана в свёрнутом виде</string>
+ <string name="lockscreen_enable_widgets_title">Виджеты приложений</string>
+ <string name="lockscreen_enable_widgets_summary">Разрешить создание нескольких страниц для размещения виджетов</string>
+ <string name="lockscreen_enable_camera_title">Виджет камеры</string>
+ <string name="lockscreen_enable_camera_summary">Показывать виджет камеры справа на экране блокировки</string>
+ <string name="lockscreen_music_controls_title">Управление плеером</string>
+ <string name="lockscreen_music_controls_summary">Показывать кнопки управления плеером во время воспроизведения музыки</string>
<!-- Lock screen background -->
<string name="lockscreen_custom_background_title">Фон</string>
@@ -899,7 +914,17 @@
<string name="privacy_guard_switch_label">Включить режим инкогнито</string>
<string name="privacy_guard_dlg_title">Включить режим инкогнито?</string>
<string name="privacy_guard_dlg_text">Когда включен режим инкогнито, приложение не имеет доступа к персональным данным, таким как контакты, сообщения или журнал вызовов.</string>
+ <string name="privacy_guard_dlg_system_app_text">Системные приложения в режиме инкогнито не смогут получать или предоставлять доступ к персональным данным. Это может вызвать нестабильную работу других приложений.</string>
<string name="privacy_guard_default_title">Режим инкогнито</string>
<string name="privacy_guard_default_summary">Включить режим инкогнито по умолчанию для устанавливаемых приложений</string>
-
-</resources>
+ <string name="privacy_guard_manager_title">Менеджер режима инкогнито</string>
+ <string name="privacy_guard_manager_summary">Управление приложениями, имеющими доступ к персональным данным</string>
+ <string name="privacy_guard_no_user_apps">Нет установленных приложений</string>
+ <string name="privacy_guard_filter_does_not_match">Приложения с соответствующими разрешениями не установлены</string>
+ <string name="privacy_guard_help_title">Помощь</string>
+ <string name="privacy_guard_reset_title">Сброс</string>
+ <string name="privacy_guard_help_text">В этом разделе вы можете выбрать приложения, которые будут работать в режиме инкогнито, просто нажав на них. Такие приложения не будут иметь доступа к персональным данным, таким как контакты, сообщения или журнал вызовов. Долгое нажатие откроет сведения о данном приложении.\n\nПо умолчанию системные приложения не показываются. Если вы хотите отображать их, или хотите отфильтровать приложения по разрешениям, запрашивающим доступ к персональным данным, выберите соответствующий пункт в меню.</string>
+ <string name="privacy_guard_manager_show_system_apps">Системные приложения</string>
+ <string name="privacy_guard_manager_filter_permissions">Фильтр разрешений</string>
+
+</resources> \ No newline at end of file
diff --git a/res/values-sk/cm_strings.xml b/res/values-sk/cm_strings.xml
index a455635..6d8bb0f 100644
--- a/res/values-sk/cm_strings.xml
+++ b/res/values-sk/cm_strings.xml
@@ -354,4 +354,21 @@
<string name="ring_mode_normal">Normálny</string>
<string name="ring_mode_vibrate">Vibrácie</string>
<string name="ring_mode_mute">Umlčaný</string>
+ <string name="screen_off_animation_title">Animácia vypnutia</string>
+ <string name="screen_off_animation_summary">Zobrazí animáciu s elektrónovým lúčom pri vypnutí obrazovky</string>
+ <string name="privacy_guard_switch_label">Povoliť ochranu súkromia</string>
+ <string name="privacy_guard_dlg_title">Povoliť ochranu súkromia?</string>
+ <string name="privacy_guard_dlg_text">Keď je povolená ochrana súkromia, aplikáciám nebude možné pristupovať k osobným údajom ako sú kontakty, správy alebo denníky hovorov.</string>
+ <string name="privacy_guard_dlg_system_app_text">Keď je povolená ochrana súkromia pre zabudovanú aplikáciu, nebude jej umožnené pristupovať alebo poskytovať osobné údaje. To môže spôsobiť nesprávny chod iných aplikácií.</string>
+ <string name="privacy_guard_default_title">Povolené štandardne</string>
+ <string name="privacy_guard_default_summary">Povolí štandardne pre novonainštalované aplikácie</string>
+ <string name="privacy_guard_manager_title">Ochrana súkromia</string>
+ <string name="privacy_guard_manager_summary">Spravuje, ktoré aplikácie majú prístup k vašim osobným údajom</string>
+ <string name="privacy_guard_no_user_apps">Nie sú nainštalované žiadne aplikácie</string>
+ <string name="privacy_guard_filter_does_not_match">Nie sú nainštalované žiadne aplikácie s príslušnými oprávneniami</string>
+ <string name="privacy_guard_help_title">Pomocník</string>
+ <string name="privacy_guard_reset_title">Znovunastaviť</string>
+ <string name="privacy_guard_help_text">V tejto obrazovke môžete jednoduchým ťuknutím zvoliť, pre ktoré aplikácie bude Ochrana súkromia aktívna. Vybratým aplikáciám nebude umožnený prístup k vašim osobným údajom, ako sú kontakty, správy alebo denníky hovorov. Dlhým ťuknutím na záznam sa otvorí obrazovka s podrobnosťami aplikácie pre danú aplikáciu.\n\nŠtandardne nie sú zobrazené zabudované aplikácie. Ak ich chcete zobraziť alebo filtrovať iba aplikácie, ktoré požadujú prístup k osobným údajom podľa ich oprávnení, vyberte zodpovedajúce voľby z ponuky.</string>
+ <string name="privacy_guard_manager_show_system_apps">Zobraziť zabudované aplikácie</string>
+ <string name="privacy_guard_manager_filter_permissions">Filter oprávnení</string>
</resources>
diff --git a/res/values/cm_strings.xml b/res/values/cm_strings.xml
index 745e2c8..cc507c3 100644
--- a/res/values/cm_strings.xml
+++ b/res/values/cm_strings.xml
@@ -187,8 +187,6 @@
<string name="lockscreen_battery_status_title">Battery status</string>
<string name="lockscreen_battery_status_charging">Only when charging</string>
<string name="lockscreen_battery_status_alwayson">Always on</string>
- <string name="lockscreen_music_controls_title">Music controls</string>
- <string name="lockscreen_music_controls_summary">Show player controls while music is playing</string>
<!-- Profiles settings -->
<string name="profiles_settings_title">Profiles</string>
@@ -401,6 +399,7 @@
<string name="display_rotation_title">Rotation</string>
<string name="display_rotation_disabled">Disabled</string>
<string name="display_rotation_unit">degrees</string>
+ <string name="display_lockscreen_rotation_title">Rotate lock screen</string>
<string name="display_rotation_category_title">Rotation modes</string>
<string name="display_rotation_0_title">0 degrees</string>
<string name="display_rotation_90_title">90 degrees</string>
@@ -691,6 +690,8 @@
<!-- USB Mass Storage -->
<string name="usb_mass_storage_title">Mass storage</string>
<string name="usb_mass_storage_summary">Enable USB mass storage</string>
+ <string name="storage_rescan_media">Rescan media for the storage volume</string>
+ <string name="storage_rescan_media_complete">Scan completed</string>
<!-- Android debugging over WiFi -->
<string name="adb_over_network">ADB over network</string>
@@ -795,8 +796,16 @@
<string name="stylus_icon_enabled_title">Show icon when using stylus</string>
<string name="stylus_icon_enabled_summary">Show the pointer icon when hovering or drawing with the stylus</string>
+ <!-- Lock screen widgets -->
+ <string name="lockscreen_widgets_category_title">Widgets</string>
<string name="lockscreen_maximize_widgets_title">Maximize widgets</string>
<string name="lockscreen_maximize_widgets_summary">Show widgets maximized and the unlock minimized when the screen is turned on</string>
+ <string name="lockscreen_enable_widgets_title">Widget pager</string>
+ <string name="lockscreen_enable_widgets_summary">Allow multiple widget pages to be added and selected</string>
+ <string name="lockscreen_enable_camera_title">Camera widget</string>
+ <string name="lockscreen_enable_camera_summary">Show the camera widget to the right of the unlock screen</string>
+ <string name="lockscreen_music_controls_title">Music controls</string>
+ <string name="lockscreen_music_controls_summary">Show player controls while music is playing</string>
<!-- Custom lock screen background -->
<string name="lockscreen_custom_background_title">Background</string>
@@ -974,8 +983,18 @@ two in order to insert additional control points. \'Remove\' deletes the selecte
<!-- Privacy Guard -->
<string name="privacy_guard_switch_label">Enable Privacy Guard</string>
<string name="privacy_guard_dlg_title">Enable Privacy Guard?</string>
- <string name="privacy_guard_dlg_text">When Privacy Guard is enabled, the app will not be able to access personal data such as contacts, messages, or call logs.</string>
- <string name="privacy_guard_default_title">Privacy Guard</string>
- <string name="privacy_guard_default_summary">Enable Privacy Guard by default for newly-installed apps</string>
+ <string name="privacy_guard_dlg_text">When Privacy Guard is enabled, the app will not be able to access personal data such as contacts, messages or call logs.</string>
+ <string name="privacy_guard_dlg_system_app_text">When enabling Privacy Guard for a built-in app, the app will not be able to access or provide personal data. This may cause other apps to misbehave.</string>
+ <string name="privacy_guard_default_title">Enabled by default</string>
+ <string name="privacy_guard_default_summary">Enable by default for newly-installed apps</string>
+ <string name="privacy_guard_manager_title">Privacy Guard</string>
+ <string name="privacy_guard_manager_summary">Manage which apps have access to your personal data</string>
+ <string name="privacy_guard_no_user_apps">No apps are installed</string>
+ <string name="privacy_guard_filter_does_not_match">No apps with relevant permissions are installed</string>
+ <string name="privacy_guard_help_title">Help</string>
+ <string name="privacy_guard_reset_title">Reset</string>
+ <string name="privacy_guard_help_text">In this screen you can choose for which apps Privacy Guard should be active by simply tapping on them. Selected apps will not be able to access your personal data, such as contacts, messages or call logs. Long pressing on an entry opens the app details screen for that app.\n\nBy default built-in apps are not shown. If you want to show them or filter apps to show only the ones requesting access to personal data by their permissions, select the respective options in the menu.</string>
+ <string name="privacy_guard_manager_show_system_apps">Show built-in apps</string>
+ <string name="privacy_guard_manager_filter_permissions">Permission filter</string>
</resources>
diff --git a/res/xml/device_admin_lockscreen.xml b/res/xml/device_admin_lockscreen.xml
new file mode 100644
index 0000000..a6c15a2
--- /dev/null
+++ b/res/xml/device_admin_lockscreen.xml
@@ -0,0 +1,5 @@
+<device-admin xmlns:android="http://schemas.android.com/apk/res/android">
+ <uses-policies>
+ <disable-keyguard-features/>
+ </uses-policies>
+</device-admin>
diff --git a/res/xml/display_rotation.xml b/res/xml/display_rotation.xml
index 86b9e9f..c21de2e 100644
--- a/res/xml/display_rotation.xml
+++ b/res/xml/display_rotation.xml
@@ -21,13 +21,15 @@
<CheckBoxPreference
android:key="accelerometer"
android:title="@string/accelerometer_title" />
-
<CheckBoxPreference
android:key="swap_volume_buttons"
android:title="@string/swap_volume_buttons_title"
android:summary="@string/swap_volume_buttons_summary"
android:dependency="accelerometer" />
-
+ <CheckBoxPreference
+ android:key="lockscreen_rotation"
+ android:title="@string/display_lockscreen_rotation_title"
+ android:dependency="accelerometer" />
<PreferenceCategory
android:key="display_rotation_category"
android:title="@string/display_rotation_category_title" />
diff --git a/res/xml/lockscreen_interface_settings.xml b/res/xml/lockscreen_interface_settings.xml
index 333824f..6bd1373 100644
--- a/res/xml/lockscreen_interface_settings.xml
+++ b/res/xml/lockscreen_interface_settings.xml
@@ -17,63 +17,87 @@
xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
android:title="@string/themes_settings_title" >
- <PreferenceScreen
- android:key="screen_security"
- android:fragment="com.android.settings.SecuritySettings"
- android:title="@string/screen_security_category"
- android:summary="@string/screen_security_summary">
- <extra android:name="cm_security" android:value="true" />
- </PreferenceScreen>
-
- <ListPreference
- android:key="lockscreen_background"
- android:persistent="false"
- android:dialogTitle="@string/lockscreen_custom_background_title"
- android:title="@string/lockscreen_custom_background_title"
- android:entries="@array/lockscreen_background_entries"
- android:entryValues="@array/lockscreen_background_values" />
-
- <ListPreference
- android:key="lockscreen_battery_status"
- android:persistent="false"
- android:dialogTitle="@string/lockscreen_battery_status_title"
- android:title="@string/lockscreen_battery_status_title"
- android:entries="@array/lockscreen_battery_status_entries"
- android:entryValues="@array/lockscreen_battery_status_values"
- android:defaultValue="0" />
-
- <!-- Lock clock -->
- <PreferenceScreen
- android:key="lock_clock"
- android:title="@string/lock_clock_title"
- android:summary="@string/lock_clock_summary">
- <intent android:action="android.intent.action.MAIN"
- android:targetPackage="com.cyanogenmod.lockclock"
- android:targetClass="com.cyanogenmod.lockclock.preference.Preferences" />
- </PreferenceScreen>
-
- <CheckBoxPreference
- android:key="lockscreen_maximize_widgets"
- android:persistent="false"
- android:title="@string/lockscreen_maximize_widgets_title"
- android:summary="@string/lockscreen_maximize_widgets_summary" />
-
- <CheckBoxPreference
- android:key="lockscreen_music_controls"
- android:persistent="false"
- android:title="@string/lockscreen_music_controls_title"
- android:summary="@string/lockscreen_music_controls_summary" />
-
- <Preference
- android:fragment="com.android.settings.cyanogenmod.LockscreenTargets"
- android:key="lockscreen_targets"
- android:summary="@string/lockscreen_target_summary"
- android:title="@string/lockscreen_target_title" />
-
- <PreferenceScreen
- android:fragment="com.android.settings.cyanogenmod.LockscreenButtons"
- android:key="lockscreen_buttons"
- android:title="@string/lockscreen_buttons_title"
- android:summary="@string/lockscreen_buttons_summary" />
+ <PreferenceCategory
+ android:title="@string/title_general"
+ android:key="lockscreen_general_category" >
+ <PreferenceScreen
+ android:key="screen_security"
+ android:fragment="com.android.settings.SecuritySettings"
+ android:title="@string/screen_security_category"
+ android:summary="@string/screen_security_summary">
+ <extra android:name="cm_security" android:value="true" />
+ </PreferenceScreen>
+
+ <ListPreference
+ android:key="lockscreen_background"
+ android:persistent="false"
+ android:dialogTitle="@string/lockscreen_custom_background_title"
+ android:title="@string/lockscreen_custom_background_title"
+ android:entries="@array/lockscreen_background_entries"
+ android:entryValues="@array/lockscreen_background_values" />
+
+ <ListPreference
+ android:key="lockscreen_battery_status"
+ android:persistent="false"
+ android:dialogTitle="@string/lockscreen_battery_status_title"
+ android:title="@string/lockscreen_battery_status_title"
+ android:entries="@array/lockscreen_battery_status_entries"
+ android:entryValues="@array/lockscreen_battery_status_values"
+ android:defaultValue="0" />
+
+ <Preference
+ android:fragment="com.android.settings.cyanogenmod.LockscreenTargets"
+ android:key="lockscreen_targets"
+ android:summary="@string/lockscreen_target_summary"
+ android:title="@string/lockscreen_target_title" />
+
+ <PreferenceScreen
+ android:fragment="com.android.settings.cyanogenmod.LockscreenButtons"
+ android:key="lockscreen_buttons"
+ android:title="@string/lockscreen_buttons_title"
+ android:summary="@string/lockscreen_buttons_summary" />
+
+ </PreferenceCategory>
+
+ <PreferenceCategory
+ android:title="@string/lockscreen_widgets_category_title"
+ android:key="lockscreen_widgets_category" >
+
+ <PreferenceScreen
+ android:key="lock_clock"
+ android:summary="@string/lock_clock_summary"
+ android:title="@string/lock_clock_title" >
+
+ <intent
+ android:action="android.intent.action.MAIN"
+ android:targetClass="com.cyanogenmod.lockclock.preference.Preferences"
+ android:targetPackage="com.cyanogenmod.lockclock" />
+ </PreferenceScreen>
+
+ <CheckBoxPreference
+ android:key="lockscreen_maximize_widgets"
+ android:persistent="false"
+ android:summary="@string/lockscreen_maximize_widgets_summary"
+ android:title="@string/lockscreen_maximize_widgets_title" />
+
+ <CheckBoxPreference
+ android:key="lockscreen_enable_widgets"
+ android:persistent="false"
+ android:title="@string/lockscreen_enable_widgets_title"
+ android:summary="@string/lockscreen_enable_widgets_summary" />
+
+ <CheckBoxPreference
+ android:key="lockscreen_enable_camera"
+ android:persistent="false"
+ android:title="@string/lockscreen_enable_camera_title"
+ android:summary="@string/lockscreen_enable_camera_summary" />
+
+ <CheckBoxPreference
+ android:key="lockscreen_music_controls"
+ android:persistent="false"
+ android:title="@string/lockscreen_music_controls_title"
+ android:summary="@string/lockscreen_music_controls_summary" />
+
+ </PreferenceCategory>
</PreferenceScreen>
diff --git a/res/xml/privacy_guard_prefs.xml b/res/xml/privacy_guard_prefs.xml
new file mode 100644
index 0000000..2cc82c1
--- /dev/null
+++ b/res/xml/privacy_guard_prefs.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2013 Slimroms 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.
+-->
+
+<PreferenceScreen
+ xmlns:android="http://schemas.android.com/apk/res/android">
+
+ <CheckBoxPreference
+ android:key="privacy_guard_default"
+ android:title="@string/privacy_guard_default_title"
+ android:summary="@string/privacy_guard_default_summary"
+ android:persistent="false" />
+
+</PreferenceScreen>
diff --git a/res/xml/security_settings_app_cyanogenmod.xml b/res/xml/security_settings_app_cyanogenmod.xml
index fbaf10b..379245f 100644
--- a/res/xml/security_settings_app_cyanogenmod.xml
+++ b/res/xml/security_settings_app_cyanogenmod.xml
@@ -21,11 +21,11 @@
android:key="app_security"
android:title="@string/app_security_title">
- <CheckBoxPreference
- android:key="privacy_guard_default"
- android:title="@string/privacy_guard_default_title"
- android:summary="@string/privacy_guard_default_summary"
- android:persistent="false" />
+ <Preference
+ android:fragment="com.android.settings.cyanogenmod.privacyguard.PrivacyGuardManager"
+ android:key="privacy_guard_manager"
+ android:summary="@string/privacy_guard_manager_summary"
+ android:title="@string/privacy_guard_manager_title" />
<ListPreference
android:key="sms_security_check_limit"
diff --git a/src/com/android/settings/AccessibilitySettings.java b/src/com/android/settings/AccessibilitySettings.java
index dd382e0..91a6487 100644
--- a/src/com/android/settings/AccessibilitySettings.java
+++ b/src/com/android/settings/AccessibilitySettings.java
@@ -1026,7 +1026,8 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements
onInstallActionBarToggleSwitch();
onProcessArguments(getArguments());
getListView().setDivider(null);
- getListView().setEnabled(false);
+ getListView().setCacheColorHint(0);
+ getListView().setSelector(android.R.color.transparent);
}
@Override
diff --git a/src/com/android/settings/DeviceInfoSettings.java b/src/com/android/settings/DeviceInfoSettings.java
index 3f8aca3..23fa672 100644
--- a/src/com/android/settings/DeviceInfoSettings.java
+++ b/src/com/android/settings/DeviceInfoSettings.java
@@ -102,6 +102,7 @@ public class DeviceInfoSettings extends SettingsPreferenceFragment {
String status = getResources().getString(R.string.selinux_status_permissive);
setStringSummary(KEY_SELINUX_STATUS, status);
}
+ findPreference(KEY_SELINUX_STATUS).setEnabled(true);
// Remove selinux information if property is not present
removePreferenceIfPropertyMissing(getPreferenceScreen(), KEY_SELINUX_STATUS,
@@ -252,6 +253,22 @@ public class DeviceInfoSettings extends SettingsPreferenceFragment {
Log.e(LOG_TAG, "Unable to start activity " + intent.toString());
}
}
+ } else if (preference.getKey().equals(KEY_SELINUX_STATUS)) {
+ System.arraycopy(mHits, 1, mHits, 0, mHits.length-1);
+ mHits[mHits.length-1] = SystemClock.uptimeMillis();
+ if (mHits[0] >= (SystemClock.uptimeMillis()-500)) {
+ SELinux.setSELinuxEnforce(!SELinux.isSELinuxEnforced());
+ if (!SELinux.isSELinuxEnabled()) {
+ String status = getResources().getString(R.string.selinux_status_disabled);
+ setStringSummary(KEY_SELINUX_STATUS, status);
+ } else if (!SELinux.isSELinuxEnforced()) {
+ String status = getResources().getString(R.string.selinux_status_permissive);
+ setStringSummary(KEY_SELINUX_STATUS, status);
+ } else if (SELinux.isSELinuxEnforced()) {
+ String status = getResources().getString(R.string.selinux_status_enforcing);
+ setStringSummary(KEY_SELINUX_STATUS, status);
+ }
+ }
}
return super.onPreferenceTreeClick(preferenceScreen, preference);
}
diff --git a/src/com/android/settings/DisplaySettings.java b/src/com/android/settings/DisplaySettings.java
index 2e9085a..ed60b84 100644
--- a/src/com/android/settings/DisplaySettings.java
+++ b/src/com/android/settings/DisplaySettings.java
@@ -61,6 +61,7 @@ public class DisplaySettings extends SettingsPreferenceFragment implements
private static final String KEY_SCREEN_SAVER = "screensaver";
private static final String KEY_WIFI_DISPLAY = "wifi_display";
private static final String KEY_DISPLAY_ROTATION = "display_rotation";
+ private static final String KEY_LOCKSCREEN_ROTATION = "lockscreen_rotation";
private static final String KEY_WAKEUP_CATEGORY = "category_wakeup_options";
private static final String KEY_HOME_WAKE = "pref_home_wake";
private static final String KEY_VOLUME_WAKE = "pref_volume_wake";
@@ -111,16 +112,25 @@ public class DisplaySettings extends SettingsPreferenceFragment implements
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ContentResolver resolver = getActivity().getContentResolver();
+ Resources res = getResources();
addPreferencesFromResource(R.xml.display_settings);
mDisplayRotationPreference = (PreferenceScreen) findPreference(KEY_DISPLAY_ROTATION);
+ final CheckBoxPreference lockScreenRotation =
+ (CheckBoxPreference) findPreference(KEY_LOCKSCREEN_ROTATION);
+ if (lockScreenRotation != null) {
+ if (!res.getBoolean(com.android.internal.R.bool.config_enableLockScreenRotation)) {
+ getPreferenceScreen().removePreference(lockScreenRotation);
+ }
+ }
+
mScreenSaverPreference = findPreference(KEY_SCREEN_SAVER);
- if (mScreenSaverPreference != null
- && getResources().getBoolean(
- com.android.internal.R.bool.config_dreamsSupported) == false) {
- getPreferenceScreen().removePreference(mScreenSaverPreference);
+ if (mScreenSaverPreference != null) {
+ if (!res.getBoolean(com.android.internal.R.bool.config_dreamsSupported)) {
+ getPreferenceScreen().removePreference(mScreenSaverPreference);
+ }
}
mScreenTimeoutPreference = (ListPreference) findPreference(KEY_SCREEN_TIMEOUT);
@@ -153,7 +163,7 @@ public class DisplaySettings extends SettingsPreferenceFragment implements
// Home button wake
mHomeWake = (CheckBoxPreference) findPreference(KEY_HOME_WAKE);
if (mHomeWake != null) {
- if (!getResources().getBoolean(R.bool.config_show_homeWake)) {
+ if (!res.getBoolean(R.bool.config_show_homeWake)) {
wakeupCategory.removePreference(mHomeWake);
} else {
mHomeWake.setChecked(Settings.System.getInt(resolver,
@@ -165,7 +175,7 @@ public class DisplaySettings extends SettingsPreferenceFragment implements
// Volume rocker wake
mVolumeWake = (CheckBoxPreference) findPreference(KEY_VOLUME_WAKE);
if (mVolumeWake != null) {
- if (!getResources().getBoolean(R.bool.config_show_volumeRockerWake)
+ if (!res.getBoolean(R.bool.config_show_volumeRockerWake)
|| !Utils.hasVolumeRocker(getActivity())) {
wakeupCategory.removePreference(mVolumeWake);
} else {
@@ -181,7 +191,7 @@ public class DisplaySettings extends SettingsPreferenceFragment implements
}
mScreenOffAnimation = (CheckBoxPreference) findPreference(KEY_SCREEN_OFF_ANIMATION);
- if (getResources().getBoolean(com.android.internal.R.bool.config_screenOffAnimation)) {
+ if (res.getBoolean(com.android.internal.R.bool.config_screenOffAnimation)) {
mScreenOffAnimation.setChecked(Settings.System.getInt(resolver,
Settings.System.SCREEN_OFF_ANIMATION, 1) == 1);
} else {
diff --git a/src/com/android/settings/SecuritySettings.java b/src/com/android/settings/SecuritySettings.java
index b01dc74..b966bc7 100644
--- a/src/com/android/settings/SecuritySettings.java
+++ b/src/com/android/settings/SecuritySettings.java
@@ -94,7 +94,6 @@ public class SecuritySettings extends SettingsPreferenceFragment
private static final String LOCKSCREEN_QUICK_UNLOCK_CONTROL = "quick_unlock_control";
private static final String KEY_VIBRATE_PREF = "lockscreen_vibrate";
private static final String KEY_SMS_SECURITY_CHECK_PREF = "sms_security_check_limit";
- private static final String KEY_PRIVACY_GUARD_DEFAULT = "privacy_guard_default";
private static final String KEY_APP_SECURITY_CATEGORY = "app_security";
DevicePolicyManager mDPM;
@@ -128,7 +127,6 @@ public class SecuritySettings extends SettingsPreferenceFragment
private CheckBoxPreference mHomeUnlock;
private CheckBoxPreference mQuickUnlockScreen;
private ListPreference mSmsSecurityCheck;
- private CheckBoxPreference mPrivacyGuardDefault;
@Override
public void onCreate(Bundle savedInstanceState) {
@@ -410,14 +408,6 @@ public class SecuritySettings extends SettingsPreferenceFragment
root.findPreference(KEY_APP_SECURITY_CATEGORY);
appCategory.removePreference(mSmsSecurityCheck);
}
-
- mPrivacyGuardDefault = (CheckBoxPreference) findPreference(KEY_PRIVACY_GUARD_DEFAULT);
- try {
- mPrivacyGuardDefault.setChecked(Settings.Secure.getInt(getContentResolver(),
- Settings.Secure.PRIVACY_GUARD_DEFAULT) == 1);
- } catch (SettingNotFoundException e) {
- mPrivacyGuardDefault.setChecked(false);
- }
}
return root;
@@ -708,9 +698,6 @@ public class SecuritySettings extends SettingsPreferenceFragment
} else if (KEY_TOGGLE_VERIFY_APPLICATIONS.equals(key)) {
Settings.Global.putInt(getContentResolver(), Settings.Global.PACKAGE_VERIFIER_ENABLE,
mToggleVerifyApps.isChecked() ? 1 : 0);
- } else if (KEY_PRIVACY_GUARD_DEFAULT.equals(key)) {
- Settings.Secure.putInt(getContentResolver(), Settings.Secure.PRIVACY_GUARD_DEFAULT,
- mPrivacyGuardDefault.isChecked() ? 1 : 0);
} else {
// If we didn't handle it, let preferences handle it.
return super.onPreferenceTreeClick(preferenceScreen, preference);
diff --git a/src/com/android/settings/SettingsPreferenceFragment.java b/src/com/android/settings/SettingsPreferenceFragment.java
index b961bbc..3a225f3 100644
--- a/src/com/android/settings/SettingsPreferenceFragment.java
+++ b/src/com/android/settings/SettingsPreferenceFragment.java
@@ -29,6 +29,7 @@ import android.os.Bundle;
import android.preference.Preference;
import android.preference.PreferenceActivity;
import android.preference.PreferenceFragment;
+import android.preference.PreferenceGroup;
import android.preference.PreferenceScreen;
import android.text.TextUtils;
import android.util.Log;
@@ -313,6 +314,10 @@ public class SettingsPreferenceFragment extends PreferenceFragment implements Di
}
public boolean removePreferenceIfPackageNotInstalled(Preference preference) {
+ return removePreferenceIfPackageNotInstalled(preference, getPreferenceScreen());
+ }
+
+ public boolean removePreferenceIfPackageNotInstalled(Preference preference, PreferenceGroup parent) {
String intentUri = ((PreferenceScreen) preference).getIntent().toUri(1);
Pattern pattern = Pattern.compile("component=([^/]+)/");
Matcher matcher = pattern.matcher(intentUri);
@@ -323,7 +328,7 @@ public class SettingsPreferenceFragment extends PreferenceFragment implements Di
getPackageManager().getPackageInfo(packageName, 0);
} catch (NameNotFoundException e) {
Log.e(TAG, "package " + packageName + " not installed, hiding preference.");
- getPreferenceScreen().removePreference(preference);
+ parent.removePreference(preference);
return true;
}
}
diff --git a/src/com/android/settings/applications/InstalledAppDetails.java b/src/com/android/settings/applications/InstalledAppDetails.java
index 778ef44..4091b13 100644
--- a/src/com/android/settings/applications/InstalledAppDetails.java
+++ b/src/com/android/settings/applications/InstalledAppDetails.java
@@ -401,10 +401,19 @@ public class InstalledAppDetails extends Fragment
}
private void initPrivacyGuardButton() {
- // TODO: We probably want to disable this optional for the built-in apps
- boolean enabled = mPm.getPrivacyGuardSetting(mAppEntry.info.packageName);
- mPrivacyGuardSwitch.setChecked(enabled);
- mPrivacyGuardSwitch.setOnCheckedChangeListener(this);
+ if (mPrivacyGuardSwitch == null) {
+ return;
+ }
+
+ mPrivacyGuardSwitch.setChecked(mPm.getPrivacyGuardSetting(mAppEntry.info.packageName));
+
+ // disable privacy guard switch if the app is signed with the platform certificate
+ // to avoid the user shooting himself in the foot
+ if (isThisASystemPackage()) {
+ mPrivacyGuardSwitch.setEnabled(false);
+ } else {
+ mPrivacyGuardSwitch.setOnCheckedChangeListener(this);
+ }
}
/** Called when the activity is first created. */
@@ -1201,10 +1210,17 @@ public class InstalledAppDetails extends Fragment
.setNegativeButton(R.string.dlg_cancel, null)
.create();
case DLG_PRIVACY_GUARD:
+ final int messageResId;
+ if ((getOwner().mAppEntry.info.flags & ApplicationInfo.FLAG_SYSTEM) != 0) {
+ messageResId = R.string.privacy_guard_dlg_system_app_text;
+ } else {
+ messageResId = R.string.privacy_guard_dlg_text;
+ }
+
return new AlertDialog.Builder(getActivity())
- .setTitle(getActivity().getText(R.string.privacy_guard_dlg_title))
+ .setTitle(R.string.privacy_guard_dlg_title)
.setIconAttribute(android.R.attr.alertDialogIcon)
- .setMessage(getActivity().getText(R.string.privacy_guard_dlg_text))
+ .setMessage(messageResId)
.setPositiveButton(R.string.dlg_ok,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
diff --git a/src/com/android/settings/cyanogenmod/DisplayRotation.java b/src/com/android/settings/cyanogenmod/DisplayRotation.java
index 15b4137..b11c2fb 100644
--- a/src/com/android/settings/cyanogenmod/DisplayRotation.java
+++ b/src/com/android/settings/cyanogenmod/DisplayRotation.java
@@ -35,6 +35,7 @@ public class DisplayRotation extends SettingsPreferenceFragment implements OnPre
private static final String TAG = "DisplayRotation";
private static final String KEY_ACCELEROMETER = "accelerometer";
+ private static final String LOCKSCREEN_ROTATION = "lockscreen_rotation";
private static final String ROTATION_0_PREF = "display_rotation_0";
private static final String ROTATION_90_PREF = "display_rotation_90";
private static final String ROTATION_180_PREF = "display_rotation_180";
@@ -42,6 +43,7 @@ public class DisplayRotation extends SettingsPreferenceFragment implements OnPre
private static final String KEY_SWAP_VOLUME_BUTTONS = "swap_volume_buttons";
private CheckBoxPreference mAccelerometer;
+ private CheckBoxPreference mLockScreenRotationPref;
private CheckBoxPreference mRotation0Pref;
private CheckBoxPreference mRotation90Pref;
private CheckBoxPreference mRotation180Pref;
@@ -74,6 +76,7 @@ public class DisplayRotation extends SettingsPreferenceFragment implements OnPre
mAccelerometer = (CheckBoxPreference) findPreference(KEY_ACCELEROMETER);
mAccelerometer.setPersistent(false);
+ mLockScreenRotationPref = (CheckBoxPreference) prefSet.findPreference(LOCKSCREEN_ROTATION);
mRotation0Pref = (CheckBoxPreference) prefSet.findPreference(ROTATION_0_PREF);
mRotation90Pref = (CheckBoxPreference) prefSet.findPreference(ROTATION_90_PREF);
mRotation180Pref = (CheckBoxPreference) prefSet.findPreference(ROTATION_180_PREF);
@@ -99,6 +102,11 @@ public class DisplayRotation extends SettingsPreferenceFragment implements OnPre
}
}
+ if (mLockScreenRotationPref != null) {
+ mLockScreenRotationPref.setChecked(Settings.System.getInt(getContentResolver(),
+ Settings.System.LOCKSCREEN_ROTATION, 0) != 0);
+ }
+
if (hasRotationLock) {
// Disable accelerometer checkbox, but leave others enabled
mAccelerometer.setEnabled(false);
@@ -159,16 +167,18 @@ public class DisplayRotation extends SettingsPreferenceFragment implements OnPre
mode |= ROTATION_0_MODE;
mRotation0Pref.setChecked(true);
}
- Settings.System.putInt(getActivity().getApplicationContext().getContentResolver(),
+ Settings.System.putInt(getActivity().getContentResolver(),
Settings.System.ACCELEROMETER_ROTATION_ANGLES, mode);
return true;
+ } else if (preference == mLockScreenRotationPref) {
+ boolean value = mLockScreenRotationPref.isChecked();
+ Settings.System.putInt(getActivity().getContentResolver(),
+ Settings.System.LOCKSCREEN_ROTATION, value ? 1 : 0);
+ return true;
} else if (preference == mSwapVolumeButtons) {
- Context context = getActivity().getApplicationContext();
- Settings.System.putInt(context.getContentResolver(),
- Settings.System.SWAP_VOLUME_KEYS_ON_ROTATION,
- mSwapVolumeButtons.isChecked()
- ? (Utils.isTablet(context) ? 2 : 1)
- : 0);
+ int value = mSwapVolumeButtons.isChecked() ? (Utils.isTablet(getActivity()) ? 2 : 1) : 0;
+ Settings.System.putInt(getActivity().getContentResolver(),
+ Settings.System.SWAP_VOLUME_KEYS_ON_ROTATION, value);
}
return super.onPreferenceTreeClick(preferenceScreen, preference);
diff --git a/src/com/android/settings/cyanogenmod/LockscreenInterface.java b/src/com/android/settings/cyanogenmod/LockscreenInterface.java
index 37d56e8..c506889 100644
--- a/src/com/android/settings/cyanogenmod/LockscreenInterface.java
+++ b/src/com/android/settings/cyanogenmod/LockscreenInterface.java
@@ -21,8 +21,12 @@ import java.io.IOException;
import android.app.Activity;
import android.app.AlertDialog;
+import android.app.admin.DeviceAdminReceiver;
+import android.app.admin.DevicePolicyManager;
import android.content.ActivityNotFoundException;
+import android.content.ComponentName;
import android.content.ContentResolver;
+import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.res.Configuration;
@@ -34,6 +38,7 @@ import android.os.UserHandle;
import android.preference.CheckBoxPreference;
import android.preference.ListPreference;
import android.preference.Preference;
+import android.preference.PreferenceCategory;
import android.preference.PreferenceScreen;
import android.provider.MediaStore;
import android.provider.Settings;
@@ -64,13 +69,21 @@ public class LockscreenInterface extends SettingsPreferenceFragment implements
private static final String KEY_BACKGROUND = "lockscreen_background";
private static final String KEY_SCREEN_SECURITY = "screen_security";
+ private static final String LOCKSCREEN_GENERAL_CATEGORY = "lockscreen_general_category";
+ private static final String LOCKSCREEN_WIDGETS_CATEGORY = "lockscreen_widgets_category";
+ private static final String KEY_LOCKSCREEN_ENABLE_WIDGETS = "lockscreen_enable_widgets";
+ private static final String KEY_LOCKSCREEN_ENABLE_CAMERA = "lockscreen_enable_camera";
+
private ListPreference mCustomBackground;
private ListPreference mBatteryStatus;
private CheckBoxPreference mMaximizeWidgets;
private CheckBoxPreference mMusicControls;
+ private CheckBoxPreference mEnableWidgets;
+ private CheckBoxPreference mEnableCamera;
private File mWallpaperImage;
private File mWallpaperTemporary;
+ private DevicePolicyManager mDPM;
private boolean mIsPrimary;
@@ -83,6 +96,8 @@ public class LockscreenInterface extends SettingsPreferenceFragment implements
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.lockscreen_interface_settings);
+ PreferenceCategory generalCategory = (PreferenceCategory) findPreference(LOCKSCREEN_GENERAL_CATEGORY);
+ PreferenceCategory widgetsCategory = (PreferenceCategory) findPreference(LOCKSCREEN_WIDGETS_CATEGORY);
// Determine which user is logged in
mIsPrimary = UserHandle.myUserId() == UserHandle.USER_OWNER;
@@ -93,9 +108,9 @@ public class LockscreenInterface extends SettingsPreferenceFragment implements
mBatteryStatus.setOnPreferenceChangeListener(this);
}
- mMaximizeWidgets = (CheckBoxPreference)findPreference(KEY_LOCKSCREEN_MAXIMIZE_WIDGETS);
+ mMaximizeWidgets = (CheckBoxPreference) findPreference(KEY_LOCKSCREEN_MAXIMIZE_WIDGETS);
if (!Utils.isPhone(getActivity())) {
- getPreferenceScreen().removePreference(mMaximizeWidgets);
+ widgetsCategory.removePreference(mMaximizeWidgets);
mMaximizeWidgets = null;
} else {
mMaximizeWidgets.setOnPreferenceChangeListener(this);
@@ -106,15 +121,14 @@ public class LockscreenInterface extends SettingsPreferenceFragment implements
PreferenceScreen lockscreenButtons = (PreferenceScreen) findPreference(KEY_LOCKSCREEN_BUTTONS);
if (!hasButtons()) {
- getPreferenceScreen().removePreference(lockscreenButtons);
+ generalCategory.removePreference(lockscreenButtons);
}
} else {
// Secondary user is logged in, remove all primary user specific preferences
- PreferenceScreen prefScreen = getPreferenceScreen();
- prefScreen.removePreference(findPreference(KEY_SCREEN_SECURITY));
- prefScreen.removePreference(findPreference(KEY_ALWAYS_BATTERY));
- prefScreen.removePreference(findPreference(KEY_LOCKSCREEN_BUTTONS));
- prefScreen.removePreference(findPreference(KEY_LOCKSCREEN_MAXIMIZE_WIDGETS));
+ generalCategory.removePreference(findPreference(KEY_SCREEN_SECURITY));
+ widgetsCategory.removePreference(findPreference(KEY_LOCKSCREEN_MAXIMIZE_WIDGETS));
+ generalCategory.removePreference(findPreference(KEY_ALWAYS_BATTERY));
+ generalCategory.removePreference(findPreference(KEY_LOCKSCREEN_BUTTONS));
}
// This applies to all users
@@ -122,11 +136,22 @@ public class LockscreenInterface extends SettingsPreferenceFragment implements
mCustomBackground.setOnPreferenceChangeListener(this);
updateCustomBackgroundSummary();
+ mEnableWidgets = (CheckBoxPreference) findPreference(KEY_LOCKSCREEN_ENABLE_WIDGETS);
+ mEnableWidgets.setOnPreferenceChangeListener(this);
+ mEnableCamera = (CheckBoxPreference) findPreference(KEY_LOCKSCREEN_ENABLE_CAMERA);
+ mEnableCamera.setOnPreferenceChangeListener(this);
+
+ mDPM = (DevicePolicyManager)getSystemService(Context.DEVICE_POLICY_SERVICE);
+
+ int disabledFeatures = mDPM.getKeyguardDisabledFeatures(null);
+ mEnableWidgets.setChecked((disabledFeatures & DevicePolicyManager.KEYGUARD_DISABLE_WIDGETS_ALL) == 0);
+ mEnableCamera.setChecked((disabledFeatures & DevicePolicyManager.KEYGUARD_DISABLE_SECURE_CAMERA) == 0);
+
mWallpaperImage = new File(getActivity().getFilesDir() + "/lockwallpaper");
mWallpaperTemporary = new File(getActivity().getCacheDir() + "/lockwallpaper.tmp");
// Don't display the lock clock preference if its not installed
- removePreferenceIfPackageNotInstalled(findPreference(KEY_LOCK_CLOCK));
+ removePreferenceIfPackageNotInstalled(findPreference(KEY_LOCK_CLOCK), widgetsCategory);
}
private void updateCustomBackgroundSummary() {
@@ -216,10 +241,30 @@ public class LockscreenInterface extends SettingsPreferenceFragment implements
} else if (preference == mCustomBackground) {
int selection = mCustomBackground.findIndexOfValue(objValue.toString());
return handleBackgroundSelection(selection);
+ } else if (preference == mEnableCamera) {
+ updateKeyguardState((Boolean) objValue, mEnableWidgets.isChecked());
+ return true;
+ } else if (preference == mEnableWidgets) {
+ updateKeyguardState(mEnableCamera.isChecked(), (Boolean) objValue);
+ return true;
}
+
return false;
}
+ private void updateKeyguardState(boolean enableCamera, boolean enableWidgets) {
+ ComponentName dpmAdminName = new ComponentName(getActivity(),
+ DeviceAdminLockscreenReceiver.class);
+ mDPM.setActiveAdmin(dpmAdminName, true);
+ int disabledFeatures = enableWidgets
+ ? DevicePolicyManager.KEYGUARD_DISABLE_FEATURES_NONE
+ : DevicePolicyManager.KEYGUARD_DISABLE_WIDGETS_ALL;
+ if (!enableCamera) {
+ disabledFeatures |= DevicePolicyManager.KEYGUARD_DISABLE_SECURE_CAMERA;
+ }
+ mDPM.setKeyguardDisabledFeatures(dpmAdminName, disabledFeatures);
+ }
+
private boolean handleBackgroundSelection(int selection) {
if (selection == LOCKSCREEN_BACKGROUND_COLOR_FILL) {
final ColorPickerView colorView = new ColorPickerView(getActivity());
@@ -295,4 +340,6 @@ public class LockscreenInterface extends SettingsPreferenceFragment implements
return false;
}
+
+ public static class DeviceAdminLockscreenReceiver extends DeviceAdminReceiver {}
}
diff --git a/src/com/android/settings/cyanogenmod/QuickSettings.java b/src/com/android/settings/cyanogenmod/QuickSettings.java
index b48e891..508219e 100644
--- a/src/com/android/settings/cyanogenmod/QuickSettings.java
+++ b/src/com/android/settings/cyanogenmod/QuickSettings.java
@@ -16,17 +16,6 @@
package com.android.settings.cyanogenmod;
-import static com.android.internal.util.cm.QSConstants.TILE_BLUETOOTH;
-import static com.android.internal.util.cm.QSConstants.TILE_CAMERA;
-import static com.android.internal.util.cm.QSConstants.TILE_MOBILEDATA;
-import static com.android.internal.util.cm.QSConstants.TILE_NETWORKMODE;
-import static com.android.internal.util.cm.QSConstants.TILE_NFC;
-import static com.android.internal.util.cm.QSConstants.TILE_PROFILE;
-import static com.android.internal.util.cm.QSConstants.TILE_WIFIAP;
-import static com.android.internal.util.cm.QSConstants.TILE_LTE;
-import static com.android.internal.util.cm.QSConstants.TILE_TORCH;
-import static com.android.internal.util.cm.QSConstants.TILE_EXPANDEDDESKTOP;
-
import android.content.ContentResolver;
import android.content.pm.PackageManager;
import android.content.res.Resources;
@@ -40,9 +29,8 @@ import android.preference.PreferenceCategory;
import android.preference.PreferenceScreen;
import android.provider.Settings;
import android.text.TextUtils;
-import android.util.Log;
-import com.android.internal.telephony.Phone;
+import com.android.internal.util.cm.QSConstants;
import com.android.internal.util.cm.QSUtils;
import com.android.settings.R;
import com.android.settings.SettingsPreferenceFragment;
@@ -56,7 +44,6 @@ import java.util.HashSet;
import java.util.Set;
public class QuickSettings extends SettingsPreferenceFragment implements OnPreferenceChangeListener {
- private static final String TAG = "QuickSettings";
private static final String SEPARATOR = "OV=I=XseparatorX=I=VO";
private static final String EXP_RING_MODE = "pref_ring_mode";
@@ -100,7 +87,6 @@ public class QuickSettings extends SettingsPreferenceFragment implements OnPrefe
super.onActivityCreated(savedInstanceState);
PreferenceScreen prefSet = getPreferenceScreen();
- PackageManager pm = getPackageManager();
ContentResolver resolver = getActivity().getContentResolver();
mGeneralSettings = (PreferenceCategory) prefSet.findPreference(GENERAL_SETTINGS);
mStaticTiles = (PreferenceCategory) prefSet.findPreference(STATIC_TILES);
@@ -183,74 +169,20 @@ public class QuickSettings extends SettingsPreferenceFragment implements OnPrefe
mDynamicWifi = null;
}
}
+ }
- // Don't show mobile data options if not supported
- if (!QSUtils.deviceSupportsMobileData(getActivity())) {
- QuickSettingsUtil.TILES.remove(TILE_MOBILEDATA);
- QuickSettingsUtil.TILES.remove(TILE_WIFIAP);
- QuickSettingsUtil.TILES.remove(TILE_NETWORKMODE);
- if(mNetworkMode != null) {
- mStaticTiles.removePreference(mNetworkMode);
- }
- } else {
- // We have telephony support however, some phones run on networks not supported
- // by the networkmode tile so remove both it and the associated options list
- int network_state = -99;
- try {
- network_state = Settings.Global.getInt(resolver,
- Settings.Global.PREFERRED_NETWORK_MODE);
- } catch (Settings.SettingNotFoundException e) {
- Log.e(TAG, "Unable to retrieve PREFERRED_NETWORK_MODE", e);
- }
+ @Override
+ public void onResume() {
+ super.onResume();
+ QuickSettingsUtil.updateAvailableTiles(getActivity());
- switch (network_state) {
- // list of supported network modes
- case Phone.NT_MODE_WCDMA_PREF:
- case Phone.NT_MODE_WCDMA_ONLY:
- case Phone.NT_MODE_GSM_UMTS:
- case Phone.NT_MODE_GSM_ONLY:
- break;
- default:
- QuickSettingsUtil.TILES.remove(TILE_NETWORKMODE);
- mStaticTiles.removePreference(mNetworkMode);
- break;
+ if (mNetworkMode != null) {
+ if (QuickSettingsUtil.isTileAvailable(QSConstants.TILE_NETWORKMODE)) {
+ mStaticTiles.addPreference(mNetworkMode);
+ } else {
+ mStaticTiles.removePreference(mNetworkMode);
}
}
-
- // Don't show the bluetooth options if not supported
- if (!QSUtils.deviceSupportsBluetooth()) {
- QuickSettingsUtil.TILES.remove(TILE_BLUETOOTH);
- }
-
- // Don't show the profiles tile if profiles are disabled
- if (!QSUtils.systemProfilesEnabled(resolver)) {
- QuickSettingsUtil.TILES.remove(TILE_PROFILE);
- }
-
- // Don't show the NFC tile if not supported
- if (!QSUtils.deviceSupportsNfc(getActivity())) {
- QuickSettingsUtil.TILES.remove(TILE_NFC);
- }
-
- // Don't show the LTE tile if not supported
- if (!QSUtils.deviceSupportsLte(getActivity())) {
- QuickSettingsUtil.TILES.remove(TILE_LTE);
- }
-
- // Don't show the Torch tile if not supported
- if (!getResources().getBoolean(R.bool.has_led_flash)) {
- QuickSettingsUtil.TILES.remove(TILE_TORCH);
- }
-
- // Don't show the Expanded desktop tile if expanded desktop is disabled
- if (!QSUtils.expandedDesktopEnabled(resolver)) {
- QuickSettingsUtil.TILES.remove(TILE_EXPANDEDDESKTOP);
- }
-
- // Don't show the Camera tile if the device has no cameras
- if (!QSUtils.deviceSupportsCamera()) {
- QuickSettingsUtil.TILES.remove(TILE_CAMERA);
- }
}
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
diff --git a/src/com/android/settings/cyanogenmod/QuickSettingsTiles.java b/src/com/android/settings/cyanogenmod/QuickSettingsTiles.java
index 9342f64..2a5d5cb 100644
--- a/src/com/android/settings/cyanogenmod/QuickSettingsTiles.java
+++ b/src/com/android/settings/cyanogenmod/QuickSettingsTiles.java
@@ -34,17 +34,21 @@ import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
-import android.widget.FrameLayout;
import android.widget.ArrayAdapter;
+import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.TextView;
-import static com.android.internal.util.cm.QSConstants.TILE_USER;
+import com.android.internal.util.cm.QSConstants;
import com.android.settings.R;
import com.android.settings.Utils;
import com.android.settings.cyanogenmod.QuickSettingsUtil.TileInfo;
+import java.text.Collator;
import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Comparator;
+
public class QuickSettingsTiles extends Fragment {
private static final int MENU_RESET = Menu.FIRST;
@@ -88,7 +92,7 @@ public class QuickSettingsTiles extends Fragment {
if (columnCount != 0) {
mDragView.setColumnCount(columnCount);
}
- mTileAdapter = new TileAdapter(getActivity(), 0);
+ mTileAdapter = new TileAdapter(getActivity());
return mDragView;
}
@@ -136,7 +140,7 @@ public class QuickSettingsTiles extends Fragment {
name.setText(titleId);
name.setCompoundDrawablesRelativeWithIntrinsicBounds(0, iconRegId, 0, 0);
} else {
- final boolean isUserTile = titleId == QuickSettingsUtil.TILES.get(TILE_USER).getTitleResId();
+ final boolean isUserTile = titleId == QuickSettingsUtil.TILES.get(QSConstants.TILE_USER).getTitleResId();
if (mSystemUiResources != null && iconSysId != null) {
int resId = mSystemUiResources.getIdentifier(iconSysId, null, null);
if (resId > 0) {
@@ -253,17 +257,42 @@ public class QuickSettingsTiles extends Fragment {
alert.create().show();
}
- @SuppressWarnings("rawtypes")
- static class TileAdapter extends ArrayAdapter {
+ private static class TileAdapter extends ArrayAdapter<String> {
+ private static class Entry {
+ public final TileInfo tile;
+ public final String tileTitle;
+ public Entry(TileInfo tile, String tileTitle) {
+ this.tile = tile;
+ this.tileTitle = tileTitle;
+ }
+ }
- String[] mTileKeys;
- Resources mResources;
+ private Entry[] mTiles;
- public TileAdapter(Context context, int textViewResourceId) {
+ public TileAdapter(Context context) {
super(context, android.R.layout.simple_list_item_1);
- mTileKeys = new String[getCount()];
- QuickSettingsUtil.TILES.keySet().toArray(mTileKeys);
- mResources = context.getResources();
+ mTiles = new Entry[getCount()];
+ loadItems(context.getResources());
+ sortItems();
+ }
+
+ private void loadItems(Resources resources) {
+ int index = 0;
+ for (TileInfo t : QuickSettingsUtil.TILES.values()) {
+ mTiles[index++] = new Entry(t, resources.getString(t.getTitleResId()));
+ }
+ }
+
+ private void sortItems() {
+ final Collator collator = Collator.getInstance();
+ collator.setDecomposition(Collator.CANONICAL_DECOMPOSITION);
+ collator.setStrength(Collator.PRIMARY);
+ Arrays.sort(mTiles, new Comparator<Entry>() {
+ @Override
+ public int compare(Entry e1, Entry e2) {
+ return collator.compare(e1.tileTitle, e2.tileTitle);
+ }
+ });
}
@Override
@@ -272,17 +301,13 @@ public class QuickSettingsTiles extends Fragment {
}
@Override
- public Object getItem(int position) {
- int resid = QuickSettingsUtil.TILES.get(mTileKeys[position])
- .getTitleResId();
- return mResources.getString(resid);
+ public String getItem(int position) {
+ return mTiles[position].tileTitle;
}
public String getTileId(int position) {
- return QuickSettingsUtil.TILES.get(mTileKeys[position])
- .getId();
+ return mTiles[position].tile.getId();
}
-
}
public interface OnRearrangeListener {
diff --git a/src/com/android/settings/cyanogenmod/QuickSettingsUtil.java b/src/com/android/settings/cyanogenmod/QuickSettingsUtil.java
index d2d3e65..653331a 100644
--- a/src/com/android/settings/cyanogenmod/QuickSettingsUtil.java
+++ b/src/com/android/settings/cyanogenmod/QuickSettingsUtil.java
@@ -43,101 +43,219 @@ import static com.android.internal.util.cm.QSConstants.TILE_USER;
import static com.android.internal.util.cm.QSConstants.TILE_VOLUME;
import static com.android.internal.util.cm.QSConstants.TILE_WIFI;
import static com.android.internal.util.cm.QSConstants.TILE_WIFIAP;
-import static com.android.internal.util.cm.QSUtils.deviceSupportsBluetooth;
-import static com.android.internal.util.cm.QSUtils.deviceSupportsMobileData;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.LinkedHashMap;
+import android.content.ContentResolver;
import android.content.Context;
import android.provider.Settings;
import android.text.TextUtils;
+import android.util.Log;
+import com.android.internal.telephony.Phone;
+import com.android.internal.util.cm.QSUtils;
import com.android.settings.R;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
public class QuickSettingsUtil {
+ private static final String TAG = "QuickSettingsUtil";
+
+ public static final Map<String, TileInfo> TILES;
+
+ private static final Map<String, TileInfo> ENABLED_TILES = new HashMap<String, TileInfo>();
+ private static final Map<String, TileInfo> DISABLED_TILES = new HashMap<String, TileInfo>();
- // Keep sorted according to titleResId's string value
- public static final LinkedHashMap<String, TileInfo> TILES = new LinkedHashMap<String, TileInfo>();
static {
- TILES.put(TILE_AIRPLANE, new QuickSettingsUtil.TileInfo(
+ TILES = Collections.unmodifiableMap(ENABLED_TILES);
+ registerTile(new QuickSettingsUtil.TileInfo(
TILE_AIRPLANE, R.string.title_tile_airplane,
"com.android.systemui:drawable/ic_qs_airplane_off"));
- TILES.put(TILE_BATTERY, new QuickSettingsUtil.TileInfo(
+ registerTile(new QuickSettingsUtil.TileInfo(
TILE_BATTERY, R.string.title_tile_battery,
"com.android.systemui:drawable/ic_qs_battery_neutral"));
- TILES.put(TILE_BLUETOOTH, new QuickSettingsUtil.TileInfo(
+ registerTile(new QuickSettingsUtil.TileInfo(
TILE_BLUETOOTH, R.string.title_tile_bluetooth,
"com.android.systemui:drawable/ic_qs_bluetooth_neutral"));
- TILES.put(TILE_BRIGHTNESS, new QuickSettingsUtil.TileInfo(
+ registerTile(new QuickSettingsUtil.TileInfo(
TILE_BRIGHTNESS, R.string.title_tile_brightness,
"com.android.systemui:drawable/ic_qs_brightness_auto_off"));
- TILES.put(TILE_CAMERA, new QuickSettingsUtil.TileInfo(
+ registerTile(new QuickSettingsUtil.TileInfo(
TILE_CAMERA, R.string.title_tile_camera,
"com.android.systemui:drawable/ic_qs_camera"));
- TILES.put(TILE_EXPANDEDDESKTOP, new QuickSettingsUtil.TileInfo(
+ registerTile(new QuickSettingsUtil.TileInfo(
TILE_EXPANDEDDESKTOP, R.string.title_tile_expanded_desktop,
"com.android.systemui:drawable/ic_qs_expanded_desktop_off"));
- TILES.put(TILE_SLEEP, new QuickSettingsUtil.TileInfo(
+ registerTile(new QuickSettingsUtil.TileInfo(
TILE_SLEEP, R.string.title_tile_sleep,
"com.android.systemui:drawable/ic_qs_sleep"));
- TILES.put(TILE_GPS, new QuickSettingsUtil.TileInfo(
+ registerTile(new QuickSettingsUtil.TileInfo(
TILE_GPS, R.string.title_tile_gps,
"com.android.systemui:drawable/ic_qs_gps_neutral"));
- TILES.put(TILE_LOCKSCREEN, new QuickSettingsUtil.TileInfo(
+ registerTile(new QuickSettingsUtil.TileInfo(
TILE_LOCKSCREEN, R.string.title_tile_lockscreen,
"com.android.systemui:drawable/ic_qs_lock_screen_off"));
- TILES.put(TILE_LTE, new QuickSettingsUtil.TileInfo(
+ registerTile(new QuickSettingsUtil.TileInfo(
TILE_LTE, R.string.title_tile_lte,
"com.android.systemui:drawable/ic_qs_lte_off"));
- TILES.put(TILE_MOBILEDATA, new QuickSettingsUtil.TileInfo(
+ registerTile(new QuickSettingsUtil.TileInfo(
TILE_MOBILEDATA, R.string.title_tile_mobiledata,
"com.android.systemui:drawable/ic_qs_signal_4"));
- TILES.put(TILE_NETWORKMODE, new QuickSettingsUtil.TileInfo(
+ registerTile(new QuickSettingsUtil.TileInfo(
TILE_NETWORKMODE, R.string.title_tile_networkmode,
"com.android.systemui:drawable/ic_qs_2g3g_on"));
- TILES.put(TILE_NFC, new QuickSettingsUtil.TileInfo(
+ registerTile(new QuickSettingsUtil.TileInfo(
TILE_NFC, R.string.title_tile_nfc,
"com.android.systemui:drawable/ic_qs_nfc_off"));
- TILES.put(TILE_AUTOROTATE, new QuickSettingsUtil.TileInfo(
+ registerTile(new QuickSettingsUtil.TileInfo(
TILE_AUTOROTATE, R.string.title_tile_autorotate,
"com.android.systemui:drawable/ic_qs_auto_rotate"));
- TILES.put(TILE_PROFILE, new QuickSettingsUtil.TileInfo(
+ registerTile(new QuickSettingsUtil.TileInfo(
TILE_PROFILE, R.string.title_tile_profile,
"com.android.systemui:drawable/ic_qs_profiles"));
- TILES.put(TILE_QUIETHOURS, new QuickSettingsUtil.TileInfo(
+ registerTile(new QuickSettingsUtil.TileInfo(
TILE_QUIETHOURS, R.string.title_tile_quiet_hours,
"com.android.systemui:drawable/ic_qs_quiet_hours_off"));
- TILES.put(TILE_SCREENTIMEOUT, new QuickSettingsUtil.TileInfo(
+ registerTile(new QuickSettingsUtil.TileInfo(
TILE_SCREENTIMEOUT, R.string.title_tile_screen_timeout,
"com.android.systemui:drawable/ic_qs_screen_timeout_off"));
- TILES.put(TILE_SETTINGS, new QuickSettingsUtil.TileInfo(
+ registerTile(new QuickSettingsUtil.TileInfo(
TILE_SETTINGS, R.string.title_tile_settings,
"com.android.systemui:drawable/ic_qs_settings"));
- TILES.put(TILE_RINGER, new QuickSettingsUtil.TileInfo(
+ registerTile(new QuickSettingsUtil.TileInfo(
TILE_RINGER, R.string.title_tile_sound,
"com.android.systemui:drawable/ic_qs_ring_on"));
- TILES.put(TILE_SYNC, new QuickSettingsUtil.TileInfo(
+ registerTile(new QuickSettingsUtil.TileInfo(
TILE_SYNC, R.string.title_tile_sync,
"com.android.systemui:drawable/ic_qs_sync_off"));
- TILES.put(TILE_TORCH, new QuickSettingsUtil.TileInfo(
+ registerTile(new QuickSettingsUtil.TileInfo(
TILE_TORCH, R.string.title_tile_torch,
"com.android.systemui:drawable/ic_qs_torch_off"));
- TILES.put(TILE_USER, new QuickSettingsUtil.TileInfo(
+ registerTile(new QuickSettingsUtil.TileInfo(
TILE_USER, R.string.title_tile_user,
"com.android.systemui:drawable/ic_qs_default_user"));
- TILES.put(TILE_VOLUME, new QuickSettingsUtil.TileInfo(
+ registerTile(new QuickSettingsUtil.TileInfo(
TILE_VOLUME, R.string.title_tile_volume,
"com.android.systemui:drawable/ic_qs_volume"));
- TILES.put(TILE_WIFI, new QuickSettingsUtil.TileInfo(
+ registerTile(new QuickSettingsUtil.TileInfo(
TILE_WIFI, R.string.title_tile_wifi,
"com.android.systemui:drawable/ic_qs_wifi_4"));
- TILES.put(TILE_WIFIAP, new QuickSettingsUtil.TileInfo(
+ registerTile(new QuickSettingsUtil.TileInfo(
TILE_WIFIAP, R.string.title_tile_wifiap,
"com.android.systemui:drawable/ic_qs_wifi_ap_neutral"));
}
+ private static void registerTile(QuickSettingsUtil.TileInfo info) {
+ ENABLED_TILES.put(info.getId(), info);
+ }
+
+ private static void removeTile(String id) {
+ ENABLED_TILES.remove(id);
+ DISABLED_TILES.remove(id);
+ TILES_DEFAULT.remove(id);
+ }
+
+ private static void disableTile(String id) {
+ if (ENABLED_TILES.containsKey(id)) {
+ DISABLED_TILES.put(id, ENABLED_TILES.remove(id));
+ }
+ }
+
+ private static void enableTile(String id) {
+ if (DISABLED_TILES.containsKey(id)) {
+ ENABLED_TILES.put(id, DISABLED_TILES.remove(id));
+ }
+ }
+
+ private static boolean sUnsupportedRemoved = false;
+
+ private static synchronized void removeUnsupportedTiles(Context context) {
+ if (sUnsupportedRemoved) {
+ return;
+ }
+
+ // Don't show mobile data options if not supported
+ if (!QSUtils.deviceSupportsMobileData(context)) {
+ removeTile(TILE_MOBILEDATA);
+ removeTile(TILE_WIFIAP);
+ removeTile(TILE_NETWORKMODE);
+ }
+
+ // Don't show the bluetooth options if not supported
+ if (!QSUtils.deviceSupportsBluetooth()) {
+ removeTile(TILE_BLUETOOTH);
+ }
+
+ // Don't show the NFC tile if not supported
+ if (!QSUtils.deviceSupportsNfc(context)) {
+ removeTile(TILE_NFC);
+ }
+
+ // Don't show the LTE tile if not supported
+ if (!QSUtils.deviceSupportsLte(context)) {
+ removeTile(TILE_LTE);
+ }
+
+ // Don't show the Torch tile if not supported
+ if (!context.getResources().getBoolean(R.bool.has_led_flash)) {
+ removeTile(TILE_TORCH);
+ }
+
+ sUnsupportedRemoved = true;
+ }
+
+ private static synchronized void refreshAvailableTiles(Context context) {
+ ContentResolver resolver = context.getContentResolver();
+
+ // Some phones run on networks not supported by the networkmode tile,
+ // so make it available only where supported
+ int networkState = -99;
+ try {
+ networkState = Settings.Global.getInt(resolver,
+ Settings.Global.PREFERRED_NETWORK_MODE);
+ } catch (Settings.SettingNotFoundException e) {
+ Log.e(TAG, "Unable to retrieve PREFERRED_NETWORK_MODE", e);
+ }
+
+ switch (networkState) {
+ // list of supported network modes
+ case Phone.NT_MODE_WCDMA_PREF:
+ case Phone.NT_MODE_WCDMA_ONLY:
+ case Phone.NT_MODE_GSM_UMTS:
+ case Phone.NT_MODE_GSM_ONLY:
+ enableTile(TILE_NETWORKMODE);
+ break;
+ default:
+ disableTile(TILE_NETWORKMODE);
+ break;
+ }
+
+ // Don't show the profiles tile if profiles are disabled
+ if (QSUtils.systemProfilesEnabled(resolver)) {
+ enableTile(TILE_PROFILE);
+ } else {
+ disableTile(TILE_PROFILE);
+ }
+
+ // Don't show the Expanded desktop tile if expanded desktop is disabled
+ if (QSUtils.expandedDesktopEnabled(resolver)) {
+ enableTile(TILE_EXPANDEDDESKTOP);
+ } else {
+ disableTile(TILE_EXPANDEDDESKTOP);
+ }
+ }
+
+ public static synchronized void updateAvailableTiles(Context context) {
+ removeUnsupportedTiles(context);
+ refreshAvailableTiles(context);
+ }
+
+ public static boolean isTileAvailable(String id) {
+ return ENABLED_TILES.containsKey(id);
+ }
+
public static String getCurrentTiles(Context context) {
String tiles = Settings.System.getString(context.getContentResolver(),
Settings.System.QUICK_SETTINGS_TILES);
@@ -199,18 +317,7 @@ public class QuickSettingsUtil {
}
public static String getDefaultTiles(Context context) {
- // Filter items not compatible with device
- boolean bluetoothSupported = deviceSupportsBluetooth();
- boolean mobileDataSupported = deviceSupportsMobileData(context);
-
- if (!bluetoothSupported) {
- TILES_DEFAULT.remove(TILE_BLUETOOTH);
- }
-
- if (!mobileDataSupported) {
- TILES_DEFAULT.remove(TILE_MOBILEDATA);
- }
-
+ removeUnsupportedTiles(context);
return TextUtils.join(TILE_DELIMITER, TILES_DEFAULT);
}
diff --git a/src/com/android/settings/cyanogenmod/privacyguard/PrivacyGuardAppListAdapter.java b/src/com/android/settings/cyanogenmod/privacyguard/PrivacyGuardAppListAdapter.java
new file mode 100644
index 0000000..4c7e815
--- /dev/null
+++ b/src/com/android/settings/cyanogenmod/privacyguard/PrivacyGuardAppListAdapter.java
@@ -0,0 +1,140 @@
+/*
+ * Copyright (C) 2013 SlimRoms 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.settings.cyanogenmod.privacyguard;
+
+import android.content.Context;
+import android.content.pm.PackageManager;
+import android.graphics.drawable.Drawable;
+import android.os.AsyncTask;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.BaseAdapter;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.android.settings.R;
+import com.android.settings.cyanogenmod.privacyguard.PrivacyGuardManager.AppInfo;
+
+import java.util.List;
+import java.util.concurrent.ConcurrentHashMap;
+
+public class PrivacyGuardAppListAdapter extends BaseAdapter {
+
+ private LayoutInflater mInflater;
+ private PackageManager mPm;
+
+ private List<AppInfo> mApps;
+ private ConcurrentHashMap<String, Drawable> mIcons;
+ private Drawable mDefaultImg;
+
+ private Context mContext;
+
+ //constructor
+ public PrivacyGuardAppListAdapter(Context context, List<AppInfo> apps) {
+ mContext = context;
+ mInflater = LayoutInflater.from(mContext);
+ mPm = context.getPackageManager();
+ mApps = apps;
+
+ // set the default icon till the actual app icon is loaded in async task
+ mDefaultImg = mContext.getResources().getDrawable(android.R.mipmap.sym_def_app_icon);
+ mIcons = new ConcurrentHashMap<String, Drawable>();
+
+ new LoadIconsTask().execute(apps.toArray(new PrivacyGuardManager.AppInfo[]{}));
+ }
+
+ @Override
+ public int getCount() {
+ return mApps.size();
+ }
+
+ @Override
+ public Object getItem(int position) {
+ return mApps.get(position);
+ }
+
+ @Override
+ public long getItemId(int position) {
+ return position;
+ }
+
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+ PrivacyGuardAppViewHolder appHolder;
+
+ if (convertView == null) {
+ convertView = mInflater.inflate(R.layout.privacy_guard_manager_list_row, null);
+
+ // creates a ViewHolder and children references
+ appHolder = new PrivacyGuardAppViewHolder();
+ appHolder.title = (TextView) convertView.findViewById(R.id.app_title);
+ appHolder.icon = (ImageView) convertView.findViewById(R.id.app_icon);
+ appHolder.privacyGuardIcon = (ImageView) convertView.findViewById(R.id.app_privacy_guard_icon);
+ convertView.setTag(appHolder);
+ } else {
+ appHolder = (PrivacyGuardAppViewHolder) convertView.getTag();
+ }
+
+ PrivacyGuardManager.AppInfo app = mApps.get(position);
+
+ appHolder.title.setText(app.title);
+
+ Drawable icon = mIcons.get(app.packageName);
+ appHolder.icon.setImageDrawable(icon != null ? icon : mDefaultImg);
+
+ int privacyGuardDrawableResId = app.privacyGuardEnabled
+ ? R.drawable.ic_privacy_guard : R.drawable.ic_privacy_guard_off;
+ appHolder.privacyGuardIcon.setImageResource(privacyGuardDrawableResId);
+
+ return convertView;
+ }
+
+ /**
+ * An asynchronous task to load the icons of the installed applications.
+ */
+ private class LoadIconsTask extends AsyncTask<PrivacyGuardManager.AppInfo, Void, Void> {
+ @Override
+ protected Void doInBackground(PrivacyGuardManager.AppInfo... apps) {
+ for (PrivacyGuardManager.AppInfo app : apps) {
+ try {
+ Drawable icon = mPm.getApplicationIcon(app.packageName);
+ mIcons.put(app.packageName, icon);
+ publishProgress();
+ } catch (PackageManager.NameNotFoundException e) {
+ // ignored; app will show up with default image
+ }
+ }
+
+ return null;
+ }
+
+ @Override
+ protected void onProgressUpdate(Void... progress) {
+ notifyDataSetChanged();
+ }
+ }
+
+ /**
+ * App view holder used to reuse the views inside the list.
+ */
+ public static class PrivacyGuardAppViewHolder {
+ TextView title;
+ ImageView icon;
+ ImageView privacyGuardIcon;
+ }
+}
diff --git a/src/com/android/settings/cyanogenmod/privacyguard/PrivacyGuardManager.java b/src/com/android/settings/cyanogenmod/privacyguard/PrivacyGuardManager.java
new file mode 100644
index 0000000..51942ae
--- /dev/null
+++ b/src/com/android/settings/cyanogenmod/privacyguard/PrivacyGuardManager.java
@@ -0,0 +1,346 @@
+/*
+ * Copyright (C) 2013 SlimRoms 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.settings.cyanogenmod.privacyguard;
+
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.app.DialogFragment;
+import android.app.Fragment;
+import android.app.FragmentManager;
+import android.content.ActivityNotFoundException;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager;
+import android.content.pm.Signature;
+import android.content.SharedPreferences;
+import android.net.Uri;
+import android.os.Bundle;
+import android.preference.PreferenceManager;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuInflater;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.AdapterView;
+import android.widget.AdapterView.OnItemClickListener;
+import android.widget.AdapterView.OnItemLongClickListener;
+import android.widget.ListView;
+import android.widget.TextView;
+
+import com.android.settings.R;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+
+public class PrivacyGuardManager extends Fragment
+ implements OnItemClickListener, OnItemLongClickListener {
+
+ private static final String TAG = "PrivacyGuardManager";
+
+ private TextView mNoUserAppsInstalled;
+ private ListView mAppsList;
+ private PrivacyGuardAppListAdapter mAdapter;
+ private List<AppInfo> mApps;
+
+ private PackageManager mPm;
+ private Activity mActivity;
+
+ private SharedPreferences mPreferences;
+
+ // array of critical permissions where privacy guard
+ // can hide the information
+ private static final String[] PERMISSION_FILTER = new String[] {
+ android.Manifest.permission.ACCESS_COARSE_LOCATION,
+ android.Manifest.permission.ACCESS_FINE_LOCATION,
+ android.Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS,
+ android.Manifest.permission.READ_HISTORY_BOOKMARKS,
+ android.Manifest.permission.WRITE_HISTORY_BOOKMARKS,
+ android.Manifest.permission.READ_CALENDAR,
+ android.Manifest.permission.WRITE_CALENDAR,
+ android.Manifest.permission.READ_CONTACTS,
+ android.Manifest.permission.WRITE_CONTACTS,
+ android.Manifest.permission.READ_CALL_LOG,
+ android.Manifest.permission.WRITE_CALL_LOG,
+ "com.android.voicemail.permission.READ_WRITE_ALL_VOICEMAIL",
+ android.Manifest.permission.READ_SMS,
+ android.Manifest.permission.RECEIVE_SMS,
+ android.Manifest.permission.SEND_SMS,
+ android.Manifest.permission.WRITE_SMS,
+ android.Manifest.permission.BROADCAST_SMS
+ };
+
+ // holder for package data passed into the adapter
+ public static final class AppInfo {
+ String title;
+ String packageName;
+ boolean privacyGuardEnabled;
+ }
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+
+ mActivity = getActivity();
+ mPm = mActivity.getPackageManager();
+
+ return inflater.inflate(R.layout.privacy_guard_manager, container, false);
+ }
+
+ @Override
+ public void onDestroyView() {
+ super.onDestroyView();
+ FragmentManager fm = getFragmentManager();
+ Fragment f = fm.findFragmentById(R.id.privacy_guard_prefs);
+ if (f != null && !fm.isDestroyed()) {
+ fm.beginTransaction().remove(f).commit();
+ }
+ }
+
+ @Override
+ public void onActivityCreated(Bundle savedInstanceState) {
+ super.onActivityCreated(savedInstanceState);
+
+ mNoUserAppsInstalled = (TextView) mActivity.findViewById(R.id.error);
+
+ mAppsList = (ListView) mActivity.findViewById(R.id.apps_list);
+ mAppsList.setOnItemClickListener(this);
+ mAppsList.setOnItemLongClickListener(this);
+
+ // get shared preference
+ mPreferences = mActivity.getSharedPreferences("privacy_guard_manager", Activity.MODE_PRIVATE);
+ if (!mPreferences.getBoolean("first_help_shown", false)) {
+ showHelp();
+ }
+
+ // load apps and construct the list
+ loadApps();
+ setHasOptionsMenu(true);
+ }
+
+ private void loadApps() {
+ mApps = loadInstalledApps();
+
+ // if app list is empty inform the user
+ // else go ahead and construct the list
+ if (mApps == null || mApps.isEmpty()) {
+ if (shouldFilterByPermission()) {
+ mNoUserAppsInstalled.setText(R.string.privacy_guard_filter_does_not_match);
+ } else {
+ mNoUserAppsInstalled.setText(R.string.privacy_guard_no_user_apps);
+ }
+ mNoUserAppsInstalled.setVisibility(View.VISIBLE);
+ mAppsList.setVisibility(View.GONE);
+ } else {
+ mNoUserAppsInstalled.setVisibility(View.GONE);
+ mAppsList.setVisibility(View.VISIBLE);
+ mAdapter = new PrivacyGuardAppListAdapter(mActivity, mApps);
+ mAppsList.setAdapter(mAdapter);
+ }
+ }
+
+ private void resetPrivacyGuard() {
+ if (mApps == null || mApps.isEmpty()) {
+ return;
+ }
+ // turn off privacy guard for all apps shown in the current list
+ for (AppInfo app : mApps) {
+ if (app.privacyGuardEnabled) {
+ mPm.setPrivacyGuardSetting(app.packageName, false);
+ app.privacyGuardEnabled = false;
+ }
+ }
+ mAdapter.notifyDataSetChanged();
+ }
+
+ @Override
+ public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
+ // on click change the privacy guard status for this item
+ final AppInfo app = (AppInfo) parent.getItemAtPosition(position);
+
+ app.privacyGuardEnabled = !app.privacyGuardEnabled;
+ mPm.setPrivacyGuardSetting(app.packageName, app.privacyGuardEnabled);
+
+ mAdapter.notifyDataSetChanged();
+ }
+
+ @Override
+ public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
+ // on long click open app details window
+ final AppInfo app = (AppInfo) parent.getItemAtPosition(position);
+
+ try {
+ startActivity(new Intent(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS,
+ Uri.parse("package:" + app.packageName)));
+ } catch (ActivityNotFoundException e) {
+ Log.e(TAG, "Couldn't open app details activity", e);
+ }
+
+ return true;
+ }
+
+ /**
+ * Uses the package manager to query for all currently installed apps
+ * for the list.
+ *
+ * @return the complete List off installed applications (@code PrivacyGuardAppInfo)
+ */
+ private List<AppInfo> loadInstalledApps() {
+ List<AppInfo> apps = new ArrayList<AppInfo>();
+ List<PackageInfo> packages = mPm.getInstalledPackages(
+ PackageManager.GET_PERMISSIONS | PackageManager.GET_SIGNATURES);
+ boolean showSystemApps = shouldShowSystemApps();
+ boolean filterByPermission = shouldFilterByPermission();
+ Signature platformCert;
+
+ try {
+ PackageInfo sysInfo = mPm.getPackageInfo("android", PackageManager.GET_SIGNATURES);
+ platformCert = sysInfo.signatures[0];
+ } catch (PackageManager.NameNotFoundException e) {
+ platformCert = null;
+ }
+
+ for (PackageInfo info : packages) {
+ final ApplicationInfo appInfo = info.applicationInfo;
+
+ // hide apps signed with the platform certificate to avoid the user
+ // shooting himself in the foot
+ if (platformCert != null && info.signatures != null
+ && platformCert.equals(info.signatures[0])) {
+ continue;
+ }
+
+ // skip all system apps if they shall not be included
+ if (!showSystemApps && (appInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0) {
+ continue;
+ }
+
+ if (filterByPermission) {
+ final String[] requestedPermissions = info.requestedPermissions;
+ if (requestedPermissions == null || !filterAppPermissions(requestedPermissions)) {
+ continue;
+ }
+ }
+
+ AppInfo app = new AppInfo();
+ app.title = appInfo.loadLabel(mPm).toString();
+ app.packageName = info.packageName;
+ app.privacyGuardEnabled = mPm.getPrivacyGuardSetting(app.packageName);
+ apps.add(app);
+ }
+
+ // sort the apps by title
+ Collections.sort(apps, new Comparator<AppInfo>() {
+ @Override
+ public int compare(AppInfo lhs, AppInfo rhs) {
+ return lhs.title.compareToIgnoreCase(rhs.title);
+ }
+ });
+
+ return apps;
+ }
+
+ private boolean filterAppPermissions(final String[] requestedPermissions) {
+ for (String requested : requestedPermissions) {
+ for (String filtered : PERMISSION_FILTER) {
+ if (requested.equals(filtered)) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ private boolean shouldShowSystemApps() {
+ return mPreferences.getBoolean("show_system_apps", false);
+ }
+
+ private boolean shouldFilterByPermission() {
+ return mPreferences.getBoolean("filter_by_permission", true);
+ }
+
+ private class HelpDialogFragment extends DialogFragment {
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState) {
+ return new AlertDialog.Builder(getActivity())
+ .setTitle(R.string.privacy_guard_help_title)
+ .setMessage(R.string.privacy_guard_help_text)
+ .setNegativeButton(android.R.string.ok, new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ dialog.cancel();
+ }
+ })
+ .create();
+ }
+
+ @Override
+ public void onCancel(DialogInterface dialog) {
+ mPreferences.edit().putBoolean("first_help_shown", true).commit();
+ }
+ }
+
+ private void showHelp() {
+ HelpDialogFragment fragment = new HelpDialogFragment();
+ fragment.show(getFragmentManager(), "help_dialog");
+ }
+
+ @Override
+ public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
+ super.onCreateOptionsMenu(menu, inflater);
+ inflater.inflate(R.menu.privacy_guard_manager, menu);
+ menu.findItem(R.id.show_system_apps).setChecked(shouldShowSystemApps());
+ menu.findItem(R.id.filter_app_permissions).setChecked(shouldFilterByPermission());
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ switch (item.getItemId()) {
+ case R.id.help:
+ showHelp();
+ return true;
+ case R.id.reset:
+ resetPrivacyGuard();
+ return true;
+ case R.id.filter_app_permissions:
+ case R.id.show_system_apps:
+ final String prefName = item.getItemId() == R.id.filter_app_permissions
+ ? "filter_by_permission" : "show_system_apps";
+ // set the menu checkbox and save it in
+ // shared preference and rebuild the list
+ item.setChecked(!item.isChecked());
+ mPreferences.edit().putBoolean(prefName, item.isChecked()).commit();
+ loadApps();
+ return true;
+ default:
+ return super.onContextItemSelected(item);
+ }
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+ // rebuild the list; the user might have changed settings inbetween
+ loadApps();
+ }
+}
diff --git a/src/com/android/settings/cyanogenmod/privacyguard/PrivacyGuardPrefs.java b/src/com/android/settings/cyanogenmod/privacyguard/PrivacyGuardPrefs.java
new file mode 100644
index 0000000..6d18952
--- /dev/null
+++ b/src/com/android/settings/cyanogenmod/privacyguard/PrivacyGuardPrefs.java
@@ -0,0 +1,86 @@
+/*
+ * Copyright (C) 2013 Slimroms
+ *
+ * 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.settings.cyanogenmod.privacyguard;
+
+import android.app.Activity;
+import android.content.Context;
+import android.os.Bundle;
+import android.preference.CheckBoxPreference;
+import android.preference.Preference;
+import android.preference.Preference.OnPreferenceChangeListener;
+import android.preference.PreferenceScreen;
+import android.provider.Settings;
+import android.provider.Settings.SettingNotFoundException;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ListView;
+
+import com.android.settings.R;
+import com.android.settings.SettingsPreferenceFragment;
+import com.android.settings.Utils;
+
+public class PrivacyGuardPrefs extends SettingsPreferenceFragment implements
+ OnPreferenceChangeListener {
+
+ private static final String TAG = "PrivacyGuardPrefs";
+
+ private static final String KEY_PRIVACY_GUARD_DEFAULT = "privacy_guard_default";
+
+ private CheckBoxPreference mPrivacyGuardDefault;
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ addPreferencesFromResource(R.xml.privacy_guard_prefs);
+ PreferenceScreen prefSet = getPreferenceScreen();
+
+ mPrivacyGuardDefault = (CheckBoxPreference) findPreference(KEY_PRIVACY_GUARD_DEFAULT);
+ mPrivacyGuardDefault.setOnPreferenceChangeListener(this);
+
+ try {
+ mPrivacyGuardDefault.setChecked(Settings.Secure.getInt(getContentResolver(),
+ Settings.Secure.PRIVACY_GUARD_DEFAULT) == 1);
+ } catch (SettingNotFoundException e) {
+ mPrivacyGuardDefault.setChecked(false);
+ }
+ }
+
+ @Override
+ public View onCreateView(LayoutInflater inflater,
+ ViewGroup container, Bundle savedInstanceState) {
+ final View view = super.onCreateView(inflater, container, savedInstanceState);
+ final ListView list = (ListView) view.findViewById(android.R.id.list);
+ // our container already takes care of the padding
+ int paddingTop = list.getPaddingTop();
+ int paddingBottom = list.getPaddingBottom();
+ list.setPadding(0, paddingTop, 0, paddingBottom);
+ return view;
+ }
+
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+ if (preference == mPrivacyGuardDefault) {
+ boolean value = (Boolean) newValue;
+ Settings.Secure.putInt(getContentResolver(),
+ Settings.Secure.PRIVACY_GUARD_DEFAULT, value ? 1 : 0);
+ return true;
+ }
+ return false;
+ }
+}
diff --git a/src/com/android/settings/deviceinfo/StorageVolumePreferenceCategory.java b/src/com/android/settings/deviceinfo/StorageVolumePreferenceCategory.java
index 61188ec..be7c530 100644
--- a/src/com/android/settings/deviceinfo/StorageVolumePreferenceCategory.java
+++ b/src/com/android/settings/deviceinfo/StorageVolumePreferenceCategory.java
@@ -16,6 +16,8 @@
package com.android.settings.deviceinfo;
+import android.app.Activity;
+import android.app.ActivityManager;
import android.app.ActivityManagerNative;
import android.app.ActivityThread;
import android.app.DownloadManager;
@@ -25,27 +27,39 @@ import android.content.pm.IPackageManager;
import android.content.pm.UserInfo;
import android.content.res.Resources;
import android.hardware.usb.UsbManager;
+import android.media.MediaScannerConnection;
+import android.media.MediaScannerConnection.OnScanCompletedListener;
+import android.net.Uri;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.os.RemoteException;
import android.os.UserManager;
+import android.os.Environment.UserEnvironment;
import android.os.storage.StorageManager;
import android.os.storage.StorageVolume;
import android.preference.Preference;
import android.preference.PreferenceCategory;
import android.text.format.Formatter;
+import android.util.Log;
+import android.widget.Toast;
import com.android.settings.R;
import com.android.settings.deviceinfo.StorageMeasurement.MeasurementDetails;
import com.android.settings.deviceinfo.StorageMeasurement.MeasurementReceiver;
+import com.android.settings.deviceinfo.UsageBarPreference.OnRequestMediaRescanListener;
import com.google.android.collect.Lists;
+import java.io.File;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
-public class StorageVolumePreferenceCategory extends PreferenceCategory {
+public class StorageVolumePreferenceCategory extends PreferenceCategory
+ implements OnRequestMediaRescanListener, OnScanCompletedListener {
+
+ public static final String TAG = "StorageVolumePreferenceCategory";
+
public static final String KEY_CACHE = "cache";
private static final int ORDER_USAGE_BAR = -2;
@@ -54,6 +68,8 @@ public class StorageVolumePreferenceCategory extends PreferenceCategory {
/** Physical volume being measured, or {@code null} for internal. */
private final StorageVolume mVolume;
private final StorageMeasurement mMeasure;
+ private final boolean mIsInternal;
+ private final boolean mIsPrimary;
private final Resources mResources;
private final StorageManager mStorageManager;
@@ -120,6 +136,8 @@ public class StorageVolumePreferenceCategory extends PreferenceCategory {
super(context);
mVolume = volume;
+ mIsInternal = mVolume == null;
+ mIsPrimary = mVolume != null ? mVolume.isPrimary() : false;
mMeasure = StorageMeasurement.getInstance(context, volume);
mResources = context.getResources();
@@ -147,8 +165,17 @@ public class StorageVolumePreferenceCategory extends PreferenceCategory {
final List<UserInfo> otherUsers = getUsersExcluding(currentUser);
final boolean showUsers = mVolume == null && otherUsers.size() > 0;
+ boolean allowMediaScan = false;
+ if ((mIsInternal && Environment.isExternalStorageEmulated()) || mIsPrimary) {
+ allowMediaScan = true;
+ } else if (mVolume != null && !mVolume.isRemovable()) {
+ allowMediaScan = true;
+ }
+
mUsageBarPreference = new UsageBarPreference(context);
mUsageBarPreference.setOrder(ORDER_USAGE_BAR);
+ mUsageBarPreference.setOnRequestMediaRescanListener(this);
+ mUsageBarPreference.setAllowMediaScan(allowMediaScan);
addPreference(mUsageBarPreference);
mItemTotal = buildItem(R.string.memory_size, 0);
@@ -481,4 +508,37 @@ public class StorageVolumePreferenceCategory extends PreferenceCategory {
}
return users;
}
+
+ @Override
+ public void onRequestMediaRescan() {
+ final int currentUser = ActivityManager.getCurrentUser();
+ final UserEnvironment currentEnv = new UserEnvironment(currentUser);
+
+ File path = null;
+ if ((mIsInternal && Environment.isExternalStorageEmulated()) || mIsPrimary) {
+ path = currentEnv.getExternalStorageDirectory();
+ } else {
+ path = mVolume.getPathFile();
+ }
+
+ Log.d(TAG, "Request scan of " + path.getAbsolutePath());
+ MediaScannerConnection.scanFile(
+ getContext(), new String[]{path.getAbsolutePath()}, null, this);
+ }
+
+ @Override
+ public void onScanCompleted(String path, final Uri uri) {
+ if (uri != null) {
+ measure();
+ }
+ ((Activity)getContext()).runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ mUsageBarPreference.notifyScanCompleted();
+ if (uri != null) {
+ Toast.makeText(getContext(), R.string.storage_rescan_media_complete, Toast.LENGTH_SHORT).show();
+ }
+ }
+ });
+ }
}
diff --git a/src/com/android/settings/deviceinfo/UsageBarPreference.java b/src/com/android/settings/deviceinfo/UsageBarPreference.java
index 2f3fd03..b0fd226 100644
--- a/src/com/android/settings/deviceinfo/UsageBarPreference.java
+++ b/src/com/android/settings/deviceinfo/UsageBarPreference.java
@@ -20,9 +20,13 @@ import com.android.settings.R;
import com.google.common.collect.Lists;
import android.content.Context;
+import android.os.Handler;
import android.preference.Preference;
import android.util.AttributeSet;
import android.view.View;
+import android.view.View.OnClickListener;
+import android.widget.ImageView;
+import android.widget.ProgressBar;
import java.util.ArrayList;
import java.util.Collection;
@@ -33,23 +37,42 @@ import java.util.List;
* Creates a percentage bar chart inside a preference.
*/
public class UsageBarPreference extends Preference {
+
+ public interface OnRequestMediaRescanListener {
+ void onRequestMediaRescan();
+ }
+
+ private ImageView mRescanMedia = null;
+ private ProgressBar mRescanMediaWaiting = null;
private PercentageBarChart mChart = null;
+ private boolean mAllowMediaScan;
+
+ private OnRequestMediaRescanListener mOnRequestMediaRescanListener;
+
private final List<PercentageBarChart.Entry> mEntries = Lists.newArrayList();
+ private Handler mHandler;
+
public UsageBarPreference(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
- setLayoutResource(R.layout.preference_memoryusage);
+ init();
}
public UsageBarPreference(Context context) {
super(context);
- setLayoutResource(R.layout.preference_memoryusage);
+ init();
}
public UsageBarPreference(Context context, AttributeSet attrs) {
super(context, attrs);
+ init();
+ }
+
+ private void init() {
setLayoutResource(R.layout.preference_memoryusage);
+ mHandler = new Handler();
+ mAllowMediaScan = false;
}
public void addEntry(int order, float percentage, int color) {
@@ -57,12 +80,49 @@ public class UsageBarPreference extends Preference {
Collections.sort(mEntries);
}
+ protected void setOnRequestMediaRescanListener(OnRequestMediaRescanListener listener) {
+ mOnRequestMediaRescanListener = listener;
+ }
+
+ protected void setAllowMediaScan(boolean allow) {
+ mAllowMediaScan = allow;
+ notifyScanCompleted();
+ }
+
+ protected void notifyScanCompleted() {
+ if (mRescanMedia != null) {
+ mRescanMedia.setVisibility(mAllowMediaScan ? View.VISIBLE : View.INVISIBLE);
+ mRescanMediaWaiting.setVisibility(View.GONE);
+ }
+ }
+
@Override
protected void onBindView(View view) {
super.onBindView(view);
mChart = (PercentageBarChart) view.findViewById(R.id.percentage_bar_chart);
mChart.setEntries(mEntries);
+
+ mRescanMediaWaiting = (ProgressBar) view.findViewById(R.id.memory_usage_rescan_media_waiting);
+
+ mRescanMedia = (ImageView) view.findViewById(R.id.memory_usage_rescan_media);
+ mRescanMedia.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ if (mOnRequestMediaRescanListener != null) {
+ mRescanMedia.setVisibility(View.GONE);
+ mRescanMediaWaiting.setVisibility(View.VISIBLE);
+ mHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ mOnRequestMediaRescanListener.onRequestMediaRescan();
+ }
+ });
+ }
+ }
+ });
+
+ notifyScanCompleted();
}
public void commit() {
diff --git a/src/com/android/settings/inputmethod/StylusGestures.java b/src/com/android/settings/inputmethod/StylusGestures.java
index 908d7ea..172d714 100644
--- a/src/com/android/settings/inputmethod/StylusGestures.java
+++ b/src/com/android/settings/inputmethod/StylusGestures.java
@@ -146,8 +146,9 @@ public class StylusGestures extends SettingsPreferenceFragment implements
private void setPrefValue(ListPreference pref, String packageName) {
if (packageName == null) {
- return;
+ packageName = String.valueOf(KEY_NO_ACTION);
}
+
String text = mapUpdateValue(packageName);
if (text != null) {
pref.setValue(packageName);