diff --git a/.classpath b/.classpath
index 68d0c3e676..4d14041bcc 100644
--- a/.classpath
+++ b/.classpath
@@ -3,9 +3,9 @@
-
-
+
+
diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000000..6e2dee1837
--- /dev/null
+++ b/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding//src/com/ceco/gm2/gravitybox/UnicodeFilter.java=UTF-8
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index e2662c34b1..9f9085b691 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -1,11 +1,26 @@
+
+
+ android:versionCode="52"
+ android:versionName="2.7.6" >
@@ -30,6 +45,11 @@
+
+
+
@@ -55,7 +75,7 @@
android:value="true" />
+ android:value="30+" />
diff --git a/CHANGELOG.txt b/CHANGELOG.txt
index e6d9eda44d..8316db9296 100644
--- a/CHANGELOG.txt
+++ b/CHANGELOG.txt
@@ -1,3 +1,611 @@
+Changelog 2.7.6 - 26/11/2013
+--------------------------------------
+- Secondary signal icon color overrides stock orange signal icon independently of SIM Slot (MTK Dual SIMs)
+- Adjusted app launcher layout for HDPI devices
+- KitKat compatibility improvements:
+--- support for rotation lock tile
+--- support for location (stock GPS) tile
+--- option to choose QS tile style (JellyBean or KitKat)
+--- white colors for statusbar elements by default on KitKat when statusbar coloring is off
+--- fixed battery style options
+--- option to adjust bottom margin of RAM bar and clear all recents button
+--- disabled phone and messaging tweaks (require rework)
+- Updated Portuguese (PT) translation (thanks to bgcngm)
+- Updated Japanese translations (thanks to WedyDQ10)
+- Updated Italian translations (thanks to pitone02)
+- Updated Russian translations (thanks to smb.roman AKA romashko)
+- Updated Chinese (Traditional) translations (thanks to Eric850130)
+- Updated French translation (thanks to ch-vox)
+
+Changelog 2.7.5 - 24/11/2013
+--------------------------------------
+- Fixed misbehaviour of MENU key in some apps when double-tap is enabled
+- Improved compatibility with KitKat:
+--- disabled statusbar BG coloring
+--- disabled "Follow stock battery" option
+--- improved QuickSettings compatibility
+--- improved compatibility with stock battery
+
+Changelog 2.7.4 - 24/11/2013
+--------------------------------------
+- Initial support for KitKat [EXPERIMENTAL]
+- Added support for MT6582 (thanks to bgcngm)
+- Improved compatibility with Lenovo devices (thanks to bgcngm)
+- Improved support for MT6572 devices
+- Fixed Circle Battery not being vertically centered on some devices
+- Status bar icon coloring:
+--- improved icon layout and alignment
+--- added option for choosing status icon style (JellyBean or KitKat style)
+- Hardware Key Actions:
+--- improved handling of Back long-press
+--- improved handling of Menu double-tap
+--- added Back key double-tap support
+--- added Go Home and Go Back actions
+- New GravityBox icon (thanks to Jerber)
+- Updated French translation (thanks to ch-vox)
+- Updated Chinese (Traditional) translations (thanks to Eric850130)
+- Updated German translations (thanks to samsonbear)
+- Updated Indonesian translations (thanks to awaaas)
+- Updated Japanese translations (thanks to WedyDQ10)
+
+Changelog 2.7.3 - 18/11/2013
+--------------------------------------
+- New battery style: KitKat battery with or without percentage and coloring support
+- Adjusted WiFi icon alignment
+- Reduced space between WiFi and mobile signal icons on MTK Dual SIMs
+- Fixed undesired replacement of icons coming from other packages than SystemUI (e.g. Play store icon replaced with BT icon)
+- Fixed statusbar icons not returning to stock after coloring is turned off
+- Updated French translation (thanks to ch-vox)
+- Updated Portuguese (PT) translation (thanks to bgcngm)
+- Updated Chinese (Simplified) translations (thanks to liveasx)
+- Updated Japanese translations (thanks to WedyDQ10)
+- Updated Chinese (Traditional) translations (thanks to Eric850130)
+- Updated Polish translations (thanks to xtrem007)
+- Updated Hungarian translations (thanks to benjoe1)
+- Updated Italian translations (thanks to pitone02)
+
+Changelog 2.7.2 - 15/11/2013
+--------------------------------------
+- Statusbar icon coloring improvements:
+--- added original signal icons from KitKat
+--- added "partially-connected" state signal icons created from original KK icons
+--- added xxhdpi high-res signal icons
+--- fixed bluetooth icon shape
+--- added support for coloring airplane mode icon
+--- added option for secondary signal icon color that overrides default MTK orange icon (MTK Dual SIMs only)
+--- added option for secondary data activity color (MTK Dual SIMs only)
+- Transparency management improvements
+--- improved compatibility with Xperia devices
+--- statusbar and navbar settings grouped and moved to the root of the settings hierarchy
+--- navbar transparency settings made independent of navbar tweaks
+--- option to set transparency manager mode:
+------ disabled - completely disables transparency related functions
+------ statusbar - applies transparency to statusbar only
+------ navigation bar - applies transparency to navbar only
+------ both - applies transparency to both
+--- improved navbar transparency handling (theoretically, may improve compatibility with Android 4.3)
+- Option for enabling/disabling navigation bar colors
+- Updated Chinese (Traditional) translations (thanks to Eric850130)
+- Updated Indonesian translations (thanks to awaaas)
+- Updated Italian translations (thanks to pitone02)
+- Updated Portuguese (PT) translation (thanks to bgcngm)
+- Updated Ukrainian translations (thanks to egor4yk90)
+- Updated French translation (thanks to ch-vox)
+- Updated Japanese translations (thanks to WedyDQ10)
+- Updated Russian translations (thanks to smb.roman AKA romashko)
+
+Changelog 2.7.1 - 12/11/2013
+--------------------------------------
+- Fixed wallpaper scrolling when navbar transparency is on
+
+Changelog 2.7.0 - 12/11/2013
+--------------------------------------
+- Improved transparency management:
+--- Wallpaper now correctly scales behind navbar when it has transparency set. Works for majority of launchers, including Google Experience Launcher (KitKat)
+--- Support for animated transitions between transparent/non-transparent states
+- Statusbar Icon Colors:
+--- Improved icon quality (fixed blurriness)
+--- Support for coloring bluetooth, alarm, ringer vibrate, headset icons
+- Navigation Bar Tweaks:
+--- Reorganized menu
+--- Options for navigation bar colors (key color, glow color, navbar background color)
+- Lockscreen:
+--- Option for disabling lockscreen shade (removes dark tint from lockscreen)
+--- Hide statusbar clock support added for common 3rd party widgets (Chronus, DashClock, DeskClock)
+- Pie: improved sensitivity by being less strict about swiping direction
+- Improved detection of existing battery percent text (fixes double percent on some devices)
+- Improved determination of Circle Battery size (fixes circle being too small on some devices)
+- Increased Circle Battery left margin
+- Application launcher: run app immediately when it's the one and only app in the list
+- Updated Master Key Vulnerabilities patch (thanks to bgcngm and tungstwenty)
+- GravityBox Settings improvements:
+--- Enabled color hex value editor for all color pickers
+--- Added fine-tuning up/down buttons for sliders
+- Added Greek translations (thanks to vagosofron)
+- Updated French translation (thanks to ch-vox)
+- Updated Japanese translations (thanks to WedyDQ10)
+- Updated Polish translations (thanks to xtrem007)
+- Updated Chinese (Simplified) translations (thanks to liveasx)
+- Updated Chinese (Traditional) translations (thanks to Eric850130)
+- Updated Italian translations (thanks to pitone02)
+- Updated Portuguese (PT) translation (thanks to bgcngm)
+- Updated Portuguese (BR) translation (thanks to bgcngm)
+- Updated Hungarian translations (thanks to benjoe1)
+- Updated Russian translations (thanks to smb.roman AKA romashko)
+
+Changelog 2.6.9 - 03/11/2013
+--------------------------------------
+- Fixed battery percent text issue introduced in v2.6.8
+
+Changelog 2.6.8 - 02/11/2013
+--------------------------------------
+- Fixed SystemUI crash when changing Pie properties while Pie is not active
+- Fixed glitch (buttons disappearing) in navigation bar introduced by app launcher key
+- Fixed volume panel expansion on Xperia devices (thanks to MohammadAG)
+- Improved navigation bar app launcher key layout for non-AOSP devices (Xperia)
+- Added option to make the panel fully expand to take up all the wasted space (thanks to MohammadAG)
+- Improved and simplified battery style tweaks (potentially eliminates phantom circle battery/percentage on some ROMs)
+- QuickSettings tiles: improved tiles layout for Android 4.3 (thanks daniil1410 for testing)
+- Updated Chinese (Traditional) translations (thanks to Eric850130)
+- Updated Italian translations (thanks to pitone02)
+- Updated French translation (thanks to ch-vox)
+- Updated Indonesian translations (thanks to awaaas)
+- Updated Polish translations (thanks to xtrem007)
+- Updated Portuguese (PT) translation (thanks to bgcngm)
+
+Changelog 2.6.7 - 31/10/2013
+--------------------------------------
+- Fixed SystemUI crash on tablet devices
+- Improved navigation bar app key layout injection
+--- fixes navbar keys layout on Xperia and other non-AOSP devices
+--- navbar layout is modified only in case app key is enabled
+- Fixed app launcher not launching some apps correctly (e.g. RootExplorer)
+- Updated Portuguese (PT) translation (thanks to bgcngm)
+- Updated Portuguese (BR) translation (thanks to bgcngm)
+- Updated Chinese (Traditional) translations (thanks to Eric850130)
+- Updated Ukrainian translations (thanks to egor4yk90)
+
+Changelog 2.6.6 - 29/10/2013
+--------------------------------------
+- Introducing Application Launcher
+--- special dialog that allows defining and launching of as many as 8 apps
+--- supports several ways of activation:
+------ via dedicated navigation bar key (Navigation bar tweaks / Show app launcher key)
+------ by mapping to hardware/virtual key (Hardware Key Actions)
+------ from Pie (Statusbar tweaks / Pie controls / Show custom key)
+- Hardware key actions:
+--- New action to show Application Launcher
+- Pie controls:
+--- Custom key that can have either Search or Application launcher function
+--- Added support for disabling also recents key and app launcher key when Pie active
+--- Option to disable navigation keys will disable them only in case Pie is REALLY active
+--- Pie colors: options for setting custom colors to all the pie elements
+- Phone tweaks
+--- Option to set custom image for unknown caller
+- Implemented recovery from blank screen situation caused by minimum brightness set too low
+--- When screen can't be lit up, holding Volume+ for 7 seconds will reset brightness to manual mode with level set to 100 (device must be awaken, e.g. by power key first)
+--- Warning dialog will pop-up every time new value is set below 20
+- Fixed crash in Ongoing notifications blocker (when notification icon can't be obtained)
+- Updated French translation (thanks to ch-vox)
+- Updated Hungarian translations (thanks to benjoe1)
+- Updated Japanese translations (thanks to WedyDQ10)
+- Updated Chinese (Traditional) translations (thanks to Eric850130)
+- Updated Portuguese (PT) translation (thanks to bgcngm)
+- Updated Portuguese (BR) translation (thanks to bgcngm)
+- Updated German translations (thanks to samsonbear)
+- Updated Polish translations (thanks to xtrem007)
+- Updated Russian translations (thanks to smb.roman AKA romashko)
+
+Changelog 2.6.5 - 26/10/2013
+--------------------------------------
+- Hardware Key Actions menu rearranged (thanks to bgcngm)
+- Option to disable Home double-tap on Android 4.3+
+- Option to set signal icon coloring mode
+--- Mode 1: Use GravityBox Icons (colored, with signal level support)
+--- Mode 2: Use stock icons (colored, without signal level support)
+--- Mode 3: Do not apply color (not colored - leaves stock icons intact)
+- Prevent soft reboots on Motorola devices occurring when using screenshot related GB functions
+- Prevent System UI crashes on some Xperia devices
+- Improved compatibility with Xperia devices (thanks to MohammadAG)
+--- fixed mobile data toggling
+--- prevent errors in VolumePanel mod caused by incompatibility
+- Lockscreen Battery Arc positioning issues fixed
+- Avoid using Settings.System storage for storing some GB related data
+--- This means GB now fully supports resetting all the settings upon clearing GB app data or uninstalling
+- Added MT8377 to the list of supported MTK devices (thanks to bgcngm)
+- Updated Chinese (Traditional) translations (thanks to Eric850130)
+- Updated Chinese (Simplified) translations (thanks to liveasx)
+- Updated Russian translations (thanks to smb.roman AKA romashko)
+- Updated Japanese translations (thanks to WedyDQ10)
+- Updated Portuguese (PT) translation (thanks to bgcngm)
+- Updated Portuguese (BR) translation (thanks to bgcngm)
+- Updated Spanish translation (thanks to bgcngm)
+- Updated French translation (thanks to ch-vox)
+- Updated German translations (thanks to samsonbear)
+- Updated Czech translations (thanks to mp3comanche)
+- Updated Indonesian translations (thanks to awaaas)
+- Updated Japanese translations (thanks to WedyDQ10)
+
+Changelog 2.6.4 - 22/10/2013
+--------------------------------------
+- Lockscreen tweaks:
+--- Lockscreen battery arc: shows battery status as an arc drawn around unlock ring handle (Android 4.2+ only)
+- Hardware Key Actions:
+--- added long-press support for Navigation Bar Home key (now supports Hardware Key Actions)
+--- action for toggling Torch on/off
+--- option for toggling Torch on Home HW key long-press while on lockscreen
+--- torch related actions available only for devices with Flash LED support (thanks to @bgcngm)
+- Call Vibrations: prevent unexpected vibrations from occurring on some devices (hopefully)
+- Data monitor: option to set position on the right regardless of clock position
+- Expandable volume panel: option to show panel expanded automatically
+- Added more tolerance to foreign Circle Battery Views
+--- preserves Circle Battery View with circle_battery ID introduced by particular ROM
+--- avoids breaking circle_battery View dependencies that can cause SystemUI crashes
+- Added Arabic translations (thanks to asmb111)
+- Updated Portuguese (PT) translation (thanks to bgcngm)
+- Updated French translation (thanks to ch-vox)
+- Updated Japanese translations (thanks to WedyDQ10)
+- Updated Chinese (Traditional) translations (thanks to Eric850130)
+- Updated Chinese (Simplified) translations (thanks to liveasx)
+- Updated Indonesian translations (thanks to awaaas)
+- Updated Polish translations (thanks to xtrem007)
+- Updated Russian translations (thanks to smb.roman AKA romashko)
+
+Changelog 2.6.3 - 17/10/2013
+--------------------------------------
+- Recent tasks RAM bar
+--- the latest implementation ported from AOKP project
+--- allows position at top or at bottom
+--- scales automatically according to "Clear all recents" button position/visibility
+- Hardware Key Actions:
+--- option for overriding single-tap action of Recent Tasks key (hardware and virtual)
+--- option for overriding long-press action of Recent Tasks key (hardware and virtual)
+- Minimum brightness limit lowered to 5
+- New app icon (designed by C3C076 A.K.A. Tha Graphics Lama)
+- Colors of GB tile icon and Screenshot tile icon adjusted to match other tiles
+- Other minor bug fixes and optimizations
+- Updated Polish translations (thanks to xtrem007)
+- Updated Hungarian translations (thanks to benjoe1)
+- Updated German translations (thanks to samsonbear)
+- Updated French translation (thanks to ch-vox)
+- Updated Portuguese (PT) translation (thanks to bgcngm)
+- Updated Chinese (Simplified) translations (thanks to liveasx)
+- Updated Japanese translations (thanks to WedyDQ10)
+
+Changelog 2.6.2 - 13/10/2013
+--------------------------------------
+- Preferences adjusted to take device features into account (thanks to @bgcngm)
+--- Torch tile available only for devices having flash led
+--- GPS tile available only for devices having GPS
+--- Removed redundant "Disable GPS notifications" option (now available via notifications blocker)
+--- Removed preferences and tiles related to mobile data for WiFi only devices
+- Transparency manager: automatically disable transparency updates when all 4 transparency sliders set to 0
+--- fixes graphical anomaly appearing at the top of the windows when transparency off (all 4 sliders zero)
+- Prevent soft reboots on Touchwiz devices when accessing power menu (DOES NOT mean GB is now fully compatible with TW!!!)
+- Improved compatibility of status bar tweaks with devices having modified statusbar layout (Xperia,...)
+- Updated French translation (thanks to ch-vox)
+- Updated Portuguese (PT) translation (thanks to bgcngm)
+- Updated Chinese (Simplified) translations (thanks to liveasx)
+- Updated Hungarian translations (thanks to benjoe1)
+
+Changelog 2.6.1 - 12/10/2013
+--------------------------------------
+- Ongoing notifications blocker:
+--- fixed compatibility with Android 4.3
+--- show hint when list is empty
+- Expandable volume panel:
+--- show ringer volume only for devices having voice feature
+--- don't allow volume linking for devices that don't have voice feature
+--- added alarm slider
+- Fixed SystemUI crash caused by WiFi tile on some MT6589 devices with different signal cluster handling
+- Updated French translation (thanks to ch-vox)
+- Updated Portuguese (PT) translation (thanks to bgcngm)
+- Updated Chinese (Simplified) translations (thanks to liveasx)
+- Updated Italian translations (thanks to pitone02)
+- Updated Chinese (Traditional) translations (thanks to Eric850130)\
+- Updated German translations (thanks to samsonbear)
+- Updated Polish translations (thanks to xtrem007)
+- Updated Japanese translations (thanks to WedyDQ10)
+
+Changelog 2.6.0 - 10/10/2013
+--------------------------------------
+- Statusbar tweaks:
+--- Ongoing notification blocker - dynamically collects info on ongoing notifications and allows to block them
+--- Alternate WiFi Tile for MTK devices (CM Style) with signal and SSID indication
+--- AOSP Signal Tile: added indicator for mobile data off state when tile behaviour overriden (non-MTK, needs testing)
+--- Clock Day of Week revamped to support normal/lowercase/uppercase styles
+--- Data traffic monitor - monitors data traffic and displays info in statusbar
+--- Added Low Profile support for Circle battery, percent text and data traffic monitor
+- Lockscreen tweaks
+--- Quick unlock: unlocks immediately after correct PIN/password is entered without pressing ENTER
+--- Statusbar lock policy: allows making statusbar expandable on lockscreen
+--- Option for disabling limit for number of widgets
+--- Long-press on lock icon unlocks device when widgets maximized
+- Fixed 45 sec. vibrations not being executed on some devices (partial wakelock required during call)
+- Added Vietnamese translations (thanks to hdbk1986)
+- Added Turkish translations (thanks to AndroidMeda)
+- Updated Chinese (Traditional) translations (thanks to Eric850130)
+- Updated Chinese (Simplified) translations (thanks to liveasx, EraserKing)
+- Updated Russian translations (thanks to smb.roman AKA romashko)
+- Updated German translations (thanks to samsonbear)
+- Updated Polish translations (thanks to xtrem007)
+- Updated Portuguese (PT) translation (thanks to bgcngm)
+- Updated Italian translations (thanks to pitone02)
+- Updated French translation (thanks to ch-vox)
+- Updated Japanese translations (thanks to WedyDQ10)
+- Updated Hungarian translations (thanks to benjoe1)
+
+Changelog 2.5.7 - 03/10/2013
+--------------------------------------
+- QuickSettings Tile Reordering
+- GravityBox Tile: long-touch serves as a quick shortcut to Tile Reordering interface
+- Fixed Battery Stats crashing on some devices (MTK Specific)
+--- stock Battery Percent Checkbox (the one in Battery Stats) is back
+--- has priority over GB percent text option (when enabled in Battery Stats, the one in GB will be disabled)
+- Updated German translations (thanks to samsonbear)
+- Updated Polish translations (thanks to xtrem007)
+- Updated Hungarian translations (thanks to benjoe1)
+- Updated French translation (thanks to ch-vox)
+- Updated Italian translations (thanks to pitone02)
+- Updated Japanese translations (thanks to WedyDQ10)
+- Updated Portuguese (PT) translation (thanks to bgcngm)
+
+Changelog 2.5.6 - 01/10/2013
+--------------------------------------
+- Fixed compatibility issues in Network mode tile and Messaging tweaks for single SIM MTKs (thanks to bgcngm)
+- GB preferences adjusted to follow device capabilities/features (thanks to bgcngm)
+- Fixed GPS Tile long-touch misbehavior
+- Fixed infinite MMS/SMS switching loop when unicode stripping is on and SMS is about to become MMS due to its length
+- Fixed status bar brightness control for Android 4.1
+- Added options for Call vibrations
+--- on call connected
+--- on call disconnected
+--- on call waiting
+--- every 45th second during outgoing call
+- Sleep Tile: show power menu on long-touch
+- Option for controlling screen on during plug/unplug of power/usb
+- Option for muting volume adjust sound
+- Added MT6572 to the list of MTK devices
+- Added Japanese translations (thanks to WedyDQ10)
+- Added Dutch (NL) translations (thanks to spacecaker)
+- Updated Portuguese (PT) translation (thanks to bgcngm)
+- Updated Chinese (Traditional) translations (thanks to Eric850130)
+- Updated Polish translations (thanks to xtrem007)
+- Updated French translation (thanks to ch-vox)
+- Updated Indonesian translations (thanks to awaaas)
+- Updated Italian translations (thanks to pitone02)
+- Updated Hungarian translations (thanks to benjoe1)
+- Updated Russian translations (thanks to smb.roman AKA romashko)
+
+Changelog 2.5.5 - 28/09/2013
+--------------------------------------
+- QuickSettings tweaks
+--- Option for overriding default touch/long-touch behaviour of tiles (non-MTK)
+--- GPS and Ringer Mode tile previously made for non-MTK now available also for MTK
+------ can be used as alternatives for standard MTK GPS Tile and Audio Profiles Tile
+--- Network mode tile mode
+------ added 2G/3G mode option
+------ added (LTE) to mode descriptions for better understanding how modes are switched
+------ option to choose SIM Slot to which tile applies (for MTK Dual Sims)
+--------- tile can now be used also for SIM Slot 2
+--- Fixed improper indication of position fix in alternative GPS tile
+--- Wifi tile now active also while airplane mode is on (MTK)
+- Intelligent Pie Controls
+--- linked to Expanded Desktop - 4 modes available
+--- disabled: Pie completely disabled
+--- always on: Pie always on independently of Expanded Desktop
+--- when expanded desktop on: activates when expanded desktop is on
+--- when expanded desktop hides navbar: Expanded Desktop mode is set to mode that hides navbar
+- Navigation bar tweaks
+--- Moved navbar transparency settings under Navbar tweaks section
+--- Option for navbar height for landscape orientation
+- Statusbar icon coloring: option to leave stock battery icon intact
+--- When enabled, icon coloring won't be applied to stock battery icon.
+ Useful in case stock battery icon was replaced with 3rd party battery mod
+- Lockscreen targets
+--- category renamed to "Unlock ring settings" (thanks to bgcngm)
+--- options to set unlock ring horizontal/vertical offset (thanks to bgcngm)
+--- these changes required reset of your current Lockscreen targets settings
+- Option for stripping unicode in messaging now supports quick message dialog (MTK)
+- Transparency sliders now accept 1% steps
+- Quiet down a lot of logging: only device info at startup + runtime errors are logged
+- Updated Indonesian translations (thanks to awaaas)
+- Updated German translations (thanks to peterhugelberg)
+- Updated Polish translations (thanks to xtrem007)
+- Updated Italian translations (thanks to pitone02)
+- Updated Portuguese (PT) translation (thanks to bgcngm)
+- Updated French translation (thanks to ch-vox)
+- Updated Russian translations (thanks to smb.roman AKA romashko)
+
+Changelog 2.5.1 - 24/09/2013
+--------------------------------------
+- Lockscreen Targets:
+--- fixed crash when accessibility services enabled
+--- app names added into accessibility descriptions (e.g. they will be spoken when using TalkBack)
+- Other minor optimizations
+- Updated Chinese (Traditional) translations (thanks to Eric850130)
+
+Changelog 2.5.0 - 24/09/2013
+--------------------------------------
+- Lockscreen targets:
+--- ability to add as many as 5 lockscreen targets for launching apps
+--- replaces all original targets apart from the unlocking one when enabled
+--- option to adjust bottom margin of unlock ring
+--- known issue: stock browser might not be launched properly from lockscreen
+--- available for Android 4.2+ only
+- Statusbar tweaks:
+--- Statusbar brightness control:
+------ continuous brightness adjustment by sliding over statusbar
+------ immediate brighntess adjustment by long-touching statusbar
+------ applies to manual brightness (autobrightness must be off)
+------ works also on lockscreen
+--- option for statusbar element colors to follow stock battery color (more info: http://tinyurl.com/qzbecat)
+--- option to disable GPS notifications
+- QuickSettings Tiles:
+--- NetworkMode tile: allow LTE phones to switch 2G/2G+3G/3G/LTE (for LTE, it uses device specific default LTE mode. Typically LTE_GSM_WCDMA)
+--- option to set mode of network mode tile (2G/2G+3G/3G vs. 2G/2G+3G. For LTE: 2G/2G+3G/3G/LTE vs. 2G/2G+3G/LTE)
+--- Stay Awake Tile (prevents the screen from turning off when enabled)
+--- Screenshot Tile
+--- improved GPS tile for non-MTK devices (better icon + indication of position fix)
+--- improved Ringer Mode Tile to take into account whether device has vibrator (non-MTK)
+- Phone tweaks:
+--- option for stripping unicode characters from message before sending (for stock messaging app)
+--- option to disable slow mobile data warning for SIM in 2G mode (for MTK Dual Sims - mobile data tile)
+- Display tweaks:
+--- option to allow all display rotations (e.g. upside down)
+- Other improvements:
+--- improved volume keys skip track for better support of 3rd party players (thanks to bparker98)
+--- power menu dialog optimizations
+--- button backlight notifications: make buttons lit for a bit longer
+--- fixed scaling of Back button in navigation bar
+- Updated French translations (thanks to ch-vox)
+- Updated German translations (thanks to Wikiwix)
+- Updated Chinese (Traditional) translations (thanks to Eric850130)
+- Updated Portuguese (PT) translation (thanks to bgcngm)
+- Updated Indonesian translations (thanks to awaaas)
+- Updated Russian translations (thanks to smb.roman AKA romashko)
+
+Changelog 2.4.2 - 20/09/2013
+--------------------------------------
+- Yet another fix for Samsung's expandable volume panel
+- StatusbarIconManager: improved handling of default system colors (when icon coloring is disabled)
+- Updated French translations (thanks to ch-vox)
+- Updated Polish translations (thanks to xtrem007)
+- Updated Italian translations (thanks to pitone02)
+
+Changelog 2.4.1 - 19/09/2013
+--------------------------------------
+- Fixed expandable volume panel option for S4 GE devices
+- Disabled more music volume steps option for S4 GE devices
+- Screenshot in power menu is now optional
+- Expanded desktop: better names for system settings variables
+ to avoid potential conflicts
+- Minor Button Backlight options improvements
+- Updated French translations (thanks to ch-vox)
+- Updated German translations (thanks to Wikiwix)
+- Updated Hungarian translations (thanks to benjoe1)
+- Updated Polish translations (thanks to xtrem007)
+- Updated Russian translations (thanks to smb.roman AKA romashko)
+
+Changelog 2.4.0 - 17/09/2013
+--------------------------------------
+- Expanded desktop:
+--- 4 modes: disabled, hide statusbar, hide navigation bar, hide both
+--- Power menu action for expanded desktop toggling
+--- QuickSettings tile for expanded desktop toggling
+--- hardware key action for expanded desktop toggling
+- Battery styles: improved compatibility with custom ROMs and 3rd party battery mods
+- Fixed blank display issue for Android 4.1 devices
+- Option to link notification panel clock to any app (specified by user)
+- Additional custom app for hardware key actions
+- Added Screenshot action to power menu
+- Hardware key actions:
+--- action for invoking menu (mimics menu key)
+--- action for toggling expanded desktop
+--- action for launching additional app
+- Navigation bar tweaks
+--- Enable/disable navigation bar
+--- Option to set navbar height (for portrait mode)
+--- Option to set navbar width (for landscape mode)
+--- Option to always show menu key
+- Potential fix of Expandable Volume Panel for S4 GE devices (needs testing)
+- Updated French translations (thanks to ch-vox)
+- Updated Russian translations (thanks to smb.roman AKA romashko)
+- Updated Indonesian translations (thanks to awaaas)
+- Updated Chinese translations (thanks to jwchen119)
+
+Changelog 2.3.1 - 10/09/2013
+--------------------------------------
+- improved AppPickerPreference to support larger number of installed apps (thanks sag999 for testing)
+- fixed potential crash in Battery status settings
+- updated French translations (thanks to ch-vox)
+- updated Indonesian translations (thanks to awaaas)
+- updated Polish translations (thanks to xtrem007)
+- updated Russian translations (thanks to romashko)
+- updated Chinese (Traditional) translations (thanks to jwchen119)
+- updated Hungarian translations (thanks to benjoe1)
+- updated Italian translations (thanks to pitone02)
+
+Changelog 2.3.0 - 08/09/2013
+--------------------------------------
+- adapted to support Android 4.1
+- added support for MT6577
+- updated Xposed Bridge API to 30 (module now requires the latest Xposed Framework 2.2)
+- Hardware key actions extended
+--- added support for long-press on Home
+--- new action: Show recent apps
+--- new action: Launch custom app
+- option to link notification panel clock to DeskClock app instead of Date&Time settings
+- added QuickSettings Volume tile
+- option for National data roaming (MVNO)
+- improved detection of device type (phone or tablet) (thanks to bgcngm)
+- preferences adjusted according to device type (thanks to bgcngm)
+- removed Gemini specific preferences for non-Gemini MTK devices (thanks to bgcngm)
+- optimized Application Picker preference
+--- on-demand loading and caching of app icons
+--- more friendly in case of large number of apps installed
+- implemented check if module is active at GB settings start-up
+- added Indonesian translations (thanks to awaaas)
+- updated German translations (QuickSettings) (thanks to Napzter)
+- updated French translations (thanks to ch-vox)
+- updated Hungarian translations (thanks to benjoe1)
+- updated Spanish translations (thanks to klander)
+- updated Polish translations (thanks to xtrem007)
+
+Changelog 2.2.2 - 02/09/2013
+--------------------------------------
+- removed phone specific preferences on tablet devices (thanks to bgcngm)
+- reboot strings updated for tablets (thanks to bgcngm)
+- removed preferences not needed for ZTE V987 (thanks to bgcngm)
+- fixed statusbar colors for non-Gemini devices (thanks to bgcngm)
+- added option to reboot to bootloader for non-MTK devices (thanks to bgcngm)
+- improved clock hiding option to obey lockscreen clock widget policy (hides clock when lockscreen clock widget is present)
+- fixed AM/PM hiding option
+- added AM/PM hiding support also for notification panel clock
+- implemented brightness settings master switch
+--- allows devices not using standard Android brightness support to completely disable brightness tweaks to avoid
+ issues like blank screen, etc.
+- other small compatibility fixes
+- updated Russian translations (thanks to romashko)
+- updated Polish translations (thanks to xtrem007)
+- updated Hungarian translations (thanks to benjoe1)
+
+Changelog 2.2.1 - 20/08/2013
+--------------------------------------
+- fixed issues introduced in 2.2.0 affecting non-MTK devices
+- updated Italian translations (thanks to pitone02)
+- added German translations - not complete yet (thanks to Napzter)
+
+Changelog 2.2.0 - 20/08/2013
+--------------------------------------
+- Added QuickSettings QuickApp tile:
+--- option to set main application to be launched on touch
+--- option to set another 4 apps to be launched from dialog displayed on long-touch
+- Added QuickSettings GPS on/off tile (for non-MTK devices)
+- Added QuickSettings Ringer Mode tile (for non-MTK devices)
+- Pie controls:
+--- option to always show menu button
+--- option to set trigger size
+- Clock settings
+--- option to completely turn off am/pm
+--- option to hide alarm icon
+--- option to hide clock
+- Transparency management. Allows to:
+--- set transparency for status bar for launcher and lockscreen independently
+--- set transparency for navigation bar for launcher and lockscreen independently
+--- uses default system transparency when not in lockscreen nor launcher
+- Hide clear all recents button when there are no recent tasks
+- Improved button backlight notifications
+--- makes button backlight blink
+--- now also works for missed calls
+--- requires partial wakelock which is held for max. 1 hour (may consume battery)
+- Option to set screen dim level
+- Use sliders for minimum brihtness and screen dim level settings
+- Improved compatibility with MTK devices that have no Gemini support (thanks to bgcngm)
+- updated French translations (thanks to ch-vox)
+- updated Italian translations (thanks to pitone02)
+- updated Slovak and Czech translations
+
Changelog 2.1.1 - 15/08/2013
--------------------------------------
- fixed Pie compatibility issues for Android 4.3
diff --git a/NOTICE b/NOTICE
new file mode 100644
index 0000000000..e8004acf02
--- /dev/null
+++ b/NOTICE
@@ -0,0 +1,16 @@
+* Copyright (C) 2013 Peter Gregus (ceco@ceco.sk.eu.org)
+* 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.
+*
+* You may not distribute nor sell this software or parts of it in
+* Source, Object nor in any other form without explicit permission obtained
+* from the original author.
\ No newline at end of file
diff --git a/README.md b/README.md
index 904040ee34..b81dbdeb71 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,5 @@
GravityBox
==========
-XPosed Tweak Box for devices running Android 4.2/4.3
-
-Visit official thread at XDA for more info:
-http://forum.xda-developers.com/showthread.php?t=2316070
+This repository is deprecated.
+Official one is maintained under [GravityBox organization](https://github.com/GravityBox/GravityBox)
diff --git a/ext/XposedBridgeApi.jar b/ext/XposedBridgeApi.jar
new file mode 100644
index 0000000000..96e925d7cd
Binary files /dev/null and b/ext/XposedBridgeApi.jar differ
diff --git a/ext/core-classes.jar b/ext/core-classes.jar
new file mode 100644
index 0000000000..3e66dc4bc9
Binary files /dev/null and b/ext/core-classes.jar differ
diff --git a/res/drawable-hdpi-finger/ic_grabber.png b/res/drawable-hdpi-finger/ic_grabber.png
new file mode 100644
index 0000000000..0ff8d1aa3f
Binary files /dev/null and b/res/drawable-hdpi-finger/ic_grabber.png differ
diff --git a/res/drawable-hdpi/arrow_down.png b/res/drawable-hdpi/arrow_down.png
new file mode 100644
index 0000000000..915515160a
Binary files /dev/null and b/res/drawable-hdpi/arrow_down.png differ
diff --git a/res/drawable-hdpi/arrow_up.png b/res/drawable-hdpi/arrow_up.png
new file mode 100644
index 0000000000..3222d92e41
Binary files /dev/null and b/res/drawable-hdpi/arrow_up.png differ
diff --git a/res/drawable-hdpi/ic_launcher.png b/res/drawable-hdpi/ic_launcher.png
new file mode 100644
index 0000000000..a44bc7d781
Binary files /dev/null and b/res/drawable-hdpi/ic_launcher.png differ
diff --git a/res/drawable-hdpi/ic_lock_bootloader.png b/res/drawable-hdpi/ic_lock_bootloader.png
new file mode 100755
index 0000000000..e5602fd2cc
Binary files /dev/null and b/res/drawable-hdpi/ic_lock_bootloader.png differ
diff --git a/res/drawable-hdpi/ic_lock_expanded_desktop.png b/res/drawable-hdpi/ic_lock_expanded_desktop.png
new file mode 100644
index 0000000000..01f5b89cbc
Binary files /dev/null and b/res/drawable-hdpi/ic_lock_expanded_desktop.png differ
diff --git a/res/drawable-hdpi/ic_lock_screenshot.png b/res/drawable-hdpi/ic_lock_screenshot.png
new file mode 100644
index 0000000000..5ef76f7733
Binary files /dev/null and b/res/drawable-hdpi/ic_lock_screenshot.png differ
diff --git a/res/drawable-hdpi/ic_qs_expanded_desktop_off.png b/res/drawable-hdpi/ic_qs_expanded_desktop_off.png
new file mode 100644
index 0000000000..20a38774c2
Binary files /dev/null and b/res/drawable-hdpi/ic_qs_expanded_desktop_off.png differ
diff --git a/res/drawable-hdpi/ic_qs_expanded_desktop_on.png b/res/drawable-hdpi/ic_qs_expanded_desktop_on.png
new file mode 100644
index 0000000000..17c85e9463
Binary files /dev/null and b/res/drawable-hdpi/ic_qs_expanded_desktop_on.png differ
diff --git a/res/drawable-hdpi/ic_qs_gps_disable.png b/res/drawable-hdpi/ic_qs_gps_disable.png
index 28836b8be5..d2a4a49992 100644
Binary files a/res/drawable-hdpi/ic_qs_gps_disable.png and b/res/drawable-hdpi/ic_qs_gps_disable.png differ
diff --git a/res/drawable-hdpi/ic_qs_gps_enable.png b/res/drawable-hdpi/ic_qs_gps_enable.png
index 20af28f4e5..851b60b3aa 100644
Binary files a/res/drawable-hdpi/ic_qs_gps_enable.png and b/res/drawable-hdpi/ic_qs_gps_enable.png differ
diff --git a/res/drawable-hdpi/ic_qs_gps_locked.png b/res/drawable-hdpi/ic_qs_gps_locked.png
new file mode 100644
index 0000000000..7e671710c5
Binary files /dev/null and b/res/drawable-hdpi/ic_qs_gps_locked.png differ
diff --git a/res/drawable-hdpi/ic_qs_gravitybox.png b/res/drawable-hdpi/ic_qs_gravitybox.png
new file mode 100644
index 0000000000..db28d4c528
Binary files /dev/null and b/res/drawable-hdpi/ic_qs_gravitybox.png differ
diff --git a/res/drawable-hdpi/ic_qs_lte.png b/res/drawable-hdpi/ic_qs_lte.png
new file mode 100644
index 0000000000..e79be20525
Binary files /dev/null and b/res/drawable-hdpi/ic_qs_lte.png differ
diff --git a/res/drawable-hdpi/ic_qs_ring_off.png b/res/drawable-hdpi/ic_qs_ring_off.png
new file mode 100644
index 0000000000..be065da890
Binary files /dev/null and b/res/drawable-hdpi/ic_qs_ring_off.png differ
diff --git a/res/drawable-hdpi/ic_qs_ring_on.png b/res/drawable-hdpi/ic_qs_ring_on.png
new file mode 100644
index 0000000000..2e4b5772b8
Binary files /dev/null and b/res/drawable-hdpi/ic_qs_ring_on.png differ
diff --git a/res/drawable-hdpi/ic_qs_ring_vibrate_on.png b/res/drawable-hdpi/ic_qs_ring_vibrate_on.png
new file mode 100644
index 0000000000..64c942b8d0
Binary files /dev/null and b/res/drawable-hdpi/ic_qs_ring_vibrate_on.png differ
diff --git a/res/drawable-hdpi/ic_qs_screenshot.png b/res/drawable-hdpi/ic_qs_screenshot.png
new file mode 100644
index 0000000000..d19504fb1e
Binary files /dev/null and b/res/drawable-hdpi/ic_qs_screenshot.png differ
diff --git a/res/drawable-hdpi/ic_qs_signal_data_off.png b/res/drawable-hdpi/ic_qs_signal_data_off.png
new file mode 100644
index 0000000000..3c4cd4e453
Binary files /dev/null and b/res/drawable-hdpi/ic_qs_signal_data_off.png differ
diff --git a/res/drawable-hdpi/ic_qs_stayawake_off.png b/res/drawable-hdpi/ic_qs_stayawake_off.png
new file mode 100644
index 0000000000..cf4ec19674
Binary files /dev/null and b/res/drawable-hdpi/ic_qs_stayawake_off.png differ
diff --git a/res/drawable-hdpi/ic_qs_stayawake_on.png b/res/drawable-hdpi/ic_qs_stayawake_on.png
new file mode 100644
index 0000000000..2bb50a6b61
Binary files /dev/null and b/res/drawable-hdpi/ic_qs_stayawake_on.png differ
diff --git a/res/drawable-hdpi/ic_qs_vibrate_on.png b/res/drawable-hdpi/ic_qs_vibrate_on.png
new file mode 100644
index 0000000000..298feff1da
Binary files /dev/null and b/res/drawable-hdpi/ic_qs_vibrate_on.png differ
diff --git a/res/drawable-hdpi/ic_qs_volume.png b/res/drawable-hdpi/ic_qs_volume.png
new file mode 100644
index 0000000000..f5e9c2f222
Binary files /dev/null and b/res/drawable-hdpi/ic_qs_volume.png differ
diff --git a/res/drawable-hdpi/ic_qs_wifi_0.png b/res/drawable-hdpi/ic_qs_wifi_0.png
new file mode 100644
index 0000000000..7e7d0688a7
Binary files /dev/null and b/res/drawable-hdpi/ic_qs_wifi_0.png differ
diff --git a/res/drawable-hdpi/ic_qs_wifi_1.png b/res/drawable-hdpi/ic_qs_wifi_1.png
new file mode 100644
index 0000000000..b7207207f2
Binary files /dev/null and b/res/drawable-hdpi/ic_qs_wifi_1.png differ
diff --git a/res/drawable-hdpi/ic_qs_wifi_2.png b/res/drawable-hdpi/ic_qs_wifi_2.png
new file mode 100644
index 0000000000..1a4c6d1ce6
Binary files /dev/null and b/res/drawable-hdpi/ic_qs_wifi_2.png differ
diff --git a/res/drawable-hdpi/ic_qs_wifi_3.png b/res/drawable-hdpi/ic_qs_wifi_3.png
new file mode 100644
index 0000000000..96cd8ab826
Binary files /dev/null and b/res/drawable-hdpi/ic_qs_wifi_3.png differ
diff --git a/res/drawable-hdpi/ic_qs_wifi_4.png b/res/drawable-hdpi/ic_qs_wifi_4.png
new file mode 100644
index 0000000000..54bab4dd15
Binary files /dev/null and b/res/drawable-hdpi/ic_qs_wifi_4.png differ
diff --git a/res/drawable-hdpi/ic_qs_wifi_full_1.png b/res/drawable-hdpi/ic_qs_wifi_full_1.png
new file mode 100644
index 0000000000..0a31297365
Binary files /dev/null and b/res/drawable-hdpi/ic_qs_wifi_full_1.png differ
diff --git a/res/drawable-hdpi/ic_qs_wifi_full_2.png b/res/drawable-hdpi/ic_qs_wifi_full_2.png
new file mode 100644
index 0000000000..3e712ad2c9
Binary files /dev/null and b/res/drawable-hdpi/ic_qs_wifi_full_2.png differ
diff --git a/res/drawable-hdpi/ic_qs_wifi_full_3.png b/res/drawable-hdpi/ic_qs_wifi_full_3.png
new file mode 100644
index 0000000000..565ae54f44
Binary files /dev/null and b/res/drawable-hdpi/ic_qs_wifi_full_3.png differ
diff --git a/res/drawable-hdpi/ic_qs_wifi_full_4.png b/res/drawable-hdpi/ic_qs_wifi_full_4.png
new file mode 100644
index 0000000000..2c30f8ebfb
Binary files /dev/null and b/res/drawable-hdpi/ic_qs_wifi_full_4.png differ
diff --git a/res/drawable-hdpi/ic_qs_wifi_off.png b/res/drawable-hdpi/ic_qs_wifi_off.png
new file mode 100644
index 0000000000..6e4276fc35
Binary files /dev/null and b/res/drawable-hdpi/ic_qs_wifi_off.png differ
diff --git a/res/drawable-hdpi/ic_sysbar_apps.png b/res/drawable-hdpi/ic_sysbar_apps.png
new file mode 100644
index 0000000000..7cadbe8408
Binary files /dev/null and b/res/drawable-hdpi/ic_sysbar_apps.png differ
diff --git a/res/drawable-hdpi/stat_sys_alarm_kk.png b/res/drawable-hdpi/stat_sys_alarm_kk.png
new file mode 100644
index 0000000000..2c5501786d
Binary files /dev/null and b/res/drawable-hdpi/stat_sys_alarm_kk.png differ
diff --git a/res/drawable-hdpi/stat_sys_data_bluetooth.png b/res/drawable-hdpi/stat_sys_data_bluetooth.png
new file mode 100644
index 0000000000..7ed4c78de9
Binary files /dev/null and b/res/drawable-hdpi/stat_sys_data_bluetooth.png differ
diff --git a/res/drawable-hdpi/stat_sys_data_bluetooth_connected.png b/res/drawable-hdpi/stat_sys_data_bluetooth_connected.png
new file mode 100644
index 0000000000..08c07b2bf5
Binary files /dev/null and b/res/drawable-hdpi/stat_sys_data_bluetooth_connected.png differ
diff --git a/res/drawable-hdpi/stat_sys_headset_with_mic_jb.png b/res/drawable-hdpi/stat_sys_headset_with_mic_jb.png
new file mode 100644
index 0000000000..e7a59a268d
Binary files /dev/null and b/res/drawable-hdpi/stat_sys_headset_with_mic_jb.png differ
diff --git a/res/drawable-hdpi/stat_sys_headset_without_mic_jb.png b/res/drawable-hdpi/stat_sys_headset_without_mic_jb.png
new file mode 100644
index 0000000000..9fe82b548f
Binary files /dev/null and b/res/drawable-hdpi/stat_sys_headset_without_mic_jb.png differ
diff --git a/res/drawable-hdpi/stat_sys_ringer_silent_jb.png b/res/drawable-hdpi/stat_sys_ringer_silent_jb.png
new file mode 100644
index 0000000000..f68de5d59e
Binary files /dev/null and b/res/drawable-hdpi/stat_sys_ringer_silent_jb.png differ
diff --git a/res/drawable-hdpi/stat_sys_ringer_silent_kk.png b/res/drawable-hdpi/stat_sys_ringer_silent_kk.png
new file mode 100644
index 0000000000..58f67d032f
Binary files /dev/null and b/res/drawable-hdpi/stat_sys_ringer_silent_kk.png differ
diff --git a/res/drawable-hdpi/stat_sys_ringer_vibrate_kk.png b/res/drawable-hdpi/stat_sys_ringer_vibrate_kk.png
new file mode 100644
index 0000000000..b794c9ad61
Binary files /dev/null and b/res/drawable-hdpi/stat_sys_ringer_vibrate_kk.png differ
diff --git a/res/drawable-hdpi/stat_sys_signal_0.png b/res/drawable-hdpi/stat_sys_signal_0.png
index 2a2aa37629..da941c8e08 100644
Binary files a/res/drawable-hdpi/stat_sys_signal_0.png and b/res/drawable-hdpi/stat_sys_signal_0.png differ
diff --git a/res/drawable-hdpi/stat_sys_signal_0_fully.png b/res/drawable-hdpi/stat_sys_signal_0_fully.png
index 2a2aa37629..0fd09d745d 100644
Binary files a/res/drawable-hdpi/stat_sys_signal_0_fully.png and b/res/drawable-hdpi/stat_sys_signal_0_fully.png differ
diff --git a/res/drawable-hdpi/stat_sys_signal_1.png b/res/drawable-hdpi/stat_sys_signal_1.png
index d58b967e8d..0d75e23b00 100644
Binary files a/res/drawable-hdpi/stat_sys_signal_1.png and b/res/drawable-hdpi/stat_sys_signal_1.png differ
diff --git a/res/drawable-hdpi/stat_sys_signal_1_fully.png b/res/drawable-hdpi/stat_sys_signal_1_fully.png
index 93c84c69fe..cfe43dd42c 100644
Binary files a/res/drawable-hdpi/stat_sys_signal_1_fully.png and b/res/drawable-hdpi/stat_sys_signal_1_fully.png differ
diff --git a/res/drawable-hdpi/stat_sys_signal_2.png b/res/drawable-hdpi/stat_sys_signal_2.png
index ee6246f815..dbb54764fa 100644
Binary files a/res/drawable-hdpi/stat_sys_signal_2.png and b/res/drawable-hdpi/stat_sys_signal_2.png differ
diff --git a/res/drawable-hdpi/stat_sys_signal_2_fully.png b/res/drawable-hdpi/stat_sys_signal_2_fully.png
index 3bcf2355f7..92a5b1c1e6 100644
Binary files a/res/drawable-hdpi/stat_sys_signal_2_fully.png and b/res/drawable-hdpi/stat_sys_signal_2_fully.png differ
diff --git a/res/drawable-hdpi/stat_sys_signal_3.png b/res/drawable-hdpi/stat_sys_signal_3.png
index bf24f5728a..601457677e 100644
Binary files a/res/drawable-hdpi/stat_sys_signal_3.png and b/res/drawable-hdpi/stat_sys_signal_3.png differ
diff --git a/res/drawable-hdpi/stat_sys_signal_3_fully.png b/res/drawable-hdpi/stat_sys_signal_3_fully.png
index 48cb58ed58..9454cd8ab6 100644
Binary files a/res/drawable-hdpi/stat_sys_signal_3_fully.png and b/res/drawable-hdpi/stat_sys_signal_3_fully.png differ
diff --git a/res/drawable-hdpi/stat_sys_signal_4.png b/res/drawable-hdpi/stat_sys_signal_4.png
index cd7d607a89..f4d59a1615 100644
Binary files a/res/drawable-hdpi/stat_sys_signal_4.png and b/res/drawable-hdpi/stat_sys_signal_4.png differ
diff --git a/res/drawable-hdpi/stat_sys_signal_4_fully.png b/res/drawable-hdpi/stat_sys_signal_4_fully.png
index 98bb6097e3..6cb18c74eb 100644
Binary files a/res/drawable-hdpi/stat_sys_signal_4_fully.png and b/res/drawable-hdpi/stat_sys_signal_4_fully.png differ
diff --git a/res/drawable-hdpi/stat_sys_wifi_signal_0.png b/res/drawable-hdpi/stat_sys_wifi_signal_0.png
index 30a570e139..2659d4c193 100644
Binary files a/res/drawable-hdpi/stat_sys_wifi_signal_0.png and b/res/drawable-hdpi/stat_sys_wifi_signal_0.png differ
diff --git a/res/drawable-hdpi/stat_sys_wifi_signal_1.png b/res/drawable-hdpi/stat_sys_wifi_signal_1.png
index 1a551cdf81..1cce22c83a 100644
Binary files a/res/drawable-hdpi/stat_sys_wifi_signal_1.png and b/res/drawable-hdpi/stat_sys_wifi_signal_1.png differ
diff --git a/res/drawable-hdpi/stat_sys_wifi_signal_1_fully.png b/res/drawable-hdpi/stat_sys_wifi_signal_1_fully.png
index c7ac442cd3..c45519e04b 100644
Binary files a/res/drawable-hdpi/stat_sys_wifi_signal_1_fully.png and b/res/drawable-hdpi/stat_sys_wifi_signal_1_fully.png differ
diff --git a/res/drawable-hdpi/stat_sys_wifi_signal_2.png b/res/drawable-hdpi/stat_sys_wifi_signal_2.png
index aac0432d50..186435fc2f 100644
Binary files a/res/drawable-hdpi/stat_sys_wifi_signal_2.png and b/res/drawable-hdpi/stat_sys_wifi_signal_2.png differ
diff --git a/res/drawable-hdpi/stat_sys_wifi_signal_2_fully.png b/res/drawable-hdpi/stat_sys_wifi_signal_2_fully.png
index de8e025cf7..3e3b5fd0ae 100644
Binary files a/res/drawable-hdpi/stat_sys_wifi_signal_2_fully.png and b/res/drawable-hdpi/stat_sys_wifi_signal_2_fully.png differ
diff --git a/res/drawable-hdpi/stat_sys_wifi_signal_3.png b/res/drawable-hdpi/stat_sys_wifi_signal_3.png
index ab69213642..d6f6649b57 100644
Binary files a/res/drawable-hdpi/stat_sys_wifi_signal_3.png and b/res/drawable-hdpi/stat_sys_wifi_signal_3.png differ
diff --git a/res/drawable-hdpi/stat_sys_wifi_signal_3_fully.png b/res/drawable-hdpi/stat_sys_wifi_signal_3_fully.png
index 2fae9e058b..244c8b83ec 100644
Binary files a/res/drawable-hdpi/stat_sys_wifi_signal_3_fully.png and b/res/drawable-hdpi/stat_sys_wifi_signal_3_fully.png differ
diff --git a/res/drawable-hdpi/stat_sys_wifi_signal_4.png b/res/drawable-hdpi/stat_sys_wifi_signal_4.png
index 40f1619e9c..8368b689df 100644
Binary files a/res/drawable-hdpi/stat_sys_wifi_signal_4.png and b/res/drawable-hdpi/stat_sys_wifi_signal_4.png differ
diff --git a/res/drawable-hdpi/stat_sys_wifi_signal_4_fully.png b/res/drawable-hdpi/stat_sys_wifi_signal_4_fully.png
index de6c8d2c41..ef40c3e35d 100644
Binary files a/res/drawable-hdpi/stat_sys_wifi_signal_4_fully.png and b/res/drawable-hdpi/stat_sys_wifi_signal_4_fully.png differ
diff --git a/res/drawable-hdpi/stat_sys_wifi_signal_null.png b/res/drawable-hdpi/stat_sys_wifi_signal_null.png
index 117cf19023..82522c361d 100644
Binary files a/res/drawable-hdpi/stat_sys_wifi_signal_null.png and b/res/drawable-hdpi/stat_sys_wifi_signal_null.png differ
diff --git a/res/drawable-xhdpi/arrow_down.png b/res/drawable-xhdpi/arrow_down.png
new file mode 100644
index 0000000000..1f6fd44000
Binary files /dev/null and b/res/drawable-xhdpi/arrow_down.png differ
diff --git a/res/drawable-xhdpi/arrow_up.png b/res/drawable-xhdpi/arrow_up.png
new file mode 100644
index 0000000000..1615240108
Binary files /dev/null and b/res/drawable-xhdpi/arrow_up.png differ
diff --git a/res/drawable-xhdpi/ic_launcher.png b/res/drawable-xhdpi/ic_launcher.png
index 40d91c17d7..63a03ee021 100644
Binary files a/res/drawable-xhdpi/ic_launcher.png and b/res/drawable-xhdpi/ic_launcher.png differ
diff --git a/res/drawable-xhdpi/ic_lock_expanded_desktop.png b/res/drawable-xhdpi/ic_lock_expanded_desktop.png
new file mode 100644
index 0000000000..e0c99e5bcb
Binary files /dev/null and b/res/drawable-xhdpi/ic_lock_expanded_desktop.png differ
diff --git a/res/drawable-xhdpi/ic_lock_screenshot.png b/res/drawable-xhdpi/ic_lock_screenshot.png
new file mode 100644
index 0000000000..7e4c0ee129
Binary files /dev/null and b/res/drawable-xhdpi/ic_lock_screenshot.png differ
diff --git a/res/drawable-xhdpi/ic_qs_expanded_desktop_off.png b/res/drawable-xhdpi/ic_qs_expanded_desktop_off.png
new file mode 100644
index 0000000000..0a4b4cd0eb
Binary files /dev/null and b/res/drawable-xhdpi/ic_qs_expanded_desktop_off.png differ
diff --git a/res/drawable-xhdpi/ic_qs_expanded_desktop_on.png b/res/drawable-xhdpi/ic_qs_expanded_desktop_on.png
new file mode 100644
index 0000000000..47d8cfe0eb
Binary files /dev/null and b/res/drawable-xhdpi/ic_qs_expanded_desktop_on.png differ
diff --git a/res/drawable-xhdpi/ic_qs_gps_disable.png b/res/drawable-xhdpi/ic_qs_gps_disable.png
index 1a18cbbf2a..9cd5067813 100644
Binary files a/res/drawable-xhdpi/ic_qs_gps_disable.png and b/res/drawable-xhdpi/ic_qs_gps_disable.png differ
diff --git a/res/drawable-xhdpi/ic_qs_gps_enable.png b/res/drawable-xhdpi/ic_qs_gps_enable.png
index a3d9b3b027..c1ca350769 100644
Binary files a/res/drawable-xhdpi/ic_qs_gps_enable.png and b/res/drawable-xhdpi/ic_qs_gps_enable.png differ
diff --git a/res/drawable-xhdpi/ic_qs_gps_locked.png b/res/drawable-xhdpi/ic_qs_gps_locked.png
new file mode 100644
index 0000000000..b2033df047
Binary files /dev/null and b/res/drawable-xhdpi/ic_qs_gps_locked.png differ
diff --git a/res/drawable-xhdpi/ic_qs_gravitybox.png b/res/drawable-xhdpi/ic_qs_gravitybox.png
new file mode 100644
index 0000000000..5bacd27249
Binary files /dev/null and b/res/drawable-xhdpi/ic_qs_gravitybox.png differ
diff --git a/res/drawable-xhdpi/ic_qs_lte.png b/res/drawable-xhdpi/ic_qs_lte.png
new file mode 100644
index 0000000000..8e8bf177f3
Binary files /dev/null and b/res/drawable-xhdpi/ic_qs_lte.png differ
diff --git a/res/drawable-xhdpi/ic_qs_ring_off.png b/res/drawable-xhdpi/ic_qs_ring_off.png
new file mode 100644
index 0000000000..fbfc09bab9
Binary files /dev/null and b/res/drawable-xhdpi/ic_qs_ring_off.png differ
diff --git a/res/drawable-xhdpi/ic_qs_ring_on.png b/res/drawable-xhdpi/ic_qs_ring_on.png
new file mode 100644
index 0000000000..53e2cf8f05
Binary files /dev/null and b/res/drawable-xhdpi/ic_qs_ring_on.png differ
diff --git a/res/drawable-xhdpi/ic_qs_ring_vibrate_on.png b/res/drawable-xhdpi/ic_qs_ring_vibrate_on.png
new file mode 100644
index 0000000000..f4ad71bcaa
Binary files /dev/null and b/res/drawable-xhdpi/ic_qs_ring_vibrate_on.png differ
diff --git a/res/drawable-xhdpi/ic_qs_screenshot.png b/res/drawable-xhdpi/ic_qs_screenshot.png
new file mode 100644
index 0000000000..70bb40521e
Binary files /dev/null and b/res/drawable-xhdpi/ic_qs_screenshot.png differ
diff --git a/res/drawable-xhdpi/ic_qs_signal_data_off.png b/res/drawable-xhdpi/ic_qs_signal_data_off.png
new file mode 100644
index 0000000000..75898c6806
Binary files /dev/null and b/res/drawable-xhdpi/ic_qs_signal_data_off.png differ
diff --git a/res/drawable-xhdpi/ic_qs_stayawake_off.png b/res/drawable-xhdpi/ic_qs_stayawake_off.png
new file mode 100644
index 0000000000..a281e96eb9
Binary files /dev/null and b/res/drawable-xhdpi/ic_qs_stayawake_off.png differ
diff --git a/res/drawable-xhdpi/ic_qs_stayawake_on.png b/res/drawable-xhdpi/ic_qs_stayawake_on.png
new file mode 100644
index 0000000000..9dc8fad67c
Binary files /dev/null and b/res/drawable-xhdpi/ic_qs_stayawake_on.png differ
diff --git a/res/drawable-xhdpi/ic_qs_vibrate_on.png b/res/drawable-xhdpi/ic_qs_vibrate_on.png
new file mode 100644
index 0000000000..adb7db6582
Binary files /dev/null and b/res/drawable-xhdpi/ic_qs_vibrate_on.png differ
diff --git a/res/drawable-xhdpi/ic_qs_volume.png b/res/drawable-xhdpi/ic_qs_volume.png
new file mode 100644
index 0000000000..bc5ba80bbd
Binary files /dev/null and b/res/drawable-xhdpi/ic_qs_volume.png differ
diff --git a/res/drawable-xhdpi/ic_qs_wifi_0.png b/res/drawable-xhdpi/ic_qs_wifi_0.png
new file mode 100644
index 0000000000..42fdbe82bd
Binary files /dev/null and b/res/drawable-xhdpi/ic_qs_wifi_0.png differ
diff --git a/res/drawable-xhdpi/ic_qs_wifi_1.png b/res/drawable-xhdpi/ic_qs_wifi_1.png
new file mode 100644
index 0000000000..eefe7ed495
Binary files /dev/null and b/res/drawable-xhdpi/ic_qs_wifi_1.png differ
diff --git a/res/drawable-xhdpi/ic_qs_wifi_2.png b/res/drawable-xhdpi/ic_qs_wifi_2.png
new file mode 100644
index 0000000000..a2caca28fe
Binary files /dev/null and b/res/drawable-xhdpi/ic_qs_wifi_2.png differ
diff --git a/res/drawable-xhdpi/ic_qs_wifi_3.png b/res/drawable-xhdpi/ic_qs_wifi_3.png
new file mode 100644
index 0000000000..08c1abd444
Binary files /dev/null and b/res/drawable-xhdpi/ic_qs_wifi_3.png differ
diff --git a/res/drawable-xhdpi/ic_qs_wifi_4.png b/res/drawable-xhdpi/ic_qs_wifi_4.png
new file mode 100644
index 0000000000..8af72e5156
Binary files /dev/null and b/res/drawable-xhdpi/ic_qs_wifi_4.png differ
diff --git a/res/drawable-xhdpi/ic_qs_wifi_full_1.png b/res/drawable-xhdpi/ic_qs_wifi_full_1.png
new file mode 100644
index 0000000000..7d9f0323fc
Binary files /dev/null and b/res/drawable-xhdpi/ic_qs_wifi_full_1.png differ
diff --git a/res/drawable-xhdpi/ic_qs_wifi_full_2.png b/res/drawable-xhdpi/ic_qs_wifi_full_2.png
new file mode 100644
index 0000000000..896eacc24b
Binary files /dev/null and b/res/drawable-xhdpi/ic_qs_wifi_full_2.png differ
diff --git a/res/drawable-xhdpi/ic_qs_wifi_full_3.png b/res/drawable-xhdpi/ic_qs_wifi_full_3.png
new file mode 100644
index 0000000000..0224da117d
Binary files /dev/null and b/res/drawable-xhdpi/ic_qs_wifi_full_3.png differ
diff --git a/res/drawable-xhdpi/ic_qs_wifi_full_4.png b/res/drawable-xhdpi/ic_qs_wifi_full_4.png
new file mode 100644
index 0000000000..fe286717a5
Binary files /dev/null and b/res/drawable-xhdpi/ic_qs_wifi_full_4.png differ
diff --git a/res/drawable-xhdpi/ic_qs_wifi_off.png b/res/drawable-xhdpi/ic_qs_wifi_off.png
new file mode 100644
index 0000000000..4c6f1ff1a3
Binary files /dev/null and b/res/drawable-xhdpi/ic_qs_wifi_off.png differ
diff --git a/res/drawable-xhdpi/ic_sysbar_apps.png b/res/drawable-xhdpi/ic_sysbar_apps.png
new file mode 100644
index 0000000000..54931f84b9
Binary files /dev/null and b/res/drawable-xhdpi/ic_sysbar_apps.png differ
diff --git a/res/drawable-xhdpi/stat_sys_alarm_kk.png b/res/drawable-xhdpi/stat_sys_alarm_kk.png
new file mode 100644
index 0000000000..8bca860052
Binary files /dev/null and b/res/drawable-xhdpi/stat_sys_alarm_kk.png differ
diff --git a/res/drawable-xhdpi/stat_sys_data_bluetooth.png b/res/drawable-xhdpi/stat_sys_data_bluetooth.png
new file mode 100644
index 0000000000..757dbf3be7
Binary files /dev/null and b/res/drawable-xhdpi/stat_sys_data_bluetooth.png differ
diff --git a/res/drawable-xhdpi/stat_sys_data_bluetooth_connected.png b/res/drawable-xhdpi/stat_sys_data_bluetooth_connected.png
new file mode 100644
index 0000000000..d431dc2779
Binary files /dev/null and b/res/drawable-xhdpi/stat_sys_data_bluetooth_connected.png differ
diff --git a/res/drawable-xhdpi/stat_sys_gemini_signal_searching.png b/res/drawable-xhdpi/stat_sys_gemini_signal_searching.png
deleted file mode 100644
index ef529d376a..0000000000
Binary files a/res/drawable-xhdpi/stat_sys_gemini_signal_searching.png and /dev/null differ
diff --git a/res/drawable-xhdpi/stat_sys_headset_with_mic_jb.png b/res/drawable-xhdpi/stat_sys_headset_with_mic_jb.png
new file mode 100644
index 0000000000..2cf3ccdb74
Binary files /dev/null and b/res/drawable-xhdpi/stat_sys_headset_with_mic_jb.png differ
diff --git a/res/drawable-xhdpi/stat_sys_headset_without_mic_jb.png b/res/drawable-xhdpi/stat_sys_headset_without_mic_jb.png
new file mode 100644
index 0000000000..e79f323e7a
Binary files /dev/null and b/res/drawable-xhdpi/stat_sys_headset_without_mic_jb.png differ
diff --git a/res/drawable-xhdpi/stat_sys_ringer_silent_jb.png b/res/drawable-xhdpi/stat_sys_ringer_silent_jb.png
new file mode 100644
index 0000000000..0f3958b44f
Binary files /dev/null and b/res/drawable-xhdpi/stat_sys_ringer_silent_jb.png differ
diff --git a/res/drawable-xhdpi/stat_sys_ringer_silent_kk.png b/res/drawable-xhdpi/stat_sys_ringer_silent_kk.png
new file mode 100644
index 0000000000..662d0624ce
Binary files /dev/null and b/res/drawable-xhdpi/stat_sys_ringer_silent_kk.png differ
diff --git a/res/drawable-xhdpi/stat_sys_ringer_vibrate_kk.png b/res/drawable-xhdpi/stat_sys_ringer_vibrate_kk.png
new file mode 100644
index 0000000000..18be9c013a
Binary files /dev/null and b/res/drawable-xhdpi/stat_sys_ringer_vibrate_kk.png differ
diff --git a/res/drawable-xhdpi/stat_sys_signal_0.png b/res/drawable-xhdpi/stat_sys_signal_0.png
index fa82af5b23..a068d99fd3 100644
Binary files a/res/drawable-xhdpi/stat_sys_signal_0.png and b/res/drawable-xhdpi/stat_sys_signal_0.png differ
diff --git a/res/drawable-xhdpi/stat_sys_signal_0_fully.png b/res/drawable-xhdpi/stat_sys_signal_0_fully.png
index fa82af5b23..eb89a95992 100644
Binary files a/res/drawable-xhdpi/stat_sys_signal_0_fully.png and b/res/drawable-xhdpi/stat_sys_signal_0_fully.png differ
diff --git a/res/drawable-xhdpi/stat_sys_signal_1.png b/res/drawable-xhdpi/stat_sys_signal_1.png
index 07f1d97a65..8768ce01ed 100644
Binary files a/res/drawable-xhdpi/stat_sys_signal_1.png and b/res/drawable-xhdpi/stat_sys_signal_1.png differ
diff --git a/res/drawable-xhdpi/stat_sys_signal_1_fully.png b/res/drawable-xhdpi/stat_sys_signal_1_fully.png
index 4285ea1555..a1efa6409e 100644
Binary files a/res/drawable-xhdpi/stat_sys_signal_1_fully.png and b/res/drawable-xhdpi/stat_sys_signal_1_fully.png differ
diff --git a/res/drawable-xhdpi/stat_sys_signal_2.png b/res/drawable-xhdpi/stat_sys_signal_2.png
index b6e234997e..97a858f439 100644
Binary files a/res/drawable-xhdpi/stat_sys_signal_2.png and b/res/drawable-xhdpi/stat_sys_signal_2.png differ
diff --git a/res/drawable-xhdpi/stat_sys_signal_2_fully.png b/res/drawable-xhdpi/stat_sys_signal_2_fully.png
index 36a97ec113..7b3370a8de 100644
Binary files a/res/drawable-xhdpi/stat_sys_signal_2_fully.png and b/res/drawable-xhdpi/stat_sys_signal_2_fully.png differ
diff --git a/res/drawable-xhdpi/stat_sys_signal_3.png b/res/drawable-xhdpi/stat_sys_signal_3.png
index b06307e413..85f194b1b9 100644
Binary files a/res/drawable-xhdpi/stat_sys_signal_3.png and b/res/drawable-xhdpi/stat_sys_signal_3.png differ
diff --git a/res/drawable-xhdpi/stat_sys_signal_3_fully.png b/res/drawable-xhdpi/stat_sys_signal_3_fully.png
index cf0abf90f2..6ddd15c89a 100644
Binary files a/res/drawable-xhdpi/stat_sys_signal_3_fully.png and b/res/drawable-xhdpi/stat_sys_signal_3_fully.png differ
diff --git a/res/drawable-xhdpi/stat_sys_signal_4.png b/res/drawable-xhdpi/stat_sys_signal_4.png
index 6c28c5c642..c31d557799 100644
Binary files a/res/drawable-xhdpi/stat_sys_signal_4.png and b/res/drawable-xhdpi/stat_sys_signal_4.png differ
diff --git a/res/drawable-xhdpi/stat_sys_signal_4_fully.png b/res/drawable-xhdpi/stat_sys_signal_4_fully.png
index 52450d440b..91ff1377c8 100644
Binary files a/res/drawable-xhdpi/stat_sys_signal_4_fully.png and b/res/drawable-xhdpi/stat_sys_signal_4_fully.png differ
diff --git a/res/drawable-xhdpi/stat_sys_wifi_signal_0.png b/res/drawable-xhdpi/stat_sys_wifi_signal_0.png
index c8d4e7ba16..6b1038bad5 100644
Binary files a/res/drawable-xhdpi/stat_sys_wifi_signal_0.png and b/res/drawable-xhdpi/stat_sys_wifi_signal_0.png differ
diff --git a/res/drawable-xhdpi/stat_sys_wifi_signal_1.png b/res/drawable-xhdpi/stat_sys_wifi_signal_1.png
index 37019d1421..1fa3288808 100644
Binary files a/res/drawable-xhdpi/stat_sys_wifi_signal_1.png and b/res/drawable-xhdpi/stat_sys_wifi_signal_1.png differ
diff --git a/res/drawable-xhdpi/stat_sys_wifi_signal_1_fully.png b/res/drawable-xhdpi/stat_sys_wifi_signal_1_fully.png
index 42e8f92b1f..a0caf10e12 100644
Binary files a/res/drawable-xhdpi/stat_sys_wifi_signal_1_fully.png and b/res/drawable-xhdpi/stat_sys_wifi_signal_1_fully.png differ
diff --git a/res/drawable-xhdpi/stat_sys_wifi_signal_2.png b/res/drawable-xhdpi/stat_sys_wifi_signal_2.png
index 45c942054e..9179e634b5 100644
Binary files a/res/drawable-xhdpi/stat_sys_wifi_signal_2.png and b/res/drawable-xhdpi/stat_sys_wifi_signal_2.png differ
diff --git a/res/drawable-xhdpi/stat_sys_wifi_signal_2_fully.png b/res/drawable-xhdpi/stat_sys_wifi_signal_2_fully.png
index 629de937a3..c08d780e43 100644
Binary files a/res/drawable-xhdpi/stat_sys_wifi_signal_2_fully.png and b/res/drawable-xhdpi/stat_sys_wifi_signal_2_fully.png differ
diff --git a/res/drawable-xhdpi/stat_sys_wifi_signal_3.png b/res/drawable-xhdpi/stat_sys_wifi_signal_3.png
index fc678a1e55..06f4401e97 100644
Binary files a/res/drawable-xhdpi/stat_sys_wifi_signal_3.png and b/res/drawable-xhdpi/stat_sys_wifi_signal_3.png differ
diff --git a/res/drawable-xhdpi/stat_sys_wifi_signal_3_fully.png b/res/drawable-xhdpi/stat_sys_wifi_signal_3_fully.png
index 4cbfad83bf..7601c2e4f8 100644
Binary files a/res/drawable-xhdpi/stat_sys_wifi_signal_3_fully.png and b/res/drawable-xhdpi/stat_sys_wifi_signal_3_fully.png differ
diff --git a/res/drawable-xhdpi/stat_sys_wifi_signal_4.png b/res/drawable-xhdpi/stat_sys_wifi_signal_4.png
index 7b1e923880..58df6438dc 100644
Binary files a/res/drawable-xhdpi/stat_sys_wifi_signal_4.png and b/res/drawable-xhdpi/stat_sys_wifi_signal_4.png differ
diff --git a/res/drawable-xhdpi/stat_sys_wifi_signal_4_fully.png b/res/drawable-xhdpi/stat_sys_wifi_signal_4_fully.png
index ebd7a89969..deaa3ba1f6 100644
Binary files a/res/drawable-xhdpi/stat_sys_wifi_signal_4_fully.png and b/res/drawable-xhdpi/stat_sys_wifi_signal_4_fully.png differ
diff --git a/res/drawable-xhdpi/stat_sys_wifi_signal_null.png b/res/drawable-xhdpi/stat_sys_wifi_signal_null.png
index 44c1466ebd..62900f3757 100644
Binary files a/res/drawable-xhdpi/stat_sys_wifi_signal_null.png and b/res/drawable-xhdpi/stat_sys_wifi_signal_null.png differ
diff --git a/res/drawable-xxhdpi/ic_launcher.png b/res/drawable-xxhdpi/ic_launcher.png
new file mode 100644
index 0000000000..9c4830bc4d
Binary files /dev/null and b/res/drawable-xxhdpi/ic_launcher.png differ
diff --git a/res/drawable-xxhdpi/stat_sys_alarm_kk.png b/res/drawable-xxhdpi/stat_sys_alarm_kk.png
new file mode 100644
index 0000000000..d42d9d6273
Binary files /dev/null and b/res/drawable-xxhdpi/stat_sys_alarm_kk.png differ
diff --git a/res/drawable-xxhdpi/stat_sys_data_bluetooth.png b/res/drawable-xxhdpi/stat_sys_data_bluetooth.png
new file mode 100644
index 0000000000..17ffdb9a41
Binary files /dev/null and b/res/drawable-xxhdpi/stat_sys_data_bluetooth.png differ
diff --git a/res/drawable-xxhdpi/stat_sys_data_bluetooth_connected.png b/res/drawable-xxhdpi/stat_sys_data_bluetooth_connected.png
new file mode 100644
index 0000000000..6ec234eb8a
Binary files /dev/null and b/res/drawable-xxhdpi/stat_sys_data_bluetooth_connected.png differ
diff --git a/res/drawable-xxhdpi/stat_sys_ringer_silent_kk.png b/res/drawable-xxhdpi/stat_sys_ringer_silent_kk.png
new file mode 100644
index 0000000000..aabf0aaeee
Binary files /dev/null and b/res/drawable-xxhdpi/stat_sys_ringer_silent_kk.png differ
diff --git a/res/drawable-xxhdpi/stat_sys_ringer_vibrate_kk.png b/res/drawable-xxhdpi/stat_sys_ringer_vibrate_kk.png
new file mode 100644
index 0000000000..654c2a53bb
Binary files /dev/null and b/res/drawable-xxhdpi/stat_sys_ringer_vibrate_kk.png differ
diff --git a/res/drawable-xxhdpi/stat_sys_signal_0.png b/res/drawable-xxhdpi/stat_sys_signal_0.png
new file mode 100644
index 0000000000..12c983ff28
Binary files /dev/null and b/res/drawable-xxhdpi/stat_sys_signal_0.png differ
diff --git a/res/drawable-xxhdpi/stat_sys_signal_0_fully.png b/res/drawable-xxhdpi/stat_sys_signal_0_fully.png
new file mode 100644
index 0000000000..8204d54a4d
Binary files /dev/null and b/res/drawable-xxhdpi/stat_sys_signal_0_fully.png differ
diff --git a/res/drawable-xxhdpi/stat_sys_signal_1.png b/res/drawable-xxhdpi/stat_sys_signal_1.png
new file mode 100644
index 0000000000..172596e0df
Binary files /dev/null and b/res/drawable-xxhdpi/stat_sys_signal_1.png differ
diff --git a/res/drawable-xxhdpi/stat_sys_signal_1_fully.png b/res/drawable-xxhdpi/stat_sys_signal_1_fully.png
new file mode 100644
index 0000000000..6ecc24635d
Binary files /dev/null and b/res/drawable-xxhdpi/stat_sys_signal_1_fully.png differ
diff --git a/res/drawable-xxhdpi/stat_sys_signal_2.png b/res/drawable-xxhdpi/stat_sys_signal_2.png
new file mode 100644
index 0000000000..6cef33758c
Binary files /dev/null and b/res/drawable-xxhdpi/stat_sys_signal_2.png differ
diff --git a/res/drawable-xxhdpi/stat_sys_signal_2_fully.png b/res/drawable-xxhdpi/stat_sys_signal_2_fully.png
new file mode 100644
index 0000000000..cb0ea3ceed
Binary files /dev/null and b/res/drawable-xxhdpi/stat_sys_signal_2_fully.png differ
diff --git a/res/drawable-xxhdpi/stat_sys_signal_3.png b/res/drawable-xxhdpi/stat_sys_signal_3.png
new file mode 100644
index 0000000000..d379802c79
Binary files /dev/null and b/res/drawable-xxhdpi/stat_sys_signal_3.png differ
diff --git a/res/drawable-xxhdpi/stat_sys_signal_3_fully.png b/res/drawable-xxhdpi/stat_sys_signal_3_fully.png
new file mode 100644
index 0000000000..a02c2f3c34
Binary files /dev/null and b/res/drawable-xxhdpi/stat_sys_signal_3_fully.png differ
diff --git a/res/drawable-xxhdpi/stat_sys_signal_4.png b/res/drawable-xxhdpi/stat_sys_signal_4.png
new file mode 100644
index 0000000000..7e4de468d7
Binary files /dev/null and b/res/drawable-xxhdpi/stat_sys_signal_4.png differ
diff --git a/res/drawable-xxhdpi/stat_sys_signal_4_fully.png b/res/drawable-xxhdpi/stat_sys_signal_4_fully.png
new file mode 100644
index 0000000000..ec60ef705f
Binary files /dev/null and b/res/drawable-xxhdpi/stat_sys_signal_4_fully.png differ
diff --git a/res/drawable-xxhdpi/stat_sys_wifi_signal_0.png b/res/drawable-xxhdpi/stat_sys_wifi_signal_0.png
new file mode 100644
index 0000000000..c86ac3f7cc
Binary files /dev/null and b/res/drawable-xxhdpi/stat_sys_wifi_signal_0.png differ
diff --git a/res/drawable-xxhdpi/stat_sys_wifi_signal_1.png b/res/drawable-xxhdpi/stat_sys_wifi_signal_1.png
new file mode 100644
index 0000000000..f6b01ce483
Binary files /dev/null and b/res/drawable-xxhdpi/stat_sys_wifi_signal_1.png differ
diff --git a/res/drawable-xxhdpi/stat_sys_wifi_signal_1_fully.png b/res/drawable-xxhdpi/stat_sys_wifi_signal_1_fully.png
new file mode 100644
index 0000000000..cb909a42f9
Binary files /dev/null and b/res/drawable-xxhdpi/stat_sys_wifi_signal_1_fully.png differ
diff --git a/res/drawable-xxhdpi/stat_sys_wifi_signal_2.png b/res/drawable-xxhdpi/stat_sys_wifi_signal_2.png
new file mode 100644
index 0000000000..c54e995a18
Binary files /dev/null and b/res/drawable-xxhdpi/stat_sys_wifi_signal_2.png differ
diff --git a/res/drawable-xxhdpi/stat_sys_wifi_signal_2_fully.png b/res/drawable-xxhdpi/stat_sys_wifi_signal_2_fully.png
new file mode 100644
index 0000000000..0878b1ccd4
Binary files /dev/null and b/res/drawable-xxhdpi/stat_sys_wifi_signal_2_fully.png differ
diff --git a/res/drawable-xxhdpi/stat_sys_wifi_signal_3.png b/res/drawable-xxhdpi/stat_sys_wifi_signal_3.png
new file mode 100644
index 0000000000..772a3e1f37
Binary files /dev/null and b/res/drawable-xxhdpi/stat_sys_wifi_signal_3.png differ
diff --git a/res/drawable-xxhdpi/stat_sys_wifi_signal_3_fully.png b/res/drawable-xxhdpi/stat_sys_wifi_signal_3_fully.png
new file mode 100644
index 0000000000..8cd534a1a3
Binary files /dev/null and b/res/drawable-xxhdpi/stat_sys_wifi_signal_3_fully.png differ
diff --git a/res/drawable-xxhdpi/stat_sys_wifi_signal_4.png b/res/drawable-xxhdpi/stat_sys_wifi_signal_4.png
new file mode 100644
index 0000000000..e7e3a54aaf
Binary files /dev/null and b/res/drawable-xxhdpi/stat_sys_wifi_signal_4.png differ
diff --git a/res/drawable-xxhdpi/stat_sys_wifi_signal_4_fully.png b/res/drawable-xxhdpi/stat_sys_wifi_signal_4_fully.png
new file mode 100644
index 0000000000..dedecea52e
Binary files /dev/null and b/res/drawable-xxhdpi/stat_sys_wifi_signal_4_fully.png differ
diff --git a/res/drawable-xxhdpi/stat_sys_wifi_signal_null.png b/res/drawable-xxhdpi/stat_sys_wifi_signal_null.png
new file mode 100644
index 0000000000..d62df927db
Binary files /dev/null and b/res/drawable-xxhdpi/stat_sys_wifi_signal_null.png differ
diff --git a/res/layout-finger/order_tile_list_activity.xml b/res/layout-finger/order_tile_list_activity.xml
new file mode 100644
index 0000000000..7429319598
--- /dev/null
+++ b/res/layout-finger/order_tile_list_activity.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
diff --git a/res/layout-finger/order_tile_list_item.xml b/res/layout-finger/order_tile_list_item.xml
new file mode 100644
index 0000000000..f294398080
--- /dev/null
+++ b/res/layout-finger/order_tile_list_item.xml
@@ -0,0 +1,72 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/res/layout-hdpi/navbar_app_dialog.xml b/res/layout-hdpi/navbar_app_dialog.xml
new file mode 100644
index 0000000000..2c111c7921
--- /dev/null
+++ b/res/layout-hdpi/navbar_app_dialog.xml
@@ -0,0 +1,110 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/res/layout-land/linear_color_bar.xml b/res/layout-land/linear_color_bar.xml
new file mode 100644
index 0000000000..4a079db932
--- /dev/null
+++ b/res/layout-land/linear_color_bar.xml
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/res/layout-port/linear_color_bar.xml b/res/layout-port/linear_color_bar.xml
new file mode 100644
index 0000000000..4a079db932
--- /dev/null
+++ b/res/layout-port/linear_color_bar.xml
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/res/layout-xhdpi/navbar_app_dialog.xml b/res/layout-xhdpi/navbar_app_dialog.xml
new file mode 100644
index 0000000000..74056c112c
--- /dev/null
+++ b/res/layout-xhdpi/navbar_app_dialog.xml
@@ -0,0 +1,110 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/res/layout/app_picker_preference.xml b/res/layout/app_picker_preference.xml
index c119934660..027f22366d 100644
--- a/res/layout/app_picker_preference.xml
+++ b/res/layout/app_picker_preference.xml
@@ -1,3 +1,18 @@
+
+
+
+
-
-
diff --git a/res/layout/ongoing_notif_preference.xml b/res/layout/ongoing_notif_preference.xml
new file mode 100644
index 0000000000..37db09c511
--- /dev/null
+++ b/res/layout/ongoing_notif_preference.xml
@@ -0,0 +1,55 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/quick_settings_app_dialog.xml b/res/layout/quick_settings_app_dialog.xml
index 6ea30b5386..17f930561c 100644
--- a/res/layout/quick_settings_app_dialog.xml
+++ b/res/layout/quick_settings_app_dialog.xml
@@ -1,4 +1,19 @@
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/quick_settings_tile_gps.xml b/res/layout/quick_settings_tile_gps.xml
index c2c768ea01..e2ca76c97e 100644
--- a/res/layout/quick_settings_tile_gps.xml
+++ b/res/layout/quick_settings_tile_gps.xml
@@ -1,5 +1,6 @@
+
\ No newline at end of file
diff --git a/res/layout/quick_settings_tile_screenshot.xml b/res/layout/quick_settings_tile_screenshot.xml
new file mode 100644
index 0000000000..d5ea271bb0
--- /dev/null
+++ b/res/layout/quick_settings_tile_screenshot.xml
@@ -0,0 +1,24 @@
+
+
+
\ No newline at end of file
diff --git a/res/layout/quick_settings_tile_sleep.xml b/res/layout/quick_settings_tile_sleep.xml
index 8ad4a9391a..f66bb858a5 100644
--- a/res/layout/quick_settings_tile_sleep.xml
+++ b/res/layout/quick_settings_tile_sleep.xml
@@ -1,5 +1,6 @@
+
\ No newline at end of file
diff --git a/res/layout/quick_settings_tile_sync.xml b/res/layout/quick_settings_tile_sync.xml
index af2faca4d4..a5feda2f78 100644
--- a/res/layout/quick_settings_tile_sync.xml
+++ b/res/layout/quick_settings_tile_sync.xml
@@ -1,5 +1,6 @@
+
\ No newline at end of file
diff --git a/res/layout/quick_settings_tile_wifi.xml b/res/layout/quick_settings_tile_wifi.xml
new file mode 100644
index 0000000000..f1968ad4ab
--- /dev/null
+++ b/res/layout/quick_settings_tile_wifi.xml
@@ -0,0 +1,24 @@
+
+
+
\ No newline at end of file
diff --git a/res/layout/quick_settings_tile_wifi_ap.xml b/res/layout/quick_settings_tile_wifi_ap.xml
index 4d68973387..e3b649ade8 100644
--- a/res/layout/quick_settings_tile_wifi_ap.xml
+++ b/res/layout/quick_settings_tile_wifi_ap.xml
@@ -1,5 +1,6 @@
+
+
+
+
+
+
+
+
diff --git a/res/layout/slider_preference.xml b/res/layout/slider_preference.xml
index fba6864fc4..a1829e9adb 100644
--- a/res/layout/slider_preference.xml
+++ b/res/layout/slider_preference.xml
@@ -1,4 +1,19 @@
+
+
+ android:paddingRight="2dp">
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
new file mode 100644
index 0000000000..20aec51987
--- /dev/null
+++ b/res/values-ar/strings.xml
@@ -0,0 +1,683 @@
+
+
+
+
+
+ GravityBox
+
+ نمط البطارية
+ افتراضي
+ دائري
+ دائري مع نسبة مئوية
+ نسبة مئوية
+ لا شيء
+
+ تنقل بمفاتيح الصوت
+ الانتقال بين الصوتيات أثناء اطفاء الشاشة بضغطة زر مطولة
+
+ تنبيه عند انخفاض البطارية
+ نافذة منبثقة مع نغمة
+ نافذة منبثقة فقط
+ نغمة فقط
+ عدم التنبيه
+
+ سيتم تطبيق المتغيرات بعد اعادة التشغيل
+
+ اخفاء تلقائي لأيقونة الشبكة
+ Auto-hides signal icons for selected SIM slots when SIM card is not inserted, disables \"SIM not inserted\" notifications
+ Auto-hide SIM Slot 1
+ Auto-hide SIM Slot 2
+ تعطيل الاشعارات
+ \"SIM not inserted\" notifications disabled
+
+ قائمة اعادة التشغيل المتقدمة
+ Enables advanced reboot menu with options to reboot to recovery
+ Recovery
+ Bootloader
+
+ التحكم بمؤشر الكتابة
+ التحكم بمؤشر الكتابة بواسطة مفاتيح الصوت
+ تعطيل
+ تحرك المؤشر لليسار عند رفع الصوت والعكس
+ تحرك المؤشر لليمين عند رفع الصوت والعكس
+
+ مسح كافة المهام الأخيرة
+
+ Fix Date&Time settings crash
+ Enable in case you experience crash while accessing Date&Time settings (requires reboot)
+
+ Fix caller ID for phone
+ Enable in case your contact is not matched when receiving call (requires reboot)
+ After reboot, you should clear and re-add your contacts for change to take effect! Use Settings / Applications / All - to clear data of Contacts provider.
+
+ Fix caller ID for messages
+ Enable in case you experience splitted conversation threads for the same contact (requires reboot)
+ After reboot, you should delete all splitted threads in messaging app for change to take effect!
+
+ Fix calendar app
+ Enable in case you experience periodic self-turning on of the screen (requires reboot)
+
+ Important
+
+ صورة المتصل بكامل الشاشة
+ عرض صورة المتصل بكامل الشاشة للمكالمات الواردة
+
+
+ تشغيل المزامنة
+ اطفاء المزامنة
+ Wi-Fi AP on
+ Wi-Fi AP off
+ تشغيل الكشاف
+ اطفاء الكشاف
+ المس للاطفاء
+ Playing…
+ Recording…
+ تم التسجيل
+ ضغطة مطولة لبدء التسجيل
+ ضغطة لاطفاء التسجيل
+ تعطيل
+ افتراضي
+ موسع
+ ابقاء الشاشة تعمل
+ اطفاء
+ Wi-Fi
+ Wi-Fi off
+ غير متصل
+ جاري الاتصال ...
+
+
+ أيقونات الاعدادات السريعة
+ امكانية عرض أو اخفاء أيقونات الاعدادات السريعة على شريط الحالة
+ المستخدم
+ وضع الطيران
+ البطارية
+ Wi-Fi
+ Wi-Fi (CM style)
+ البلوتوث
+ GPS
+ GPS (CM style)
+ بيانات الجوال
+ وضع الشبكة
+ استخدام البيانات
+ Audio profiles
+ الاضاءة
+ مهلة الشاشة
+ دوران تلقائي
+ تزامن
+ Wi-Fi Access Point
+ الكشاف
+ GravityBox
+ سبات
+ تسجيل سريع
+ الاعدادات
+ الصوت
+ سطح المكتب الموسع
+ ابقى متيقض
+ تصوير الشاشة
+
+
+ اختيار اللون
+ اضغط على اللون لتطبيقه
+
+
+ لون خلفية شريط الحالة
+ Allows to set statusbar background color and transparency
+
+
+ Fix speech settings
+ Unlocks voice search and text-to-speech settings in Language&Input (requires reboot)
+
+
+ خيارات المطور المتقدمة
+ إلغاء تأمين خيارات المطور المتقدمة(يتطلب اعادة تشغيل)
+
+
+ شريط الحالة
+ يحتوي عدة خيارات للتعديل على شريط الحالة
+ متنوع
+ يحتوي عدة خيارات غير مدرجة ضمن الفئات الأخرى
+ إصلاحات عامة
+ Contains general MTK6589 specific fixes. Use only if needed.
+
+
+ حول
+ Coded by C3C076@XDA. Touch to visit official thread.
+ Xposed framework
+ Coded by rovo89@XDA. Touch to visit official thread.
+ تبرع
+ Donate to me if you think this app is worth it! Also consider donating to rovo89 for his excellent Xposed framework.
+
+
+ Your %s will reboot.
+ Your %s will reboot into recovery.
+ Your %s will reboot into bootloader.
+
+
+ تأثير اطفاء الشاشة
+ تمكين الحركة التي تحاكي اطفاء شاشة التلفزيون القديم
+
+
+ Engineering mode
+ Launches Engineering mode application
+
+
+ نغمات شرائح الاتصال
+ تشغيل تطبيق يسمح بتعيين نغمات الرنين والاشعارات بشكل منفصل لكل شريحة اتصال
+
+
+ شاشة القفل
+ يحتوي عدة خيارات للتعديل على شاشة القفل
+ خلفية شاشة القفل
+ نمط الخلفية
+ الخلفية الافتراضية
+ لون مخصص
+ صورة مخصصة
+ تعيين لون مخصص
+ امكانية تعيين لون مخصص لخلفية شاشة القفل
+ تعيين صورة مخصصة
+ امكانية تعيين صورة مخصصة لخلفية شاشة القفل
+ تم تغيير الخلفية
+ لم يتم تغيير الخلفية
+ أخرى
+ توسيع الويدجت
+ عند التفعيل يتم عرض الويدجت بكامل الشاشة
+
+
+ الطاقة
+ يحتوي عدة خيارات ذات صلة بطاقة الهاتف
+
+
+ تعطيل اضاءة الاشعارات
+ تعطيل اضاءة وميض الاشعارات عند انخفاض طاقة البطارية
+
+
+ شاشة العرض
+ يحتوي عدة خيارات للعتديل على شاشة العرض
+
+
+ الحد الأدنى لمستوى السطوع
+ يسمح بتعيين الحد الأدنى لمستوى السطوع. ينطبق على إعداد السطوع اليدوي. (يتطلب إعادة التشغيل)
+
+
+ مستويات السطوع التلقائي
+ يسمح بتعيين مستويات الإضاءة المحيطة والمقابلة لقيم الإضاءة الخلفية لشاشة LCD
+ المستوى
+ الحد الأعلى
+ Brightness (%d – 255)
+ العدد المحدد غير صالح
+ لا ينصح بتعيين السطوع أقل من %d
+ لا يمكن تعيين السطوع أكبر من 255
+ لا يمكن أن تكون القيم أصغر أو تساوي الصفر
+ Values on lower levels cannot be greater than values on higher levels
+ Values on higher levels cannot be smaller than values on lower levels
+ Values for %s set
+ تم حفظ التكوين الجديد للسطوع التلقائي
+ لم يتم حفظ التكوين الجديد للسطوع التلقائي
+ juddk
+
+
+ تفعيل دوران شاشة القفل
+ تحذير: يسبب مشاكل لبعض الأجهزة
+
+
+ تمكين مفتاح القائمة
+ امكانية استخدام مفتاح القائمة لفتح شاشة القفل (يتطلب اعادة التشغيل)
+
+
+ اصلاح الرسائل عند القفل
+ يمنع عرض الرسائل الواردة عند تأمين شاشة القفل (يتطلب اعادة التشغيل)
+
+
+ توسيط الساعة
+
+
+ الوسائط
+ يحتوي عدة خيارات للتعديل على الصوتيات
+
+
+ التحكم بالصوت
+ ازدياد عدد درجات التحكم بالصوت من 7 إلى 30 ببرنامج الموسيقى (يتطلب اعادة التشغيل)
+
+
+ صوت السماعة
+ المحافظة على حجم الصوت داخل سماعة الرأس
+
+
+ الشحن
+ تعطيل اضاءة الاشعارات أثناء الشحن
+
+
+ مفاتيح الجهاز
+ يسمح بتعيين اجراءات مخصصة لأزرار الجهاز
+ ضغطة مطولة على زر القائمة
+ ضغطة مزدوجة على زر القائمة
+ ضغطة مطولة على زر العودة
+ افتراضي
+ بحث
+ بحث صوتي
+ التبديل إلى التطبيق السابق
+ انهاء التطبيق الحالي
+ سبات
+ مهلة الضغطة المطولة
+ تحديد مهلة تأخير الضغطة قبل انهاء التطبيق
+ سرعة الضغطة المزدوجة
+ تحديد سرعة الضغطة المزدوجة على زر القائمة
+ تم انهاء التطبيق
+ لا يوجد تطبيقات
+ لا يوجد تطبيق سابق
+
+
+ الاتصال
+ يحتوي عدة خيارات للتحكم بالمكالمات والرسائل والشبكات
+
+
+ قلب الهاتف أثناء الرنين
+ تحديد الإجراء عند قلب الهاتف أثناء الرنين
+ لا شيء
+ كتم الصوت
+ رفض المكالمة
+
+
+ اعادة تشغيل النظام
+
+
+ خلفية سوداء
+ استخدام خلفية سوداء لثيم النظام (يتطلب اعادة التشغيل)
+
+
+ عدد الأعمدة
+ تحديد عدد الأعمدة للأيقونات المعروضة بدرج الاعدادات السريعة
+
+
+ عرض اليوم
+
+
+ توسيع لوحة الصوت
+ امكانية ضبط حجم الصوت لنغمة الرنين والموسيقى والمنبه والاشعارات
+
+
+ ربط الاشعارات بنغمة الرنين
+ عند التعطيل بإمكانك ضبط حجم الصوت لكل منهما على حدة
+
+
+ تبديل تلقائي إلى الاعدادات السريعة
+ سيتم عرض الاعدادات السريعة عند سحب شريط الحالة للأسفل في حال لم يكن هناك اشعار
+
+
+ سحب سريع
+ اسحب شريط الحالة من الطرف المناسب لاظهار الاعدادات السريعة
+ تعطيل
+ الطرف الأيمن
+ الطرف الأيسر
+
+
+ تعطيل تشغيل الشاشة بزر الصوت
+ لبعض الأجهزة كالجالكسي3
+
+
+ ألوان شريط الحالة
+
+
+ تفعيل ألوان الأيقونات
+
+
+ لون أيقونات شريط الحالة
+ تعيين لون مخصص لأيقونة الساعة والبطارية الموجودة على شريط الحالة
+
+
+ لون مؤشر البيانات
+ تعيين لون مخصص عند استخدام بيانات الجوال
+
+
+ ادارة الاعدادات السريعة
+
+
+ نمط درج الاشعارات
+
+
+ خلفية درج الاشعارات
+ الخلفية الافتراضية
+ لون مخصص
+ صورة مخصصة
+ تعيين لون للخلفية
+ تعيين صورة طولية
+ تعيين صورة عرضية
+ شفافية الخلفية
+ وضع الخلفية
+ أمامي
+ خلفي
+
+
+ تعطيل مؤشرات التجوال
+ سيتم اخفاء مؤشر التجوال أثناء الاستخدام
+
+
+ جاري الشحن (%d%%)
+ تم الشحن
+ %d%% متبقي
+
+
+ الخدمة غير متوفرة
+ وضع الطيران مفعل
+ مكالمات الطوارئ فقط
+
+
+ اعدادات Pie
+ تفعيل اعدادات Pie
+ حجم أزرار التنقل
+ مواقع التشغيل
+ يسار الشاشة
+ أسفل الشاشة
+ يمين الشاشة
+ أعلى الشاشة
+
+
+ الاضاءة الخلفية للأزرار
+ افتراضي
+ تعطيل الاضاءة
+ تفعيل الاضاءة أثناء تشغيل الشاشة
+ اضاءة الاشعارات
+ تفعيل الاضاءة عند وصول اشعار والشاشة مطفأة
+
+
+ اخفاء شريط التنقل
+ اخفاء شريط التنقل أثناء تفعيل اعدادات Pie (يتطلب اعادة التشغيل)
+
+
+ خلفية متدرجة
+ استخدام خلفية متدرجة لثيم النظام (يتطلب اعادة التشغيل)
+
+
+ تعطيل أزرار الجهاز
+ تعطيل الأزرار الافتراضية كالقائمة والعودة والمنزل أثناء تفعيل اعدادات Pie ، سوف تعمل الأزرار الحقيقية للأجهزة كالجالكسي 3
+
+
+ استخدام الثيم الغامق
+ التبديل من الثيم الفاتح إلى الغامق
+
+
+ اغلاق
+ اعلى اليسار
+ اعلى اليمين
+ اسفل اليسار
+ اسفل اليمين
+
+
+ ضبط الهامش العلوي
+
+
+ تعطيل تحذيرات التجوال
+ تعطيل تحذيرات التجوال عند التراسل أو اجراء مكالمة فديو
+
+
+ بحث
+ لا شيء
+
+
+ تطبيق سريع
+ اعدادات أيقونة التطبيق السريع
+ التطبيق الرئيسي
+ ضغطة مطولة لاظهار التطبيق الأول
+ ضغطة مطولة لاظهار التطبيق الثاني
+ ضغطة مطولة لاظهار التطبيق الثالث
+ ضغطة مطولة لاظهار التطبيق الرابع
+
+
+ GPS on
+ GPS off
+ GPS locked
+
+
+ اضهار زر القائمة دائماً
+
+
+ وضع الرنين
+
+
+ اعدادات الساعة
+
+
+ اخفاء ص/م
+
+
+ اخفاء الساعة
+
+
+ حجم المشغل
+
+
+ إدارة الشفافية
+ شفافية شريط الحالة في الشاشة الرئيسية
+ شفافية شريط الحالة في شاشة القفل
+ شفافية شريط التنقل في الشاشة الرئيسية
+ شفافية شريط التنقل في شاشة القفل
+
+
+ اخفاء أيقونة المنبه
+
+
+ مستوى تعتيم الشاشة
+ مقدار السطوع عندما تكون الشاشة على وشك الاغلاق (يتطلب اعادة التشغيل)
+
+
+ هاتف
+ لوحي
+
+
+ اعدادات السطوع
+ تفعيل اعدادات السطوع
+ Use only in case your device supports standard Android brightness features. Keep disabled if you experience brightness related issues. (requires reboot)
+
+
+ عرض التطبيقات الأخيرة
+
+
+ ضغطة مطولة على زر المنزل
+
+
+ تشغيل تطبيق مخصص 1
+ تعيين تطبيق مخصص 1
+ تشغيل تطبيق مخصص 2
+ تعيين تطبيق مخصص 2
+ لم يتم تعيين تطبيق!
+ لم يتم العثور على التطبيق!
+
+
+ Notification panel clock app
+ Links notification panel clock to a specified app instead of Date&Time settings
+
+
+ Waiting for response from GravityBox system framework…
+ GravityBox system framework not responding. Exiting.
+
+
+ National data roaming
+ Connect to data services when nationally roaming
+
+
+ وضع سطح المكتب الموسع
+ معطل
+ احفاء شريط الحالة
+ اخفاء شريط التنقل
+ اخفاء الكل
+ سطح المكتب الموسع
+ سطح المكتب الموسع مفعل
+ سطح المكتب الموسع معطل
+
+
+ تصوير الشاشة
+
+
+ عرض القائمة
+
+
+ تبديل سطح المكتب الموسع
+ سطح المكتب الموسع معطل!
+
+
+ شريط التنقل
+ يحتوي عدة خيارات للتعديل على شريط التنقل
+ تجاوز افتراضيات النظام
+ Master switch for navigation bar tweaks (requires reboot)
+ تفعيل شريط التنقل
+ يتطلب اعادة التشغيل
+ ارتفاع شريط التنقل
+ يتم التطبيق على الشريط في الوضع العمودي
+ يتم التطبيق على الشريط في الوضع الأفقي
+ عرض شريط التنقل
+ يتم التطبيق على الشريط في الوضع العمودي
+ اظهار زر القائمة دائماً
+
+
+ تصوير الشاشة بقائمة الطاقة
+
+
+ اعدادات فتح القفل
+ تعيين تطبيقات لفتح القفل
+ امكانية تعيين تطبيقات حول حلقة القفل
+ Target application %s
+ إزاحة حلقة القفل عمودياً
+ إزاحة حلقة القفل أفقياً
+
+
+ تفعيل التحكم بالسطوع
+ ضبط السطوع عبر الانزلاق خلال شريط الحالة يميناً ويساراً (يتطلب سطوع تلقائي ليتم تعطيله)
+
+
+ المكالمات
+ الرسائل
+ بيانات الجوال
+
+
+ Strip unicode
+ Converts unicode characters to normal characters. Decreases overall message size.
+ Leave characters intact
+ Strip non-encodable characters
+ Strip all unicode characters
+
+
+ تعطيل التحذير عند استخدام الشبكة
+ تعطيل التحذير حول بطء سرعة نقل البيانات في وضع 2G
+
+
+ نفس لون البطارية
+ يجل لون الساعة والنسبة المئوية بنفس لون بطارية النظام . (يتم التفعيل عندما يكون الخيار التالي معطل)
+
+
+ وضع الشبكة
+ 2G/2G+3G/3G/(LTE)
+ 2G/2G+3G/(LTE)
+ 2G/3G/(LTE)
+
+
+ تفعيل الدوران في كل الاتجاهات
+
+
+ تجاوز السلوك الافتراضي
+ عكس عملية الضغطة الخفيفة والمطولة لأيقونات الاعدادات السريعة (يتطلب اعادة التشغيل)
+
+
+ وضع الشبكة لكل شريحة
+ Defines SIM slot to which network mode tile applies (%s)
+ SIM slot 1
+ SIM slot 2
+
+
+ أبداً
+ دائماً
+ عند تفعيل سطح المكتب الموسع
+ عند تفعيل سطح المكتب الموسع مع اخفاء شريط التنقل
+
+
+ استخدام لون بطارية النظام
+ استخدام لون البطارية الاصلي للنظام
+
+
+ تشغيل الشاشة
+ عند التفعيل ستعمل الشاشة عند توصيل أو فصل سلك الشاحن (يتطلب اعادة التشغيل)
+
+
+ كتم صوت المشغل
+ كتم الصوت بمشغل الموسيقى عند ضبط مستوى الصوت باستخدام مفاتيح الصوت
+
+
+ اهتزاز عند الاتصال
+ عند الرد على المكالمة
+ عند قطع المكالمة
+ عند انتظار المكالمة
+ كل 45 ثانية أثناء المكالمات الصادرة
+
+
+ اعادة ترتيب الأيقونات
+ يسمح باعادة ترتيب أيقونات الاعدادات السريعة
+
+
+ حجب الاشعارات
+ يسمح بحجب الإشعارات الواردة
+ The list will get populated automatically for every ongoing notification that occurs.
+ You can then decide whether to block ongoing notification next time it occurs. Use with caution.
+ اعادة تعيين القائمة
+ هل أنت متأكد من أنك تريد إعادة تعيين القائمة؟
+ سيؤدي هذا إلى مسح القائمة الحالية والافراج عن جميع الإشعارات الواردة التي منعت سابقاً .
+ (القائمة فارغة)
+
+
+ فتح سريع
+ فتح القفل تلقائياً عندما يتم ادخال كلمة المرور الصحيحة
+
+
+ تعطيل
+ قياسي
+ أحرف صغيرة
+ أحرف كبيرة
+
+
+ تأمين شريط الحالة
+ افتراضي
+ إلغاء التأمين عند عدم وجود تأمين للجهاز
+ تأمين
+
+
+ مراقبة حركة البيانات
+ تفعيل المراقبة
+ اظهار المراقبة تلقائياً عندما تكون بيانات الجوال مفعلة
+ الموقع
+ تلقائي
+ في اليسار
+ الحجم
+ عادي
+ صغير
+ صغير جداً
+ B
+ KB
+ MB
+ s
+
+
+ تعطيل محدودية الويدجت
+ السماح بإضافة عدد لا محدود من الويدجت على شاشة القفل
+
+
+
+ %1$s المتبقي
+
+ %1$s المستخدم
+ شريط الذاكرة العشوائية
+ تعطيل
+ في الأعلى
+ في الأسفل
+
+
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index 1ea5b2da6b..360e4971bb 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -1,11 +1,14 @@
-
-
+
+
GravityBox
-
+
Styl indikátoru baterieZákladní
- Kruhový s procenty
+ Kruhový bez procent
+ Kruhový s procenty
+ KitKat bez procent
+ KitKat s procentyProcentuální text stavu baterieŽádný
@@ -34,8 +37,8 @@
Pohyb kurzoru tlačítky hlasitostiUmožní pohyb kurzoru pomocí tlačítek hlasitosti v textových políchVypnuté
- Tlačítko nahoru/dolu pohybuje kurzorem doleva/doprava
- Tlačítko nahoru/dolu pohybuje kurzorem doprava/doleva
+ Tlačítko nahoru/dolů pohybuje kurzorem doleva/doprava
+ Tlačítko nahoru/dolů pohybuje kurzorem doprava/dolevaUkončení aktuálních aplikacíZobrazí tlačítko, které umožní ukončení všech aplikací najednou, v seznamu aktuálních aplikací
@@ -47,8 +50,8 @@
Použít v případě, když nastavení datumu a času padá (vyžaduje restart)Opravit identifikátor volajícího
- Použít v případě, když není číslo volajícího identifikované během přijímání hovoru (vyžaduje restart)
- Aby se oprava projavila, je potřebné po restartu vymazat a znova přidat kontakty! V Nastavení / Aplikace / Všechny, vyhledejte \"Úložiště kontaktů\" a zvolte vymazání údajů. Ujistěte se nejdříve, že máte zálohu kontaktů.
+ Použít v případě, když není číslo volajícího identifikováno během přijímání hovoru (vyžaduje restart)
+ Aby se oprava projevila, je nutné po restartu vymazat a znova přidat kontakty! V Nastavení / Aplikace / Všechny, vyhledejte \"Úložiště kontaktů\" a zvolte vymazání údajů. Ujistěte se nejdříve, že máte zálohu kontaktů.Opravit identifikátor odesílatele SMSPoužít v případě kdy dochází při přijetí SMS k vytváření duplicitních vláken konverzací pro ten samý kontakt (vyžaduje restart)
@@ -75,6 +78,15 @@
ZaznamenánoPodržte pro záznamDotykem zastavíte záznam
+ Vypnuto
+ Normální plocha
+ Rozšířená plocha
+ Bdění zap
+ Bdění vyp
+ Wi-Fi
+ Wi-Fi vyp
+ Nepřipojeno
+ Zapíná se…Dlaždice QuickSettings panelu
@@ -83,10 +95,12 @@
Režim v letadleStav baterieWi-Fi
+ Wi-Fi (CM styl)BluetoothGPS
+ GPS (CM styl)Mobilní data
- Typ síte
+ Typ sítěVyužití datZvukové profilyJas
@@ -94,12 +108,16 @@
Automatické otáčení obrazovkySynchronizaceWi-Fi Přístupový bod
- Světlo
+ SvětloGravityBox
- Uspát
+ UspatRychlý záznam zvuku
-
-
+ Hlasitost
+ Rozšířená plocha
+ Bdění
+ Screenshot
+
+
Výběr barvyDotykem potvrdíte barvu
@@ -128,12 +146,12 @@
Naprogramoval C3C076@XDA. Dotykem otevřete oficiální stránku.Xposed frameworkNaprogramoval rovo89@XDA. Dotykem otevřete oficiální stránku.
- Přispět
- Přispějte přes PayPal pokud si myslíte, že tato aplikace za to stojí! Zvažte též příspěvek pro rovo89 za jeho excelentní Xposed framework.
+ Podpořit vývoj
+ Dotykem podpoříte vývoj aplikace věnováním příspěvku libovolné hodnoty přes PayPal
- Váš telefon bude restartovaný
- Váš telefon bude restartovaný do režimu Recovery
+ Váš %s bude restartován
+ Váš %s bude restartován do režimu RecoveryCRT efekt vypnutí obrazovky
@@ -180,16 +198,15 @@
Minimální úroveň jasuUmožňuje nastavit minimální úroveň jasu pro manuální nastavení jasu (vyžaduje restart)
- Hodnota z intervalu: 10 – 80Úrovně automatického jasuUmožňuje nastavit úrovně světla prostředí a odpovídající úrovně podsvícení obrazovkyÚroveňLux max
- Jas (10 – 255)
+ Jas (%d – 255)Zadané číslo není platné
- Nedoporučuje se nastavit úroveň jasu menší než 10
+ Nedoporučuje se nastavit úroveň jasu menší než %dÚroveň jasu nesmí být větší než 255Hodnoty nesmí být menší nebo rovné nuleHodnoty na nižších úrovních nesmí být větší než hodnoty na vyšších úrovních
@@ -197,6 +214,7 @@
Hodnoty pro %s nastavenyNová konfigurace automatického jasu byla uloženaNová konfigurace automatického jasu NEBYLA uložena
+ NastavitRotace obrazovky uzamčení
@@ -231,21 +249,21 @@
Akce tlačítek
- Umožňuje nastavení akcí pro hardvérová tlačítka
- Dlouhé podržení Menu
- Dvojité klepnutí na Menu
- Dlouhé podržení Zpět
+ Umožňuje nastavení akcí pro hardwarová tlačítka
+ Dlouhé podržení Menu
+ Dvojité klepnutí na Menu
+ Dlouhé podržení ZpětVýchozíVyhledáváníHlasové vyhledáváníPřepnout na předcházející aplikaciZabít aplikaci v popředí
- Uspát
+ UspatZpoždění zabití aplikace
- Vztahuje se na akci zabití aplikace v popředí dlouhým podržením tlačítka. Definuje, jak dlouho musí být tlačítko přidrženo aby došlo k provedení akce.
+ Vztahuje se na akci zabití aplikace v popředí dlouhým podržením tlačítka. Definuje, jak dlouho musí být tlačítko přidrženo, aby došlo k provedení akce.Rychlost dvojitého klepnutí
- Vztahuje se na dvojité klepnutí na Menu. Definuje, jak rychle musí být provedeno dvojité klepnutí aby došlo k provedení akce.
- Aplikace zabita
+ Vztahuje se na dvojité klepnutí na Menu. Definuje, jak rychle musí být provedeno dvojité klepnutí, aby došlo k provedení akce.
+ Aplikace %s zabitaNení co zabítŽádná předcházející aplikace
@@ -260,17 +278,13 @@
Ztlumit vyzváněníZrušit hovor
-
- Zakázat vibrování při navázání hovoru
- Zakáže vibraci, která je provedena při navázání hovoru
-
Plné černé pozadíNahradí standardní černo-šedé pozadí (gradient) plnou černou barvou (vyžaduje restart)Počet dlaždic na řádek
- Definuje počet QuickSettings dlaždic zobrazených na 1 řádek. Velikost dlaždic bude upravená podle potřeby. Aplikovatelné na portrét režim.
+ Definuje počet QuickSettings dlaždic zobrazených na 1 řádek. Velikost dlaždic bude upravena podle potřeby. Aplikovatelné na portrét režim.Zobrazit den v týdnu
@@ -285,7 +299,7 @@
Automatické zobrazení QuickSettings
- QuickSettings budou zobrazeny automaticky pokud se v oznamovacím panely nenacházejí žádné notifikace
+ QuickSettings budou zobrazena automaticky, pokud se v oznamovacím panely nenacházejí žádné notifikaceRychlé zobrazení QuickSettings
@@ -333,12 +347,12 @@
Vypnout roaming indikátory
- Pokud vypnuto, R indikátory nebudou zobrazeny během roamingu. Použít s opatrností.
+ Pokud vypnuto, R indikátory nebudou zobrazeny během roamingu. Použít s rozmyslem.Nabíjení (%d%%)Nabito
- %d%% zůstává
+ %d%% zbýváBez signálu
@@ -348,7 +362,6 @@
KoláčZapnout koláč
- Povolit tlačítko hledáníVelikost koláčePozice koláčeLevý okraj obrazovky
@@ -366,15 +379,15 @@
Skrýt navigační lištu
- Skryje navigační lištu pokud je zapnutý koláč (pro zařízení s navigační lištou, vyžaduje restart)
+ Skryje navigační lištu, pokud je zapnutý koláč (pro zařízení s navigační lištou, vyžaduje restart)Vyhlazené Holo pozadíNahradí standardní Holo pozadí vyhlazeným obrázkem za účelem eliminace pruhů barevného přechodu (vyžaduje restart)
-
- Zablokovat HW tlačítka
- Zablokuje MENU, ZPĚT, DOMŮ pokud je zapnutý koláč. Akce HW tlačítek budou nadále fungovat (pro zařízení s HW tlačítky)
+
+ Zablokovat navigační tlačítka
+ Zablokuje ťuknutí na tlačítka pokud je zapnutý koláčPoužít tmavé téma
@@ -390,4 +403,385 @@
Přizpůsobit horní okraj
-
+
+ Vypnout roaming varování
+ Vypne zobrazování varování při posílání zpráv a volání v roamingu
+
+
+ Hledat
+ (Žádná)
+
+
+ Quick App
+ Nastavení QuickApp dlaždice
+ Hlavní aplikace
+ Dlouhé stisknutí - app slot 1
+ Dlouhé stisknutí - app slot 2
+ Dlouhé stisknutí - app slot 3
+ Dlouhé stisknutí - app slot 4
+
+
+ GPS zap
+ GPS vyp
+ GPS fix
+
+
+ Vždy zobrazit menu tlačítko
+
+
+ Režim zvonění
+
+
+ Nastavení hodin
+
+
+ Skrýt AM/PM
+
+
+ Skrýt hodiny
+
+
+ Velikost aktivátoru
+
+
+ Nastavení průhlednosti
+ Umožňuje nastavení úrovně průhlednosti pro stavový řádek a navigační lištu
+ Stavový řádek pro launcher
+ Stavový řádek pro lockscreen
+ Navigační lišta pro launcher
+ Navigační lišta pro lockscreen
+
+
+ Skrýt ikonu alarmu
+
+
+ Úroveň zatmavení obrazovky
+ Úroveň jasu pro zatmavení obrazovky těsně před jejím vypnutím (vyžaduje restart)
+
+
+ telefon
+
+
+ Nastavení jasu
+ Povolit nastavení jasu
+ Použit pouze v případě, pokud zařízení podporuje standardní Android nastavení jasu. V případě problémů s jasem je třeba ponechat nastavení vypnuté. (vyžaduje restart)
+
+
+ Seznam spuštěných aplikací
+
+
+ Dlouhé podržení Domů
+
+
+ Spustit aplikaci 1
+ Nastavit aplikaci ke spuštění 1
+ Spustit aplikaci 2
+ Nastavit aplikaci ke spuštění 2
+ Aplikace není nastavena!
+ Aplikace nebyla nalezena!
+
+
+ Aplikace hodin notifikačního panelu
+ Naváže hodiny notifikačního panelu na zvolenou aplikaci namísto nastavení data a času
+
+
+ Čekám na odpověď ze systémového modulu GravityBox…
+ Systémový modul GravityBox neodpovídá.
+
+
+ Národní datový roaming
+ Povolí datové služby během národního roamingu
+
+
+ Režim rozšířené plochy
+ Vypnuto
+ Skrýt stavový řádek
+ Skrýt navigační lištu
+ Skrýt stavový řádek i navigační lištu
+ Rozšířená plocha
+ Rozšířená plocha je ZAP
+ Rozšířená plocha je VYP
+
+
+ Screenshot
+
+
+ Vyvolat menu
+
+
+ Přepnout rozšíření plochy
+ Režim rozšířené plochy je vypnutý!
+
+
+ Nastavení navigační lišty
+ Obsahuje různá nastavení týkající se navigační lišty
+ Obejít systémová nastavení
+ Hlavní přepínač pro povolení nastavení navigační lišty (vyžaduje restart)
+ Povolit navigační lištu
+ Vyžaduje restart
+ Výška navigační lišty
+ Pro horizontální navigační lištu a orientaci na výšku
+ Pro horizontální navigační lištu a orientaci na šířku
+ Šířka navigační lišty
+ Pro vertikální navigační lištu
+ Vždy zobrazit Menu tlačítko
+
+
+ Screenshot v menu napájení
+
+
+ Nastavení odemykacího prstence
+ Povolit zkratky
+ Hlavní vypínač pro zkratky obrazovky uzamčení
+ Aplikace pro zkratku %s
+ Vertikální ofset prstence
+ Horizontální ofset prstence
+
+
+ Povolit ovládání jasu
+ Povolí ovládání jasu posouváním prstu po stavové liště
+
+
+ Telefon
+ Zprávy
+ Mobilní data
+
+
+ Konverze diakritiky
+ Odstraní diakritiku ze zprávy před jejím odesláním. Snižuje nároky na počet znaků zprávy.
+ Ponechat výchozí
+ Konverze nekódovatelných znaků
+ Konverze všech znaků
+
+
+ Vypnout varování pomalých 2G dat
+ Vypne varování o pomalých 2G datech pro SIM v režimu 2G, při zapnutí dat použitím dlaždice
+
+
+ Kopírovat barvu stock baterie
+ Nastaví barvu hodin, procent baterie a kruhového indikátoru podle barvy stock baterie (pokud je vypnuto vlastní vybarvování)
+
+
+ Režim dlaždice typu mobilní sítě
+ 2G/2G+3G/3G
+ 2G/2G+3G
+
+
+ Povolit všechny rotace
+
+
+ Změnit standardní chování dlaždic
+ Změní akce na dotek / dlouhý dotek pro zvolené dlaždice (vyžaduje restart)
+
+
+ SIM slot pro typ mobilní sítě
+ Definuje SIM slot, na který se vztahuje dlaždice změny režimu mobilní sítě (%s)
+ SIM slot 1
+ SIM slot 2
+
+
+ Nikdy
+ Vždy aktivní
+ Jen během rozšířené plochy
+ V případě, že režim rozšířené plochy skryje navigační lištu
+
+
+ Nevybarvovat stock ikonu baterie
+ Použít v případě, pokud byla stock ikona baterie nahrazena jinou (např. použitím externího modu baterie)
+
+
+ Odpojení napájení zapne obrazovku
+ Pokud aktivní, obrazovka se zapne automaticky po připojení / odpojení usb kabelu (vyžaduje restart)
+
+
+ Vypnout zvuky nastavení hlasitocti
+ Vypne zvuky, které se přehrávají během změny hlasitosti tlačítky pro nastavení hlasitosti
+
+
+ Vibrace volání
+ Při navázání hovoru
+ Při ukončení hovoru
+ Při čekajícím hovoru
+ Každou 45. sekundu v minutě při odchozím hovoru
+
+
+ Uspořádání dlaždic
+ Umožňuje uspořádat dlaždice podle potřeby
+
+
+ Blokátor probíhajících notifikací
+ Umožňuje blokování vybraných probíhajících notifikací
+ Seznam se aktualizuje automaticky při vzniku každé nové probíhající notifikace.
+ Následně se můžete rozhodnout, které notifikace blokovat při jejich dalším vzniku.
+ Resetovat seznam
+ Skutečně resetovat seznam?
+ Všechny záznamy budou vymazány a zároveň budou všechny blokované notifikace odblokovány.
+
+
+ Rychlé odemknutí
+ Odemknout automaticky po zadání správného PIN/hesla, bez potřeby stisku ENTER
+
+
+ Vypnuto
+ Standardní zobrazení
+ Malými písmeny
+ Velkými písmeny
+
+
+ Povolit stažení stavové lišty
+ Výchozí nastavení
+ Pokud je obrazovka uzamčení nezabezpečená
+ Nikdy
+
+
+ Monitor datového toku
+ Zapnout sledování
+ Zobrazí monitor datového toku automaticky, pokud je aktivní datové spojení
+ Pozice
+ Auto (uprostřed nebo vpravo, na základě aktuální pozice hodin)
+ Vlevo
+ Vpravo
+ Velikost
+ Normální
+ Menší
+ Nejmenší
+
+
+ Vypnout limit widgetů
+ Umožní neomezený počet widgetů obrazovky uzamčení
+
+
+
+ %1$s volných
+
+ %1$s využitých
+ RAM lišta v seznamu spuštěných aplikací
+ Vypnuta
+ Zobrazit nahoře
+ Zobrazit dole
+
+
+ Ťuknutí na tlačítko seznamu aplikací
+ Dlouhé podržení tlačítka seznamu aplikací
+
+
+ Obloukový indikátor stavu baterie
+ Zobrazí oblouk po obvodu odemykacího prstence, reprezentující stav baterie
+
+
+ Zapnout/vypnout světlo
+
+
+ Ovládání světla tlačítkem Domů
+ Zapne/vypne světlo dlouhým podržením tlačítka Domů na obrazovce uzamčení.
+ Pokud zařízení nemá nativní podporu probuzení tlačítkem Domů, obrazovka musí být během přepínání zapnutá.
+
+
+ Rozšířit automaticky
+
+
+ Tlačítko Menu
+ Tlačítko Domov
+ Tlačítko Zpět
+ Tlačítko Spuštěné aplikace
+ Tlačítka ovládání hlasitosti
+ Další nastavení
+ Akce na dlouhé podržení
+ Akce na ťuknutí
+ Akce na dvojité ťuknutí
+
+
+ Vypnout dvojité ťuknutí
+
+
+ Režim vybarvování signálu
+ Použít GravityBox ikony (s podporou úrovně signálu)
+ Použít originál ikony (bez podpory úrovně signálu)
+ Nevybarvovat
+
+
+ Spouštěč aplikací
+ Dialog s aplikacemi, který může být aktivován na akcii tlačítka, nebo přes dodatečné tlačítko navigační lišty, nebo z koláče
+ Aplikace %d
+ Nejsou přiřazeny žádné aplikace. Použijte GravityBox / Spouštěč aplikací pro přiřazení aplikací.
+
+
+ Tlačítko spouštěče aplikací
+
+
+ Zobrazit spouštěč aplikací
+
+
+ Volitelné tlačítko
+ Vypnuto
+ Hledat
+ Spouštěč aplikací
+
+
+ Barvy koláče
+ Barva pozadí
+ Barva ikon
+ Barva okraje
+ Barva aktivního tlačítka
+ Barva textu
+ Resetovat barvy
+
+
+ Povolit foto neznámého čísla
+ Nastavit foto neznámého čísla
+ Foto nastaveno
+ Foto nebylo nastaveno
+
+
+ Vaše obrazovka nemusí podporovat hodnoty jasu nižší než 20. Pokud se obrazovka nerozsvítí,
+ držte tlačítko Hlasitost+ po dobu 7 sekund pro rozsvícení obrazovky. Následně změňte nastavení minimálního jasu na vyšší hodnotu.
+
+
+ Plná délka posuvníků
+ Umožní posuvníkům využít celou délku panelu nastavení hlasitosti
+
+
+ Obecné
+ Navigační tlačítka
+ Barvy
+ Rozměry
+
+
+ Povolit barvy
+ Může vyžadovat restart po deaktivaci
+ Barva tlačítek
+ Efekt tlačítek
+ Barva pozadí lišty
+
+
+ Vypnout zatmavení
+ Vypne zatmavení obrazovky uzamčení
+
+
+ Režim průhlednosti
+ Vyžaduje restart
+ Vypnutý
+ Stavový řádek
+ Navigační lišta
+ Stavový řádek i navigační lišta
+
+
+ Barva sekundárního signálu
+ Nahradí původní oranžovou verzi ikony signálu
+ Sekundární indikátor datové aktivity
+ Nastaví barvu pro sekundární indikátor datové aktivity
+
+
+ Styl stavových ikon
+ Platí pro stavové ikony jako ikona vypnutého vyzvánění, vibrace, budíku, atd.
+ JellyBean
+ KitKat
+
+
+ Dvojité klepnutí na Zpět
+
+
+ Domů
+ Zpět
+
+
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index 3ce9da8c62..dec6a7cbc3 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -123,8 +123,8 @@
Giv mig et bidrag hvis du synes denne app er det værd! Overvej også bidrag til rovo89 for hans fremragende Xposed framework.
- Din telefon vil genstarte
- Din telefon vil genstarte i systemgendannelsestilstand
+ Din %s vil genstarte.
+ Din %s vil genstarte i systemgendannelsestilstand.Billedrørsskærms-slukkeeffekt
@@ -171,16 +171,15 @@
Minimumsniveau for lysstyrkeMuliggør angivelse af minimumsniveau for lysstyrke. Påvirker manuel lysstyrke-indstilling. (kræver genstart)
- Værdi i intervallet: 10 – 80Niveauer for automatisk lysstyrkeTillader at indstille omgivelses-lysniveau og tilhørende værdier for LCD-baggrundslysNiveauLux maks.
- Lysstyrke (10 – 255)
+ Lysstyrke (%d – 255)Angivet tal er ugyldigt
- Det anbefales ikke at sætte lysstyrke til under 10
+ Det anbefales ikke at sætte lysstyrke til under %dLysstyrke kan højst være 255Værdier kan ikke være mindre end nulVærdier for lavere niveauer kan ikke være større end værdier for højere niveauer
@@ -223,9 +222,9 @@
Funktioner for hardware-tasterValg af funktion for hardware-taster
- Menutast langt-tryk funktion
- Menutast dobbelt-tap funktion
- Tilbagetast langt-tryk funktion
+ Menutast langt-tryk funktion
+ Menutast dobbelt-tap funktion
+ Tilbagetast langt-tryk funktionStandardSøgningStemmestyret søgning
@@ -236,7 +235,7 @@
Påvirker afslut forgrunds-app funktionen. Definerer hvor længe tasten skat holdes for at udløse afslutningDobbelt-tap hastighedPåvirker dobbelt-tap af menutasten. Definer hvor hurtigt tasten skal tappes for at udløse dobbelt-tap
- App afsluttet
+ %s afsluttetIntet at afslutteIngen forrige app fundet
@@ -262,4 +261,7 @@
Sort baggrundBenyt sort baggrund for standard Holo systemtema i stedet for gråtoneskala (kræver genstart)
-
\ No newline at end of file
+
+ telefon
+
+
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
new file mode 100644
index 0000000000..c3fc94876c
--- /dev/null
+++ b/res/values-de/strings.xml
@@ -0,0 +1,775 @@
+
+
+
+ GravityBox
+
+ Akkuanzeige-Stil
+ Standard Akkuanzeige
+ Runde Akkuanzeige
+ Runde Akkuanzeige mit Prozentwert
+ KitKat Akkuanzeige
+ KitKat Akkuanzeige mit Prozentwert
+ Nur Prozentwert
+ Keine Anzeige
+
+ Lautstärketasten überspringen Musiktitel
+ Überspringe Musiktitel durch langes drücken der Lautstärketasten, während der Bildschirm abgeschaltet ist
+
+ Warnung bei niedrigem Akkustand
+ Benachrichtigung und Warnton
+ Nur Benachrichtigung
+ Nur Warnton
+ Aus
+
+ Änderungen werden nach einem Neustart übernommen
+
+ Empfangsanzeige automatisch verstecken
+ Empfangsanzeige für ausgewählte Sim Karte verstecken, wenn diese nicht eingelegt ist, deaktiviert \"Steckplatz 2: Keine SIM-Karte erkannt\" Benachrichtigungen
+ Empfangsanzeige von SIM1 automatisch verstecken
+ Empfangsanzeige von SIM2 automatisch verstecken
+ Deaktiviere Benachrichtigungen
+ \"Keine SIM-Karte erkannt\" Benachrichtigungen deaktiviert
+
+ Erweitertes Neustart-Menü
+ Aktiviert erweitertes Neustart-Menü mit der Option direkt die Recovery zu starten
+ Recovery
+ Bootloader
+
+ Cursor mittels Lautstärketasten bewegen
+ Den Cursor mit den Lautstärketasten in Textfeldern steuern
+ Deaktiviert
+ Lautstärke lauter/leiser bewegen den Cursor nach links/rechts
+ Lautstärke lauter/leiser bewegen den Cursor nach rechts/links
+
+ Alle zuletzt geöffneten Anwendungen schließen
+
+ \'Datum & Uhrzeit\' Einstellungsabsturz beheben
+ Aktivieren, falls Abstürze beim Aufrufen des \'Datum & Uhrzeit\' Einstellungsmenüs auftreten (Neustart erforderlich)
+
+ Anrufer-ID für Anrufe beheben
+ Aktivieren, falls der Kontaktname bei einem eingehenden Anruf nicht angezeigt wird (Neustart erforderlich)
+ Nach dem Neustart sollten alle Kontakte gelöscht und neu hinzugefügt werden, damit die Änderung wirksam wird! Benutze dafür Einstellungen > Anwendungen (Apps) > Alle, um die Daten vom Contacts Provider zu löschen.
+
+ Anrufer-ID für Nachrichten beheben
+ Aktivieren, falls Nachrichten von einem Kontakt geteilt und nicht in einem Nachrichtenverlauf angezeigt werden (Neustart erforderlich)
+ Nach dem Neustart sollten alle geteilten Nachrichtenverläufe gelöscht werden, damit die Änderung wirksam wird!
+
+ Probleme mit Kalender-App beheben
+ Aktivieren, falls sich der Bildschirm sporadisch selbsttätig aktiviert (Neustart erforderlich)
+
+ Wichtig
+
+ Foto des Anrufers im Vollbildmodus anzeigen
+ Zeigt das Foto des Anrufers im Vollbildmodus an
+
+
+ Sync an
+ Sync aus
+ Hotspot an
+ Hotspot aus
+ Lampe an
+ Lampe aus
+ Drücken, um Lampe auszuschalten
+ Wiedergabe…
+ Aufnahme…
+ Aufgenommen
+ Lange drücken zum Aufnehmen
+ Drücken, um Aufnahme zu stoppen
+ Deaktiviert
+ Normal
+ Erweitert
+ Wachhalten an
+ Wachhalten aus
+ WLAN
+ WLAN aus
+ Getrennt
+ Aktiviere…
+
+
+ Schnelleinstellungs-Verknüpfungen in der Statusleiste
+ Erlaubt es, Schnelleinstellungs-Verknüpfungen in der Statusleiste anzuzeigen oder zu verstecken
+ Benutzerprofil
+ Flugmodus
+ Akku
+ WLAN
+ WLAN (CM-Stil)
+ Bluetooth
+ GPS
+ GPS (CM-Stil)
+ Mobile Daten
+ Netzmodus
+ Mobiler Datenverkehr
+ Audioprofile
+ Helligkeit
+ Bildschirmabschaltung
+ Autorotation
+ Synchronisation
+ WLAN-Hotspot
+ Taschenlampe
+ GravityBox
+ Schlafmodus
+ Aufnahme
+ Einstellungen
+ Lautstärke
+ Erweiterter Desktop
+ Wachhalten
+ Screenshot
+
+
+ Farbwähler
+ Zur Bestätigung auf Farbfeld drücken
+
+
+ Hintergrundfarbe der Statusleiste
+ Erlaubt es, die Hintergrundfarbe der Statusleiste zu ändern
+
+
+ Behebt Spracheingabe-Einstellungen
+ Schaltet \'Sprachsuche\' und \'Text-in-Sprache-Ausgabe\' im \'Sprache & Eingabe\'-Einstellungsmenü frei (Neustart erforderlich)
+
+
+ Erweiterte Entwickler-Optionen
+ Schaltet erweiterte Entwickler-Optionen frei (Neustart erforderlich)
+
+
+ Statusleiste optimieren
+ Beinhaltet Optionen, um die Statusleiste anzupassen
+ Diverses optimieren
+ Beinhaltet alle Optionen, die in keine spezielle Kategorie passen
+ Allgemeine Einstellungen
+ Beinhaltet allgemeine Einstellungen, die Fehler auf der MTK6589-Plattform beheben. Nur benutzen, falls notwendig!
+
+
+ Über
+ Programmiert von C3C076@XDA. Berühren, um den offiziellen Foreneintrag zu öffnen.
+ Xposed Framework
+ Programmiert von rovo89@XDA. Berühren, um den offiziellen Foreneintrag zu öffnen.
+ Spenden
+ Berühren, um die Entwicklung zu unterstützen, indem Sie per PayPal spenden
+
+
+ %s wird neu gestartet.
+ %s startet in die Recovery.
+ %s startet in den Bootloader.
+
+
+ Röhrenmonitor-Effekt beim Ausschalten des Bildschirms
+ Aktiviert eine Animation, die das Ausschalten eines Röhrenmonitors simuliert, sobald der Bildschirm ausgeschaltet wird
+
+
+ Engineering-Modus
+ Startet die Engineering-Modus Anwendung
+
+
+ Dual-SIM Lautstärke
+ Startet eine Anwendung, die es erlaubt, für die beiden SIM-Karten unterschiedliche Rufton- und Benachrichtigungslautstärken einzustellen
+
+
+ Sperrbildschirm optimieren
+ Beinhaltet Optionen, um den Sperrbildschirm anzupassen
+ Sperrbildschirm-Hintergrund
+ Hintergrund-Stil
+ Standard-Hintergrundbild
+ Benutzerdefinierte Farbe
+ Eigenes Bild
+ Benutzerdefinierte Farbe wählen
+ Erlaubt es, eine benutzerdefinierte Hintergrundfarbe für den Sperrbildschirm zu wählen
+ Benutzerdefiniertes Hintergrundbild wählen
+ Erlaubt es, ein benutzerdefiniertes Hintergrundbild für den Sperrbildschirm zu wählen
+ Hintergrund geändert
+ Hintergrund nicht geändert
+ Sonstiges
+ Widgets maximieren
+ Wenn aktiviert, werden Widgets auf dem Sperrbildschirm maximiert
+
+
+ Ausschaltmenü optimieren
+ Beinhaltet energiebezogene Optionen, um das Ausschaltmenü anzupassen
+
+
+ Deaktiviere blinkende LED
+ Deaktivert aufdringlich blinkende LED, wenn der Akkustatus niedrig ist und nicht geladen wird.
+
+
+ Bildschirm optimieren
+ Beinhaltet Optionen, um den Bildschirm anzupassen
+
+
+ Minimale Helligkeitsstufe
+ Erlaubt es, die minimale Helligkeitsstufe zu ändern. Wirkt sich auf die manuelle Helligkeitseinstellung aus. (Neustart erforderlich)
+
+
+ Automatische Helligkeitsstufen
+ Erlaubt es, für eine bestimmte Umgebungshelligkeit die Bildschirmhelligkeit zu bestimmen
+ Helligkeitsstufe
+ Lux max
+ Helligkeit (%d – 255)
+ Eingegebener Wert ist ungültig
+ Es wird nicht empfohlen, die Helligkeitsstufe unter %d einzustellen
+ Die Helligkeitsstufe kann nicht höher als 255 eingestellt werden
+ Werte können nicht 0 oder kleiner sein
+ Werte in niedrigeren Helligkeitsstufen können nicht größer sein, als Werte in höheren Helligkeitsstufen
+ Werte in höheren Helligkeitsstufen können nicht niedriger sein, als Werte in niedrigeren Helligkeitsstufen
+ Werte für %s gesetzt
+ Neue automatische Helligkeitsregelung gespeichert
+ Neue automatische Helligkeitsregelung nicht gespeichert
+ Übernehmen
+
+
+ Aktiviere Sperrbildschirm-Rotation
+ Achtung: Möglicherweise werden die Entsperr-Ring-Apps getauscht, wenn der AOSP-Sperrbildschirm vom Hersteller verändert wurde
+
+
+ Aktiviere Menü-Taste
+ Wenn aktiviert, kann die Menü-Taste zum schnellen Entsperren genutzt werden. (Neustart erforderlich)
+
+
+ Behebt aufwachen durch Nachrichten
+ Hindert den Bildschirm daran sich anzuschalten, wenn eine Nachricht eintrifft (Neustart erforderlich)
+
+
+ Uhrzeit in der Mitte
+
+
+ Medien optimieren
+ Beinhaltet Optionen, um Medien- und Audio-Einstellungen anzupassen
+
+
+ Mehr Lautstärkestufen für Musiklautstärke
+ Fügt weitere Lautstärkestufen für Musik-Wiedergabe hinzu (Neustart erforderlich)
+
+
+ Kopfhörer-Lautstärke begrenzen
+ Aktiviert oder deaktiviert die Lautstärkebegrenzung bei Kopfhörern
+
+
+ Deaktiviere die Lade-LED
+ Deaktiviert die LED während der Akku geladen wird
+
+
+ Tastenbelegung optimieren
+ Erlaubt es, die Hardwaretasten benutzerdefiniert zu belegen
+ Aktion bei langem Drücken der Menü-Taste
+ Aktion beim zweifach Drücken der Menü-Taste
+ Aktion bei langem Drücken der Zurück-Taste
+ Standard
+ Suche
+ Sprachsuche
+ Zu vorheriger App wechseln
+ Geöffnete App beenden
+ Bildschirm ausschalten
+ Zeit bis App beendet wird
+ Stellt ein, wie lange eine Taste gedrückt werden muss, bis die geöffnete App geschlossen wird
+ Doppelklick Geschwindigkeit
+ Legt fest, wie schnell eine Taste hintereinander gedrückt werden muss, damit es als zweifaches Drücken gewertet wird.
+ %s beendet
+ Nichts zu beenden
+ Keine vorherige App gefunden
+
+
+ Anrufe optimieren
+ Beinhaltet Anruf-bezogene Optionen
+
+
+ Umdreh-Aktion während des Klingelns
+ Erlaubt es einzustellen, welche Aktion durchgeführt wird, wenn das Telefon bei einem eingehenden Anruf umgedreht wird (Bildschirm nach unten)
+ Keine Aktion ausführen
+ Auf Lautlos stellen
+ Anruf ablehnen
+
+
+ Sanfter Neustart
+
+
+ Schwarzer Hintergrund
+ Benutze einen schwarzen Hintergrund für das Holo-System-Theme, anstelle des Schwarz-Grau Verlaufs (Neustart erforderlich)
+
+
+ Verknüpfungen pro Reihe
+ Legt fest, wie viele Schnelleinstellungs-Verknüpfungen in einer Reihe angezeigt werden sollen. Die Verknüpfungen werden in der Größe angepasst. Betrifft den Portrait-Modus (Hochformat).
+
+
+ Zeige den Wochentag an
+
+
+ Erweiterbare Lautstärke Anzeige
+ Aktiviert eine erweiterbare Lautstärke Anzeige, die es ermöglicht, unterschiedliche Lautstärkestufen für die verschiedenen Quellen einzustellen (Benachrichtigungen, Anrufton)
+
+
+ Verbinde Anruf & Benachrichtigungs Lautstärke
+ Wenn deaktiviert, lassen sich die Lautstärkestufen für Anrufe und Benachrichtigungen separat einstellen
+
+
+ Automatisch zu Schnelleinstellungen wechseln
+ Schnelleinstellungen werden automatisch angezeigt, wenn die Benachrichtigungsleiste herunter gezogen wird und keine Benachrichtigungen vorliegen
+
+
+ Schnelleinstellungen herunterziehen
+ Wird die Statusbar an der Ecke heruntergezogen, werden die Schnelleinstellungen automatisch angezeigt
+ Aus
+ Rechts
+ Links
+
+
+ Deaktiviert aufwachen durch Lautstärketasten
+ Für Geräte (z.B. Jiayu G3s, G4), bei denen die Lautstärketasten den Bildschirm anschalten
+
+
+ Farbe der Statusleiste
+
+
+ Aktiviere farbige Symbole
+
+
+ Farbe der Statusleisten-Symbole
+ Wähle Farbe für die Symbole und die Uhr in der Statusleiste
+
+
+ Farbe für Aktivität der Datenverbindung
+ Wählt die Farbe für die Aktivität der Datenverbindung
+
+
+ Schnelleinstellungen optimieren
+
+
+ Stil der Benachrichtigungsleiste
+
+
+ Hintergrund der Benachrichtigungsleiste
+ Standard-Hintergrund
+ Benutzerdefinierte Farbe
+ Benutzerdefiniertes Bild
+ Wähle Hintergrundfarbe
+ Wähle Portrait-Bild (Hochformat)
+ Wähle Landscape-Bild (Querformat)
+ Hintergrund-Transparenz
+ Hintergrund-Modus
+ über Benachrichtigungen
+ unter Benachrichtigungen
+
+
+ Deaktiviere Roaming-Symbole
+ Wenn deaktiviert, wird das \'R\'-Symbol während des Roamings nicht angezeigt. Mit Vorsicht benutzen!
+
+
+ Lädt (%d%%)
+ Aufgeladen
+ %d%% verbleibend
+
+
+ Kein Netz
+ Flugmodus
+ Nur Notrufe
+
+
+ Pie-Steuerung
+ Aktiviere Pie-Steuerung
+ Größe der Navigationstasten
+ Auslöse-Positionen
+ linker Bildschirmrand
+ unterer Bildschirmrand
+ rechter Bildschirmrand
+ oberer Bildschirmrand
+
+
+ Tasten-Hintergrundbeleuchtung
+ Standard
+ Deaktiviere Tasten-Hintergrundbeleuchtung
+ Aktiv, wenn der Bildschirm eingeschaltet ist
+ Aktiv, wenn Benachrichtigungen vorliegen
+ EXPERIMENTELL! Blinkt, wenn eine Benachrichtigung vorliegt (als Alternative für Geräte ohne Benachrichtigungs-LED). Erhöht Akkuverbrauch!
+
+
+ Verstecke Navigationsleiste
+ Versteckt die Navigationsleiste, wenn Pie-Steuerung aktiviert ist (Für Geräte, die eine Navigationsleiste haben. Neustart erforderlich.)
+
+
+ Geditherter Holo-Hintergrund
+ Ersetzt den Standard Holo-Hintergrund mit einem geditherten, um Farbstreifenbildung zu minimieren (Neustart erforderlich)
+
+
+ Deaktiviert Navigationstasten
+ Deaktiviert einfachen Tastenklick, während Pie Controls aktiviert sind
+
+
+ Verwende dunkles Holo-Theme
+ Ändert das GravityBox-UI auf ein dunkles Holo-Theme
+
+
+ Aus
+ Oben links
+ Oben rechts
+ Unten links
+ Unten rechts
+
+
+ Oberen Rand einstellen
+
+
+ Deaktiviere Roaming-Warnungen
+ Deaktiviert Warnmeldungen, wenn während des Roamings eine Nachricht gesendet oder ein Anruf getätigt wird
+
+
+ Suche
+ (Keine)
+
+
+ Schnelleinstellungen
+ Schnelleinstellungs-Verknüpfungen anpassen
+ Hauptanwendung
+ App 1 lange drücken
+ App 2 lange drücken
+ App 3 lange drücken
+ App 4 lange drücken
+
+
+ GPS an
+ GPS aus
+ GPS fixiert
+
+
+ Menü Button immer anzeigen
+
+
+ Klingelmodus
+
+
+ Uhr einstellen
+
+
+ Verstecke AM/PM
+
+
+ Verstecke Uhr
+
+
+ Auslösungsgröße
+
+
+ Transparenz Einstellungen
+ Regelt die Transparenz der Status- und Navigationsleiste
+ Statusleisten Transparenz für den Launcher
+ Statusleisten Transparenz für den Sperrbildschirm
+ Transparenz für den Launcher
+ Transparenz für den Sperrbildschirm
+
+
+ Verstecke Wecker Icon
+
+
+ Bildschirm-Abdunkelstärke
+ Wie stark der Bildschirm abgedunkelt wird bevor er sich ausschaltet (Neustart erforderlich)
+
+
+ Telefon
+ Tablet
+
+
+ Helligkeitseinstellungen
+ Aktiviere Helligkeitseinstellungen
+ Nur anwenden, falls Ihr Gerät standardmäßig Helligkeitsfunktionalitäten unterstützt. Bei auftretenden Problemen bitte wieder deaktivieren. (Neustart erforderlich)
+
+
+ Zuletzt verwendete Apps anzeigen
+
+
+ Aktion bei langem Druck auf die Home-Taste
+
+
+ Starte benutzerdefinierte App 1
+ Benutzerdefinierte App 1 konfigurieren
+ Starte benutzerdefinierte App 2
+ Benutzerdefinierte App 2 konfigurieren
+ Keine benutzerdefinierte App zugewiesen!
+ Benutzerdefinierte App wurde nicht gefunden!
+
+
+ Uhr in Benachrichtigungsleiste
+ Verknüpft die Uhr in der Benachrichtigungsleiste mit einer festgelegten App, statt dem Einstellungsmenü \'Datum & Uhrzeit\'
+
+
+ Warte auf Antwort vom GravityBox System Framework…
+ GravityBox System Framework antwortet nicht. Verlassen.
+
+
+ Nationales Daten-Roaming
+ Beim nationalen Roaming mit Datendiensten verbinden
+
+
+ Erweiterter Desktop-Modus
+ Deaktiviert
+ Verstecke Statusleiste
+ Verstecke Navigationsleiste
+ Verstecke beide
+ Erweiterter Desktop
+ Erweiterter Desktop ist AN
+ Erweiterter Desktop ist AUS
+
+
+ Screenshot
+
+
+ Menü anzeigen
+
+
+ Auf erweiterten Desktop umschalten
+ Erweiterter Desktop-Modus ist deaktiviert!
+
+
+ Navigationsleiste optimieren
+ Beinhaltet Optionen, um die Navigationsleiste anzupassen
+ Überschreibt System-Standardeinstellungen
+ Hauptschalter für Optimierungen der Navigationsleiste (Neustart erforderlich)
+ Navigationsleiste aktivieren
+ Neustart erforderlich
+ Höhe der Navigationsleiste
+ Applies to horizontal navigation bar and portrait orientation
+ Applies to horizontal navigation bar and landscape orientation
+ Breite der Navigationsleiste
+ Applies to vertical navigation bar
+ Menü-Taste immer anzeigen
+
+
+ Screenshot im Ausschaltmenü
+
+
+ Entsperr-Ring Einstellungen
+ Enable unlock ring targets
+ Master switch for unlock ring targets
+ Target application %s
+ Unlock ring vertical offset
+ Unlock ring horizontal offset
+
+
+ Helligkeitsregelung aktivieren
+ Einstellen der Helligkeit durch Wischen über die Statusleiste
+
+
+ Telefonie
+ Nachrichten
+ Mobile Daten
+
+
+ Strip Unicode
+ Konvertiert Unicode-Zeichen in normale Zeichen. Reduziert die gesamte Nachrichtengröße.
+ Leave characters intact
+ Strip non-encodable characters
+ Strip all unicode characters
+
+
+ Deaktiviere 2G Daten-Warnung
+ Warnung bei langsamer Datengeschwindigkeit im 2G-Modus deaktivieren
+
+
+ Follow stock battery color
+ Makes statusbar clock, percentage and circle battery use the color of stock battery icon. Applies when icon coloring is off.
+
+
+ Netzmodus-Kachel anpassen
+ 2G/2G+3G/3G/(LTE)
+ 2G/2G+3G/(LTE)
+ 2G/3G/(LTE)
+
+
+ Alle Bildschirmausrichtungen erlauben
+
+
+ Überschreibt Standard-Kachelverhalten
+ Überschreibt das Verhalten ausgewählter Kacheln beim Drücken/langen Drücken (Neustart erforderlich)
+
+
+ Netzmodus-Kachel SIM-Steckplatz
+ Definiert SIM-Steckplatz, den die Netzmodus-Kachel verwendet (%s)
+ SIM-Steckplatz 1
+ SIM-Steckplatz 2
+
+
+ Nie
+ Immer
+ Wenn erweiterter Desktop aktiviert ist
+ Wenn erweiterter Desktop die Navigationsleiste versteckt
+
+
+ Standard Batterie-Symbol beibehalten
+ Verwenden, falls das Standard Batterie-Symbol durch eine Drittanwendung ersetzt wurde
+
+
+ Kabelverbindung schaltet den Bildschirm an
+ Bei Aktivierung schaltet sich der Bildschirm an, sobald man ein Kabel (USB/Strom/Sonstiges) verbindet oder trennt (Neustart erforderlich)
+
+
+ Signaltöne der Lautstärketasten stummschalten
+ Schaltet Signaltöne bei der Benutzung der Lautstärketasten stumm
+
+
+ Anruf-Vibrationen
+ Anruf verbunden
+ Anruf getrennt
+ Anruf wartend
+ Alle 45 Sekunden bei ausgehendem Anruf
+
+
+ Kachelanordnung ändern
+ Erlaubt die Neuanordnung der Schnelleinstellungs-Kacheln
+
+
+ Fortlaufende Benachrichtigungen blocken
+ Erlaubt es, fortlaufende Benachrichtigungen selektiv zu blockieren
+ Jede fortlaufende Benachrichtigung wird automatisch in die Liste eingetragen. Du kannst dann entscheiden, ob du die fortlaufende Benachrichtigung beim nächsten Erscheinen blockierst. Mit Vorsicht verwenden.
+ Liste zurücksetzen
+ Wollen Sie die Liste wirklich zurücksetzen? Löscht die aktuelle Liste und gibt alle Benachrichtigungen frei, die zuvor blockiert wurden.
+ (Liste ist leer)
+
+
+ Schnelle Entsperrung
+ Automatische Entsperrung, sobald die korrekte PIN/Passwort eingegeben wurde
+
+
+ Deaktiviert
+ Standard
+ Kleine Schrift
+ Große Schrift
+
+
+ Regeln für Statusleistensperre
+ Standard
+ Freigegeben bei ungesicherter Display-Sperre
+ Gesperrt
+
+
+ Datenverbrauchsanzeige
+ Überwachung aktivieren
+ Blendet automatisch die Datenverbrauchsanzeige ein, sobald die Datenverbindung aktiv ist
+ Position
+ Auto (Zentriert oder rechts, abhängig von der Uhrposition)
+ Links
+ Rechts
+ Größe
+ Normal
+ Kleiner
+ Sehr klein
+ B
+ KB
+ MB
+ s
+
+
+ Widget-Beschränkung aufheben
+ Erlaubt es, eine unbeschränkte Anzahl an Sperrbildschirm-Widgets einzurichten
+
+
+
+ %1$s frei
+
+ %1$s verwendet
+ Recent tasks RAM bar
+ Aus
+ Oben
+ Unten
+
+
+ Recents key single-tap action
+ Recents key long-press action
+
+
+ Zeige Akku-Bogen
+ Zeigt einen Akkustatus-Bogen, der um den Entsperr-Ring angeordnet ist
+
+
+ Toggle torch
+
+
+ Taschenlampe bei langem Druck auf die Home-Taste
+ Schaltet Taschenlampe An/Aus während das Gerät gesperrt ist. Screen has to be turned on if device lacks native wake by home key support.
+
+
+ Automatisches expandieren
+
+
+ Menü-Taste
+ Home-Taste
+ Zurück-Taste
+ Recents key
+ Lautstärketasten
+ Andere Einstellungen
+ Aktion bei langem Druck
+ Aktion beim Einzelklick
+ Aktion beim Doppelklick
+
+
+ Doppelklick deaktivieren
+
+
+ Signal color mode
+ Use GravityBox icons (with signal level support)
+ Use stock icons (without signal level support)
+ Farbe nicht anwenden
+
+
+ App-Launcher
+ Dialog allowing to define up to 8 apps which can be assigned as HW Key Action or used as additional navigation bar key
+ Application slot %d
+ Keine Apps zugeordnet. GravityBox / App-Launcher-Menü verwenden, um Apps zuzuordnen.
+
+
+ Zeige App-Launcher-Taste
+
+
+ Zeige App-Launcher
+
+
+ Zeige benutzerdefinierte Taste
+ Deaktiviert
+ Suchen
+ App-Launcher
+
+
+ Pie-Farben
+ Hintergrundfarbe
+ Vordergrundfarbe
+ Konturfarbe
+ Key selected color
+ Textfarbe
+ Farben zurücksetzen
+
+
+ Aktiviere Bild unbekannter Anrufer
+ Bild unbekannter Anrufer einstellen
+ Bild geändert
+ Bild nicht geändert
+
+
+ Ihr Bildschirm unterstützt möglicherweise keine Werte, die kleiner als 20 sind. Falls Ihr Bildschirm nicht aufleuchtet, halten Sie die Lautstärke+ Taste für wenigstens 7 Sekunden gedrückt, um die Helligkeit zurückzusetzen. Anschließend können Sie minimale Helligkeit einstellen, um höhere Werte zu verwenden.
+
+
+ Allgemein
+ Navigationstasten
+ Farben
+ Abmessungen
+
+
+ Aktiviere farbige Navigationsleiste
+ Erfordert nach Deaktivierung eventuell einen Neustart
+ Farbe der Navigationstaste
+ Leuchtfarbe der Navigationstaste
+ Hintergrundfarbe der Navigationsleiste
+
+
+ Deaktiviert Sperrbildschirm-Schattierung
+ Entfernt dunkle Tönung vom Sperrbildschirm
+
+
+ Transparenz-Manager-Modus
+ Erfordert Neustart
+ Deaktiviert
+ Statusleiste
+ Navigationsleiste
+ Beide
+
+
+ Secondary signal color
+ Overrides stock orange signal icon
+ Secondary data activity color
+ Sets color for secondary data activity indicators
+
+
\ No newline at end of file
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
new file mode 100644
index 0000000000..41c24f051e
--- /dev/null
+++ b/res/values-el/strings.xml
@@ -0,0 +1,723 @@
+
+
+
+
+
+ GravityBox
+
+ Τρόπος ένδειξης μπαταρίας
+ Εργοστασιακή ένδειξη μπαταρίας
+ Κυκλική μπαταρία
+ Κυκλική μπαταρία με ποσοστό
+ Νούμερο ποσοστού μπαταρίας
+ Καθόλου
+
+ Πλήκτρα έντασης για μεταπήδηση μουσικού κομματιού
+ Μεταπήδηση μουσικών κομματιών με παρατεταμένο πάτημα των πλήκτρων έντασης με σβηστή οθόνη
+
+ Προειδοποίηση χαμηλής στάθμης μπαταρίας
+ Αναδυόμενο παράθυρο και ήχος
+ Αναδυόμενο παράθυρο μόνο
+ Ήχος μόνο
+ Απενεργοποιημένη
+
+ Οι αλλαγές θα εφαρμοστούν μετά από επανεκκίνηση
+
+ Αυτόματη απόκρυψη προειδοποιητικών εικονιδίων
+ Αποκρύπτει αυτόματα προειδοποιητικά εικονίδια για τις θέσεις των καρτών SIM όταν κάποια κάρτα SIM δεν έχει εισαχθεί, απενεργοποιεί ειδοποιήσεις \"Δεν έχει εισαχθεί κάρτα SIM\"
+ Αυτόματη απόκρυψη θέσης SIM 1
+ Αυτόματη απόκρυψη θέσης SIM 2
+ Απενεργοποίηση ειδοποιήσεων
+ \"Δεν έχει εισαχθεί κάρτα SIM\" ειδοποιήσεις απενεργοποιήθηκαν
+
+ Μενού επανεκκίνησης για προχωρημένους
+ Ενεργοποιεί το μενού επανεκκίνησης για προχωρημένους με επιλογές για επανεκκίνιση σε recovery
+ Recovery
+ Bootloader
+
+ έλεγχος κέρσορα πλήκτρου έντασης
+ Ελέγχει τον κέρσορα χρησιμοποιώντας τα πλήκτρα έντασης σε πεδία κειμένου
+ Απενεργοποιημένο
+ Πλήκτρο έντασης Πάνω/Κάτω μετακινεί τον κέρσορα Αριστερά/Δεξιά
+ Πλήκτρο έντασης Πάνω/Κάτω μετακινεί τον κέρσορα Δεξιά/Αριστερά
+
+ Εκκαθάριση όλων των πρόσφατων εργασιών
+
+ Επιδιόρθωση ημερομηνίας&Οι ρυθμίσεις της ώρας καταρρίπτονται
+ Ενεργοποιήστε σε περίπτωση που παρατηρήσετε κατάρρευση κατά την πρόσβαση σε Ημερομηνία&Ρυθμίσεις Ώρας (απαιτείται επανεκκίνηση)
+
+ Επιδιόρθωση αναγνώρισης καλούντος για κλήση
+ Ενεργοποιήστε σε περίπτωση που η επαφή δεν συμπίπτει με την εισερχόμενη κλήση (απαιτείται επανεκκίνηση)
+ Μετά την επανεκκίνηση, θα πρέπει να καθαρίσετε και να προσθέσετε εκ νέου τις επαφές σας για την αλλαγή να τεθεί σε ισχύ! Χρησιμοποιήστε Ρυθμίσεις / Εφαρμογές / Όλες - για εκκαθάριση δεδομένων των Επαφών.
+
+ Επιδιόρθωση αναγνώρισης καλούντος για μηνύματα
+ Ενεργοποιήστε σε περίπτωση που παρατηρήσετε χωρισμένες συνομιλίες με την ίδια επαφή (απαιτείται επανεκκίνηση)
+ Μετά την επανεκκίνηση, πρέπει να διαγράψετε όλες τις χωρισμένες συνομιλίες για την αλλαγή να τεθεί σε ισχύ!
+
+ Επιδιόρθωση εφαρμογής ημερολογίου
+ Ενεργοποιήστε σε περίπτωση που παρατηρήσετε αυτόματη περιοδική ενεργοποίηση/απενεργοποίηση της οθόνης (απαιτείται επανεκκίνηση)
+
+ Σημαντικό
+
+ Εικόνα καλούντος σε πλήρη οθόνη
+ Εμφανίζει την εικόνα καλούντος σε πλήρη οθόνη κατά την κλήση
+
+
+ Συγρονισμός on
+ Συγρονισμός off
+ Wi-Fi AP on
+ Wi-Fi AP off
+ Φακός on
+ Φακός off
+ Αγίξτε για απενεργοποίηση
+ Αναπαραγωγή…
+ Καταγραφή…
+ Κατεγράφηκε
+ Παρατεταμένη πίεση για εγγραφή
+ Αγγίξτε για διακοπή εγγραφής
+ Απενεργοποιημένο
+ Κλασσικό
+ Διευρυμένο
+ Επαγρύπνηση ενεργοποιημένη
+ Επαγρύπνηση απενεργοποιημένη
+ Wi-Fi
+ Wi-Fi off
+ Δεν συνδέθηκε
+ Ενεργοποίηση...
+
+
+ Επιλογές QuickSettings στη Γραμμή Κατάστασης
+ Επιτρέπει την εμφάνιση ή απόκρυψη των QuickSettings στη Γραμμή Κατάστασης
+ Προφίλ χρήστη
+ Λειτουργία αεροπλάνου
+ Κατάσταση μπαταρίας
+ Wi-Fi
+ Wi-Fi (CM style)
+ Bluetooth
+ GPS
+ GPS (CM style)
+ Δεδομένα
+ Λειτουργία δικτύου
+ Χρήση δεδομένων
+ Προφίλ ήχου
+ Φωτεινότητα
+ Παύση οθόνης
+ Αυτόματη περιστροφή
+ Συγχρονισμός
+ Σημείο επαφής Wi-Fi
+ Φακός
+ GravityBox
+ Ύπνος
+ Γρήγορη Εγγραφή
+ Ρυθμίσεις
+ Ένταση
+ Διευρυμένη επιφάνεια εργασίας
+ Σε επαγρύπνηση
+ Εικόνα
+
+
+ Επιλογέας χρώματος
+ Πιέστε στο χρώμα για εφαρμογή
+
+
+ Χρώμα φόντου Γραμμής Κατάστασης
+ Επιτρέπει να ορίσετε το χρώμα φόντου της Γραμμής Κατάστασης και τη διαφάνεια
+
+
+ Επιδιόρθωση ρυθμίσεων ομιλίας
+ Ξεκλειδώνει τις ρυθμίσεις τη φωνητικής αναζήτησης και του κειμένου σε ομιλία στη Γλώσσα&Εισαγωγής (απαιτείται επανεκκίνηση)
+
+
+ Προχωρημένες επιλογές προγραμματιστή
+ Ξεκλειδώνει προχωρημένες επιλογές προγραμματιστή (απαιτείται επανεκκίνηση)
+
+
+ Βελτιώσεις της Γραμμής Κατάστασης
+ Περιέχει διάφορες βελτιώσεις της Γραμμής Κατάστασης
+ Διάφορες βελτιώσεις
+ Περιλαμβάνει όσες βελτιώσεις δεν ανήκουν σε συγκεκριμένη κατηγορία
+ Γενικές επιδιορθώσεις
+ Περιλαμβάνει συγκεκριμένες επιδιορθώσεις του MTK6589. Μόνο εάν είναι απαραίτητο.
+
+
+ Σχετικά
+ Coded by C3C076@XDA. Touch to visit official thread.
+ Xposed framework
+ Coded by rovo89@XDA. Touch to visit official thread.
+ Donate
+ Donate to me if you think this app is worth it! Also consider donating to rovo89 for his excellent Xposed framework.
+
+
+ Το %s θα επανεκκινήσει.
+ Το %s θα επανεκκινήσει σε recovery.
+ Το %s θα επανεκκινήσει σε bootloader.
+
+
+ CRT οθόνη off εφε
+ Ενεργοποιεί το γραφικό που προσομοιώνει παλιά CRT off εφε όταν σβήνει η οθόνη
+
+
+ Engineering mode
+ Ανοίγει την εφαρμογή Engineering mode
+
+
+ Dual SIM Ήχος κλήσης
+ Ανοίγει την εφαρμογή που επιτρέπει τον ορισμό ήχου κλήσης και ειδοποιήσεων ξεχωριστά για κάθε SIM
+
+
+ Βελτιώσεις κλειδώματος οθόνης
+ Περιλαμβάνει διάφορες βελτιώσεις κλειδώματος οθόνης
+ Κλείδωμα οθόνης φόντου
+ Φόντο style
+ Προεπιλεγμένη ταπετσαρία
+ Γέμισμα χρώματος
+ Προσαρμοσμένη εικόνα
+ Ορισμός προσαρμοσμένου χρώματος
+ Επιτρέπει τον ορισμό προσαρμοσμένου χρώματος φόντου για το κλείδωμα οθόνης
+ Ορισμός προσαρμοσμένης εικόνας
+ Επιτρέπει τον ορισμό προσαρμοσμένης εικόνας φόντου για το κλείδωμα οθόνης
+ Το φόντο άλλαξε
+ Το φόντο δεν άλλαξε
+ ʼλλο
+ Μεγιστοποίηση widgets
+ Όταν ενεργοποιηθεί, τα widgets του κλειδώματος οθόνης θα μεγιστοποιηθούν από προεπιλογή
+
+
+ βελτιώσεις Ενέργειας
+ Περιλαμβάνει διάφορες βελτιώσεις σχετικές με την Ενέργεια
+
+
+ Απενεργοποίηση αναβοσβησίματος LED
+ Απενεργοποιεί το αναβοσβήσιμο του LED όταν το επίπεδο της μπαταρίας είναι χαμηλό και δεν φορτίζει
+
+
+ Βελτώσεις προβολής
+ Περιλαμβάνει διάφορες βελτιώσεις προβολής
+
+
+ Ελάχιστο επίπεδο φωτεινότητας
+ Επιτρέπει τον ορισμό ελάχιστου επίπεδου φωτεινότητας. Εφαρμόζεται σε χειροκίνητη ρύθμιση φωτεινότητας. (απαιτείται επανεκκίνηση)
+
+
+ Επίπεδα αυτόματης φωτεινότητας
+ Επιτρέπει τον ορισμό γήινων επιπέδων φωτεινότητας και των αντίστοιχων τιμών του οπίσθιου φωτισμού LCD
+ Επίπεδο
+ Lux max
+ Φωτεινότητα (%d – 255)
+ Ο καθορισμένος αριθμός δεν είναι έγκυρος
+ Δεν συνιστάται να ρυθμίσετε τη φωτεινότητα χαμηλότερα από %d
+ Η φωτεινότητα δεν μπορεί να είναι μεγαλύτερη από 255
+ Οι τιμές δεν μπορούν να είναι μικρότερες ή ίσες με το μηδέν
+ Οι τιμές σε χαμηλότερα επίπεδα δεν μπορούν να είναι μεγαλύτερες από τιμές σε υψηλότερα επίπεδα
+ Οι τιμές σε υψηλότερα επίπεδα δεν μπορούν να είναι μικρότερες από τιμές σε χαμηλότερα επίπεδα
+ Οι τιμές για %s ορισμός
+ Νέα ρύθμιση αυτόματης φωτεινότητας αποθηκεύτηκε
+ Ρύθμιση αυτόματης φωτεινότητας δεν αποθηκεύτηκε
+ Ορισμός
+
+
+ Ενεργοποίηση περιστροφής κλειδώματος οθόνης
+ ΠΡΟΕΙΔΟΠΟΙΗΣΗ: μπορεί να αλλάξει ξεκλείδωτους κυκλικούς στόχους σε μερικές συσκευές σε περίπτωση που το AOSP κλείδωμα οθόνης έχει τροποποιηθεί από τον vendor
+
+
+ Ενεργοποίηση του πλήκτρου Μενού
+ Επιτρέπει στο πλήκτρο Μενού να χρησιμοποιείται για γρήγορο ξεκλείδωμα της συσκευής όταν είναι κλειδωμένη η οθόνη (απαιτείται επανεκκίνηση)
+
+
+ Επισκευή ξεκλειδώματος με μήνυμα
+ Εμποδίζει την ενεργοποίηση της οθόνης μετά από τη λήψη νέου μηνύματος (απαιτείται επανεκκίνηση)
+
+
+ Κεντρικό Ρολόι
+
+
+ Βελτιώσεις Media
+ Περιέχει διάφορες βελτιώσεις για media και audio
+
+
+ Περισσότερα επίπεδα έντασης μουσικής
+ Προσθέτει περισσότερα επίπεδα ήχου στην αναπαραγωγή μουσικής (απαιτείται επανεκκίνηση)
+
+
+ Ασφαλής ένταση ακουστικών
+ Ενεργοποιεί ή απενεργοποιεί τη λειτουργία ασφαλής έντασης ακουστικών
+
+
+ Απενεργοποίηση του LED φόρτισης
+ Απενεργοποιεί το LED κατά τη διάρκεια της φόρτισης
+
+
+ Ενέργειες των Hardware πλήκτρων
+ Επιτρέπει τη ρύθμιση τροποποιημένων ενεργειών για τα hardware πλήκτρα
+ Πλήκτρο Menu παρατεταμένο πάτημα action
+ Πλήκτρο Menu διπλό χτύπημα action
+ Πλήκτρο Back παρατεταμένο πάτημα action
+ Προεπιλεγμένο
+ Αναζήτηση
+ Φωνητική αναζήτηση
+ Εναλλαγή σε προηγούμενη εφαρμογή
+ Διακοπή εφαρμογής παρασκηνίου
+ Πέσε για ύπνο
+ Καθυστέρηση παρατεταμένου πατήματος διακοπής εφαρμογής
+ Αφορά την ενέργεια διακοπής εφαρμογής παρασκηνίου. Ορίζει τη διάρκεια πίεσης του πλήκτρου για να ενεργοποιήσει τη διακοπή
+ Ταχύτητα διπλού χτυπήματος
+ Αφορά την ενέργεια του διπλού χτυπήματος του πλήκτρου Menu. Ορίζει την ταχύτητα χτυπήματος του πλήκτρου για να ενεργοποιηθεί το διπλό χτύπημα
+ %s killed
+ Δεν υπάρχει κάτι για διακοπή
+ Δεν βρέθηκε προηγούμενη εφαρμογή
+
+
+ Βελτιώσεις τηλεφώνου
+ Περιλαμβάνει διάφορες τηλεφωνικές βελτιώσεις
+
+
+ Ενέργεια περιστροφής κατά το κουδούνισμα
+ Επιτρέπει τον ορισμό ποιας ενέργειας θα πραγματοποιηθεί όταν η συσκευή αναποδογυριστεί κατά το κουδούνισμα
+ Καμία ενέργεια
+ Σίγαση κουδουνίσματος
+ Ματαίωση κλήσης
+
+
+ Soft reboot
+
+
+ Μαύρο φόντο
+ Χρήση μαύρου φόντου ως προεπιλογή του Holo θέματος, αντί του μαυρο-γκρι (απαιτείται επανεκκίνηση)
+
+
+ Τμήματα ανά σειρά
+ Ορίζει το πόσα τμήματα γρήγορων ρυθμίσεων θα εμφανίζονται ανά σειρά. Τα τμήματα θα αλλάζουν μέγεθος αναλόγως. Αφορά το portrait mode.
+
+
+ Εμφάνιση ημέρας
+
+
+ Επεκτάσιμο πεδίο έντασης ήχου
+ Ενεργοποιεί το επεκτάσιμο πεδίο έντασης ήχου με τη δυνατότητα τον ορισμό εντάσεων για διαφορετικά streams
+
+
+ Link ειδοποίησης & εντάσεις ειδοποιήσεων
+ Όταν είναι απενεργοποιημένο, οι εντάσεις των ήχων κλήσης και ειδοποιήσεων μπορούν να οριστούν ανεξάρτητα
+
+
+ Αυτόματη εναλλαγή QuickSettings
+ Οι QuickSettings θα δείχνουν αυτόματα πότε τραβήχτηκε η γραμμή κατάστασης ενώ δεν υπάρχουν ειδοποιήσεις
+
+
+ Γρήγορο τράβηγμα
+ Η άκρη της γραμμής κατάστασης τραβάει κάτω τα QuickSettings
+ Κλειστό
+ Δεξιά
+ Αριστερά
+
+
+ Απενεργοποίηση ξύπνημα με τα πλήκτρα έντασης
+ Για συσκευές όπως τα Jiayu G3s,G4 όπου τα πλήκτρα έντασης ενεργοποιούν την οθόνη
+
+
+ χρώματα γραμμής κατάστασης
+
+
+ Ενεργοποίηση χρωμάτων εικονιδίων
+
+
+ χρώμα εικονιδίου γραμμής κατάστασης
+ Ορίζει το χρώμα των εικονιδίων της γραμμής κατάστασης και του ρολογιού
+
+
+ χρώμα κίνησης δεδομένων
+ Ορίζει το χρώμα των δεικτών κίνησης δεδομένων
+
+
+ διαχείρηση QuickSettings
+
+
+ Στυλ ειδοποιήσεων
+
+
+ Φόντο ειδοποιήσεων
+ Προεπιλεγμένο φόντο
+ γέμισμα χρώματος
+ Προσαρμοσμένη εικόνα
+ Ορισμός χρώματος φόντου
+ Ορισμός portrait εικόνας
+ Ορισμός landscape εικόνας
+ Διαφάνεια φόντου
+ Λειτουργία φόντου
+ Overlay
+ Underlay
+
+
+ Απενεργοποίηση δεικτών roaming
+ Όντας απενεργοποιημένος, ο δείκτης R δεν θα είναι ορατός κατά το roaming. Χρησιμοποιήστε με προσοχή.
+
+
+ Φορτίζει (%d%%)
+ Φορτισμένο
+ %d%% remaining
+
+
+ Δεν υπάρχει διαθέσιμη υπηρεσία
+ Airplane mode on
+ Κλήσεις έκτακτης ανάγκης μόνο
+
+
+ Pie χειρισμοί
+ Ενεργοποίηση pie χειρισμών
+ Εμφάνιση πλήκτρου αναζήτησης
+ Μέγεθος πλήκτρου πλοήγησης
+ Έναρξη θέσεων
+ Αριστερό όριο οθόνης
+ Κάτω όριο οθόνης
+ Δεξί όριο οθόνης
+ Πάνω όριο οθόνης
+
+
+ mode οπίσθιου φωτισμού πλήκτρου
+ Προεπιλεγμένο
+ Απενεργοποίηση οπίσθιου φωτισμού πλήκτρου
+ Πάντα on όταν η οθόνη είναι on
+ Ειδοποιήσεις οπίσθιου φωτισμού πλήκτρου
+ ΠΕΙΡΑΜΑΤΙΚΟ! Αναβοσβήνει τον οπίσθιο φωτισμό πλήκτρου όταν υπάρχει μία ειδοποίηση. Χρησιμοποιήστε σε περίπτωση που η συσκευή σας δεν έχει LED ειδοποιήσεων. Ενδέχεται να καταναλώνει μπαταρία.
+
+
+ Απόκρυψη μπάρας ειδοποιήσεων
+ Απόκρυψη μπάρας ειδοποιήσεων όταν οι χειρισμοί Pie είναι ενεργοποιημένοι (για συσκευές που έχουν μπάρα ειδοποιήσεων, απαιτείται επανεκκίνηση)
+
+
+ Αμφιταλάντευση Holo φόντου
+ Αντικαθιστά το βασικό Holo φόντο με κάποιο για να καταπιέσει το χρωματικό banding (απαιτείται επανεκκίνηση)
+
+
+ Απενεργοποίηση των hardware πλήκτρων
+ Απενεργοποιεί τα MENU, BACK, HOME όταν οι χειρισμοί Pie είναι ενεργοποιημένοι. Οι ενέργειες των πλήκτρων HW θα συνεχίσουν να λειτουργούν. (για συσκευές που έχουν πλήκτρα HW)
+
+
+ Χρήση θέματος Holo Dark
+ Αλλάζει από GB UI σε θέμα Holo Dark αντί για Holo Light
+
+
+ Off
+ Πάνω αριστερά
+ Πάνω δεξιά
+ Κάτω αριστερά
+ Κάτω δεξιά
+
+
+ Ρύθμιση πάνω margin
+
+
+ Απενεργοποίηση ειδοποιήσεων roaming
+ Απενεργοποιεί τις ειδοποιήσεις roaming κατά την αποστολή μηνυμάτων ή πραγματοποίηση τηλεφωνικών κλήσεων κατά τη διάρκεια roaming
+
+
+ Αναζήτηση
+ (τίποτα)
+
+
+ Quick App
+ Ρυθμίσεις κομματιού QuickApp
+ Κύρια εφαρμογή
+ εφαρμογή παρατεταμένου πατήματος slot 1
+ εφαρμογή παρατεταμένου πατήματος slot 2
+ εφαρμογή παρατεταμένου πατήματος slot 3
+ εφαρμογή παρατεταμένου πατήματος slot 4
+
+
+ GPS on
+ GPS off
+ GPS κλειδωμένο
+
+
+ Εμφάνιση πάντα του πλήκτρου μενού
+
+
+ Ringer mode
+
+
+ ρυθμίσεις ρολογιού
+
+
+ απόκρυψη AM/PM
+
+
+ απόκρυψη ρολογιού
+
+
+ μέγεθος Trigger
+
+
+ διαχείριση διαφάνειας
+ διαφάνεια Statusbar για τον launcher
+ διαφάνεια Statusbar για τη lockscreen
+ διαφάνεια Navbar για τον launcher
+ διαφάνεια Navbar για τη lockscreen
+
+
+ απόκρυψη εικονίδιο ξυπνητηριού
+
+
+ επίπεδο φωτισμού οθόνης
+ ποσότητα φωτεινότητας για κάθε επίπεδο φωτισμού - όταν η οθόνη πρόκειται να σβήσει (απαιτείται επανεκκίνηση)
+
+
+ τηλέφωνο
+ tablet
+
+
+ ρυθμίσεις φωτεινότητας
+ ενεργοποίηση ρυθμίσεων φωτεινότητας
+ Χρήση μόνο σε περίπτωση που η συσκευή σας υποστηρίζει τα βασικά χαρακτηριστικά φωτεινότητας Android. Κρατήστε απενεργοποιημένο αν παρατηρήσετε θέματα με τη φωτεινότητα. (απαιτείται επανεκκίνηση)
+
+
+ εμφάνιση πρόσφατων εφαρμογών
+
+
+ ενέργεια παρατεταμένου πατήματος του πλήκτρου Home
+
+
+ εκκίνηση custom εφαρμογής 1
+ ορισμός custom εφαρμογής 1
+ εκκίνηση custom εφαρμογής 2
+ ορισμός custom εφαρμογής 2
+ καμία custom εφαρμογή ορισμένη!
+ Custom εφαρμογή δεν βρέθηκε!
+
+
+ panel ειδοποιήσεων εφαρμογής ρολογιού
+ συνδέει το panel ειδοποιήσεων του ρολογιού με μία συγκεκριμένη εφαρμογή αντί για Date&Time ρυθμίσεις
+
+
+ αναμονή για απάντηση από GravityBox system framework…
+ GravityBox system framework δεν ανταποκρίνεται. έξοδος.
+
+
+ διεθνή δεδομένα roaming
+ σύνδεση σε υπηρεσίες δεδομένων όταν γίνεται διεθνές roaming
+
+
+ Διευρυμένο desktop mode
+ Απενεργοποιημένο
+ απόκρυψη statusbar
+ απόκρυψη navigation bar
+ απόκρυψη και των δύο
+ Διευρυμένο desktop
+ Διευρυμένο desktop ON
+ Διευρυμένο desktop OFF
+
+
+ Screenshot
+
+
+ εμφάνιση μενού
+
+
+ εναλλαγή διευρυμένου desktop
+ Διευρυμένο desktop mode είναι απενεργοποιημένο!
+
+
+ βελτιώσεις Navigation bar
+ περιλαμβάνει διάφορες βελτιώσεις της navigation bar
+ Παράκαμψη προεπιλεγμένων συστήματος
+ κύριος διακόπτης βελτιώσεων για τη navigation bar (απαιτείται επανεκκίνηση)
+ ενεργοποίηση navigation bar
+ απαιτείται επανεκκίνηση
+ Ύψος Navigation bar
+ εφαρμόζεται στον οριζόντιο και πορτραίτου προσανατολισμο της navigation bar
+ εφαρμόζεται στον οριζόντιο και landscape προσανατολισμο της navigation bar
+ Πλάτος Navigation bar
+ εφαρμόζεται σε κάθετη navigation bar
+ εμφάνιση πάντα του πλήκτρου μενού
+
+
+ Screenshot in power menu
+
+
+ ξεκλείδωμα των ρυθμίσεων του ring
+ ενεργοποίηση ξεκλειδώματος στόχων ring
+ κύριος διακόπτης για ξεκλείδωμα στόχων ring
+ Target εφαρμογή %s
+ ξεκλείδωμα κάθετου ring offset
+ ξεκλείδωμα οριζόντιου ring offset
+
+
+ ενεργοποίηση ελέγχου φωτεινότητας
+ ρυθμίζει τη φωτεινότητα γλιστρώντας πάνω στην statusbar (απαιτείται απενεργοποίηση της αυτόματης φωτεινότητας)
+
+
+ Κλήσεων
+ Μηνυμάτων
+ δεδομένων κινητής
+
+
+ Strip unicode
+ μετατρέπει τους χαρακτήρες unicode characters σε κανονικούς. Μειώνει το μέγεθος του μηνύματος.
+ Χαρακτήρες ανέπαφοι
+ Strip non-encodable χαρακτήρες
+ Strip όλους τους χαρακτήρες unicode
+
+
+ Απενεργοποίηση προειδοποίησης αργών 2G δεδομένων
+ Απενεργοποιεί την προειδοποίηση για αργή ταχύτητα δεδομένων όταν τα δεδομένα κινητής είναι ενεργοποιημένα από QuickSettings για τις SIM σε 2G λειτουργία
+
+
+ Follow προεπιλεγμένο χρώμα μπαταρίας
+ κάνει το ρολόι της statusbar, ποσοστό και κυκλική μπαταρία να χρησιμοποιεί το χρώμα του προεπιλεγμένου εικονίδιου μπαταρίας. Εφαρμόζεται όταν ο χρωματισμός του εικονιδίου είναι off.
+
+
+ Network mode tile mode
+ 2G/2G+3G/3G/(LTE)
+ 2G/2G+3G/(LTE)
+ 2G/3G/(LTE)
+
+
+ Επιτρέψτε όλες τις περιστροφές
+
+
+ Παράκαμψη προεπιλεγμένης συμπεριφοράς tile
+ Παρακάμπτει τη συμπεριφορά του πατήματος/παρατεταμένου πατήματος για τα επιλεγμένα tiles (απαιτείται επανεκκίνηση)
+
+
+ Network mode tile SIM slot
+ Ορίζει τη SIM slot σε ποιο δίκτυο mode tile applies (%s)
+ SIM slot 1
+ SIM slot 2
+
+
+ Ποτέ
+ Πάντα
+ Όταν είναι ενεργοποιημένο το διευρυμένο desktop
+ Όταν το διευρυμένο desktop αποκρύπτει τη navigation bar
+
+
+ Αφήνει το προεπιλεγμένο εικονίδιο μπαταρίας
+ Χρησιμοποιήστε σε περίπτωση που το προπιλεγμένο εικονίδιο μπαταρίας έχει αντικατασταθεί από εικονίδιο εφαρμογής
+
+
+ Αποσύνδεση ενεργοποιεί την οθόνη
+ Όταν είναι ενεργοποιημένο, η οθόνη θα ξυπνά όταν συνδέετε/αποσυνδέετε usb/φορτιστή/οτιδήποτε (απαιτείται επανεκκίνηση)
+
+
+ Ήχος ρύθμισης Mute έντασης
+ Απενεργοποιεί τον ήχο όταν ρυθμίζεται η ένταση με τα πλήκτρα έντασης
+
+
+ Δονήσεις κλήσεων
+ Κατά την έναρξη της κλήσης
+ Κατά τον τερματσμό της κλήσης
+ Κατά την αναμονή κλήσης
+ Κάθε 45 δευτερόλεπτα κατά τη διάρκεια εξερχόμενης κλήσης
+
+
+ Αναδιάταξη Tile
+ Επιτρέπει την αναδιάταξη των QuickSettings tiles
+
+
+ blocker συνεχόμενων ειδοποιήσεων
+ Επιτρέπει το μπλοκάρισμα επιλεγμένων συνεχόμενων ειδοποιήσεων
+ Η λίστα θα γεμίζει αυτόματα για κάθε συνεχόμενη ειδοποίηση που προκύπτει.
+ Μπορείτε μετά να αποφασίσετε αν θα μπλοκάρετε την συνεχόμενη ειδοποίηση ην επόμενη φορά που προκύψει. Χρησιμοποιήστε με προσοχή.
+ Ανανέωση λίστας
+ Είστε σίγουροι ότι θέλετε να ανανεώσετε τη λίστα?
+ This will clear current list and unblock all ongoing notifications previously blocked.
+ (list is empty)
+
+
+ Γρήγορο ξεκλείδωμα
+ Αυτόματο ξεκλείδωμα όταν εισαχθεί το σωστό PIN/password
+
+
+ Απενεργοποιημένο
+ Βασικό
+ Lowercase
+ Uppercase
+
+
+ Πολιτική κλειδώματος της γραμμής κατάστασης
+ Προεπιλογή
+ Ξεκλείδωτο αν το keyguard είναι ανασφαλές
+ Κλειδωμένο
+
+
+ monitor κίνησης δεδομένων
+ Ενεργοποίηση monitoring
+ Προβάλει το monitor κίνησης δεδομένων αυτομάτως μόλις ενεργοποιηθεί η κίνηση δεδομένων
+ Θέση
+ Αυτόματα (κεντρικά ή δεξιά αναλόγως τη θέση του ρολογιού)
+ Αριστερά
+ Δεξιά
+ Μέγεθος
+ Κανονικό
+ Μικρότερο
+ Το μικρότερο
+ B
+ KB
+ MB
+ s
+
+
+ Απενεργοποίηση ορίου widget
+ Επιτρέπει απεριόριστο αριθμό lockscreen widgets
+
+
+
+ %1$s free
+
+ %1$s used
+ μπάρα RAM πρόσφατων εργασιών
+ Off
+ Κορυφή
+ Στην κάτω πλευρά
+
+
+ Ενέργεια μονού χτυπήματος του πλήκτρου προσφάτων
+ Ενέργεια παρατεταμένου πατήματος του πλήκτρου προσφάτων
+
+
+ Προβολή καμπή μπαταρίας
+ Προβάλει την καμπή κατάστασης της μπαταρίας περιμετρικά του κύκλου ξεκλειδώματος της οθόνης
+
+
+ Αναβοσβήσιμο φακού
+
+
+ Φακός με παρατεταμένο πάτημα του πλήκτρου home
+ Ανάβει/Σβήνει τον φακό when device locked. Screen has to be turned on if device lacks native wake by home key support.
+
+
+ Ανάπτυξη αυτόματα
+
+
+ Πλήκτρο Μενού
+ Πλήκτρο Home
+ Πλήκτρο Πίσω
+ Πλήκτρο προσφάτων
+ Πλήκτρα έντασης
+ ʼλλες ρυθμίσεις
+ Ενέργεια παρατεταμένου πατήματος
+ Ενέργεια μονού χτυπήματος
+ Ενέργεια διπλού χτυπήματος
+
+
+ Απενεργοποίηση διπλού χτυπήματος
+
+
+ Signal color mode
+ Χρήση εικονίδια GravityBox (με υποστήριξη επιπέδου σινιάλου)
+ Χρήση εργοστασιακών εικονιδίων (χωρίς υποστήριξη επιπέδου σινιάλου)
+ Μη εφαρμογή χρώματος
+
+
\ No newline at end of file
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index ae7fe978bd..f63955b7ff 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -1,75 +1,86 @@
-
-
+
+GravityBox
-
+
Indicador de bateríaIndicador por defecto
- Circular con porcentaje
- Solo texto grande
+ Circular
+ Circular con porcentaje
+ Porcentaje de bateria en textoNinguno
-
+
Teclas de volumen para cambiar la pistaPulsación larga de las teclas de volumen cambia la pista, mientras la pantalla está apagada
-
+
Alarma de batería bajaNotificación y sonidoSolo notificaciónSolo sonidoDesactivado
-
+
Los cambios se aplicarán después de reiniciar
-
+
Ocultar iconos de señalOcultar iconos de señal para las ranuras SIM cuando no hay SIM insertada, desactiva las notificaciones \"SIM no insertada\"Ocultar ranura SIM 1Ocultar ranura SIM 2Desactivar notificacionesDesactivar las notificaciones \"SIM no insertada\"
-
+
Menú avanzado de apagadoHabilita el menú avanzado de apagado, con la opción de reiniciar en modo recuperación
- Modo recuperación
-
+ Modo recuperación
+ Bootloader
+
Control del cursor con las teclas de volumenControlar el cursor con las teclas de volumen, en campos de textoDeshabilitadoEl cursor se mueve izquierda/derechaEl cursor se mueve derecha/izquierda
-
- Borrado de tareas recientes
- Habilita el botón para borrar todas las tareas recientes a la vez
-
- Personalizaciones
- Parches - Activar solo en caso necesario
-
- Parche para el error de Fecha y Hora
+
+ Borrar todas las tareas recientes
+
+ Reparar error de Fecha y HoraHabilitar en caso de experimentar errores al acceder a la configuración de Fecha y Hora (requiere reiniciar)
-
+
Parche para el ID de llamadaHabilitar si no se muestra correctamente el contacto al recibir una llamada (requiere reiniciar)
- ¡Después de reiniciar, se deben borrar y restaurar los contactos para que el cambio haga efecto! Seleccione Ajustes / Aplicaciones / Todas y borre los datos de la aplicación de contactos.
-
+ ¡Después de reiniciar, se deben borrar y restaurar los contactos para que el cambio haga efecto! Seleccione Ajustes / Aplicaciones / Todas y borre los datos de la aplicación de contactos.
+
Parche para el ID de contacto en mensajesHabilitar en caso de experimentar conversaciones separadas para un mismo contacto (requiere reiniciar)¡Después de reiniciar, debe borrar todas las conversaciones en la aplicación de mensajería para que se apliquen los cambios!
-
+
Parche para el calendarioHabilitar en caso de experimentar encendidos esporádicos de la pantalla (requiere reiniciar)
-
+
Importante
-
+
Fotografía a pantalla completa del contactoMuestra la fotografía del contacto a pantalla completa en la pantalla de llamada entrante
-
+
Sincronización activadaSincronización desactivadaWi-Fi AP activadoWi-Fi AP desactivado
-
+ Linterna Encendida
+ Linterna Apagada
+ Toque para apagar
+ Reproduciendo…
+ Grabando…
+ Grabado
+ Pulsación larga para grabar
+ Toque para detener grabación
+ Deshabilitar
+ Normal
+ Expandido
+ Mantener encendido activado
+ Mantener encendido Desactivado
+
- Ajuste de los íconos del cajón"
+ Ajuste de los íconos del cajónPermite seleccionar los íconos que se muestran en el cajónPerfil de usuarioAirplane mode
@@ -77,7 +88,9 @@
Wi-FiBluetoothGPS
+ GPS (Estilo CM)Datos móviles
+ Modo de RedUso de datosPerfiles de audioBrillo
@@ -85,61 +98,70 @@
Auto rotaciónSincronizaciónPunto de acceso Wi-Fi
+ LinternaGravityBox
-
+ Apagar pantalla
+ Grabación rapida
+ Ajustes
+ Volumen
+ Escritorio Expandido
+ Mantener encendido
+ Captura de pantalla
+
Selección de colorToque en el color para seleccionar
-
-
+
+
Color de fondo de la barra de estadoPermite seleccionar el color de la barra de estado y su transparencia
-
-
+
+
Parche para las preferencias de hablaHabilita la busqueda por voz y los ajustes de texto-a-voz&en entrada. (requiere reiniciar)
-
-
+
+
Opciones avanzadas de desarroladorHabilita las opciones avanzadas de desarrolador (requiere reinicio)
-
-
- Personalización de la barra de estado
- Personalizaciones varias de la barra de estado
+
+
+ Ajustes de la barra de estado
+ Contiene diversos ajustes relacionados a la barra de estadoPersonalizaciones variasPersonalizaciones que no tienen cabida en otras categoriasParches generales
- Parches para MTK6589. Usar solo en caso necesario.
-
-
+ Parches para MTK6589. Usar solo en caso necesario.
+
+
Acerca deProgramado por C3C076@XDA. Toque para visitar el foro oficial.Xposed frameworkProgramado por rovo89@XDA. Toque para visitar el foro oficial.DonarHazme una donación si crees que esta aplicación lo vale! Considera también donar a rovo89 por su excelente trabajo con el framework Xposed.
-
-
- El teléfono se reiniciará
- El teléfono se reiniciaré en modo de restauración
-
+
+
+ El %s se reiniciará
+ El %s se reiniciará en modo de restauración
+ El %s se reiniciará al bootloader.
+
- Efecto de CRT al apagar la pantalla
+ Efecto de CRT al apagar la pantallaHabilita la animación de apagado de pantalla que simula una pantalla antigua
-
-
+
+
Modo ingenieroAccede al codo ingeniero
-
-
+
+
Timbre Dual SIMPermite configurar el tono de llamada y de notificación para cada SIM por separado
-
-
- Configuración de la Pantalla de Bloqueo
- Configuraciones varias de la pantalla de bloqueo
+
+
+ Ajustes de la pantalla de bloqueo
+ Contiene diversos ajustes relacionados con la pantalla de bloqueoColor de fondo de la pantalla de bloqueo
- Color de Fondo
+ Color de fondoImagen de fondo por defectoColor de rellenoImagen predeterminada
@@ -152,13 +174,431 @@
OtroMaximizar WidgetsCuando está habilitado, los Widgets de la pantalla de bloqueo serán maximizados por defecto
-
-
- Opciones de Energía
- Contiene varias opciones relacionadas con el uso de la energía
-
-
+
+
+ Ajustes de energía
+ Contiene diversos ajustes relacionados con el uso de la energía
+
+
Deshabilitar el parpadeo del LED de notificacionesDeshabilita el LED de notificaciones cuando queda poca carga en la batería y no se está cargando
-
-
+
+
+ Ajustes de visualización
+ Contiene diversos ajustes de visualización
+
+
+ Nivel mínimo de brillo
+ Permite ajustar el nivel de brillo mínimo.Se aplica a la configuración de brillo manual . (requires reboot)
+
+
+ Niveles de brillo automático
+ Permite ajustar los niveles de luz ambiental y los valores de retroiluminación LCD correspondientes
+ Nivel
+ Lux max
+ Brillo (%d – 255)
+ Número especificado no es válido
+ No se recomienda configurar el brillo por debajo de %d
+ El Brillo no puede ser mayor que 255
+ Los valores no pueden ser inferiores o iguales a cero
+ Los valores de los niveles inferiores no pueden ser mayores que los valores sobre los niveles más altos
+ Los valores en los niveles más altos no pueden ser más pequeños que los valores de los niveles inferiores
+ Para los valores %s establecer
+ Nueva configuración de brillo automático guardado
+ Configuración de brillo automático no se guardó
+
+
+ Activar rotación LockScreen
+ ADVERTENCIA: puede cambiar desbloquear objetivos del anillo en algunos dispositivos en caso de AOSP LockScreen ha sido modificado por el vendedor
+
+
+ Activada tecla de menú
+ Permite que la tecla de menú se utilice para desbloquear rápido el dispositivo, mientras que está en LockScreen (requiere reinicio)
+
+
+ Fijar mensajería wakelock
+ Evita que la pantalla se encienda cuando llega un nuevo mensaje (requiere reinicio)
+
+
+ Reloj en el Centro
+
+
+ Ajustes de medios
+ Contiene diversos ajustes para los medios de comunicación y el sistema de audio
+
+
+ Más pasos en volumen de música
+ Añade más medidas de volumen para escuchar música (requiere reinicio)
+
+
+ Advertencia volumen de auriculares
+ Activa y desactiva la advertencia de volumen seguro en auriculares
+
+
+ Desactivar LED de carga
+ Desactiva el LED durante la carga
+
+
+ Acciones teclas de hardware
+ Permite configurar acciones personalizadas en las teclas de hardware
+ Acción para pulsación larga en la tecla Menú
+ Acción para doble pulsación en la tecla Menú
+ Acción para pulsación larga en la tecla Atras
+ Por defecto
+ Buscar
+ Búsqueda por voz
+ Cambiar a la aplicación anterior
+ Matar aplicación en primer plano
+ Ir a dormir
+ Retraso en matar app con pulsación larga
+ Aplica para matar la acción aplicación en primer plano. Definido por cuánto retraso para matar la app
+ Velocidad de doble pulsación
+ Se aplica a la acción doble pulsación en la tecla Menú. Define cómo debe ser aprovechado teclas de acceso rápido para activar la doble pulsación
+ %s matada
+ "No hay nada para matar"
+ Aplicación previa no encontrada
+
+
+ Ajustes del teléfono
+ Contiene diversos ajustes de telefonía
+
+
+ Voltear mientras suena
+ Permite definir la acción que se realizará cuando el dispositivo se voltea boca abajo mientras suena
+ No hacer nada
+ Silenciar sonido
+ Descartar llamada
+
+
+ Desactivar la vibración en llamada conectada
+ Desactiva la vibración que se activa cuando se conecta llamada
+
+
+ Reinicio de software
+
+
+ Fondo negro sólido
+ Utilice fondo negro sólido para el tema Holo predeterminado en lugar del gradiente de negro-gris (requiere reinicio)
+
+
+ Paneles por fila
+ Define el número de paneles para mostrar por fila.Los paneles se cambiarán en consecuencia. Se aplica a modo de retrato .
+
+
+ Mostrar día de la semana
+
+
+ Panel volumen ampliable
+ Panel de volumen ampliable con capacidad de establecer volúmenes de diferentes corrientes
+
+
+ Enlace ringtone & volumenes de notificación
+ Cuando está desactivado, el volumen de tono de llamada y notificaciones se pueden configurar de forma independiente
+
+
+ Auto-switch Configuración Rápida
+ Configuración rápida se muestra automáticamente cuando la barra de estado se tira hacia abajo, mientras que no existan notificaciones
+
+
+ Menú desplegable rápido
+ El borde de la barra de estado abre la configuración rápida
+ Apagado
+ Derecha
+ Izquierda
+
+
+ Desactivar despertar
+ Para dispositivos donde las teclas de volumen encienden la pantalla
+
+
+ Colores de la barra de estado
+
+
+ Habilitar colores de los iconos
+
+
+ Colores de los iconos de la barra de estado
+ Define el color de los iconos de la barra de estado y el reloj
+
+
+ Color de la actividad de datos
+ Define el color de los indicadores de actividad de datos
+
+
+ Gestión de configuración rápida
+
+
+ Estilo menú de notificación
+
+
+ Fondo del menú de notificación
+ Fondo por defecto
+ Color de relleno
+ Imagen personalizada
+ Establecer color de fondo
+ Establecer imagen modo retrato
+ Establecer imagen modo paisaje
+ Transparencia de fondo
+ Modo de fondo
+ Sobrepuesto
+ Poner debajo
+
+
+ Desactivar los indicadores de roaming
+ Cuando está desactivado, el indicador R no será visible en itinerancia. Utilizar con precaución.
+
+
+ Cargando (%d%%)
+ Cargado
+ %d%% restante
+
+
+ Sin servicio
+ Modo avión activo
+ Solo llamadas de emergencia
+
+
+ Controles Pie
+ Habilitar controles Pie
+ Tamaño de las teclas de navegación
+ Posiciones del disparador
+ Borde izquierdo de la pantalla
+ Borde inferior de la pantalla
+ Borde derecho de la pantalla
+ Borde superior de la pantalla
+
+
+ Modo de luz de fondo del botón
+ Defecto
+ Boton retroiluminación desactivado
+ Siempre mientras se esta en la pantalla
+ Iluminacion del botón de notificaciones
+ ¡EXPERIMENTAL! Botón de luz de fondo parpadea cuando hay una notificación. El uso en caso de que su dispositivo carezca LED de notificación. Puede consumir batería.
+
+
+ Ocultar la barra de navegación
+ Barra de navegación oculta, mientras que los controles PIE están habilitados (para dispositivos con barra de navegación, requiere reinicio)
+
+
+ Fondo Holo interpolado
+ Sustituye fondo Holo estándar interpolado para suprimir bandas de color (requiere reinicio)
+
+
+ Deshabilitar teclas de hardware
+ Deshabilitadas las teclas Menú, Atras, Home mientras que los controles PIE están habilitados. Acciones con las teclas de hardware seguirán funcionando.
+
+
+ Usar Dark theme Holo
+ Switches GB UI utilizar Holo Dark theme en vez de Holo Light
+
+
+ Apagado
+ Arriba a la izquierda
+ Arriba a la derecha
+ Abajo a la izquierda
+ Abajo a la derecha
+
+
+ Ajuste el margen superior
+
+
+ Deshabilitar las advertencias de itinerancia
+ Deshabilita las advertencias de itinerancia al enviar mensajes o realizar llamadas telefónicas en itinerancia
+
+
+ Buscar
+ (Ninguno)
+
+
+ App Rápida
+ Configuración de paneles de App rápida
+ Aplicaciones Principales
+ Pulsación larga en ranura de app 1
+ Pulsación larga en ranura de app 2
+ Pulsación larga en ranura de app 3
+ Pulsación larga en ranura de app 4
+
+
+ GPS encendido
+ GPS apagado
+ GPS fijo
+
+
+ Mostrar siempre el botón de menú
+
+
+ Modo de tono
+
+
+ Configuración del reloj
+
+
+ Ocultar AM/PM
+
+
+ Ocultar reloj
+
+
+ Tamaño de disparador
+
+
+ Gestión de transparencia
+ Transparencia en la barra de estado de lanzador
+ Transparencia en la barra de estado para LockScreen
+ Transparencia Navbar del lanzador
+ Transparencia Navbar de LockScreen
+
+
+ Ocultar el icono de alarma
+
+
+ Nivel de atenuación de la pantalla
+ Cantidad de brillo para el estado atenuado - cuando la pantalla está a punto de apagarse (requiere reinicio)
+
+
+ teléfono
+ tablet
+
+
+ Opciones de brillo
+ Habilitar opciones de brillo
+ Usar solo en dispositivos que usen el ajuste por defecto de Android. Deshabilitar si existen problemas. (requiere reiniciar)
+
+
+ Mostrar apps recientes
+
+
+ Acción para pulsación larga en la tecla Home
+
+
+ Ejecutar app personalizada 1
+ Establecer app personalizada 1
+ Ejecutar app personalizada 2
+ Establecer app personalizada 2
+ ¡No hay aplicación asignada!
+ ¡Aplicación no encontrada!
+
+
+ Aplicación reloj del panel de notificación
+ Enlaza el reloj del panel de notificación a una aplicación especificada
+
+
+ Esperando respuesta del framework GravityBox …
+ El framework GravityBox no responde. Saliendo.
+
+
+ Roaming de datos nacional
+ Conectar a los servicios de datos en roaming nacional
+
+
+ Modo escritorio expandido
+ Deshabilitado
+ Ocultar barra de estado
+ Ocultar barra de notificación
+ Ocultar ambas
+ Escritorio expandido
+ Escritorio expandido activado. Desactivar
+ Escritorio expandido desactivado. Activar
+
+
+ Captura de pantalla
+
+
+ Mostrar menú
+
+
+ Activar escritorio expandido
+ El escritorio expandido está desactivado
+
+
+ Ajustes de la barra de notificación
+ Contiene diversos ajustes relacionados a la barra de notificación
+ Ignorar ajustes del sistema por defecto
+ Switch principal de ajustes de barra de notificación (requiere reiniciar)
+ Habilitar barra de navegación
+ Requiere reiniciar
+ Altura barra de navegación
+ Se aplica a la orientación retrato
+ Ancho barra de notificación
+ Se aplica a la orientación paisaje
+ Siempre mostrar tecla menú
+
+
+ Captura de pantalla en el menú de apagado
+
+
+ Objetivos en pantalla de bloqueo
+ Habilitar objetivos en pantalla de bloqueo
+ Switch principal para objetivos en pantalla de bloqueo
+ Aplicación del objetivo %s
+ Offset del anillo de desbloqueo
+
+
+ Habilitar control de brillo
+ Ajusta el brillo deslizando la barra de estado
+
+
+ Telefonía
+ Mensajería
+ Datos Móviles
+
+
+ Quitar unicode
+ Convierte caracteres unicode a caracteres normales. Disminuye el tamaño del mensaje.
+ Dejar caracteres intactos
+ Quitar caracteres no codificables
+ Quita todos los caracteres unicode
+
+
+ Deshabilitar advertencia 2G lento
+ Deshabilita la advertencia sobre la lenta velocidad de datos cuando se activan los datos desde los Ajustes rapidos para SIMs en modo 2G
+
+
+ Usar color de la bateria por defecto
+ Hacer que el color del reloj, porcentaje y circulo de bateria usen el color del icono de bateria por defecto. Solo aplica si la coloración esta apagada
+
+
+ Modo del ajuste modo de red
+ 2G/2G+3G/3G/(LTE)
+ 2G/2G+3G/(LTE)
+ 2G/3G/(LTE)
+
+
+ Permitir todas las rotaciones
+
+
+ Ignorar comportamiento de ajustes por defecto
+ Ignora el ajuste por defecto sobre pulsación larga/corta, sobre ajustes seleccionados (requiere reinicio)
+
+
+ Espacio SIM ajuste de red
+ Define la SIM a la cual el ajuste de modo de red corresponde (%s)
+ Espacio SIM 1
+ Espacio SIM 2
+
+
+ Nunca
+ Siempre
+ Cuando el escritorio expandido este activado
+ Cuando el escritorio expandido oculte la barra de navegación
+
+
+ Acción para pulsación individual en la tecla Multitarea
+ Acción para pulsación larga en la tecla Multitarea
+
+
+ Tecla Menú
+ Tecla Home
+ Tecla atras
+ Tecla Multitarea
+ Teclas de volumen
+ Otros ajustes
+ Acción para pulsación larga
+ Acción para pulsación individual
+ Acción para doble pulsación
+
+
+ Deshabilitar doble pulsación
+
+
+
\ No newline at end of file
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index d9911a88d0..7aa93a63b6 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -1,12 +1,29 @@
+
+
GravityBoxStyle de l\'indicateur de batterie
- Incateur par défaut
+ Indicateur par défautBatterie circulaireBatterie circulaire et pourcentage
+ Batterie KitKat
+ Batterie KitKat avec pourcentageBatterie avec pourcentageAucun
@@ -30,7 +47,8 @@
Menu avancé de redémarrageActive le menu avancé de redémarrage avec la possibilité de redémarrer en mode récupération
- Récupération
+ Récupération
+ BootloaderTouches de volume et curseurPermet le contrôle du curseur dans un champ textuel grâce aux touches de volume
@@ -40,8 +58,8 @@
Effacer les tâches récentes
- Paramètre Date et heure
- Activer si vous constatez un plantage lorsque vous accédez au paramètre Date et heure (redémarrage nécessaire)
+ Paramètre date et heure
+ Activer si vous constatez un plantage lorsque vous accédez au paramètre date et heure (redémarrage nécessaire)Identification de l\'appelant en téléphonieActiver si vous constatez qu\'un contact enregistré n\'est pas identifié lors d\'un appel entrant (redémarrage nécessaire)
@@ -72,16 +90,27 @@
EnregistréAppui long pour enregistrerTouchez pour stopper l\'enregistrement
+ Désactivé
+ Normal
+ Étendu
+ Rester allumé on
+ Rester allumé off
+ Wi-Fi
+ Wi-Fi off
+ Non connecté
+ Mise en route…Touches des paramètres rapides
- Permet d\'afficher ou masquer les touches de paramètres rapides depuis la barre de statut
- Profile utilisateur
+ Permet d\'afficher ou masquer les touches de paramètres rapides depuis la barre d\'état
+ Profil utilisateurMode avionNiveau de batterieWi-Fi
+ Wi-Fi (style CM)BluetoothGPS
+ GPS (style CM)Connexion de donnéesMode réseauConsommation de données
@@ -95,29 +124,33 @@
GravityBoxVeilleEnregistrement rapide
- Réglages
-
+ Paramètres
+ Volume
+ Bureau étendu
+ Rester allumé
+ Capture d\'écran
+
Sélecteur de couleurSélectionner votre couleur pour l\'appliquer
- Couleur barre de statut
- Permet de choisir la couleur de fond de la barre de statut et sa transparence
+ Couleur barre d\'état
+ Permet de choisir la couleur de fond de la barre d\'étatParamètres liés à la parole
- Donne accès à la recherche vocale et au paramètre de saisie vocale dans les paramètres Langage et saisie (redémarrage nécessaire)
+ Donne accès à la recherche vocale et au paramètre de saisie vocale dans les paramètres langage et saisie (redémarrage nécessaire)Options avancées (développeurs)Donne accès aux options avancées pour les développeurs (redémarrage nécessaire)
- Modifications barre de statut
- Regroupe diverses modifications de la barre de statut
+ Modifications barre d\'état
+ Regroupe diverses modifications de la barre d\'étatAutres modifications
- Regroupe toutes les autres modifications ne correspondant pas aux autres catégories
+ Regroupe toutes les modifications ne correspondant pas aux autres catégoriesCorrections générales de bugsRegroupe les corrections générales de bugs spécifiques au MTK6589
@@ -127,11 +160,12 @@
Xposed frameworkEncodé par rovo89@XDA. Touchez pour accéder au fil de discussion officielDonations
- Faîtes un don si vous pensez que cette application en vaut la peine ! Faîtes également un don à rovo89 pour son excellent Xposed framework
+ Touchez ce lien pour faire un don via Paypal et soutenir le développement
- Votre téléphone va redémarrer
- Votre téléphone va redémarrer en mode récupération
+ Votre %s va redémarrer
+ Votre %s va redémarrer en mode récupération
+ Votre %s va redémarrer en mode bootloaderEffet écran CRT
@@ -156,7 +190,7 @@
Couleur personnaliséePermet de définir la couleur d\'arrière-plan personnalisée pour l\'écran de déverrouillageImage personnalisée
- Permet de définir une image personnalisée en fond d\écran pour l\'écran de déverrouillage
+ Permet de définir une image personnalisée en fond d\'écran pour l\'écran de déverrouillageFond d\'écran modifiéFond d\'écran inchangéAutre
@@ -165,7 +199,7 @@
Modifications énergie
- Regroupe diverses modifications liés à l\'énergie
+ Regroupe diverses modifications liées à la gestion de l\'énergieDésactiver LED clignotante
@@ -173,21 +207,20 @@
Modifications affichage
- Regroupe diverses modifications liées à l\'affichage
+ Regroupe diverses modifications liées à la gestion de l\'affichageNiveau minimum de luminositéPermet de régler le niveau minimum de luminosité. S\'applique aux règlages manuels de luminosité (redémarrage nécessaire)
- Valeur dans l\'intervalle : 10 – 80
- Niveaux luminosité automatique
+ Niveaux de luminosité automatiquePermet de définir les niveaux de lumière ambiante ainsi que les valeurs correspondantes pour le rétroéclairage (LCD)NiveauLux maximum
- Luminosité (10 – 255)
+ Luminosité (%d – 255)Le nombre spécifié n\'est pas valide
- Il est recommandé de ne pas régler la luminosité en-dessous de 10
+ Il est recommandé de ne pas régler la luminosité en-dessous de %dLa luminosité ne peut pas être supérieure à 255La valeur ne peut pas être inférieure à zéroLa valeur minimum ne pas être supérieure à la valeur maximum
@@ -195,6 +228,7 @@
Valeur de %s appliquéeNouvelle configuration de luminosité automatique enregistréeLa configuration de luminosité automatique N\'a PAS été enregistrée
+ AppliquerRotation écran de déverrouillage
@@ -230,9 +264,9 @@
Actions touches matériellesPermet de programmer des actions pour les touches matérielles
- Appui long touche menu
- Double appui touche menu
- Appui long touche retour
+ Appui long touche menu
+ Double appui touche menu
+ Appui long touche retourPar défautRechercheRecherche vocale
@@ -243,7 +277,7 @@
Valable pour mettre fin à l\'application de premier plan. Définit combien de temps la touche doit être pressée pour mettre fin à la tâcheVitesse double appuiValable pour le double appui sur la touche menu. Définit à quelle vitesse on doit appuyer sur la touche menu pour obtenir l\'action voulue
- Fin de l\'application
+ Fin de l\'application %sIl n\'y a aucune application en coursAucune application précédente trouvée
@@ -258,10 +292,6 @@
Arrêter la sonnerieRejeter l\'appel
-
- Désactiver la vibration au décrochage
- Désactive la vibration lorsque l\'interlocuteur décroche pour répondre à l\'appel
-
Redémarrage logiciel
@@ -280,17 +310,21 @@
Panneau de volume extensibleActive le panneau de volume extensible avec la possibilité de régler les volumes pour différents flux sonores
+
+ Panneau de volume maximisé
+ Permet d\'utiliser tout l\'espace à l\'écran pour le panneau de volume
+
Volumes sonnerie & notifications liésSi désactivé, les volumes de la sonnerie et des notifications peuvent être réglés indépendammentAuto-commutation paramètres rapides
- Les paramètres rapides seront affichés automatiquement lorsque la barre de statut est tirée vers le bas s\'il n\'y a pas de notification
+ Les paramètres rapides seront affichés automatiquement lorsque la barre d\'état est tirée vers le bas s\'il n\'y a pas de notificationAccès rapide
- Les bords de la barre de statut font apparaître les paramètres rapides
+ Les bords de la barre d\'état font apparaître les paramètres rapidesDésactivéDroitGauche
@@ -300,14 +334,14 @@
Pour les modèles tels que Jiayu G3s, G4, permet de désactiver la sortie de veille par les touches de volume
- Couleurs barre de statut
+ Couleurs barre d\'étatActiver couleur des icônesCouleur icônes
- Définit la couleur des icônes et de l\'horloge dans la barre de statut
+ Définit la couleur des icônes et de l\'horloge dans la barre d\'étatCouleur transfert de données
@@ -347,9 +381,8 @@
Appel d\'urgence seulement
- Contrôle Pie
- Activer contrôle Pie
- Afficher le bouton de recherche
+ Touches flottantes
+ Activer les touches flottantesTaille des touches de navigationPositions du déclencheurÀ gauche
@@ -363,19 +396,19 @@
Désactiver le rétroéclairageToujours actif avec l\'écranNotification via bouton rétroéclairé
- EXPÉRIMENTAL! Allume le rétroéclairage du bouton lorsqu\'il y a une notification et si l\'écran est éteint. À utiliser en l\'absence de LED de notification
+ EXPÉRIMENTAL ! Fais clignoter le rétroéclairage du bouton lorsqu\'il y a une notification. À utiliser en l\'absence de LED de notification. Peut augmenter la consommation de batterieMasquer la barre de navigation
- Masque la barre de navigation lorsque les Contrôles Pie sont activés (pour les appareils qui ont une barre de navigation, nécessite un redémarrage)
+ Masque la barre de navigation lorsque les touches flottantes sont activées (pour les appareils qui ont une barre de navigation, nécessite un redémarrage)Arrière-plan Holo traméRemplace l\'arrière-plan Holo standard par un arrière-plan tramé pour supprimer les bandes de couleur (nécessite un redémarrage)
-
- Désactiver les touches matérielles
- Désactive les touches MENU, RETOUR, et HOME si les Contrôles Pie sont activés. Les actions des touches matérielles fonctionneront toujours (pour les appareils ayant des touches matérielles)
+
+ Désactiver les touches de navigation
+ Désactive l\'appui simple sur les touches de navigation lorsque les touches flottantes sont activéesUtiliser le thème Holo Dark
@@ -395,4 +428,390 @@
Avertissements en itinéranceDésactiver les avertissements lors de l\'envoi de messages ou de l\'émission d\'appels en itinérance
+
+ Rechercher
+ (Aucun)
+
+
+ Appli Rapide
+ Paramètres de la touche Appli Rapide
+ Application principale
+ Appui long appli position 1
+ Appui long appli position 2
+ Appui long appli position 3
+ Appui long appli position 4
+
+
+ GPS on
+ GPS off
+ GPS connecté
+
+
+ Toujours afficher le bouton menu
+
+
+ Mode de sonnerie
+
+
+ Paramètres de l\'horloge
+
+
+ Masquer AM/PM
+
+
+ Masquer l\'horloge
+
+
+ Taille de la gâchette
+
+
+ Gestion de la transparence
+ Gère la transparence de la barre d\'état et de la barre de navigation
+ Barre d\'état du lanceur
+ Barre d\'état de l\'écran de déverrouillage
+ Barre de navigation du lanceur
+ Barre de navigation de l\'écran de déverrouillage
+
+
+ Masquer l\'icône de l\'alarme
+
+
+ Niveau d\'éclairage avant veille
+ Puissance de la luminosité avant la mise en veille - lorsque l\'écran est sur le point de s\'éteindre (redémarrage nécessaire)
+
+
+ téléphone
+ tablette
+
+
+ Paramètres de luminosité
+ Active les paramètres de luminosité
+ À n\'utiliser que si votre appareil supporte les fonctionnalités standard de luminosité d\'Android. Laisser désactivé si vous rencontrez des problèmes de luminosité (redémarrage nécessaire)
+
+
+ Afficher les applis récentes
+
+
+ Appui long touche Home
+
+
+ Lancer l\'appli personnalisée 1
+ Définir l\'appli personnalisée 1
+ Lancer l\'appli personnalisée 2
+ Définir l\'appli personnalisée 2
+ Aucune appli personnalisée attribuée !
+ Appli personnalisée introuvable !
+
+
+ Appli horloge depuis panneau de notification
+ Crée un lien du panneau de notification vers une application spécifique au lieu des paramètres date et heure
+
+
+ Attente d\'une réponse de la branche système de GravityBox…
+ La branche système de GravityBox ne répond pas. Fin de tâche
+
+
+ Itinérance de données nationale
+ Se connecter aux services de données en itinérance nationale
+
+
+ Mode bureau étendu
+ Désactivé
+ Masquer la barre d\'état
+ Masquer la barre de navigation
+ Masquer les deux
+ Bureau étendu
+ Bureau étendu : ON
+ Bureau étendu : OFF
+
+
+ Capture d\'écran
+
+
+ Afficher le menu
+
+
+ Basculer vers bureau étendu
+ Le mode bureau étendu est désactivé !
+
+
+ Modifications barre de navigation
+ Contient diverses modifications liées à la barre de navigation
+ Remplace les paramètres système par défaut
+ Interrupteur général pour les modifications de la barre de navigation (redémarrage nécessaire)
+ Activer la barre de navigation
+ Redémarrage nécessaire
+ Hauteur barre de navigation
+ Valable pour la barre de navigation horizontale et l\'orientation portrait
+ Valable pour la barre de navigation horizontale et l\'orientation paysage
+ Largeur barre de navigation
+ Valable pour la barre de navigation verticale
+ Toujours afficher la touche menu
+
+
+ Capture d\'écran dans le menu d\'extinction
+
+
+ Cibles de l\'écran de déverrouillage
+ Activer les cibles de l\'écran de déverrouillage
+ Interrupteur général pour les cibles de l\'écran de déverrouillage
+ Application cible %s
+ Marge verticale anneau de déverrouillage
+ Marge horizontale anneau de déverrouillage
+
+
+ Activer le contrôle de la luminosité
+ Ajuste la luminosité en glissant le doigt sur la barre d\'état (la luminosité automatique doit être désactivée !)
+
+
+ Téléphonie
+ Messagerie
+ Données mobile
+
+
+ Alléger unicode
+ Convertit les caractères unicode en caractères normaux. Réduit la taille globale du message
+ Laisser les caractères tels quels
+ Alléger les caractères non-encodables
+ Alléger tous les caractères unicode
+
+
+ Désactiver l\'avertissement faible débit 2G
+ Désactive l\'avertissement lié au faible débit des données lorsque l\'on active les données mobile dans les paramètres rapides de SIM en mode 2G
+
+
+ Adopter la couleur de batterie d\'origine
+ Permet d\'utiliser la couleur de l\'icône de la batterie d\'origine dans la barre d\'état pour l\'horloge, la batterie circulaire et le pourcentage. Valable lorsque la coloration personnalisée des icônes est désactivée
+
+
+ Modalités touche mode réseau
+ 2G/2G+3G/3G/(LTE)
+ 2G/2G+3G/(LTE)
+ 2G/3G/(LTE)
+
+
+ Permettre toutes les rotations
+
+
+ Remplacer action par défaut d\'une touche
+ Remplace l\'action toucher/toucher long pour la touche sélectionnée (redémarrage nécessaire)
+
+
+ Emplacement SIM touche mode réseau
+ Définit l\'emplacement SIM auquel la touche mode réseau s\'applique (%s)
+ SIM 1
+ SIM 2
+
+
+ Jamais
+ Toujours
+ Quand le bureau étendu est actif
+ Quand le bureau étendu masque la barre de navigation
+
+
+ Laisser l\'icône d\'origine de la batterie intacte
+ À utiliser dans la cas où l\'icône originelle de la batterie serait remplacée par une batterie modifiée de tierce partie
+
+
+ Activer l\'écran au débranchement
+ Si activé, l\'écran va s\'allumer lors du branchement/débranchement d\'un câble usb/alimentation/autre (nécessite un redémarrage)
+
+
+ Mise en sourdine du son du volume
+ Désactive le son entendu lorsque l\'on ajuste le volume en utilisant les touches de volume
+
+
+ Vibrations lors d\'un appel
+ À la mise en relation
+ À la fin de l\'appel
+ À la mise en attente
+ Toutes les 45e secondes lors d\'un appel sortant
+
+
+ Réordonnancement des touches
+ Permet le réordonnancement des touches de paramètres rapides
+
+
+ Blocage des notifications en cours
+ Permet de bloquer les notifications en cours sélectionnées
+ La liste sera incrémentée automatiquement par chaque notification en cours qui surviendra.
+ Vous pouvez décider ensuite de bloquer la notification en cours la prochaine fois qu\'elle aura lieu. À utiliser avec prudence
+ Réinitialiser la liste
+ Est-vous certain de vouloir réinitialiser la liste ?
+ Cela effacera la liste actuelle et débloquera toutes les notifications en cours préalablement bloquées
+ (la liste est vide)
+
+
+ Déverrouillage rapide
+ Pour un déverrouillage automatique lorsque le bon code PIN / mot de passe est saisi
+
+
+ Désactivé
+ Standard
+ En minuscules
+ En majuscules
+
+
+ Politique de verrouillage de la barre d\'état
+ Par défaut
+ Accessible en l\'absence de sécurisation (code/mdp)
+ Bloquée
+
+
+ Monitoring du flux de données
+ Activer le monitoring
+ Affiche le contrôleur du flux de données à chaque fois que la connexion de données est active
+ Position
+ Auto (centré ou à droite en fonction de la position de l\'horloge)
+ À gauche
+ À droite
+ Dimension
+ Normal
+ Plus petit
+ Le plus petit possible
+ o
+ Ko
+ Mo
+ s
+
+
+ Supprimer la limite de widgets
+ Autorise un nombre illimité de widgets sur l\'écran de déverrouillage
+
+
+
+ %1$s libre
+
+ %1$s utilisé
+ Barre des tâches récentes en RAM
+ Désactivée
+ En haut
+ En bas
+
+
+ Action appui simple sur touche appli récentes
+ Action appui long sur touche appli récentes
+
+
+ Afficher l\'arc de batterie
+ Affiche un arc pour l\'état de la batterie autour de l\'anneau de déverrouillage
+
+
+ Commuter la torche
+
+
+ Torche par appui long sur la touche Home
+ Interrupteur on/off pour allumer la torche lorsque l\'appareil est verrouillé. L\'écran doit être allumé si l\'appareil ne supporte pas nativement la réactivation via la touche Home
+
+
+ Développer automatiquement
+
+
+ Touche menu
+ Touche home
+ Touche retour
+ Touche appli récentes
+ Touches de volume
+ Autres paramètres
+ Action appui long
+ Action appui simple
+ Action appui double
+
+
+ Désactiver le double appui
+
+
+ Mode couleur pour le signal
+ Utiliser les icônes GravityBox (niveau du signal supporté)
+ Utiliser les icônes par défaut (niveau du signal non supporté)
+ Ne pas modifier les couleurs
+
+
+ Lanceur d\'applications
+ Boîte de dialogue qui permet de définir jusqu\'à 8 applications pouvant être assignées à une action sur touche matérielle ou utilisées comme touche supplémentaire dans la barre de navigation
+ Application de l\'emplacement %d
+ Aucune application assignée. Utiliser l\'item GravityBox / Lanceur d\'applications pour assigner des applications
+
+
+ Afficher la touche lanceur d\'appli
+
+
+ Afficher le lanceur d\'application
+
+
+ Afficher la touche personnalisée
+ Désactivé
+ Rechercher
+ Lanceur d\'applications
+
+
+ Couleurs touches flottantes
+ Couleur arrière-plan
+ Couleur premier plan
+ Couleur du contour
+ Couleur de la touche sélectionnée
+ Couleur du texte
+ Réinitialiser les couleurs
+
+
+ Activer la photo pour appelant non identifié
+ Définir la photo pour appelant non identifié
+ Photo changée
+ Photo non changée
+
+
+ Il se pourrait que votre écran ne supporte pas de valeurs inférieures à 20. Si votre écran ne s\'allume pas,
+ maintenez la touche Volume+ enfoncée au moins 7 secondes pour réinitialiser la luminosité, règlez-la ensuite à une valeur supérieure
+
+
+ Général
+ Touche de navigation
+ Couleurs
+ Dimensions
+
+
+ Activer les couleurs barre de navigation
+ Peut nécessiter un redémarrage après désactivation
+ Couleur touche de navigation
+ Couleur brillance touche de navigation
+ Couleur de fond barre de navigation
+
+
+ Désactiver le voile sur écran de déverrouillage
+ Supprime la tinte sombre de l\'écran de déverrouillage
+
+
+ Mode de gestion de la transparence
+ Nécessite un redémarrage
+ Désactivé
+ Barre d\'état
+ Barre de navigation
+ Les deux
+
+
+ Couleur signal secondaire
+ Remplace l\'icône orange par défaut du signal
+ Couleur activité de données secondaire
+ Définit la couleur des indicateurs d\'activité de données secondaire
+
+
+ Style icône d\'état
+ S\'applique aux icônes d\'état telles que silencieux, vibreur, alarme, etc
+ JellyBean
+ KitKat
+
+
+ Action double-appui touche retour
+
+
+ Aller à l\'écran Home
+ Retour
+
+
+ Style de touche
+ S\'applique uniquement aux touches induites par GravityBox (n\'affecte pas les touches par défaut)
+
+
+ Ajuster la marge inférieure
+
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index c81dfb8f94..0b7c1a03d8 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -1,136 +1,795 @@
-
+
+
+
+
GravityBox
- Akkumulátor kijelző stílusa
- Gyári akkumulátor kijelző
- Kör akkumulátor százalékkal
- Nagy százalék kijelzés
- Nagy százalék kijelzés gyári ikonnal
- Semmilyen
- Hangerő gombok kihagyják a számot
- Léptetik a számot a hangerő gombok, kikapcsolt képernyőnél hosszan kell nyomni
- Alacsony akkumulátor figyelmeztetés
+
+ Akkumlátor kijelző stílusa
+ Gyári akkumlátor kijezlő
+ Kör akkumlátor kijezlő
+ Kör akkumlátor kijezlő százalékkal
+ Szöveges százalékos kijezlő
+ Semmilyen, nincs akkumlátor kijelzés
+
+ Hangerő gombok átugorják a számot
+ Kikapcsolt képernyőnél a hangerő gombok hosszú megnyomásával átugorhatjuk az aktuális számot
+
+ Alacsony akkumlátorszint figyelmeztetésFelugró szöveg és hang
- Csak felugró szöveg
+ Csak felugó szövegCsak hang
- Ki
- A változás csak az újraindítás után lesz alkalmazva
+ Kikapcsolva
+
+ A változtatás csak újraindítás után lesz alkalmazva
+
Jelszint ikonok automatikus elrejtése
- A kiválasztott SIM foglalat jelszint ikonjának automatikus elrejtése ha a SIM kártya hiányzik, letiltja a \"SIM nem található\" figyelmeztetést
+ Jelszint ikonok automatikus elrejtése a nem használt SIM foglalatnál, ha a SIM kártya nincs behelyezve, "SIM nem található" figyelmeztetés letiltásaSIM 1 foglalat automatikus elrejtéseSIM 2 foglalat automatikus elrejtéseFigyelmeztetés letiltása
- \"SIM nem található\" figyelmeztetés letiltva
+ "SIM nem található" figyelmeztetés letiltása
+
Haladó kikapcsoló menü
- Engedélyezi a haladó kikapcsoló menüt újraindítás a recovery-be opcióval
- Recovery
- Hangerő gombos kurzor irányítás
- Irányítja a kurzort a hangerő gombokkal a szöveg mezőkben
+ Engedélyezi a haladó kikapcsoló menüt újraindítás Recovery-be opcióval
+ Recovery
+ Bootloader
+
+ Kurzor irányítás hangerő gombokkal
+ Kurzor irányítása szöveges mezőkben a hangerő gombok használatávalLetiltva
- Hangerő fel/le mozgatja a kurzort balra/jobbra
- Hangerő fel/le mozgatja a kurzort jobbra/balra
- Töröl minden új feladatot
- A gombbal törölheti az összes új feladatot egyszerre a legújabb alkalmazások ablakban
- Javítja a dátum&idő beállítás hibáját
- Engedélyezze abban az esetben, ha azt tapasztalja, hogy összeomlik a Dátum&idő beállítása közben (újraindítás szükséges)
+ Hangerő fel/le a kurzort balra/jobbra mozgatja
+ Hangerő fel/le a kurzort jobbra/balra mozgatja
+
+ Nemrég használt alkalmazások törlése gomb
+
+ Javítja a Dátum és Idő beállítás hibáját
+ Engedélyezze abban az esetben, ha összeomlást tapasztal a Dátum és Idő beállítás elérésekor (újraindítás szükséges)
+
Javítja a telefon hívóazonosítóját
- Engedélyezze, ha a hívó nem egyezik a hívás fogadásakor (újraindítás szükséges)
- Újraindítás után, törölni és újra hozzáadni kell a kapcsolatokat a változás érvényesítéséhez! Használja a Beállítások / Alkalmazások / Összes - menüpontot a névjegyzék szolgáltató adatainak törléséhez.
+ Engedélyezze abban az esetben, ha a hívó nem egyezik a hívás fogadásakor (újraindítás szükséges)
+ A változások életbe lépéséhez az újraindítás után a kapcsolatokat törölni kell és újra hozzáadni! Használja a Beállítások / Alkalmazások / Összes menüpontot a Névjegyzék szolgáltató adatainak törléséhez.
+
Javítja az üzenetek hívóazonosítóját
- Engedélyezze abban az esetben, ha azt tapasztalja, hogy osztott beszélgetés szálak vannak egyazon partneről (újraindítás szükséges)
- Újraindítás után, törölni kell az összes osztott szálat az üzenetküldő alkalmazásban a változás érvényesítéséhez!
- Naptár prog. javítása
- Engedélyezze abban az esetben, ha azt tapasztalja, hogy a képernyő rendszeresen bekapcsolja magát (újraindítás szükséges)
+ Engedélyezze abban az esetben, ha különválasztott üzenetváltásokat tapasztal egyazon partnertől (újraindítás szükséges)
+ A változások életbe lépéséhez az újraindítás után törölni kell az összes különválasztott üzenetet az Üzenetküldő alkalmazásban!
+
+ Javítja a Naptár programot
+ Engedélyezze abban az esetben, ha a képernyő rendszeresen bekapcsolja magát (újraindítás szükséges)
+
Fontos
+
Teljes képernyős hívó fotó
- Teljes képernyőn mutatja a hívó fotóját a bejövő hívás képernyőn
+ Teljes képernyőn mutatja a hívó fotóját a bejövő hívások képernyőn.
+
- Szinkronizálás be
- Szinkronizálás ki
- Wi-Fi AP be
- Wi-Fi AP ki
+ Szinkronizáció be
+ Szinkronizáció ki
+ Wi-Fi hozzáférési pont be
+ Wi-Fi hozzáférési pont kiZseblámpa beZseblámpa ki
- Érintse meg a lekapcsoláshoz
+ Érintse meg a kikapcsoláshoz
+ Lejátszás…
+ Felvétel…
+ Felvéve
+ Nyomja hosszan a felvételhez
+ Nyomja meg a felvétel leállításához
+ Letiltva
+ Normál
+ Kiterjesztett
+ Ébrentartás bekapcsolva
+ Ébrentartás kikapcsolva
+ Wi-Fi
+ Wi-Fi kikapcsolva
+ Nincs csatlakozva
+ Bekapcsolás…
+
- Statusbar gyorsbeállítás csempék
- Mutatja vagy elrejti a gyorsbeállítás csempéket a statusbar-on
+ Állapotsáv Gyorsbeállítások csempéi
+ Mutatja vagy elrejti a Gyorsbeállítások csempéket az állapotsávonFelhasználói profil
- Repülő mód
- Akkumulátor infó
+ Repülő üzemmód
+ Akkumlátor státuszWi-Fi
+ Wi-Fi (CM stílus)BluetoothGPS
- Mobil adat
- Hálózat mód
+ GPS (CM stílus)
+ Mobil adatátvitel
+ Hálózati üzemmódAdat használat
- Hang profilok
+ Audió profilokFényerőKépernyő időtúllépés
- Automatikus forgatás
+ Automatikus elforgatásSzinkronizálásWi-Fi hozzáférési pontZseblámpa
- GravityBox Magyarul
+ GravityBox
+ Alvás
+ Gyors Felvétel
+ Beállítások
+ Hangerő
+ Kiterjesztett asztal
+ Ébrentartás
+ Képernyőkép
+
Szín választó
- Nyomjon a színre a kiválasztáshoz
+ Nyomjon a színre a beállításhoz
+
- Statusbar háttér szín
- Lehetővé teszi, hogy állíthassa a statusbar háttér színét és az átlátszóságát
+ Állapotsáv háttérszín
+ Lehetővé teszi az Állapotsáv háttérszínének a beállítását
+
Javítja a beszéd beállításokat
- Lehetővé teszi,a hangalapú keresést és szövegfelolvasó kimenetet a Nyelv&bevitel-ben (újraindítás szükséges)
+ Elérhetővé teszi a hangalapú keresést és a szövegfelolvasó kimenetet a Nyelv és Bevitel-ben (újraindítás szükséges)
+
Fejlett fejlesztői lehetőségek
- Lehetővé teszi, a fejlett fejlesztői lehetőségeket (újraindítás szükséges)
+ Elérhetővé teszi a fejlett fejlesztői lehetőségeket (újraindítás szükséges)
+
- Statusbar módosítások
- Különféle statusbar módosításokat tartalmaz
+ Állapotsáv módosítások
+ Különféle Állapotsáv módosításokat tartalmazKülönféle módosításokTartalmaz minden egyéb módosítást, ami nem tartozik a többi konkrét kategóriábaÁltalános javításokÁltalános MTK6589 specifikus javításokat tartalmaz. Csak akkor használja, ha szükséges.
+
- A programról..
+ A programról...Fejlesztette C3C076@XDA. Érintse meg a hivatalos fórum meglátogatásához.Xposed frameworkFejlesztette rovo89@XDA. Érintse meg a hivatalos fórum meglátogatásához.Felajánlás
- Adományozzon részemre ha úgy gondolja, hogy ez a program megérdemli! Valamint fontolja meg, hogy rovo89 is adományoz a kitűnő Xposed framework-ért.
+ Érintse meg a program fejlesztésének PayPal-en keresztüli adományozással történő támogatásához
+
- A telefonja újra fog indulni
- A telefonja újra fog indulni a recovery-be
+ A telefon újra fog indulni.
+ A telefon Recovery módba fog újraindulni.
+ A telefon Bootloader módba fog újraindulni.
+
- CRT kikapcsoló effekt
- Engedélyezi az animációt ami szimulálja az öreg CRT kikapcsolási effektet, ha kikapcsolódik a képernyő
+ CRT kikapcsolási effekt
+ Animáció engedélyezése, ami a régi CRT kikapcsolási effektet szimulálja a képernyő kikapcsolásakor
+
- Tervező mód
- Indítja a Tervező mód programot
+ Tervező üzemmód
+ Elindítja a Tervező üzemmód programot
+
Dual SIM Ringer
- Indítja a programot ami lehetővé teszi, hogy beállítson csengőhangokat és figyelmeztetési hangokat külön mindkét SIM-nek
+ Elindítja a programot, ami lehetővé teszi csengőhangok és figyelmeztető hangok beállítását külön, mindkét SIM-hez
+
- Lockscreen módosítások
- Különböző lockscreen módosításokat tartalmaz
- Lockscreen háttér
- Háttér stílus
+ Zárképernyő módosítások
+ Különböző Zárképernyő módosításokat tartalmaz
+ Zárképernyő háttér
+ Háttér sítlusAlapértelmezett háttérképSzín kitöltésEgyéni kép
- Egyéni szín beállítás
- Lehetővé teszi, hogy beállítson egyéni háttérszínt a lockscreen-hez
- Egyéni kép beállítás
- Lehetővé teszi, hogy beállítson egyéni háttérképet a lockscreen-hez
- Háttér megváltozott
- Háttér nem változott
+ Egyéni szín beállítása
+ Lehetővé teszi egyéni háttérszín beállítását a Zárképernyőhöz
+ Egyéni kép beállítása
+ Lehetővé teszi egyéni háttérkép beállítását a Zárképernyőhöz
+ A háttér megváltozott
+ A háttér nem változott megEgyéb
- Widgetek maximalizálása
- Ha engedélyezve van, lockscreen widgetek maximalizálva lesznek alapértelmezetten
+ Widget-ek maximalizálása
+ Ha engedélyezve van, a Zárképernyő widget-ek alapértelmezetten maximalizálva lesznek
+
- Energia módosítások
- Tartalmaz különböző energiával kapcsolatos módosításokat
+ Energia beállítások
+ Különböző energiával kapcsolatos módosításokat tartalmaz
+
Letiltja a LED villogást
- Kikapcsolja a zavaró LED villogást, ha az akkumulátor szintje alacsony és nincs töltés
-
+ Kikapcsolja a zavaró LED villogást amikor az akkumlátorszint alacsony és nincs töltés
+
+
+ Kijelző módosítások
+ Különböző, kijelzővel kapcsolatos módosításokat tartalmaz
+
+
+ Minimum fényerő szint
+ Lehetővé teszi a minimum fényerő szint beállítását. A kézi fényerőbeállításra vonatkozik. (újraindítás szükséges)
+
+
+ Automatikus fényerő szintek
+ Lehetővé teszi a környezeti fény szintek és a kapcsolódó LCD háttérvilágítás értékek beállítását
+ Szint
+ Lux max
+ Háttérfény (%d – 255)
+ A meghatározott érték nem lehetséges
+ Nem ajánlott %d alatti fényerő érték beállítása
+ Fényerő nem lehet nagyobb, mint 255
+ Az értékek nem lehetnek kisebbek vagy egyenlőek 0-val
+ A kisebb szintek értékei nem lehetnek nagyobbak mint a nagyobb szintek értékei.
+ A nagyobb szintek értékei nem lehetnek kisebbek mint az alacsonyabb szintek értékei.
+ Értékek %-os megadása
+ Új automatikus fényerő konfiguráció elmentve
+ Automatikus fényerő konfiguráció NINCS elmentve
+ Beállít
+
+
+ Zárképernyő elforgatás engedélyezése
+ FIGYELEM: megfordíthatja a feloldó kör célirányát olyan eszközön, ahol AOSP zárképernyő már a gyártó által módosítva van
+
+
+ Menü gomb engedélyezése
+ Lehetővé teszi a menü gombbal történő gyors feloldást a Zárképernyőn (újraindítás szükséges)
+
+
+ Javítja az üzenetek fogadásakori ébrentartást
+ Megakadályozza a képernyő bekapcsolását, ha új üzenet érkezik (újraindítás szükséges)
+
+
+ Óra középen
+
+
+ Média módosítások
+ Különböző beállításokat tartalmaz a média és audió rendszerhez
+
+
+ Több zene hangerő léptetés
+ Több hangerő léptetést eredményez zene hangfolyam esetén (újraindítás szükséges)
+
+
+ Biztonságos fejhallgató média hangerő
+ Aktiválja vagy deaktiválja a biztonságos fejhallgató média hangerő funkciót
+
+
+ Töltés LED tiltása
+ Letiltja a LED-et töltés közben
+
+
+ Hardver gombok műveletei
+ Lehetővé teszi a hardver gombokhoz egyedi műveletek beállítását
+ Menü gomb hosszú érintés művelete
+ Menü gomb dupla érintés művelete
+ Vissza gomb hosszú érintés művelete
+ Alapértelmezett
+ Keresés
+ Hang alapú keresés
+ Váltás az előző programra
+ Előtérben futó program bezárása
+ Alvás
+ Program bezárás hosszú érintés késleltetése
+ Az előtérben futó program bezárására vonatkozik. Meghatározza, hogy mennyi ideig kell nyomva tartani a gombot a bezáráshoz.
+ Dupla érintés sebessége
+ A Menü gomb dupla érintés műveletére vonatkozik. Meghatározza, hogy milyen gyorsan kell érinteni a dupla érintés előidézéséhez.
+ %s bezárva
+ Nincs bezárandó alkalmazás
+ Nem található korábbi alkalmazás
+
+
+ Telefon módosítások
+ Különböző telefonnal kapcsolatos módosításokat tartalmaz.
+
+
+ Fejre fordítás művelete csengés közben
+ Lehetővé teszi, hogy meghatározza azt a műveletet, amit az eszköz csengés közbeni fejjel lefelé fordításakor végrehajt
+ Ne tegyen semmit
+ Csengés elnémítása
+ Hívás elutasítása
+
+
+ Intelligens újraindítás
+
+
+ Solid fekete Holo háttér
+ A solid fekete hátteret használja az alapértelmezett Holo rendszer témához a fekete-szürke színátmenet helyett (újraindítás szükséges)
+
+
+ Csempék egy sorban
+ Meghatározza, hogy mennyi Gyorsbeállítások csempe jelenjen meg soronként. A csempék ennek megfelelően kerülnek átméretezésre. Álló tájolás módra vonatkozik.
+
+
+ A hét napjának mutatása
+
+
+ Bővített hangerő panel
+ Engedélyezi a bővített hangerő panelt a különböző hangfolyamokhoz tartozó értékek külön beállítási lehetőségével
+
+
+ Teljes bővített hangerő panel
+ Lehetővé teszi, hogy a hangerő panel a teljes rendelkezésre álló helyet kitöltse
+
+
+ Csengőhang és figyelmeztető hangok értékei
+ Amikor ki van kapcsolva, a csengőhang és a figyelmeztető hangok értékei egymástól függetlenül állíthatóak
+
+
+ Automatikus váltás a Gyorsbeállítások panelre
+ A Gyorsbeállítások panel fog megjelenni automatikusan az Állapotsáv megnyitásakor, amennyiben nincs értesítés
+
+
+ Gyors lehúzás
+ Az Állapotsáv szélének lehúzása megnyitja a Gyorsbeállítások panelt
+ Kikapcsolva
+ Jobb
+ Bal
+
+
+ Hangerő gombbal ébresztés tiltása
+ Azon eszközök részére -mint a Jiayu G3S,G4- amelyek hangerő gombja bekapcsolja a kijelzőt
+
+
+ Állapotsáv színek
+
+
+ Ikon színek engedélyezve
+
+
+ Állapotsáv ikon színe
+ Beállítja az állapotsáv ikonok és az óra színét
+
+
+ Adattevékenység színe
+ Beállítja az adattevékenység kijelzők színét
+
+
+ Gyorsbeállítások menedzsment
+
+
+ Értesítési terület stílusa
+
+
+ Értesítési terület háttere
+ Alapértelmezett háttér
+ Szín kitöltése
+ Egyéni kép
+ Háttérszín beállítása
+ Alló tájolás hátterének beállítása
+ Fekvő tájolás hátterének beállítása
+ Háttér átlátszóság
+ Háttér üzemmód
+ Átfedés
+ Alsó réteg -Underlay-
+
+
+ Roaming mutató letiltása
+ Amikor ki van kapcsolva, az R mutató nem lesz látható roaming közben. Óvatosan használd.
+
+
+ Töltés (%d%%)
+ Feltöltve
+ %d%% maradt
+
+
+ Nincs szolgáltatás
+ Airplane üzemmód bekapcsolva
+ Csak segélyhívás
+
+
+ Pie Vezérlők
+ Pie Vezérlők engedélyezése
+ Navigációs gomb méret
+ Kioldógomb pozíció
+ Bal oldali képernyőszél
+ Alsó képernyőszél
+ Jobb oldali képernyőszél
+ Felső képernyőszél
+
+
+ Gomb háttérvilágítás üzemmód
+ Alapértelmezett
+ Gomb háttérvilágítás kikapcsolva
+ Bekapcsolt kijelzőnél mindig bekapcsolva
+ Gomb háttérvilágítás értesítések
+ KÍSÉRLETI! Villogtatja a gomb háttérvilágítást amikor értesítés érkezik. Abban az esetben használd, ha az eszközödből hiányzik az értesítési LED. Fogyaszhtatja az akkumlátort.
+
+
+ Navigációs sáv elrejtése
+ Elrejti a Navigációs sávot, ha a Pie Vezérlők engedélyezve vannak -azon eszközök részére, amelyben van navigációs sáv- (újraindítás szükséges)
+
+
+ Nagyobb színmélységű Holo háttér
+ Lecseréli a szabvány Holo hátteret nagyobb színmélységű típusra a színátmenetek folyamatosságának megtörése ellen (újraindítás szükséges)
+
+
+ Navigációs hardver gombok letiltása
+ Letiltja a hardver gombok egyszeri érintését, ha a Pie Vezérlők engedélyezve vannak
+
+
+ Holo Sötét téma használata
+ Átkapcsolja a Gravitybox felhasználói felületét, hogy a Holo sötét témát használja a Holo világos helyett
+
+
+ Kikapcsolva
+ Balra fent
+ Jobbra fent
+ Balra lent
+ Jobbra lent
+
+
+ Felső szegély beállítása
+
+
+ Roaming figyelmeztetések letiltása
+ Letiltja a roaming figyelmeztetéseket miközben üzenetet küld vagy telefonhívást kezdeményez roaming közben
+
+
+ Keresés
+ (Semmi)
+
+
+ Gyors Program elérés
+ Gyors Program elérés csempe beállítások
+ Elsődleges program
+ Hosszú érintés program hely 1
+ Hosszú érintés program hely 2
+ Hosszú érintés program hely 3
+ Hosszú érintés program hely 4
+
+
+ GPS bekapcsolva
+ GPS kikapcsolva
+ GPS csatlakozva
+
+
+ Mindig mutassa a menü gombot
+
+
+ Csengés üzemmód
+
+
+ Óra beállítások
+
+
+ De/Du elrejtése
+
+
+ Óra elrejtése
+
+
+ Kioldógomb méret
+
+
+ Átlátszóság menedzsment
+ Állapotsáv és Navigációs sáv átlátszóságának kezelése
+ Állapotsáv Indítónál
+ Állapotsáv Zárképernyőnél
+ Navigációs sáv Indítónál
+ Navigációs sáv Zárképernyőnél
+
+
+ Ébresztő ikon elrejtése
+
+
+ Képernyő elsötétedési érték
+ A fényerő értéke az elsötétedő képernyő állapotban - amikor a képernyő hamarosan kikapcsol (újraindítás szükséges)
+
+
+ telefon
+ tablet
+
+
+ Fényerő beállítások
+ Fényerő beállítások módosításanak engedélyezése
+ Csak abban az esetben használd, ha az eszközöd támogotja a szabvány Android fényerő funkciókat. Fényerővel kapcsolatos hibák megjelenése esetén tiltsd le ezt a funkciót. (újraindítás szükséges)
+
+
+ Nemrég használt alkalmazások megjelenítése
+
+
+ Kezdőlap gomb hosszú érintés művelete
+
+
+ Egyéni alkalmazás 1 indítása
+ Egyéni alkalmazás 1 beállítása
+ Egyéni alkalmazás 2 indítása
+ Egyéni alkalmazás 2 beállítása
+ Nincs engedélyezve egyéni alkalmazás!
+ Az egyéni alkalmazás nem található!
+
+
+ Értesítési panel óra alkalmazás
+ Az értesítési panel órájának megérintésével egy meghatározott alkalmazás megnyitása a Dátum&Idő beállításai helyett
+
+
+ Várakozás a GravityBox keretrendszer válaszára…
+ GravityBox keretrendszer nem válaszol. Kilépés.
+
+
+ Hazai adat roaming (MVNO)
+ Csatlakozás adat szolgáltatáshoz hazai roaming esetén
+
+
+ Kiterjesztett asztal üzemmód
+ Letiltva
+ Állapotsáv elrejtése
+ Navigációs sáv elrejtése
+ Mindkettő elrejtése
+ Kiterjesztett asztal
+ Kiterjesztett asztal bekapcsolva
+ Kiterjesztett asztal kikapcsolva
+
+
+ Képernyőkép
+
+
+ Menü mutatása
+
+
+ Kiterjesztett asztal ki-bekapcsolása
+ A kiterjesztett asztal üzemmód ki van kapcsolva!
+
+
+ Navigációs sáv beállítások
+ Különféle navigációs sáv módosításokat tartalmaz
+ Rendszerbeállítások felülírása
+ Főkapcsoló a navigációs sáv módosításokhoz (újraindítás szükséges)
+ Navigációs sáv engedélyezése
+ Újraindítás szükséges
+ Navigációs sáv magassága
+ Vízszintes navigációs sáv és Álló tájolás módra vonatkozik
+ Vízszintes navigációs sáv és Fekvő tájolás módra vonatkozik
+ Navigációs sáv szélessége
+ Függőleges navigációs sávra vonatkozik
+ Menü gomb állandó megjelenítése
+
+
+ Képernyőkép a kikapcsoló menüben
+
+
+ Feloldó kör beállítások
+ Feloldó kör célpontok engedélyezése
+ Feloldó kör célpontok főkapcsoló
+ Célpont alkalmazás %s
+ Feloldó kör függőleges eltolása
+ Feloldó kör vízszintes eltolása
+
+
+ Fényerő szabályozás engedélyezése
+ Fényerő beállítása az értesítési sávon történő jobbra-balra csúsztatással
+
+
+ Telefonálás
+ Üzenetküldés
+ Mobil adatátvitel
+
+
+ Unicode figyelmen kívül hagyása
+ Átkonvertálja az unicode karaktereket normál karakterekké. Csökkenti a teljes üzenet méretét.
+ Karakterek érintetlenül hagyása
+ Nem kódolható karakterek figyelmen kívül hagyása
+ Az összes unicode karakter figyelmen kívül hagyása
+
+
+ Lassú 2G adatátviteli figyelmeztetés letiltása
+ Kikapcsolja a lassú adatátviteli sebességgel kapcsolatos figyelmeztetést, amikor bekapcsolásra kerül a Gyorsbeállítások alatt a mobil adatátvitel SIM 2G módban.
+
+
+ Gyári akkumlátor szín követése
+ A gyári akkumlátor ikon színét fogja használni az értesítési sávon az óra illetve a százalékos és kör akkumlátor használat ikonjaihoz. Kikapcsolt ikonszínezés esetén használandó.
+
+
+ Hálózati üzemmód csempe típusa
+ 2G/2G+3G/3G/(LTE)
+ 2G/2G+3G/(LTE)
+ 2G/3G/(LTE)
+
+
+ Összes elforgatás engedélyezése
+
+
+ Alapértelmezett csempe viselkedés felülírása
+ Felülírja a kiválasztott csempék érintés/hosszú érintés viselkedését (újraindítás szükséges)
+
+
+ Hálózati üzemmód csempe SIM kártya hely
+ Meghatározza a SIM kártya helyet, amire a hálózati üzemmód csempe vonatkozik (%s)
+ SIM kártya hely 1
+ SIM kártya hely 2
+
+
+ Soha
+ Mindig
+ Ha a kiterjesztett asztal be van kapcsolva
+ Ha a kiterjesztett asztal elrejti a navigációs sávot
+
+
+ Gyári akkumlátor ikon érintetlenül hagyása
+ Abban az esetben használd, ha a gyári akkumlátor ikon egy másik modifikáció által lecserélésre került.
+
+
+ Lecsatlakozás bekapcsolja a kijelzőt
+ Ha engedélyezve van, a képernyő felébred usb/táp/egyéb kábel (le)csatlakoztatásakor (újraindítás szükséges)
+
+
+ Lenémítja a hangerő beállítás értesítő hangot
+ Letiltja a hangerő gombokkal történő hangerőszabályozáskor hallható hangot
+
+
+ Híváskori rezgések
+ Hívás kapcsolódásakor
+ Hívás megszakítasakor
+ Hívás várakozás során
+ Minden 45. másodpercben kimenő hívások közben
+
+
+ Csempék átrendezése
+ Lehetővé teszi a Gyorsbeállítások csempék átrendezését
+
+
+ Folyamatban lévő értesítések blokkoló
+ Lehetővé teszi kiválasztott folyamatban lévő értesítések blokkolását
+ A lista automatikusan bővítve lesz minden folyamatban lévő értesítéssel, ami felbukkan.
+ Ezután eldöntheti, hogy blokkolja-e a folyamatban lévő értesítést a következő felbukkanásakor. Óvatosan használd.
+ Lista visszaállítása
+ Biztosan vissza szeretné állítani a listát?
+ Ez törölni fogja az aktuális listát és engedélyezni fogja az összes korábban blokkolt folyamatban lévő értesítést.
+ (a lista üres)
+
+
+ Gyors feloldás
+ Automatikuson feloldás, amikor a helyes PIN/jelszó megadásra kerül
+
+
+ Letiltva
+ Alaphelyzet
+ Kisbetű
+ Nagybetű
+
+
+ Állapotsáv zárolása házirend
+ Alapértelmezett
+ Feloldva, ha a billentyűzár nincs engedélyezve
+ Zárolva
+
+
+ Adatforgalom figyelő
+ Monitorozás engedélyezése
+ Adatforgalom figyelő automatikus mutatása aktív adatkapcsolat esetén
+ Pozíció
+ Automatikus (középen vagy jobbra az óra pozíciójától függően)
+ Balra
+ Jobbra
+ Méret
+ Normál
+ Kisebb
+ Legkisebb
+ B
+ KB
+ MB
+ mp
+
+
+ Widget limitáció letiltása
+ Lehetővé teszi korlátlan számú widget alkalmazását a Zárképernyőn
+
+
+
+ %1$s szabad
+
+ %1$s foglalt
+ Nemrég használt alkalmazások Memória sáv
+ Kikapcsolva
+ Fent
+ Lent
+
+
+ Nemrég használt alkalmazások gomb egyszeri érintés művelete
+ Nemrég használt alkalmazások gomb hosszú érintés művelete
+
+
+ Akkumlátor körív mutatása
+ Mutatja az akkumlátor állapot körívet a feloldó kör körül.
+
+
+ Zseblámpa ki-bekapcsolása
+
+
+ Zseblámpa bekapcsolása a kezdőlap gomb hosszú érintésével
+ Be-kikapcsolja a zseblámpát zárolt eszköznél. A képernyőnek bekapcsolva kell lennie, ha az eszközből gyárilag hiányzik az ébresztés kezdőlap gomb segítségével funkció.
+
+
+ Automatikus bővített panel
+
+
+ Menü gomb
+ Kezdőlap gomb
+ Vissza gomb
+ Nemrég használt alkalmazások gomb
+ Hangerő gombok
+ Egyéb beállítások
+ Hosszú érintés művelete
+ Egyszeri érintés művelete
+ Dupla érintés művelete
+
+
+ Dupla érintés letiltása
+
+
+ Jelszint ikon színezés mód
+ Használja a GravityBox ikonokat (jelerősség szint támogatással)
+ Használja a gyári ikonokat (jelerősség szint támogatás nélkül)
+ Nem alkalmaz színezést
+
+
+ Alkalmazás Indító
+ Alkalmazás ablak 8 beállítható applikációval, melynek a megjelenítése hozzárendelhető hardver gomb művelethez vagy egy külön navigációs sáv gombhoz
+ Alkalmazás hely %d
+ Nincs beállítva alkalmazás. Applikációk hozzárendeléséhez használja a GravityBox / Alkalmazás Indító menüt.
+
+
+ Alkalmazás Indító gomb mutatása
+
+
+ Alkalmazás Indító megjelenítése
+
+
+ Egyéni gomb mutatása
+ Letiltva
+ Keresés
+ Alkalmazás Indító
+
+
+ Pie színek
+ Háttérszín
+ Előtérszín
+ Körvonal színe
+ Kiválasztott gomb színe
+ Szöveg színe
+ Színek visszaállítása
+
+
+ Ismeretlen hívó fotó engedélyezése
+ Ismeretlen hívó fotó beállítása
+ Fotó megváltoztatva
+ Fotó nincs megváltoztatva
+
+
+ Lehetséges, hogy a képernyő nem támogatja a 20 alatt beállított értéket. Ha a képernyő nem világít,
+ tartsa nyomva a hangerő + gombot legalább 7 másodpercig a fényerő beállítások alaphelyzetbe állításához, és utána állítsa be a fényerőt magasabb értékre.
+
+
+ Általános
+ Navigációs gombok
+ Szín
+ Méret
+
+
+ Navigációs bár színek engedélyezése
+ A funkció letiltása után újraindítást igényelhet
+ Navigációs gomb színe
+ Aktív navigációs gomb színe
+ Navigációs sáv háttérének színe
+
+
+ Zárképernyő árnyékolás letiltása
+ Eltávolítja a sötét árnyalatot a zárképernyőről
+
+
+ Átlátszóság menedzser mód
+ Újraindítás szükséges
+ Letiltva
+ Állapotsáv
+ Navigációs sáv
+ Mindkettő
+
+
+ Másodlagos SIM jelerősség színe
+ Felülírja a gyári sárga jelerősség ikonszínt
+ Másodlagos SIM adattevékenység színe
+ Beállítja a másodlagos adattevékenység jelzőikonok színét
+
+
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
new file mode 100644
index 0000000000..ab7c86dc8e
--- /dev/null
+++ b/res/values-in/strings.xml
@@ -0,0 +1,797 @@
+
+
+
+
+
+ GravityBox
+
+ Gaya indikator Baterai
+ Indikator baterai bawaan
+ Baterai lingkar
+ Baterai lingkar dengan persentase
+ Baterai KitKat
+ Baterai KitKat dengan persentase
+ Teks persentase baterai
+ Tidak ada
+
+ Tombol volume untuk meloncati trek lagu
+ Loncati trek lagu dengan menahan tombol volume ketika layar dimatikan
+
+ Peringatan baterai lemah
+ Pop-up dan suara
+ Pop-up saja
+ Suara saja
+ Mati
+
+ Perubahan akan diterapkan setelah reboot
+
+ Otomatis sembunyikan ikon sinyal
+ Otomatis menyembunyikan ikon sinyal dari SIM yang dipilih, mematikan peringatan \"SIM not inserted\"
+ Otomatis sembunyikan SIM Slot 1
+ Otomatis sembunyikan SIM Slot 2
+ Matikan peringatan
+ Peringatan \"SIM not inserted\" dimatikan
+
+ Menu reboot tingkat lanjut
+ Menghidupkan menu reboot tingkat lanjut dengan opsi untuk reboot ke recovery
+ Recovery
+ Bootloader
+
+ Tombol volume mengontol kursor
+ Kontrol kursor menggunakan tombol volume saat mengetik
+ Dimatikan
+ Volume atas/bawah menggerakkan kursor ke kiri/kanan
+ Volume atas/bawah menggerakkan kursor ke kanan/kiri
+
+ Bersihkan semua tugas baru
+
+ Perbaiki crash setting Tanggal&Waktu
+ Hidupkan jika anda mengalami crash ketika masuk ke setting Tanggal&Waktu (membutuhkan reboot)
+
+ Perbaiki caller ID pada telepon
+ Hidupkan jika kontak anda tidak cocok ketika menerima panggilan (membutuhkan reboot)
+ Setelah reboot, harap bersihkan data dan mengisi ulang kontak ada agar perubahan bisa berjalan! Masuk ke Settings / Applications / All - untuk membersihkan data Contacts provider.
+
+ Perbaiki caller ID pada pesan
+ Hidupkan jika anda mengalami percakapan yang terpisah-pisah untuk 1 kontak yang sama (membutuhkan reboot)
+ Setelah reboot, harap hapus semua percakapan yang terpisah-pisah di aplikasi perpesanan agar perubahan bisa berjalan!
+
+ Perbaiki aplikasi kalender
+ Hidupkan jika anda mengalami layar yang hidup sendiri secara berkala (membutuhkan reboot)
+
+ Penting
+
+ Foto pemanggil fullscreen
+ Tampilkan foto pemanggil secara fullscreen pada layar panggilan masuk
+
+
+ Sinkron hidup
+ Sync Mati
+ Wi-Fi AP on
+ Wi-Fi AP off
+ Senter hidup
+ Senter mati
+ Sentuh untuk mematikan
+ Memainkan…
+ Merekam…
+ Direkam
+ Tahan untuk merekam
+ Sentuh untuk berhenti merekam
+ Dimatikan
+ Normal
+ Diperluas
+ Tetap menyala hidup
+ Tetap menyala mati
+ Wi-Fi
+ Wi-Fi mati
+ Tidak terkoneksi
+ Menghidupkan…
+
+
+ Kotak-kotak QuickSettings Statusbar
+ Membolehkan kotak-kotak QuickSettings di statusbar untuk di tampil/sembunyikan
+ Profil pengguna
+ Mode pesawat terbang
+ Status baterai
+ Wi-Fi
+ Wi-Fi (CM style)
+ Bluetooth
+ GPS
+ GPS (CM style)
+ Data Paket
+ Mode jaringan
+ Penggunaan Data
+ Profil Suara
+ Kecerahan
+ Screen timeout
+ Rotasi otomatis
+ Sinkronisasi
+ Akses Poin Wi-Fi
+ Senter
+ GravityBox
+ Matikan layar
+ Rekam Cepat
+ Setting
+ Volume
+ Perluasan Desktop
+ Tetap menyala
+ Screenshot
+
+
+ Pilihan Warna
+ Tekan pada warna untuk memilih
+
+
+ Warna latar Statusbar
+ Membolehkan untuk men-set warna latar statusbar
+
+
+ Perbaiki setting Bicara
+ Membuka kunci setting pencarian suara dan text-to-speech di setting Bahasa&Masukan (membutuhkan reboot)
+
+
+ Opsi pengembang tingkat lanjut
+ Membuka kunci opsi pengembang tingkat lanjut (membutuhkan reboot)
+
+
+ Tweak statusbar
+ Berisi berbagai macam tweak untuk statusbar
+ Tweak lain-lain
+ Berisi semua tweak yang tidak berada di dalam kategori spesifik
+ Perbaikan umum
+ Berisi perbaikan umum yang dikhususkan untuk MTK6589. Gunakan hanya jika dibutuhkan.
+
+
+ Tentang
+ Pembuatan kode oleh C3C076@XDA. Sentuh untuk mengunjungi topik resmi.
+ Xposed framework
+ Pembuatan kode oleh rovo89@XDA. Sentuh untuk mengunjungi topik resmi.
+ Donasi
+ Sentuh untuk mendukung pengembangan melalui donasi lewat PayPal.
+
+
+ %s anda akan reboot
+ %s anda akan reboot ke recovery
+ %s anda akan reboot ke bootloader
+
+
+ Animasi layar mati CRT
+ Menhidupkan animasi yang meniru matinya layar CRT lama layar dimatikan
+
+
+ Engineering mode
+ Membuka aplikasi Engineering mode
+
+
+ Dual SIM Ringer
+ Membuka aplikasi yang membolehkan anda untuk men-set suara ringtone dan notifikasi berbeda untuk masing-masing SIM
+
+
+ Tweak Lockscreen
+ Berisi berbagai tweak lockscreen
+ Latar belakang Lockscreen
+ Gaya latar belakang
+ Wallpaper bawaan
+ Diisi warna
+ Gambar kustom
+ Tentukan warna kustom
+ Membolehkan anda untuk men-set warna kustom sebagai latar belakang Lockscreen
+ Tentukan gambar kustom
+ Membolehkan anda untuk men-set gambar kustom sebagai latar belakang Lockscreen
+ Latar belakang telah diganti
+ Latar belakang tidak diganti
+ Lainnya
+ Maksimalkan widget
+ Ketika dihidupkan widget di lockscreen akan dimaksimalkan
+
+
+ Tweak Daya
+ Berisi berbagai tweak yang berkaitan dengan daya
+
+
+ Matikan kedipan LED
+ Mematikan kedipan LED ketika baterai lemah
+
+
+ Tweak Layar
+ Berisi berbagai tweak layar
+
+
+ Nilai kecerahan minimal
+ Membolehkan anda untuk men-set nilai minimal kecerahan layar. Berjalan hanya untuk setting kecerahan manual. (membutuhkan reboot)
+
+
+ Level Autobrightness
+ Membolehkan anda untuk men-set nilai level cahaya ambien dan cahaya latar LCD yang terkai
+ Level
+ Lux max
+ Kecerahan (%d – 255)
+ Nomor yang dimasukkan tidak valid
+ Tidak direkomendasikan untuk men-set nilai kecerahan di bawah %d
+ Kecerahan tidak dapat berada diatas 255
+ Nilai tidak boleh sama dengan nol
+ Nilai yang berada di level bawah tidak boleh lebih tinggi dari level di atasnya
+ Nilai yang berada di level atas tidak boleh lebih tinggi dari level di bawahnya
+ Nilai untuk %s telah di-set
+ Konfigurasi Autobrightness baru telah disimpan
+ Konfigurasi Autobrightness TIDAK disimpan
+ Set
+
+
+ Hidupkan rotasi lockscreen
+ PERINGATAN: dapat merubah target bukaan kunci yang telah dimodifikasi oleh vendor pada beberapa perangkat
+
+
+ Hidupkan tombol menu
+ Membolehkan tombol menu digunakan untuk membuka kunci secara cepat ketika di lockscreen (membutuhkan reboot)
+
+
+ Perbaiki wakelock perpesanan
+ Menghindari hidupnya layar ketika ada pesan baru yang datang (membutuhkan reboot)
+
+
+ Jam di tengah
+
+
+ Tweak Media
+ Berisi berbagai tweak untuk media dan sistem audio
+
+
+ Tambahkan jarak volume musik
+ Menambahkan jarak volume untuk alur musik (membutuhkan reboot)
+
+
+ Volume media yang aman untuk headset
+ Menghidupkan atau mematikan fitur volume media yang aman untuk headset
+
+
+ Matikan LED pengisian daya
+ Mematikan LED ketika mengisi daya
+
+
+ Aksi tombol fisik
+ Membolehkan anda untuk men-set aksi kustom pada tombol fisik
+ Aksi tombol menu ketika ditahan
+ Aksi tombol menu ketika ditekan dua kali (Double-tap)
+ Aksi tombol kembali ketika ditahan
+ Bawaan
+ Pencarian
+ Pencarian Suara
+ Pindah ke aplikasi sebelumnya
+ Hentikan program yang sedang ditampilkan
+ Matikan layar
+ Jeda waktu penghentian aplikasi ketika tombol ditahan
+ Berfungsi untuk menghentikan program yang sedang ditampilkan. Tentukan seberapa lama tombol perlu ditahan sebelum aplikasi dihentikan
+ Kecepatan Double-tap
+ Berfungsi untuk aksi ketika tombol menu ditekan dua kali. Tentukan seberapa cepat tombol harus ditekan sebelum aksi dijalankan
+ %s dihentikan
+ Tidak ada aplikasi yang dihentikan
+ Aplikasi sebelumnya tidak ditemukan
+
+
+ Tweak telepon
+ Berisi berbagai tweak yang berkaitan dengan telepon
+
+
+ Aksi jika perangkat dibalik ketika berdering
+ Membolehkan anda untuk menentukan aksi yang akan dilakukan jika perangkat dihadapkan ke bawah ketika ada panggilan masuk
+ Jangan lakukan apapun
+ Matikan dering
+ Matikan panggilan
+
+
+ reboot cepat
+
+
+ Latar belakang hitam
+ Gunakan warna hitam sebagai latar belakang menggantikan gradiasi abu-abu sebagai latar belakang sistem Holo (membutuhkan reboot)
+
+
+ Kotak perbaris
+ Tentukan berapa banyak kotak QuickSettings yang akan ditampilkan setiap barisnya. Kotak-kotak akan diberikan ukuran secara otomatis. Hanya berfungsi untuk mode berdiri.
+
+
+ Tampilkan hari
+
+
+ Panel volume yang bisa dibuka
+ Menghidupkan panel volume yang bisa dibuka dengan kemampuan untuk men-set volume-volume dengan alur yang berbeda
+
+
+ Panel volume yang bisa dibuka secara penuh
+ Membolehkan panel volume untuk menggunakan seluruh tempat yang disediakan
+
+
+ Gabungkan alur ringtone & notifikasi
+ Ketika dimatikan, alur volume untuk ringtone dan notifikasi bisa di set secara independen
+
+
+ Otomatis berpindah ke QuickSettings
+ QuickSettings akan ditampilkan secara otomatis ketika statusbar ditarik ke bawah bila tidak ada notifikasi
+
+
+ Tarikan ke bawah menuju Quicksettings
+ Salah satu ujubng statusbar akan otomatis membuka Quicksettings
+ Mati
+ Kanan
+ Kiri
+
+
+ Matikan tombol volume untuk menghidupkan layar
+ Untuk perangkat seperti Jiayu G3s,G4 yang mana tombol volume bisa digunakan untuk menghidupkan layar
+
+
+ Warna Statusbar
+
+
+ Hidupkan warna ikon
+
+
+ Warna ikon Statusbar
+ Men-set warna untuk ikon statusbar dan jam
+
+
+ Warna aktivitas paket data
+ Men-set warna untuk indikator aktivitas paket data
+
+
+ Manajemen QuickSettings
+
+
+ Gaya daftar notifikasi
+
+
+ Latar belakang daftar notifikasi
+ Latar belakang asli
+ Warna
+ Gambar kustom
+ Set Warna latar belakang
+ Set gambar posisi berdiri
+ Set gambar posisi lanskap
+ Transparansi latar belakang
+ Mode latar belakang
+ Melapisi
+ Mendasari
+
+
+ Matikan indikator roaming
+ Ketika dimatikan, indikator berupa huruf R tidak akan ditampilkan ketika sedang roaming. Berhati-hatilah menggunakannya.
+
+
+ Mengisi daya (%d%%)
+ Selesai mengisi daya
+ Tersisa %d%%
+
+
+ Tidak ada layanan
+ Mode Pesawat terbang hidup
+ Hanya panggilan darurat
+
+
+ Kontrol Pie
+ Hidupkan kontrol Pie
+ Ukuran tombol navigasi
+ Posisi pemicu
+ Batas kiri layar
+ Batas bawah layar
+ Batas kanan layar
+ Batas atas layar
+
+
+ Mode lampu latar tombol
+ Bawaan
+ Matikan lampu latar tombol
+ Selalu hidupkan ketika layar hidup
+ Notifikasi lampu latar tombol
+ EKSPERIMENTAL! Membuat lampu latar tombol berkedip ketika ada notifikasi. Gunakan jika perangkat anda tidak menyediakan LED notifikasi. Dapat menguras batrei.
+
+
+ Sembunyikan bar navigasi
+ Menyembunyikan bar navigasi ketika kontrol Pie dihidupkan (untuk perangkat yang memiliki bar navigasi, membutuhkan restart)
+
+
+ Latar belakang Holo dithered
+ Ganti latar belakang standar Holo dengan versi yang dithered untuk mengurangi pita warna (requires reboot)
+
+
+ Matikan tombol navigasi
+ Mematikan aksi tombol navigasi saat ditekan sekali ketika kontrol Pie diaktifkan.
+
+
+ Gunakan tema Holo Dark
+ Ganti UI GB ke tema Holo Dark daripada Holo Light
+
+
+ Matikan
+ Atas kiri
+ Atas kanan
+ Bawah kiri
+ Bawah kanan
+
+
+ Tentukan batas atas
+
+
+ Matikan peringatan roaming
+ Matikan peringatan roaming ketika mengirim pesan atau melakukan panggilan ketika roaming
+
+
+ Pencarian
+ (Tidak ada)
+
+
+ Quick App
+ Pengaturan kotak QuickApp
+ Aplikasi utama
+ Aplikasi long-press slot 1
+ Aplikasi long-press slot 2
+ Aplikasi long-press slot 3
+ Aplikasi long-press slot 4
+
+
+ GPS hidup
+ GPS mati
+ GPS terkunci
+
+
+ Selalu tampilkan tombol menu
+
+
+ Mode ringtone
+
+
+ Setting jam
+
+
+ Sembunyikan AM/PM
+
+
+ Sembunyikan jam
+
+
+ Besar pemicu
+
+
+ Manajemen transparansi
+ Mengatur transparansi untuk statusbar dan navbar
+ Statusbar untuk launcher
+ Statusbar untuk lockscreen
+ Navbar untuk launcher
+ Navbar untuk lockscreen
+
+
+ Sembunyikan ikon alarm
+
+
+ Level keredupan layar
+ Jumlah kecerahan ketika layar redup - ketika layar hendak mati (membutuhkan restart)
+
+
+ Perangkat
+ Tablet
+
+
+ Pengaturan kecerahan
+ Hidupkan pengaturan kecerahan
+ Gunakan hanya jika perangkat anda mendukung fitur kecerahan bawaan Android. Tetap matikan jika anda mengalami masalah yang terkait dengan kecerahan. (membutuhkan restart)
+
+
+ Tampilkan aplikasi terbaru
+
+
+ Aksi ketika tombol Home ditahan
+
+
+ Jalankan aplikasi kustom
+ Tetapkan aplikasi kustom
+ Jalankan aplikasi kustom2
+ Tetapkan aplikasi kustom 2
+ Tidak ada aplikasi kustom yang ditetapkan!
+ Aplikasi kustom tidak ditemukan!
+
+
+ Sambungkan ke DeskClock
+ Sambungkan jam di panel notifikasi ke aplikasi DeskClock daripada ke pengaturan Tanggal&Waktu
+
+
+ Menunggu respon dari GravityBox system framework…
+ GravityBox system framework tidak merespon. Keluar.
+
+
+ Roaming paket data nasional
+ Koneksikan paket data ketika sedang roaming nasional
+
+
+ Mode perluasan desktop
+ Dimatikan
+ Sembunyikan statusbar
+ Sembunyikan navigation bar
+ Sembunyikan keduanya
+ Perluasan desktop
+ Perluasan desktop HIDUP
+ Perluasan desktop MATI
+
+
+ Screenshot
+
+
+ Tampilkan menu
+
+
+ Ubah mode perluasan desktop
+ Perluasan dekstop dimatikan!
+
+
+ Tweak navigation bar
+ Memuat berbagai tweak yang berkaitan dengan navigation bar
+ Acuhkan aturan bawaan sistem
+ Tombol utama untuk tweak navigation bar (membutuhkan restart)
+ Hidupkan navigation bar
+ Membutuhkan reboot
+ Tinggi navigation bar
+ Berlaku untuk orientasi potret/berdiri dan navigation bar horizontal
+ Berlaku untuk navigation bar horizontal dan orientasi lanskap/tidur
+ Lebar navigation bar
+ Berlaku untuk orientasi lanskap/tidur
+ Selalu tampilkan tombol menu
+
+
+ Screenshot di menu power
+
+
+ Target Lockscreen
+ Hidupkan target lockscreen
+ Hidupkan pengaturan target lockscreen
+ Aplikasi target %s
+ Jarak bawah cincin unlock
+ Jarak samping cincin unlock
+
+
+ Hidupkan kontrol kecerahan
+ Atur kecerahan layar dengan menggeser staturbar (Membutuhkan kecerahan otomatis untuk dimatikan)
+
+
+ Telepon
+ Perpesanan
+ Paket data
+
+
+ Hilangkan unicode
+ Mengubah karakter unicode ke karakter normal. Mengurangi ukuran pesan secara keseluruhan.
+ Biarkan karakter secara utuh
+ Hilangkan karakter yang tidak bisa dirubah
+ Hilangkan semua karakter unicode
+
+
+ Hilangkan peringatan koneksi 2G yang lambat
+ Mematikan peringatan tentang lambatnya koneksi ketika menghidupkan paket data untuk SIM dalam mode 2G di QuickSettings
+
+
+ Ikuti warna baterai bawaan
+ Membuat warna jam statusbar, persentase dan lingkaran baterai menggunakan warna baterai bawaan. Diterapkan saat pewaraan ikon mati.
+
+
+ Mode kotak mode jaringan
+ 2G/2G+3G/3G/(LTE)
+ 2G/2G+3G/(LTE)
+ 2G/3G/(LTE)
+
+
+ Bolehkan semua rotasi
+
+
+ Paksakan kelakuan bawaan kotak
+ Memaksakan kelakuan kotak saat disentuh/ditahan untuk kotak terpilih (membutuhkan restart)
+
+
+ Kotak slot SIM paket data
+ Menentukan slot SIM mana yang menggunakan paket data (%s)
+ SIM slot 1
+ SIM slot 2
+
+
+ Tidak pernah
+ Selalu
+ Ketika mode perluasan desktop hidup
+ Ketika mode perluasan desktop hidup, sembunyikan navbar
+
+
+ Biarkan ikon baterai bawaan tetap utuh
+ Gunakan jika ikon baterai bawaan telah diganti dengan ikon baterai pihak ketiga
+
+
+ Hidupkan layar ketika dicabut
+ Jika dihidupkan, layar akan hidup ketika anda memasang/mencabut kabel usb/power/apalah (Membutuhkan restart)
+
+
+ Matikan suara pengaturan volume
+ Mematikan suara yang muncul ketika anda mengatur volume menggunakan tombol volume
+
+
+ Getaran panggilan
+ Ketika panggilan tersambung
+ Ketika panggilan terputus
+ Ketika panggilan menunggu
+ Setiap 45 detik dalam panggilan keluar
+
+
+ Atur ulang kotak-kotak
+ Membolehkan anda untuk mengatur ulang urutan kotak-kotak QuickSettings
+
+
+ Blokir notifikasi yang sedang berjalan
+ Membolehkan anda untuk memblokir notifikasi yang dipilih
+ Daftarnya akan terisi secara otomatis untuk setiap notifikasi yang sedang berjalan.
+ Anda lalu anda bisa menentukan apakah akan memblokir notifikasi tersebut atau tidak untuk waktu mendatang. Gunakan dengan hati-hati.
+ Reset daftar
+ Apakah anda yakin untuk mereset daftar?
+ Hal ini akan membersihkan daftar yang ada dan membuka kunci blokir terhadap semua notifikasi yang terblokir sebelumnya.
+ (Daftarnya kosong)
+
+
+ Buka cepat
+ Otomatis membuka ketika PIN/Password yang benar dimasukkan
+
+
+ Matikan
+ Standar
+ Huruf kecil
+ Huruf besar
+
+
+ Aturan kunci statusbar
+ Bawaan
+ Terbuka jika kuncian tidak aman
+ Terkunci
+
+
+ Monitor lalu-lintas paket data
+ Hidupkan monitor
+ Menunjukkan monitor lalu-lintas paket data kapanpun paket data sedang aktif
+ Posisi
+ Otomatis (tengah atau kanan, bergantung posisi jam)
+ Kiri
+ Kanan
+ Ukuran
+ Normal
+ Lebih kecil
+ Paling kecil
+ B
+ KB
+ MB
+ s
+
+
+ Matikan batasan widget
+ Membolehkan jumlah tak terbatas untuk widget lockscreen
+
+
+
+ %1$s bebas
+
+ %1$s terpakai
+ Recent tasks RAM bar
+ Mati
+ Atas
+ Bawah
+
+
+ Aksi ketika tombol Recents ditekan sekali
+ Aksi ketika tombol Recents ditahan
+
+
+ Tunjukkan lengkungan baterai
+ Tunjukkan lengkungan status baterai di sekitar lingkaran pembuka kunci
+
+
+ Hidup/Matikan Senter
+
+
+ Hidupkan senter ketika tombol Home ditahan
+ Hidup/Matikan senter ketika perangkat terkunci. Layar harus dihidupkan terlebih dahulu jika perangkat tidak memiliki fitur untuk menghidupkan layar dengan tombol home.
+
+
+ Membesar secara otomatis
+
+
+ Tombol Menu
+ Tombol Home
+ Tombol Kembali
+ Tombol Recents
+ Tombol Volume
+ Pengaturan lain
+ Aksi ketika ditahan
+ Aksi ketika ditekan sekali
+ Aksi ketika ditekan dua kali
+
+
+ Matikan double-tap
+
+
+ Mode pewarnaan sinyal
+ Gunakan ikon GravityBox (dengan dukungan level sinyal)
+ Gunakan ikon bawaan (Tanpa dukungan level sinyal)
+ Jangan terapkan warna
+
+
+ Launcher aplikasi
+ Dialog yang memperbolehkan pengguna menetapkan sampai 8 aplikasi yang bisa ditetapkan sebagai aksi tombol fisik atau tombol tambahan di navbar.
+ Aplikasi slot %d
+ Tidak ada aplikasi yang ditetapkan. Gunakan GravityBox / menu Launcher Aplikasi untuk menetapkan aplikasi.
+
+
+ Tunjukkan tombol Launcher Aplikasi
+
+
+ Tunjukkan Launcher Aplikasi
+
+
+ Tunjukkan tombol kustom
+ Matikan
+ Pencarian
+ launcher Aplikasi
+
+
+ Warna Pie
+ Warna latar belakang
+ Warna latar depan
+ Warna garis
+ Warna tombol terpilih
+ Warna teks
+ Reset warna
+
+
+ Hidupkan foto pemanggil tak dikenal
+ Tetapkan foto pemanggil tak dikenal
+ Foto diganti
+ Foto tidak diganti
+
+
+ Layar anda mungkin tidak mendukung nilai kurang dari 20. Jika layar anda tidak hidup,
+ tahan tombol volume + setidaknya selama 7 detik untuk mereset kecerahan lalu atur nilai yang lebih tinggi.
+
+
+ Umum
+ Tombol navigasi
+ Warna
+ Ukuran
+
+
+ Hidupkan warna navbar
+ Mungkin membutuhkan restart setelah dimatikan
+ Warna tombol navigasi
+ Warna tombol navigasi ketika menyala
+ Warna latar Navbar
+
+
+ Matikan bayangan lockscreen
+ Menghapus warna gelap dari lockscreen
+
+
+ Mode pengelola transparansi
+ Membutuhkan restart
+ Dimatikan
+ Statusbar
+ Navbar
+ Keduanya
+
+
+ Warna sinyal kedua
+ Merubah warna sinyal oranye
+ Warna aktifitas data kedua
+ Men-set warna untuk indikator lalu-lintas data kedua
+
+
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index abf358d4d6..3cd16491eb 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -1,11 +1,12 @@
-
+GravityBoxStile indicatore batteriaIndicatore batteria stock
- Batteria circolare con percentuale
+ Batteria circolare no percentuale
+ Batteria circolare con percentualeTesto percentuale largoNessuno
@@ -21,7 +22,7 @@
Le modifiche saranno applicate dopo il riavvio
- Auto-nascondi icone segnalazione
+ Notifica Sim assenteNascondi automaticamente le icone di segnalazione per gli slot SIM selezionati se la SIM non è inserita, Disabilita la notifica \"SIM non inserita\"Nascondi automaticamente lo slot SIM 1Nascondi automaticamente lo slot SIM 2
@@ -71,7 +72,7 @@
In riproduzione…Registrazione…Registrato
- Pressione lunga per registrare
+ Tieni premuto per registrareTocca per fermare la registrazione
@@ -131,8 +132,8 @@
Fai una donazione a me se credi che questa app se la meriti! Considera anche una donazione a rovo89 per il suo eccellente framework Xposed.
- Il telefono si riavvierà
- Il telefono si riavvierà in ripristino
+ Il %s si riavvierà
+ Il %s si riavvierà in ripristinoEffetto spegni schermo CRT
@@ -179,16 +180,15 @@
Livello luminosità minimoPermette di impostare il livello di luminosità minimo. Si applica all\'impostazione manuale (richiede riavvio)
- Intervallo di valori: 10 – 80Livelli AutobrightnessPermette di impostare la luminosità dello schermo in base alla luce ambientale (lux)LivelloLux massima
- Luminosità (10 – 255)
+ Luminosità (%d – 255)Il numero specificato è invalido
- Non è consigliato impostare una luminosità inferiore a 10
+ Non è consigliato impostare una luminosità inferiore a %dLa luminosità non pul superare 255I valori non possono essere inferiori a 0I valori dei livelli bassi non possono superare quelli dei livelli più alti
@@ -231,20 +231,20 @@
Azioni tasti HardwarePermette di impostare azioni personalizzate per la pressione dei stasti hardware
- Azione per tasto MENU premuto a lungo
- Azione per il doppio-tap del tasto MENU
- Azione per tasto INDIETRO premuto a lungo
+ Azione per tasto MENU premuto a lungo
+ Azione per il doppio-tap del tasto MENU
+ Azione per tasto INDIETRO premuto a lungoDefaultCercaRicerca vocalePassa alla app precedente
- Killa app corrente
+ Chiusura forzata app correnteVai in sleep
- Durata per Kill app su pressione lunga
- Si applica per il Kill della app corrente. Definisce quanto a lungo deve rimanere premuto il tasto per fare la kill
+ Durata per chiudura forzata app su pressione lunga
+ Si applica per la chiudura forzata dell\'app corrente. Definisce quanto a lungo deve rimanere premuto il tasto per fare la chiusura forzataVelocità doppio-tapSi applica per il doppio-tap del tasto MENU. Definisce quanto velocemente deve avvenire il secondo tap
- Applicazione terminata
+ %s terminataNon c\'è niente da terminareNessuna app precedente trovata
@@ -290,14 +290,14 @@
I QuickSettings saranno visibili automaticamente aprendo la barra delle notifiche, se non sono già presenti notifiche
- Visualizzaione rapida
+ Visualizzazione rapidaTrascinando un bordo dello schermo appariranno direttamente i QuickSettingsSpentoDestraSinistra
- Disable volume rocker wake
+ Disabilita sblocco schermo con tasti volumePer modelli come Jiayu G3s,G4 in cui i tasti volume accendono lo schermo
@@ -350,7 +350,6 @@
Pie controlsAbilita pie controls
- Mostra bottone ricercaGrandezza tasto navigazionePosizione triggerBordo sinistro schermo
@@ -380,7 +379,7 @@
Usa il tema Holo Dark
- Passa a interfaccia GB per usare il tema Holo Dark invece di Holo Light
+ Cambia interfaccia di GB, usa il tema Holo Dark invece di Holo LightOff
@@ -444,5 +443,319 @@
Modalità attenuazione luminositàImposta luminosità per attenuazione schermo - quando lo schermo sta per spegnersi (necessita riavvio)
+
+
+ telefono
+ tablet
+
+
+ Impostazioni luminosità
+ Abilita impostazioni luminosità
+ Usare solo nel caso in cui il proprio terminale supporti le impostazioni di luminosità standard di Android. Lascia disattivato se riscontri problemi con impostazione attivata. (richiede riavvio)
+
+
+ Mostra applicazioni recenti
+
+
+ Azione per pressione prolungata tasto Home
+
+
+ Avvia applicazione specifica
+ Imposta applicazione specifica
+ Nessuna applicazione assegnata!
+ Applicazione specifica non trovata!
+
+
+ Collegamento ad app Orologio
+ Collega l\'orologio del pannello notifiche all\'applicazione Orologio al posto dell\'app Impostazioni data&ora
+
+
+ In attesa di risposta dal modulo GravityBox…
+ Il modulo GravityBox non risponde, Chiusura in corso.
+
+
+ Roaming dati in territorio nazionale
+ Collegati al servizio dati in roaming nazionale
+
+
+ Modalità Desktop espanso
+ Disattivato
+ Nascondi statusbar
+ Nascondi barra di navigazione
+ Nascondi entrambe
+ Desktop esteso
+ Desktop esteso è ACCESO
+ Desktop esteso è SPENTO
+
+
+ Fotografa schermo
+
+
+ Mostra menù
+
+
+ Attiva/disattiva expanded desktop
+ La modalità Desktop Esteso è spenta!
+
+
+ Ottimizzazioni barra di navigazione
+ Contiene varie ottimizzaioni relative alla barra di navigazione
+ Sovrascrivi i valori standard di sistema
+ Attivazione ottimizzaioni barra di navigazione (richiede riavvio)
+ Abilita Barra di navigazione
+ Richiede riavvio
+ Altezza Barra di navigazione
+ Applica alla visualizzaione verticale
+ Larghezza Barra di navigazione
+ Applica alla visualizzazione orizzontale
+ Mostra sempre tasto menu
+
+
+ Abilita Fotografa schermo nel menu apegnimento
+
+
+ Applicazioni in Sblocco schermo
+ Abilita app in sblocco schermo
+ Attivazione Applicazioni in sblocco schermo
+ Applicazione %s
+ Scostamento dell\'anello di sblocco, margine inferiore
+
+
+ Abilita controllo luminosità
+ Modifica luminosità scorrendo sopra la barra di stato
+
+
+ Telefonate
+ Messaggistica
+
+
+ Elimina Unicode
+ Converte i caratteri unicode in normali caratteri. Diminuisce la dimensione totale del messaggio.
+ Lascia caratteri invariati
+ Elimina caratteri non convertibili
+ Elimina tutti i caratteri unicode
+
+
+ Disabilita avviso di connessione lenta in 2G
+ Disabilita avviso di velocità di connessione lenta causata dalla connessione in 2G, attivando la connessione da QuickSetting per SIM in modalità 2G
+
+
+ Segui il colore dell\'icona batteria stock
+ Imposta colore dell\'orologio nella barra di stato, percentuale, e icona batteria come quello dell\'icona stock. Attivabile se impostazioni colore icone è spento.
+
+
+ Modalità attivazione reti nella relativa icona dei quicksetting
+ 2G/2G+3G/3G
+ 2G/2G+3G
+
+
+ Abilita tutte le rotazioni
+
+
+ Sovrascrivi funzionamento standard icone
+ Sovrascrivi funzionamento pressione/pressione-lunga per icone selezionate (richiede riavvio)
+
+
+ Impostazioni Network mode tile SIM slot
+ Definisce a quale slot SIM applicare le impostazioni (%s)
+ SIM slot 1
+ SIM slot 2
+
+
+ Mai
+ Sempre
+ Se desktop esteso attivo
+ Se desktop esteso nasconde la barra di navigazione
+
+
+ Lascia icona batteria stock inalterata
+ Usa nel caso in cui l\'icona batteria stock sia stata sostituita da app alternative
+
+
+ Scollega cavo fa accendere lo schermo
+ Se abilitato, lo schermo si illuminerà ad ogni operazione di collega/discollega cavo usb (richiede riavvio)
+
+
+ Azzera suoni in regolazione volume
+ Disattiva suoni durante regolazione volume usando i tasti laterali volume
+
+
+ Vibrazione in chiamata
+ Alla risposta
+ A fine chiamata
+ Su chiamata in attesa
+ Ogni 45 secondi durante una chiamata effettuata
+
+
+ Ordinamento Icone pulsanti
+ Consenti il riordino delle icone del Quicksettings
+
+
+ Blocca notifiche in corso
+ Consente di bloccare le notifiche selezionate
+ L\'elenco sarà automaticamente riempito con ogni notifica che apparirà.
+ Puoi decidere se bloccare tali notifiche la prissima volta che appariranno. Funzione da usare con cautela.
+ Azzera elenco
+ Sei sicuro di voler azzerare l\'elenco??
+ Verrà pulito l\'elenco attuale e sbloccate tutte le notifiche precedentemente bloccate.
+
+
+ Sblocco rapido
+ Sblocco automatico dopo inserimento corretto di pin/password
+
+
+ Disattivato
+ Standard
+ Minuscoli
+ Maiuscolo
+
+
+ Regole di blocco barra di stato
+ Default
+ Sbloccato se la tastiera è sbloccata
+ Bloccato
+
+
+ Controllo traffico dati
+ Abilita controllo traffico
+ Mostra automaticamente il controllo traffico dati appena la connessione dati viene attivata
+ Posizione
+ Auto (centrata o a destra, a seconda della posizione dell\'orologio)
+ Sinistra
+ Dimensione
+ Normale
+ Più piccola
+ Ancora più piccola
+
+
+ Disabilita limitazione widget
+ Consenti numero illimitato widget in lockscreen
+
+
+
+ %1$s liberi
+
+ %1$s usati
+ Memoria Applicazioni recenti
+ Spento
+ In alto
+ In basso
+
+
+ Azione pressione breve
+ Azione pressione lunga
+
+
+ Mostra Arco batteria
+ Mostra arco stato batteria disegnato nell\'anello di sblocco schermo
+
+
+ Torcia attiva/disattiva
+
+
+ Torcia su pressione lunga tasto home
+ Torcia on/off se telefono bloccato. Lo schermo deve essere acceso se il telefono non supporta nativamente lo sblocco usando il tasto home.
+
+
+ Espandi automaticamente
+
+
+ Tasto Menu
+ Tasto Home
+ Tasto Indietro
+ Tasto Recenti
+ Tasti volume
+ Altre impostazioni
+ Azione pressione lunga
+ Azione pressione corta
+ Azione doppio tap
+
+
+ Disabilita doppio tap
+
+
+ Colori icona segnale
+ Usa icone GravityBox (con supporto del segnale)
+ Usa icona stock (senza supporto del segnale)
+ Non applicare colore
+
+
+ Avvio applicazioni
+ Consente di definire fino a 8 app che possono essere assegnate a azioni tasti hardware or usate come barra di navigazione aggiuntiva
+ Application slot %d
+ Nessuna app assegnata. Usa GravityBox / Menu Launcher Applicazioni per assegnare le applicazioni.
+
+
+ Mostra Tasto Avvio Applicazioni
+
+
+ Mostra Launcher app
+
+
+ Mostra tasti personalizzati
+ Disabilitato
+ Cerca
+ Launcher app
+
+
+ Colori Pie
+ Colore sfondo
+ Colore primo piano
+ Colore sottolineatura
+ Colore tasto selezionato
+ Colore testo
+ Reset colori
+
+
+ Abilita foto per chiamante sconosciuto
+ Imposta foto chiamante sconosciuto
+ Foto cambiata
+ Foto non cambiata
+
+
+ Il tuo schermo potrebbe non supportare valori inferiori a 20. Se il tuo schermo non si accende,
+ tieni premuto il tasto Volume+ per almeno 7 secondi per resettare l\'impostazione luminosità e poi reimposta la luminosità con un valore superiore.
+
+
+ Generali
+ Tasti navigazione
+ Colore e trasparenze
+ Dimensioni
+
+
+ Colore tasto navigazione
+ Colore tasto navigazione evidenziato
+ Colore sfondo tasto navigazione
+
+
+ Disattiva ombreggiatura lockcreen
+ Rimuovi tinte scure nel lockscreen
+
+
+ Gestore trasparenze
+ Richiede riavvio
+ Disabilitato
+ Statusbar
+ Barra di navigazione
+ Entrambe
+
+
+ Colore segnale sim2
+ Sovrascrivi colore icona arancione standard
+ Colore icona dati sim2
+ Imposta colore icone dati sim2
+
+
+ Stile icona profilo audio
+ Si applica a Silenzioso, Vibrazione, Allarme, ecc
+ JellyBean
+ KitKat
+
+
+ Azione doppio tocco al tasto Indietro
+
+
+ Vai a schermata Home
+ Torna indietro
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
new file mode 100644
index 0000000000..a8b87242e6
--- /dev/null
+++ b/res/values-ja/strings.xml
@@ -0,0 +1,800 @@
+
+
+
+ GravityBox
+
+ バッテリーアイコンのスタイル
+ 標準バッテリーアイコン
+ サークルアイコン
+ サークル+パーセントアイコン
+ KitKatアイコン
+ KitKatアイコン+パーセント
+ バッテリーパーセントテキスト
+ なし
+
+ 音量キーで曲操作
+ 画面オフ時に音量キー長押しで曲送り/曲戻しします。
+
+ バッテリー残量低下警告
+ ポップアップ+警告音
+ ポップアップのみ
+ 警告音のみ
+ なし
+
+ 変更は再起動後に適用されます。
+
+ 電波アイコンを自動非表示
+ 選択したSIMスロットにSIMが入っていないときに電波アイコンを非表示にして「SIMが挿入されていません」の通知を無効化します。
+ SIMスロット1を自動非表示
+ SIMスロット2を自動非表示
+ 通知を無効化
+ 「SIMが挿入されていません」の通知を無効化しました。
+
+ 再起動オプション
+ 電源メニューに再起動オプションを追加します。
+ リカバリ
+ Bootloader
+
+ 音量キーカーソル操作
+ 文字入力欄で音量キーでカーソルを移動できるようにします。
+ 無効
+ 音量キー上/下で左/右に移動
+ 音量キー上/下で右/左に移動
+
+ 「全てのアプリを終了」ボタン
+
+ 日付と時刻でのクラッシュを修正
+ 設定で日付と時刻を開いたときにクラッシュする場合に有効にしてください。(要再起動)
+
+ 発信者IDを修正
+ 電話が着信したときに連絡先と一致しない場合に有効にしてください。(要再起動)
+ 再起動後は連絡先を消去して追加し直してください! Use Settings / Applications / All - to clear data of Contacts provider.
+
+ メッセージ送信者IDを修正
+ 同じ連絡先の人なのにメッセージが分けて保存される場合に有効にしてください。(要再起動)
+ 再起動後は分けられたメッセージを全て消去してください!
+
+ カレンダーアプリを修正
+ 画面のオンオフが勝手にされる場合に有効にしてください。(要再起動)
+
+ 重要
+
+ 発信者の写真を全画面表示
+ 着信時に発信者の写真を全画面表示します。
+
+
+ 同期オン
+ 同期オフ
+ Wi-Fi APオン
+ Wi-Fi APオフ
+ トーチオン
+ トーチオフ
+ タッチでオフにする
+ 再生中…
+ 録音中…
+ 録音しました
+ 長押しで録音
+ タッチで録音停止
+ 無効
+ 通常
+ 展開中
+ 常時点灯オン
+ 常時点灯オフ
+ Wi-Fi
+ Wi-Fiオフ
+ 未接続
+ オンにしています…
+
+
+ ステータスバークイック設定タイル
+ ステータスバーにクイック設定タイルを表示するかどうか選択します。
+ プロフィール
+ 機内モード
+ バッテリー状態
+ Wi-Fi
+ Wi-Fi (CMスタイル)
+ Bluetooth
+ GPS
+ GPS (CMスタイル)
+ モバイルデータ
+ ネットワークモード
+ データ使用
+ オーディオプロファイル
+ 画面の明るさ
+ 消灯までの時間
+ 画面の自動回転
+ 自動同期
+ Wi-Fiアクセスポイント
+ トーチ
+ GravityBox
+ スリープ
+ クイック録音
+ 設定
+ 音量
+ 拡張デスクトップ
+ 画面常時点灯
+ スクリーンショット
+
+
+ カラーピッカー
+ 色を押すと適用します。
+
+
+ ステータスバー背景色
+ ステータスバーの背景色を設定します。
+
+
+ スピーチ設定の表示
+ 設定の言語と入力で音声検索とTTSの項目を表示します。(要再起動)
+
+
+ 開発者オプションの表示
+ 開発者オプションを表示します。(要再起動)
+
+
+ ステータスバー設定
+ ステータスバーに関連した設定を変更します。
+ その他の設定
+ 特定のカテゴリに振り分けられない設定を変更します。
+ 全体的な修正
+ MTK6589向けの修正を適用します。必要な場合のみ適用してください。
+
+
+ このアプリについて
+ 開発者: C3C076@XDA タッチで公式スレに移動します。
+ Xposedフレームワーク
+ 開発者: rovo89@XDA タッチで公式スレに移動します。
+ 寄付
+ このアプリが役に立ったなら寄付をお願いします! Xposedフレームワークを作ったrovo89さんへの感謝も忘れないでください。
+
+
+ %s を再起動します。
+ %s をリカバリへ再起動します。
+ %s をbootloaderへ再起動します。
+
+
+ CRT画面オフ効果
+ 画目オフ時にブラウン管テレビをオフにしたときのようなアニメーションを再生します。
+
+
+ 開発者モード
+ 開発者モードアプリを起動します。
+
+
+ デュアルSIM着信音
+ SIM毎に着信音と通地温を設定できるアプリを起動します。
+
+
+ ロック画面設定
+ ロック画面に関連した設定を変更します。
+ ロック画面の背景
+ 背景のスタイル
+ 標準壁紙
+ 塗りつぶし
+ カスタム画像
+ 色をセット
+ ロック画面の背景に使う色をセットします。
+ 画像をセット
+ ロック画面の背景に使う背景画像をセットします。
+ 背景を変更しました。
+ 背景は変更されませんでした。
+ その他
+ ウィジェットの最大化
+ 有効にするとウィジェットのサイズが最大化されます。
+
+
+ 電源設定
+ 電源に関連した設定を変更します。
+
+
+ LED点滅を無効化
+ バッテリー残量が少なく、電源に接続していないときにLEDを点滅させないようにします。
+
+
+ 画面設定
+ 画面に関連した設定を変更します。
+
+
+ 明るさの最小値
+ 明るさの最小値を設定します。手動設定にのみ反映されます。(要再起動)
+
+
+ 自動調整値
+ 明るさの自動調整で使用する値を設定します
+ 値
+ 最大ルクス
+ 明るさ (%d – 255)
+ 指定した値は不正です。
+ %d未満に設定するのはおすすめできません。
+ 255より上には設定できません。
+ 値は低かったり同じにはできません。
+ 最低値が最大値を上回ることはできません。
+ 最大値が最低値を下回ることはできません。
+ %s の値を設定しました。
+ 明るさ設定を保存しました。
+ 明るさ設定は保存されませんでした。
+ セット
+
+
+ ロック画面での回転を有効化
+ 警告: AOSPロック画面がキャリアにより改変されている場合ロックをスキップできてしまう可能性があります。
+
+
+ メニューキーを有効化
+ ロック画面でメニューキーを押すとロックを解除するようにします。(要再起動)
+
+
+ メッセージの画面点灯を修正
+ メッセージは届いたときに画面がオンになるのを防ぎます。(要再起動)
+
+
+ 時計の中央化
+
+
+ メディア設定
+ メディアやオーディオに関連した設定を変更します。
+
+
+ 音量の段階数を増やす
+ 音量の段階数を増やします。(要再起動)
+
+
+ 安全な音量
+ ヘッドフォンでの音量制限を有効/無効化します。
+
+
+ 充電中LEDを無効化
+ 充電中のLED点灯を無効化します。
+
+
+ ハードキーアクション
+ ハードキーのアクションを変更します。
+ メニューキー長押し
+ メニューキーダブルタップ
+ 戻るキー長押し
+ 標準
+ 検索
+ 音声検索
+ 前のアプリに切り替え
+ 前面アプリを終了
+ スリープ
+ アプリ終了の長押し時間
+ 前面アプリの終了をするまでにどれぐらいキーを押しっぱなしにするか設定します。
+ ダブルタップ速度
+ メニューキーダブルタップでどれぐらいの速度のタップを認識するか設定します。
+ %s アプリを終了しました。
+ 終了するアプリがありません。
+ 前のアプリはありません。
+
+
+ 電話設定
+ 電話に関連した設定を変更します。
+
+
+ 着信時の裏返しアクション
+ 着信中に端末を裏返したときのアクションを設定します。
+ 何もしない
+ 着信音を無音化
+ 拒否
+
+
+ 着信時のバイブを無効化
+ 着信したときのバイブを無効化します。
+
+
+ ソフトリブート
+
+
+ 黒一色のHolo背景
+ Holoシステムテーマの背景を黒一色にします。(要再起動)
+
+
+ 行毎のタイル数
+ 行毎に表示するタイル数を設定します。タイルはタイル数に合わせてリサイズされ、縦画面にのみ適用されます。
+
+
+ 曜日を表示
+
+
+ 音量パネルを展開可能にする
+ 音量パネルを展開して様々な音量を調整できるようにします。
+
+
+ 音量パネルを完全に展開する
+ 音量パネルを空きスペースいっぱいに展開するようにします。
+
+
+ 着信音と通知音の音量をリンクする
+ 無効にすると着信音と通知音の音量を別々に設定できます。
+
+
+ クイック設定を自動切り替え
+ 通知がないときにステータスバーを開くとクイック設定を自動表示するようにします。
+
+
+ クイックプルダウン
+ ステータスバーのどの角をプルダウンしてクイック設定を表示するか設定します。
+ オフ
+ 右
+ 左
+
+
+ 音量キーでの画面オンを無効化
+ 音量キーでの画面オンを無効化します。
+
+
+ ステータスバーの色
+
+
+ アイコンの色を変更
+
+
+ ステータスバーアイコンの色
+ ステータスバーアイコンと時計の色を設定します。
+
+
+ 通信アイコンの色
+ 通信アイコンの色を設定します。
+
+
+ クイック設定管理
+
+
+ 通知領域のスタイル
+
+
+ 通知領域の背景
+ 標準の背景
+ 塗りつぶし
+ カスタム画像
+ 色のセット
+ 縦画面の画像をセット
+ 横画面の画像をセット
+ 背景の透過度
+ 背景モード
+ オーバーレイ
+ アンダーレイ
+
+
+ ローミングアイコンの無効化
+ 無効にするとローミング中にRアイコンを非表示にします。
+
+
+ 充電中(%d%%)
+ 充電完了
+ 残り%d%%
+
+
+ サービスなし
+ 機内モードオン
+ 緊急通報のみ
+
+
+ パイ操作
+ パイ操作を有効化
+ ナビキーのサイズ
+ 起動位置
+ 画面左端
+ 画面下端
+ 画面右端
+ 画面上端
+
+
+ ボタンバックライト
+ 標準
+ 無効化
+ 画面オン中は常時点灯
+ ボタンバックライトで通知
+ 実験的です! 通知があるときにボタンのバックライトを点滅させます。通知LEDがない端末でご使用ください。バッテリーを消費します。
+
+
+ ナビバーを非表示
+ パイ操作が有効なときナビバーを非表示にします。(ナビバーがある端末向け、要再起動)
+
+
+ ディザHolo背景
+ ディザ処理した背景に変更します。(要再起動)
+
+
+ ハードキーを無効化
+ パイ操作が有効なときハードキーを無効化します。ハードキーアクションは動作します。(ハードキーのある端末向け)
+
+
+ Holoダークテーマを使用
+ GravityBoxのUIをHoloダークテーマに変更します。
+
+
+ オフ
+ 左上
+ 右上
+ 左下
+ 右下
+
+
+ ボタン上の余白の調整
+
+
+ ローミング警告の無効化
+ ローミング中にメッセージを送信したり電話を発信したりするときの警告を無効化します。
+
+
+ 検索
+ (なし)
+
+
+ クイックアプリ
+ クイックアプリタイル設定
+ メインアプリ
+ 長押しアプリスロット1
+ 長押しアプリスロット2
+ 長押しアプリスロット3
+ 長押しアプリスロット4
+
+
+ GPSオン
+ GPSオフ
+ GPSロック中
+
+
+ メニューキーを常時表示
+
+
+ 着信音モード
+
+
+ 時計設定
+
+
+ AM/PMを非表示
+
+
+ 時計を非表示
+
+
+ 起動領域のサイズ
+
+
+ 透過度管理
+ ステータスバーとナビバーの透過度を設定します。
+ ホームアプリでのステータスバーの透過度
+ ロック画面でのステータスバーの透過度
+ ホームアプリでのナビバーの透過度
+ ロック画面でのナビバーの透過度
+
+
+ アラームアイコンを非表示
+
+
+ 暗くする度合い
+ 画面がもうすぐオフになるときにどれぐらい画面を暗くするか設定します。(要再起動)
+
+
+ 電話
+ タブレット
+
+
+ 明るさ設定
+ 明るさ設定を有効化
+ Android標準の輝度調整機能に対応している場合のみ有効にしてください。明るさ関連の問題が起きた場合は無効にしてください。(要再起動)
+
+
+ 最近のアプリを表示
+
+
+ ホームキー長押しアクション
+
+
+ カスタムアプリ1を起動
+ カスタムアプリ1をセット
+ カスタムアプリ2を起動
+ カスタムアプリ2をセット
+ セットされていません!
+ アプリが見つかりません!
+
+
+ 通知領域の時計でアプリ起動
+ 通知領域の時計をタップした時に日付と時刻ではなく別のアプリを起動するようにします。
+
+
+ GravityBoxフレームワークの応答を待っています…
+ GravityBox(Xposed)フレームワークが応答していません。終了します。
+
+
+ 国際データローミング
+ 国際ローミング中にデータサービスに接続します。
+
+
+ 拡張デスクトップモード
+ 無効
+ ステータスバー非表示
+ ナビバーを非表示
+ 両方非表示
+ 拡張デスクトップ
+ 拡張デスクトップはオンです
+ 拡張デスクトップはオフです
+
+
+ スクリーンショット
+
+
+ メニューを表示
+
+
+ 拡張デスクトップを切り替え
+ 拡張デスクトップモードは無効です!
+
+
+ ナビバー設定
+ ナビバーに関連した設定を変更します。
+ システムの初期値を上書き
+ ナビバーの設定を有効化します。(要再起動)
+ ナビバーの有効化
+ 再起動が必要です。
+ ナビバーの高さ
+ 縦画面での横向きのナビバーの高さを変更します。
+ 横画面での横向きのナビバーの高さを変更します。
+ ナビバーの幅
+ 縦向きのナビバーの幅を変更します。
+ メニューキーを常時表示
+
+
+ 電源メニューにスクリーンショットを追加
+
+
+ ロック画面ターゲット
+ ロック画面ターゲットを有効化
+ ロック画面設定を有効化します。
+ ターゲットアプリ %s
+ ロック解除リングの縦のオフセット
+ ロック解除リングの横のオフセット
+
+
+ 明るさ操作を有効化
+ ステータスバー上でスライドして明るさ調整する
+
+
+ 電話
+ メッセージ
+ モバイルデータ
+
+
+ Unicode変換
+ Unicode文字を通常の文字に変換します。メッセージサイズを削減します。
+ そのままにする
+ エンコードできない文字を変換
+ 全てのUnicode文字を変換
+
+
+ 2Gでの速度低下警告を無効化
+ 2G対応SIMでクイック設定からモバイルデータをオンにしたときの通信速度低下の警告を無効化します。
+
+
+ 標準バッテリー色に合わせる
+ ステータスバーの時計、パーセント表示やサークルバッテリーアイコンの色を標準バッテリーアイコンの色にします。アイコンの色を変更していないときに適用されます。
+
+
+ ネットワークモードのタイル
+ 2G/2G+3G/3G/(LTE)
+ 2G/2G+3G/(LTE)
+ 2G/3G/(LTE)
+
+
+ 画面の向きの自由化
+
+
+ 標準タイルアクションを上書き
+ 選択したタイルのタッチ/長押しアクションを変更します。(要再起動)
+
+
+ ネットワークモードタイルのSIMスロット
+ ネットワークモードタイルでどのSIMスロットに対して適用するか設定します。(%s)
+ SIMスロット1
+ SIMスロット2
+
+
+ 無効
+ 常時
+ 拡張デスクトップオン時
+ 拡張デスクトップでナビバー非表示時
+
+
+ 標準バッテリーアイコンのままにする
+ 他のバッテリーアイコン変更アプリで標準アイコンが変更されたときに使用します。
+
+
+ 接続解除で画面をオンにする
+ 有効にすると電源に接続/接続解除したときに自動的に画面をオンにするようにします。(要再起動)
+
+
+ 音量変更時の効果音を無音化
+ 音量キーで音量を変更したときの効果音を再生しないようにします。
+
+
+ 通話でのバイブ
+ 着信時
+ 着信終了時
+ 着信待機時
+ 発信時45秒毎
+
+
+ タイルの並び替え
+ クイック設定タイルの並び替えをします。
+
+
+ 通知ブロッカー
+ 選択した通知の表示をブロックします。
+ 通知が表示されたときに自動的にリストが表示されるので、
+ 次回からブロックするかどうか選んでください。注意して使ってください。
+ リストの初期化
+ リストを初期化しますか?
+ ブロックした通知を全てブロックしないようにします。
+ (リストが空です)
+
+
+ クイックロック解除
+ 正しいPIN/パスワードを入力したときに自動的にロックを解除します。
+
+
+ 無効
+ 標準
+ 小文字
+ 大文字
+
+
+ ステータスバーのロック
+ デフォルト
+ キーガードオフ時にロック解除
+ ロックする
+
+
+ データ通信量モニター
+ 監視を有効にする
+ データ通信をしているときにデータ通信量モニターを表示します。
+ 位置
+ 自動(時計の位置に従う)
+ 左
+ 右
+ サイズ
+ 中
+ 小
+ 極小
+
+
+ ウィジェット制限の無効化
+ ロック画面にいくつでもウィジェットをおけるようにします。
+
+
+
+ %1$s空き
+
+ %1$s使用中
+ 最近のアプリでのRAMバー
+ 無効
+ 上に表示
+ 下に表示
+
+
+ 最近のアプリキータップアクション
+ 最近のアプリキー長押しアクション
+
+
+ バッテリーアークを表示
+ ロック解除リングハンドルの回りにバッテリーアークを表示します。
+
+
+ トーチトグル
+
+
+ ホームキー長押しでトーチオン
+ 端末をロックしているときにトーチのオンオフをします。ホームキーで画面をオンにする機能がない場合は画面をオンにしないといけません。
+
+
+ 自動的に展開
+
+
+ メニューキー
+ ホームキー
+ バックキー
+ 最近のアプリキー
+ 音量キー
+ その他の設定
+ 長押しアクション
+ タップアクション
+ ダブルタップアクション
+
+
+ ダブルタップを無効化
+
+
+ 単色モード
+ GravityBoxアイコンを使用 (電波強度対応)
+ 標準アイコンを使用(信号強度非対応)
+ 色を適用しない
+
+
+ アプリランチャー
+ HWキーアクションやナビバーのボタンとして使える、アプリを8個まで登録できるダイアログです。
+ アプリスロット %d
+ アプリが登録されていません。GravityBox / アプリランチャーで登録してください。
+
+
+ アプリランチャーキー
+
+
+ アプリランチャーを表示
+
+
+ カスタムキーの表示
+ 無効
+ 検索
+ アプリランチャー
+
+
+ パイの色
+ 背景色
+ 前景色
+ アウトラインの色
+ 選択したキーの色
+ 文字色
+ 色の初期化
+
+
+ 不明な発信者画像を有効化
+ 不明な発信者用の画像をセット
+ 変更しました。
+ 変更しませんでした。
+
+
+ 20以下の明るさに対応していない画面です。 画面が点灯しなくなった場合、
+ 音量上キーを7秒以上押し続けると明るさを初期化できるので最低値を修正してください。
+
+
+ 基本
+ ナビキー
+ 色
+ サイズ
+
+
+ ナビバーの色を有効化
+ 無効化後は再起動してください。
+ ナビキーの色
+ ナビキーのグロー色
+ ナビバーの背景色
+
+
+ ロック画面シェードを無効化
+ ロック画面のシェードをなくします。
+
+
+ 透過処理モード
+ 変更後は再起動してください。
+ 無効
+ ステータスバー
+ ナビバー
+ 両方
+
+
+ セカンダリ電波アイコン色
+ オレンジの電波アイコンを上書きします。
+ セカンダリデータ通信色
+ セカンダリデータ通信アクティビティの色を設定します。
+
+
+ ステータスアイコンスタイル
+ マナーモードやアラーム等のアイコンのスタイルを変更します。
+
+
+ バックキーダブルタップ
+
+
+ ホーム
+ 戻る
+
+
+ タイルのスタイル
+ GravityBoxで追加したタイルにのみ適用されます。(標準タイルは変更されません)
+
+
+ ボタン下の余白を調整
+
+
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
new file mode 100644
index 0000000000..ee01f3c6d2
--- /dev/null
+++ b/res/values-nl/strings.xml
@@ -0,0 +1,615 @@
+
+
+
+
+
+ GravityBox
+
+ Batterij indicator stijl
+ Standaard batterij indicator
+ Cirkel battery
+ Cirkel batterij met percentage
+ Batterij percentage tekst
+ Geen
+
+ Volume knoppen slaan liedje over
+ Liedjes overslaan op lang indrukken van volumetoetsen terwijl het scherm uitgeschakeld is
+
+ Lage batterij waarschuwing
+ Pop-up en geluid
+ Alleen Pop-up
+ Alleen geluid
+ Uit
+
+ Verandering zal na een herstart worden toegepast
+
+ Automatisch signaal iconen verbergen
+ Automatisch verbergen van signaal iconen voor geselecteerde SIM-slots als SIM-kaart niet is geplaatst, schakelt \ "SIM niet geplaatst \" meldingen
+ Automatisch verbergen SIM Slot 1
+ Automatisch verbergen SIM Slot 2
+ Meldingen uitschakelen
+ \"SIM niet geplaatst\" meldingen uitgeschakeld
+
+ Geavanceerde herstart menu
+ Maakt geavanceerde herstart menu met opties om te herstarten naar recovery
+ Recovery
+ Bootloader
+
+ Volume knop wijzer controle
+ Bestuurt wijzer door gebruik van volumetoetsen in tekstvelden
+ Uitgeschakeld
+ Volume omhoog/omlaag beweegt wijzer links/rechts
+ Volume uomhoog/omlaag beweegt wijzer rechts/links
+
+ Verwijder alle recente taken
+
+ Fix Date&Time settings crash
+ Enable in case you experience crash while accessing Date&Time settings (requires reboot)
+
+ Fix caller ID for phone
+ Enable in case your contact is not matched when receiving call (requires reboot)
+ After reboot, you should clear and re-add your contacts for change to take effect! Use Settings / Applications / All - to clear data of Contacts provider.
+
+ Fix caller ID for messages
+ Enable in case you experience splitted conversation threads for the same contact (requires reboot)
+ After reboot, you should delete all splitted threads in messaging app for change to take effect!
+
+ Fix calendar app
+ Enable in case you experience periodic self-turning on of the screen (requires reboot)
+
+ Belangrijk
+
+ Volledig scherm beller foto
+ Geeft volledigscherm beller foto op inkomende oproepen
+
+
+ Synchr. aan
+ Synchr. uit
+ Hotspot aa
+ Hotspot uit
+ Zaklamp aan
+ Zaklamp uit
+ Raak aan om uit te zetten
+ Spelen…
+ Opnemen…
+ Opgenomen
+ Lang ingedrukt om op te nemen
+ Raak aan om te stoppen met opnemen
+ Uitgeschakeld
+ Normaal
+ Uitgebreid
+ Wakker Blijven aan
+ Wakker Blijven uit
+
+
+ Statusbar QuickSettings tegels
+ Maakt het mogelijk om QuickSettings tegels weergeven of verbergen in statusbar
+ Gebruikers profiel
+ Vliegtuig modus
+ Batterij status
+ Wi-Fi
+ Bluetooth
+ GPS
+ GPS (CM stijl)
+ Mobiele data
+ Netwerk modus
+ Data gebruik
+ Geluid profielen
+ Helderheid
+ Scherm time-out
+ Auto rotatie
+ Synchronizatie
+ Wi-Fi Access Point
+ Zaklamp
+ GravityBox
+ Slaap
+ Snel Opnemen
+ Instellingen
+ Volume
+ Uitgebrijd desktop
+ Blijf Wakker
+ Scherm Opname
+
+
+ Kleuren kiezer
+ Druk op een kleur om toe te passen
+
+
+ Statusbar achtergrond kleur
+ Maakt het mogelijk om statusbar achtergrond kleur en transparantie instellen
+
+
+ Fix spraak instellingen
+ Ontsluit voice search en text-to-speech instellingen in Taal&Invoer (vereist herstart)
+
+
+ Geavanceerde ontwikkelaars opties
+ Ontgrendelt geavanceerde developer opties (vereist herstart)
+
+
+ Statusbalk tweaks
+ Bevat verschillende statusbalk tweaks
+ Diverse tweaks
+ Bevat alle andere tweaks die niet in bepaalde categorie horen
+ Generale fixes
+ Bevat algemene MTK6589 specifieke fixes. Gebruik alleen als nodig is.
+
+
+ About
+ Coded by C3C076@XDA. Touch to visit official thread.
+ Xposed framework
+ Coded by rovo89@XDA. Touch to visit official thread.
+ Donate
+ Donate to me if you think this app is worth it! Also consider donating to rovo89 for his excellent Xposed framework.
+
+
+ Uw %s wilt herstarten.
+ Uw %s wilt herstarten in recovery.
+ Uw %s wilt herstarten in bootloader.
+
+
+ CRT scherm uit effect
+ Stelt animatie die oude CRT simuleert off effect bij het uitzetten van het scherm
+
+
+ Ingenieurs modus
+ Lanceert ingenieurs modus applicatie
+
+
+ Dual SIM Ringer
+ Launches application that allows to set ringtone and notification sounds separately for each SIM
+
+
+ Vergendelscherm tweaks
+ Bevat verschillende vergendelscherm tweaks
+ Vergrendelscherm achtergrond
+ Achtergrond stijl
+ Standaard achtergrond
+ Kleur vullen
+ Eigen foto
+ Set custom color
+ Allows to set custom background color for lockscreen
+ Set custom image
+ Allows to set custom background image for lockscreen
+ Achtergrond veranderd
+ Achtergrond niet veranderd
+ Andere
+ Maximize widgets
+ When enabled, lockscreen widgets will be maximized by default
+
+
+ Power tweaks
+ Contains various power related tweaks
+
+
+ Disable LED flashing
+ Disables intrusive LED flashing when battery is low and not charging
+
+
+ Display tweaks
+ Contains various display tweaks
+
+
+ Minimum brightness level
+ Allows to set minimum brightness level. Applies to manual brightness setting. (requires reboot)
+
+
+ Autobrightness levels
+ Allows to set ambient light levels and corresponding LCD backlight values
+ Level
+ Lux max
+ Brightness (%d – 255)
+ Specified number is not valid
+ It is not recommended to set brightness below %d
+ Brightness cannot be greater than 255
+ Values cannot be lower or equal to zero
+ Values on lower levels cannot be greater than values on higher levels
+ Values on higher levels cannot be smaller than values on lower levels
+ Values for %s set
+ New autobrightness configuration saved
+ Autobrightness configuration was NOT saved
+
+
+ Enable lockscreen rotation
+ WARNING: can swap unlock ring targets on some devices in case AOSP lockscreen has been modified by vendor
+
+
+ Enable menu key
+ Allows menu key to be used for quick-unlocking the device while on lockscreen (requires reboot)
+
+
+ Fix messaging wakelock
+ Prevents screen from turning on when new message arrives (requires reboot)
+
+
+ Center clock
+
+
+ Media tweaks
+ Contains various tweaks for media and audio system
+
+
+ More music volume steps
+ Adds more volume steps for music stream (requires reboot)
+
+
+ Safe headset media volume
+ Activates or deactivates safe headset media volume feature
+
+
+ Disable charging LED
+ Disables LED while charging
+
+
+ Hardware key actions
+ Allows to set custom actions on hardware keys
+ Menu key long-press action
+ Menu key double-tap action
+ Back key long-press action
+ Default
+ Search
+ Voice search
+ Switch to previous app
+ Kill foreground app
+ Go to sleep
+ Kill app long-press delay
+ Applies to Kill foreground app action. Defines for how long key must be pressed to trigger kill
+ Double-tap speed
+ Applies to Menu key double-tap action. Defines how fast key must be tapped to trigger double-tap
+ %s killed
+ There\'s nothing to kill
+ No previous app found
+
+
+ Phone tweaks
+ Contains various telephony tweaks
+
+
+ Flip action while ringing
+ Allows to define action to be performed when device is flipped face down while ringing
+ Do nothing
+ Mute ringer
+ Dismiss call
+
+
+ Disable vibrate on call connect
+ Disables vibration that is triggered when call is connected
+
+
+ Soft reboot
+
+
+ Solid black background
+ Use solid black background for default Holo system theme instead of black-grey gradient (requires reboot)
+
+
+ Tiles per row
+ Defines how many QuickSettings tiles to display per one row. Tiles will be resized accordingly. Applies to portrait mode.
+
+
+ Show day of week
+
+
+ Expandable volume panel
+ Enables expandable volume panel with ability to set volumes for different streams
+
+
+ Link ringtone & notifications volumes
+ When disabled, volumes for ringtone and notifications can be set independently
+
+
+ Auto-switch QuickSettings
+ QuickSettings will show automatically when status bar is pulled down while there are no notifications
+
+
+ Quick pulldown
+ Edge of the status bar pulls down QuickSettings
+ Off
+ Right
+ Left
+
+
+ Disable volume rocker wake
+ For devices like Jiayu G3s,G4 where volume keys turn on screen
+
+
+ Statusbar colors
+
+
+ Enable icon colors
+
+
+ Statusbar icon color
+ Sets color for statusbar icons and clock
+
+
+ Data activity color
+ Sets color for data activity indicators
+
+
+ QuickSettings management
+
+
+ Notification drawer style
+
+
+ Notification drawer background
+ Default background
+ Color fill
+ Custom image
+ Set background color
+ Set portrait image
+ Set landscape image
+ Background transparency
+ Background mode
+ Overlay
+ Underlay
+
+
+ Disable roaming indicators
+ When disabled, R indicator will not be visible while roaming. Use with caution.
+
+
+ Charging (%d%%)
+ Charged
+ %d%% remaining
+
+
+ No service
+ Airplane mode on
+ Emergency calls only
+
+
+ Pie controls
+ Enable pie controls
+ Navigation key size
+ Trigger positions
+ Left screen border
+ Bottom screen border
+ Right screen border
+ Top screen border
+
+
+ Button backlight mode
+ Default
+ Disable button backlight
+ Always on while screen is on
+ Button backlight notifications
+ EXPERIMENTAL! Blinks button backlight when there is a notification. Use in case your device lacks notification LED. May consume battery.
+
+
+ Hide navigation bar
+ Hides navigation bar while Pie Controls are enabled (for devices that have navigation bar, requires reboot)
+
+
+ Dithered Holo background
+ Replaces standard Holo background with dithered one to suppress color banding (requires reboot)
+
+
+ Disable hardware keys
+ Disables MENU, BACK, HOME while Pie Controls are enabled. HW keys actions will still work. (for devices having HW keys)
+
+
+ Use Holo Dark theme
+ Switches GB UI to use Holo Dark theme instead of Holo Light
+
+
+ Off
+ Top left
+ Top right
+ Bottom left
+ Bottom right
+
+
+ Adjust top margin
+
+
+ Disable roaming warnings
+ Disables roaming warnings when sending messages or making phone calls while roaming
+
+
+ Search
+ (None)
+
+
+ Quick App
+ QuickApp tile settings
+ Main application
+ Long-press app slot 1
+ Long-press app slot 2
+ Long-press app slot 3
+ Long-press app slot 4
+
+
+ GPS on
+ GPS off
+ GPS locked
+
+
+ Always show menu button
+
+
+ Ringer mode
+
+
+ Clock settings
+
+
+ Hide AM/PM
+
+
+ Hide clock
+
+
+ Trigger size
+
+
+ Transparency management
+ Statusbar transparency for launcher
+ Statusbar transparency for lockscreen
+ Navbar transparency for launcher
+ Navbar transparency for lockscreen
+
+
+ Hide alarm icon
+
+
+ Screen dim level
+ Amount of brightness for dim state - when screen is about to be turned off (requires reboot)
+
+
+ phone
+ tablet
+
+
+ Brightness settings
+ Enable brightness settings
+ Use only in case your device supports standard Android brightness features. Keep disabled if you experience brightness related issues. (requires reboot)
+
+
+ Show recent apps
+
+
+ Home key long-press action
+
+
+ Launch custom app 1
+ Set custom app 1
+ Launch custom app 2
+ Set custom app 2
+ No custom app assigned!
+ Custom app not found!
+
+
+ Notification panel clock app
+ Links notification panel clock to a specified app instead of Date&Time settings
+
+
+ Waiting for response from GravityBox system framework…
+ GravityBox system framework not responding. Exiting.
+
+
+ National data roaming
+ Connect to data services when nationally roaming
+
+
+ Expanded desktop mode
+ Disabled
+ Hide statusbar
+ Hide navigation bar
+ Hide both
+ Expanded desktop
+ Expanded desktop is ON
+ Expanded desktop is OFF
+
+
+ Screenshot
+
+
+ Show menu
+
+
+ Toggle expanded desktop
+ Expanded desktop mode is disabled!
+
+
+ Navigation bar tweaks
+ Contains various navigation bar related tweaks
+ Override system defaults
+ Master switch for navigation bar tweaks (requires reboot)
+ Enable navigation bar
+ Requires reboot
+ Navigation bar height
+ Applies to horizontal navigation bar and portrait orientation
+ Applies to horizontal navigation bar and landscape orientation
+ Navigation bar width
+ Applies to vertical navigation bar
+ Always show menu key
+
+
+ Screenshot in power menu
+
+
+ Unlock ring settings
+ Enable unlock ring targets
+ Master switch for unlock ring targets
+ Target application %s
+ Unlock ring vertical offset
+ Unlock ring horizontal offset
+
+
+ Enable brightness control
+ Adjusts brightness by sliding over statusbar
+
+
+ Telephony
+ Messaging
+ Mobile data
+
+
+ Strip unicode
+ Converts unicode characters to normal characters. Decreases overall message size.
+ Leave characters intact
+ Strip non-encodable characters
+ Strip all unicode characters
+
+
+ Disable slow 2G data warning
+ Disables warning about slow data speed when turning on mobile data in QuickSettings for SIM in 2G mode
+
+
+ Follow stock battery color
+ Makes statusbar clock, percentage and circle battery use the color of stock battery icon. Applies when icon coloring is off.
+
+
+ Network mode tile mode
+ 2G/2G+3G/3G/(LTE)
+ 2G/2G+3G/(LTE)
+ 2G/3G/(LTE)
+
+
+ Allow all rotations
+
+
+ Override default tile behaviour
+ Overrides touch/long-touch behaviour for selected tiles (requires reboot)
+
+
+ Network mode tile SIM slot
+ Defines SIM slot to which network mode tile applies (%s)
+ SIM slot 1
+ SIM slot 2
+
+
+ Never
+ Always
+ When expanded desktop on
+ When expanded desktop hides navigation bar
+
+
+ Leave stock battery icon intact
+ Use in case stock battery icon was replaced with 3rd party battery mod
+
+
+ Unplug turns on screen
+ If enabled, the screen will come on when you plug/unplug usb/power/whatever (requires reboot)
+
+
+ Mute volume adjust sound
+ Disables sound played when adjusting volume using volume keys
+
+
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index c3475f6e1c..50a3ee240c 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -2,48 +2,48 @@
GravityBoxStyl wskaźnika baterii
- Standardowa Android
- Koło z procentami
- Tekstowa - procenty
- Standardowa ikona z procentami
+ Standardowy
+ Koło
+ Koło z procentami
+ Tekstowy wskaźnik bateriiBrak
- Pomin utwór przyciskiem głośności
- Pomija odtwarzany utwór podczas gdy ekran jest wyłączony
- Ostrzeżenie baterii
- Pop-up i dźwięk
- Tylko pop-up
+ Pomiń utwór przyciskiem głośności
+ Długie przyciśnięcie pomija odtwarzany utwór gdy ekran jest wyłączony
+ Ostrzeżenie o rozładowanej baterii
+ Wyskakujące powiadomienie i dźwięk
+ Tylko wyskakujące powiadomienieTylko dźwięk
- Wyłącz
- Zmiany zastosowanę będą po restarcie
+ Wyłączone
+ Zmiany będą zastosowane po restarcieAuto-ukrywanie ikon sygnału
- Auto-ukrywa ikony sygnału dla slotów SIM gdy karta SIM nie została włożona do slotu, blokuje komunikaty \"SIM not inserted\"
- Auto-ukryj Slot SIM nr1
- Auto-ukryj Slot SIM nr2
+ Automatycznie ukrywa ikony sygnału dla wybranego gniazda SIM gdy karta SIM nie została włożona oraz blokuje komunikaty \"Brak karty SIM\"
+ Auto-ukrywanie dla gniazda SIM 1
+ Auto-ukrywanie dla gniazda SIM 2Zablokuj powiadomienia
- \"SIM not inserted\" notifications disabled
+ Powiadomienia \"Brak karty SIM\" zablokowaneZaawansowane menu wyłączaniaWłącza dodatkowe opcje dotyczące restartu telefonu (Recovery)Recovery
- Kotroluj kursor pryciskiem głośności
- Pozwala przesuwać kursor przyciskami głośności dla opcji tekstowych
+ Bootloader
+ Kotroluj kursor przyciskiem głośności
+ Pozwala przesuwać przyciskami głośności kursor w polach tekstowychWyłączGłośność góra/dół porusza w lewo/prawoGłośność góra/dół porusza w prawo/lewoWyczyść wszystkie zadania
- Pokazuje przycisk zaykania wszystkich aktywnych procesów w podglądzie ostatnich aplikacji
- Napraw błędy z ustawieniami Daty i Czasu
- Włącz gdy masz problemu z ustawieniami czasu lub daty (wymagany reboot)
- Napraw błędne rozpoznawianie dzwoniącego
- Włącz gdy kontakt z książki nie jest rozpoznawany podczas dzwonienia telefonu (wymagany reboot)
- Po restarcie, usuń i dodaj ponownie kontakty aby zmiana dała efekt! Użyj "Ustawiuenia systemu / Aplikacje / Wszystkie" - usuń tam dane aplikacji "Contacts provider".
+ Napraw błędy w ustawieniach Daty i Czasu
+ Włącz w przypadku wystąpienia błędu podczas dostępu do ustawień Daty i Czasu (wymagany restart)
+ Napraw błędną identyfikację dzwoniącego
+ Włącz gdy kontakt z książki nie jest rozpoznawany podczas dzwonienia telefonu (wymagany restart)
+ Po restarcie usuń i dodaj ponownie kontakty aby zmiana dała efekt! W menu Ustawienia / Aplikacje / Wszystkie - usuń dane aplikacji Contacts provider.Napraw ID nadawcy w wiadomościach
- Włącz gdy w Wiadomościach pojawiają się osobne wątki dla tego samego nadawcy (wymagany reboot)
- Po restarcie, usuń podwójne wątki aby zmiana dała efekt!
+ Włącz gdy w Wiadomościach pojawiają się osobne wątki dla tego samego nadawcy (wymagany restart)
+ Po restarcie usuń podwójne wątki aby zmiana dała efekt!Napraw aplikację kalendarza
- Włącz jesli aplikacja powoduje samoczynne włączanie się ekranu (wymagany reboot)
+ Włącz jeśli aplikacja powoduje samoczynne włączanie się ekranu (wymagany restart)Ważne
- Fotografia dzwoniącego na całym ekranie
- Fotografia dzwoniącego na całym ekranie podczas nadchodzącej rozmowy
+ Fotografia dzwoniącego na pełnym ekranie
+ Wyświetla fotografię dzwoniącego na pełnym ekranie podczas rozmowy przychodzącejWłączono synchronizacjęWyłączono synchronizacjęWi-Fi AP włączony
@@ -51,47 +51,71 @@
Latarka włączonaLatarka wyłączonaDotknij aby wyłączyć
- Kafelki Szybkich Ustawień w centrum notyfikacji
- Dostosuj wyświetlane kafelki w centrum notyfikacji
+ Odtwarzam...
+ Nagrywam...
+ Nagrano
+ Przytrzymaj aby nagrać
+ Dotknij aby zatrzymać
+ Wyłączony
+ Normalny
+ Rozszerzony
+ Blokowanie uśpienia włączone
+ Blokowanie uśpienia wyłączone
+ Wi-Fi
+ Wi-Fi Wyłączone
+ Nie podłączony
+ Włączanie...
+ Kafelki Szybkich Ustawień
+ Pozwala wyświetlić lub ukryć Kafelki Szybkich Ustawień na pasku statusuProfil użytkownika
- Tryb samolot.
+ Tryb samolotowyStan bateriiWi-Fi
+ Wi-Fi (styl CM)BluetoothGPS
- Danie sieci kom.
+ GPS (styl CM)
+ Transmisja danychTryb sieciUżycie danych
- Profile audio
+ Profile dźwiękoweJasność
- Screen timeout
- Auto-rotacja
+ Limit czasu wyświetlacza
+ Auto-Obracanie ekranuSynchronizacja
- Wi-Fi AP
+ Punkt dostępowy Wi-FiLatarkaGravityBox
+ Uśpienie
+ Dyktafon
+ Ustawienia
+ Głośność
+ Rozszerzony pulpit
+ Blokowanie uśpienia
+ Zrzut ekranuWybór koloruNaciśnij na kolor aby ustawićKolor tła paska statusu
- Umożliwia wybór tła i przeźroczystości paska statusu
+ Umożliwia wybór tła i przezroczystości paska statusuNapraw ustawienia mowy
- Odblokowuje wyszukiwanie głosowe i zamianę tekstu na mowę w ustawieniach "Język, klawiatura i głos" (wymagany reboot)
+ Odblokowuje Wyszukiwanie Głosowe i Przetwarzanie Tekstu Na Mowę w ustawieniach Język, Klawiatura, Głos (wymagany restart)Zaawansowane opcje deweloperskie
- Odblokowuje dodatkowe opcje deweloperskie (wymagany reboot)
+ Odblokowuje dodatkowe opcje deweloperskie (wymagany restart)Ustawienia paska statusuZawiera różne dodatkowe ustawienia dla paska statusu
- Różne
- Zawiera wszystkie pozostałe ustwaienia bez konkretnej kategorii
- Ogólne
- Zawiera ustawienia dla telefonów z procesorem MTK6589. Używać w razie konieczności.
- O palikacji
+ Różne ulepszenia
+ Zawiera wszystkie pozostałe ulepszenia bez konkretnej kategorii
+ Ogólne poprawki
+ Zawiera poprawki dla telefonów z procesorem MTK6589. Używać w razie konieczności.
+ O aplikacjiStworzone przez C3C076@XDA. Dotknij aby przejść do oficjalnego wątku na forum XDA.Xposed frameworkStworzone przez rovo89@XDA. Dotknij aby przejść do oficjalnego wątku na forum XDA.
- Wspomóż
+ DarowiznaWspomóż mnie jeśli uważasz, że program jest tego warty! Wspomóż też rovo89 za jego wspaniały Xposed framework.
- Telefon zostanie zrestartowany
- Telefon zostanie zrestartowany do trybu Recovery
+ Twój %s zostanie zrestartowany
+ Twój %s zostanie zrestartowany do trybu Recovery.
+ Twój %s zostanie zrestartowany do trybu Bootloader.Efekt wyłączenia ekranu CRTWłącza animację imitującą efekt wyłączania ekranu CRT podczas wygaszania ekranuTryb inżynierski
@@ -99,7 +123,7 @@
Dzwonki Dual SIMUruchamia aplikację pozwalającą na przypisanie innych dzwonków dla każdej karty SIMUstawienia ekranu blokady
- Zawiera dodatkowe ustawienia dla ekranu blokday
+ Zawiera dodatkowe poprawki ustawień ekranu blokadyTło ekranu blokadyStyl tłaDomyślna tapeta
@@ -109,13 +133,373 @@
Pozwala ustawić własny kolor ekranu blokadyUstaw własny obrazPozwala ustawić własną tepetę ekranu blokady
- Tło zmienione
+ Tło zostało zmienioneTło nie zostało zmienioneInneMaksymalizuj widżety
- Włączone, zmaksymalizuje widżety na ekranie blokady
- Ustawienia zasilania
- Zawiera dodatkowe ustawienia związane z zasilaniem
+ Gdy włączone, widżety będą domyślnie zmaksymalizowane
+ Poprawki ustawień zasilania
+ Zawiera dodatkowe poprawki związane z zasilaniemWyłącz mruganie diody LED
- Blokuje migającą diodę LED gdy telefon nie jest ładowany i bliski wyczerpania baterii
+ Blokuje migającą diodę LED gdy bateria jest bliska wyczerpania a telefon nie jest podłączony do ładowarki
+ Poprawki wyświetlania obrazu
+ Zawiera dodatkowe poprawki związane z wyświetlaniem obrazu
+ Minimalny poziom jasności
+ Pozwala ustawić minimalny poziom jasności. Dotyczy ręcznego ustawienia jasności. (wymagany restart)
+ Automatyczny poziom jasności
+ Umożliwia ustawienie poziomu oświetlenia otoczenia oraz odpowiadających im wartości podświetlenia ekranu LCD
+ Poziom
+ Lux max
+ Jasność (%d – 255)
+ Wybrana wartość jest niepoprawna
+ Nie jest zalecane, aby ustawić jasność poniżej %d
+ Jasność nie może być większa niż 255
+ Wartości nie mogą być mniejsze lub równe zeru
+ Wartości minimalnych ustawień nie mogą być większe niż wartości maksymalnych ustawień
+ Wartości maksymalnych ustawień nie mogą być mniejsze niż wartości minimalnych ustawień
+ Ustawiono wartości dla %s
+ Nowa konfiguracja auto-jasności została zapisana
+ Konfiguracja auto-jasności NIE została zapisana
+ Ustaw
+ Włącz obracanie Ekranu blokady
+ UWAGA: Może zamienić cele na pierścieniu odblokowania w niektórych urządzeniach, gdy ekran blokady AOSP został zmodyfikowany przez sprzedawcę
+ Włącz klawisz menu
+ Umożliwia wykorzystanie klawisza menu do szybkiego odblokowania urządzenia na Ekranie Blokady (wymagany restart)
+ Napraw wybudzanie od Wiadomości
+ Zabezpiecza przed włączaniem się ekranu podczas odbierania nowych wiadomości (wymagany restart)
+ Wycentruj zegar
+ Poprawki multimediów
+ Zawiera dodatkowe poprawki związane z multimediami i dźwiękiem
+ Więcej kroków gł. dla muzyki
+ Dodaje więcej kroków głośności dla strumienia muzyki (wymagany restart)
+ Bezpieczna głośność dla słuchawek
+ Włącza lub wyłącza funkcję bezpiecznego poziomu głośności przy korzystaniu ze słuchawek
+ Wyłącz sygn. LED przy ładowaniu
+ Wyłącza sygnalizację LED podczas ładowania
+ Działanie przycisków sprzętowych
+ Pozwala ustawić niestandardowe działania przycisków sprzętowych
+ Akcja długiego naciśnięcia MENU
+ Akcja podwójnego przyciśnięcia MENU
+ Akcja długiego naciśnięcia BACK
+ Domyślne
+ Szukaj
+ Wyszukiwanie głosowe
+ Przełącz do poprzedniej aplikacji
+ Zakończ uruchomione procesy
+ Uśpij
+ Czas naciśnięcia do zakończenia procesów
+ Dotyczy zakańczania działających procesów. Określa jak długo musi być naciśnięty przycisk aby wywołać akcję.
+ Szybkość podwójnego przyciśnięcia
+ Dotyczy podwójnego przyciśnięcia Menu. Określa jak szybko należy dwukrotnie przycisnąć przycisk.
+ Aplikacja %s zakończona
+ Nie ma nic do zakończenia
+ Brak poprzedniej aplikacji
+ Poprawki dotyczące Telefonu
+ Zawiera dodatkowe poprawki dotyczące Telefonu
+ Akcja odwrócenia podczas dzwonienia
+ Pozwala określić akcję do wykonania gdy urządzenie zosatanie odwrócone wyświetlaczem w dół podczas dzwonienia.
+ Nic nie rób
+ Wycisz dzwonek
+ Odrzuć połączenie
+ Miękki restart
+ Jednolite czarne tło
+ Użyj jednolitego czarnego tła zamiast czarno-szarego gradientu dla domyślnego tematu Holo (wymagany restart)
+ Ilość kafelek w rzędzie
+ Określa ile Kefelek Szybkich Ustawień wyświetlić w jednym rzędzie. Rozmiar Kafelek zostanie odpowiednio zmieniony. Dotyczy trybu Portret.
+ Pokaż dzień tygodnia
+ Rozszerzony panel głośności
+ Uaktywnia rozszerzony panel głośności z możliwością ustawienia głośności dla różnych źródeł
+ W pełni rozszerzalny panel głośności
+ Pozwala by panel głośności zajął całe przewidziane miejsce
+ Połączone ust. głośności dzwonka i powiadomień
+ Po wyłączeniu głośność dzwonka i powiadomień można ustawiać niezależnie
+ Autom. Szybkie Ustawienia
+ Szybkie Ustawienia pokażą się automatycznie, gdy pasek stanu zostanie wysunięty w dół przy braku powiadomień
+ Szybkie wysuwanie w dół
+ Krawędź paska stanu ściąga Szybkie Ustawienia
+ Wyłączone
+ Prawa
+ Lewa
+ Wyłącz wybudzanie klaw. głośności
+ Dla urządzeń typu Jiayu G3s,G4 gdzie klawisze głośności włączają wyświetlacz
+ Kolory paska statusu
+ Włącz kolory ikon
+ Kolory ikon paska statusu
+ Ustawia kolor dla ikon paska statusu i zegara
+ Kolor wskaźnika transmisji danych
+ Ustawia kolor dla wskaźników aktywności transmisji danych
+ Zarządzanie Szybkimi Ustawieniami
+ Styl Panelu Powiadomień
+ Tło Panelu Powiadomień
+ Domyślne tło
+ Kolorowe wypełnienie
+ Własny obrazek
+ Ustaw kolor tła
+ Ustaw obraz (portret)
+ Ustaw obraz (panorama)
+ Przezroczystość tła
+ Tryb obrazu tła
+ Pokrycie
+ Podkład
+ Wyłącz wskaźniki roamingu
+ Gdy wyłączone, wskaźnik R nie będzie widoczny podczas roamingu. Używaj rozważnie.
+ Ładowanie (%d%%)
+ Naładowana
+ pozostało %d%%
+ Brak usługi
+ Włączony Tryb Samolotowy
+ Tylko połączenia alarmowe
+ Interfejs Kontroli Pie
+ Włącz interfejs kontroli Pie
+ Wielkość klawisza nawigacji
+ Pozycja aktywnej strefy
+ Lewy margines ekranu
+ Dolny margines ekranu
+ Prawy margines ekranu
+ Górny margines ekranu
+ Tryb podświetlania przycisków
+ Domyślny
+ Wyłączone podświetlanie
+ Włącz gdy aktywny ekran
+ Powiadamianie podświetleniem
+ EKSPERYMENTALNE! Podświetlenie przycisków miga gdy przychodzi powiadomienie. Zastosowanie w przypadku urządzeń nie posiadających diody powiadomień. Może szybciej zużywać baterię.
+ Ukryj belkę nawigacji
+ Ukrywa pasek nawigacyjny gdy interfejs Pie jest włączony (dla urządzeń, które posiadają pasek nawigacyjny, wymaga restartu)
+ Wygładzone tło Holo
+ Zastępuje standardowe tło Holo wygładzonym (wymagany restart)
+ Wyłącz klawisze sprzętowe
+ Wyłącza MENU, BACK, HOME gdy interfejs Pie jest włączony. Sprzętowe klawisze będą nadal działać. (w przypadku urządzeń posiadających klawisze sprzętowe)
+ Użyj ciemnego motywu Holo
+ Przełącza GB UI na ciemny motyw Holo zamiast jasnego
+ Wyłącz
+ Górny Lewy
+ Górny Prawy
+ Dolny Lewy
+ Dolny Prawy
+ Ustaw górny margines
+ Wyłącz ostrzeżenia o roamingu
+ Wyłącza ostrzeżenia podczas wysyłania wiadomości lub wykonywania połączeń telefonicznych w roamingu
+ Wyszukaj
+ (Żadna)
+ Szybkie uruch. Aplikacji
+ Ustawienia szybkiego uruch. Aplikacji
+ Aplikacja Główna
+ Naciśnij długo slot 1 apl.
+ Naciśnij długo slot 2 apl.
+ Naciśnij długo slot 3 apl.
+ Naciśnij długo slot 4 apl.
+ GPS włączony
+ GPS wyłączony
+ GPS zablokowany
+ Zawsze pokazuj przycisk menu
+ Tryb dzwonka
+ Ustawienia Zegara
+ Ukryj AM/PM
+ Ukryj Zegar
+ Wielkość przełącznika Pie
+ Ustawienia przezroczystości
+ Zarządza przezroczystością paska statusu i paska nawigacyjnego
+ Pasek statusu startera
+ Pasek statusu ekranu blokady
+ Pasek nawigacji startera
+ Pasek nawigacji ekranu blokady
+ Ukryj ikonę alarmu
+ Poziom przyciemnienia ekranu
+ Poziom niskiej jasności, zanim ekran zostanie całkiem wygaszony (wymagany restart)
+ telefon
+ tablet
+ Ustawienia jasności
+ Włącz ustawienia jasności
+ Należy używać tylko w przypadku, gdy urządzenie obsługuje standardowe funkcje jasności systemu Android. Pozostaw wyłączone w przypadku wystąpienia problemów związanych z jasnością. (wymagany restart)
+ Pokaż ostatnie aplikacje
+ Akcja długiego naciśnięcia HOME
+ Uruchom własną aplikację 1
+ Ustaw własną aplikację 1
+ Uruchom własną aplikację 2
+ Ustaw własną aplikację 2
+ Nie przypisano własnej aplikacji!
+ Nie znaleziono własnej aplikacji!
+ Link do Zegara
+ Link zegara na panelu powiadomień do aplikacji Zegara zamiast do ustawień Daty i Czasu
+ Czekam na odpowiedź z GravityBox framework...
+ GravityBox framework nie odpowiada. Kończenie.
+ Dane w roamingu krajowym
+ Połącz z usługami transmisji danych podczas roamingu krajowego
+ Tryb pulpitu rozszerzonego
+ Wyłączony
+ Ukryj pasek stanu
+ Ukryj pasek nawigacyjny
+ Ukryj obydwa
+ Rozszerzony pulpit
+ Rozszerzony pulpit jest Włączony
+ Rozszerzony pulpit jest Wyłączony
+ Zrzut ekranu
+ Pokaż menu
+ Przełącz rozszerzony pulpit
+ Tryb pulpitu rozszerzonego jest wyłączony!
+ Poprawki paska nawigacyjnego
+ Zawiera różne poprawki związane z paskiem nawigacyjnym
+ Zastępowanie domyślnych ust. systemowych
+ Główny wyłącznik poprawek paska nawigacyjnego (wymagany restart)
+ Włącz pasek nawigacyjny
+ Wymaga ponownego uruchomienia
+ Wysokość paska nawigacji
+ Dotyczy orientacji pionowej
+ Dotyczy poziomego paska nawigacji i orientacji poziomej
+ Szerokość paska nawigacji
+ Dotyczy orientacji poziomej
+ Zawsze pokazuj klawisz menu
+ Zrzut ekranu w menu zasilania
+ Ustawienia Pierścienia Odblokowania
+ Włącz Cele Ekranu Blokady
+ Główny wyłącznik Celów Ekranu Blokady
+ Aplikacja docelowa %s
+ Pionowe przesunięcie pierścienia
+ Poziome przesunięcie pierścienia
+ Włącz kontrolę jasności
+ Regulacja jasności przy przesuwaniu palcem na pasku stanu
+ Telefon
+ Wiadomości
+ Dane mobilne
+ Konwersja znaków Unicode
+ Zamienia znaki Unicode na zwykłe. Zmniejsza ogólny rozmiar wiadomości.
+ Nie zmieniaj kodowania
+ Konwertuj nie kodowalne znaki
+ Konwertuj wszystkie znaki Unicode
+ Wyłącz ostrzeżenie o wolnej transmisji 2G
+ Wyłącza ostrzeżenie o małej prędkości danych dla karty SIM w trybie 2G podczas włączania danych mobilnych w Szybkich Ustawieniach
+ Kopiowanie kolorów baterii
+ Powoduje, że zegar, koło baterii i wskaźnik procentowy na pasku statusu używają typowych kolorów ikony baterii. Obowiązuje tylko, gdy kolorystyka icon jest wyłączona.
+ Kafelka trybu sieci
+ 2G/2G+3G/3G/(LTE)
+ 2G/2G+3G/(LTE)
+ 2G/3G/(LTE)
+ Zezwalaj na pełen obrót
+ Zmień domyślne zachowanie kafelek
+ Zastępuje zachowanie wybranych kafelek przy krótkim i długim naciśnięciu (wymagany restart)
+ Gniazdo SIM Kafelki trybu sieci
+ Definiuje gniazdo SIM którego dotyczy Kafelka trybu sieci (%s)
+ Gniazdo SIM 1
+ Gniazdo SIM 2
+ Nigdy
+ Zawsze
+ Gdy rozszerzony pulpit jest Włączony
+ Przy rozszerzonym pulpicie gdy ukryto pasek nawigacji
+ Nie zmieniaj ikony baterii
+ Zastosować w przypadku gdy ikonę baterii zastąpiono poprzez zewnętrzne modyfikacje
+ Włącz ekran przy podłączaniu
+ Gdy włączone, ekranie zostanie podświetlony w momencie podłączania/odłączania ładowarki lub urządzeń USB (wymagany restart)
+ Wycisz dźwięk regulacji głośności
+ Wyłącza dźwięk odtwarzany podczas regulacji głośności za pomocą klawiszy głośności
+ Wibracje przy połączeniu
+ Po zestawieniu połączenia
+ Po rozłączeniu połączenia
+ Przy połączeniu oczekującym
+ Co 45 sek. podczas połączenia wychodzącego
+ Zmiana kolejności kafelek
+ Umożliwia zmianę kolejności kafelek Szybkich Ustawień
+ Blokowanie bieżących powiadomień
+ Umożliwia blokowanie wybranych bieżących powiadomień
+ Lista będzie automatycznie uzupełniana dla każdego bieżącego powiadomienia które wystąpi. Możesz zdecydować czy blokować bieżące powiadomienie gdy wystąpi następnym razem. Stosować ostrożnie.
+ Wyczyść listę
+ Czy na pewno chcesz wyczyścić listę? Spowoduje to wyczyszczenie bieżącej listy i odblokowanie wszystkich poprzednio zablokowanych bieżących powiadomień.
+ (lista jest pusta)
+ Szybkie odblokowanie
+ Odblokuj automatycznie, gdy PIN/hasło zostanie poprawnie wprowadzone
+ Wyłączone
+ Standardowo
+ Małe litery
+ Duże litery
+ Pasek statusu blokady
+ Domyślnie
+ Odblokowany, jeśli blokada klawiatury odbezpieczona
+ Zablokowany
+ Monitor transmisji danych
+ Włącz monitorowanie
+ Pokazuje prędkość transmisji danych gdy połączenie danych jest aktywne
+ Pozycja
+ Automatycznie (centralnie lub po prawej w zależności od położenia zegara)
+ Po lewej
+ Po prawej
+ Rozmiar
+ Normalny
+ Mniejszy
+ Najmniejszy
+ B
+ KB
+ MB
+ s
+ Wyłączenie limitu widżetów
+ Umożliwia nieograniczoną liczbę widżetów Ekranu Blokady
+ %1$s wolne
+ %1$s w użyciu
+ Pasek RAM listy ostatnich aplikacji
+ Wyłączony
+ Na górze
+ Na dole
+ Akcja kliknięcia klawisza ostatnich aplikacji
+ Akcja przytrzymania klawisza ostatnich aplikacji
+ Pokaż wskaźnik stanu baterii
+ Pokazuje stan baterii w kształcie łuku wokół przycisku pierścienia odblokowania
+ Przełącz latarkę
+ Latarka przy długim nac. HOME
+ Umożliwia przełączanie latarki klawiszem HOME gdy urządzenie jest zablokowane. Ekran musi być włączony, jeśli urządzenie nie posiada natywnego wsparcia dla wybudzania klawiszem HOME.
+ Rozszerz automatycznie panel głośności
+ Klawisz MENU
+ Klawisz HOME
+ Klawisz BACK
+ Klawisz ostatnich aplikacji
+ Klawisze głośności
+ Inne ustawienia
+ Akcja długiego naciśnięcia
+ Akcja pojedynczego kliknięcia
+ Akcja podwójnego kliknięcia
+ Wyłącz podwójne kliknięcie
+ Tryb koloru wskaźnika sygnału
+ Użyj ikon GravityBox (z obsługą poziomu sygnału)
+ Użyj standardowych ikon (bez obsługi poziomu sygnału)
+ Nie stosuj koloru
+ Uruchamianie aplikacji
+ Dialog pozwala na zdefiniowanie do 8 aplikacji, które mogą być przypisane jako akcje klawiszy sprzętowych lub użyte jako dodatkowe przyciski paska nawigacyjnego
+ Slot aplikacji %d
+ Brak przypisanych aplikacji. Użyj GravityBox / menu Uruchamiania aplikacji aby przypisać aplikacje.
+ Pokaż przycisk uruchamiania aplikacji
+ Pokaż starter aplikacji
+ Pokaż opcjonalny przycisk
+ Wyłączone
+ Przycisk wyszukiwania
+ Starter aplikacji
+ Kolory Pie
+ Kolor tła
+ Kolor pierwszoplanowy
+ Kolor konturu
+ Kolor wybranego przycisku
+ Kolor tekstu
+ Resetuj kolory
+ Zdjęcie nieznanego dzwoniącego
+ Ustaw zdjęcie dla nieznanego dzwoniącego
+ Zdjęcie zostało zmienione
+ Zdjęcie nie zostało zmienione
+ Ekran może nie obsługiwać wartości niższych niż 20. Jeśli ekran nie zapala się, przytrzymaj przycisk VOLUME+ przez co najmniej 7 sekund aby zrestetować jasność, a następnie ustaw wyższą wartość minimalnej jasności.
+ Ogólne
+ Przyciski nawigacyjne
+ Kolory
+ Wymiary
+ Kolory paska nawigacyjnego
+ Może wymagać ponownego uruchomienia po wyłączeniu
+ Kolor klawisza nawigacyjnego
+ Poświata klawisza nawigacyjnego
+ Tło klawisza nawigacyjnego
+ Wyłącz przyciemnienie ekranu
+ Usuwa przyciemnienie ekranu blokady
+ Tryb przezroczystości
+ Wymaga ponownego uruchomienia
+ Wyłączony
+ Pasek statusu
+ Pasek nawigacyjny
+ Obydwa
+ Kolor drugiego wsk. sygnału
+ Zastępuje domyślny pomarańczowy wskaźnik sygnału
+ Kolor drugiego wskaźnika aktywności danych
+ Ustawia kolor dla drugiego wskaźnik aktywności transmisji danych
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index 8e7cb60aac..c67b8ed1b5 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -1,17 +1,19 @@
-
+GravityBoxEstilo do indicador de bateria
- Indicador de bateria pré-definido
- Indicador de bateria circular com percentagem
- Texto de percentagem grande
- Texto de percentagem com icone pré-definido
+ Indicador de bateria padrão
+ Indicador de bateria circular
+ Indicador de bateria circular com percentagem
+ Indicador de bateria do KitKat
+ Indicador de bateria do KitKat com percentagem
+ Texto de percentagem de bateriaNenhum
- Mudar de faixa utilizado teclas de volume
- As teclas de volume mudam de faixa após manter a respectiva tecla pressionada com o ecrã desligado
+ Mudar de faixa utilizando teclas de volume
+ As teclas de volume mudam de faixa após manter a respectiva tecla pressionada com o ecrã apagadoAviso de bateria fracaAviso visual e sonoro
@@ -19,37 +21,37 @@
Apenas aviso sonoroDesligado
- As alterações serão aplicadas após reiniciar o telefone
+ As alterações serão aplicadas após reiniciar o sistema
- Esconder automaticamente as barras de sinal
- Esconder as barras de sinal do cartão SIM escolhido quando este não estiver inserido. Desativa as notificações de \"O SIM não está inserido.\"
- Esconder automaticamente barras de sinal do cartão SIM 1
- Esconder automaticamente barras de sinal do cartão SIM 2
+ Ocultar barras de sinal
+ Ocultar as barras de sinal do cartão SIM escolhido quando este não estiver inserido. Desativa as notificações de \"O SIM não está inserido.\"
+ Ocultar barras de sinal do cartão SIM 1
+ Ocultar barras de sinal do cartão SIM 2Desativar notificaçõesNotificações \"O SIM não está inserido.\" desativadas
- Menu de Desligar avançado
- Adiciona opção \"Reiniciar em modo de recuperação\" ao menu de desligar
+ Menu Desligar avançado
+ Adiciona opções para reiniciar em modo de recuperação ao Menu DesligarModo de recuperação
+ Modo bootloader
- Tecla de Volume controla cursor
+ Teclas de volume controlam cursorAs teclas de volume controlam o cursor em campos de textoDesativado
- Teclas de Volume +/- movem o cursor para a esquerda/direita
- Teclas de Volume +/- movem o cursor para a direita/esquerda
+ Teclas de volume +/- movem o cursor para a esquerda/direita
+ Teclas de volume +/- movem o cursor para a direita/esquerda
- Limpar todas as tarefas recentes
- Ativa botão que possibilita limpar todas as tarefas recentes de uma vez na janela de tarefas recentes
+ Limpar todas as aplicações recentesCorrigir problema nas definições de data e horaSelecionar caso tenha problemas ao aceder à configuração de data e hora nas definições do telefone (necessário reiniciar)Corrigir problema na identificação de contatos na aplicação de telefone
- Selecionar caso um contacto não seja reconhecido quando recebe uma chamada (necessário reiniciar)
+ Selecionar caso um contato não seja reconhecido quando recebe uma chamada (necessário reiniciar)Após reiniciar o telefone, deve limpar e readicionar os seus contatos para que a alteração possa ter efeito! Para isso, aceda a \"Definições / Aplicações / Todas\" para limpar os dados do Armazenamento de contatos.Corrigir problema na aplicação de mensagens
- Selecionar caso obtenha conversações divididas em varios tópicos para o mesmo contacto (necessário reiniciar)
+ Selecionar caso obtenha conversações divididas em varios tópicos para o mesmo contato (necessário reiniciar)Após reiniciar o telefone, deve limpar todas as conversações divididas para que a alteração possa ter efeito!Corrigir problema na aplicação de calendário
@@ -57,28 +59,44 @@
Importante
- Imagem do contacto em ecrã completo
- Mostra a imagem do contacto em ecrã completo quando recebe uma chamada
+ Imagem do contato em ecrã completo
+ Mostra a imagem do contato em ecrã completo quando recebe uma chamada
- Sinc. ligada
- Sinc. desligada
- PA Wi-Fi ligado
- PA Wi-Fi desligado
+ Sinc. ativada
+ Sinc. desativada
+ PA Wi-Fi ativado
+ PA Wi-Fi desativadoLanterna ligadaLanterna desligada
- Toque para desligar
+ Tocar para desligar
+ A reproduzir…
+ A gravar…
+ Gravado
+ Manter pressionado para gravar
+ Tocar para parar gravação
+ Desativado
+ Normal
+ Expandido
+ Manter ligado
+ Não manter ligado
+ Wi-Fi
+ Wi-Fi desativado
+ Não ligado
+ A ligar…Definições rápidas na Barra de Status
- Permite mostrar/esconder definições rápidas
- Proprietário
+ Permite mostrar ou ocultar definições rápidas
+ Perfil de utilizadorModo de aviãoEstado da bateriaWi-Fi
+ Wi-Fi (estilo CM)BluetoothGPS
- Dados 3G
+ GPS (estilo CM)
+ Dados móveisModo de RedeUtilização de dadosPerfis de áudio
@@ -89,14 +107,21 @@
Ponto de Acesso Wi-FiLanternaGravityBox
+ Hibernar
+ Gravação rápida
+ Definições
+ Volume
+ Ambiente de trabalho expandido
+ Manter ligado
+ Captura de ecrã
- Escolha a cor
+ Escolher corCarregue na cor escolhida para aplicarCor do fundo da Barra de Status
- Permite escolher a cor e transparência do fundo
+ Permite escolher a cor do fundoDesbloquear definições de voz
@@ -104,11 +129,11 @@
Desbloquear opções de programador avançadas
- Desbloqueia as opções de programador avançadas nas definições do telefone (necessário reiniciar)
+ Desbloqueia as opções de programador avançadas nas definições (necessário reiniciar)
- Ajustes da barra de status
- Contém vários ajustes relacionados com a barra de status
+ Ajustes da Barra de Status
+ Contém vários ajustes relacionados com a Barra de StatusAjustes diversosContém todos os ajustes que não são classificados numa categoria específicaAjustes gerais
@@ -119,12 +144,13 @@
Desenvolvido por C3C076@XDA. Carregue para visitar a página de suporte.Xposed frameworkDesenvolvido por rovo89@XDA. Carregue para visitar a página de suporte.
- Doação
- Envie-me uma doação se achar que esta aplicação vale a pena! Considere também a hipótese de enviar uma doação ao rovo89 pelo desenvolvimento do Xposed framework.
+ Contributo
+ Carregue para enviar um contributo através do PayPal por forma a suportar o desenvolvimento
- O telefone irá reiniciar
- O telefone irá reiniciar em modo de recuperação
+ O seu %s irá reiniciar.
+ O seu %s irá reiniciar em modo de recuperação.
+ O seu %s irá reiniciar em modo bootloader.Efeito CRT ao desligar
@@ -143,10 +169,10 @@
Contém vários ajustes relacionados com o ecrã de bloqueioFundo do ecrã de bloqueioEstilo do fundo
- Imagem de fundo pré-definida
- Cor
+ Fundo padrão
+ Preencher com corImagem personalizada
- Escolha a cor
+ Escolher corPermite definir uma cor para o ecrã de bloqueioEscolha uma imagemPermite escolher uma imagem para o ecrã de bloqueio
@@ -157,8 +183,8 @@
Quando selecionado, os widgets do ecrã de bloqueio serão aumentados
- Ajustes de bateria
- Contém vários ajustes relacionados com a bateria
+ Ajustes de energia
+ Contém vários ajustes relacionados com a energiaDesativar luz intermitente
@@ -171,16 +197,15 @@
Nível de brilho mínimoPermite definir o nível de brilho mínimo, aplicável apenas ao modo manual (necessário reiniciar)
- Intervalo de valores: 10 – 80Níveis de brilho automáticoPermite ajustar os níveis de luz ambiente e os correspondentes valores para o brilho do ecrãNívelLux máx.
- Brilho (10 – 255)
+ Brilho (%d – 255)Valor especificado inválido
- Não é aconselhável um valor inferior a 10
+ Não é aconselhável um valor inferior a %dO valor não pode ser superior a 255O valor não pode ser negativoO valor do patamar inferior não pode ser maior que o do patamar superior
@@ -188,6 +213,7 @@
Valores de %s definidosNova configuração de níveis de brilho automático gravadaConfiguração de níveis de brilho automático não gravada
+ DefinirAtivar rotação no ecrã de bloqueio
@@ -209,8 +235,8 @@
Contém vários ajustes relacionados com multimédia
- Mais passos de volume
- Permite controlo mais fino do volume ao adicionar mais passos (necessário reiniciar)
+ Níveis de volume adicionais
+ Permite um controlo mais fino do volume ao adicionar mais níveis (necessário reiniciar)Volume de segurança para mãos-livres
@@ -220,5 +246,557 @@
Desativar luz de bateria a carregarDesativa a luz vermelha quando a bateria está a carregar
-
+
+ Ações para teclas físicas
+ Permite personalizar ações para as teclas físicas
+ Ação ao manter pressionada a tecla Menu
+ Ação após dupla pressão da tecla Menu
+ Ação ao manter pressionada a tecla Atrás
+ Por defeito
+ Pesquisa
+ Pesquisa por voz
+ Mudar para a aplicação anterior
+ Fechar aplicação em curso
+ Hibernar
+ Atraso no fecho da aplicação ao manter tecla pressionada
+ Aplicável à ação \"Fechar aplicação em curso\". Permite temporizar o fecho da aplicação após a tecla ter sido pressionada
+ Velocidade da dupla pressão
+ Aplicável à ação após dupla pressão da tecla Menu. Permite definir o tempo máximo admissível entre cada pressão
+ Aplicação %s fechada
+ Nenhuma aplicação por fechar
+ Nenhuma aplicação anterior encontrada
+
+
+ Ajustes de telefone
+ Contém vários ajustes relacionados com o telefone
+
+
+ Ação ao virar telefone durante toque de chamada
+ Permite definir uma ação a executar quando o telefone é virado com o ecrã para baixo durante toque de chamada
+ Nenhuma ação
+ Desativar som de toque
+ Rejeitar chamada
+
+
+ Reiniciar rápido
+
+
+ Fundo preto sólido
+ Utilizar fundo preto sólido no tema padrão em vez do gradiente preto-cinzento (necessário reiniciar)
+
+
+ Painéis por linha
+ Permite definir quantos painéis são mostrados por linha nas definições rápidas, sendo o seu tamanho ajustado automaticamente de acordo com a escolha (aplicável à orientação de ecrã vertical)
+
+
+ Mostrar dia da semana
+
+
+ Painel de volume expandido
+ Ativa painel de volume expandido com possibilidade de controlar o volume de diferentes fontes
+
+
+ Painel totalmente expandido
+ Quando ativado, o painel de volume ocupa todo o espaço disponível no ecrã
+
+
+ Volumes de toque e notificações interligados
+ Quando desativado, os volumes de toque e notificações podem ser controlados de forma independente
+
+
+ Comutação automática das definições rápidas
+ Mostra as definições rápidas automaticamente quando a Barra de Status é deslizada para baixo e não existem notificações
+
+
+ Acesso rápido
+ Acesso às definições rápidas a partir da borda da Barra de Status
+ Desligado
+ Direita
+ Esquerda
+
+
+ Inibir ligação de ecrã
+ Para dispositivos onde as teclas de volume ligam inadvertidamente o ecrã
+
+
+ Cores da Barra de Status
+
+
+ Ativar coloração de indicadores
+
+
+ Cor dos indicadores
+ Permite escolher a cor dos indicadores e do relógio
+
+
+ Cor da atividade de dados
+ Permite definir a cor dos indicadores de atividade de dados
+
+
+ Gestão das definições rápidas
+
+
+ Estilo do painel de notificações
+
+
+ Fundo do painel de notificações
+ Fundo padrão
+ Preencher com cor
+ Imagem personalizada
+ Escolher cor
+ Definir imagem para orientação de ecrã vertical
+ Definir imagem para orientação de ecrã horizontal
+ Transparência do fundo
+ Modo de fundo
+ Por cima
+ Por trás
+
+
+ Desativar indicadores de deslocamento
+ Quando selecionado, o indicador R não será visível quando em deslocamento (usar com cautela)
+
+
+ A carregar (%d%%)
+ Carregado
+ %d%% restante
+
+
+ Fora de serviço
+ Modo de avião ativado
+ Apenas chamadas de emergência
+
+
+ Controlos Pie
+ Ativar controlos Pie
+ Dimensão dos botões de navegação
+ Posições de ativação
+ Borda esquerda do ecrã
+ Borda inferior do ecrã
+ Borda direita do ecrã
+ Borda superior do ecrã
+
+
+ Modo de retro-iluminação das teclas
+ Por defeito
+ Desativar retro-iluminação
+ Sempre ligada com o ecrã aceso
+ Notificações por retro-iluminação das teclas
+ EXPERIMENTAL! Permite utilizar a retro-iluminação das teclas de forma intermitente para alerta de notificações. Utilizar caso o dispositivo não possua luz de notificações (pode consumir bateria)
+
+
+ Ocultar Barra de Navegação
+ Oculta a Barra de Navegação quando os controlos Pie estão ativados (para dispositivos com Barra de Navegação, necessário reiniciar)
+
+
+ Fundo pontilhado
+ Substituir o fundo do tema padrão por um pontilhado por forma a evitar o efeito de bandas de cores (necessário reiniciar)
+
+
+ Desativar botões de navegação
+ Desativa as ações de toque nos botões da Barra de Navegação quando os controlos Pie estiverem ativados
+
+
+ Utilizar tema escuro
+ Altera a interface de utilizador da aplicação GB para o tema escuro em vez do tema claro
+
+
+ Desativado
+ Canto superior esquerdo
+ Canto superior direito
+ Canto inferior esquerdo
+ Canto inferior direito
+
+
+ Ajustar margem superior
+
+
+ Desativar avisos de deslocamento
+ Desativa os avisos aquando do envio de mensagens ou realização de chamadas em deslocamento
+
+
+ Pesquisa
+ (Nenhuma)
+
+
+ Aplicação rápida
+ Definições do painel Aplicação rápida
+ Aplicação principal
+ Pressão longa aplicação posição 1
+ Pressão longa aplicação posição 2
+ Pressão longa aplicação posição 3
+ Pressão longa aplicação posição 4
+
+
+ GPS ativado
+ GPS desativado
+ GPS fixado
+
+
+ Mostrar sempre botão Menu
+
+
+ Modo de Toque
+
+
+ Definições do relógio
+
+
+ Ocultar AM/PM
+
+
+ Ocultar relógio
+
+
+ Limite mínimo para ativação
+
+
+ Gestão de transparências
+ Permite definir a transparência da Barra de Status e da Barra de Navegação
+ Barra de Status no inicializador
+ Barra de Status no ecrã de bloqueio
+ Barra de Navegação no inicializador
+ Barra de Navegação no ecrã de bloqueio
+
+
+ Ocultar indicador de alarme
+
+
+ Nível de brilho antes de desligar
+ Permite definir o nível de brilho aplicável quando em espera, antes do ecrã desligar (necessário reiniciar)
+
+
+ telefone
+ tablet
+
+
+ Definições de brilho
+ Ativar definições de brilho
+ Utilizar apenas caso o dispositivo suporte as funcionalidades de brilho padrão do Android. Manter desativado caso verifique problemas relacionados com o brilho (necessário reiniciar)
+
+
+ Mostrar aplicações recentes
+
+
+ Ação ao manter pressionada a tecla Casa
+
+
+ Iniciar aplicação 1
+ Definir aplicação 1
+ Iniciar aplicação 2
+ Definir aplicação 2
+ Nenhuma aplicação definida!
+ Aplicação não encontrada!
+
+
+ Relógio do painel de notificações
+ Associar relógio do painel de notificações a uma aplicação específica em vez das Definições de data e hora
+
+
+ A aguardar resposta da estrutura de sistema do GravityBox…
+ Estrutura de sistema do GravityBox não responde. A sair.
+
+
+ Deslocamento de dados nacionais
+ Permite o estabelecimento de ligação de dados quando em deslocamento em território nacional
+
+
+ Modo ambiente de trabalho expandido
+ Desativado
+ Ocultar Barra de Status
+ Ocultar Barra de Navegação
+ Ocultar ambas
+ Ambiente de trabalho expandido
+ Ambiente de trabalho expandido ativado
+ Ambiente de trabalho expandido desativado
+
+
+ Captura de ecrã
+
+
+ Mostrar menu
+
+
+ Alternar ambiente de trabalho expandido
+ O modo ambiente de trabalho expandido está desativado!
+
+
+ Ajustes da Barra de Navegação
+ Contém vários ajustes relacionados com a Barra de Navegação
+ Ignorar predefinições de sistema
+ Ativação global dos ajustes da Barra de Navegação (necessário reiniciar)
+ Ativar Barra de Navegação
+ Permite ativar Barra de Navegação (necessário reiniciar)
+ Altura da Barra de Navegação
+ Aplicável à barra horizontal e orientação de ecrã vertical
+ Aplicável à barra horizontal e orientação de ecrã horizontal
+ Largura da Barra de Navegação
+ Aplicável à barra vertical
+ Mostar sempre botão Menu
+
+
+ Captura de ecrã no Menu Desligar
+
+
+ Definições do anel de desbloqueio
+ Ativar alvos do anel de desbloqueio
+ Permite definir até cinco aplicações como alvo no anel de desbloqueio
+ Aplicação %s
+ Desvio vertical do anel de desbloqueio
+ Desvio horizontal do anel de desbloqueio
+
+
+ Ativar controlo de brilho
+ Permite ajustar o brilho ao deslizar sobre a Barra de Status (necessário desativar ajuste automático de brilho)
+
+
+ Telefone
+ Mensagens
+ Dados móveis
+
+
+ Remover unicode
+ Converte caracteres unicode em caracteres normais, permitindo reduzir o tamanho da mensagem
+ Não alterar os caracteres
+ Remover caracteres não encriptáveis
+ Remover todos os caracteres unicode
+
+
+ Desativar aviso ligação de dados lenta
+ Desativa o aviso de ligação de dados lenta que ocorre quando se altera o modo de rede para 2G nas definições rápidas
+
+
+ Associar cor padrão da bateria
+ Permite forçar o uso da cor padrão para o indicador de bateria na fonte do relógio, percentagem e no indicador de bateria circular (aplicável quando a coloração dos indicadores está desativada)
+
+
+ Modo do painel Modo de Rede
+ 2G/2G+3G/3G/(4G)
+ 2G/2G+3G/(4G)
+ 2G/3G/(4G)
+
+
+ Permitir todas as orientações
+
+
+ Substituir comportamento padrão dos painéis
+ Permite substituir o comportamento padrão dos painéis selecionados ao tocar / manter pressionado (necessário reiniciar)
+
+
+ Modo de Rede por cartão SIM
+ Permite definir qual o cartão SIM que será controlado pelo painel Modo de Rede (%s)
+ Cartão SIM 1
+ Cartão SIM 2
+
+
+ Nunca
+ Sempre
+ Quando o modo ambiente de trabalho expandido estiver ativado
+ Quando o modo ambiente de trabalho expandido ocultar a Barra de Navegação
+
+
+ Não alterar o indicador de bateria
+ Utilizar caso o indicador de bateria padrão já tenha sido modificado por outro método
+
+
+ Ligação USB acende ecrã
+ Quando selecionado, o ecrã acende ao ligar/desligar o dispositivo do carregador ou computador (necessário reiniciar)
+
+
+ Desativar som de ajuste de volume
+ Permite desativar os sons emitidos quando se ajusta o volume utilizando as teclas de volume
+
+
+ Vibração em chamadas
+ Ao estabelecer chamada
+ Ao desligar chamada
+ Durante chamada em espera
+ Aos 45 segundos de cada minuto durante chamada efetuada
+
+
+ Reordenamento dos painéis
+ Permite reordenar os painéis das definições rápidas
+
+
+ Bloqueio das notificações
+ Permite bloquear as notificações selecionadas
+ A lista será atualizada automaticamente por cada nova notificação.
+ Ao selecionar, irá bloquear a notificação da próxima vez que esta ocorra. Usar com cautela.
+ Limpar lista
+ Tem a certeza que pretende limpar a lista?
+ Esta ação irá limpar a lista atual e todas as notificações até agora bloqueadas serão desbloqueadas.
+ (lista vazia)
+
+
+ Desbloqueio rápido
+ Desbloquear automaticamente após correta introdução de PIN/palavra-passe
+
+
+ Desativado
+ Padrão
+ Minúsculas
+ Maiúsculas
+
+
+ Política de bloqueio da Barra de Status
+ Padrão
+ Desbloqueada quando método de bloqueio for inseguro
+ Bloqueada
+
+
+ Monitorização de tráfego de dados
+ Ativar monitorização
+ Permite monitorizar o tráfego de dados automaticamente sempre que exista uma ligação de dados estabelecida
+ Posicionamento
+ Automático (centrado ou alinhado à direita, dependendo do posicionamento do relógio)
+ Alinhado à esquerda
+ Alinhado à direita
+ Tamanho do tipo de letra
+ Normal
+ Pequeno
+ Mínimo
+ B
+ KB
+ MB
+ s
+
+
+ Desativar limitação de widgets
+ Permite colocar um número ilimitado de widgets no ecrã de bloqueio
+
+
+
+ %1$s livres
+
+ %1$s utiliz.
+ Indicação RAM nas aplicações recentes
+ Desativada
+ Topo superior
+ Topo inferior
+
+
+ Ação após pressão da tecla Aplicações recentes
+ Ação ao manter pressionada a tecla Aplicações recentes
+
+
+ Mostrar arco de bateria
+ Permite mostrar o estado da bateria em forma de arco desenhado em torno do anel de desbloqueio
+
+
+ Comutar lanterna
+
+
+ Lanterna ao manter pressionada
+ Liga/desliga a lanterna quando o dispositivo está bloqueado. O ecrã tem de estar ligado caso o dispositivo não se ligue ao pressionar a tecla Casa.
+
+
+ Expandir automaticamente
+
+
+ Tecla Menu
+ Tecla Casa
+ Tecla Atrás
+ Tecla Aplicações Recentes
+ Teclas de volume
+ Outras definições
+ Ação ao manter pressionada
+ Ação após pressão
+ Ação após dupla pressão
+
+
+ Desativar dupla pressão
+
+
+ Modo de coloração indicadores de sinal
+ Aplicar com indicadores do GravityBox (com indicação do nível de sinal)
+ Aplicar com indicadores padrão (sem indicação do nível de sinal)
+ Não aplicar coloração
+
+
+ Lançador de aplicações
+ Permite definir até 8 aplicações como ações para as teclas físicas ou para mostrar em botão adicional na Barra de Navegação
+ Aplicação posição %d
+ Nenhuma aplicação definida. Aceda a \"GravityBox / Lançador de aplicações\" para definir aplicações.
+
+
+ Mostrar botão Lançador aplicações
+
+
+ Mostrar lançador de aplicações
+
+
+ Mostrar botão personalizado
+ Desativado
+ Pesquisa
+ Lançador de aplicações
+
+
+ Coloração dos controlos Pie
+ Cor de segundo plano
+ Cor de primeiro plano
+ Cor do rebordo
+ Cor do botão quando pressionado
+ Cor do texto
+ Repor cores pré-definidas
+
+
+ Ativar imagem de contato desconhecido
+ Definir imagem de contato desconhecido
+ Imagem alterada
+ Imagem não alterada
+
+
+ O ecrã poderá não suportar valores de brilho inferiores a 20. Caso o ecrã não se ligue após a alteração,
+ mantenha a tecla de volume + pressionada durante pelo menos 7 segundos para repor o valor pré-definido e poder reajustar o nível de brilho mínimo para um valor superior.
+
+
+ Geral
+ Teclas de navegação
+ Cores
+ Dimensões
+
+
+ Ativar coloração
+ Pode ser necessário reiniciar após desativar
+ Cor das teclas
+ Cor das teclas ao pressionar
+ Cor de fundo da Barra de Navegação
+
+
+ Remover sombreado
+ Permite remover a tonalidade escura presente no ecrã de bloqueio
+
+
+ Modo de gestão de transparências
+ Permite definir o modo de gestão de transparências (necessário reiniciar)
+ Desativado
+ Barra de Status
+ Barra de Navegação
+ Ambas
+
+
+ Cor das barras de sinal secundárias
+ Permite substituir a cor laranja das barras de sinal secundárias
+ Cor da atividade de dados secundária
+ Permite definir a cor dos indicadores de atividade de dados secundários
+
+
+ Estilo dos indicadores
+ Aplicável aos indicadores de silêncio, vibração, alarme, etc.
+ JellyBean
+ KitKat
+
+
+ Ação após dupla pressão da tecla Atrás
+
+
+ Ir para início
+ Ir para trás
+
+
+ Estilo dos painéis
+ Aplicável apenas aos painéis adicionados pelo GravityBox (não altera os painéis padrão)
+
+
+ Ajustar margem inferior
+
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index d0d03fb4ab..88260b60e4 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -1,17 +1,17 @@
-
+GravityBoxEstilo do indicador de bateriaIndicador de bateria padrão
- Indicador de bateria circular com porcentagem
- Texto da porcentagem grande
- Texto de porcentagem com icone padrão
+ Indicador de bateria circular
+ Indicador de bateria circular com porcentagem
+ Texto da porcentagem de bateriaNenhum
- Teclas de Volume trocam de faixa
- Talcas de volume trocam de faixa após uma longa pressionada com a tela desligada
+ Teclas de volume trocam de faixa
+ Teclas de volume trocam de faixa após uma longa pressionada com a tela desligadaAviso de baixa bateriaSons e \"Pop-up\"
@@ -19,34 +19,34 @@
Somente sonsDesligado
- Mudanças serão aplicadas após reiniciar o celular.
+ Mudanças serão aplicadas após reiniciar o dispositivo.Esconder automaticamente os icones de sinalEsconder o icone de sinal para o slot SIM escolhido quando este não estiver inserido. Desabilita notificações de \"SIM não inserido\"Esconder automaticamente SIM Slot 1Esconder automaticamente SIM Slot 2Desabilitar notificações
- Notificações \"SIM não inseirdo\" desabilitadas
+ Notificações \"SIM não inserido\" desabilitadasMenu de Desligar avançado
- Habilitar opção \"Reiniciar em modo recuperação\" no menu de desligar avançado
+ Adiciona opções para reiniciar em modo de recuperação ao menu de desligarRecuperação
+ Bootloader
- Tecla de volume controla cursor
+ Teclas de volume controlam cursorAs teclas de volume controlam o cursor em campos de textoDesabilitado
- Teclas de Volume Cima/Baixo movem o cursor esquerda/direita
- Volume cima/baixo movem o cursor direita/esquerda
+ Teclas de volume +/- movem o cursor para a esquerda/direita
+ Teclas de volume +/- movem o cursor para a direita/esquerda
- Limpar todas as tarefas recentes
- Habilitar o botão de limpar tudas as tarefas recentes de uma vez na janela de tarefas recentes
+ Limpar todos os aplicativos recentes
- Ajustar erro de Data&Hora
- Habilitar esta opção caso esteja tendo problema ao acessar a opção de Data&Hora nas configurações (necessário reiniciar)
+ Corrigir erro de Data e Hora
+ Habilitar esta opção caso esteja tendo problema ao acessar a opção de Data e hora nas configurações (necessário reiniciar)Corrigir contatos em ligaçãoHabilitar caso um contato não seja reconhecido quando recebendo uma ligação (necessário reiniciar)
- Após reiniciar, você deve limpar e readicionar seus contatos para ter efeito! Para tal, vá em Ajustes / Aplicações / Todos. Para limpar os dados do Provedor de Contatos.
+ Após reiniciar, você deve limpar e readicionar seus contatos para ter efeito! Para tal, vá em \"Ajustes / Aplicativos / Todos\" para limpar os dados do Armazenamento de contatos.Corrigir contatos em mensagemHabilitar caso tenha problemas de conversas divididas em varios tópicos do mesmo contato (necessário reiniciar)
@@ -61,42 +61,65 @@
Mostra a foto do contato em tela cheia quando recebe ligação
- Sync On
- Sync Off
- Wi-Fi AP On
- Wi-Fi AP Off
- Torch On
- Torch Off
+ Sinc. ativada
+ Sinc. desativada
+ PA Wi-Fi ativado
+ PA Wi-Fi desativado
+ Tocha ligada
+ Tocha desligadaToque para desligar
+ Tocando…
+ Gravando…
+ Gravado
+ Longa pressionada para gravar
+ Toque para parar gravação
+ Desativado
+ Normal
+ Expandido
+ Manter ligado
+ Não manter ligado
+ Wi-Fi
+ Wi-Fi desativado
+ Não conectado
+ Ligando…
- Barra de Status Rápidas
+ Configurações rápidas na Barra de StatusHabilitar escolher quais configurações rápidas visualizarPerfil do UsuárioModo AviãoStatus da BateriaWi-Fi
+ Wi-Fi (estilo CM)BluetoothGPS
- Dados 3G
+ GPS (estilo CM)
+ Dados móveisModo de RedeUso de dados
- Perfils de Audio
+ Perfis de áudioBrilho
- Tempo Limite de Tela
+ Tempo limite de telaAuto rotaçãoSincronização
- Wi-Fi Access Point
+ Ponto de Acesso Wi-FiTochaGravityBox
+ Dormir
+ Gravação rápida
+ Configurações
+ Volume
+ Ambiente de trabalho expandido
+ Manter ligado
+ Captura de tela
- Escolha a Cor
+ Escolha a corPressione na cor para aplicarCor do fundo da Barra de Status
- Permite escolhe a cor e transparencia da cor do fundo
+ Permite escolhe a cor do fundoCorrigir configurações de fala
@@ -107,12 +130,12 @@
Desbloqueia as configurações avançadas de desenvolvedor nas configurações (necessário reiniciar)
- Ajustes na Barra de Status
- Contém diversos ajustes para a barra de status
+ Ajustes da Barra de Status
+ Contém diversos ajustes relacionados com a Barra de statusAjustes diversosContém todos os ajustes que não são classificados numa categoria específica
- Ajustes Gerais
- Contém correções gerais para MTK6589. Use somente se necessário!.
+ Ajustes gerais
+ Contém correções gerais para MTK6589. Use somente se necessário!Sobre
@@ -123,8 +146,9 @@
Faça uma doação para mim se você acha que este aplicativo vale a pena! Também considere doar para o rovo89 pelo seu exelente trabalho no Xposed framework.
- Seu celular irá reiniciar
- Seu celular irá reiniciar em modo recuperação
+ O seu %s irá reiniciar.
+ O seu %s irá reiniciar em modo recuperação.
+ O seu %s irá reiniciar em modo bootloader.Efeito de TV antiga desligando
@@ -132,20 +156,20 @@
Modo Engenharia
- Roda os aplicativos em modo engenharia
+ Roda o aplicativo Modo EngenhariaToques para cada SIM
- Roda o aplicativo que permite que cada cartão SIM tenha sons de toque e notificações específicas para cada cartão
+ Roda o aplicativo que permite configurar sons de toque e notificações específicas para cada cartão SIM
- Ajustes na tela de bloqueio
- Contém diversos ajustes na tela de bloqueio
+ Ajustes da tela de bloqueio
+ Contém diversos ajustes relacionados com a tela de bloqueioFundo da tela de bloqueioEstilo do fundo
- Papel de Parede padão
+ Papel de parede padrãoCor
- Imagem Customizada
+ Imagem customizadaEscolha a corPermite escolher uma cor customizada para a tela de bloqueioEscolha uma imagem
@@ -157,11 +181,564 @@
Quando habilitado, os widgets de tela de bloqueio serão maximizados por padrão
- Ajustes de Bateria
- Contém varios ajustes relacionados a bateria
+ Ajustes de energia
+ Contém diversos ajustes relacionados com a energiaDesabilitar LED piscanteDesabilitar o LED quando a bateria estiver baixa e não carregando
-
\ No newline at end of file
+
+ Ajustes da tela
+ Contém diversos ajustes relacionados com a tela
+
+
+ Nível de brilho mínimo
+ Permite definir o nível de brilho mínimo, aplicável apenas ao modo manual (necessário reiniciar)
+
+
+ Níveis de brilho automático
+ Permite ajustar os níveis de luz ambiente e os correspondentes valores para o brilho da tela
+ Nível
+ Lux máx.
+ Brilho (%d – 255)
+ Valor especificado inválido
+ Não é aconselhável um valor inferior a %d
+ O valor não pode ser superior a 255
+ O valor não pode ser negativo
+ O valor do patamar inferior não pode ser maior que o do patamar superior
+ O valor do patamar superior não pode ser menor que o do patamar inferior
+ Valores de %s definidos
+ Nova configuração de níveis de brilho automático gravada
+ Configuração de níveis de brilho automático não gravada
+ Definir
+
+
+ Enable lockscreen rotation
+ WARNING: can swap unlock ring targets on some devices in case AOSP lockscreen has been modified by vendor
+
+
+ Enable menu key
+ Allows menu key to be used for quick-unlocking the device while on lockscreen (requires reboot)
+
+
+ Fix messaging wakelock
+ Prevents screen from turning on when new message arrives (requires reboot)
+
+
+ Centrar relógio
+
+
+ Ajustes multimédia
+ Contém diversos ajustes relacionados com multimédia
+
+
+ More music volume steps
+ Adds more volume steps for music stream (requires reboot)
+
+
+ Safe headset media volume
+ Activates or deactivates safe headset media volume feature
+
+
+ Disable charging LED
+ Disables LED while charging
+
+
+ Hardware key actions
+ Allows to set custom actions on hardware keys
+ Menu key long-press action
+ Menu key double-tap action
+ Back key long-press action
+ Default
+ Search
+ Voice search
+ Switch to previous app
+ Kill foreground app
+ Go to sleep
+ Kill app long-press delay
+ Applies to Kill foreground app action. Defines for how long key must be pressed to trigger kill
+ Double-tap speed
+ Applies to Menu key double-tap action. Defines how fast key must be tapped to trigger double-tap
+ %s killed
+ There\'s nothing to kill
+ No previous app found
+
+
+ Ajustes de telefone
+ Contém diversos ajustes relacionados com o telefone
+
+
+ Flip action while ringing
+ Allows to define action to be performed when device is flipped face down while ringing
+ Do nothing
+ Mute ringer
+ Dismiss call
+
+
+ Soft reboot
+
+
+ Solid black background
+ Use solid black background for default Holo system theme instead of black-grey gradient (requires reboot)
+
+
+ Tiles per row
+ Defines how many QuickSettings tiles to display per one row. Tiles will be resized accordingly. Applies to portrait mode.
+
+
+ Exibir dia da semana
+
+
+ Expandable volume panel
+ Enables expandable volume panel with ability to set volumes for different streams
+
+
+ Link ringtone & notifications volumes
+ When disabled, volumes for ringtone and notifications can be set independently
+
+
+ Auto-switch QuickSettings
+ QuickSettings will show automatically when status bar is pulled down while there are no notifications
+
+
+ Quick pulldown
+ Edge of the status bar pulls down QuickSettings
+ Desabilitado
+ Direita
+ Esquerda
+
+
+ Desabilitar ligação de tela
+ Para dispositivos onde as teclas de volume ligam inadvertidamente a tela
+
+
+ Cores da Barra de Status
+
+
+ Enable icon colors
+
+
+ Statusbar icon color
+ Sets color for statusbar icons and clock
+
+
+ Data activity color
+ Sets color for data activity indicators
+
+
+ QuickSettings management
+
+
+ Notification drawer style
+
+
+ Notification drawer background
+ Default background
+ Color fill
+ Custom image
+ Set background color
+ Set portrait image
+ Set landscape image
+ Background transparency
+ Background mode
+ Overlay
+ Underlay
+
+
+ Disable roaming indicators
+ When disabled, R indicator will not be visible while roaming. Use with caution.
+
+
+ A carregar (%d%%)
+ Carregado
+ %d%% restante
+
+
+ Fora de serviço
+ Modo de avião ativado
+ Apenas chamadas de emergência
+
+
+ Controles Pie
+ Ativar controles Pie
+ Dimensão dos botões de navegação
+ Posições de ativação
+ Borda esquerda do ecrã
+ Borda inferior do ecrã
+ Borda direita do ecrã
+ Borda superior do ecrã
+
+
+ Button backlight mode
+ Default
+ Disable button backlight
+ Always on while screen is on
+ Button backlight notifications
+ EXPERIMENTAL! Blinks button backlight when there is a notification. Use in case your device lacks notification LED. May consume battery.
+
+
+ Hide navigation bar
+ Hides navigation bar while Pie Controls are enabled (for devices that have navigation bar, requires reboot)
+
+
+ Dithered Holo background
+ Replaces standard Holo background with dithered one to suppress color banding (requires reboot)
+
+
+ Disable navigation keys
+ Disables single-tap on keys while Pie Controls are enabled
+
+
+ Use Holo Dark theme
+ Switches GB UI to use Holo Dark theme instead of Holo Light
+
+
+ Desabilitado
+ Canto superior esquerdo
+ Canto superior direito
+ Canto inferior esquerdo
+ Canto inferior direito
+
+
+ Ajustar margem superior
+
+
+ Disable roaming warnings
+ Disables roaming warnings when sending messages or making phone calls while roaming
+
+
+ Pesquise
+ (Nenhum)
+
+
+ Aplicativo rápido
+ Configurações do painel Aplicativo rápido
+ Aplicativo principal
+ Longa pressionada aplicativo posição 1
+ Longa pressionada aplicativo posição 2
+ Longa pressionada aplicativo posição 3
+ Longa pressionada aplicativo posição 4
+
+
+ GPS ativado
+ GPS desativado
+ GPS fixado
+
+
+ Exibir sempre botão Menu
+
+
+ Ringer mode
+
+
+ Configurações do relógio
+
+
+ Esconder AM/PM
+
+
+ Esconder relógio
+
+
+ Trigger size
+
+
+ Gerenciamento de transparências
+ Barra de Status no inicializador
+ Barra de Status na tela de bloqueio
+ Barra de Navegação no inicializador
+ Barra de Navegação na tela de bloqueio
+
+
+ Esconder indicador de alarme
+
+
+ Screen dim level
+ Amount of brightness for dim state - when screen is about to be turned off (requires reboot)
+
+
+ telefone
+ tablet
+
+
+ Brightness settings
+ Enable brightness settings
+ Use only in case your device supports standard Android brightness features. Keep disabled if you experience brightness related issues. (requires reboot)
+
+
+ Exibir aplicativos recentes
+
+
+ Home key long-press action
+
+
+ Lançar aplicativo 1
+ Definir aplicativo 1
+ Lançar aplicativo 2
+ Definir aplicativo 2
+ Nenhum aplicativo definido!
+ Aplicativo não encontrado!
+
+
+ Notification panel clock app
+ Links notification panel clock to a specified app instead of Date&Time settings
+
+
+ Waiting for response from GravityBox system framework…
+ GravityBox system framework not responding. Exiting.
+
+
+ National data roaming
+ Connect to data services when nationally roaming
+
+
+ Expanded desktop mode
+ Disabled
+ Hide statusbar
+ Hide navigation bar
+ Hide both
+ Expanded desktop
+ Expanded desktop is ON
+ Expanded desktop is OFF
+
+
+ Captura de tela
+
+
+ Exibir menu
+
+
+ Toggle expanded desktop
+ Expanded desktop mode is disabled!
+
+
+ Ajustes da Barra de Navegação
+ Contém diversos ajustes relacionados com a Barra de Navegação
+ Override system defaults
+ Master switch for navigation bar tweaks (requires reboot)
+ Enable navigation bar
+ Requires reboot
+ Navigation bar height
+ Applies to horizontal navigation bar and portrait orientation
+ Applies to horizontal navigation bar and landscape orientation
+ Navigation bar width
+ Applies to vertical navigation bar
+ Always show menu key
+
+
+ Captura de tela no Menu de Desligar
+
+
+ Unlock ring settings
+ Enable unlock ring targets
+ Master switch for unlock ring targets
+ Target application %s
+ Unlock ring vertical offset
+ Unlock ring horizontal offset
+
+
+ Enable brightness control
+ Adjusts brightness by sliding over statusbar (requires automatic brightness to be disabled)
+
+
+ Celular
+ Mensagens
+ Dados móveis
+
+
+ Strip unicode
+ Converts unicode characters to normal characters. Decreases overall message size.
+ Leave characters intact
+ Strip non-encodable characters
+ Strip all unicode characters
+
+
+ Disable slow 2G data warning
+ Disables warning about slow data speed when turning on mobile data in QuickSettings for SIM in 2G mode
+
+
+ Follow stock battery color
+ Makes statusbar clock, percentage and circle battery use the color of stock battery icon. Applies when icon coloring is off.
+
+
+ Network mode tile mode
+ 2G/2G+3G/3G/(LTE)
+ 2G/2G+3G/(LTE)
+ 2G/3G/(LTE)
+
+
+ Permitir todas as rotações
+
+
+ Override default tile behaviour
+ Overrides touch/long-touch behaviour for selected tiles (requires reboot)
+
+
+ Network mode tile SIM slot
+ Defines SIM slot to which network mode tile applies (%s)
+ SIM slot 1
+ SIM slot 2
+
+
+ Never
+ Always
+ When expanded desktop on
+ When expanded desktop hides navigation bar
+
+
+ Leave stock battery icon intact
+ Use in case stock battery icon was replaced with 3rd party battery mod
+
+
+ Unplug turns on screen
+ If enabled, the screen will come on when you plug/unplug usb/power/whatever (requires reboot)
+
+
+ Mute volume adjust sound
+ Disables sound played when adjusting volume using volume keys
+
+
+ Call vibrations
+ On call connected
+ On call disconnected
+ On call waiting
+ Every 45th second during outgoing call
+
+
+ Tile reordering
+ Allows reordering of QuickSettings tiles
+
+
+ Ongoing notification blocker
+ Allows blocking of selected ongoing notifications
+ The list will get populated automatically for every ongoing notification that occurs.
+ You can then decide whether to block ongoing notification next time it occurs. Use with caution.
+ Reset list
+ Are you sure you want to reset list?
+ This will clear current list and unblock all ongoing notifications previously blocked.
+ (list is empty)
+
+
+ Quick unlock
+ Unlock automatically when the correct PIN/password is entered
+
+
+ Desabilitado
+ Padrão
+ Minúsculas
+ Maiúsculas
+
+
+ Statusbar lock policy
+ Default
+ Unlocked if keyguard insecured
+ Locked
+
+
+ Data traffic monitor
+ Enable monitoring
+ Shows data traffic monitor automatically whenever data connection is active
+ Position
+ Auto (center or right depending on clock position)
+ Esquerda
+ Direita
+ Size
+ Normal
+ Smaller
+ Smallest
+ B
+ KB
+ MB
+ s
+
+
+ Disable widget limit
+ Allows unlimited number of lockscreen widgets
+
+
+
+ %1$s livre
+
+ %1$s usada
+ Indicação RAM nos aplicativos recentes
+ Desabilitado
+ Topo superior
+ Topo inferior
+
+
+ Recents key single-tap action
+ Recents key long-press action
+
+
+ Show battery arc
+ Shows battery status arc drawn around unlock ring handle
+
+
+ Comutar tocha
+
+
+ Torch on home key long-press
+ Toggles torch on/off when device locked. Screen has to be turned on if device lacks native wake by home key support.
+
+
+ Expandir automaticamente
+
+
+ Menu key
+ Home key
+ Back key
+ Recents key
+ Volume keys
+ Other settings
+ Long-press action
+ Single-tap action
+ Double-tap action
+
+
+ Disable double-tap
+
+
+ Signal color mode
+ Use GravityBox icons (with signal level support)
+ Use stock icons (without signal level support)
+ Do not apply color
+
+
+ Application launcher
+ Dialog allowing to define up to 8 apps which can be assigned as HW Key Action or used as additional navigation bar key
+ Application slot %d
+ No apps assigned. Use GravityBox / Application launcher menu to assign apps.
+
+
+ Exibir botão Lançador aplicativos
+
+
+ Exibir lançador de aplicativos
+
+
+ Exibir botão customizado
+ Desabilitado
+ Pesquisa
+ Lançador de aplicativos
+
+
+ Pie colors
+ Background color
+ Foreground color
+ Outline color
+ Key selected color
+ Text color
+ Reset colors
+
+
+ Enable unknown caller photo
+ Set unknown caller photo
+ Photo changed
+ Photo not changed
+
+
+ Your screen might not support values lower than 20. If your screen doesn\'t light up,
+ hold Volume+ key for at least 7 seconds to reset brightness and then adjust minimum brightness to use higher values.
+
+
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index edef24127c..2a8ea82c77 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -1,11 +1,29 @@
-
+
+
+GravityBoxВид индикатора зарядаСтоковый индикатор
- Круглый индикатор с процентами
+ Круглый индикатор
+ Круглый индикатор с процентами
+ Батарея KitKat
+ Батарея KitKat с процентамиИндикатор с процентамиНе показывать
@@ -29,7 +47,8 @@
Расширенное меню перезагрузкиВключает расширенное меню перезагрузки с возможностью перезагрузки в Recovery
- Recovery
+ Recovery
+ BootloaderУправление курсором клавишами громкостиПозволяет управлять курсором в текстовых полях клавишами громкости
@@ -38,20 +57,19 @@
Звук вверх/вниз для перемещения курсора вправо/влевоЗакрыть все текущие задачи
- Включает кнопку для закрытия всех текущих задач в диалоге \"Недавние приложения\"
- Исправление падения диалога Дата и время
+ Падения диалога Дата и времяВключить, если при входе в настройки Даты и времени происходит падение (Необходима перезагрузка)
- Исправление определения номера для звонка
+ Определения номера для звонкаВключить, если номер звонящего не сопоставляется с контактом при входящем звонке (Необходима перезагрузка)После перезагрузки необходимо удалить и заново добавить контакты, чтобы изменения вступили в силу! Используйте Настройки - Приложения - Хранилище контактов - Стереть данные.
- Исправление определителя номера для сообщений
+ Определителя номера для сообщенийВключить, если наблюдается проблема нескольких веток сообщений для одного контакта (Необходима перезагрузка)После перезагрузки необходимо удалить все раздельные ветки в приложении Сообщения, чтобы изменения вступили в силу!
- Исправить приложение Календарь
+ Приложение КалендарьВключить, если есть проблема с периодически включающимся экраном в спящем режимеВажно
@@ -71,7 +89,16 @@
Запись…ЗаписаноУдержите для записи
- Косниться чтобы остановить запись
+ Коснитесь чтобы остановить запись
+ Отключено
+ Нормальный
+ Расширенный
+ Не засыпать вкл.
+ Не засыпать выкл.
+ Wi-Fi
+ Wi-Fi выкл
+ Не подключено
+ Включение…Иконки быстрых настроек в статусбаре
@@ -80,8 +107,10 @@
Режим полетаЗаряд батареиWi-Fi
+ Wi-Fi (CM style)BluetoothGPS
+ GPS (CM style)Мобильный интернетРежим сети (2g/3g)Передача данных (статистика)
@@ -95,7 +124,12 @@
GravityBoxСонБыстрая запись
-
+ Настройки
+ Звук
+ Расширенный рабочий стол
+ Не засыпать
+ Снимок экрана
+
Выбор цветаНажмите на цвет для применения
@@ -129,14 +163,15 @@
Пожертвуйте, если считаете, что приложение стоит того! Также задумайтесь о пожертвовании rovo89 за его великолепный Xposed framework.
- Телефон будет перезагружен
- Телефон будет перезагружен в recovery
+ %s будет перезагружен.
+ %s будет перезагружен в recovery.
+ %s будет перезагружен в bootloader.
-
+
CRT-эффект выключения экранаПозволяет включить анимацию, имитирующую выключение старых ЭЛТ-мониторов, при выключении экрана
-
+
Инженерное менюПозволяет запустить Инженерное меню
@@ -177,16 +212,15 @@
Минимальный уровень яркостиПозволяет установить минимальный уровень яркости. Применимо к ручной настройке яркости. (Необходима перезагрузка)
- Значения из интервала: 10 – 80Уровни автояркостиПозволяет настроить уровни яркости подсветки в зависимости от внешней освещенностиУровеньМаксимальная освещенность
- Яркость (10 – 255)
+ Яркость (%d – 255)Некорректное значение
- Не рекомендуется устнавливать яркость ниже 10
+ Не рекомендуется устнавливать яркость ниже %dЯркость не может быть выше 255Значение не должно быть меньше 0Значение на нижнем уровне не может быть выше значений на верхних уровнях
@@ -194,6 +228,7 @@
Значения для %s установленоНовая конфигурация автояркости сохраненаКонфигурация автояркости НЕ БЫЛА сохранена
+ УстановитьВключить поворот экрана блокировки
@@ -229,9 +264,9 @@
Действия кнопокПозволяет задать свои действия для кнопок телефона
- Долгое нажатие Меню
- Двойное нажатие Меню
- Долгое нажатие Назад
+ Долгое нажатие Меню
+ Двойное нажатие Меню
+ Долгое нажатие НазадДействие по умолчаниюПоискГолосовой поиск
@@ -242,7 +277,7 @@
Применимо к кнопке Закрыть текущее приложение. Определяет, как долго нужно держать кнопку чтобы закрыть приложениеСкорость двойного нажатияПримениму к двойному нажатию Меню. Определяет, как быстро нужно нажать на кнопку Меню для срабатывания двойного нажатия.
- Приложение закрыто
+ Приложение %s закрытоНечего закрыватьПредыдущее приложение не найдено
@@ -257,10 +292,6 @@
Выключить звукСбросить звонок
-
- Отключить вибрацию при установлении соединения
- Отключает вибрацию, которая срабатывает при установлении соединения во ремя звонка
-
Мягкая перезагрузка
@@ -279,9 +310,13 @@
Расширяемая звуковая панельВключает расширяемую звуковую панель, на которой можно менять звук для разных потоков
+
+ Полностью расширяемая панель громкости
+ Позволяет ползунку громкости занимать все доступное пространство
+
Связать громкость рингтона и уведомлений
- Когда отключено, громкость уведомлений и ренгтона можно задавать независимо
+ Когда отключено, громкость уведомлений и рингтона можно задавать независимоАвтовключение быстрых настроек
@@ -315,4 +350,461 @@
Управление Быстрыми настройками
+
+ Стиль шторки уведомлений
+
+
+ Фон шторки уведомлений
+ Стандартный фон
+ Заполнение цветом
+ Пользовательское изображение
+ Задать цвет фона
+ Задать портретную картинку
+ Задать ландшафтную картинку
+ Прозрачность фона
+ Режим фона
+ Передний план
+ Задний план
+
+
+ Отключить индикатор роуминга
+ При отключении R-индикатор не будет отображаться. Используйте с осторожностью.
+
+
+ Зарядка (%d%%)
+ Заряжен
+ %d%% осталось
+
+
+ Нет сети
+ Режим полета
+ Только экстренные
+
+
+ Веерное меню
+ Включить веерное меню
+ Размер навигационных кнопок
+ Позиция переключателей
+ Левая граница
+ Нижняя граница
+ Правая граница
+ Верхняя граница
+
+
+ Режим подсветки клавиш
+ Стандартный
+ Отключить подсветку
+ Включать всегда, когда включен экран
+ Уведомления подсветкой клавиш
+ ЭКСПЕРИМЕНТАЛЬНО! Моргающая подсветка клавиш при уведомлениях. Использовать только в случае отсутствия LED индикатора. Может привести к ухудшению жизни батареи.
+
+
+ Скрыть панель навигации
+ Скрывает панель навигации, когда включено веерное меню (для устройств с программными кнопками навигации, необходима перезагрузка)
+
+
+ Сглаженный Holo фон
+ Заменяет стандартный фон на сглаженный для избежания неплавного градиента (необходима перезагрузка)
+
+
+ Отключить железные кнопки
+ Отключает кнопки НАЗАД, ДОМОЙ, МЕНЮ при включенном веерном меню. Нестандартные действия этих кнопок по прежнему будут работать. (Для устройств с железными кнопками)
+
+
+ Изпользовать тему Holo Dark
+ Переключает тему интерфейса GravityBox со светлой на темную
+
+
+ Выключено
+ Сверху слева
+ Сверху справа
+ Снизу слева
+ Снизу справа
+
+
+ Настроить отступ сверху
+
+
+ Отключить предупреждения о роуминге
+ Отключить предупреждения о роуминге при отправке сообщений или совершении звонков в роуминге
+
+
+ Поиск
+ (нет)
+
+
+ Быстрый запуск
+ Настройки тайла Быстрого запуска
+ Основное приложение
+ Долгий тап, слот 1
+ Долгий тап, слот 2
+ Долгий тап, слот 3
+ Долгий тап, слот 4
+
+
+ GPS вкл
+ GPS выкл
+ GPS блок
+
+
+ Всегда показывать "Меню"
+
+
+ Режим звонка
+
+
+ Настройки часов
+
+
+ Прятать AM/PM
+
+
+ Прятать часы
+
+
+ Размер переключателей
+
+
+ Управление прозрачностью
+ Управляет прозрачностью статусбара и панели навигации
+ Статусбар для ланчера
+ Статусбара для экрана блокировки
+ Панель навиг. для ланчера
+ Панель навиг. для экрана блокировки
+
+
+ Спрятать значок будильника
+
+
+ Уровень затухания подсветки
+ Яркость для приглушенной подсветки - когда экран почти выключился (необходима перезагрузка)
+
+
+ Телефон
+ Планшет
+
+
+ Настройки яркости
+ Включить настройку яркости
+ Включить только в случае, если устройство использует стандартный механизм Android для регулировки яркости. Оставьте выключенным, если есть проблемы, как-то связанные с яркостью. (Необходима перезагрузка)
+
+
+ Показать недавние приложения
+
+
+ Действие по долгому нажатию Home
+
+
+ Запустить приложение 1
+ Выбрать приложение 1
+ Запустить приложение 2
+ Выбрать приложение 2
+ Приложение не выбрано!
+ Приложение не найдено!
+
+
+ Приложение-часы для панели уведомлений
+ Связывает часы на статусбаре с выбранным приложением вместо настроек Даты и времени
+
+
+ Ожидание отклика от системного фреймворка GravityBox…
+ Системный фреймворк GravityBox не отвечает. Выход.
+
+
+ Национальный роуминг
+ Подключаться к службам передачи данных в национальном роуминге
+
+
+ Расширенный рабочий стол
+ Отключено
+ Спрятать статусбар
+ Спрятать панель навигации
+ Прятать все
+ Расширенный рабочий стол
+ Расшренный рабочий стол ВКЛЮЧЕН
+ Расшренный рабочий стол ВЫКЛЮЧЕН
+
+
+ Снимок экрана
+
+
+ Показать меню
+
+
+ Включить расширенный рабочий стол
+ Расширенный рабочий стол отключен!
+
+
+ Настройки панели навигации
+ Содержит различные настройки панели навигации
+ Переписать настройки по умолчанию
+ Позволяет включить все твики панели навигации (Необходима перезагрузка)
+ Включить панель навигации
+ Необходима перезагрузка
+ Высота панели навигации
+ Применимо к портретной ориентации
+ Применять для горизонтальной и вертикальной ориентаций
+ Ширина панели навигации
+ Применимо к ландшафтной ориентации
+ Всегда показывать кнопку меню
+
+
+ Скриншот в меню выключения
+
+
+ Цели экрана блокировки
+ Включить цели экрана блокировки
+ Общий переключатель целей экрана блокировки
+ Целевое приложение %s
+ Вертикальное смещение кольца разблокировки
+ Горизонтальное смещение
+
+
+ Включить контроль яркости
+ Менять яркость слайдом вдоль статусбара
+
+
+ Телефония
+ Сообщения
+ Передача данных
+
+
+ Изменять unicode
+ Конвертирует unicode символы в обычные символы. Уменьшает общий размер сообщения.
+ Не изменять символы
+ Изменять некодируемые символы
+ Изменять все unicode символы
+
+
+ Отключить 2g предупреждение
+ Отключает предупреждение о низкойскорости передачи данных когда в быстрых настройках включен режим 2g для SIM-карты
+
+
+ Следовать цвету батареи
+ Позволяет часам в статусбаре, батарее и тексту с процентами использовать цвет стоковой батареи. Работает при выключенном изменении цветов иконок.
+
+
+ Режим тайла "Режим сети"
+ 2G/2G+3G/3G/(LTE)
+ 2G/2G+3G/(LTE)
+ 2G/3G/(LTE)
+
+
+ Разрешить все повороты
+
+
+ Заменить стандартное поведение тайлов
+ Заменяет поведение касания/долгого касания для выбранных тайлов (необходима перезагрузка)
+
+
+ Слот SIM для тайла Режим сети
+ Определяет слот, для которого работает тайл Режим сети (%s)
+ SIM slot 1
+ SIM slot 2
+
+
+ Никогда
+ Всегда
+ При включенном расширенном дисплее
+ Когда расширенный дисплей без панели навигации
+
+
+ Не трогать значок батареи
+ Использовать в случа замены стокового значка батареи сторонним модом
+
+
+ Вкл. экран при подключении
+ Если включено, экран будет вклчаться при подключении/отключении USB/наушников (необходима перезагрузка)
+
+
+ Откл. звук рег. громкости
+ Отключает звук, проигрываемы при регулировке громкости
+
+
+ Вибрация звонка
+ В начале звонка
+ В конце звонка
+ При ожидании звонка
+ Каждые 45 секунд при исходящем
+
+
+ Сортирвока тайлов
+ Позволяет сортировать тайлы
+
+
+ Блокировка уведомлений
+ Позволяет блокировать выбранные уведомления
+ Список формируется автоматически при появлении уведомления.
+ Вы можете решить позже, какое уведомление блокировать. Используйте с осторожностью.
+ Сбросить список
+ Вы уверены, что хотите сбросить список?
+ Это очистит список и разблокирует все текущие уведомления.
+ (список пуст)
+
+
+ Быстрая разблокировка
+ Разблокировать автоматически при вводе верного PIN/пароля.
+
+
+ Отключено
+ По умолчанию
+ строчными
+ ЗАГЛАВНЫМИ
+
+
+ Правила блокировки статусбара
+ По умолчанию
+ Разблокирован if keyguard insecured
+ Заблокирован
+
+
+ Монитор трафика
+ Включить мониторинг
+ Показывает трафик всегда, когда включена передача данных
+ Позиция
+ Автоматически (в центре или справа в зависимости от позиции часов)
+ Слева
+ Справа
+ Размер
+ Обычный
+ Маленький
+ Очень маленький
+ B
+ KB
+ MB
+ s
+
+
+ Отключить ограничение виджетов
+ Позволяет получить неограниченное количество виджетов экрана блокировки
+
+
+
+ %1$s свободно
+
+ %1$s использовано
+ Панель памяти текущих задач
+ выключено
+ сверху
+ снизу
+
+
+ Действие по одиночному касанию
+ Дейтсвие по долгому касанию
+
+
+ Статус батареи
+ Показывать арку батареи, нарисованную вокруг кольца разблокировки
+
+
+ Включить фонарик
+
+
+ Фонарик по долгому нажатию Home
+ Включить фонарек при заблокированном устройстве. "кран должен быть включен если устройство не может считывать нажатие кнопки во сне
+
+
+ Расширять автоматически
+
+
+ Кнопка Меню
+ Кнопка Домой
+ Кнопка Назад
+ Кнопка Недавние
+ Кнопки громкости
+ Другие настройки
+ Действие по долгому нажатию
+ Дейтсвие по одному нажатию
+ Действие по двойному касанию
+
+
+ Отключить двойное касание
+
+
+ Режим цвета сигнала
+ Использовать иконки GB (с поддержкой уровня)
+ Использовать станд. иконки (без поддержки уровня)
+ Не применять цвет
+
+
+ Запуск приложений
+ Диалог, позволяющий выбрать до 8 приложений, которые можно назначить для действий кнопок или поместить на панель навигации
+ Слот приложения %d
+ Приложения не выбраны. Используйте GravityBox / Запуск приложений для выбора приложений.
+
+
+ Показывать кнопку запуска приложения
+
+
+ Запустить приложение
+
+
+ Показать пользовательскую кнопку
+ Отключено
+ Поиск
+ Запуск приложений
+
+
+ Цвет веерного меню
+ Цвет фона
+ Цвет переднего плана
+ Цвет контура
+ Цвет выбранной кнопки
+ Цвет текста
+ Сбросить цвета
+
+
+ Включить фото неизвестного звонящего
+ Задать фото
+ Фото изменено
+ Фото не изменено
+
+
+ Ваш экран может не поддерживать значения меньше 20. Если ваш экран не засветится,
+ зажмите кнопку Громкость+ как минимум на 7 секунд для сброса яркости и затем исправьте значение яркости на большее.
+
+
+ Общие
+ Кнопки навигации
+ Цвет и прозрачность
+ Размеры
+
+
+ Включить цвета панели навигации
+ Может потребоваться перезагрузка после отключения
+ Цвет кнопок навигации
+ Цвет тени кнопок навигации
+ Цвет фона панели навигации
+
+
+ Отключить тень экрана блокировки
+ Удаляет темный оттенок с экрана блокировки
+
+
+ Режим настройки прозрачности
+ Необходима перезагрузка
+ Отключено
+ Статусбар
+ Панель навигации
+ Оба
+
+
+ Цвет вторичного значка сигнала
+ Заменяет стандартный оранжевый цвет значка
+ Цвет активности данных
+ Задает увет для индикатора активности данных
+
+
+ Стиль значков статусбара
+ Применяется ко всем значкам статусбара беззвучный, вибрация и т.д.
+ JellyBean
+ KitKat
+
+
+ Двойное нажатие Назад
+
+
+ Домой
+ Назад
+
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index c7ba793741..c93ffb165c 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -1,11 +1,14 @@
-
-
+
+
GravityBox
-
+
Štýl indikátora batérieZákladný
- Kruhový s percentami
+ Kruhový
+ Kruhový s percentami
+ KitKat
+ KitKat s percentamiPercentuálny text stavu batérieŽiadny
@@ -72,6 +75,15 @@
ZaznamenanéPodržte pre záznamDotykom zastavíte záznam
+ Vypnuté
+ Normálna plocha
+ Rozšírená plocha
+ Bdenie zap
+ Bdenie vyp
+ Wi-Fi
+ Wi-Fi vyp
+ Nepripojené
+ Zapína sa…Dlaždice QuickSettings panelu
@@ -80,8 +92,10 @@
Režim v lietadleStav batérieWi-Fi
+ Wi-Fi (CM štýl)BluetoothGPS
+ GPS (CM štýl)Mobilné dátaTyp sieteVyužitie dát
@@ -95,6 +109,10 @@
GravityBoxUspaťRýchly záznam zvuku
+ Hlasitosť
+ Rozšírená plocha
+ Bdenie
+ ScreenshotVýber farby
@@ -125,12 +143,12 @@
Naprogramoval C3C076@XDA. Dotykom otvoríte oficiálnu stránku.Xposed frameworkNaprogramoval rovo89@XDA. Dotykom otvoríte oficiálnu stránku.
- Prispieť
- Prispejte cez PayPal ak si myslíte, že táto aplikácia za to stojí! Zvážte tiež príspevok pre rovo89 za jeho excelentný Xposed framework.
+ Podporiť vývoj
+ Dotykom podporíte vývoj aplikácie venovaním príspevku ľubovoľnej hodnoty cez PayPal
- Váš telefón bude reštartovaný
- Váš telefón bude reštartovaný do režimu Recovery
+ Váš %s bude reštartovaný.
+ Váš %s bude reštartovaný do režimu Recovery.CRT efekt vypnutia obrazovky
@@ -177,16 +195,15 @@
Minimálna úroveň jasuUmožňuje nastaviť minimálnu úroveň jasu pre manuálne nastavenie jasu (vyžaduje reštart)
- Hodnota z intervalu: 10 – 80Úrovne automatického jasuUmožňuje nastaviť úrovne svetla prostredia a zodpovedajúce úrovne podsvietenia obrazovkyÚroveňLux max
- Jas (10 – 255)
+ Jas (%d – 255)Zadané číslo nie je platné
- Neodporúča sa nastaviť úroveň jasu menšiu ako 10
+ Neodporúča sa nastaviť úroveň jasu menšiu ako %dÚroveň jasu nesmie byť väčšia ako 255Hodnoty nesmú byť menšie alebo rovné nuleHodnoty na nižších úrovniach nesmú byť väčšie ako hodnoty na vyšších úrovniach
@@ -194,6 +211,7 @@
Hodnoty pre %s nastavenéNová konfigurácia automatického jasu bola uloženáNová konfigurácia automatického jasu NEBOLA uložená
+ NastaviťRotácia obrazovky uzamknutia
@@ -229,9 +247,9 @@
Akcie tlačidielUmožňuje nastavenie akcií pre hardvérové tlačidlá
- Dlhé podržanie Menu
- Dvojité ťuknutie na Menu
- Dlhé podržanie Späť
+ Dlhé podržanie Menu
+ Dvojité ťuknutie na Menu
+ Dlhé podržanie SpäťPredvolenéVyhľadávanieHlasové vyhľadávanie
@@ -242,7 +260,7 @@
Vzťahuje sa na akciu zabitia aplikácie v popredí dlhým podržaním tlačidla. Definuje, ako dlho musí byť tlačidlo podržané aby došlo k vykonaniu akcie.Rýchlosť dvojitého ťuknutiaVzťahuje sa na dvojité ťuknutie na Menu. Definuje, ako rýchlo musí byť vykonané dvojité ťuknutie aby došlo k vykonaniu akcie.
- Aplikácia zabitá
+ Aplikácia %s zabitáNie je čo zabiťŽiadna predošlá aplikácia
@@ -257,10 +275,6 @@
Stlmiť zvonenieZrušiť hovor
-
- Zakázať vibrovanie pri nadviazaní hovoru
- Zakáže vibráciu, ktorá je vykonaná pri nadviazaní hovoru
-
Plné čierne pozadieNahradí štandardné čierno-šedé pozadie (gradient) plnou čiernou farbou (vyžaduje reštart)
@@ -345,7 +359,6 @@
KoláčZapnúť koláč
- Povoliť tlačidlo hľadaniaVeľkosť koláčaPozície koláčaĽavý okraj obrazovky
@@ -369,9 +382,9 @@
Vyhladené Holo pozadieNahradí štandardné Holo pozadie vyhladeným obrázkom za účelom eliminácie pruhov farebného prechodu (vyžaduje reštart)
-
- Zablokovať HW tlačidlá
- Zablokuje MENU, SPÄŤ, DOMOV pokiaľ je zapnutý koláč. Akcie HW tlačidiel budú naďalej fungovať (pre zariadenia s HW tlačidlami)
+
+ Zablokovať navigačné tlačidlá
+ Zablokuje ťuknutie na tlačidlá pokiaľ je zapnutý koláčPoužiť tmavú tému
@@ -387,4 +400,383 @@
Prispôsobiť horný okraj
-
+
+ Vypnúť roaming varovania
+ Vypne zobrazovanie varovaní pri posielaní správ a volaní v roamingu
+
+
+ Hľadať
+ (Žiadna)
+
+
+ Quick App
+ Nastavenia QuickApp dlaždice
+ Hlavná aplikácia
+ Dlhé stlačenie - app slot 1
+ Dlhé stlačenie - app slot 2
+ Dlhé stlačenie - app slot 3
+ Dlhé stlačenie - app slot 4
+
+
+ GPS zap
+ GPS vyp
+ GPS fix
+
+
+ Vždy zobraziť menu tlačidlo
+
+
+ Režim zvonenia
+
+
+ Nastavenia hodín
+
+
+ Skryť AM/PM
+
+
+ Skryť hodiny
+
+
+ Veľkosť aktivátora
+
+
+ Nastavenia priehľadnosti
+ Umožňuje nastavenie úrovne priehľadnosti pre stavový riadok a navigačnú lištu
+ Stavový riadok pre launcher
+ Stavový riadok pre lockscreen
+ Navigačná lišta pre launcher
+ Navigačná lišta pre lockscreen
+
+
+ Skryť ikonu alarmu
+
+
+ Úroveň zatmavenia obrazovky
+ Úroveň jasu pre zatmavenie obrazovky tesne pred jej vypnutím (vyžaduje reštart)
+
+
+ telefón
+
+
+ Nastavenia jasu
+ Povoliť nastavenia jasu
+ Použiť len v prípade, ak zariadenie podporuje štandardné Android nastavenia jasu. V prípade problémov s jasom je potrebné ponechať nastavenia vypnuté. (vyžaduje reštart)
+
+
+ Zoznam spustených aplikácií
+
+
+ Dlhé podržanie Domov
+
+
+ Spustiť aplikáciu 1
+ Nastaviť aplikáciu na spustenie 1
+ Spustiť aplikáciu 2
+ Nastaviť aplikáciu na spustenie 2
+ Aplikácia nie je nastavená!
+ Aplikácia nebola nájdená!
+
+
+ Aplikácia hodín notifikačného panelu
+ Naviaže hodiny notifikačného panelu na zvolenú aplikáciu namiesto nastavenia dátumu a času
+
+
+ Čakám na odpoveď zo systémového modulu GravityBox…
+ Systémový modul GravityBox neodpovedá.
+
+
+ Národný dátový roaming
+ Povolí dátové služby počas národného roamingu
+
+
+ Režim rozšírenej plochy
+ Vypnuté
+ Skryť stavový riadok
+ Skryť navigačnú lištu
+ Skryť stavový riadok aj navigačnú lištu
+ Rozšírená plocha
+ Rozšírená plocha je ZAP
+ Rozšírená plocha je VYP
+
+
+ Screenshot
+
+
+ Vyvolať menu
+
+
+ Prepnúť rozšírenie plochy
+ Režim rozšírenej plochy je vypnutý!
+
+
+ Nastavenia navigačnej lišty
+ Obsahuje rôzne nastavenia týkajúce sa navigačnej lišty
+ Obísť systémové nastavenia
+ Hlavný prepínač pre povolenie nastavení navigačnej lišty (vyžaduje reštart)
+ Povoliť navigačnú lištu
+ Vyžaduje reštart
+ Výška navigačnej lišty
+ Pre horizontálnu navigačnú lištu a orientáciu na výšku
+ Pre horizontálnu navigačnú lištu a orientáciu na šírku
+ Šírka navigačnej lišty
+ Pre vertikálnu navigačnú lištu
+ Vždy zobraziť menu tlačidlo
+
+
+ Screenshot v menu napájania
+
+
+ Nastavenia odomykacieho prstenca
+ Povoliť skratky
+ Hlavný vypínač pre skratky obrazovky uzamknutia
+ Aplikácia pre skratku %s
+ Vertikálny ofset prstenca
+ Horizontálny ofset prstenca
+
+
+ Povoliť ovládanie jasu
+ Povolí ovládanie jasu posúvaním prsta po stavovej lište
+
+
+ Telefón
+ Správy
+ Mobilné dáta
+
+
+ Konverzia diakritiky
+ Odstráni diakritiku zo správy pred jej odoslaním. Znižuje nároky na počet znakov správy.
+ Ponechať predvolené
+ Konverzia nekódovateľných znakov
+ Konverzia všetkých znakov
+
+
+ Vypnúť varovanie pomalých 2G dát
+ Vypne varovanie o pomalých 2G dátach pre SIM v režime 2G, pri zapnutí dát použitím dlaždice
+
+
+ Kopírovať farbu stock batérie
+ Nastaví farbu hodín, percent batérie a kruhového indikátora podľa farby stock batérie (v prípade ak je vypnuté vlastné vyfarbovanie)
+
+
+ Režim dlaždice typu mobilnej siete
+
+
+ Povoliť všetky rotácie
+
+
+ Zmeniť štandardné správanie dlaždíc
+ Zmení akcie na dotyk/dlhý dotyk pre zvolené dlaždice (vyžaduje reštart)
+
+
+ SIM slot pre typ mobilnej siete
+ Definuje SIM slot, na ktorý sa vzťahuje dlaždica zmeny režimu mobilnej siete (%s)
+ SIM slot 1
+ SIM slot 2
+
+
+ Nikdy
+ Vždy aktívne
+ Len počas rozšírenej plochy
+ V prípade ak režim rozšírenej plochy skryje navigačnú lištu
+
+
+ Nevyfarbovať stock ikonu batérie
+ Použiť v prípade, ak bola stock ikona batérie nahradená inou (napr. použitím externého modu batérie)
+
+
+ Odpojenie napájania zapne obrazovku
+ Ak aktívne, obrazovka sa zapne automaticky po pripojení/odpojení usb kábla (vyžaduje reštart)
+
+
+ Vypnúť zvuky nastavenia hlasitocti
+ Vypne zvuky, ktoré sa prehrávajú počas zmeny hlasitosti tlačidlami pre nastavenie hlasitosti
+
+
+ Vibrácie volania
+ Pri nadviazaní hovoru
+ Pri ukončení hovoru
+ Pri čakajúcom hovore
+ Každú 45. sekundu v minúte pri odchádzajúcom hovore
+
+
+ Usporiadanie dlaždíc
+ Umožňuje usporiadať dlaždice poďla potreby
+
+
+ Blokátor prebiehajúcich notifikácií
+ Umožňuje blokovanie vybraných prebiehajúcich notifikácií
+ Zoznam sa aktualizuje automaticky pri vzniknutí každej novej prebiehajúcej notifikácie.
+ Následne sa môžete rozhodnúť, ktoré notifikácie blokovať pri ich ďalšom vzniknutí.
+ Resetovať zoznam
+ Skutočne resetovať zoznam?
+ Všetky záznamy budú vymazané a zároveň budú všetky blokované notifikácie odblokované.
+
+
+ Rýchle odomknutie
+ Odomknúť automaticky po zadaní správneho PIN/hesla, bez potreby stlačenia ENTER
+
+
+ Vypnuté
+ Štandardné zobrazenie
+ Malými písmenami
+ Veľkými písmenami
+
+
+ Povoliť stiahnutie stavovej lišty
+ Predvolené nastavenie
+ Ak je obrazovka uzamknutia nezabezpečená
+ Nikdy
+
+
+ Monitor dátového toku
+ Zapnúť monitorovanie
+ Zobrazí monitor dátového toku automaticky, ak je aktívne dátové spojenie
+ Pozícia
+ Auto (v strede alebo vpravo, na základe aktuálnej pozície hodín)
+ Vľavo
+ Vpravo
+ Veľkosť
+ Normálna
+ Menšia
+ Najmenšia
+
+
+ Vypnúť limit widgetov
+ Umožní neobmedzený počet widgetov obrazovky uzamknutia
+
+
+
+ %1$s voľných
+
+ %1$s využitých
+ RAM lišta v zozname spustených aplikácií
+ Vypnutá
+ Zobraziť hore
+ Zobraziť dole
+
+
+ Ťuknutie na tlačidlo zoznamu aplikácíí
+ Dlhé podržanie tlačidla zoznamu aplikácií
+
+
+ Oblúkový indikátor stavu batérie
+ Zobrazí oblúk po obvode odomykacieho prstenca, reprezentujúci stav batérie
+
+
+ Zapnúť/vypnúť svetlo
+
+
+ Ovládanie svetla tlačidlom Domov
+ Zapne/vypne svetlo dlhým podržaním tlačidla Domov na obrazovke uzamknutia.
+ Ak zariadenie nemá natívnu podporu prebudenia tlačidlom Domov, obrazovka musí byť počas prepínanie zapnutá.
+
+
+ Rozšíriť automaticky
+
+
+ Tlačidlo Menu
+ Tlačidlo Domov
+ Tlačidlo Späť
+ Tlačidlo Spustené aplikácie
+ Tlačidlá ovládania hlasitosti
+ Ďalšie nastavenia
+ Akcia na dlhé podržanie
+ Akcia na ťuknutie
+ Akcia na dvojité ťuknutie
+
+
+ Vypnúť dvojité ťuknutie
+
+
+ Režim vyfarbovania signálu
+ Použiť GravityBox ikony (s podporou úrovne signálu)
+ Použiť originál ikony (bez podpory úrovne signálu)
+ Nevyfarbovať
+
+
+ Spúšťač aplikácií
+ Dialóg s aplikáciami, ktorý môže byť aktivovaný na akciu tlačidla, alebo cez dodatočné tlačidlo navigačnej lišty, alebo z koláča
+ Aplikácia %d
+ Nie sú priradené žiadne aplikácie. Použite GravityBox / Spúšťač aplikácií pre priradenie aplikácií.
+
+
+ Tlačidlo spúštača aplikácií
+
+
+ Zobraziť spúšťač aplikácií
+
+
+ Voliteľné tlačidlo
+ Vypnuté
+ Hľadať
+ Spúšťač aplikácií
+
+
+ Farby koláča
+ Farba pozadia
+ Farba ikon
+ Farba okraja
+ Farba aktívneho tlačidla
+ Farba textu
+ Resetovať farby
+
+
+ Povoliť foto neznámeho čísla
+ Nastaviť foto neznámeho čísla
+ Foto nastavené
+ Foto nebolo nastavené
+
+
+ Vaša obrazovka nemusí podporovať hodnoty jasu nižšie ako 20. Ak sa obrazovka nerozsvieti,
+ držte tlačidlo Hlasitosť+ po dobu 7 sekúnd pre rozsvietenie obrazovky. Následne zmeňte nastavenie minimálneho jasu na vyššiu hodnotu.
+
+
+ Plná dĺžka posuvníkov
+ Umožní posuvníkom využiť celú dĺžku panelu nastavenia hlasitosti
+
+
+ Všeobecné
+ Navigačné tlačidlá
+ Farby
+ Rozmery
+
+
+ Povoliť farby
+ Môže vyžadovať reštart po deaktivácii
+ Farba tlačidiel
+ Efekt tlačidiel
+ Farba pozadia lišty
+
+
+ Vypnúť zatmavenie
+ Vypne zatmavenie obrazovky uzamknutia
+
+
+ Režim priehľadnosti
+ Vyžaduje reštart
+ Vypnutý
+ Stavový riadok
+ Navigačná lišta
+ Stavový riadok aj navigačná lišta
+
+
+ Farba sekundárneho signálu
+ Nahradí pôvodnú oranžovú verziu ikony signálu
+ Sekundárny indikátor dátovej aktivity
+ Nastaví farbu pre sekundárny indikátor dátovej aktivity
+
+
+ Štýl stavových ikon
+ Platí pre stavové ikony ako ikona vypnutého zvonenia, vibrovania, budíka, atď.
+ JellyBean
+ KitKat
+
+
+ Dvojité ťuknutie na Späť
+
+
+ Domov
+ Späť
+
+
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
new file mode 100755
index 0000000000..e66fd1c3cb
--- /dev/null
+++ b/res/values-tr/strings.xml
@@ -0,0 +1,667 @@
+
+
+
+
+
+ GravityBox
+
+ Pil göstergesi stili
+ Orijinal
+ Çember
+ Yüzdeli çember
+ Yüzde metni
+ Hiçbiri
+
+ Ses tuşlarıyla müzik kontrolü
+ Ekran kapalıyken ses tuşlarına uzun basıldığında sonraki şarkıya geç
+
+ Düşük pil uyarısı
+ Pencere ve ses
+ Sadece pencere
+ Sadece ses
+ Kapalı
+
+ Yeniden başlatıldığında değişiklik uygulanacak
+
+ Sinyal simgelerini otomatik gizle
+ Seçilen SIM yuvaları takılmadığında \"SIM takılı değil\" uyarılarını gizle
+ SIM Yuvası 1
+ SIM Yuvası 2
+ Bildirimleri kapat
+ \"SIM takılı değil\" bildirimlerini kapat
+
+ Gelişmiş yeniden başlatma menüsü
+ Gelişmiş yeniden başlatma menüsüne Kurtar seçeneğini ekler
+ Recovery
+ Bootloader
+
+ Ses tuşuyla imleç kontrolü
+ Metin alanlarında ses tuşlarıyla imleci hareket ettir
+ Kapalı
+ Ses yukarı/aşağı tuşu imleci soldan sağa taşır
+ Ses yukarı/aşağı tuşu imleci sağdan sola taşır
+
+ Son görevlerin tümünü temizle
+
+ Tarih&Saat ayarı çökmesini düzelt
+ Tarih&Saat ayarlarına erişirken çökme sorunu yaşıyorsanız etkinleştirin (yeniden başlatma gerektirir)
+
+ Telefon için Arayan Kimliğini düzelt
+ Kişiniz çağrı geldiğinde rehberle eşleşmiyorsa etkinleştirin (yeniden başlatma gerektirir)
+ Değişikliklerin etkili olması için cihazı yeniden başlattıktan sonra kişilerinizi temizlemeniz ve yeniden eklemeniz önerilir. Ayarlar / Uygulamalar / Tümü / Kişiler Sağlayıcısı / Verileri Temizle
+
+ Mesajlar için Arayan Kimliğini düzelt
+ Aynı kişi için ayrı sohbet penceresi görünüyorsa etkinleştirin (yeniden başlatma gerektirir)
+ Değişikliklerin etkili olması için ayrı görünen sohbet mesajlarını silmeniz önerilir.
+
+ Takvim uygulamasını düzelt
+ Ekran kendi kendine açılıyorsa etkinleştirin (yeniden başlatma gerektirir)
+
+ Önemli
+
+ Arayan tam ekran fotoğrafı
+ Çağrı geldiğinde arayan kişinin fotoğrafını tam ekran göster
+
+
+ Sync açık
+ Sync kapalı
+ Wi-Fi AP açık
+ Wi-Fi AP kapalı
+ Fener açık
+ Fener kapalı
+ Kapatmak için dokunun
+ Çalıyor…
+ Kaydediyor…
+ Kaydedildi
+ Kaydetmek İçin Uzun Bas
+ Kaydı durdurmak için dokunun
+ Kapalı
+ Normal
+ Genişletilmiş
+ Uyanık kal
+ Uyu
+ Wi-Fi
+ Wi-Fi kapalı
+ Bağlı değil
+ Açılıyor...
+
+
+ Durum çubuğu HızlıAyarlar kareleri
+ Durum çubuğundaki HızlıAyarlar karelerini göster veya gizle
+ Kullanıcı profili
+ Uçak modu
+ Pil durumu
+ Wi-Fi
+ Wi-Fi (CM stili)
+ Bluetooth
+ GPS
+ GPS (CM stili)
+ Mobil veri
+ Ağ modu
+ Veri kullanımı
+ Ses profilleri
+ Parlaklık
+ Ekran zamanaşımı
+ Otomatik döndür
+ Senkronizasyon
+ Wi-Fi Erişim Noktası
+ Fener
+ GravityBox
+ Uyku
+ Hızlı Kaydet
+ Ayarlar
+ Ses
+ Genişletilmiş masaüstü
+ Uyanık kal
+ Ekran görüntüsü
+
+
+ Renk Seçici
+ Uygulamak için renge dokunun
+
+
+ Durum çubuğu arkaplan rengi
+ Durum çubuğu arkaplan rengini ve saydamlığı ayarla
+
+
+ Konuşma ayarlarını düzelt
+ Dil&Giriş - Sesli Arama ve Metinden-Sese ayarlarını düzeltir (yeniden başlatma gerektirir)
+
+
+ Gelişmiş geliştirici seçenekleri
+ Gelişmiş geliştirici seçeneklerini etkinleştirir (yeniden başlatma gerektirir)
+
+
+ Durum çubuğu iyileştirmeleri
+ Çeşitli durum çubuğu iyileştirmelerini içerir
+ Çeşitli iyileştirmeler
+ Belirli bir kategoriye ait olmayan diğer tüm iyileştirmeleri içerir
+ Genel düzeltmeler
+ MTK6589 çipsetine özel iyileştirmeler. Gerekliyse kullanın.
+
+
+ Hakkında
+ Kodlama: C3C076@XDA. Resmi tartışmayı ziyaret etmek için dokunun.
+ Xposed framework
+ Kodlama rovo89@XDA. Resmi tartışmayı ziyaret etmek için dokunun.
+ Bağış Yap
+ Bu uygulama hoşunuza gittiyse bağış yapabilirsiniz. Mükemmel Xposed framework için rovo89\'a da bağış yapabilirsiniz.
+
+
+ %s yeniden başlatılacak.
+ %s Kurtarma modunda başlatılacak.
+ %s Bootloader modunda başlatılacak.
+
+
+ Ekran kapanma efekti
+ Ekran kapandığında eski televizyonlardaki CRT kapanış efektini etkinleştirir
+
+
+ Mühendis modu
+ Mühendis modu uygulamasını başlatır
+
+
+ Çift SIM Zil Sesi
+ Her SIM için farklı zil sesi ve bildirim ayarlamaya olanak veren uygulamayı başlat
+
+
+ Kilit ekranı iyileştirmeleri
+ Çeşitli kilit ekranı iyileştirmeleri
+ Kilit ekranı arkaplanı
+ Arkaplan stili
+ Varsayılan duvar kağıdı
+ Renk doldur
+ Özel resim
+ Özel renk ayarla
+ Kilit ekranı için özel arkaplan rengini ayarla
+ Özel resim ayarla
+ Kilit ekranı için özel arkaplan resmini ayarla
+ Arkaplan değişti
+ Arkaplan değişmedi
+ Diğer
+ Widgetleri büyüt
+ Etkinleştirilirse kilit ekranı widgetleri büyütülecek
+
+
+ Güç iyileştirmeleri
+ Güçle ilgili çeşitli iyileştirmeler
+
+
+ LED bildirimini kapat
+ Pil düşükken ve şarj olmuyorken LED bildirimini devre dışı bırak
+
+
+ Ekran iyileştirmeleri
+ Çeşitli ekran iyileştirmeleri
+
+
+ En düşük parkaklık seviyesi
+ Elle parlaklık ayarına uygulanan en düşük parlaklık seviyesini ayarlar. (yeniden başlatma gerektirir)
+
+
+ Otomatik parlaklık seviyeleri
+ Ortam ışığına göre LCD arka ışık değerlerini ayarlar
+ Seviye
+ Max Lux
+ Parlaklık (%d – 255)
+ Belirtilen sayı geçerli değil
+ %d\'un altında parlaklık ayarı önerilmez
+ Parlaklık 255\'ten fazla olamaz
+ Değerler sıfıra eşit veya küçük olamaz
+ Düşük değer, yüksek değerden büyük olamaz
+ Yüksek değer, düşük değerden küçük olamaz
+ %s için değerler ayarlandı
+ Yeni otomatik parlaklık ayarı kaydedildi
+ Yeni otomatik parlaklık ayarı kaydedilmedi
+
+
+ Kilit ekranı döndürme
+ UYARI: AOSP kilit ekranındaki kilit açma halkası bazı aygıtlarda üretici tarafından değiştirilmiş olabilir.
+
+
+ Menü tuşunu etkinleştir
+ Menü tuşu ile kilit açmaya izin verir (yeniden başlatma gerektirir)
+
+
+ Mesajlaşma uyandırma kilidi düzeltmesi
+ Yeni mesaj alındığında ekranın açılmasını engeller (yeniden başlatma gerektirir)
+
+
+ Ortalı saat
+
+
+ Medya iyileştirmeleri
+ Medya ve ses sistemi için çeşitli iyileştirmeler
+
+
+ Daha fazla ses seviyesi
+ Müzik için daha fazla ses seviyesi ekler (yeniden başlatma gerektirir)
+
+
+ Güvenli kulaklık sesi
+ Kulaklık takıldığında güvenli ses seviyesini etkinleştirir
+
+
+ Şarj oluyor LED bildirimi
+ Şarj olurken LED bildirimini kapat
+
+
+ Fiziksel tuş işlemleri
+ Fiziksel tuşlara özel eylem ata
+ Menü tuşu uzun-basma eylemi
+ Menü tuşu çift-tıklama eylemi
+ Geri tuşu uzun-basma eylemi
+ Varsayılan
+ Arama
+ Sesli Arama
+ Önceki uygulama
+ Önplan uygulamayı sonlandır
+ Uykuya geç
+ Uygulama sonlandırma uzun-basma gecikmesi
+ Uygulama sonladırma eylemine uygulanır. Tuşa ne kadar süre ile basılacak?
+ Çift-tıklama hızı
+ Menü tuşu çift-tıklama eylemine uygulanır. Çift-tıklamanın oluşması için tuşa ne kadar hızlı basılacak?
+ Uygulama %s sonlandırıldı
+ Sonlanacak uygulama yok
+ Önceki uygulama yok
+
+
+ Telefon iyileştirmeleri
+ Çeşitli telefon iyileştirmeleri
+
+
+ Çağrı geldiğinde ters çevirme eylemi
+ Çağrı gelip aygıt ters çevrildiğinde yapılacak işlem
+ Hiçbir şey yapma
+ Sesi kıs
+ Çağrıyı reddet
+
+
+ Hızlı yeniden başlat
+
+
+ Düz siyah arkaplan
+ Varsayılan Holo sistem teması için siyah-gri renk geçişi yerine düz siyah arkaplan kullan (yeniden başlatma gerektirir)
+
+
+ Her satırdaki kare
+ Her bir satırda kaç tane HızlıAyarlar karesi gösterilecek? Kareler gerektiğinde yeniden boyutlandırılır ve sadece dikey moda uygulanır.
+
+
+ Haftanın gününü göster
+
+
+ Genişletilebilir ses paneli
+ Farklı sesler için genişletilebilir ses panelini etkinleştirir
+
+
+ Zil sesi ve bildirimleri birleştir
+ Devre dışı bırakıldığında, zil sesi ve bildirimler için sesler ayrı ayrı ayarlanabilir
+
+
+ HızlıAyarları otomatik göster
+ Bildirim yoksa ve durum çubuğu aşağı çekilirse HızlıAyarları otomatik olarak göster
+
+
+ Hızlı aşağı çekme
+ Hangi köşeden durum çubuğu aşağı çekildiğinde HızlıAyarlar gösterilsin?
+ Kapalı
+ Sağ
+ Sol
+
+
+ Ses tuşuyla uyandırmayı devre dışı bırak
+ Ses tuşlarına basıldığında ekranı açma
+
+
+ Durum çubuğu renkleri
+
+
+ Simge renklerini etkinleştir
+
+
+ Durum çubuğu simge rengi
+ Durum çubuğundaki simgeler ve saat için renk ayarlar
+
+
+ Veri etkinliği rengi
+ Veri etkinliği göstergelerinin rengini ayarlar
+
+
+ HızlıAyarlar yönetimi
+
+
+ Bildirim ekranı stili
+
+
+ Bildirim ekranı arkaplanı
+ Varsayılan arkaplan
+ Renk doldur
+ Özel resim
+ Arkaplan rengi ayarla
+ Dikey resmi ayarla
+ Yatay resmi ayarla
+ Arkaplan saydamlığı
+ Arkaplan modu
+ Üstünü kapla
+ Altını kapla
+
+
+ Dolaşım göstergesini devre dışı bırak
+ Devre dışı bırakıldığında, dolaşımdayken R(roaming) simgesi gösterilmez. Dikkatli kullanın.
+
+
+ Şarj oluyor (%d%%)
+ Şarj oldu
+ %d%% kaldı
+
+
+ Hizmet yok
+ Uçak modu etkin
+ Sadece acil çağrılar
+
+
+ Pasta dilimi kontrolleri
+ Pasta dilimi kontrollerini etkinleştir
+ Gezinme tuşu boyutu
+ Tetikleme konumu
+ Sol ekran kenarı
+ Alt ekran kenarı
+ Sağ ekran kenarı
+ Üst ekran kenarı
+
+
+ Tuş arka ışığı modu
+ Varsayılan
+ Devre dışı bırak
+ Ekran açıkken her zaman açık
+ Tuş arka ışığı bildirimleri
+ DENEYİMSEL! Bildirim varken arka ışıklar yanıp söner. Aygıtınızın LED bildirimi yoksa kullanın. Pili tüketebilir.
+
+
+ Gezinme çubuğunu gizle
+ Pasta Dilimleri etkinse gezinme çubuğunu gizler (Gezinme çubuğu olan aygıtlar içindir ve yeniden başlatma gerektirir)
+
+
+ Holo Renk Bandı
+ Holo arkaplanını rengi bandı olmayan bir arkaplanla değiştirir (yeniden başlatma gerektirir)
+
+
+ Donanım tuşlarını devre dışı bırak
+ Pasta dilimi etkinken MENU, GERİ, EV tuşlarını devre dışı bırakır. Fiziksel tuşları olan aygıtlar içindir ve donanım tuşu eylemleri çalışmaya devam eder.
+
+
+ Koyu Holo teması kullan
+ Arayüzde Koyu Holo temasını etkinleştirir
+
+
+ Kapat
+ Üst sol
+ Üst sağ
+ Alt sol
+ Alt sağ
+
+
+ Üst boşluk ayarı
+
+
+ Dolaşım uyarılarını kapat
+ Dolaşımdayken, mesaj gönderirken veya telefon araması yaparken dolaşım uyarılarını kapatır
+
+
+ Arama
+ (Hiçbiri)
+
+
+ HızlıUygulama
+ Hızlı Uygulama kare ayarları
+ Ana uygulama
+ Uzun basma uygulama slotu 1
+ Uzun basma uygulama slotu 2
+ Uzun basma uygulama slotu 3
+ Uzun basma uygulama slotu 4
+
+
+ GPS açık
+ GPS kapalı
+ GPS kilitli
+
+
+ Menü düğmesini her zaman göster
+
+
+ Zil sesi modu
+
+
+ Saat ayarları
+
+
+ AM/PM gizle
+
+
+ Saati gizle
+
+
+ Tetikleyici boyutu
+
+
+ Saydamlık yönetimi
+ Başlatıcı için durum çubuğu saydamlığı
+ Kilit ekranı için durum çubuğu saydamlığı
+ Başlatıcı için gezinme çubuğu saydamlığı
+ Kilit ekranı için gezinme çubuğu saydamlığı
+
+
+ Alarm simgesini gizle
+
+
+ Ekran kararma seviyesi
+ Loş durum için parlaklık değeri - ekran kapanmak üzereyken (yeniden başlatma gerektirir)
+
+
+ Telefon
+ Tablet
+
+
+ Parlaklık ayarları
+ Parlaklık ayarlarını etkinleştir
+ Aygıtınız sadece standart Android parlaklık özelliğini destekliyorsa kullanın. Parlaklıkla ilgili sorun yaşarsanız devre dışı bırakın. (yeniden başlatma gerektirir)
+
+
+ Son uygulamaları göster
+
+
+ Ev tuşu uzun-basma eylemi
+
+
+ Özel uygulama başlat 1
+ Özel uygulama ayarla 1
+ Özel uygulama başlat 2
+ Özel uygulama ayarla 2
+ Özel uygulama atanmamış!
+ Özel uygulama bulunamadı!
+
+
+ Bildirim paneli saat uygulaması
+ Bildirim paneli saatini Tarih&Saat ayarları yerine özel uygulama ile belirle
+
+
+ GravityBox system framework\'ten cevap bekleniyor…
+ GravityBox system framework cevap vermiyor. Çıkılıyor.
+
+
+ Ulusal veri dolaşımı
+ Ulusal dolaşımdayken veri hizmetlerine bağlan
+
+
+ Genişletilmiş masaüstü modu
+ Etkin değil
+ Durum çubuğunu gizle
+ Gezinme çubuğunu gizle
+ İkisini de gizle
+ Genişletilmiş masaüstü
+ Genişletilmiş masaüstü ETKİN
+ Genişletilmiş masaüstü PASİF
+
+
+ Ekran görüntüsü
+
+
+ Menü göster
+
+
+ Genişletilmiş masaüstü değiştir
+ Genişletilmiş masaüstü devre dışı!
+
+
+ Gezinme çubuğu iyileştirmeleri
+ Gezinme çubuğu ile ilgili iyileştirmeler
+ Sistem varsayılanlarının üzerine yaz
+ Gezinme çubuğu iyileştirmeleri için ana tuş (yeniden başlatma gerektirir)
+ Gezinme çubuğunu etkinleştir
+ Yeniden başlatma gerektirir
+ Gezinme çubuğu yükseklik
+ Yatay gezinme çubuğuna ve dikey yöne uygulanır
+ Yatay gezinme çubuğuna yatay yöne uygulanır
+ Gezinme çubuğu genişlik
+ Dikey gezinme çubuğuna uygulanır
+ Menü tuşunu her zaman göster
+
+
+ Güç menüsünde ekran görüntüsü
+
+
+ Kilit açma halkası ayarları
+ Kilit açma halkası hedeflerini etkinleştir
+ Kilit açma halkası hedefleri ana tuş
+ Hedef uygulama %s
+ Kilit açma halkası dikey offset
+ Kilit açma halkası yatay offset
+
+
+ Parlaklık kontrolünü etkinleştir
+ Durum çubuğunun üzerinde kaydırarak parlaklığı ayarlar
+
+
+ Telefon
+ Mesajlaşma
+ Mobil veri
+
+
+ Unicode çıkar
+ Unicode karakterleri normal karakterlere çevirir. Mesaj boyutunu azaltır.
+ Karakterleri olduğu gibi bırak
+ Çevrilmeyen karakterleri çıkar
+ Tüm unicode karakterleri çıkar
+
+
+ Yavaş 2G uyarısını devre dışı bırak
+ HızlıAyarlar mobil veriyi açarken, SIM için 2G modunda veri hızı uyarısını devre dışı bırak
+
+
+ Pil rengiyle aynı renk yap
+ Durum çubuğu saati, yüzdesi ve çember pildeki renkleri orijinal pil simgesi rengi ile aynı renk yapar. Simge renklendirme kapalıyken uygulanır.
+
+
+ Ağ modları
+ 2G/2G+3G/3G/(LTE)
+ 2G/2G+3G/(LTE)
+ 2G/3G/(LTE)
+
+
+ Tüm yönlere izin ver
+
+
+ Varsayılan kare davranışını değiştir
+ Seçili kareler için dokunma/uzun-dokunma davranışının üzerine yazar (yeniden başlatma gerektirir)
+
+
+ Ağ modu karesi SIM slotu
+ Ağ modunun hangi sim slotuna uygulanacağı tanımlar (%s)
+ SIM slotu 1
+ SIM slotu 2
+
+
+ Hiçbir zaman
+ Her zaman
+ Genişletilmiş masaüstü etkinken
+ Genişletilmiş masaüstü, gezinme çubuğunu gizlerken
+
+
+ Pil simgesini değiştirme
+ Pil simgesi üçüncü parti bir uygulama tarafından değiştirilirse orijinal simgeye döndür
+
+
+ Çıkarıldığında ekranı aç
+ Cihazı usb veya güç kablosuna takdığınızda ekran açılır (yeniden başlatma gerektirir)
+
+
+ Ses tuşuyla ses kapatma
+ Ses tuşlarıyla seviyeyi ayarlarken çalan sesi tamamen devre dışı bırakır
+
+
+ Çağrı titreşimleri
+ Çağrı bağlandığında
+ Çağrı kesildiğinde
+ Çağrı bekletildiğinde
+ Giden çağrı süresince her 45 saniyede
+
+
+ Kareleri yeniden sırala
+ HızlıAyar karelerini yeniden sırala
+
+
+ Giden bildirim engelleyici
+ Seçili giden bildirimleri engelle
+ Liste otomatik olarak her giden bildirimden çekilerek oluşturulur.
+ Bir dahaki sefere giden bildirim tekrar oluştuğunda engellenip engellenmeyeceğine karar verebilirsiniz. Dikkatli kullanın.
+ Listeyi temizle
+ Listeyi temizlemek istediğinizden emin misiniz?
+ Bu, şimdiki listeyi temizler ve daha önceden engellenmiş giden bildirimlerin engelini kaldırır.
+
+
+ Hızlı kilit aç
+ Doğru PIN/şifre girildiğinde otomatik olarak kilidi aç
+
+
+ Devre dışı
+ Standart
+ Küçük harf
+ Büyük harf
+
+
+ Durum çubuğu kilitleme ilkesi
+ Varsayılan
+ Tuş koruması güvensizse Kilitsiz
+ Kilitli
+
+
+ Veri kullanımı izleme
+ Veri kullanımı izlemeyi etkinleştir
+ Veri etkinleştirildiğinde otomatik olarak veri kullanımını gösterir
+ Konum
+ Otomatik (saatin konumuna göre ortaya ve sağa)
+ Sol
+ Boyut
+ Normal
+ Daha küçük
+ En küçük
+
+
+ Widget sınırlamasını kaldır
+ Kilit ekranına sınırsız widget yerleşebilsin
+
+
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index 4a04778656..03bec47e31 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -1,278 +1,492 @@
-
GravityBox
-
- Стиль індикатора батареї
- Стандартний індикатор
- Круговий з процентами
- Цифри процентів
- Ніякого
-
- Гортання треків гучністю
- Гортає музичні треки довгим натисканням гучності коли екран заблоковано
-
+ Вид індикатора заряду
+ Стоковий індикатор
+ Круглий індикатор
+ Круглий індикатор з відсотками
+ Індикатор з відсотками
+ Не показувати
+ Пропуск треку з допомогу клавіш гучності
+ Пропускати треки довгим натисканням клавіш гучності при вимкненому екраніПопередження про низький заряд
- Спливаюче вікно та звук
- Тільки вікно
+ Повідомлення і звук
+ Тільки повідомленняТільки звук
- Вимкнене
-
+ Не попереджатиЗміни набудуть чинності після перезавантаження
-
- Приховування іконок сигналу
- Автоматично приховує іконки сигналу обраних SIM-слотів за відсутності карток, вимикає повідомлення \"SIM-картка відсутня\"
- Приховувати у 1-му SIM-слоті
- Приховувати у 2-му SIM-слоті
- Вимкнути повідомлення \"SIM-картка відсутня\"
- Вимкнути повідомлення \"SIM-картка відсутня\"
-
- Варіанти вимкнення
- Додає варіанти вимкнення пристрою з перезавантаженням та меню відновлення (рекавері)
- Меню відновлення (рекавері)
-
- Керування курсором гучністю
- Дозволяє рухати курсор клавішами гучності в текстових полях
- Вимкнено
- Збільш./зменш. гучності рухає курсор вліво/вправо
- Збільш./зменш. гучності рухає курсор вправо/вліво
-
- Завершення усіх завдань
- В меню поточних завдань створює кнопку для завершення одразу усіх завдань
-
- Виправлення дати та часу
- Увімкніть, якщо трапляються збої під час налаштування дати та часу (потрібне перезавантаження)
-
- Виправлення ID дзвінка
- Увімкніть, якщо трапляється неспівпадіння під час вхідного дзвінка (потрібне перезавантаження)
- Для набуття чинності після перезавантаження очистіть та знову додайте контакти! Налаштування / Програми / Усі - очистити дані Пам\'яті контактів.
-
- Виправлення ID повідомлень
- Увімкніть, якщо трапляються розрізнені ланцюжки повідомлень для одного контакту (потрібне перезавантаження)
- Для набуття чинності після перезавантаження видаліть всі розрізнені ланцюжки повідомлень!
-
- Виправлення календаря
- Увімкніть, якщо трапляються періодичні самовмикання екрану (потрібне перезавантаження)
-
+ Автоматично приховувати іконку антени
+ Автоматично приховує іконку антени для вибраного SIM-слота коли SIM-карта в цьому слоті відсутня, відключає повідомлення \"Відсутня SIM\"
+ Приховувати перший слот
+ Приховувати другий слот
+ Вимкнути сповіщення
+ Сповіщення \"Відсутня SIM\" відключені
+ Розширене меню перезавантаження
+ Включає розширене меню перезавантаження з можливістю перезавантаження у відновлення
+ Відновлення
+ Завантажувач
+ Управління курсором клавішами гучності
+ Дозволяє управляти курсором в текстових полях клавішами гучності
+ Відключено
+ Звук вгору/вниз для переміщення курсору вліво/вправо
+ Звук вгору/вниз для переміщення курсору вправо/вліво
+ Закрити всі поточні завдання
+ Падіння діалогу Дата і час
+ Включити, якщо при вході в налаштування Дати та часу відбувається падіння (Необхідна перезавантаження)
+ Визначення номера для дзвінка
+ Включити, якщо номер абонента не співпадає з контактом при вхідному дзвінку (Необхідна перезавантаження)
+ Після перезавантаження необхідно видалити і заново додати контакти, щоб зміни вступили в силу! Використовуйте Настройки - Додатки - Сховище контактів - Очистити дані.
+ Визначника номера для повідомлень
+ Включити, якщо спостерігається проблема кількох гілок повідомлень для одного контакту (Необхідна перезавантаження)
+ Після перезавантаження необхідно видалити всі роздільні гілки у Повідомленнях, щоб зміни вступили в силу!
+ Додаток Календар
+ Включити, якщо є проблема з періодично вмикаючимся екраном в сплячому режиміВажливо
-
- Повноекранне фото
- Під час вхідного дзвінка показує фото контакту на повний екран
-
-
- Синхр. увімк.
- Синхр. вимк.
+ Фото того, хто телефонує на весь екран
+ Відображати фото того, хто телефонує на весь екран при вимк.иках
+ Синхрон. увімк.
+ Синхрон. вимк.ТД Wi-Fi увімк.ТД Wi-Fi вимк.Ліхтарик увімк.Ліхтарик вимк.
- Натисніть для вимк.
- Відтворення…
- Запис…
+ Натисніть для вимкнення
+ Відтворення...
+ Запис...Записано
- Довг. натис. для запису
- Завершити запис
-
-
- Плитки швидких налаштувань
- Дозволяє показати або сховати плитки швидких налаштувань у панелі сповіщень
- Користувач
- Режим літака
- Стан батареї
+ Утримаєте для запису
+ Торкніться щоб зупинити запис
+ Відключено
+ Нормальний
+ Розширений
+ Не засинати увімк.
+ Не засинати вимк.
+ Wi-Fi
+ Wi-Fi вимк.
+ Чи не підключено
+ Включення...
+ Іконки швидких налаштувань статусбару
+ Дозволяє вмикати/вимикати іконки швидких налаштувань в статусбаре
+ Профіль користувача
+ Режим польоту
+ Заряд батареїWi-Fi
+ Wi-Fi (CM стиль)BluetoothGPS
- Мобільні дані
- Режим мережі
- Використання даних
+ GPS (CM стиль)
+ Мобільний інтернет
+ Режим мережі (2G/3G)
+ Передача даних (статистика)Профілі звукуЯскравість
- Час гасіння екрану
- Автообертання екрану
+ Таймер відключення екрану
+ АвтоповоротСинхронізація
- Портативна точка доступу
+ Точка доступу Wi-FiЛіхтарикGravityBox
- Блокування
- Швидкий запис
-
-
- Змішувач кольорів
- Натисніть для обрання кольору
-
-
- Тло панелі сповіщень
- Дозволяє призначати колір тла та прозорість панелі сповіщень
-
-
- Синтез мовлення
- Розблокує налаштування голосового пошуку та виводу синтезу мовлення з тексту в налаштуваннях мови та введення (потрібне перезавантаження)
-
-
- Параметри розробника
- Розблокує додаткові параметри розробника (потрібне перезавантаження)
-
-
- Твіки панелі сповіщень
- Різноманітні твіки панелі сповіщень
- Різне
- Решта твіків, що не підпадають під конкретну категорію
- Основні твіки
- Основні виправлення для MTK6589. Використовуйте лише в разі необхідності.
-
-
+ Сон
+ Швидка запис
+ Налаштування
+ Звук
+ Розширений робочий стіл
+ Не засинати
+ Знімок екрану
+ Вибір кольору
+ Натисніть на колір для застосування
+ Колір панелі повідомлень
+ Дозволяє задати колір і прозорість панелі повідомлень
+ Виправлення мовних налаштувань
+ Розблокує голосовий пошук і розпізнавання мови в налаштуваннях Мова і введення (Необхідна перезавантаження)
+ Розширені параметри Для розробника
+ Розблокує розширені параметри Для розробника (Необхідна перезавантаження)
+ Налаштування статусбара
+ Містить деякі налаштування статусбара
+ Різні налаштування
+ Містить налаштування, що не відносяться до інших категорій
+ Загальні налаштування
+ "Містить загальні налаштування, пов'язані з MTK6589. Використовувати тільки при необхідності."Про програму
- Автор коду C3C076@XDA. Натисніть щоб зайти на офіційну сторінку обговорення.
- Xposed framework
- Автор коду rovo89@XDA. Натисніть щоб зайти на офіційну сторінку обговорення.
- Пожертва авторові
- Зробіть пожертву якщо вважаєте додаток вартим цього! Приділіть також увагу пожертві для rovo89 за його чудовий Xposed framework.
-
-
- Пристрій буде перезавантажений
- Пристрій буде перезавантажений у меню відновлення (рекавері)
-
-
- Ефект старого кінескопу
- Вмикає анімацію, що імітуючє вимкнення старого кінескопу (або ж CRT, ЕПТ, ЭЛТ) під час вимкнення екрану
-
-
+ Кодується C3C076@XDA. Натисніть для переходу до офіційної темі.
+ Експоузд рамках
+ Кодується rovo89 @ XDA. Натисніть для переходу до офіційної темі.
+ Пожертвувати
+ Пожертвуйте, якщо вважаєте, що додаток варто того! Також задумайтеся про пожертву rovo89 за його чудовий Експоузд рамки.
+ %s буде перезавантажено.
+ %s буде перезавантажений у відновленні.
+ %s буде перезавантажений в завантажувач.
+ Ефект кіноскопу вимкнення екрану
+ Дозволяє включити анімацію, яка імітує вимикання старих ЕПТ-моніторів, при вимк.юченні екрануІнженерне меню
- Запускає додаток інженерного меню
-
-
- Dual SIM Ringer
- Запускає додаток, що дозволяє призначити мелодії дзвінка та звуки сповіщень для кожної SIM-картки окремо
-
-
- Твіки екрану блокування
- Різноманітні твіки екрану блокування
- Тло екрану блокування
- Стиль тла
- Шпалери за умовчанням
- Заливка кольором
- Зображення на вибір
- Призначити колір
- Дозволяє на вибір призначати тло та колір екрану блокування
- Зображення на вибір
- Дозволяє на вибір призначати фонове зображення екрану блокування
- Тло змінене
- Тло не змінене
- Інше
- Максимізація віджетів
- Якщо увімкнено, то віджети екрану блокування будуть максимізовані за умовчанням
-
-
- Твіки живлення
- Різноманітні твіки стосовно живлення
-
-
- Мерехтіння світлодіода
- Вимикає докучливе мерехтіння світлодіода за низького рівня заряду та коли батарея не заряджається
-
-
- Твіки екрану
- Різноманітні твіки екрану
-
-
+ Дозволяє запустити Інженерне меню
+ Мелодія дзвінка для 2-х SIM
+ Запускає додаток, що дозволяє встановити мелодію дзвінка і повідомлень окремо для кожної SIM-карти
+ Налаштування екрану блокування
+ Містить різні налаштування екрану блокування
+ Фон екрану блокування
+ Стиль фону
+ Стандартні шпалери
+ Заповнення кольором
+ Користувацького зображення
+ Задати колір
+ Дозволяє задати колір фону для екрану блокування
+ Задати зображення
+ Дозволяє встановити користувацьке зображення для екрану блокування
+ Фон змінений
+ Фон не змінений
+ Інші
+ Розгорнути віджети
+ Коли включено, віджети будуть максимізувати за замовчуванням
+ Налаштування живлення
+ "Містить різні налаштування, пов'язані з зарядом"
+ Вимкнути спалах
+ Відключає спалах при малому заряді батареї і відключеному зарядному пристрої
+ Налаштування екрану
+ Містить різні настройки екрануМінімальний рівень яскравості
- Дозволяє призначити мінімальний рівень яскравості. Застосовується для ручного налаштування яскравості (потрібне перезавантаження)
- Значення з інтервалу: 10 – 80
-
-
- Автоматична яскравість
- Дозволяє призначати значення рівня зовнішнього освітлення та відповідні значення рівнів підсвітки екрану
+ Дозволяє встановити мінімальний рівень яскравості. Застосовується до ручному налаштуванні яскравості. (Необхідна перезавантаження)
+ Рівні автояскравості
+ Дозволяє налаштувати рівні яскравості підсвічування залежно від зовнішньої освітленостіРівень
- Люкс макс.
- Яскравість (10 – 255)
- Невірне значення
- Не рекомендовано призначати яскравість нижче 10
- Яскравість не може бути більшою за 255
- Значення не можуть бути меншими нуля
- Значення для нижчих рівнів не можуть бути більшими значень для вищих
- Значення для вищих рівнів не можуть бути меншими значень для нижчих
- Значення для %s задано
- Нова конфігурація автоматичної яскравості збережена
- Конфігурація автоматичної яскравості НЕ збережена
-
-
- Автообертання е. б.
- УВАГА: на деяких пристроях можлива зміна мішеней кільця розблокування, якщо екран блокування AOSP був модифікований виробником
-
-
- Задіяти кнопку меню
- Дозволяє використовувати кнопку меню для швидкого розблокування пристрою в режимі екрану блокування (потрібне перезавантаження)
-
-
- Пробудження повідомленням
- Запобігає увімкненню екрану під час надходження повідомлення (потрібне перезавантаження)
-
-
- Центрування годинника
-
-
- Твіки медіа
- Різноманітні твіки для медіа та аудіосистеми
-
-
- Більше кроків гучності
- Додає більше кроків регулювання гучності для музики (потрібне перезавантаження)
-
-
- Безпечна гучність навушників
- Активує та деактивує установку безпечного рівня гучності медіа для навушників
-
-
- Світлодіод зарядження
- Вимикає світлодіод під час зарядження пристрою
-
-
- Дії апаратних кнопок
- Дозволяє призначати дії на апаратні кнопки
- Довге натискання кнопки меню
- Подвійний дотик кнопки меню
- Довге натискання кнопки назад
- За умовчанням
+ Максимальна освітленість
+ Яскравість ( %d - 255)
+ Некоректне значення
+ Не рекомендовано установлювати яскравість нижче %d
+ Яскравість не може бути вище 255
+ Значення не повинно бути менше 0
+ Значення на нижньому рівні не може бути вище значень на верхніх рівнях
+ Значення на верхньому рівні не може бути нижче значень на нижніх рівнях
+ Значення для %s встановлено
+ Нова конфігурація автояскравості збережена
+ Конфігурація автояскравості НЕ БУЛА збережена
+ Встановити
+ Включити поворот екрану блокування
+ УВАГА: може перемістити ярлики для кільця розблокування на деяких пристроях у разі, якщо екран блокування з AOSP був змінений виробником
+ Включити Меню
+ Дозволяє швидко розблокувати пристрій з екрану блокування клавішею Меню (Необхідна перезавантаження)
+ Виправлення прокидання бенкет вхідних повідомленнях
+ Запобігає включення екрану при вхідних повідомленнях (Необхідна перезавантаження)
+ Годинник в центрі
+ Налаштування мультимедіа
+ Містить різні налаштування для медіа-та аудіосистеми
+ Більше рівнів гучності для музики
+ Додає більше кроків для зміни гучності музики (Необхідна перезавантаження)
+ Безпечний звук у навушниках
+ Дозволяє включити або вимк.ючити функцію безпечного звуку в навушниках
+ Вимкнути діод зарядки
+ Дозволяє відключити діод під час заряду
+ Дії кнопок
+ Дозволяє задати свої дії для кнопок телефону
+ Довге натиснення Меню
+ Подвійне натискання Меню
+ Довге натиснення Назад
+ Дія за замовчуваннямПошукГолосовий пошук
- До попереднього додатку
- Завершити усі поточні
- Заблокувати
- Довге натискання завершення
- Застосовується до дії завершення усіх поточних завдань. Визначає тривалість натискання для спрацьовування
- Швидкість подвійного дотику
- Застосовується до дії подвійного дотику меню. Визначає швидкість подвійного дотику для спрацьовування
- Завдання завершене
- Нічого завершувати
- Немає попереднього додатку
-
-
- Твіки телефонії
- Різноманітні твіки телефонії
-
-
- Перегортання під час дзвінка
- Дозволяє призначити дію на перегортання пристрою лицем донизу під час вхідного дзвінка
+ Переключиться на попередній додаток
+ Закрити поточний додаток
+ Вимкнути екран
+ Затримка довгого натискання для закриття програми
+ Застосовується до кнопці Закрити поточний додаток. Визначає, як довго потрібно тримати кнопку щоб закрити програму
+ Швидкість подвійного натискання
+ Застосовується до подвійному натисненню Меню. Визначає, як швидко потрібно натиснути на кнопку Меню для спрацьовування подвійного натискання.
+ Додаток %s закрито
+ Нема чого закривати
+ Попереднє додаток не знайдено
+ Налаштування телефонії
+ Містить різні налаштування телефону
+ Переворот під час дзвінка
+ Дозволяє задати дію при перевертанні телефону під час вхідного дзвінкаНічого не робити
- Заглушити дзвінок
- Покласти слухавку
-
-
- Вимкнення вібрації з\'єднання
- Вимикає вібрацію під час з\'єднання дзвінка
-
-
- М\'яке перезавантаження
-
-
- Суцільне чорне тло
- Призначає суцільне чорне тло замість чорно-сірого градієнту для системної теми за умовчанням Holo (потрібне перезавантаження)
-
-
- Плиток в рядку
- Призначає скільки плиток швидких налаштувань розміщувати в одному рядку. Розмір буде змінений належним чином. Застосовується до портретного режиму.
-
-
- Показувати день тижня
-
+ Вимкнути звук
+ Скинути дзвінок
+ "М'які перезавантаження"
+ Чорний задній фон
+ Використовувати чорний фон для системної Holo-теми за замовчуванням замість темно-сірого градієнта (Необхідна перезавантаження)
+ Іконок в ряд
+ Визначає, як багато іконок швидких налаштувань буде показано в одному ряду. Розміри зміняться відповідно. Застосовується до портретному режиму.
+ Відображати день тижня
+ Повністю розширена панель гучності
+ Дозволяє панелі гучності займати весь простір
+ Розширювана звукова панель
+ Включає розширювану звукову панель, на якій можна міняти звук для різних потоків
+ "Зв'язати гучність рінгтона і повідомлень"
+ Коли відключено, гучність повідомлень і рінгтона можна задавати незалежно
+ Автоувімкнення швидких налаштувань
+ Швидкі налаштування будуть показані автоматично (якщо немає повідомлень) при витягуванні статусбара
+ Швидке витягування
+ За край статусбара можна витягнути швидкі налаштування
+ Вимкнено
+ Праворуч
+ Зліва
+ Відключення виходу зі сну клавішами гучності
+ Для пристроїв на зразок Jiayu G3s, G4 де зміна звуку будить пристрій
+ Кольори статусбара
+ Включити кольору іконок
+ Колір іконок статусбара
+ Задає кольори для іконок статусбара та годинника
+ Колір активності даних
+ Задає кольори для індикаторів активності даних
+ Управління Швидкими налаштуваннями
+ Стиль шторки повідомлень
+ Фон шторки повідомлень
+ Стандартний фон
+ Заповнення кольором
+ Користувацького зображення
+ Задати колір фону
+ Задати портретну картинку
+ Задати ландшафтну картинку
+ Прозорість фону
+ Режим фону
+ Передній план
+ Задній план
+ Відключити індикатор роумінгу
+ При відключенні R-індикатор не буде відображатися. Використовуйте з обережністю.
+ Зарядка ( %d%%)
+ Заряджений
+ %d%% залишилося
+ Немає мережі
+ Режим польоту
+ Тільки екстрені
+ Віялове меню
+ Включити віялове меню
+ Розмір навігаційних кнопок
+ Позиція перемикачів
+ Ліва межа
+ Нижня межа
+ Права межа
+ Верхня межа
+ Режим підсвічування клавіш
+ Стандартний
+ Відключити підсвічування
+ Включати завжди, коли включений екран
+ Сповіщення підсвічуванням клавіш
+ ЕКСПЕРИМЕНТАЛЬНО! Бликаюче підсвічування клавіш при повідомленнях. Використовувати тільки у разі відсутності світлодіодних індикатора. Може призвести до погіршення життя батареї.
+ Приховати панель навігації
+ Приховує панель навігації, коли включено віялове меню (для пристроїв з програмними кнопками навігації, необхідне перезавантаження)
+ Згладжений Holo фон
+ Замінює стандартний фон на згладжений для уникнення неплавного градієнта (необхідне перезавантаження)
+ Вимкнути залізні кнопки
+ Відключає кнопки НАЗАД, ДОДОМУ, МЕНЮ при включеному віяловому меню. Нестандартні дії цих кнопок по раніше будуть працювати. (Для пристроїв із залізними кнопками)
+ Використовувати тему Holo Dark
+ Перемикає тему інтерфейсу GravityBox зі світлою на темну
+ Вимкнено
+ Зверху зліва
+ Зверху справа
+ Знизу ліворуч
+ Знизу праворуч
+ Налаштувати відступ зверху
+ Вимкнути попередження про роумінг
+ Вимкнути попередження про роумінг при відправці повідомлень або здійснення дзвінків у роумінгу
+ Пошук
+ (Ні)
+ Швидкий запуск
+ Налаштування тайла Швидкого запуску
+ Основний додаток
+ Довгий тап, слот 1
+ Довгий тап, слот 2
+ Довгий тап, слот 3
+ Довгий тап, слот 4
+ GPS вкл
+ GPS вимк.
+ GPS блок
+ Завжди показувати Меню
+ Режим дзвінка
+ Налаштування годинника
+ Ховати AM/PM
+ Ховати годинник
+ Розмір перемикачів
+ Управління прозорістю
+ Статусбар для головного екрану
+ Статусбара для екрану блокування
+ Панель навігації для ланчера
+ Панель наві. для екрану блокування
+ Заховати значок будильника
+ Рівень загасання підсвічування
+ Яскравість для приглушеної підсвічування - коли екран майже вимк.ючився (необхідне перезавантаження)
+ Телефон
+ Планшет
+ Налаштування яскравості
+ Увімкнути налаштування яскравості
+ "Включити тільки у випадку, якщо пристрій використовує стандартний механізм Android для регулювання яскравості. Залиште вимкненим, якщо є проблеми, якось пов'язані з яскравістю. (Необхідна перезавантаження)"
+ Показати нещодавні додатки
+ Дія за довгому натисненню Головна
+ Запустити додаток 1
+ Вибрати додаток 1
+ Запустити програму 2
+ Вибрати додаток 2
+ Додаток не вибрано!
+ Додаток не знайдено!
+ Додаток-годинник для панелі повідомлень
+ "Пов'язує годинник на статусбаре з обраним додатком замість налаштувань Дати та часу"
+ Очікування відгуку від системного фреймворку GravityBox...
+ Системний фреймворк GravityBox не відповідає. Вихід.
+ Національний роумінг
+ Підключатися до служб передачі даних в національному роумінгу
+ Розширений робочий стіл
+ Відключено
+ Заховати статусбар
+ Заховати панель навігації
+ Ховати все
+ Розширений робочий стіл
+ Розширений робочий стіл ВКЛЮЧЕНИЙ
+ Расшренний робочий стіл ВИМКНЕНИЙ
+ Знімок екрану
+ Показати меню
+ Включити розширений робочий стіл
+ Розширений робочий стіл відключений!
+ Налаштування панелі навігації
+ Містить різні налаштування панелі навігації
+ Переписати налаштування за замовчуванням
+ Дозволяє включити всі твіки панелі навігації (Необхідна перезавантаження)
+ Включити панель навігації
+ Необхідне перезавантаження
+ Висота панелі навігації
+ Застосовується до портретної орієнтації
+ Застосовувати для горизонтальної та вертикальної орієнтацій
+ Ширина панелі навігації
+ Застосовується до ландшафтної орієнтації
+ Завжди показувати кнопку меню
+ Скріншот в меню вимкнення
+ ярлики екрану блокування
+ Включити ярлики екрану блокування
+ Загальний перемикач ярликів екрану блокування
+ Додаток %s
+ Вертикальний зсув кільця розблокування
+ Горизонтальне зміщення
+ Включити контроль яскравості
+ Міняти яскравість слайдом вздовж статусбара
+ Телефонія
+ Повідомлення
+ Передача даних
+ Змінювати Unicode
+ Конвертує Unicode символи в звичайні символи. Зменшує загальний розмір повідомлення.
+ Не скидати символи
+ Змінювати некодовані символи
+ Змінювати всі символи Unicode
+ Вимкнути 2G попередження
+ Відключає попередження про повільної швидкості передачі даних коли у швидких налаштуваннях включений режим 2G для SIM-карти
+ Слідувати кольором батареї
+ Дозволяє годинах в статусбаре, батареї і тексту з відсотками використовувати колір стокової батареї. Працює при вимкненому зміну кольорів іконок.
+ Режим тайла Режим мережі
+ 2G/2G+3G/3G/(LTE)
+ 2G/2G+3G/(LTE)
+ 2G/3G/(LTE)
+ Дозволити всі повороти
+ Замінити стандартну поведінку тайлів
+ Замінює поведінка торкання/довгого торкання для обраних тайлів (необхідне перезавантаження)
+ Слот SIM для тайла Режим мережі
+ Визначає слот, для якого працює тайл Режим мережі ( %s)
+ SIM-слот 1
+ SIM-слот 2
+ Ніколи
+ Завжди
+ При включеному розширеному дисплеї
+ Коли розширений дисплей без панелі навігації
+ Не чіпати значок батареї
+ Використовувати в випад заміни стокового значка батареї стороннім модом
+ Увімкнути. екран при підключенні
+ Якщо включено, екран буде включаться при підключенні/відключенні USB/навушників (необхідне перезавантаження)
+ Вимкнути. звук регулювання гучності
+ Відключає звук, біп при регулюваннні гучності
+ Вібрація дзвінка
+ На початку дзвінка
+ Наприкінці дзвінка
+ При очікуванні дзвінка
+ Кожні 45 секунд при вихідному
+ Сортування тайлів
+ Дозволяє сортувати тайли
+ Блокування повідомлень
+ Дозволяє блокувати вибрані повідомлення
+ Список формується автоматично при появі повідомлення. Ви можете вирішити пізніше, яке сповіщення блокувати. Використовуйте з обережністю.
+ Скинути список
+ Ви впевнені, що хочете скинути список? Це очистить список і розблокує всі поточні повідомлення.
+ (Список порожній)
+ Швидка розблокування
+ Розблокувати автоматично при введенні вірного PIN/пароля.
+ Відключено
+ Типово
+ рядковими
+ ВЕЛИКИМИ
+ Правила блокування статусбара
+ Типово
+ Розблоковано якщо блокування клавіатури ненадіне
+ Заблокований
+ Монітор трафіку
+ Включити моніторинг
+ Показує трафік завжди, коли включена передача даних
+ Позиція
+ Автоматично (у центрі або праворуч залежно від позиції годин)
+ Зліва
+ Праворуч
+ Розмір
+ Звичайний
+ Маленький
+ Дуже маленький
+ B
+ КБ
+ Мегабайт
+ з
+ Відключити обмеження віджетів
+ Дозволяє отримати необмежену кількість віджетів екрану блокування
+ %1$s вільно
+ %1$s використано
+ "Панель пам'яті поточних завдань"
+ вимкнено
+ зверху
+ знизу
+ Дія з одиночного торкання
+ Дія по довгому торкання
+ Статус батареї
+ Показувати арку батареї, намальовану навколо кільця розблокування
+ Включити ліхтарик
+ Ліхтарик по довгому натисненню Головна
+ Включити ліхтарик при заблокованому пристрої. Екран повинен бути включений, якщо пристрій не може зчитувати натискання кнопки у сні
+ Розширювати автоматично
+ Кнопка Меню
+ Кнопка Додому
+ Кнопка Назад
+ Кнопка Недавні
+ Кнопки гучності
+ Інші установки
+ Дія за довгому натисненню
+ Дейтсвіе за одним натисканням
+ Дія за подвійним торкання
+ Вимкнути подвійне торкання
+ Режим кольору сигналу
+ Використовувати іконки GB (з підтримкою рівня)
+ Використовувати стандартні іконки (без підтримки рівня)
+ Не застосовувати колір
+ Запуск додатків
+ Діалог, що дозволяє вибрати до 8 додатків, які можна призначити для дій кнопок або помістити на панель навігації
+ Слот додатки %d
+ Додатки не вибрані. Використовуйте GravityBox/Запуск додатків для вибору додатків.
+ Показувати кнопку запуску програми
+ Запустити програму
+ Показати призначену для користувача кнопку
+ Відключено
+ Пошук
+ Запуск додатків
+ Колір веєрного меню
+ Колір фону
+ Колір переднього плану
+ Колір контуру
+ Колір обраної кнопки
+ Колір тексту
+ Скинути кольору
+ Включити фото невідомого абонента
+ Задати фото
+ Фото змінено
+ Фото не змінено
+ Ваш екран може не підтримувати значення менше 20. Якщо ваш екран не засвітиться, затисніть кнопку Гучність+ як мінімум на 7 секунд для скидання яскравості і потім виправте значення яскравості на більше.
+ Загальне
+ Кнопки навігації
+ Колір та прозорість
+ Розміри
+ Колір кнопок навігації
+ Колір тіні кнопок навігації
+ Колір фону паненлі навігації
+ Вимкнути тінь екрану блокування
+ Видаляє темний відтінок
diff --git a/res/values-v11/styles.xml b/res/values-v11/styles.xml
index e3ef53d96b..37b65510be 100644
--- a/res/values-v11/styles.xml
+++ b/res/values-v11/styles.xml
@@ -1,3 +1,18 @@
+
+
+
+
+
+
+ GravityBox
+
+ Kiểu hiển thị pin
+ Kiểu pin gốc
+ Pin vòng tròn
+ Pin vòng tròn với phần trăm
+ Chữ phần trăm pin
+ Không
+
+ Phím âm lượng chuyển bài hát
+ Giữ phím âm lượng để chuyển bài hát khi đang khóa màn hình
+
+ Cảnh báo pin yếu
+ Cảnh báo và âm báo
+ Chỉ cảnh báo
+ Chỉ âm báo
+ Tắt
+
+ Thay đổi cần trang bị khởi động lại
+
+ Tự động ẩn biểu tượng sóng
+ Tự động ẩn biểu tượng sóng vị trí SIM khi không có SIM, tắt thông báo không có SIM trên thanh trạng thái
+ Tự động ẩn cho SIM 1
+ Tự động ẩn cho SIM 2
+ Tắt thông báo
+ \"SIM chưa được lắp\" Thông báo đã được tắt
+
+ Tùy chọn Reboot nâng cao
+ Cho phép thêm tùy chọn Reboot và reboot tới recovery
+ Reboot tới Recovery
+ Reboot
+
+ Phím âm lượng điểu khiển con trỏ
+ Sử dụng phím âm lượng để tiến hoặc lùi con trỏ khi gõ văn bản
+ Tắt
+ Phím tăng/giảm âm lượng cho con trỏ di chuyển trái/phải
+ Phím tăng/giảm âm lượng cho con trỏ di chuyển phải/trái
+
+ Nút làm sạch tất cả ứng dụng gần đây
+
+ Sửa lỗi cài đặt ngày giờ
+ Cho phép sửa lỗi khi cài đặt ngày giờ (cần trang bị khởi động lại để thay đổi)
+
+ Sửa lỗi mã vùng hiển thị cuộc gọi
+ Cho phép sửa lỗi danh bạ không hiển thị tên người dùng khi nhận cuộc gọi (cần trang bị khởi động lại để thay đổi)
+ Sau khi khởi động lại, bạn cần làm sạch và thêm danh bạ của bạn lại để thay đổi có hiệu lực, Đi đến cài đặt/ứng dụng/Tất cả - để xóa dữ liệu Contacts provider.
+
+ Sửa lỗi hiển thị danh bạ tin nhắn
+ Sửa lỗi hiển thị khi các số có mã vùng nhắn tin tới trên tin nhắn không hiển thị được tên người gửi trong danh bạ (Cần trang bị khởi động lại để thay đổi)
+ Sau khi khởi động lại, bạn cần xóa sạch hết các tin nhắn để thay đổi có hiệu lực
+
+ Sửa lỗi Lịch
+ Cho phép sửa khi bạn gặp vấn đề tự xoay đang tải trên màn hình (cần trang bị khởi động lại để thay đổi)
+
+ Quan trọng
+
+ Ảnh người gọi toàn màn hình
+ Hiển thị ảnh người gọi đến toàn màn hình
+
+
+ Đ.bộ bật
+ Đ.bộ tắt
+ Wi-Fi AP bật
+ Wi-Fi AP tắt
+ Đèn pin bật
+ Đèn pin tắt
+ Bấm để tắt
+ Đang phát…
+ Đang ghi âm…
+ Đã ghi âm
+ Ấn giữ để ghi
+ Bấm để dừng ghi
+ Đã tắt
+ Bình thường
+ Mở rộng
+ Stay awake bật
+ Stay awake tắt
+
+
+ Quicksetting trên thanh trạng thái
+ Cho phép ẩn/hiện biểu tượng quicksetting trên thanh trạng thái
+ T.tin người sử dụng
+ Chế độ máy bay
+ Trạng thái Pin
+ Wi-Fi
+ Bluetooth
+ GPS
+ GPS (kiểu CM)
+ Kết nối dữ liệu
+ Chế độ mạng
+ Sử dụng dữ liệu
+ Cấu hình âm thanh
+ Độ sáng
+ C.độ chờ
+ Auto rotation
+ Đồng bộ
+ Điểm phát wifi
+ Đèn pin
+ GravityBox
+ Ngủ
+ Ghi âm nhanh
+ Cài đặt
+ Âm lượng
+ Màn hình mở rộng
+ Stay awake
+ Chụp màn hình
+
+
+ Chọn màu
+ Ấn trên màu để chọn
+
+
+ Màu nền thanh trạng thái
+ Cho phép đặt màu nền thanh trạng thái và trong suốt
+
+
+ Sửa cài đặt giọng nói
+ Mở chức năng tìm kiếm giọng nói và văn bản thành giọng nói trong ngôn ngữ và phương thức nhập (Trang bị khởi động lại để thay đổi)
+
+
+ Tùy chọn nhà phát triển nâng cao
+ Mở toàn bộ các cài đặt đầy đủ trong tùy chọn nhà phát triển (Trang bị khởi động lại để cập nhật)
+
+
+ Tùy chỉnh thanh trạng thái
+ Tùy chỉnh các trạng thái khác nhau
+ Tùy chỉnh khác
+ Gồm tất cả các tinh chỉnh khác không thuộc thể loại cụ thể
+ Sửa lỗi chung
+ Gồm các lỗi chung MTK6589. Chỉ sử dụng nếu cần thiết.
+
+
+ Giới thiệu
+ viết bởi C3C076@XDA. bấm để thăm chủ đề này.
+ Xposed framework
+ Viết bởi rovo89@XDA. bấm để thăm chủ đề này.
+ Đóng góp
+ Vui lòng đóng góp cho chúng tôi nếu bạn thấy nó giá trị! Cũng xem xét tài trợ cho rovo89 về sự tuyệt vời của Xposed framework.
+
+
+ %s của bạn sẽ khởi động lại.
+ %s của bạn sẽ khởi động lại vào recovery.
+ %s của bạn sẽ khởi động lại vào bootloader.
+
+
+ Tắt hiệu ứng TV cũ
+ Cho phép sử dụng hiệu ứng tắt TV cũ khi khóa màn hình
+
+
+ Engineering mode
+ Chuyển tới ứng dụng Engineering mode
+
+
+ Chuông trên hai SIM
+ Chuyển tới ứng dụng này cho chọn nhạc chuông, thông báo trên 2 sim riêng rẽ
+
+
+ Tùy chỉnh màn hình khóa
+ Gồm các tùy chỉnh về màn hình khóa
+ Nền màn hình khóa
+ Kiểu nền
+ Hình nền mặc định
+ Nền màu
+ Tùy chọn ảnh
+ Cài đặt màu
+ Cho phép đặt màu nền cho màn hình khóa
+ Cài đặt ảnh nền
+ Cho phép tùy chỉnh ảnh nền cho màn hình khóa
+ Nền đã được thay đổi
+ Nền chưa được thay đổi
+ Khác
+ Tiện ích tối đa
+ Khi được bật, số tiện ích màn hình khóa sẽ được mở mặc định là tối đa
+
+
+ Cài đặt nguồn thiết bị
+ Các tùy chỉnh liên quan tới nguồn thiết bị
+
+
+ Tắt đèn LED sáng
+ Tắt báo đèn LED báo khi pin yếu và không sạc
+
+
+ Cài đặt hiển thị
+ Các tùy chỉnh về hiển thị
+
+
+ Mức sáng tối thiểu
+ Cho phép thiết lập mức sáng tối thiểu. Áp dụng với chế độ chỉnh sáng thủ công. (Cần khởi động lại cho thay đổi)
+
+
+ Mức tự động sáng
+ Cho phép thiết lập mức độ ánh sáng môi trường xung quanh và các giá trị tương ứng với đèn nền LCD
+ Mức độ
+ Lớn nhất
+ Độ sáng (%d – 255)
+ Số quy định không hợp lệ
+ Không được khuyến cáo khi đặt mức sáng dưới %d
+ Mức sáng không thể lớn hơn 255
+ Giá trị không thể nào thấp hơn hoặc bằng 0
+ Giá trị mức thấp nhất không thể lớn hơn giá trị mức cao nhất
+ Giá trị mức cao nhất không thể bé hơn mức nhỏ nhất
+ Đặt giá trị %s
+ Cấu hình tự động sáng mới đã được lưu
+ Cấu hình tự động sáng là không được lưu
+
+
+ Cho phép xoay trong màn hình khóa
+ cảnh báo: Có thể lệch màn hình khóa, có thể lệch cho cách kéo mở đối tượng trong màn hình khóa
+
+
+ Cho phép Phím menu
+ Cho phép mở khóa bằng phím menu khi màn hình khóa đã hiện (Trang bị khởi động để thay đổi)
+
+
+ Sửa tin nhắn sáng màn hình
+ màn hình sẽ sáng lên khi có tin nhắn mới (Trang bị khởi động lại để cập nhật thay đổi)
+
+
+ Trung tâm đồng hồ
+
+
+ Cài đặt đa phương tiện
+ Các tùy chỉnh về âm thanh, hình ảnh,... của hệ thống
+
+
+ Tăng bước điều chỉnh âm lượng
+ Thêm nhiều mức điều chỉnh âm lượng hơn (rang bị khởi động lại để cập nhật thay đổi)
+
+
+ Âm chế độ tai nghe
+ Kích hoạt hoặc vô hiệu hóa tính năng tai nghe âm lượng phương tiện truyền thông an toàn
+
+
+ Tắt đèn LED khi sạc
+ Cho phép Tắt đèn LED khi sạc
+
+
+ Hành động phím cứng
+ Cho phép thay đổi hành động khi bấm phím cứng
+ Giữ phím Menu
+ Bâm đúp phím menu
+ Giữ phím back
+ Mặc định
+ Tìm kiếm
+ Tìm kiếm giọng nói
+ Chuyển tới ứng dụng mở trước đó
+ Diệt các ứng ụng chạy nền
+ Đi tới chế độ ngủ
+ Khoảng thời gian bấm giữ diệt ứng dụng nền
+ Định nghĩ thời gian giữ pím bao lâu cho diệt ứng dụng nền
+ Tốc độ bấm đúp
+ Chấp nhận phím menu cho hoạt động bấm đúp. Định nghĩa tốc độ nhanh hay chậm cho tốc độ bấm đúp
+ Ứng dụng đã được diệt: %s
+ Không có ứng dụng nào để diệt
+ Không tìm thấy ứng dụng trước đó
+
+
+ Cài đặt điện thoại
+ Gồm các tùy chỉnh về cuộc gọi
+
+
+ Hoạt động lật
+ Định nghĩ hoạt động khi lật khi có cuộc gọi
+ Không làm gì
+ Im lặng
+ Từ chối cuộc gọi
+
+
+ Khởi đông nhanh
+
+
+ Hình nền đặc đen
+ Sử dụng hình nền đặc đen mặc định của hệ thống (Trang bị thay đổi khi khởi động lại)
+
+
+ Số biểu tượng trên dòng
+ Định nghĩ có bao nhiêu cột biểu tượng trên dòng quicksettings.
+
+
+ Hiện ngày của tuần
+
+
+ Cho phép bảng điều chỉnh âm lượng mở rộng
+ Bảng điều khiển âm lượng thêm các điều chỉnh âm lượng khác nhau
+
+
+ Liên kết giữa âm nhạc chuông và thông báo
+ Khi được tắt, Âm lượng nhạc chuông và thông báo sẽ độc lập
+
+
+ Tự động chuyển Quicksetings
+ Quicksetting sẽ hiện mặc định khi kéo statusbar
+
+
+ Kéo xuống nhanh
+ Mũi của thanh trạng thái khi kéo xuống nhanh
+ Tắt
+ Phải
+ Trái
+
+
+ Tắt phím âm lượng mở khóa màn hình
+ Cho thiết bị như là Jiayu G3s,G4 cái mà có thể dùng phím âm lượng mở khóa màn hình
+
+
+ Màu thanh trạng thái
+
+
+ Bật màu bieur tượng
+
+
+ Màu biểu tượng thanh trạng thái
+ Đặt màu cho biểu tượng và đồng hồ thanh trạng thái
+
+
+ Màu kết nối dữ liệu
+ Đặc màu khi kết nối dữ liệu
+
+
+ Quản lý QuickSettings
+
+
+ Giao diện bảng thông báo
+
+
+ Nền bảng thông báo
+ Nền mặc định
+ Màu nền
+ Tùy chỉnh ảnh
+ Đặt màu nền
+ Cài đặt ảnh đứng
+ Cài đặt ảnh ngang
+ Nền trong suốt
+ Chế độ nền
+ Che
+ Cơ bản
+
+
+ Tắt chỉ thị chuyển vùng
+ Khi được tắt, R biểu tượng sẽ không phù hợp khi chuyển vùng.
+
+
+ Đang sạc (%d%%)
+ Đã sạc
+ %d%% còn lại
+
+
+ Không dịch vụ
+ Chế độ máy bay
+ Chỉ cuộc gọi khẩn cấp
+
+
+ Điều khiển Pie
+ Cho phép
+ Kích thước khóa chuyển hướng
+ Vị trí kích hoạt
+ Viền màn hình trái
+ Viền dưới màn hình
+ Viền phải màn hình
+ Viền trên màn hình
+
+
+ Nút cảm biến sáng back
+ Mặc định
+ Tắt nút cảm biến sáng Back
+ Luôn sáng kh màn hình bật
+ Nút back sáng thông báo
+ Nhấp nháy đèn nền nút khi có thông báo, sử dụng khi thiết bị của bạn ko có đèn led thông báo cân thay thế và lưu ý có thể hao pin.
+
+
+ Ẩn thanh điều hướng
+ Ẩn thanh điều hướng khi bật bảng điều khiển Pie (cho các thiết bị có thanh điều hướng, yêu cầu khởi động lại)
+
+
+ Hòa sắc nền Holo
+ Thay thế hóa sắc chuẩn Holo với màu được lựa chọn trong chế độ hòa sắc (yêu cầu khởi động lại)
+
+
+ Tắt phím cứng
+ Tắt phím MENU, BACK, HOME khi bảng Pie được bật. Phím cứng vẫn làm việc. (Cho thiết bị có phím cứng)
+
+
+ Sử dụng Holo Dark theme
+ Chuyển GB UI tới sử dụng Holo Dark theme thay vì of Holo Light
+
+
+ Tắt
+ Bên trên trái
+ Bên trên phải
+ Bên dưới trái
+ Bên dưới phải
+
+
+ Cách trên
+
+
+ Tắt cảnh báo chuyển vùng
+ Tắt hóa cảnh báo chuyển vùng khi gửi tin nhắn hoặc thực hiện cuộc gọi điện thoại trong khi chuyển vùng
+
+
+ Tìm kiếm
+ Không
+
+
+ Ứng dụng nhanh
+ Cài đặt ứng dụng nhanh
+ Ứng dụng chính
+ Giữ ứng dụng vị trí 1
+ Giữ ứng dụng vị trí 2
+ Giữ ứng dụng vị trí 3
+ Giữ ứng dụng vị trí 4
+
+
+ GPS bật
+ GPS tắt
+ GPS Bị khóa
+
+
+ Luôn hiện nút bấm menu
+
+
+ Chế độ chuông
+
+
+ Cài đặt đồng hồ
+
+
+ Ẩn SA/CH
+
+
+ Ẩn đồng hồ
+
+
+ Kích cỡ
+
+
+ Quản lý trong suốt
+ Thanh trạng thái trong suốt trong launcher
+ Thanh trạng thái trong suốt trong màn hình khóa
+ Trong suốt bảng điều hướng trong launcher
+ Trong suốt bảng điều hướng trong lockscreen
+
+
+ Ẩn biểu tượng báo thức
+
+
+ Mức sáng lim dim
+ Lượng độ sáng lim dim khi màn hình sắp được tắt (Trang bị khởi động lại)
+
+
+ Điện thoại
+ Máy tính bảng
+
+
+ Cài đặt độ sáng
+ Cài đặt độ sáng
+ Chỉ sử dụng trong trường hợp thiết bị của bạn hỗ trợ tính năng độ sáng tiêu chuẩn Android. Tiếp tục vô hiệu hóa nếu bạn gặp các vấn đề liên quan đến độ sáng. (cần khởi động lại cho thay đổi)
+
+
+ Hiện các ứng dụng gần đây
+
+
+ Hoạt động giữ phím HOME
+
+
+ Chuyển tới ứng dụng tùy chỉnh 1
+ Cài đặt ứng dụng tùy chỉnh 1
+ Chuyển tới ứng dụng tùy chỉnh 2
+ Cài đặt ứng dụng tùy chỉnh 2
+ Không có ứng dụng tùy chỉnh được thiết lập!
+ Ứng dụng tùy chỉnh không tìm thấy!
+
+
+ Ứng dụng đồng hồ bảng thông báo
+ Link tới ứng dụng cụ thể của đồng hồ bảng thông báo thay vì tới Cài đặt ngày giờ
+
+
+ Chờ phản hồi từ hệ thống GravityBox framework…
+ GravityBox framework không phản hồi. Đang thoát.
+
+
+ Chuyển vùng quốc tế
+ Kết nối với các dịch vụ dữ liệu khi chuyển vùng trên toàn quốc
+
+
+ Chế độ Desktop mở rộng
+ Đã tắt
+ Ẩn thanh trạng thái
+ Ẩn thanh điều hướng
+ Ẩn cả hai
+ Mở rộng desktop
+ Mở rộng desktop là bật
+ Mở rộng desktop là tắt
+
+
+ Chụp màn hình
+
+
+ Hiện menu
+
+
+ Chuyển đổi mở rộng desktop
+ Chuyển đổi mở rộng desktop là tắt!
+
+
+ Cài đặt thanh diều hướng
+ Các cài đặt liên quan tới thanh điều hướng
+ Ghi đè lên mặc định hệ thống
+ Chuyển đổi chính cho cài đặt thanh điều hướng (cần khởi động lại máy để thay đổi)
+ Bật thanh điều hướng
+ Trang bị khởi động lại
+ Độ cao thanh điều hướng
+ Áp dụng với thanh điều hướng dọc và ngang
+ Áp dụng với thanh điều hướng ngang và dọc
+ Chiều rộng thanh điều hướng
+ Áp dụng với thanh điều hướng dọc
+ Luôn hiện phím menu
+
+
+ Chụp màn hình tại nút nguồn menu
+
+
+ Thiết lập vòng tròn mở khóa
+ Cho phép mở khóa với mở các đối tượng
+ Chuyển tới các đối tượng mở khóa chính
+ Cài đặt Ứng dụng chuyển tới %s
+ Vòng mở khóa dọc
+ Vòng mở khóa ngang
+
+
+ Bật thanh điểu chỉnh sáng
+ Hiện thanh điều chỉnh sáng trên thanh trạng thái
+
+
+ Điện thoại
+ Tin nhắn
+ Dữ liệu
+
+
+ Chuyển ký tự unicode
+ Chuyển đổi ký tự unicode sang ký tự thường. Giảm dung lượng tin nhắn.
+ Để ký tự nguyên vẹn
+ Dải ký tự ko nguyên vẹn
+ Chuyển đổi toàn bộ unicode
+
+
+ Tắt cảnh báo sử dụng dữ liệu 2G chậm
+ Tắt cảnh báo sử dụng dữ liệu châm cho sim khi ở chế độ 2G
+
+
+ Màu phần trăm pin gốc
+ Thay đổi màu đồng hồ, phầm trăm và vòng tròn pin theo màu biểu tượng pin gốc, Áp dụng khi màu của biểu tượng tắt.
+
+
+ Chế độ mạng
+ 2G/2G+3G/3G/(LTE)
+ 2G/2G+3G/(LTE)
+ 2G/3G/(LTE)
+
+
+ Cho phép tất cả tự xoay
+
+
+ Thay đổi hoạt động mặc định
+ Thay đổi bấm/giữ cho lựa chọn tiêu đề (Trang bị khởi động lại cho cập nhật thay đổi)
+
+
+ Chế độ mạng cho vị trí SIM
+ Định nghĩa vị trí SIM để chuyển chế độ mạng (%s)
+ Vị trí SIM 1
+ Vị trí SIM 2
+
+
+ Không
+ Luôn luôn
+ Khi trong thanh trạng thái kéo xuống
+ Khi kéo thanh trạng thái và ẩn thanh phím mềm phía dưới
+
+
+ Phụ hồi kiểu pin gốc
+ Sử dụng khi biểu tin đã được thay đổi bởi mod hoặc phần mềm khác
+
+
+ Sáng màn hình khi kết nối usb
+ Cho,phép màn hình sáng lên khi kết nối hoặc ngắt kêt nối usb(Cần trang bị khởi động lại để thay đổi)
+
+
+ Im lặng khi thay đổi âm lượng
+ Tắt âm thanh khi bấm phím âm lượng
+
+
+ Rung khi gọi
+ Khi cuộc gọi đã kết nối
+ Khi điện thoại đã ngắt kết nối
+ Khi chờ cuộc gọi
+ Sau mỗi 45 giây khi gọi
+
+
+ Tiêu đề ghi
+ Cho phép gán tiêu đề ghi âm trong quicksetting
+
+
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
new file mode 100644
index 0000000000..bbf5032d53
--- /dev/null
+++ b/res/values-zh-rCN/strings.xml
@@ -0,0 +1,817 @@
+
+
+
+
+
+ GravityBox
+
+ 电量图标风格
+ 原厂电量图标
+ 圆形电量图标
+ 圆形电量图标含百分比
+ KitKat电量图标
+ KitKat电量图标含百分比
+ 电量百分比
+ 无
+
+ 音量键跳过歌曲
+ 当屏幕关闭时长按音量键以跳过歌曲
+
+ 低电量警告
+ 弹出窗口以及音效
+ 仅弹出窗口
+ 仅音效
+ 关闭
+
+ 重新启动以后设置才会启用
+
+ 自动隐藏信号强度图标
+ 当SIM卡未插入时自动隐藏指定SIM卡的信号强度图标并停用“SIM卡未插入”通知
+ 自动隐藏SIM卡1
+ 自动隐藏SIM卡2
+ 禁用通知
+ “SIM卡未插入”提醒已停用
+
+ 高级重新启动菜单
+ 启用重新启动和Recovery选项高级菜单
+ Recovery
+ Bootloader
+
+ 音量键光标调整
+ 在文字输入区域内,以音量键控制光标位置
+ 禁用
+ 音量键增/减按钮控制光标向左/向右
+ 音量键增/减按钮控制光标向右/向左
+
+ 清除全部最近使用的应用程序
+
+ 修正“日期与时间设置”崩溃
+ 当您进入日期与时间设置发生错误时,启用这个选项(需要重新启动)
+
+ 修正通话的来电显示
+ 若您来电画面上显示的联系人与您的通讯录不符,启用这个选项(需要重新启动)
+ 为了让更改生效,您应该在重新启动后清除并重新添加所有联系人(使用 设置/应用程序/全部,找到“联系人存储”,清除数据)
+
+ 修正短信的来电显示
+ 如果来自同一个人的短信被分成不同的会话,启用这个选项(需要重新启动)
+ 为了让更动生效,您应该在重新启动后,在“短信”应用程序内删除全部分散的会话
+
+ 修正日历应用程序
+ 若您周期性地遇到屏幕自动开启时,启用这个选项(需要重新启动)
+
+ 重要
+
+ 全屏来电者相片
+ 在来电画面内显示来电者的全屏相片
+
+
+ 同步开启
+ 同步关闭
+ Wi-Fi AP开启
+ Wi-Fi AP关闭
+ 手电筒开启
+ 手电筒关闭
+ 按下以关闭
+ 播放中…
+ 录音中…
+ 已录音
+ 长按以录音
+ 按下以停止录音
+ 禁用
+ 正常
+ 扩展
+ 保持唤醒
+ 唤醒关闭
+ Wi-Fi
+ Wi-Fi关闭
+ 未连接
+ 正在打开…
+
+
+ 状态栏快速设置
+ 允许在状态栏中显示或隐藏快速设置方块
+ 用户配置文件
+ 飞行模式
+ 电池状态
+ Wi-Fi
+ Wi-Fi(CM风格)
+ 蓝牙
+ GPS
+ GPS(CM风格)
+ 移动数据
+ 网络模式
+ 数据使用
+ 音频配置文件
+ 亮度
+ 屏幕超时
+ 自动旋转
+ 同步
+ Wi-Fi接入点
+ 手电筒
+ GravityBox
+ 睡眠
+ 快速录音
+ 设置
+ 音量
+ 扩展桌面
+ 保持唤醒
+ 屏幕截图
+
+
+ 颜色选择器
+ 在颜色上按下以应用
+
+
+ 状态栏背景颜色
+ 可在此设置状态栏的背景颜色与透明度
+
+
+ 修正语音设置
+ 解锁语言与输入设置内的“语音搜索”及“文字转语音输出”设置(需要重新启动)
+
+
+ 高级开发人员选项
+ 解锁高级开发人员选项(需要重新启动)
+
+
+ 状态栏调整
+ 包含各种状态栏的调整选项
+ 杂项调整
+ 包含所有不属于特定类别的调整选项
+ 通用修正
+ 包含MTK6589的通用修正,请在有需要时使用
+
+
+ 关于
+ 由C3C076@XDA编写,点击这里进入官方讨论链接
+ Xposed 框架
+ 由rovo89@XDA编写,点击这里进入官方讨论链接
+ 捐助
+ 支持开发,点击这里进入PayPal捐赠
+
+
+ 您的%s将重新启动
+ 您的%s将重新启动至Recovery
+ 您的%s将重新启动至Bootloader
+
+
+ CRT屏幕关闭特效
+ 当屏幕关闭时,使用旧式CRT屏幕关闭时的特效
+
+
+ 工程模式
+ 启动“工程模式”应用程序
+
+
+ 双SIM卡铃声
+ 开启可以设置各个SIM卡的铃声与通知音效
+
+
+ 锁屏画面调整
+ 包含各种锁屏画面的微调选项
+ 锁屏画面背景
+ 背景风格
+ 默认壁纸
+ 纯色
+ 自定义图像
+ 设置自定义颜色
+ 可以为锁屏画面设置自定义的背景颜色
+ 设置自定义图像
+ 可以为锁屏画面设置自定义的背景图像
+ 背景已更改
+ 背景未更改
+ 其它
+ 最大化小工具
+ 若启用这个选项,锁定画面的小工具默认都会被最大化
+
+
+ 电源调整
+ 包含各种电源相关的调整选项
+
+
+ 停用LED闪烁
+ 停掉当低电量且未充电时会出现扰人的LED闪烁
+
+
+ 显示调整
+ 包含各种显示相关的调整选项
+
+
+ 最低亮度级别
+ 可以设置最低的亮度级别,在手动设置亮度时适用(需要重新启动)
+
+
+ 自动亮度级别
+ 可以设置环境的亮度级别与相对应的LCD背光值
+ 级别
+ 最大照度(lux)
+ 亮度(%d – 255)
+ 指定值无效
+ 不建议将亮度设为%d以下
+ 亮度不可大于255
+ 值不可低于0
+ 较低级别的值不可大于较高级别的值
+ 较高级别的值不可小于较低级别的值
+ 已设置%s的值
+ 自动亮度配置已保存
+ 自动亮度配置未保存
+ 设置
+
+
+ 启用锁屏画面旋转
+ 警告:若AOSP的锁定屏幕曾被厂商修改,某些装置的解锁环目标可能遭到互换
+
+
+ 启用菜单键
+ 使菜单键在锁定画面时可以用来快速地解锁装置(需要重新启动)
+
+
+ 修正短信唤醒锁
+ 避免在收到新短信时唤醒屏幕(需要重新启动)
+
+
+ 时间居中
+
+
+ 媒体调整
+ 包含各种媒体与声音系统的调整选项
+
+
+ 更多音量段数
+ 添加更多的音量调整段数(需要重新启动)
+
+
+ 安全耳机媒体音量
+ 启用或停用安全耳机媒体音量功能
+
+
+ 禁用充电LED灯
+ 禁用当充电时的LED灯
+
+
+ 实体按键调整
+ 可在此为实体按键设置自定动作
+ 菜单键长按动作
+ 菜单键双击动作
+ 返回键长按动作
+ 默认
+ 搜索
+ 语音搜索
+ 切换到上一个应用程序
+ 结束前台应用程序
+ 使装置休眠
+ 结束应用程序的长按延迟
+ 适用于“结束正在使用的应用程序”动作,定义按键需要按下持续多久才会触发动作
+ 双击速度
+ 适用于菜单键的双击动作,定义按键需要在多少时间内连续按两下才会触发动作
+ %s应用程序已结束
+ 无应用程序可结束
+ 找不到上一个应用程序
+
+
+ 电话调整
+ 包含各种通话的调整选项
+
+
+ 响铃时的手机翻转动作
+ 可定义在响铃时,翻转使屏幕向下时执行的动作
+ 无
+ 铃声静音
+ 拒接电话
+
+
+ 软重启
+
+
+ 纯黑色背景
+ 在默认的Holo系统主题内使用纯黑色的背景而不是黑-灰色的渐变(需要重新启动)
+
+
+ 每行方块数
+ 定义快速设置内每行有几个方块,开关会根据您的设置自动缩放,适用于竖屏
+
+
+ 显示周
+
+
+ 可扩展音量面板
+ 启用此选项使你可以调整不同的媒体音量
+
+
+ 完整的可扩展音量面板
+ 允许音量面板占用所有提供的空间
+
+
+ 合并铃声音量与通知音量
+ 禁用时铃声音量与通知音量将可以分别调整
+
+
+ 自动切换快速菜单
+ 没有通知时,下拉状态栏自动切换成快速设置菜单
+
+
+ 快速设置菜单下拉位置
+ 选择下拉状态栏边缘启用快速菜单的位置
+ 关闭
+ 右侧
+ 左侧
+
+
+ 禁用音量键唤醒屏幕
+ 佳域G3s和G4的实体音量键会唤醒屏幕
+
+
+ 状态栏颜色
+
+
+ 启用图标颜色
+
+
+ 状态栏图标颜色
+ 设置状态栏图标和时钟的颜色
+
+
+ 数据活动颜色
+ 设置数据活动指示器的颜色
+
+
+ 管理快速设置
+
+
+ 通知抽屉风格
+
+
+ 通知抽屉背景
+ 默认背景
+ 纯色
+ 自定义图案
+ 设置背景颜色
+ 设置竖向图片
+ 设置横向图片
+ 背景透明度
+ 背景模式
+ 覆盖
+ 底图
+
+
+ 禁用漫游指示
+ 禁用后漫游指示器上(R)不可见,请小心使用
+
+
+ 充电中:(%d%%)
+ 已充满!
+ 剩余:%d%%
+
+
+ 无服务
+ 飞行模式已启用
+ 仅限紧急呼叫
+
+
+ Pie Controls虚拟键
+ 启用Pie Controls虚拟键
+ 虚拟键大小
+ 触发位置
+ 屏幕左边缘
+ 屏幕下边缘
+ 屏幕右边缘
+ 屏幕上边缘
+
+
+ 按键背光模式
+ 默认
+ 禁用按键背光
+ 当屏幕亮起时常亮背光灯
+ 背光灯通知
+ 这个设置是实验性的!当收到通知时背光灯会闪烁提醒。建议当您的装置没有LED通知灯时才开启,此功能可能会消耗部分电量
+
+
+ 隐藏虚拟键
+ 当Pie Controls虚拟键启用时隐藏系统虚拟键(对于有虚拟键的设备,需要重新启动)
+
+
+ 优化Holo背景
+ 使用优化过的Holo背景以消除色带(需要重新启动)
+
+
+ 禁用实体按键
+ 当Pie Controls虚拟键启用时将会禁用实体按键功能(对于有实体按键的设备)
+
+
+ 使用Holo黑色背景主题
+ 切换GravityBox至黑色Holo主题代替白色Holo主题
+
+
+ 关闭
+ 左上角
+ 右上角
+ 左下角
+ 右下角
+
+
+ 调整顶部边距
+
+
+ 关闭漫游警告
+ 关闭当漫游时发送短信或拨打电话的警告
+
+
+ 搜索
+ (无)
+
+
+ 快速应用
+ 快速应用方块设置
+ 主应用
+ 长按应用槽 1
+ 长按应用槽 2
+ 长按应用槽 3
+ 长按应用槽 4
+
+
+ 开启GPS
+ 关闭GPS
+ GPS已定位
+
+
+ 总是显示菜单键
+
+
+ 铃声模式
+
+
+ 时钟设置
+
+
+ 隐藏 上午/下午
+
+
+ 隐藏时钟
+
+
+ 触发位置大小
+
+
+ 透明度调整
+ 管理状态栏和虚拟键透明度
+ 启动器下的状态栏透明度
+ 锁屏画面时的状态栏透明度
+ 启动器下的虚拟键透明度
+ 锁屏画面时的虚拟键透明度
+
+
+ 隐藏闹钟图标
+
+
+ 屏幕暗淡级别
+ 当屏幕将被关闭时,削减的亮度值(需要重新启动)
+
+
+ 手机
+ 平板
+
+
+ 亮度设置
+ 启用亮度设置
+ 这个功能只能在您的设备支持标准的Android亮度调整功能才启用。如果遇到任何亮度问题请关闭此选项(需要重新启动)
+
+
+ 显示最近使用的应用程序
+
+
+ 长按主页键动作
+
+
+ 执行自定义的应用 1
+ 设置自定义应用 1
+ 执行自定义的应用 2
+ 设置自定义应用 2
+ 没有指定应用!
+ 未找到自定义应用!
+
+
+ 通知面板时钟应用
+ 启用后状态栏的时间将链接到指定应用,而不是日期与时间设置
+
+
+ 等待GravityBox系统框架的响应…
+ GravityBoy系统框架未响应 退出中…
+
+
+ 国内数据漫游
+ 国内漫游时连接到数据服务
+
+
+ 扩展桌面模式
+ 禁用
+ 隐藏状态栏
+ 隐藏虚拟键
+ 隐藏状态栏与虚拟键
+ 扩展桌面功能
+ 扩展桌面已开启
+ 扩展桌面已关闭
+
+
+ 屏幕截图
+
+
+ 显示菜单
+
+
+ 切换扩展桌面功能
+ 扩展桌面模式已禁用!
+
+
+ 虚拟键调整
+ 包含各种关于虚拟键的调整选项
+ 覆盖系统默认值
+ 虚拟键调整的总开关(需要重新启动)
+ 启用虚拟键
+ 需要重新启动
+ 虚拟键高度
+ 应用于竖屏横向虚拟键
+ 应用于横屏纵向虚拟键
+ 虚拟键宽度
+ 应用于纵向虚拟键
+ 总是显示菜单键
+
+
+ 电源键菜单屏幕截图
+
+
+ 解锁环设置
+ 启用解锁环
+ 解锁环目标总开关
+ 目标应用 %s
+ 解锁环垂直偏移
+ 解锁环水平偏移
+
+
+ 启用亮度控制
+ 启用状态栏调整亮度(需要禁用自动亮度)
+
+
+ 电话
+ 短信
+ 移动数据
+
+
+ 转换Unicode
+ 将Unicode字符转换为普通字符,减少整体信息大小
+ 保留字符不变
+ 转换不可编码字符
+ 转换所有Unicode字符
+
+
+ 禁用低速2G网络数据警告
+ 当在快速设置中为SIM卡启用2G移动数据时,禁用低速数据警告
+
+
+ 保持原厂电池颜色
+ 使状态栏时钟、百分比和圆形电池使用原厂电池图标的颜色。当图标颜色关闭时有效
+
+
+ 网络模式
+ 2G/2G+3G/3G/(LTE)
+ 2G/2G+3G/(LTE)
+ 2G/3G/(LTE)
+
+
+ 允许所有旋转方向
+
+
+ 覆盖默认方块行为
+ 覆盖触摸/长按选定方块的行为(需要重新启动)
+
+
+ 网络模式方块SIM卡插槽
+ 定义的网络模式方块应用的SIM卡插槽(%s)
+ SIM 卡1
+ SIM 卡2
+
+
+ 从不
+ 总是
+ 当扩展桌面开启时
+ 当扩展桌面隐藏虚拟键时
+
+
+ 保持原厂电池图标
+ 使用它以防止原厂电池图标被替换为第三方电池图标
+
+
+ 拔下电源线开启屏幕
+ 如果启用,当你插入或拔出USB线/电源线时会亮起屏幕(需要重新启动)
+
+
+ 静音音量调节音效
+ 禁用调节音量时发出音效
+
+
+ 通话振动
+ 通话接通时振动
+ 通话结束后振动
+ 通话等待震动
+ 通话期间每45秒振动一次
+
+
+ 方块重新排序
+ 允许快速设置方块重新排序
+
+
+ 进行中通拦截器
+ 允许拦截选定进行中的通知
+ 在每个进行中通知发生时,此列表会被填充
+ 您可以决定在下次发生时是否拦截进行中的通知。请小心使用
+ 重置列表
+ 是否确实要重置列表?
+ 这将清空当前列表,并且解除所有之前被阻拦的进行中通知
+ (列表为空)
+
+
+ 快速解锁
+ 当输入正确的PIN/密码时,自动解锁
+
+
+ 禁用
+ 标准
+ 小写
+ 大写
+
+
+ 状态栏锁定策略
+ 默认
+ 非保密锁定时可以解锁
+ 锁定
+
+
+ 数据流量监控
+ 开启监控
+ 显示数据流量,连接处于活动状态时自动监测数据
+ 位置
+ 自动(中心或右 取决于时钟的位置)
+ 左
+ 右
+ 大小
+ 标准
+ 较小
+ 最小
+ B
+ KB
+ MB
+ s
+
+
+ 禁用小部件限制
+ 允许无限数量的锁屏小部件
+
+
+
+ 空闲:%1$s
+
+ 可用:%1$s
+ 最近任务内存栏
+ 关闭
+ 置顶
+ 底部
+
+
+ 单按最近键行为
+ 长按最近键行为
+
+
+ 显示电池弧光
+ 解锁环周围绘制显示电池状态弧光
+
+
+ 切换按钮
+
+
+ 长按主页键
+ 设备锁定时长按切换开/关。如果屏幕已打开设备缺乏本地唤醒主页键的支持
+
+
+ 自动展开
+
+
+ 菜单键
+ 主页键
+ 返回键
+ 最近键
+ 音量键
+ 其它设置
+ 长按动作
+ 单按动作
+ 双击动作
+
+
+ 禁用双击
+
+
+ 信号色彩模式
+ 使用GravityBox图标(有信号等级)
+ 使用原厂图标(无信号等级)
+ 不使用颜色
+
+
+ 应用启动器
+ 对话框允许定义最多8个应用程序,可以分配硬件按键或作为额外的虚拟键
+ 应用程序槽 %d
+ 没有应用程序被分配,使用GravityBox/应用启动器来分配应用程序
+
+
+ 显示应用程序按键
+
+
+ 显示应用启动器
+
+
+ 显示自定义按键
+ 关闭
+ 搜索
+ 应用启动器
+
+
+ Pie 颜色
+ 背景颜色
+ 前景颜色
+ 边框颜色
+ 按键选中颜色
+ 文字颜色
+ 重设颜色
+
+
+ 开启未知来电者照片
+ 设置未知来电照片
+ 照片已更改
+ 照片未更改
+
+
+ 您的屏幕可能不支持低于20的值。如果您的屏幕亮不起来,
+ 按住 音量+ 键至少7秒钟将会还原亮度,调整亮度请使用更大的值
+
+
+ 普通
+ 虚拟按键
+ 颜色和透明度
+ 大小
+
+
+ 启用虚拟按键颜色
+ 停用后可能需要重启
+ 虚拟按键颜色
+ 虚拟按键发光颜色
+ 虚拟按键背景颜色
+
+
+ 禁用锁屏阴影
+ 锁屏后移除暗色调
+
+
+ 透明度管理模式
+ 需要重新启动
+ 禁用
+ 状态栏
+ 虚拟按键
+ 两者
+
+
+ 第二个信号颜色
+ 覆盖原厂橙色信号图标
+ 第二个数据活动颜色
+ 设置为辅助数据活动的指示颜色
+
+
+ 状态图标风格
+ 适用于无声,震动,闹钟等状态图标
+ JellyBean
+ KitKat
+
+
+ 返回键双击动作
+
+
+ 转到桌面
+ 返回
+
+
+ 标题风格
+ 仅适用于由GravityBox修改标题(不影响原厂标题)
+
+
+ 调整底部边距
+
+
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index ecaf48d80c..dcd0134bc6 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -1,35 +1,39 @@
-
-
+
+
GravityBox
-
- 電量指示圖案樣式
- 原廠電量指示圖案
- 圓形電量圖示(包含百分比)
+
+ 電量指示器風格
+ 預設電量指示器
+ 圓形電量指示器
+ 圓形電量指示器(包含電量百分比)
+ KitKat 電量指示器
+ KitKat 電量指示器(包含電量百分比)電量百分比文字無
- 音量鍵跳過曲目
- 當螢幕關閉時,長按音量鍵以跳過曲目
+ 音量鍵跳過歌曲曲目
+ 當螢幕關閉時長按音量鍵將可以跳過歌曲曲目低電量警告
- 彈出視窗以及音效
- 僅彈出視窗
- 僅音效
+ 彈出浮動窗與音效
+ 只有浮動窗
+ 只有音效關閉
- 重新啟動以後才會套用更動
+ 重啟裝置後更改將被套用
- 自動隱藏訊號強度圖示
- 隱藏指定 SIM 卡槽的訊號強度圖示(若該卡槽未插入 SIM 卡時)、停用「SIM 卡未插入」提醒
+ 自動隱藏訊號圖示
+ 自動隱藏訊號圖示時選定的SIM卡插槽,SIM卡未插入, 停用 \"SIM 卡未插入\" 通知自動隱藏 SIM 卡槽 1自動隱藏 SIM 卡槽 2
- 關閉提醒
- 「SIM 卡未插入」提醒已停用
+ 停用通知
+ \"SIM 卡未插入\" 通知已停用
- 進階重新啟動選單
- 啟用有重新啟動至 Recovery 選項的進階重新啟動選單
+ 進階重啟選單
+ 啟用進階重啟選單,將有重啟至 recovery 模式選項Recovery
+ Bootloader音量鍵游標控制在文字輸入區域內,以音量鍵控制游標位置
@@ -38,14 +42,14 @@
音量增/減鈕控制游標向右/向左清除全部最近使用的應用程式
- 在「最近使用的應用程式」畫面增加一個可以清除所有應用程式的按鈕
- 修正「日期與時間設定」錯誤
+ 修正「日期與時間」設定錯誤當您進入日期與時間設定時發生錯誤時,啟用這個選項(需要重新啟動)修正通話的來電顯示若您來電畫面上顯示的聯絡人與您的通訊錄不合,啟用這個選項(需要重新啟動)
- After reboot, you should clear and re-add your contacts for change to take effect! Use Settings / Applications / All - to clear data of Contacts provider.
+ 為了讓更動生效,您應該在重新啟動後刪除並重新新增所有聯絡人!(請於 設定>應用程式>全部 分頁中找尋「聯絡人」應用程式並且選擇清除資料)
+
修正簡訊的來電顯示如果來自同一個人的簡訊被分成不同的會話串,啟用這個選項(需要重新啟動)
@@ -62,16 +66,25 @@
同步處理開啟同步處理關閉
- Wi-Fi AP 開啟
- Wi-Fi AP 關閉
+ Wi-Fi 行動熱點 開啟
+ Wi-Fi 行動熱點 關閉手電筒開啟手電筒關閉
- 按下以關閉
- 播放中…
- 錄音中…
+ 輕觸以關閉手電筒
+ 播放中…
+ 錄音中…已錄音長按以錄音按下以停止錄音
+ 已停用
+ 正常
+ 擴展
+ 開啟保持清醒
+ 關閉保持清醒
+ Wi-Fi
+ Wi-Fi 關閉
+ 沒有連線
+ 開啟中…狀態列快速設定磁貼
@@ -80,25 +93,32 @@
飛航模式電池狀態Wi-Fi
+ Wi-Fi (CM 風格)藍牙GPS
- 資料連結
+ GPS (CM 風格)
+ 行動資料網路模式資料用量
- 情境模式
+ 情景模式亮度
- 休眠
+ 螢幕休眠時間自動旋轉同步功能
- Wi-Fi 存取點
+ Wi-Fi 行動熱點手電筒
- GravityBox
+ GravityBox 設定關閉螢幕快速錄音
-
+ 設定
+ 音量
+ 全螢幕功能
+ 保持清醒
+ 螢幕截圖
+
顏色選擇器
- 在顏色上按下以套用
+ 輕觸顏色以套用狀態列背景顏色
@@ -113,12 +133,12 @@
解鎖進階的開發人員選項(需要重新啟動)
- 狀態列調校
- 包含各種狀態列的調校選項
- 雜項
+ 狀態列校正
+ 包含各種狀態列的校正選項
+ 其他選項包含所有不屬於特定類別的調校選項通用修正
- 包含 MTK6589 通用的修正。請只在有需要時使用。
+ 包含 MTK6589 裝置的通用修正。請只在有需要時使用。關於
@@ -126,11 +146,12 @@
Xposed 框架由 rovo89@XDA 編寫。點選此處以拜訪官方的討論串。捐助
- 若您覺得這個 app 好用的話,請贊助我!也請考慮捐助給編寫出優秀的 Xposed 框架的 rovo89。
+ 如果您覺得這個程式寫得不錯,您可以按下這個按鈕利用 PayPal 來捐贈我
- 您的手機將重新啟動
- 您的手機將重新啟動至 Recovery
+ 您的 %s 將重新啟動
+ 您的 %s 將重新啟動至 Recovery 模式
+ 您的 %s 將重新啟動至 Bootloader 模式CRT 螢幕關閉特效
@@ -145,17 +166,17 @@
啟動可以設定各個 SIM 卡的鈴聲與通知音效的應用程式
- 鎖定畫面調校
- 包含各種鎖定畫面的調校選項
+ 鎖定畫面校正
+ 包含各種鎖定畫面的校正選項鎖定畫面背景背景樣式預設桌布純色
- 自訂圖案
+ 自訂圖片設定自訂顏色可以為鎖定畫面設定自訂的背景顏色
- 設定自訂影像
- 可以為鎖定畫面設定自訂的背景影像
+ 設定自訂圖片
+ 可以為鎖定畫面設定自訂的背景圖片背景已更改背景未更改其他
@@ -163,37 +184,37 @@
若啟用這個選項,鎖定畫面的小工具預設都會被最大化
- 電源調校
- 包含各種電源相關的調校選項
+ 電源校正
+ 包含各種電源相關的校正選項
- 停用 LED 閃爍
- 停掉當低電量且未充電時會出現的擾人 LED 閃爍
+ 停用 LED 呼吸燈閃爍
+ 停掉當低電量且未充電時會出現的擾人 LED 呼吸燈閃爍
- 顯示調校
- 包含各種顯示相關的調校選項
+ 顯示校正
+ 包含各種顯示相關的校正選項
- 最低亮度層級
- 可以設定最低的亮度層級。在手動設定亮度時適用。(需要重新啟動)
- 設定值的範圍:10 – 80
+ 最低亮度等級
+ 可以設定最低的亮度等級。在手動設定亮度時適用。(需要重新啟動)
- 自動亮度層級
- 可以設置環境的亮度層級與相對應的 LCD 背光值
- 層級
+ 自動亮度等級
+ 可以設定環境的亮度等級與相對應的 LCD 背光值
+ 等級最大照度(lux)
- 亮度(10 – 255)
- 指定的值不被接受
- 不建議將亮度設為 10 以下
+ 亮度(%d – 255)
+ 指定的數值不被接受
+ 不建議將亮度設為 %d 以下亮度無法大於 255
- 值無法低於 0
- 較低層級的值無法大於較高層級的值
- 較高層級的值無法小於較低層級的值
- 已設定%s 的值
+ 數值無法低於 0
+ 較低等級數值無法大於較高等級的數值
+ 較高等級數值無法小於較低等級的數值
+ 已設定%s 的數值已儲存新的自動亮度組態
- 「沒有」儲存新的自動亮度組態
+ "尚未"儲存新的自動亮度組態
+ 設定啟用鎖定畫面旋轉
@@ -208,15 +229,15 @@
避免在收到新訊息時喚醒螢幕(需要重新啟動)
- 時鐘置中
+ 狀態列時鐘置中
- 媒體調校
- 包含各種媒體與聲音系統的調校選項
+ 媒體校正
+ 包含各種媒體與聲音系統的校正選項更多音樂音量的調整段數
- 為音樂串流添加更多的音量調整段數(需要重新啟動)
+ 為音樂串流新增更多的音量調整段數(需要重新啟動)安全的耳機媒體音量
@@ -227,28 +248,28 @@
停用當充電時會亮起的 LED 燈號
- 硬體按鍵動作
- 可在此為硬體按鍵設定自訂的動作
- 選單鍵長按動作
- 選單鍵雙擊動作
- 返回鍵長按動作
+ 實體按鍵動作
+ 可在此為實體按鍵設定自訂的動作
+ 選單鍵長按動作
+ 選單鍵雙擊動作
+ 返回鍵長按動作預設搜尋語音搜尋切換至上一個應用程式結束正在使用的應用程式
- 使裝置休眠
+ 使裝置休眠結束應用程式的長按延遲適用於「結束正在使用的應用程式」動作。定義按鍵需要按下持續多久才會觸發動作雙擊速度適用於選單鍵的雙擊動作。定義按鍵需要在多少時間內連續按兩下才會觸發動作
- 應用程式已結束
+ %s 應用程式已結束無應用程式可結束找不到上一個應用程式
- 電話調校
- 包含各種通話的調校選項
+ 電話校正
+ 包含各種通話的校正選項響鈴時的手機翻轉動作
@@ -260,19 +281,530 @@
停用接通時的震動停用在通話接通時所觸發的震動
-
+
軟重啟
-
-
+
+
純黑色背景在預設的 Holo 系統內建佈景主題內使用純黑色的背景,而不是黑-灰色的漸層(需要重新啟動)
-
+
每列磁貼數定義快速設定內每列有幾個磁貼。磁貼會根據您的設定自動縮放。適用於豎屏。
-
-
- 顯示目前是一週的哪一天
-
+
+ 在狀態列顯示目前星期幾
+
+
+ 可擴展音量面板
+ 啟用此選項使您可以調整不同串流的音量
+
+
+
+ 完全擴展音量調節面板
+ 允許音量調節面板使用所有可提供的空間
+
+
+ 將鈴聲音量與通知音量連結
+ 當啟用時,鈴聲音量與通知音量將可以分別調整
+
+
+ 自動切換快速選單
+ 當沒有通知時,下拉狀態列自動切換成快速設定選單
+
+
+ 快速設定選單下拉位置
+ 選擇下拉狀態列邊緣啟用快速選單的位置
+ 關閉
+ 右邊
+ 左邊
+
+
+ 關閉音量鍵喚醒螢幕
+ 佳域 G3s 和 G4 的實體音量鍵會喚醒螢幕
+
+
+ 狀態列顏色
+
+
+ 開啟更改狀態列圖示顏色
+
+
+ 狀態列圖示顏色
+ 設定狀態列圖示和時鐘的顏色
+
+
+ 資料傳輸顏色
+ 設定傳輸資料時的顏色
+
+
+ 管理快速設定選單
+
+
+ 通知欄風格
+
+
+ 通知欄背景
+ 預設背景
+ 純色
+ 自訂圖片
+ 設定背景顏色
+ 設定直向圖片
+ 設定橫向圖片
+ 背景透明度
+ 背景模式
+ 疊加
+ 襯底
+
+
+ 隱藏漫遊指示
+ 當隱藏時,漫遊指示器上的 R 會消失,請小心使用
+
+
+ 充電中 (%d%%)
+ 電量已滿
+ %d%% 漫遊中
+
+
+ 沒有服務
+ 飛航模式啟用
+ 僅能撥打緊急電話
+
+
+ Pie 控制
+ 啟用 Pie 控制
+ 導航鍵大小
+ 觸發位置
+ 螢幕左邊緣
+ 螢幕下邊緣
+ 螢幕右邊緣
+ 螢幕上邊緣
+
+
+ 背光燈行為模式
+ 預設
+ 關閉背光燈
+ 當螢幕喚醒時背光燈永遠打開
+ 背光燈通知效果
+ 這個設定是實驗性的!當收到通知時背光燈會閃爍提醒。建議當您的裝置沒有 LED 通知燈時才開啟,此功能可能會消耗部分電量
+
+
+ 隱藏海苔條
+ 當 Pie 控制 啟用時隱藏海苔條(需要重新啟動)
+
+
+ 優化 Holo 背景
+ 取代原本不完美漸層的預設 Holo 黑-灰色背景(需要重新啟動)
+
+
+ 關閉實體按鍵
+ 當 Pie 控制 啟用時將會關閉選單鍵、返回鍵與 HOME 鍵功能,但是實體按鍵功能仍可使用(如果您的裝置有實體按鍵)
+
+
+ 使用 Holo 黑色背景主題
+ 將 GravityBox 的預設 Holo 白色背景主題換成 Holo 黑色背景主題
+
+
+ 關閉
+ 左上角
+ 右上角
+ 左下角
+ 右下角
+
+
+ 調整頂部邊距
+
+
+ 關閉漫遊警告
+ 關閉當漫遊時傳送訊息或撥打電話的警告
+
+
+ 搜尋
+ (無)
+
+
+ 快速應用程式選單
+ 快速應用程式選單設定
+ 主要應用程式
+ 長按應用程式槽 1
+ 長按應用程式槽 2
+ 長按應用程式槽 3
+ 長按應用程式槽 4
+
+
+ GPS 開啟
+ GPS 關閉
+
+
+ 總是顯示選單鍵
+
+
+ 鈴聲模式
+
+
+ 時鐘設定
+
+
+ 隱藏 上午/下午
+
+
+ 隱藏時鐘
+
+
+ 觸發位置大小
+
+
+ 透明度調整
+ 管理海苔條與狀態列透明度
+ 啟動器下的狀態列
+ 鎖定螢幕下的狀態列
+ 啟動器下的海苔條
+ 鎖定螢幕下的海苔條
+
+
+ 隱藏時鐘圖示
+
+
+ 螢幕暗淡等級
+ 黯淡狀態的亮度等級 - 當螢幕關閉時 (需要重新啟動)
+
+
+ 手機
+ 平板電腦
+
+
+ 亮度設定
+ 啟用亮度設定
+ 這個功能只能在您的手機支援標準的 Android 亮度調整才啟用。如果您遇到任何亮度問題請關閉此選項(需要重新啟動)
+
+
+ 顯示最近使用的應用程式
+
+
+ Home 鍵長按操作
+
+
+ 執行自訂的應用程式 1
+ 設定自訂應用程式 1
+ 執行自訂的應用程式 2
+ 設定自訂應用程式 2
+ 沒有指定應用程式!
+ 未找到自訂應用程式!
+
+
+ 與「時鐘」應用程式做連結
+ 啟動此功能後通知欄的時間將與應用程式「時鐘」做連結而非預設的「日期與時間」設定
+
+
+ 正在等待 GravityBox 系統框架回應…
+ GravityBox 系統框架沒有回應,正在退出.
+
+
+ 國內資料漫遊
+ 當處於國內資料漫遊時連線至資料伺服器
+
+
+ 全螢幕模式
+ 關閉
+ 隱藏狀態列
+ 隱藏海苔條
+ 隱藏狀態列與海苔條
+ 全螢幕功能
+ 全螢幕功能現在為開啟狀態
+ 全螢幕功能現在為關閉狀態
+
+
+ 螢幕截圖
+
+
+ 顯示選單
+
+
+ 切換全螢幕功能
+ 全螢幕模式已關閉!
+
+
+
+ 海苔條校正
+ 包含各種關於海苔條的校正
+ 覆蓋系統預設值
+ 新增海苔條校正的主控鍵(需要重新啟動)
+ 啟用海苔條功能
+ 需要重新啟動
+ 海苔條高度
+ 套用於水平的海苔條和縱向
+ 套用於水平的海苔條和橫向
+ 海苔條寬度
+ 套用於垂直海苔條
+ 永遠顯示選單鍵
+
+
+
+ 電源選單顯示"螢幕截圖"選項
+
+
+
+ 解鎖環設定
+ 啟用螢幕鎖定目標
+ 主切換解鎖環目標
+ 目標應用程式 %s
+ 解鎖環垂直偏移量
+ 解鎖環水平偏移量
+
+
+ 啟用亮度控制
+ 調整滑動狀態列時的亮度(需要停用自動亮度)
+
+
+ 電話
+ 訊息
+ 行動資料
+
+
+ 去除 unicode 字符
+ 正常字符轉換成 unicode 字符。降低整體郵件大小.
+ 保留字符不變
+ 去除非可編碼字符
+ 去除所有 unicode 字符
+
+
+ 停用 2G 網路延遲警告
+ 停用當 SIM 卡處於 2G 模式下開啟行動資料時網路遲緩警告
+
+
+ 按照預設電池顏色
+ 當圖示自訂顏色停用時讓狀態列上的時鐘,電量百分比與圓形電池顯示預設電池顏色.
+
+
+ 網路模式的瓷貼模式
+ 2G/2G+3G/3G
+ 2G/2G+3G
+
+
+ 停用 GPS 通知
+
+
+ 允許所有旋轉
+
+
+ 覆蓋預設瓷貼操作
+ 覆蓋輕觸/長按以選擇瓷貼的預設操作 (需要重新啟動)
+
+
+ 網路模式瓷貼 SIM 卡 卡槽
+ 設定當"網路模式"瓷貼已被選用時的 SIM 卡 卡槽 (%s)
+ SIM 卡 卡槽 1
+ SIM 卡 卡槽 2
+
+
+ 從不
+ 總是
+ 當全螢幕模式開啟時
+ 當全螢幕模式隱藏導航欄時
+
+
+ 完整保持預設電池圖示
+ 當預設電池圖是被換成第三方電池圖示時使用
+
+
+
+ 取消外接傳輸時開啟螢幕
+ 啟用時,如果您插入/拔出 USB 傳輸線/電源/其他輸入輸出裝置,螢幕將會開啟 (需要重新啟動)
+
+
+ 音量調節
+ 當使用音量鍵調節音量時停用音效
+
+
+ 通話振動
+ 在電話接通後
+ 在通話未被接通時
+ 在通話等待時
+ 撥出通話期間每 45 秒振動一次
+
+
+ 瓷貼排序
+ 可讓的 QuickSettings 瓷貼重新排序
+
+
+ 運行中的程式通知封鎖
+ 允許封鎖已選擇的運行中的通知
+ 該清單將為每個正在運行中的通知自動植入封鎖程序.
+ 然後,您可以決定是否封鎖運行中的通知下一次出現。請謹慎使用.
+ 重設清單
+ 您確定要重設清單嗎?
+ 這將會清除當前清單中已被封鎖的通知,並且已被封鎖的通知將會在稍後重新出現.
+ (清單是空的)
+
+
+ 快速解鎖
+ 正確的PIN/密碼輸入時自動解除鎖定
+
+
+ 停用
+ 標準
+ 小寫字符(僅英文有效)
+ 大寫字符(僅英文有效)
+
+
+ 鎖定螢幕時的狀態列鎖定政策
+ 預設
+ 不鎖定
+ 鎖定
+
+
+ 資料流量監控
+ 啟用監控
+ 當裝置有資料連結時在狀態列顯示資料流量監控
+ 顯示位置
+ 自動 (居中或靠右取決於時鐘的位置)
+ 左
+ 右
+ 大小
+ 正常
+ 較小
+ 最小
+ B
+ KB
+ MB
+ s
+
+
+ 停用鎖定螢幕小工具限制數量
+ 允許無限數量的螢幕鎖定小工具
+
+
+
+ %1$s 空閒
+
+ %1$s 已使用
+ RAM 使用狀況欄
+ 關閉
+ 頂部
+ 按鍵
+
+
+ 近期鍵單擊操作
+ 近期鍵長按操作
+
+
+ 顯示電池狀態圓弧
+ 鎖定螢幕狀態下在解鎖環附近顯示當前電量狀態圓弧
+
+
+ 切換手電筒
+
+
+ 長按 Home 鍵開啟手電筒
+ 當裝置被鎖定時切換手電筒的開關. 如果裝置並沒有支援 Home 鍵喚醒功能,裝置必須在螢幕開啟的狀態下才可切換手電筒開關.
+
+
+ 自動展開音量面板
+
+
+ 選單鍵
+ Home 鍵
+ 返回鍵
+ 近期鍵
+ 音量鍵
+ 其他設定
+ 長按操作
+ 單擊操作
+ 雙擊操作
+
+
+ 停用雙擊操作
+
+
+ 訊號顏色模式
+ 使用 GravityBox 圖示 (有支援訊號等級)
+ 使用預設圖示 (沒有支援訊號等級)
+ 不要套用顏色
+
+
+ 應用程式啟動器
+ 對話框允許最多 8 個應用程式分配到硬體按鍵操作上或是做為額外的海苔條按鍵
+ 應用程式槽 %d
+ 沒有應用程式被分配. 使用 GravityBox / 程式啟動器選單來分配應用程式.
+
+
+ 顯示程式啟動器按鍵
+
+
+ 顯示應用程式啟動器
+
+
+ 顯示自訂按鍵
+ 停用
+ 搜尋
+ 應用程式啟動器
+
+
+ Pie 控制顏色
+ 背景顏色
+ 前景顏色
+ 邊框顏色
+ 按鍵選中顏色
+ 文字顏色
+ 重設顏色
+
+
+ 啟用未知來電撥號者照片
+ 設定未知來電撥號者
+ 照片已更改
+ 照片未更改
+
+
+ 您的裝置可能不支援低於 20 的數值,如果您的裝置螢幕亮不起來,您可以按住音量鍵 + 至少 7 秒,然後將會還原亮度,並請設定較高的數值.
+
+
+ 一般
+ 海苔條按鍵
+ 顏色
+ 尺寸
+
+
+
+ 啟用海苔條顏色
+ 停用後需要重新啟動
+ 海苔條顏色
+ 海苔條光暈顏色
+ 海苔條背景顏色
+
+
+ 停用鎖定螢幕的陰影
+ 移除螢幕鎖定畫面深色色調
+
+
+ 透明度管理器模式
+ 重新啟動裝置
+ 停用
+ 狀態列
+ 海苔條
+ 兩者
+
+
+ 輔助訊號顏色
+ 覆蓋預設橘色訊號圖示
+ 輔助資料連接活動顏色
+ 設定輔助資料連接指示符顏色
+
+
+ 狀態列圖示風格
+ 套用於無聲,震動,報警等狀態圖示.
+ JellyBean
+ KitKat
+
+
+ 返回鍵雙擊操作
+
+
+ 前往桌面
+ 返回
+
+
+ 瓷貼風格
+ 僅適用於 GravityBox 所推出的瓷貼 (不支援系統預設的瓷貼)
+
+
diff --git a/res/values/arrays.xml b/res/values/arrays.xml
index d29a9de1c0..b2b341719e 100644
--- a/res/values/arrays.xml
+++ b/res/values/arrays.xml
@@ -1,10 +1,27 @@
+
+
@string/battery_style_stock@string/battery_style_circle@string/battery_style_circle_percent
+ @string/battery_style_kitkat
+ @string/battery_style_kitkat_percent@string/battery_style_none
@@ -12,6 +29,8 @@
123
+ 4
+ 50
@@ -60,12 +79,16 @@
@string/qs_tile_airplane_mode@string/qs_tile_battery@string/qs_tile_wifi
+ @string/qs_tile_wifi_alt@string/qs_tile_bluetooth@string/qs_tile_gps
+ @string/qs_tile_gps_alt@string/qs_tile_mobile_data@string/qs_tile_network_mode@string/qs_tile_data_usage@string/qs_tile_audio
+ @string/qs_tile_ringer_mode
+ @string/qs_tile_volume@string/qs_tile_brightness@string/qs_tile_screen_timeout@string/qs_tile_autorotation
@@ -73,8 +96,11 @@
@string/qs_tile_wifi_ap@string/qs_tile_torch@string/qs_tile_sleep
+ @string/qs_tile_stay_awake@string/qs_tile_quickrecord@string/qs_tile_quickapp
+ @string/qs_tile_expanded_desktop
+ @string/qs_tile_screenshot@string/qs_tile_gravitybox
@@ -83,12 +109,16 @@
airplane_mode_textviewbattery_textviewwifi_textview
+ wifi_tileviewbluetooth_textviewgps_textview
+ gps_tileviewdata_conn_textviewnetwork_mode_tileviewrssi_textviewaudio_profile_textview
+ ringer_mode_tileview
+ volume_tileviewbrightness_textviewtimeout_textviewauto_rotate_textview
@@ -96,8 +126,11 @@
wifi_ap_tileviewtorch_tileviewsleep_tileview
+ stay_awake_tileviewquickrecord_tileviewquickapp_tileview
+ expanded_tileview
+ screenshot_tileviewgravitybox_tileview
@@ -112,13 +145,18 @@
@string/qs_tile_airplane_mode@string/qs_tile_bluetooth@string/qs_tile_gps
+ @string/qs_tile_ringer_mode
+ @string/qs_tile_volume@string/qs_tile_network_mode@string/qs_tile_sync@string/qs_tile_wifi_ap@string/qs_tile_torch@string/qs_tile_sleep
+ @string/qs_tile_stay_awake@string/qs_tile_quickrecord@string/qs_tile_quickapp
+ @string/qs_tile_expanded_desktop
+ @string/qs_tile_screenshot@string/qs_tile_gravitybox
@@ -133,16 +171,89 @@
airplane_mode_textviewbluetooth_textviewgps_tileview
+ ringer_mode_tileview
+ volume_tileview
+ network_mode_tileview
+ sync_tileview
+ wifi_ap_tileview
+ torch_tileview
+ sleep_tileview
+ stay_awake_tileview
+ quickrecord_tileview
+ quickapp_tileview
+ expanded_tileview
+ screenshot_tileview
+ gravitybox_tileview
+
+
+
+ @string/qs_tile_user_profile
+ @string/qs_tile_brightness
+ @string/qs_tile_settings
+ @string/qs_tile_wifi
+ @string/qs_tile_data_usage
+ @string/qs_tile_autorotation
+ @string/qs_tile_battery
+ @string/qs_tile_airplane_mode
+ @string/qs_tile_bluetooth
+ @string/qs_tile_gps
+ @string/qs_tile_gps_alt
+ @string/qs_tile_ringer_mode
+ @string/qs_tile_volume
+ @string/qs_tile_network_mode
+ @string/qs_tile_sync
+ @string/qs_tile_wifi_ap
+ @string/qs_tile_torch
+ @string/qs_tile_sleep
+ @string/qs_tile_stay_awake
+ @string/qs_tile_quickrecord
+ @string/qs_tile_quickapp
+ @string/qs_tile_expanded_desktop
+ @string/qs_tile_screenshot
+ @string/qs_tile_gravitybox
+
+
+
+ user_textview
+ brightness_textview
+ settings
+ wifi_textview
+ rssi_textview
+ auto_rotate_textview
+ battery_textview
+ airplane_mode_textview
+ bluetooth_textview
+ gps_textview
+ gps_tileview
+ ringer_mode_tileview
+ volume_tileviewnetwork_mode_tileviewsync_tileviewwifi_ap_tileviewtorch_tileviewsleep_tileview
+ stay_awake_tileviewquickrecord_tileviewquickapp_tileview
+ expanded_tileview
+ screenshot_tileviewgravitybox_tileview
+
+ @string/qs_tile_wifi
+ @string/qs_tile_bluetooth
+ @string/qs_tile_data_usage
+ @string/qs_tile_airplane_mode
+
+
+
+ wifi_textview
+ bluetooth_textview
+ rssi_textview
+ airplane_mode_textview
+
+
@string/lockscreen_bg_default@string/lockscreen_bg_color
@@ -162,6 +273,15 @@
@string/hwkey_action_prev_app@string/hwkey_action_kill@string/hwkey_action_sleep
+ @string/hwkey_action_recent_apps
+ @string/hwkey_action_app_launcher
+ @string/hwkey_action_custom_app
+ @string/hwkey_action_custom_app2
+ @string/hwkey_action_menu
+ @string/hwkey_action_home
+ @string/hwkey_action_back
+ @string/hwkey_action_expanded_desktop
+ @string/hwkey_action_torch
@@ -171,6 +291,15 @@
345
+ 6
+ 12
+ 7
+ 8
+ 9
+ 13
+ 14
+ 10
+ 11
@@ -377,4 +506,190 @@
85
+
+ @string/expanded_desktop_disabled
+ @string/expanded_desktop_statusbar
+ @string/expanded_desktop_navbar
+ @string/expanded_desktop_both
+
+
+
+ 0
+ 1
+ 2
+ 3
+
+
+
+ @string/unicode_stripping_leave_intact
+ @string/unicode_stripping_non_encodable
+ @string/unicode_stripping_all
+
+
+
+ leave_intact
+ non_encodable
+ all
+
+
+
+ @string/nm_tile_mode1
+ @string/nm_tile_mode2
+ @string/nm_tile_mode3
+
+
+
+ 0
+ 1
+ 2
+
+
+
+ @string/sim_slot1
+ @string/sim_slot2
+
+
+
+ 0
+ 1
+
+
+
+ @string/pie_controls_disabled
+ @string/pie_controls_enabled_always
+ @string/pie_controls_enabled_expanded
+ @string/pie_controls_enabled_expanded_navbar
+
+
+
+ 0
+ 1
+ 2
+ 3
+
+
+
+ @string/call_vibration_connected
+ @string/call_vibration_disconnected
+ @string/call_vibration_waiting
+ @string/call_vibration_periodic
+
+
+
+ connected
+ disconnected
+ waiting
+ periodic
+
+
+
+ @string/clock_dow_disabled
+ @string/clock_dow_standard
+ @string/clock_dow_lowercase
+ @string/clock_dow_uppercase
+
+
+
+ 0
+ 1
+ 2
+ 3
+
+
+
+ @string/sbl_policy_default
+ @string/sbl_policy_unlocked
+ @string/sbl_policy_locked
+
+
+
+ 0
+ 1
+ 2
+
+
+
+ @string/dt_position_auto
+ @string/dt_position_left
+ @string/dt_position_right
+
+
+
+ 0
+ 1
+ 2
+
+
+
+ @string/dt_size_normal
+ @string/dt_size_smaller
+ @string/dt_size_smallest
+
+
+
+ 14
+ 12
+ 10
+
+
+
+ @string/rambar_off
+ @string/rambar_top
+ @string/rambar_bottom
+
+
+
+ 0
+ 48
+ 80
+
+
+
+ @string/signal_color_mode_gb
+ @string/signal_color_mode_stock
+ @string/signal_color_mode_disabled
+
+
+
+ 0
+ 1
+ 2
+
+
+
+ @string/pie_custom_key_off
+ @string/pie_custom_key_search
+ @string/pie_custom_key_app_launcher
+
+
+
+ 0
+ 1
+ 2
+
+
+
+ @string/tm_mode_disabled
+ @string/tm_mode_statusbar
+ @string/tm_mode_navbar
+ @string/tm_mode_full
+
+
+
+ 0
+ 1
+ 2
+ 3
+
+
+
+ @string/icon_style_jb
+ @string/icon_style_kk
+
+
+
+ 0
+ 1
+
+
diff --git a/res/values/colors.xml b/res/values/colors.xml
index 8a2d808ad5..4bc88aa7c9 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -1,4 +1,19 @@
+
+
@@ -10,4 +25,13 @@
#dd0099cc@android:color/holo_blue_light#dd0099cc
+
+
+ @android:color/holo_blue_light
+
+
+ #e8ffffff
+ #40ffffff
+ #ff000000
+
diff --git a/res/values/config.xml b/res/values/config.xml
index 18fb1aba93..1f5ae1e690 100644
--- a/res/values/config.xml
+++ b/res/values/config.xml
@@ -1,6 +1,26 @@
+
+
- http://forum.xda-developers.com/showthread.php?t=2316070
- http://forum.xda-developers.com/showthread.php?t=1574401
- https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=9MZNBXYEN5S68&lc=SK&item_name=GravityBox¤cy_code=EUR&bn=PP%%2dDonationsBF%%3abtn_donateCC_LG\%2egif%%3aNonHosted
+ http://forum.xda-developers.com/showthread.php?t=2316070
+ http://forum.xda-developers.com/showthread.php?t=1574401
+ https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=9MZNBXYEN5S68&lc=SK&item_name=GravityBox¤cy_code=EUR&bn=PP%%2dDonationsBF%%3abtn_donateCC_LG\%2egif%%3aNonHosted
+
+
+ 5
+ 5
+
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index fb693c50b6..ed05c7c3c8 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -1,3 +1,18 @@
+
+
@@ -25,4 +40,14 @@
165dp85sp
+
+
+ 64dip
+
+ 128dip
+
+
+ 180dp
+ 320dp
+
diff --git a/res/values/integers.xml b/res/values/integers.xml
index 7ef51d203f..c52eec8fe1 100644
--- a/res/values/integers.xml
+++ b/res/values/integers.xml
@@ -1,4 +1,19 @@
+
+
0xff0000000xff00ff00
diff --git a/res/values/strings.xml b/res/values/strings.xml
index d45803de59..3c2abedda6 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -1,12 +1,29 @@
-
-
+
+
+
+
GravityBox
-
+
Battery indicator styleStock battery indicatorCircle batteryCircle battery with percentage
+ KitKat battery
+ KitKat battery with percentageBattery percent textNone
@@ -29,8 +46,9 @@
\"SIM not inserted\" notifications disabledAdvanced reboot menu
- Enables advanced reboot menu with option to reboot to recovery
- Recovery
+ Enables advanced reboot menu with options to reboot to recovery
+ Recovery
+ BootloaderVolume key cursor controlControls cursor using volume keys in text fields
@@ -72,6 +90,15 @@
RecordedLong Press To RecordTouch to stop recording
+ Disabled
+ Normal
+ Expanded
+ Stay awake on
+ Stay awake off
+ Wi-Fi
+ Wi-Fi off
+ Not connected
+ Turning on…Statusbar QuickSettings tiles
@@ -80,8 +107,10 @@
Airplane modeBattery statusWi-Fi
+ Wi-Fi (CM style)BluetoothGPS
+ GPS (CM style)Mobile dataNetwork modeData usage
@@ -96,6 +125,10 @@
SleepQuick RecordSettings
+ Volume
+ Expanded desktop
+ Stay awake
+ ScreenshotColor Picker
@@ -103,7 +136,7 @@
Statusbar background color
- Allows to set statusbar background color and transparency
+ Allows to set statusbar background colorFix speech settings
@@ -127,11 +160,12 @@
Xposed frameworkCoded by rovo89@XDA. Touch to visit official thread.Donate
- Donate to me if you think this app is worth it! Also consider donating to rovo89 for his excellent Xposed framework.
+ Touch to support development by donating via PayPal
- Your phone will reboot
- Your phone will reboot into recovery
+ Your %s will reboot.
+ Your %s will reboot into recovery.
+ Your %s will reboot into bootloader.CRT screen off effect
@@ -178,16 +212,15 @@
Minimum brightness levelAllows to set minimum brightness level. Applies to manual brightness setting. (requires reboot)
- Value from interval: 10 – 80Autobrightness levelsAllows to set ambient light levels and corresponding LCD backlight valuesLevelLux max
- Brightness (10 – 255)
+ Brightness (%d – 255)Specified number is not valid
- It is not recommended to set brightness below 10
+ It is not recommended to set brightness below %dBrightness cannot be greater than 255Values cannot be lower or equal to zeroValues on lower levels cannot be greater than values on higher levels
@@ -195,6 +228,7 @@
Values for %s setNew autobrightness configuration savedAutobrightness configuration was NOT saved
+ SetEnable lockscreen rotation
@@ -230,9 +264,9 @@
Hardware key actionsAllows to set custom actions on hardware keys
- Menu key long-press action
- Menu key double-tap action
- Back key long-press action
+ Menu key long-press action
+ Menu key double-tap action
+ Back key long-press actionDefaultSearchVoice search
@@ -243,7 +277,7 @@
Applies to Kill foreground app action. Defines for how long key must be pressed to trigger killDouble-tap speedApplies to Menu key double-tap action. Defines how fast key must be tapped to trigger double-tap
- Application killed
+ %s killedThere\'s nothing to killNo previous app found
@@ -258,10 +292,6 @@
Mute ringerDismiss call
-
- Disable vibrate on call connect
- Disables vibration that is triggered when call is connected
-
Soft reboot
@@ -280,6 +310,10 @@
Expandable volume panelEnables expandable volume panel with ability to set volumes for different streams
+
+ Fully expandable volume panel
+ Allows the volume panel to take up all the space provided
+
Link ringtone & notifications volumesWhen disabled, volumes for ringtone and notifications can be set independently
@@ -349,7 +383,6 @@
Pie controlsEnable pie controls
- Show search buttonNavigation key sizeTrigger positionsLeft screen border
@@ -363,7 +396,7 @@
Disable button backlightAlways on while screen is onButton backlight notifications
- EXPERIMENTAL! Lights up button backlight when there is a notification and screen is off. Use in case your device lacks notification LED.
+ EXPERIMENTAL! Blinks button backlight when there is a notification. Use in case your device lacks notification LED. May consume battery.Hide navigation bar
@@ -373,9 +406,9 @@
Dithered Holo backgroundReplaces standard Holo background with dithered one to suppress color banding (requires reboot)
-
- Disable hardware keys
- Disables MENU, BACK, HOME while Pie Controls are enabled. HW keys actions will still work. (for devices having HW keys)
+
+ Disable navigation keys
+ Disables single-tap on keys while Pie Controls are enabledUse Holo Dark theme
@@ -411,5 +444,374 @@
GPS onGPS off
-
-
+ GPS locked
+
+
+ Always show menu button
+
+
+ Ringer mode
+
+
+ Clock settings
+
+
+ Hide AM/PM
+
+
+ Hide clock
+
+
+ Trigger size
+
+
+ Transparency management
+ Manages transparency for statusbar and navigation bar
+ Statusbar for launcher
+ Statusbar for lockscreen
+ Navbar for launcher
+ Navbar for lockscreen
+
+
+ Hide alarm icon
+
+
+ Screen dim level
+ Amount of brightness for dim state - when screen is about to be turned off (requires reboot)
+
+
+ phone
+ tablet
+
+
+ Brightness settings
+ Enable brightness settings
+ Use only in case your device supports standard Android brightness features. Keep disabled if you experience brightness related issues. (requires reboot)
+
+
+ Show recent apps
+
+
+ Home key long-press action
+
+
+ Launch custom app 1
+ Set custom app 1
+ Launch custom app 2
+ Set custom app 2
+ No custom app assigned!
+ Custom app not found!
+
+
+ Notification panel clock app
+ Links notification panel clock to a specified app instead of Date&Time settings
+
+
+ Waiting for response from GravityBox system framework…
+ GravityBox system framework not responding. Exiting.
+
+
+ National data roaming
+ Connect to data services when nationally roaming
+
+
+ Expanded desktop mode
+ Disabled
+ Hide statusbar
+ Hide navigation bar
+ Hide both
+ Expanded desktop
+ Expanded desktop is ON
+ Expanded desktop is OFF
+
+
+ Screenshot
+
+
+ Show menu
+
+
+ Toggle expanded desktop
+ Expanded desktop mode is disabled!
+
+
+ Navigation bar tweaks
+ Contains various navigation bar related tweaks
+ Override system defaults
+ Master switch for navigation bar tweaks (requires reboot)
+ Enable navigation bar
+ Requires reboot
+ Navigation bar height
+ Applies to horizontal navigation bar and portrait orientation
+ Applies to horizontal navigation bar and landscape orientation
+ Navigation bar width
+ Applies to vertical navigation bar
+ Always show menu key
+
+
+ Screenshot in power menu
+
+
+ Unlock ring settings
+ Enable unlock ring targets
+ Master switch for unlock ring targets
+ Target application %s
+ Unlock ring vertical offset
+ Unlock ring horizontal offset
+
+
+ Enable brightness control
+ Adjusts brightness by sliding over statusbar (requires automatic brightness to be disabled)
+
+
+ Telephony
+ Messaging
+ Mobile data
+
+
+ Strip unicode
+ Converts unicode characters to normal characters. Decreases overall message size.
+ Leave characters intact
+ Strip non-encodable characters
+ Strip all unicode characters
+
+
+ Disable slow 2G data warning
+ Disables warning about slow data speed when turning on mobile data in QuickSettings for SIM in 2G mode
+
+
+ Follow stock battery color
+ Makes statusbar clock, percentage and circle battery use the color of stock battery icon. Applies when icon coloring is off.
+
+
+ Network mode tile mode
+ 2G/2G+3G/3G/(LTE)
+ 2G/2G+3G/(LTE)
+ 2G/3G/(LTE)
+
+
+ Allow all rotations
+
+
+ Override default tile behaviour
+ Overrides touch/long-touch behaviour for selected tiles (requires reboot)
+
+
+ Network mode tile SIM slot
+ Defines SIM slot to which network mode tile applies (%s)
+ SIM slot 1
+ SIM slot 2
+
+
+ Never
+ Always
+ When expanded desktop on
+ When expanded desktop hides navigation bar
+
+
+ Leave stock battery icon intact
+ Use in case stock battery icon was replaced with 3rd party battery mod
+
+
+ Unplug turns on screen
+ If enabled, the screen will come on when you plug/unplug usb/power/whatever (requires reboot)
+
+
+ Mute volume adjust sound
+ Disables sound played when adjusting volume using volume keys
+
+
+ Call vibrations
+ On call connected
+ On call disconnected
+ On call waiting
+ Every 45th second during outgoing call
+
+
+ Tile reordering
+ Allows reordering of QuickSettings tiles
+
+
+ Ongoing notification blocker
+ Allows blocking of selected ongoing notifications
+ The list will get populated automatically for every ongoing notification that occurs.
+ You can then decide whether to block ongoing notification next time it occurs. Use with caution.
+ Reset list
+ Are you sure you want to reset list?
+ This will clear current list and unblock all ongoing notifications previously blocked.
+ (list is empty)
+
+
+ Quick unlock
+ Unlock automatically when the correct PIN/password is entered
+
+
+ Disabled
+ Standard
+ Lowercase
+ Uppercase
+
+
+ Statusbar lock policy
+ Default
+ Unlocked if keyguard insecured
+ Locked
+
+
+ Data traffic monitor
+ Enable monitoring
+ Shows data traffic monitor automatically whenever data connection is active
+ Position
+ Auto (center or right depending on clock position)
+ Left
+ Right
+ Size
+ Normal
+ Smaller
+ Smallest
+ B
+ KB
+ MB
+ s
+
+
+ Disable widget limit
+ Allows unlimited number of lockscreen widgets
+
+
+
+ %1$s free
+
+ %1$s used
+ Recent tasks RAM bar
+ Off
+ Top
+ Bottom
+
+
+ Recents key single-tap action
+ Recents key long-press action
+
+
+ Show battery arc
+ Shows battery status arc drawn around unlock ring handle
+
+
+ Toggle torch
+
+
+ Torch on home key long-press
+ Toggles torch on/off when device locked. Screen has to be turned on if device lacks native wake by home key support.
+
+
+ Expand automatically
+
+
+ Menu key
+ Home key
+ Back key
+ Recents key
+ Volume keys
+ Other settings
+ Long-press action
+ Single-tap action
+ Double-tap action
+
+
+ Disable double-tap
+
+
+ Signal color mode
+ Use GravityBox icons (with signal level support)
+ Use stock icons (without signal level support)
+ Do not apply color
+
+
+ Application launcher
+ Dialog allowing to define up to 8 apps which can be assigned as HW Key Action or used as additional navigation bar key
+ Application slot %d
+ No apps assigned. Use GravityBox / Application launcher menu to assign apps.
+
+
+ Show app launcher key
+
+
+ Show application launcher
+
+
+ Show custom key
+ Disabled
+ Search
+ Application launcher
+
+
+ Pie colors
+ Background color
+ Foreground color
+ Outline color
+ Key selected color
+ Text color
+ Reset colors
+
+
+ Enable unknown caller photo
+ Set unknown caller photo
+ Photo changed
+ Photo not changed
+
+
+ Your screen might not support values lower than 20. If your screen doesn\'t light up,
+ hold Volume+ key for at least 7 seconds to reset brightness and then adjust minimum brightness to use higher values.
+
+
+ General
+ Navigation keys
+ Colors
+ Dimensions
+
+
+ Enable navbar colors
+ May require reboot after disabling
+ Navigation key color
+ Navigation key glow color
+ Navigation bar background color
+
+
+ Disable lockscreen shade
+ Removes dark tint from lockscreen
+
+
+ Transparency manager mode
+ Requires reboot
+ Disabled
+ Statusbar
+ Navigation bar
+ Both
+
+
+ Secondary signal color
+ Overrides stock orange signal icon
+ Secondary data activity color
+ Sets color for secondary data activity indicators
+
+
+ Status icon style
+ Applies to status icons like silent, vibrate, alarm, etc.
+ JellyBean
+ KitKat
+
+
+ Back key double-tap action
+
+
+ Go home
+ Go back
+
+
+ Tile style
+ Applies only to tiles introduced by GravityBox (does not affect stock tiles)
+
+
+ Adjust bottom margin
+
+
diff --git a/res/values/styles.xml b/res/values/styles.xml
index f2cf5d6443..a896c8d5eb 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -1,3 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -31,18 +103,36 @@
android:summary="@string/pref_lockscreen_bg_image_summary"
android:order="3" />
+
+
+
+
+
+
+
+
+
+
@@ -69,10 +172,16 @@
android:title="@string/pref_cat_statusbar_qs_title">
-
+
+
+
+
+
+
+
@@ -112,6 +237,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+ android:key="pref_pie_control_menu"
+ android:title="@string/pie_control_menu_title"
+ android:defaultValue="false" />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
-
+
-
+
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -429,7 +983,18 @@
android:key="pref_volume_panel_expandable"
android:title="@string/pref_volume_panel_expandable_title"
android:summary="@string/pref_volume_panel_expandable_summary"
- android:defaultValue="true" />
+ android:defaultValue="false" />
+
+
+
+
+
+
-
+
+
+
-
+
-
+
-
+
-
+
+
+
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -509,11 +1167,28 @@
android:entryValues="@array/recents_clear_values"
android:defaultValue="53" />
+
+
+
+ mAppSlots;
+ private View mAppView;
+
+ private static void log(String message) {
+ XposedBridge.log(TAG + ": " + message);
+ }
+
+ private Runnable mDismissAppDialogRunnable = new Runnable() {
+ @Override
+ public void run() {
+ dismissDialog();
+ }
+ };
+
+ private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ if (DEBUG) log("Broadcast received: " + intent.toString());
+
+ if (intent.getAction().equals(GravityBoxSettings.ACTION_PREF_APP_LAUNCHER_CHANGED)) {
+ if (intent.hasExtra(GravityBoxSettings.EXTRA_APP_LAUNCHER_SLOT) &&
+ intent.hasExtra(GravityBoxSettings.EXTRA_APP_LAUNCHER_APP)) {
+ int slot = intent.getIntExtra(GravityBoxSettings.EXTRA_APP_LAUNCHER_SLOT, -1);
+ String app = intent.getStringExtra(GravityBoxSettings.EXTRA_APP_LAUNCHER_APP);
+ if (DEBUG) log("appSlot=" + slot + "; app=" + app);
+ updateAppSlot(slot, app);
+ }
+ }
+ }
+ };
+
+ public AppLauncher(Context context, XSharedPreferences prefs) {
+ mContext = context;
+ mResources = mContext.getResources();
+ try {
+ mGbContext = mContext.createPackageContext(
+ GravityBox.PACKAGE_NAME, Context.CONTEXT_IGNORE_SECURITY);
+ } catch (NameNotFoundException e) {
+ log("Error creating GB context: " + e.getMessage());
+ }
+ mHandler = new Handler();
+ mPm = mContext.getPackageManager();
+
+ mAppSlots = new ArrayList();
+ mAppSlots.add(new AppInfo(R.id.quickapp1));
+ mAppSlots.add(new AppInfo(R.id.quickapp2));
+ mAppSlots.add(new AppInfo(R.id.quickapp3));
+ mAppSlots.add(new AppInfo(R.id.quickapp4));
+ mAppSlots.add(new AppInfo(R.id.quickapp5));
+ mAppSlots.add(new AppInfo(R.id.quickapp6));
+ mAppSlots.add(new AppInfo(R.id.quickapp7));
+ mAppSlots.add(new AppInfo(R.id.quickapp8));
+
+ for (int i = 0; i < GravityBoxSettings.PREF_KEY_APP_LAUNCHER_SLOT.size(); i++) {
+ updateAppSlot(i, prefs.getString(
+ GravityBoxSettings.PREF_KEY_APP_LAUNCHER_SLOT.get(i), null));
+ }
+
+ IntentFilter intentFilter = new IntentFilter();
+ intentFilter.addAction(GravityBoxSettings.ACTION_PREF_APP_LAUNCHER_CHANGED);
+ mContext.registerReceiver(mBroadcastReceiver, intentFilter);
+ }
+
+ public boolean dismissDialog() {
+ boolean dismissed = false;
+ mHandler.removeCallbacks(mDismissAppDialogRunnable);
+ if (mDialog != null && mDialog.isShowing()) {
+ mDialog.dismiss();
+ dismissed = true;
+ }
+ return dismissed;
+ }
+
+ public void showDialog() {
+ try {
+ if (dismissDialog()) {
+ return;
+ }
+
+ if (mDialog == null) {
+ LayoutInflater inflater = LayoutInflater.from(mGbContext);
+ mAppView = inflater.inflate(R.layout.navbar_app_dialog, null);
+ mDialog = new Dialog(mContext);
+ mDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
+ mDialog.setContentView(mAppView);
+ mDialog.setCanceledOnTouchOutside(true);
+ mDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_STATUS_BAR_PANEL);
+ int pf = XposedHelpers.getIntField(mDialog.getWindow().getAttributes(), "privateFlags");
+ pf |= 0x00000010;
+ XposedHelpers.setIntField(mDialog.getWindow().getAttributes(), "privateFlags", pf);
+ mDialog.getWindow().getAttributes().gravity = Gravity.BOTTOM;
+ }
+
+ View appRow1 = mAppView.findViewById(R.id.appRow1);
+ View appRow2 = mAppView.findViewById(R.id.appRow2);
+ View separator = mAppView.findViewById(R.id.separator);
+ int appCount = 0;
+ boolean appRow1Visible = false;
+ boolean appRow2Visible = false;
+ TextView lastVisible = null;
+ for (AppInfo ai : mAppSlots) {
+ TextView tv = (TextView) mAppView.findViewById(ai.getResId());
+ if (ai.getValue() == null) {
+ tv.setVisibility(View.GONE);
+ continue;
+ }
+
+ tv.setText(ai.getAppName());
+ tv.setTextSize(1, 10);
+ tv.setMaxLines(2);
+ tv.setEllipsize(TruncateAt.END);
+ tv.setCompoundDrawablesWithIntrinsicBounds(null, ai.getAppIcon(), null, null);
+ tv.setClickable(true);
+ tv.setOnClickListener(mAppOnClick);
+ tv.setVisibility(View.VISIBLE);
+ lastVisible = tv;
+
+ appRow1Visible |= ai.getResId() == R.id.quickapp1 || ai.getResId() == R.id.quickapp2 ||
+ ai.getResId() == R.id.quickapp3 || ai.getResId() == R.id.quickapp4;
+ appRow2Visible |= ai.getResId() == R.id.quickapp5 || ai.getResId() == R.id.quickapp6 ||
+ ai.getResId() == R.id.quickapp7 || ai.getResId() == R.id.quickapp8;
+
+ appCount++;
+ }
+
+ if (appCount == 0) {
+ Toast.makeText(mContext, mGbContext.getString(R.string.app_launcher_no_apps),
+ Toast.LENGTH_LONG).show();
+ } else if (appCount == 1) {
+ mAppOnClick.onClick(lastVisible);
+ } else {
+ appRow1.setVisibility(appRow1Visible ? View.VISIBLE : View.GONE);
+ appRow2.setVisibility(appRow2Visible ? View.VISIBLE : View.GONE);
+ separator.setVisibility(appRow1Visible && appRow2Visible ?
+ View.VISIBLE : View.GONE);
+ mDialog.show();
+ mHandler.postDelayed(mDismissAppDialogRunnable, 4000);
+ }
+ } catch (Throwable t) {
+ log("Error opening app launcher dialog: " + t.getMessage());
+ }
+ }
+
+ private View.OnClickListener mAppOnClick = new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ dismissDialog();
+
+ AppInfo aiProcessing = null;
+ try {
+ for(AppInfo ai : mAppSlots) {
+ aiProcessing = ai;
+ if (v.getId() == ai.getResId()) {
+ startActivity(v.getContext(), ai.getIntent());
+ return;
+ }
+ }
+ aiProcessing = null;
+ } catch (Exception e) {
+ log("Unable to start activity: " + e.getMessage());
+ if (aiProcessing != null) {
+ aiProcessing.initAppInfo(null);
+ }
+ }
+ }
+ };
+
+ private void startActivity(Context context, Intent intent) {
+ intent.setAction(Intent.ACTION_MAIN);
+ intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
+ context.startActivity(intent);
+ }
+
+ private void updateAppSlot(int slot, String value) {
+ AppInfo ai = mAppSlots.get(slot);
+ if (ai.getValue() == null || !ai.getValue().equals(value)) {
+ ai.initAppInfo(value);
+ }
+ }
+
+ private final class AppInfo {
+ private String mPackageName;
+ private String mClassName;
+ private String mAppName;
+ private Drawable mAppIcon;
+ private String mValue;
+ private int mResId;
+
+ public AppInfo(int resId) {
+ mResId = resId;
+ }
+
+ public int getResId() {
+ return mResId;
+ }
+
+ public String getAppName() {
+ return mAppName;
+ }
+
+ public Drawable getAppIcon() {
+ return (mAppIcon == null ?
+ mResources.getDrawable(android.R.drawable.ic_menu_help) : mAppIcon);
+ }
+
+ public String getValue() {
+ return mValue;
+ }
+
+ public Intent getIntent() {
+ if (mPackageName == null || mClassName == null) return null;
+
+ Intent i = new Intent();
+ i.setClassName(mPackageName, mClassName);
+ return i;
+ }
+
+ private void reset() {
+ mValue = mPackageName = mClassName = mAppName = null;
+ mAppIcon = null;
+ }
+
+ public void initAppInfo(String value) {
+ mValue = value;
+ if (mValue == null) {
+ reset();
+ return;
+ }
+
+ try {
+ String[] splitValue = value.split(SEPARATOR);
+ mPackageName = splitValue[0];
+ mClassName = splitValue[1];
+ ComponentName cn = new ComponentName(mPackageName, mClassName);
+ ActivityInfo ai = mPm.getActivityInfo(cn, 0);
+ mAppName = ai.loadLabel(mPm).toString();
+ Bitmap appIcon = ((BitmapDrawable)ai.loadIcon(mPm)).getBitmap();
+ int sizePx = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 40,
+ mResources.getDisplayMetrics());
+ Bitmap scaledIcon = Bitmap.createScaledBitmap(appIcon, sizePx, sizePx, true);
+ mAppIcon = new BitmapDrawable(mResources, scaledIcon);
+ if (DEBUG) log("AppInfo initialized for: " + getAppName());
+ } catch (NameNotFoundException e) {
+ log("App not found: " + ((mPackageName == null) ? "NULL" : mPackageName.toString()));
+ reset();
+ } catch (Exception e) {
+ log("Unexpected error: " + e.getMessage());
+ reset();
+ }
+ }
+ }
+}
diff --git a/src/com/ceco/gm2/gravitybox/BackgroundAlphaColorDrawable.java b/src/com/ceco/gm2/gravitybox/BackgroundAlphaColorDrawable.java
new file mode 100644
index 0000000000..08a313f2f9
--- /dev/null
+++ b/src/com/ceco/gm2/gravitybox/BackgroundAlphaColorDrawable.java
@@ -0,0 +1,106 @@
+/*
+ * Copyright (C) 2013 AOKP Project
+ * Copyright (C) 2013 Peter Gregus for GravityBox Project (C3C076@xda)
+ * 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.ceco.gm2.gravitybox;
+
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.ColorFilter;
+import android.graphics.PixelFormat;
+import android.graphics.PorterDuff.Mode;
+import android.graphics.drawable.ColorDrawable;
+
+public class BackgroundAlphaColorDrawable extends ColorDrawable {
+ int mBgColor;
+ int mAlpha = 255;
+ int mComputedDrawColor = 0;
+
+ public BackgroundAlphaColorDrawable(int bgColor) {
+ setBgColor(mBgColor = bgColor);
+ updateColor();
+ }
+
+ public void setBgColor(int color) {
+ mBgColor = color;
+ updateColor();
+ }
+
+ @Override
+ public void setColor(int color) {
+ mComputedDrawColor = mBgColor = color;
+ invalidateSelf();
+ }
+
+ @Override
+ public int getColor() {
+ return mComputedDrawColor;
+ }
+
+ @Override
+ public void setAlpha(int alpha) {
+ if (alpha > 255) {
+ alpha = 255;
+ } else if (alpha < 0) {
+ alpha = 0;
+ }
+ mAlpha = alpha;
+ updateColor();
+ }
+
+ public int getBgColor() {
+ return mBgColor;
+ }
+
+ @Override
+ public void draw(Canvas canvas) {
+ canvas.drawColor(mComputedDrawColor, Mode.SRC);
+ }
+
+ private void updateColor() {
+ mComputedDrawColor = applyAlphaToColor(mBgColor, mAlpha);
+ invalidateSelf();
+ }
+
+ @Override
+ public int getAlpha() {
+ return mAlpha;
+ }
+
+ @Override
+ public void setColorFilter(ColorFilter cf) {
+ }
+
+ @Override
+ public int getOpacity() {
+ return PixelFormat.TRANSLUCENT;
+ }
+
+ public static int floatAlphaToInt(float alpha) {
+ return Math.round(alpha * 255);
+ }
+
+ public static int applyAlphaToColor(int color, float alpha) {
+ int a = floatAlphaToInt(alpha);
+ return applyAlphaToColor(color, a);
+ }
+
+ public static int applyAlphaToColor(int color, int alpha) {
+ int r = Color.red(color);
+ int g = Color.green(color);
+ int b = Color.blue(color);
+ return Color.argb(alpha, r, g, b);
+ }
+}
diff --git a/src/com/ceco/gm2/gravitybox/BroadcastSubReceiver.java b/src/com/ceco/gm2/gravitybox/BroadcastSubReceiver.java
new file mode 100644
index 0000000000..cb986cec00
--- /dev/null
+++ b/src/com/ceco/gm2/gravitybox/BroadcastSubReceiver.java
@@ -0,0 +1,8 @@
+package com.ceco.gm2.gravitybox;
+
+import android.content.Context;
+import android.content.Intent;
+
+public interface BroadcastSubReceiver {
+ void onBroadcastReceived(Context context, Intent intent);
+}
diff --git a/src/com/ceco/gm2/gravitybox/CmCircleBattery.java b/src/com/ceco/gm2/gravitybox/CmCircleBattery.java
index dba5d7ebab..8031e46bfc 100644
--- a/src/com/ceco/gm2/gravitybox/CmCircleBattery.java
+++ b/src/com/ceco/gm2/gravitybox/CmCircleBattery.java
@@ -1,6 +1,6 @@
/*
* Copyright (C) 2012 Sven Dawitz for the CyanogenMod Project
- * Copyright (C) 2013 Peter Gregus for GravityBox Project
+ * Copyright (C) 2013 Peter Gregus for GravityBox Project (C3C076@xda)
* 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
@@ -16,6 +16,10 @@
package com.ceco.gm2.gravitybox;
+import com.ceco.gm2.gravitybox.StatusBarIconManager.ColorInfo;
+import com.ceco.gm2.gravitybox.StatusBarIconManager.IconManagerListener;
+
+import de.robv.android.xposed.XposedBridge;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
@@ -30,12 +34,18 @@
import android.graphics.Rect;
import android.graphics.RectF;
import android.os.BatteryManager;
+import android.os.Build;
import android.os.Handler;
import android.util.AttributeSet;
+import android.util.TypedValue;
import android.view.ViewGroup.LayoutParams;
import android.widget.ImageView;
-public class CmCircleBattery extends ImageView {
+public class CmCircleBattery extends ImageView implements IconManagerListener {
+ private static final String TAG = "GB:CircleBattery";
+ private static final String PACKAGE_NAME = "com.android.systemui";
+ private static final boolean DEBUG = false;
+
private Handler mHandler;
private Context mContext;
private BatteryReceiver mBatteryReceiver = null;
@@ -66,6 +76,10 @@ public class CmCircleBattery extends ImageView {
private Paint mPaintSystem;
private Paint mPaintRed;
+ private static void log(String message) {
+ XposedBridge.log(TAG + ": " + message);
+ }
+
// runnable to invalidate view via mHandler.postDelayed() call
private final Runnable mInvalidate = new Runnable() {
public void run() {
@@ -158,8 +172,9 @@ public CmCircleBattery(Context context, AttributeSet attrs, int defStyle) {
mPaintSystem = new Paint(mPaintFont);
mPaintRed = new Paint(mPaintFont);
- mPaintFont.setColor(res.getColor(android.R.color.holo_blue_dark));
- mPaintSystem.setColor(res.getColor(android.R.color.holo_blue_dark));
+ mPaintFont.setColor(Build.VERSION.SDK_INT > 18 ? Color.WHITE :
+ res.getColor(android.R.color.holo_blue_dark));
+ mPaintSystem.setColor(mPaintFont.getColor());
// could not find the darker definition anywhere in resources
// do not want to use static 0x404040 color value. would break theming.
mPaintGray.setColor(res.getColor(android.R.color.darker_gray));
@@ -327,18 +342,29 @@ private void initSizeBasedStuff() {
* statusbar for all resolutions
*/
private void initSizeMeasureIconHeight() {
- int wifiIconId =
- getResources().getIdentifier("stat_sys_wifi_signal_4_fully", "drawable", "com.android.systemui");
- final Bitmap measure = BitmapFactory.decodeResource(getResources(), wifiIconId);
- final int x = measure.getWidth() / 2;
-
- mCircleSize = 2;
- for (int y = 0; y < measure.getHeight(); y++) {
- int alpha = Color.alpha(measure.getPixel(x, y));
- if (alpha > 5) {
- mCircleSize++;
+ final Resources res = getResources();
+ final int minSize = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
+ 15, res.getDisplayMetrics());
+ try {
+ final int batteryIconId =
+ res.getIdentifier("stat_sys_battery_100", "drawable", PACKAGE_NAME);
+ final Bitmap measure = BitmapFactory.decodeResource(res, batteryIconId);
+ final int x = measure.getWidth() / 2;
+ mCircleSize = 0;
+ for (int y = 0; y < measure.getHeight(); y++) {
+ int alpha = Color.alpha(measure.getPixel(x, y));
+ if (alpha > 5) {
+ mCircleSize++;
+ }
+ }
+ if (mCircleSize < minSize) {
+ mCircleSize = minSize;
}
+ } catch (Throwable t) {
+ log("Error determining Circle Battery size from battery icon: " + t.getMessage());
+ mCircleSize = minSize;
}
+ if (DEBUG) log("mCircleSize = " + mCircleSize + "px");
}
public void setColor(int color) {
@@ -346,4 +372,23 @@ public void setColor(int color) {
mPaintFont.setColor(color);
invalidate();
}
+
+ public void setLowProfile(boolean lightsOut) {
+ final int alpha = lightsOut ? 127 : 255;
+ mPaintSystem.setAlpha(alpha);
+ mPaintGray.setAlpha(alpha);
+ mPaintFont.setAlpha(alpha);
+ mPaintRed.setAlpha(alpha);
+ invalidate();
+ }
+
+ @Override
+ public void onIconManagerStatusChanged(int flags, ColorInfo colorInfo) {
+ if ((flags & StatusBarIconManager.FLAG_ICON_COLOR_CHANGED) != 0) {
+ setColor(colorInfo.coloringEnabled ?
+ colorInfo.iconColor[0] : colorInfo.defaultIconColor);
+ } else if ((flags & StatusBarIconManager.FLAG_LOW_PROFILE_CHANGED) != 0) {
+ setLowProfile(colorInfo.lowProfile);
+ }
+ }
}
diff --git a/src/com/ceco/gm2/gravitybox/ConnectivityServiceWrapper.java b/src/com/ceco/gm2/gravitybox/ConnectivityServiceWrapper.java
new file mode 100644
index 0000000000..31c7bafbcd
--- /dev/null
+++ b/src/com/ceco/gm2/gravitybox/ConnectivityServiceWrapper.java
@@ -0,0 +1,94 @@
+/*
+ * Copyright (C) 2013 Peter Gregus for GravityBox Project (C3C076@xda)
+ * 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.ceco.gm2.gravitybox;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import de.robv.android.xposed.XC_MethodHook;
+import de.robv.android.xposed.XposedBridge;
+import de.robv.android.xposed.XposedHelpers;
+
+public class ConnectivityServiceWrapper {
+ private static final String TAG = "GB:ConnectivityServiceWrapper";
+ private static final boolean DEBUG = false;
+
+ private static final String CLASS_CONNECTIVITY_SERVICE = "com.android.server.ConnectivityService";
+
+ public static final String ACTION_SET_MOBILE_DATA_ENABLED =
+ "gravitybox.intent.action.SET_MOBILE_DATA_ENABLED";
+ public static final String ACTION_XPERIA_MOBILE_DATA_TOGGLE =
+ "com.android.phone.intent.ACTION_DATA_TRAFFIC_SWITCH";
+ public static final String EXTRA_ENABLED = "enabled";
+
+ private static Object mConnectivityService;
+
+ private static void log(String message) {
+ XposedBridge.log(TAG + ": " + message);
+ }
+
+ private static BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ if (DEBUG) log("Broadcast received: " + intent.toString());
+
+ if (intent.getAction().equals(ACTION_SET_MOBILE_DATA_ENABLED)) {
+ final boolean enabled = intent.getBooleanExtra(EXTRA_ENABLED, false);
+ setMobileDataEnabled(enabled);
+ }
+ }
+ };
+
+ public static void initZygote() {
+ try {
+ final Class> connServiceClass =
+ XposedHelpers.findClass(CLASS_CONNECTIVITY_SERVICE, null);
+
+ XposedBridge.hookAllConstructors(connServiceClass, new XC_MethodHook() {
+ @Override
+ protected void afterHookedMethod(final MethodHookParam param) throws Throwable {
+ if (DEBUG) log("ConnectivityService constructed.");
+ mConnectivityService = param.thisObject;
+
+ Context context = (Context) XposedHelpers.getObjectField(
+ param.thisObject, "mContext");
+ if (context == null && param.args.length != 0) {
+ context = (Context) param.args[0];
+ }
+
+ if (context != null) {
+ IntentFilter intentFilter = new IntentFilter();
+ intentFilter.addAction(ACTION_SET_MOBILE_DATA_ENABLED);
+ context.registerReceiver(mBroadcastReceiver, intentFilter);
+ }
+ }
+ });
+ } catch (Throwable t) {
+ XposedBridge.log(t);
+ }
+ }
+
+ private static void setMobileDataEnabled(boolean enabled) {
+ if (mConnectivityService == null) return;
+ try {
+ XposedHelpers.callMethod(mConnectivityService, "setMobileDataEnabled", enabled);
+ if (DEBUG) log("setMobileDataEnabled called");
+ } catch (Throwable t) {
+ XposedBridge.log(t);
+ }
+ }
+}
diff --git a/src/com/ceco/gm2/gravitybox/FixCalendar.java b/src/com/ceco/gm2/gravitybox/FixCalendar.java
index 8e07e91b1a..60fa2775e7 100644
--- a/src/com/ceco/gm2/gravitybox/FixCalendar.java
+++ b/src/com/ceco/gm2/gravitybox/FixCalendar.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright (C) 2013 Peter Gregus for GravityBox Project (C3C076@xda)
+ * 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.ceco.gm2.gravitybox;
import android.content.Context;
@@ -9,7 +24,7 @@
import de.robv.android.xposed.XposedHelpers;
public class FixCalendar {
- public static final String TAG = "FixCalendar";
+ public static final String TAG = "GB:FixCalendar";
public static final String PACKAGE_NAME = "com.android.calendar";
private static final boolean DEBUG = false;
@@ -24,7 +39,7 @@ public class FixCalendar {
private static final String QRA_EXTRA_EVENT_ID = "eventId";
public static void init(final XSharedPreferences prefs, final ClassLoader classLoader) {
- XposedBridge.log(TAG + ": init");
+ if (DEBUG) XposedBridge.log(TAG + ": init");
try {
final Class> alertReceiverClass = XposedHelpers.findClass(CLASS_ALERT_RECEIVER, classLoader);
@@ -86,8 +101,8 @@ protected Object replaceHookedMethod(MethodHookParam param) throws Throwable {
});
- } catch (Exception e) {
- XposedBridge.log(e);
+ } catch (Throwable t) {
+ XposedBridge.log(t);
}
}
}
\ No newline at end of file
diff --git a/src/com/ceco/gm2/gravitybox/FixCallerIdMms.java b/src/com/ceco/gm2/gravitybox/FixCallerIdMms.java
index a30a62e47e..700d7db8e9 100644
--- a/src/com/ceco/gm2/gravitybox/FixCallerIdMms.java
+++ b/src/com/ceco/gm2/gravitybox/FixCallerIdMms.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright (C) 2013 Peter Gregus for GravityBox Project (C3C076@xda)
+ * 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.ceco.gm2.gravitybox;
import java.nio.CharBuffer;
@@ -10,7 +25,7 @@
public class FixCallerIdMms {
public static final String PACKAGE_NAME = "com.android.mms";
- public static final String TAG = "FixCallerIdMms";
+ public static final String TAG = "GB:FixCallerIdMms";
public static final String CLASS_CONTACTS_CACHE = "com.android.mms.data.Contact$ContactsCache";
private static final int STATIC_KEY_BUFFER_MAXIMUM_LENGTH = 5;
private static final boolean DEBUG = false;
@@ -68,8 +83,8 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable {
param.setResult(key);
}
});
- } catch (Exception e) {
- XposedBridge.log(e);
+ } catch (Throwable t) {
+ XposedBridge.log(t);
}
}
}
\ No newline at end of file
diff --git a/src/com/ceco/gm2/gravitybox/FixCallerIdPhone.java b/src/com/ceco/gm2/gravitybox/FixCallerIdPhone.java
index 62db0dbb15..846ea5b45e 100644
--- a/src/com/ceco/gm2/gravitybox/FixCallerIdPhone.java
+++ b/src/com/ceco/gm2/gravitybox/FixCallerIdPhone.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright (C) 2013 Peter Gregus for GravityBox Project (C3C076@xda)
+ * 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.ceco.gm2.gravitybox;
import de.robv.android.xposed.XC_MethodHook;
@@ -7,17 +22,17 @@
import de.robv.android.xposed.XposedHelpers;
public class FixCallerIdPhone {
- public static final String TAG = "FixCallerIdPhone";
+ public static final String TAG = "GB:FixCallerIdPhone";
public static final String CLASS_PHONE_NUMBER_UTILS = "android.telephony.PhoneNumberUtils";
private static final boolean DEBUG = false;
public static void initZygote(final XSharedPreferences prefs) {
- XposedBridge.log(TAG + ": initZygote");
+ if (DEBUG) XposedBridge.log(TAG + ": initZygote");
try {
final Class> numUtilsClass = XposedHelpers.findClass(CLASS_PHONE_NUMBER_UTILS, null);
- XposedBridge.log(TAG + ": replacing compareLoosely method");
+ if (DEBUG) XposedBridge.log(TAG + ": replacing compareLoosely method");
XposedHelpers.findAndHookMethod(numUtilsClass, "compareLoosely", String.class, String.class,
new XC_MethodReplacement() {
@Override
@@ -31,7 +46,7 @@ protected Object replaceHookedMethod(MethodHookParam param) throws Throwable {
}
});
- XposedBridge.log(TAG + ": hooking internalGetStrippedReversed method");
+ if (DEBUG) XposedBridge.log(TAG + ": hooking internalGetStrippedReversed method");
XposedHelpers.findAndHookMethod(numUtilsClass, "internalGetStrippedReversed", String.class, int.class,
new XC_MethodHook() {
@Override
@@ -43,8 +58,8 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
param.args[1] = PhoneNumberUtils.MIN_MATCH;
}
});
- } catch (Exception e) {
- XposedBridge.log(e);
+ } catch (Throwable t) {
+ XposedBridge.log(t);
}
}
}
\ No newline at end of file
diff --git a/src/com/ceco/gm2/gravitybox/FixDateTimeCrash.java b/src/com/ceco/gm2/gravitybox/FixDateTimeCrash.java
index 1adaa3d688..0e72cb70f4 100644
--- a/src/com/ceco/gm2/gravitybox/FixDateTimeCrash.java
+++ b/src/com/ceco/gm2/gravitybox/FixDateTimeCrash.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright (C) 2013 Peter Gregus for GravityBox Project (C3C076@xda)
+ * 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.ceco.gm2.gravitybox;
import java.util.Date;
@@ -9,12 +24,13 @@
import de.robv.android.xposed.XposedHelpers;
public class FixDateTimeCrash {
- private static final String TAG = "FixDateTimeCrash";
+ private static final String TAG = "GB:FixDateTimeCrash";
public static final String PACKAGE_NAME = "com.android.settings";
public static final String CLASS_DATETIME_SETTINGS = "com.android.settings.DateTimeSettings";
+ private static final boolean DEBUG = false;
public static void init (final XSharedPreferences prefs, final ClassLoader classLoader) {
- XposedBridge.log(TAG + ": init");
+ if (DEBUG) XposedBridge.log(TAG + ": init");
try {
Class> dtSettingsClass = XposedHelpers.findClass(CLASS_DATETIME_SETTINGS, classLoader);
@@ -26,7 +42,7 @@ public static void init (final XSharedPreferences prefs, final ClassLoader class
protected Object replaceHookedMethod(MethodHookParam param) throws Throwable {
// Similar to new SimpleDateFormat("'GMT'Z, zzzz").format(new Date()), but
// we want "GMT-03:00" rather than "GMT-0300".
- XposedBridge.log(TAG + ": running replaced getTimeZoneText() method");
+ if (DEBUG) XposedBridge.log(TAG + ": running replaced getTimeZoneText() method");
TimeZone tz = (TimeZone) param.args[0];
Date now = new Date();
return formatOffset(new StringBuilder(), tz, now).
@@ -34,8 +50,8 @@ protected Object replaceHookedMethod(MethodHookParam param) throws Throwable {
append(tz.getDisplayName(tz.inDaylightTime(now), TimeZone.LONG)).toString();
}
});
- } catch (Exception e) {
- XposedBridge.log(e);
+ } catch (Throwable t) {
+ XposedBridge.log(t);
}
}
diff --git a/src/com/ceco/gm2/gravitybox/FixDevOptions.java b/src/com/ceco/gm2/gravitybox/FixDevOptions.java
index 4e5ef1850c..a1f6ba2ead 100644
--- a/src/com/ceco/gm2/gravitybox/FixDevOptions.java
+++ b/src/com/ceco/gm2/gravitybox/FixDevOptions.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright (C) 2013 Peter Gregus for GravityBox Project (C3C076@xda)
+ * 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.ceco.gm2.gravitybox;
import java.util.ArrayList;
@@ -18,12 +33,12 @@
import android.preference.PreferenceScreen;
public class FixDevOptions {
- private static final String TAG = "FixDevOptions";
+ private static final String TAG = "GB:FixDevOptions";
public static final String PACKAGE_NAME = "com.android.settings";
private static final String CLASS_PREF_GROUP = "android.preference.PreferenceGroup";
private static final String CLASS_PREF_FRAGMENT = "android.preference.PreferenceFragment";
private static final String CLASS_DEV_SETTINGS = "com.android.settings.DevelopmentSettings";
-
+ private static final boolean DEBUG = false;
private static PreferenceScreen mScreen;
private static int mResId = 0;
@@ -45,20 +60,20 @@ public static void initZygote() {
final Class> pgClass = XposedHelpers.findClass(CLASS_PREF_GROUP, null);
final Class> pfClass = XposedHelpers.findClass(CLASS_PREF_FRAGMENT, null);
- log("hooking PreferenceFragment.addPreferencesFromResource method");
+ if (DEBUG) log("hooking PreferenceFragment.addPreferencesFromResource method");
XposedHelpers.findAndHookMethod(pfClass, "addPreferencesFromResource", int.class, new XC_MethodHook() {
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
if (mResId == 0) return;
if (mResId == (Integer)param.args[0]) {
- log("addPreferencesFromResource called from dev settings. Setting mScreen.");
+ if (DEBUG) log("addPreferencesFromResource called from dev settings. Setting mScreen.");
mScreen = ((PreferenceFragment) param.thisObject).getPreferenceScreen();
}
}
});
- log("hooking PreferenceGroup.removePreference method");
+ if (DEBUG) log("hooking PreferenceGroup.removePreference method");
XposedHelpers.findAndHookMethod(pgClass, "removePreference", Preference.class, new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
@@ -66,15 +81,15 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
if (pg != null && pg == mScreen) {
String prefKey = ((Preference)param.args[0]).getKey();
if (devOptKeys.contains(prefKey)) {
- log("ignoring removePreference called from developer options; key=" + prefKey);
+ if (DEBUG) log("ignoring removePreference called from developer options; key=" + prefKey);
param.setResult(false);
return;
}
}
}
});
- } catch (Exception e) {
- XposedBridge.log(e);
+ } catch (Throwable t) {
+ XposedBridge.log(t);
}
}
@@ -93,8 +108,8 @@ public static void initPackageResources(final XSharedPreferences prefs, final In
modRes.fwd(R.array.animator_duration_scale_entries));
resparam.res.setReplacement(PACKAGE_NAME, "array", "animator_duration_scale_values",
modRes.fwd(R.array.animator_duration_scale_values));
- } catch (Exception e) {
- XposedBridge.log(e);
+ } catch (Throwable t) {
+ XposedBridge.log(t);
}
}
@@ -102,18 +117,18 @@ public static void init(final XSharedPreferences prefs, final ClassLoader classL
try {
final Class> classDevSettings = XposedHelpers.findClass(CLASS_DEV_SETTINGS, classLoader);
- log("hooking DeveloperSettings.onCreate method");
+ if (DEBUG) log("hooking DeveloperSettings.onCreate method");
XposedHelpers.findAndHookMethod(classDevSettings, "onCreate", Bundle.class, new XC_MethodHook() {
@Override
protected void beforeHookedMethod(final MethodHookParam param) throws Throwable {
PreferenceFragment pf = (PreferenceFragment) param.thisObject;
mResId = pf.getResources().getIdentifier("development_prefs", "xml", PACKAGE_NAME);
- log("mResId=" + mResId);
+ if (DEBUG) log("mResId=" + mResId);
}
});
}
- catch (Exception e) {
- XposedBridge.log(e);
+ catch (Throwable t) {
+ XposedBridge.log(t);
}
}
}
\ No newline at end of file
diff --git a/src/com/ceco/gm2/gravitybox/FixMmsWakelock.java b/src/com/ceco/gm2/gravitybox/FixMmsWakelock.java
index ac1f885310..344686b62b 100644
--- a/src/com/ceco/gm2/gravitybox/FixMmsWakelock.java
+++ b/src/com/ceco/gm2/gravitybox/FixMmsWakelock.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright (C) 2013 Peter Gregus for GravityBox Project (C3C076@xda)
+ * 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.ceco.gm2.gravitybox;
import android.content.Context;
@@ -13,12 +28,13 @@
public class FixMmsWakelock {
public static final String PACKAGE_NAME = "com.android.mms";
- private static final String TAG = "FixMmsWakelock";
+ private static final String TAG = "GB:FixMmsWakelock";
private static final String CLASS_MMS_RECEIVER = "com.android.mms.transaction.MmsSystemEventReceiver";
private static final String CLASS_SMS_RECEIVER = "com.android.mms.transaction.SmsReceiver";
private static final String CLASS_CB_MNOTIF = "com.android.mms.transaction.CBMessagingNotification";
private static final String CLASS_MNOTIF = "com.android.mms.transaction.MessagingNotification";
private static final String CLASS_NOTIF_PROFILE = "com.android.mms.transaction.MessagingNotification$NotificationProfile";
+ private static final boolean DEBUG = false;
private static Unhook mSmsPmHook = null;
private static Unhook mMmsPmHook = null;
@@ -38,14 +54,14 @@ public static void init(final XSharedPreferences prefs, final ClassLoader classL
"onReceive", Context.class, Intent.class, new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
- log("MmsReceiver onReceive ENTERED");
+ if (DEBUG) log("MmsReceiver onReceive ENTERED");
Context context = (Context) param.args[0];
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
mMmsPmHook = XposedHelpers.findAndHookMethod(
pm.getClass(), "newWakeLock", int.class, String.class, new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
- log("PowerManager newWakeLock called from MMS app - setting partial wakelock");
+ if (DEBUG) log("PowerManager newWakeLock called from MMS app - setting partial wakelock");
param.args[0] = 1;
}
});
@@ -56,11 +72,11 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable {
mMmsPmHook.unhook();
mMmsPmHook = null;
}
- log("MmsReceiver onReceive EXITED");
+ if (DEBUG) log("MmsReceiver onReceive EXITED");
}
});
- } catch (Exception e) {
- XposedBridge.log(e);
+ } catch (Throwable t) {
+ XposedBridge.log(t);
}
try {
@@ -69,14 +85,14 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable {
"beginStartingService", Context.class, Intent.class, new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
- log("SmsReceiver beginStartingService ENTERED");
+ if (DEBUG) log("SmsReceiver beginStartingService ENTERED");
Context context = (Context) param.args[0];
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
mSmsPmHook = XposedHelpers.findAndHookMethod(
pm.getClass(), "newWakeLock", int.class, String.class, new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
- log("PowerManager newWakeLock called from MMS app - setting partial wakelock");
+ if (DEBUG) log("PowerManager newWakeLock called from MMS app - setting partial wakelock");
param.args[0] = 1;
}
});
@@ -87,11 +103,11 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable {
mSmsPmHook.unhook();
mSmsPmHook = null;
}
- log("smsReceiver beginStartingService EXITED");
+ if (DEBUG) log("smsReceiver beginStartingService EXITED");
}
});
- } catch (Exception e) {
- XposedBridge.log(e);
+ } catch (Throwable t) {
+ XposedBridge.log(t);
}
try {
@@ -102,14 +118,14 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable {
String.class, int.class, int.class, Uri.class, new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
- log("CBMessagingNotification updateNotification ENTERED");
+ if (DEBUG) log("CBMessagingNotification updateNotification ENTERED");
Context context = (Context) param.args[0];
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
mCbPmHook = XposedHelpers.findAndHookMethod(
pm.getClass(), "newWakeLock", int.class, String.class, new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
- log("PowerManager newWakeLock called from MMS app - setting partial wakelock");
+ if (DEBUG) log("PowerManager newWakeLock called from MMS app - setting partial wakelock");
param.args[0] = 1;
}
});
@@ -120,11 +136,11 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable {
mCbPmHook.unhook();
mCbPmHook = null;
}
- log("CBMessagingNotification updateNotification EXITED");
+ if (DEBUG) log("CBMessagingNotification updateNotification EXITED");
}
});
- } catch (Exception e) {
- XposedBridge.log(e);
+ } catch (Throwable t) {
+ XposedBridge.log(t);
}
try {
@@ -133,14 +149,14 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable {
"notifyClassZeroMessage", Context.class, String.class, new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
- log("MessagingNotification notifyClassZeroMessage ENTERED");
+ if (DEBUG) log("MessagingNotification notifyClassZeroMessage ENTERED");
Context context = (Context) param.args[0];
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
mMnotifPmHook1 = XposedHelpers.findAndHookMethod(
pm.getClass(), "newWakeLock", int.class, String.class, new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
- log("PowerManager newWakeLock called from MMS app - setting partial wakelock");
+ if (DEBUG) log("PowerManager newWakeLock called from MMS app - setting partial wakelock");
param.args[0] = 1;
}
});
@@ -151,7 +167,7 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable {
mMnotifPmHook1.unhook();
mMnotifPmHook1 = null;
}
- log("MessagingNotification notifyClassZeroMessage EXITED");
+ if (DEBUG) log("MessagingNotification notifyClassZeroMessage EXITED");
}
});
@@ -159,14 +175,14 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable {
"notifyFailed", Context.class, boolean.class, long.class, boolean.class, new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
- log("MessagingNotification notifyFailed ENTERED");
+ if (DEBUG) log("MessagingNotification notifyFailed ENTERED");
Context context = (Context) param.args[0];
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
mMnotifPmHook2 = XposedHelpers.findAndHookMethod(
pm.getClass(), "newWakeLock", int.class, String.class, new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
- log("PowerManager newWakeLock called from MMS app - setting partial wakelock");
+ if (DEBUG) log("PowerManager newWakeLock called from MMS app - setting partial wakelock");
param.args[0] = 1;
}
});
@@ -177,7 +193,7 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable {
mMnotifPmHook2.unhook();
mMnotifPmHook2 = null;
}
- log("MessagingNotification notifyFailed EXITED");
+ if (DEBUG) log("MessagingNotification notifyFailed EXITED");
}
});
@@ -186,14 +202,14 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable {
CLASS_NOTIF_PROFILE, new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
- log("MessagingNotification updateNotification ENTERED");
+ if (DEBUG) log("MessagingNotification updateNotification ENTERED");
Context context = (Context) param.args[0];
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
mMnotifPmHook3 = XposedHelpers.findAndHookMethod(
pm.getClass(), "newWakeLock", int.class, String.class, new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
- log("PowerManager newWakeLock called from MMS app - setting partial wakelock");
+ if (DEBUG) log("PowerManager newWakeLock called from MMS app - setting partial wakelock");
param.args[0] = 1;
}
});
@@ -204,11 +220,11 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable {
mMnotifPmHook3.unhook();
mMnotifPmHook3 = null;
}
- log("MessagingNotification updateNotification EXITED");
+ if (DEBUG) log("MessagingNotification updateNotification EXITED");
}
});
- } catch (Exception e) {
- XposedBridge.log(e);
+ } catch (Throwable t) {
+ XposedBridge.log(t);
}
}
}
\ No newline at end of file
diff --git a/src/com/ceco/gm2/gravitybox/FixTraceFlood.java b/src/com/ceco/gm2/gravitybox/FixTraceFlood.java
index 881a3427e2..41a718ac87 100644
--- a/src/com/ceco/gm2/gravitybox/FixTraceFlood.java
+++ b/src/com/ceco/gm2/gravitybox/FixTraceFlood.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright (C) 2013 Peter Gregus for GravityBox Project (C3C076@xda)
+ * 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.ceco.gm2.gravitybox;
import de.robv.android.xposed.XC_MethodReplacement;
@@ -5,11 +20,12 @@
import de.robv.android.xposed.XposedHelpers;
public class FixTraceFlood {
- private static final String TAG = "FixTraceFlood";
+ private static final String TAG = "GB:FixTraceFlood";
private static final String CLASS_TRACE = "android.os.Trace";
+ private static final boolean DEBUG = false;
public static void initZygote() {
- XposedBridge.log(TAG + ": initZygote");
+ if (DEBUG) XposedBridge.log(TAG + ": initZygote");
try {
final Class> traceClass = XposedHelpers.findClass(CLASS_TRACE, null);
@@ -24,8 +40,8 @@ protected Object replaceHookedMethod(MethodHookParam param) throws Throwable {
}
});
- } catch (Exception e) {
- XposedBridge.log(e);
+ } catch (Throwable t) {
+ XposedBridge.log(t);
}
}
}
\ No newline at end of file
diff --git a/src/com/ceco/gm2/gravitybox/FixTtsSettings.java b/src/com/ceco/gm2/gravitybox/FixTtsSettings.java
index 36838998f5..a1912e2f5b 100644
--- a/src/com/ceco/gm2/gravitybox/FixTtsSettings.java
+++ b/src/com/ceco/gm2/gravitybox/FixTtsSettings.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright (C) 2013 Peter Gregus for GravityBox Project (C3C076@xda)
+ * 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.ceco.gm2.gravitybox;
import android.preference.PreferenceCategory;
@@ -8,9 +23,10 @@
import de.robv.android.xposed.XposedHelpers;
public class FixTtsSettings {
- private static final String TAG = "FixTtsSettings";
+ private static final String TAG = "GB:FixTtsSettings";
public static final String PACKAGE_NAME = "com.android.settings";
private static final String CLASS_VOICEIO_SETTINGS = "com.android.settings.VoiceInputOutputSettings";
+ private static final boolean DEBUG = false;
private static void log(String message) {
XposedBridge.log(TAG + ": " + message);
@@ -21,7 +37,7 @@ public static void init(final XSharedPreferences prefs, final ClassLoader classL
final Class> classVoiceIoSettings = XposedHelpers.findClass(CLASS_VOICEIO_SETTINGS, classLoader);
- log("replacing populateOrRemovePreferences method");
+ if (DEBUG) log("replacing populateOrRemovePreferences method");
XposedHelpers.findAndHookMethod(classVoiceIoSettings, "populateOrRemovePreferences",
new XC_MethodReplacement() {
@@ -31,7 +47,7 @@ protected Object replaceHookedMethod(MethodHookParam param) throws Throwable {
"populateOrRemoveRecognizerPrefs");
boolean hasTts = (Boolean) XposedHelpers.callMethod(param.thisObject,
"populateOrRemoveTtsPrefs");
- log("populateOrRemovePreferences: hasRecognizer=" + hasRecognizer + "; hasTts=" + hasTts);
+ if (DEBUG) log("populateOrRemovePreferences: hasRecognizer=" + hasRecognizer + "; hasTts=" + hasTts);
if (hasRecognizer || hasTts) {
return null;
@@ -50,8 +66,8 @@ protected Object replaceHookedMethod(MethodHookParam param) throws Throwable {
});
}
- catch (Exception e) {
- XposedBridge.log(e);
+ catch (Throwable t) {
+ XposedBridge.log(t);
}
}
}
\ No newline at end of file
diff --git a/src/com/ceco/gm2/gravitybox/GravityBox.java b/src/com/ceco/gm2/gravitybox/GravityBox.java
index 8b7d025a07..d170ad41ed 100644
--- a/src/com/ceco/gm2/gravitybox/GravityBox.java
+++ b/src/com/ceco/gm2/gravitybox/GravityBox.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright (C) 2013 Peter Gregus for GravityBox Project (C3C076@xda)
+ * 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.ceco.gm2.gravitybox;
import android.os.Build;
@@ -18,22 +33,29 @@ public class GravityBox implements IXposedHookZygoteInit, IXposedHookInitPackage
public void initZygote(StartupParam startupParam) throws Throwable {
MODULE_PATH = startupParam.modulePath;
prefs = new XSharedPreferences(PACKAGE_NAME);
-
- XposedBridge.log("Hardware: " + Build.HARDWARE);
- XposedBridge.log("Product: " + Build.PRODUCT);
- XposedBridge.log("Device manufacturer: " + Build.MANUFACTURER);
- XposedBridge.log("Device brand: " + Build.BRAND);
- XposedBridge.log("Device model: " + Build.MODEL);
- XposedBridge.log("Is MTK device: " + Utils.isMtkDevice());
- XposedBridge.log("Android SDK: " + Build.VERSION.SDK_INT);
- XposedBridge.log("Android Release: " + Build.VERSION.RELEASE);
- XposedBridge.log("ROM: " + Build.DISPLAY);
+ prefs.makeWorldReadable();
+
+ XposedBridge.log("GB:Hardware: " + Build.HARDWARE);
+ XposedBridge.log("GB:Product: " + Build.PRODUCT);
+ XposedBridge.log("GB:Device manufacturer: " + Build.MANUFACTURER);
+ XposedBridge.log("GB:Device brand: " + Build.BRAND);
+ XposedBridge.log("GB:Device model: " + Build.MODEL);
+ XposedBridge.log("GB:Device type: " + (Utils.isTablet() ? "tablet" : "phone"));
+ XposedBridge.log("GB:Is MTK device: " + Utils.isMtkDevice());
+ XposedBridge.log("GB:Is Xperia device: " + Utils.isXperiaDevice());
+ XposedBridge.log("GB:Has telephony support: " + Utils.hasTelephonySupport());
+ XposedBridge.log("GB:Has Gemini support: " + Utils.hasGeminiSupport());
+ XposedBridge.log("GB:Android SDK: " + Build.VERSION.SDK_INT);
+ XposedBridge.log("GB:Android Release: " + Build.VERSION.RELEASE);
+ XposedBridge.log("GB:ROM: " + Build.DISPLAY);
SystemWideResources.initResources(prefs);
// MTK specific
if (Utils.isMtkDevice()) {
- ModSignalIconHide.initZygote(prefs);
+ if (Utils.hasGeminiSupport()) {
+ ModSignalIconHide.initZygote(prefs);
+ }
if (prefs.getBoolean(GravityBoxSettings.PREF_KEY_FIX_CALLER_ID_PHONE, false)) {
FixCallerIdPhone.initZygote(prefs);
@@ -44,20 +66,31 @@ public void initZygote(StartupParam startupParam) throws Throwable {
}
}
+ // 4.2+ only
+ if (Build.VERSION.SDK_INT > 16) {
+ FixTraceFlood.initZygote();
+ ModElectronBeam.initZygote(prefs);
+ if (Build.VERSION.SDK_INT < 19) {
+ ModLockscreen.init(prefs, null);
+ }
+ }
+
// Common
- FixTraceFlood.initZygote();
ModVolumeKeySkipTrack.init(prefs);
ModVolKeyCursor.initZygote(prefs);
- ModCallCard.initZygote();
- ModStatusbarColor.initZygote();
- PhoneWrapper.initZygote();
- ModElectronBeam.initZygote(prefs);
- ModLockscreen.initZygote(prefs);
+ ModStatusbarColor.initZygote(prefs);
+ PhoneWrapper.initZygote(prefs);
ModLowBatteryWarning.initZygote(prefs);
ModDisplay.initZygote(prefs);
ModAudio.initZygote(prefs);
ModHwKeys.initZygote(prefs);
- PatchMasterKey.initZygote();
+ if (Build.VERSION.SDK_INT < 19) {
+ PatchMasterKey.initZygote();
+ ModCallCard.initZygote();
+ ModPhone.initZygote(prefs);
+ }
+ ModExpandedDesktop.initZygote(prefs);
+ ConnectivityServiceWrapper.initZygote();
}
@Override
@@ -66,25 +99,37 @@ public void handleInitPackageResources(InitPackageResourcesParam resparam) throw
if (resparam.packageName.equals(ModBatteryStyle.PACKAGE_NAME))
ModBatteryStyle.initResources(prefs, resparam);
- if (resparam.packageName.equals(ModCenterClock.PACKAGE_NAME)) {
- ModCenterClock.initResources(prefs, resparam);
+ if (resparam.packageName.equals(ModStatusBar.PACKAGE_NAME)) {
+ ModStatusBar.initResources(prefs, resparam);
}
if (resparam.packageName.equals(FixDevOptions.PACKAGE_NAME)) {
FixDevOptions.initPackageResources(prefs, resparam);
}
- if (resparam.packageName.equals(ModQuickSettings.PACKAGE_NAME)) {
+ if (Build.VERSION.SDK_INT > 16 && resparam.packageName.equals(ModQuickSettings.PACKAGE_NAME)) {
ModQuickSettings.initResources(prefs, resparam);
}
+
+ // KitKat
+ if (Build.VERSION.SDK_INT > 18) {
+ if (resparam.packageName.equals(ModLockscreen.PACKAGE_NAME)) {
+ ModLockscreen.initPackageResources(prefs, resparam);
+ }
+ }
}
@Override
public void handleLoadPackage(LoadPackageParam lpparam) throws Throwable {
+ if (lpparam.packageName.equals(SystemPropertyProvider.PACKAGE_NAME)) {
+ SystemPropertyProvider.init(lpparam.classLoader);
+ }
+
// MTK Specific
if (Utils.isMtkDevice()) {
- if (lpparam.packageName.equals(ModSignalIconHide.PACKAGE_NAME)) {
+ if (Utils.hasGeminiSupport() && !Utils.isMt6572Device() &&
+ lpparam.packageName.equals(ModSignalIconHide.PACKAGE_NAME)) {
ModSignalIconHide.init(prefs, lpparam.classLoader);
}
@@ -125,6 +170,12 @@ public void handleLoadPackage(LoadPackageParam lpparam) throws Throwable {
if (lpparam.packageName.equals(ModCellConnService.PACKAGE_NAME)) {
ModCellConnService.init(prefs, lpparam.classLoader);
}
+
+ if (Build.VERSION.SDK_INT > 16
+ && Utils.hasGeminiSupport()
+ && lpparam.packageName.equals(ModMtkToolbar.PACKAGE_NAME)) {
+ ModMtkToolbar.init(prefs, lpparam.classLoader);
+ }
}
// Common
@@ -140,15 +191,15 @@ public void handleLoadPackage(LoadPackageParam lpparam) throws Throwable {
ModClearAllRecents.init(prefs, lpparam.classLoader);
}
- if (lpparam.packageName.equals(ModRebootMenu.PACKAGE_NAME)) {
- ModRebootMenu.init(prefs, lpparam.classLoader);
+ if (lpparam.packageName.equals(ModPowerMenu.PACKAGE_NAME)) {
+ ModPowerMenu.init(prefs, lpparam.classLoader);
}
- if (lpparam.packageName.equals(ModCallCard.PACKAGE_NAME)) {
+ if (Build.VERSION.SDK_INT < 19 && lpparam.packageName.equals(ModCallCard.PACKAGE_NAME)) {
ModCallCard.init(prefs, lpparam.classLoader);
}
- if (lpparam.packageName.equals(ModQuickSettings.PACKAGE_NAME)) {
+ if (Build.VERSION.SDK_INT > 16 && lpparam.packageName.equals(ModQuickSettings.PACKAGE_NAME)) {
ModQuickSettings.init(prefs, lpparam.classLoader);
}
@@ -156,11 +207,12 @@ public void handleLoadPackage(LoadPackageParam lpparam) throws Throwable {
ModStatusbarColor.init(prefs, lpparam.classLoader);
}
- if (lpparam.packageName.equals(ModCenterClock.PACKAGE_NAME)) {
- ModCenterClock.init(prefs, lpparam.classLoader);
+ if (lpparam.packageName.equals(ModStatusBar.PACKAGE_NAME)) {
+ ModStatusBar.init(prefs, lpparam.classLoader);
}
- if (lpparam.packageName.equals(ModPhone.PACKAGE_NAME)) {
+ if (Build.VERSION.SDK_INT < 19 && lpparam.packageName.equals(ModPhone.PACKAGE_NAME) &&
+ Utils.hasTelephonySupport()) {
ModPhone.init(prefs, lpparam.classLoader);
}
@@ -175,5 +227,21 @@ public void handleLoadPackage(LoadPackageParam lpparam) throws Throwable {
if (lpparam.packageName.equals(ModPieControls.PACKAGE_NAME)) {
ModPieControls.init(prefs, lpparam.classLoader);
}
+
+ if (lpparam.packageName.equals(ModNavigationBar.PACKAGE_NAME)
+ && prefs.getBoolean(GravityBoxSettings.PREF_KEY_NAVBAR_OVERRIDE, false)) {
+ ModNavigationBar.init(prefs, lpparam.classLoader);
+ }
+
+ if (Build.VERSION.SDK_INT < 19 && lpparam.packageName.equals(ModMms.PACKAGE_NAME)) {
+ ModMms.init(prefs, lpparam.classLoader);
+ }
+
+ // KitKat
+ if (Build.VERSION.SDK_INT > 18) {
+ if (lpparam.packageName.equals(ModLockscreen.PACKAGE_NAME)) {
+ ModLockscreen.init(prefs, lpparam.classLoader);
+ }
+ }
}
}
\ No newline at end of file
diff --git a/src/com/ceco/gm2/gravitybox/GravityBoxResultReceiver.java b/src/com/ceco/gm2/gravitybox/GravityBoxResultReceiver.java
index c812c833d9..958ff941e0 100644
--- a/src/com/ceco/gm2/gravitybox/GravityBoxResultReceiver.java
+++ b/src/com/ceco/gm2/gravitybox/GravityBoxResultReceiver.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright (C) 2013 Peter Gregus for GravityBox Project (C3C076@xda)
+ * 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.ceco.gm2.gravitybox;
import android.os.Bundle;
diff --git a/src/com/ceco/gm2/gravitybox/GravityBoxService.java b/src/com/ceco/gm2/gravitybox/GravityBoxService.java
index 2fb7efef8c..a52b6c6824 100644
--- a/src/com/ceco/gm2/gravitybox/GravityBoxService.java
+++ b/src/com/ceco/gm2/gravitybox/GravityBoxService.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright (C) 2013 Peter Gregus for GravityBox Project (C3C076@xda)
+ * 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.ceco.gm2.gravitybox;
import android.app.IntentService;
diff --git a/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java b/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java
index 8f809d28db..1250f079c7 100644
--- a/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java
+++ b/src/com/ceco/gm2/gravitybox/GravityBoxSettings.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright (C) 2013 Peter Gregus for GravityBox Project (C3C076@xda)
+ * 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.ceco.gm2.gravitybox;
import java.io.File;
@@ -8,10 +23,16 @@
import java.util.List;
import java.util.Set;
+import com.ceco.gm2.gravitybox.preference.AppPickerPreference;
+import com.ceco.gm2.gravitybox.preference.AutoBrightnessDialogPreference;
+import com.ceco.gm2.gravitybox.preference.SeekBarPreference;
+import com.ceco.gm2.gravitybox.quicksettings.TileOrderActivity;
+
import android.net.Uri;
+import android.os.Build;
import android.os.Bundle;
+import android.os.Handler;
import android.preference.CheckBoxPreference;
-import android.preference.EditTextPreference;
import android.preference.ListPreference;
import android.preference.MultiSelectListPreference;
import android.preference.Preference;
@@ -19,11 +40,15 @@
import android.preference.PreferenceFragment;
import android.preference.PreferenceScreen;
import android.provider.MediaStore;
+import android.provider.Settings;
+import android.util.Log;
import android.view.Display;
import android.view.Window;
import android.widget.Toast;
import android.app.Activity;
import android.app.AlertDialog;
+import android.app.Dialog;
+import android.app.ProgressDialog;
import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.DialogInterface;
@@ -35,14 +60,17 @@
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.res.Configuration;
+import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.graphics.Rect;
import net.margaritov.preference.colorpicker.ColorPickerPreference;
-public class GravityBoxSettings extends Activity {
- public static final String PREF_KEY_QUICK_SETTINGS = "pref_quick_settings";
+public class GravityBoxSettings extends Activity implements GravityBoxResultReceiver.Receiver {
+ public static final String PREF_KEY_QUICK_SETTINGS = "pref_quick_settings2";
+ public static final String PREF_KEY_QUICK_SETTINGS_TILE_ORDER = "pref_qs_tile_order";
public static final String PREF_KEY_QUICK_SETTINGS_TILES_PER_ROW = "pref_qs_tiles_per_row";
+ public static final String PREF_KEY_QUICK_SETTINGS_TILE_STYLE = "pref_qs_tile_style";
public static final String PREF_KEY_QUICK_SETTINGS_AUTOSWITCH = "pref_auto_switch_qs";
public static final String PREF_KEY_QUICK_PULLDOWN = "pref_quick_pulldown";
public static final int QUICK_PULLDOWN_OFF = 0;
@@ -54,6 +82,8 @@ public class GravityBoxSettings extends Activity {
public static final int BATTERY_STYLE_STOCK = 1;
public static final int BATTERY_STYLE_CIRCLE = 2;
public static final int BATTERY_STYLE_CIRCLE_PERCENT = 3;
+ public static final int BATTERY_STYLE_KITKAT = 4;
+ public static final int BATTERY_STYLE_KITKAT_PERCENT = 5;
public static final int BATTERY_STYLE_NONE = 0;
public static final String PREF_KEY_LOW_BATTERY_WARNING_POLICY = "pref_low_battery_warning_policy";
@@ -65,6 +95,7 @@ public class GravityBoxSettings extends Activity {
public static final String ACTION_DISABLE_ROAMING_INDICATORS_CHANGED = "gravitybox.intent.action.DISABLE_ROAMING_INDICATORS_CHANGED";
public static final String EXTRA_INDICATORS_DISABLED = "indicatorsDisabled";
public static final String PREF_KEY_POWEROFF_ADVANCED = "pref_poweroff_advanced";
+ public static final String PREF_KEY_POWERMENU_SCREENSHOT = "pref_powermenu_screenshot";
public static final String PREF_KEY_VOL_KEY_CURSOR_CONTROL = "pref_vol_key_cursor_control";
public static final int VOL_KEY_CURSOR_CONTROL_OFF = 0;
@@ -72,7 +103,9 @@ public class GravityBoxSettings extends Activity {
public static final int VOL_KEY_CURSOR_CONTROL_ON_REVERSE = 2;
public static final String PREF_KEY_RECENTS_CLEAR_ALL = "pref_recents_clear_all2";
+ public static final String PREF_KEY_RAMBAR = "pref_rambar";
public static final String PREF_KEY_RECENTS_CLEAR_MARGIN_TOP = "pref_recent_clear_margin_top";
+ public static final String PREF_KEY_RECENTS_CLEAR_MARGIN_BOTTOM = "pref_recent_clear_margin_bottom";
public static final int RECENT_CLEAR_OFF = 0;
public static final int RECENT_CLEAR_TOP_LEFT = 51;
public static final int RECENT_CLEAR_TOP_RIGHT = 53;
@@ -81,7 +114,10 @@ public class GravityBoxSettings extends Activity {
public static final String PREF_CAT_KEY_PHONE = "pref_cat_phone";
public static final String PREF_KEY_CALLER_FULLSCREEN_PHOTO = "pref_caller_fullscreen_photo";
+ public static final String PREF_KEY_CALLER_UNKNOWN_PHOTO_ENABLE = "pref_caller_unknown_photo_enable";
+ public static final String PREF_KEY_CALLER_UNKNOWN_PHOTO = "pref_caller_unknown_photo";
public static final String PREF_KEY_ROAMING_WARNING_DISABLE = "pref_roaming_warning_disable";
+ public static final String PREF_KEY_NATIONAL_ROAMING = "pref_national_roaming";
public static final String PREF_CAT_KEY_FIXES = "pref_cat_fixes";
public static final String PREF_KEY_FIX_DATETIME_CRASH = "pref_fix_datetime_crash";
public static final String PREF_KEY_FIX_CALLER_ID_PHONE = "pref_fix_caller_id_phone";
@@ -90,60 +126,125 @@ public class GravityBoxSettings extends Activity {
public static final String PREF_KEY_FIX_CALENDAR = "pref_fix_calendar";
public static final String PREF_CAT_KEY_STATUSBAR = "pref_cat_statusbar";
public static final String PREF_CAT_KEY_STATUSBAR_QS = "pref_cat_statusbar_qs";
- public static final String PREF_KEY_STATUSBAR_BGCOLOR = "pref_statusbar_bgcolor";
+ public static final String PREF_CAT_KEY_STATUSBAR_COLORS = "pref_cat_statusbar_colors";
+ public static final String PREF_KEY_STATUSBAR_BGCOLOR = "pref_statusbar_bgcolor2";
+ public static final String PREF_KEY_STATUSBAR_COLOR_FOLLOW_STOCK_BATTERY = "pref_sbcolor_follow_stock_battery";
public static final String PREF_KEY_STATUSBAR_ICON_COLOR_ENABLE = "pref_statusbar_icon_color_enable";
public static final String PREF_KEY_STATUSBAR_ICON_COLOR = "pref_statusbar_icon_color";
+ public static final String PREF_KEY_STATUS_ICON_STYLE = "pref_status_icon_style";
+ public static final String PREF_KEY_STATUSBAR_ICON_COLOR_SECONDARY = "pref_statusbar_icon_color_secondary";
public static final String PREF_KEY_STATUSBAR_DATA_ACTIVITY_COLOR = "pref_statusbar_data_activity_color";
+ public static final String PREF_KEY_STATUSBAR_DATA_ACTIVITY_COLOR_SECONDARY =
+ "pref_statusbar_data_activity_color_secondary";
+ public static final String PREF_KEY_STATUSBAR_COLOR_SKIP_BATTERY = "pref_statusbar_color_skip_battery";
+ public static final String PREF_KEY_STATUSBAR_SIGNAL_COLOR_MODE = "pref_statusbar_signal_color_mode";
public static final String PREF_KEY_STATUSBAR_CENTER_CLOCK = "pref_statusbar_center_clock";
- public static final String PREF_KEY_STATUSBAR_CLOCK_DOW = "pref_statusbar_clock_dow";
+ public static final String PREF_KEY_STATUSBAR_CLOCK_DOW = "pref_statusbar_clock_dow2";
+ public static final int DOW_DISABLED = 0;
+ public static final int DOW_STANDARD = 1;
+ public static final int DOW_LOWERCASE = 2;
+ public static final int DOW_UPPERCASE = 3;
+ public static final String PREF_KEY_STATUSBAR_CLOCK_AMPM_HIDE = "pref_clock_ampm_hide";
+ public static final String PREF_KEY_STATUSBAR_CLOCK_HIDE = "pref_clock_hide";
+ public static final String PREF_KEY_STATUSBAR_CLOCK_LINK = "pref_clock_link_app";
+ public static final String PREF_KEY_ALARM_ICON_HIDE = "pref_alarm_icon_hide";
+ public static final String PREF_CAT_KEY_TRANSPARENCY_MANAGER = "pref_cat_transparency_manager";
+ public static final String PREF_KEY_TM_MODE = "pref_tm_mode";
+ public static final String PREF_KEY_TM_STATUSBAR_LAUNCHER = "pref_tm_statusbar_launcher";
+ public static final String PREF_KEY_TM_STATUSBAR_LOCKSCREEN = "pref_tm_statusbar_lockscreen";
+ public static final String PREF_KEY_TM_NAVBAR_LAUNCHER = "pref_tm_navbar_launcher";
+ public static final String PREF_KEY_TM_NAVBAR_LOCKSCREEN = "pref_tm_navbar_lockscreen";
public static final String PREF_KEY_FIX_TTS_SETTINGS = "pref_fix_tts_settings";
public static final String PREF_KEY_FIX_DEV_OPTS = "pref_fix_dev_opts";
public static final String PREF_KEY_ABOUT_GRAVITYBOX = "pref_about_gb";
public static final String PREF_KEY_ABOUT_XPOSED = "pref_about_xposed";
public static final String PREF_KEY_ABOUT_DONATE = "pref_about_donate";
public static final String PREF_KEY_CRT_OFF_EFFECT = "pref_crt_off_effect";
+ public static final String PREF_KEY_UNPLUG_TURNS_ON_SCREEN = "pref_unplug_turns_on_screen";
public static final String PREF_KEY_ENGINEERING_MODE = "pref_engineering_mode";
+ public static final String APP_MESSAGING = "com.android.mms";
public static final String APP_ENGINEERING_MODE = "com.mediatek.engineermode";
public static final String APP_ENGINEERING_MODE_CLASS = "com.mediatek.engineermode.EngineerMode";
public static final String PREF_KEY_DUAL_SIM_RINGER = "pref_dual_sim_ringer";
public static final String APP_DUAL_SIM_RINGER = "dualsim.ringer";
public static final String APP_DUAL_SIM_RINGER_CLASS = "dualsim.ringer.main";
- public static final String PREF_CAT_KEY_LOCKSCREEN_BACCKGROUND = "pref_cat_lockscreen_background";
+ public static final String PREF_CAT_KEY_LOCKSCREEN = "pref_cat_lockscreen";
+ public static final String PREF_CAT_KEY_LOCKSCREEN_BACKGROUND = "pref_cat_lockscreen_background";
public static final String PREF_KEY_LOCKSCREEN_BACKGROUND = "pref_lockscreen_background";
public static final String PREF_KEY_LOCKSCREEN_BACKGROUND_COLOR = "pref_lockscreen_bg_color";
public static final String PREF_KEY_LOCKSCREEN_BACKGROUND_IMAGE = "pref_lockscreen_bg_image";
+ public static final String PREF_KEY_LOCKSCREEN_SHADE_DISABLE = "pref_lockscreen_shade_disable";
public static final String LOCKSCREEN_BG_DEFAULT = "default";
public static final String LOCKSCREEN_BG_COLOR = "color";
public static final String LOCKSCREEN_BG_IMAGE = "image";
- private static final int LOCKSCREEN_BACKGROUND = 1024;
+ public static final String PREF_KEY_LOCKSCREEN_BATTERY_ARC = "pref_lockscreen_battery_arc";
public static final String PREF_KEY_LOCKSCREEN_MAXIMIZE_WIDGETS = "pref_lockscreen_maximize_widgets";
+ public static final String PREF_KEY_LOCKSCREEN_WIDGET_LIMIT_DISABLE = "pref_lockscreen_widget_limit_disable";
public static final String PREF_KEY_LOCKSCREEN_ROTATION = "pref_lockscreen_rotation";
public static final String PREF_KEY_LOCKSCREEN_MENU_KEY = "pref_lockscreen_menu_key";
+ public static final String PREF_KEY_LOCKSCREEN_QUICK_UNLOCK = "pref_lockscreen_quick_unlock";
+ public static final String PREF_KEY_STATUSBAR_LOCK_POLICY = "pref_statusbar_lock_policy";
+ public static final int SBL_POLICY_DEFAULT = 0;
+ public static final int SBL_POLICY_UNLOCKED = 1;
+ public static final int SBL_POLICY_LOCKED = 2;
+
public static final String PREF_KEY_FLASHING_LED_DISABLE = "pref_flashing_led_disable";
public static final String PREF_KEY_CHARGING_LED_DISABLE = "pref_charging_led_disable";
- public static final String PREF_KEY_BRIGHTNESS_MIN = "pref_brightness_min";
+ public static final String PREF_CAT_KEY_DISPLAY = "pref_cat_display";
+ public static final String PREF_KEY_EXPANDED_DESKTOP = "pref_expanded_desktop";
+ public static final int ED_DISABLED = 0;
+ public static final int ED_STATUSBAR = 1;
+ public static final int ED_NAVBAR = 2;
+ public static final int ED_BOTH = 3;
+ public static final String ACTION_PREF_EXPANDED_DESKTOP_MODE_CHANGED = "gravitybox.intent.action.EXPANDED_DESKTOP_MODE_CHANGED";
+ public static final String EXTRA_ED_MODE = "expandedDesktopMode";
+ public static final String PREF_CAT_KEY_BRIGHTNESS = "pref_cat_brightness";
+ public static final String PREF_KEY_BRIGHTNESS_MASTER_SWITCH = "pref_brightness_master_switch";
+ public static final String PREF_KEY_BRIGHTNESS_MIN = "pref_brightness_min2";
+ public static final String PREF_KEY_SCREEN_DIM_LEVEL = "pref_screen_dim_level";
public static final String PREF_KEY_AUTOBRIGHTNESS = "pref_autobrightness";
public static final String PREF_KEY_HOLO_BG_SOLID_BLACK = "pref_holo_bg_solid_black";
public static final String PREF_KEY_HOLO_BG_DITHER = "pref_holo_bg_dither";
+ public static final String PREF_CAT_KEY_MEDIA = "pref_cat_media";
public static final String PREF_KEY_VOL_MUSIC_CONTROLS = "pref_vol_music_controls";
public static final String PREF_KEY_MUSIC_VOLUME_STEPS = "pref_music_volume_steps";
public static final String PREF_KEY_SAFE_MEDIA_VOLUME = "pref_safe_media_volume";
public static final String PREF_KEY_VOLUME_PANEL_EXPANDABLE = "pref_volume_panel_expandable";
+ public static final String PREF_KEY_VOLUME_PANEL_FULLY_EXPANDABLE = "pref_volume_panel_expand_fully";
+ public static final String PREF_KEY_VOLUME_PANEL_AUTOEXPAND = "pref_volume_panel_autoexpand";
+ public static final String PREF_KEY_VOLUME_ADJUST_MUTE = "pref_volume_adjust_mute";
public static final String ACTION_PREF_VOLUME_PANEL_MODE_CHANGED = "gravitybox.intent.action.VOLUME_PANEL_MODE_CHANGED";
public static final String EXTRA_EXPANDABLE = "expandable";
+ public static final String EXTRA_EXPANDABLE_FULLY = "expandable_fully";
+ public static final String EXTRA_AUTOEXPAND = "autoExpand";
+ public static final String EXTRA_MUTED = "muted";
public static final String PREF_KEY_LINK_VOLUMES = "pref_link_volumes";
public static final String ACTION_PREF_LINK_VOLUMES_CHANGED = "gravitybox.intent.action.LINK_VOLUMES_CHANGED";
public static final String EXTRA_LINKED = "linked";
+ public static final String PREF_CAT_HWKEY_ACTIONS = "pref_cat_hwkey_actions";
+ public static final String PREF_CAT_HWKEY_MENU = "pref_cat_hwkey_menu";
public static final String PREF_KEY_HWKEY_MENU_LONGPRESS = "pref_hwkey_menu_longpress";
public static final String PREF_KEY_HWKEY_MENU_DOUBLETAP = "pref_hwkey_menu_doubletap";
+ public static final String PREF_CAT_HWKEY_HOME = "pref_cat_hwkey_home";
+ public static final String PREF_KEY_HWKEY_HOME_LONGPRESS = "pref_hwkey_home_longpress";
+ public static final String PREF_KEY_HWKEY_HOME_DOUBLETAP_DISABLE = "pref_hwkey_home_doubletap_disable";
+ public static final String PREF_KEY_HWKEY_HOME_LONGPRESS_KEYGUARD = "pref_hwkey_home_longpress_keyguard";
+ public static final String PREF_CAT_HWKEY_BACK = "pref_cat_hwkey_back";
public static final String PREF_KEY_HWKEY_BACK_LONGPRESS = "pref_hwkey_back_longpress";
+ public static final String PREF_KEY_HWKEY_BACK_DOUBLETAP = "pref_hwkey_back_doubletap";
+ public static final String PREF_CAT_HWKEY_RECENTS = "pref_cat_hwkey_recents";
+ public static final String PREF_KEY_HWKEY_RECENTS_SINGLETAP = "pref_hwkey_recents_singletap";
+ public static final String PREF_KEY_HWKEY_RECENTS_LONGPRESS = "pref_hwkey_recents_longpress";
+ public static final String PREF_KEY_HWKEY_CUSTOM_APP = "pref_hwkey_custom_app";
+ public static final String PREF_KEY_HWKEY_CUSTOM_APP2 = "pref_hwkey_custom_app2";
public static final String PREF_KEY_HWKEY_DOUBLETAP_SPEED = "pref_hwkey_doubletap_speed";
public static final String PREF_KEY_HWKEY_KILL_DELAY = "pref_hwkey_kill_delay";
+ public static final String PREF_CAT_HWKEY_VOLUME = "pref_cat_hwkey_volume";
public static final String PREF_KEY_VOLUME_ROCKER_WAKE_DISABLE = "pref_volume_rocker_wake_disable";
public static final int HWKEY_ACTION_DEFAULT = 0;
public static final int HWKEY_ACTION_SEARCH = 1;
@@ -151,22 +252,42 @@ public class GravityBoxSettings extends Activity {
public static final int HWKEY_ACTION_PREV_APP = 3;
public static final int HWKEY_ACTION_KILL = 4;
public static final int HWKEY_ACTION_SLEEP = 5;
+ public static final int HWKEY_ACTION_RECENT_APPS = 6;
+ public static final int HWKEY_ACTION_CUSTOM_APP = 7;
+ public static final int HWKEY_ACTION_CUSTOM_APP2 = 8;
+ public static final int HWKEY_ACTION_MENU = 9;
+ public static final int HWKEY_ACTION_EXPANDED_DESKTOP = 10;
+ public static final int HWKEY_ACTION_TORCH = 11;
+ public static final int HWKEY_ACTION_APP_LAUNCHER = 12;
+ public static final int HWKEY_ACTION_HOME = 13;
+ public static final int HWKEY_ACTION_BACK = 14;
public static final int HWKEY_DOUBLETAP_SPEED_DEFAULT = 400;
public static final int HWKEY_KILL_DELAY_DEFAULT = 1000;
public static final String ACTION_PREF_HWKEY_MENU_LONGPRESS_CHANGED = "gravitybox.intent.action.HWKEY_MENU_LONGPRESS_CHANGED";
public static final String ACTION_PREF_HWKEY_MENU_DOUBLETAP_CHANGED = "gravitybox.intent.action.HWKEY_MENU_DOUBLETAP_CHANGED";
+ public static final String ACTION_PREF_HWKEY_HOME_LONGPRESS_CHANGED = "gravitybox.intent.action.HWKEY_HOME_LONGPRESS_CHANGED";
+ public static final String ACTION_PREF_HWKEY_HOME_DOUBLETAP_CHANGED = "gravitybox.intent.action.HWKEY_HOME_DOUBLETAP_CHANGED";
public static final String ACTION_PREF_HWKEY_BACK_LONGPRESS_CHANGED = "gravitybox.intent.action.HWKEY_BACK_LONGPRESS_CHANGED";
+ public static final String ACTION_PREF_HWKEY_BACK_DOUBLETAP_CHANGED = "gravitybox.intent.action.HWKEY_BACK_DOUBLETAP_CHANGED";
+ public static final String ACTION_PREF_HWKEY_RECENTS_SINGLETAP_CHANGED = "gravitybox.intent.action.HWKEY_RECENTS_SINGLETAP_CHANGED";
+ public static final String ACTION_PREF_HWKEY_RECENTS_LONGPRESS_CHANGED = "gravitybox.intent.action.HWKEY_RECENTS_LONGPRESS_CHANGED";
public static final String ACTION_PREF_HWKEY_DOUBLETAP_SPEED_CHANGED = "gravitybox.intent.action.HWKEY_DOUBLETAP_SPEED_CHANGED";
public static final String ACTION_PREF_HWKEY_KILL_DELAY_CHANGED = "gravitybox.intent.action.HWKEY_KILL_DELAY_CHANGED";
public static final String ACTION_PREF_VOLUME_ROCKER_WAKE_CHANGED = "gravitybox.intent.action.VOLUME_ROCKER_WAKE_CHANGED";
public static final String EXTRA_HWKEY_VALUE = "hwKeyValue";
+ public static final String EXTRA_HWKEY_HOME_DOUBLETAP_DISABLE = "hwKeyHomeDoubletapDisable";
+ public static final String EXTRA_HWKEY_HOME_LONGPRESS_KG = "hwKeyHomeLongpressKeyguard";
public static final String EXTRA_VOLUME_ROCKER_WAKE_DISABLE = "volumeRockerWakeDisable";
public static final String PREF_KEY_PHONE_FLIP = "pref_phone_flip";
public static final int PHONE_FLIP_ACTION_NONE = 0;
public static final int PHONE_FLIP_ACTION_MUTE = 1;
public static final int PHONE_FLIP_ACTION_DISMISS = 2;
- public static final String PREF_KEY_PHONE_CALL_CONNECT_VIBRATE_DISABLE = "pref_phone_call_connect_vibrate_disable";
+ public static final String PREF_KEY_CALL_VIBRATIONS = "pref_call_vibrations";
+ public static final String CV_CONNECTED = "connected";
+ public static final String CV_DISCONNECTED = "disconnected";
+ public static final String CV_WAITING = "waiting";
+ public static final String CV_PERIODIC = "periodic";
public static final String PREF_CAT_KEY_NOTIF_DRAWER_STYLE = "pref_cat_notification_drawer_style";
public static final String PREF_KEY_NOTIF_BACKGROUND = "pref_notif_background";
@@ -180,26 +301,41 @@ public class GravityBoxSettings extends Activity {
public static final String NOTIF_BG_IMAGE = "image";
public static final String NOTIF_BG_COLOR_MODE_OVERLAY = "overlay";
public static final String NOTIF_BG_COLOR_MODE_UNDERLAY = "underlay";
- private static final int NOTIF_BG_IMAGE_PORTRAIT = 1025;
- private static final int NOTIF_BG_IMAGE_LANDSCAPE = 1026;
public static final String ACTION_NOTIF_BACKGROUND_CHANGED = "gravitybox.intent.action.NOTIF_BACKGROUND_CHANGED";
public static final String EXTRA_BG_TYPE = "bgType";
public static final String EXTRA_BG_COLOR = "bgColor";
public static final String EXTRA_BG_COLOR_MODE = "bgColorMode";
public static final String EXTRA_BG_ALPHA = "bgAlpha";
- public static final String PREF_KEY_PIE_CONTROL_ENABLE = "pref_pie_control_enable";
- public static final String PREF_KEY_PIE_CONTROL_SEARCH = "pref_pie_control_search";
+ public static final String PREF_KEY_PIE_CONTROL_ENABLE = "pref_pie_control_enable2";
+ public static final String PREF_KEY_PIE_CONTROL_CUSTOM_KEY = "pref_pie_control_custom_key";
+ public static final String PREF_KEY_PIE_CONTROL_MENU = "pref_pie_control_menu";
public static final String PREF_KEY_PIE_CONTROL_TRIGGERS = "pref_pie_control_trigger_positions";
+ public static final String PREF_KEY_PIE_CONTROL_TRIGGER_SIZE = "pref_pie_control_trigger_size";
public static final String PREF_KEY_PIE_CONTROL_SIZE = "pref_pie_control_size";
- public static final String PREF_KEY_NAVBAR_DISABLE = "pref_navbar_disable";
public static final String PREF_KEY_HWKEYS_DISABLE = "pref_hwkeys_disable";
+ public static final String PREF_KEY_PIE_COLOR_BG = "pref_pie_color_bg";
+ public static final String PREF_KEY_PIE_COLOR_FG = "pref_pie_color_fg";
+ public static final String PREF_KEY_PIE_COLOR_OUTLINE = "pref_pie_color_outline";
+ public static final String PREF_KEY_PIE_COLOR_SELECTED = "pref_pie_color_selected";
+ public static final String PREF_KEY_PIE_COLOR_TEXT = "pref_pie_color_text";
+ public static final String PREF_KEY_PIE_COLOR_RESET = "pref_pie_color_reset";
+ public static final int PIE_CUSTOM_KEY_OFF = 0;
+ public static final int PIE_CUSTOM_KEY_SEARCH = 1;
+ public static final int PIE_CUSTOM_KEY_APP_LAUNCHER = 2;
public static final String ACTION_PREF_PIE_CHANGED = "gravitybox.intent.action.PREF_PIE_CHANGED";
public static final String EXTRA_PIE_ENABLE = "pieEnable";
- public static final String EXTRA_PIE_SEARCH = "pieSearch";
+ public static final String EXTRA_PIE_CUSTOM_KEY_MODE = "pieCustomKeyMode";
+ public static final String EXTRA_PIE_MENU = "pieMenu";
public static final String EXTRA_PIE_TRIGGERS = "pieTriggers";
+ public static final String EXTRA_PIE_TRIGGER_SIZE = "pieTriggerSize";
public static final String EXTRA_PIE_SIZE = "pieSize";
public static final String EXTRA_PIE_HWKEYS_DISABLE = "hwKeysDisable";
+ public static final String EXTRA_PIE_COLOR_BG = "pieColorBg";
+ public static final String EXTRA_PIE_COLOR_FG = "pieColorFg";
+ public static final String EXTRA_PIE_COLOR_OUTLINE = "pieColorOutline";
+ public static final String EXTRA_PIE_COLOR_SELECTED = "pieColorSelected";
+ public static final String EXTRA_PIE_COLOR_TEXT = "pieColorText";
public static final String PREF_KEY_BUTTON_BACKLIGHT_MODE = "pref_button_backlight_mode";
public static final String PREF_KEY_BUTTON_BACKLIGHT_NOTIFICATIONS = "pref_button_backlight_notifications";
@@ -230,24 +366,133 @@ public class GravityBoxSettings extends Activity {
public static final String ACTION_PREF_STATUSBAR_COLOR_CHANGED = "gravitybox.intent.action.STATUSBAR_COLOR_CHANGED";
public static final String EXTRA_SB_BG_COLOR = "bgColor";
+ public static final String EXTRA_SB_COLOR_FOLLOW = "sbColorFollow";
public static final String EXTRA_SB_ICON_COLOR_ENABLE = "iconColorEnable";
public static final String EXTRA_SB_ICON_COLOR = "iconColor";
+ public static final String EXTRA_SB_ICON_STYLE = "iconStyle";
+ public static final String EXTRA_SB_ICON_COLOR_SECONDARY = "iconColorSecondary";
public static final String EXTRA_SB_DATA_ACTIVITY_COLOR = "dataActivityColor";
+ public static final String EXTRA_SB_DATA_ACTIVITY_COLOR_SECONDARY = "dataActivityColorSecondary";
+ public static final String EXTRA_SB_COLOR_SKIP_BATTERY = "skipBattery";
+ public static final String EXTRA_SB_SIGNAL_COLOR_MODE = "signalColorMode";
+ public static final String EXTRA_TM_SB_LAUNCHER = "tmSbLauncher";
+ public static final String EXTRA_TM_SB_LOCKSCREEN = "tmSbLockscreen";
+ public static final String EXTRA_TM_NB_LAUNCHER = "tmNbLauncher";
+ public static final String EXTRA_TM_NB_LOCKSCREEN = "tmNbLockscreen";
public static final String ACTION_PREF_QUICKSETTINGS_CHANGED = "gravitybox.intent.action.QUICKSETTINGS_CHANGED";
public static final String EXTRA_QS_PREFS = "qsPrefs";
public static final String EXTRA_QS_COLS = "qsCols";
public static final String EXTRA_QS_AUTOSWITCH = "qsAutoSwitch";
public static final String EXTRA_QUICK_PULLDOWN = "quickPulldown";
+ public static final String EXTRA_QS_TILE_STYLE = "qsTileStyle";
- public static final String ACTION_PREF_CENTER_CLOCK_CHANGED = "gravitybox.intent.action.CENTER_CLOCK_CHANGED";
+ public static final String ACTION_PREF_CLOCK_CHANGED = "gravitybox.intent.action.CENTER_CLOCK_CHANGED";
public static final String EXTRA_CENTER_CLOCK = "centerClock";
- public static final String ACTION_PREF_CLOCK_DOW = "gravitybox.intent.action.CLOCK_DOW_CHANGED";
public static final String EXTRA_CLOCK_DOW = "clockDow";
+ public static final String EXTRA_AMPM_HIDE = "ampmHide";
+ public static final String EXTRA_CLOCK_HIDE = "clockHide";
+ public static final String EXTRA_CLOCK_LINK = "clockLink";
+ public static final String EXTRA_ALARM_HIDE = "alarmHide";
public static final String ACTION_PREF_SAFE_MEDIA_VOLUME_CHANGED = "gravitybox.intent.action.SAFE_MEDIA_VOLUME_CHANGED";
public static final String EXTRA_SAFE_MEDIA_VOLUME_ENABLED = "enabled";
+ public static final String PREF_CAT_KEY_NAVBAR_KEYS = "pref_cat_navbar_keys";
+ public static final String PREF_CAT_KEY_NAVBAR_COLOR = "pref_cat_navbar_color";
+ public static final String PREF_CAT_KEY_NAVBAR_DIMEN = "pref_cat_navbar_dimen";
+ public static final String PREF_KEY_NAVBAR_OVERRIDE = "pref_navbar_override";
+ public static final String PREF_KEY_NAVBAR_ENABLE = "pref_navbar_enable";
+ public static final String PREF_KEY_NAVBAR_HEIGHT = "pref_navbar_height";
+ public static final String PREF_KEY_NAVBAR_HEIGHT_LANDSCAPE = "pref_navbar_height_landscape";
+ public static final String PREF_KEY_NAVBAR_WIDTH = "pref_navbar_width";
+ public static final String PREF_KEY_NAVBAR_MENUKEY = "pref_navbar_menukey";
+ public static final String PREF_KEY_NAVBAR_LAUNCHER_ENABLE = "pref_navbar_launcher_enable";
+ public static final String PREF_KEY_NAVBAR_COLOR_ENABLE = "pref_navbar_color_enable";
+ public static final String PREF_KEY_NAVBAR_KEY_COLOR = "pref_navbar_key_color";
+ public static final String PREF_KEY_NAVBAR_KEY_GLOW_COLOR = "pref_navbar_key_glow_color";
+ public static final String PREF_KEY_NAVBAR_BG_COLOR = "pref_navbar_bg_color";
+ public static final String ACTION_PREF_NAVBAR_CHANGED = "gravitybox.intent.action.ACTION_NAVBAR_CHANGED";
+ public static final String EXTRA_NAVBAR_HEIGHT = "navbarHeight";
+ public static final String EXTRA_NAVBAR_HEIGHT_LANDSCAPE = "navbarHeightLandscape";
+ public static final String EXTRA_NAVBAR_WIDTH = "navbarWidth";
+ public static final String EXTRA_NAVBAR_MENUKEY = "navbarMenukey";
+ public static final String EXTRA_NAVBAR_LAUNCHER_ENABLE = "navbarLauncherEnable";
+ public static final String EXTRA_NAVBAR_COLOR_ENABLE = "navbarColorEnable";
+ public static final String EXTRA_NAVBAR_KEY_COLOR = "navbarKeyColor";
+ public static final String EXTRA_NAVBAR_KEY_GLOW_COLOR = "navbarKeyGlowColor";
+ public static final String EXTRA_NAVBAR_BG_COLOR = "navbarBgColor";
+
+ public static final String PREF_KEY_LOCKSCREEN_TARGETS_ENABLE = "pref_lockscreen_ring_targets_enable";
+ public static final String PREF_KEY_LOCKSCREEN_TARGETS_APP[] = new String[] {
+ "pref_lockscreen_ring_targets_app0", "pref_lockscreen_ring_targets_app1", "pref_lockscreen_ring_targets_app2",
+ "pref_lockscreen_ring_targets_app3", "pref_lockscreen_ring_targets_app4"
+ };
+ public static final String PREF_KEY_LOCKSCREEN_TARGETS_VERTICAL_OFFSET = "pref_lockscreen_ring_targets_vertical_offset";
+ public static final String PREF_KEY_LOCKSCREEN_TARGETS_HORIZONTAL_OFFSET = "pref_lockscreen_ring_targets_horizontal_offset";
+
+ public static final String PREF_KEY_STATUSBAR_BRIGHTNESS = "pref_statusbar_brightness";
+ public static final String ACTION_PREF_STATUSBAR_BRIGHTNESS_CHANGED = "gravitybox.intent.action.STATUSBAR_BRIGHTNESS_CHANGED";
+ public static final String EXTRA_SB_BRIGHTNESS = "sbBrightness";
+
+ public static final String PREF_KEY_MMS_UNICODE_STRIPPING = "pref_mms_unicode_stripping";
+ public static final String UNISTR_LEAVE_INTACT = "leave_intact";
+ public static final String UNISTR_NON_ENCODABLE = "non_encodable";
+ public static final String UNISTR_ALL = "all";
+
+ public static final String PREF_CAT_KEY_PHONE_TELEPHONY = "pref_cat_phone_telephony";
+ public static final String PREF_CAT_KEY_PHONE_MESSAGING = "pref_cat_phone_messaging";
+ public static final String PREF_CAT_KEY_PHONE_MOBILE_DATA = "pref_cat_phone_mobile_data";
+ public static final String PREF_KEY_MOBILE_DATA_SLOW2G_DISABLE = "pref_mobile_data_slow2g_disable";
+
+ public static final String PREF_KEY_NETWORK_MODE_TILE_MODE = "pref_network_mode_tile_mode";
+ public static final String EXTRA_NMT_MODE = "networkModeTileMode";
+
+ public static final String PREF_KEY_DISPLAY_ALLOW_ALL_ROTATIONS = "pref_display_allow_all_rotations";
+ public static final String ACTION_PREF_DISPLAY_ALLOW_ALL_ROTATIONS_CHANGED =
+ "gravitybox.intent.action.DISPLAY_ALLOW_ALL_ROTATIONS_CHANGED";
+ public static final String EXTRA_ALLOW_ALL_ROTATIONS = "allowAllRotations";
+
+ public static final String PREF_KEY_QS_TILE_BEHAVIOUR_OVERRIDE = "pref_qs_tile_behaviour_override";
+
+ public static final String PREF_KEY_QS_NETWORK_MODE_SIM_SLOT = "pref_qs_network_mode_sim_slot";
+ public static final String ACTION_PREF_QS_NETWORK_MODE_SIM_SLOT_CHANGED =
+ "gravitybox.intent.action.QS_NETWORK_MODE_SIM_SLOT_CHANGED";
+ public static final String EXTRA_SIM_SLOT = "simSlot";
+
+ public static final String PREF_KEY_ONGOING_NOTIFICATIONS = "pref_ongoing_notifications";
+ public static final String ACTION_PREF_ONGOING_NOTIFICATIONS_CHANGED =
+ "gravitybox.intent.action.ONGOING_NOTIFICATIONS_CHANGED";
+ public static final String EXTRA_ONGOING_NOTIF = "ongoingNotif";
+ public static final String EXTRA_ONGOING_NOTIF_RESET = "ongoingNotifReset";
+
+ public static final String PREF_CAT_KEY_DATA_TRAFFIC = "pref_cat_data_traffic";
+ public static final String PREF_KEY_DATA_TRAFFIC_ENABLE = "pref_data_traffic_enable";
+ public static final String PREF_KEY_DATA_TRAFFIC_POSITION = "pref_data_traffic_position";
+ public static final int DT_POSITION_AUTO = 0;
+ public static final int DT_POSITION_LEFT = 1;
+ public static final int DT_POSITION_RIGHT = 2;
+ public static final String PREF_KEY_DATA_TRAFFIC_SIZE = "pref_data_traffic_size";
+ public static final String ACTION_PREF_DATA_TRAFFIC_CHANGED =
+ "gravitybox.intent.action.DATA_TRAFFIC_CHANGED";
+ public static final String EXTRA_DT_ENABLE = "dtEnable";
+ public static final String EXTRA_DT_POSITION = "dtPosition";
+ public static final String EXTRA_DT_SIZE = "dtSize";
+
+ public static final String PREF_CAT_KEY_APP_LAUNCHER = "pref_cat_app_launcher";
+ public static final List PREF_KEY_APP_LAUNCHER_SLOT = new ArrayList(Arrays.asList(
+ "pref_app_launcher_slot0", "pref_app_launcher_slot1", "pref_app_launcher_slot2",
+ "pref_app_launcher_slot3", "pref_app_launcher_slot4", "pref_app_launcher_slot5",
+ "pref_app_launcher_slot6", "pref_app_launcher_slot7"));
+ public static final String ACTION_PREF_APP_LAUNCHER_CHANGED = "gravitybox.intent.action.APP_LAUNCHER_CHANGED";
+ public static final String EXTRA_APP_LAUNCHER_SLOT = "appLauncherSlot";
+ public static final String EXTRA_APP_LAUNCHER_APP = "appLauncherApp";
+
+ private static final int REQ_LOCKSCREEN_BACKGROUND = 1024;
+ private static final int REQ_NOTIF_BG_IMAGE_PORTRAIT = 1025;
+ private static final int REQ_NOTIF_BG_IMAGE_LANDSCAPE = 1026;
+ private static final int REQ_CALLER_PHOTO = 1027;
+
private static final List rebootKeys = new ArrayList(Arrays.asList(
PREF_KEY_FIX_DATETIME_CRASH,
PREF_KEY_FIX_CALENDAR,
@@ -260,10 +505,62 @@ public class GravityBoxSettings extends Activity {
PREF_KEY_FIX_MMS_WAKELOCK,
PREF_KEY_MUSIC_VOLUME_STEPS,
PREF_KEY_HOLO_BG_SOLID_BLACK,
- PREF_KEY_NAVBAR_DISABLE,
- PREF_KEY_HOLO_BG_DITHER
+ PREF_KEY_HOLO_BG_DITHER,
+ PREF_KEY_SCREEN_DIM_LEVEL,
+ PREF_KEY_BRIGHTNESS_MASTER_SWITCH,
+ PREF_KEY_NAVBAR_OVERRIDE,
+ PREF_KEY_NAVBAR_ENABLE,
+ PREF_KEY_QS_TILE_BEHAVIOUR_OVERRIDE,
+ PREF_KEY_UNPLUG_TURNS_ON_SCREEN,
+ PREF_KEY_TM_MODE
));
+ private static final class SystemProperties {
+ public boolean hasGeminiSupport;
+ public boolean isTablet;
+ public boolean hasNavigationBar;
+ public boolean unplugTurnsOnScreen;
+
+ public SystemProperties(Bundle data) {
+ if (data.containsKey("hasGeminiSupport")) {
+ hasGeminiSupport = data.getBoolean("hasGeminiSupport");
+ }
+ if (data.containsKey("isTablet")) {
+ isTablet = data.getBoolean("isTablet");
+ }
+ if (data.containsKey("hasNavigationBar")) {
+ hasNavigationBar = data.getBoolean("hasNavigationBar");
+ }
+ if (data.containsKey("unplugTurnsOnScreen")) {
+ unplugTurnsOnScreen = data.getBoolean("unplugTurnsOnScreen");
+ }
+ }
+ }
+
+ private GravityBoxResultReceiver mReceiver;
+ private Handler mHandler;
+ private static SystemProperties sSystemProperties;
+ private Dialog mAlertDialog;
+ private ProgressDialog mProgressDialog;
+ private Runnable mGetSystemPropertiesTimeout = new Runnable() {
+ @Override
+ public void run() {
+ dismissProgressDialog();
+ AlertDialog.Builder builder = new AlertDialog.Builder(GravityBoxSettings.this)
+ .setTitle(R.string.app_name)
+ .setMessage(R.string.gb_startup_error)
+ .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ dialog.dismiss();
+ finish();
+ }
+ });
+ mAlertDialog = builder.create();
+ mAlertDialog.show();
+ }
+ };
+
@Override
protected void onCreate(Bundle savedInstanceState) {
// set Holo Dark theme if flag file exists
@@ -274,12 +571,69 @@ protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- if (savedInstanceState == null)
+ if (savedInstanceState == null || sSystemProperties == null) {
+ mReceiver = new GravityBoxResultReceiver(new Handler());
+ mReceiver.setReceiver(this);
+ Intent intent = new Intent();
+ intent.setAction(SystemPropertyProvider.ACTION_GET_SYSTEM_PROPERTIES);
+ intent.putExtra("receiver", mReceiver);
+ mProgressDialog = new ProgressDialog(this);
+ mProgressDialog.setIndeterminate(true);
+ mProgressDialog.setTitle(R.string.app_name);
+ mProgressDialog.setMessage(getString(R.string.gb_startup_progress));
+ mProgressDialog.setCancelable(false);
+ mProgressDialog.show();
+ mHandler = new Handler();
+ mHandler.postDelayed(mGetSystemPropertiesTimeout, 5000);
+ sendBroadcast(intent);
+ }
+ }
+
+ @Override
+ protected void onDestroy() {
+ if (mHandler != null) {
+ mHandler.removeCallbacks(mGetSystemPropertiesTimeout);
+ mHandler = null;
+ }
+ dismissProgressDialog();
+ dismissAlertDialog();
+
+ super.onDestroy();
+ }
+
+ @Override
+ public void onReceiveResult(int resultCode, Bundle resultData) {
+ if (mHandler != null) {
+ mHandler.removeCallbacks(mGetSystemPropertiesTimeout);
+ mHandler = null;
+ }
+ dismissProgressDialog();
+ Log.d("GravityBox", "result received: resultCode=" + resultCode);
+ if (resultCode == SystemPropertyProvider.RESULT_SYSTEM_PROPERTIES) {
+ sSystemProperties = new SystemProperties(resultData);
getFragmentManager().beginTransaction().replace(android.R.id.content, new PrefsFragment()).commit();
+ } else {
+ finish();
+ }
+ }
+
+ private void dismissProgressDialog() {
+ if (mProgressDialog != null && mProgressDialog.isShowing()) {
+ mProgressDialog.dismiss();
+ }
+ mProgressDialog = null;
+ }
+
+ private void dismissAlertDialog() {
+ if (mAlertDialog != null && mAlertDialog.isShowing()) {
+ mAlertDialog.dismiss();
+ }
+ mAlertDialog = null;
}
public static class PrefsFragment extends PreferenceFragment implements OnSharedPreferenceChangeListener {
private ListPreference mBatteryStyle;
+ private CheckBoxPreference mPrefBatteryPercent;
private ListPreference mLowBatteryWarning;
private MultiSelectListPreference mSignalIconAutohide;
private SharedPreferences mPrefs;
@@ -299,19 +653,39 @@ public static class PrefsFragment extends PreferenceFragment implements OnShared
private File wallpaperTemporary;
private File notifBgImagePortrait;
private File notifBgImageLandscape;
- private EditTextPreference mPrefBrightnessMin;
+ private PreferenceScreen mPrefCatHwKeyActions;
+ private PreferenceCategory mPrefCatHwKeyMenu;
private ListPreference mPrefHwKeyMenuLongpress;
private ListPreference mPrefHwKeyMenuDoubletap;
+ private PreferenceCategory mPrefCatHwKeyHome;
+ private ListPreference mPrefHwKeyHomeLongpress;
+ private CheckBoxPreference mPrefHwKeyHomeLongpressKeyguard;
+ private PreferenceCategory mPrefCatHwKeyBack;
private ListPreference mPrefHwKeyBackLongpress;
+ private ListPreference mPrefHwKeyBackDoubletap;
+ private PreferenceCategory mPrefCatHwKeyRecents;
+ private ListPreference mPrefHwKeyRecentsSingletap;
+ private ListPreference mPrefHwKeyRecentsLongpress;
+ private PreferenceCategory mPrefCatHwKeyVolume;
private ListPreference mPrefHwKeyDoubletapSpeed;
private ListPreference mPrefHwKeyKillDelay;
private ListPreference mPrefPhoneFlip;
+ private CheckBoxPreference mPrefSbFollowStockBattery;
private CheckBoxPreference mPrefSbIconColorEnable;
private ColorPickerPreference mPrefSbIconColor;
private ColorPickerPreference mPrefSbDaColor;
private PreferenceScreen mPrefCatFixes;
+ private CheckBoxPreference mPrefFixDateTimeCrash;
+ private CheckBoxPreference mPrefFixCallerIDPhone;
+ private CheckBoxPreference mPrefFixCallerIDMms;
+ private CheckBoxPreference mPrefFixMmsWakelock;
+ private CheckBoxPreference mPrefFixCalendar;
+ private CheckBoxPreference mPrefFixTtsSettings;
+ private CheckBoxPreference mPrefFixDevOpts;
private PreferenceScreen mPrefCatStatusbar;
private PreferenceScreen mPrefCatStatusbarQs;
+ private CheckBoxPreference mPrefAutoSwitchQs;
+ private ListPreference mPrefQuickPulldown;
private PreferenceScreen mPrefCatNotifDrawerStyle;
private ListPreference mPrefNotifBackground;
private ColorPickerPreference mPrefNotifColor;
@@ -320,13 +694,74 @@ public static class PrefsFragment extends PreferenceFragment implements OnShared
private ListPreference mPrefNotifColorMode;
private CheckBoxPreference mPrefDisableRoamingIndicators;
private ListPreference mPrefButtonBacklightMode;
- private CheckBoxPreference mPrefPieEnabled;
- private CheckBoxPreference mPrefPieNavBarDisabled;
+ private CheckBoxPreference mPrefButtonBacklightNotif;
+ private ListPreference mPrefPieEnabled;
+ private ListPreference mPrefPieCustomKey;
private CheckBoxPreference mPrefPieHwKeysDisabled;
+ private ColorPickerPreference mPrefPieColorBg;
+ private ColorPickerPreference mPrefPieColorFg;
+ private ColorPickerPreference mPrefPieColorOutline;
+ private ColorPickerPreference mPrefPieColorSelected;
+ private ColorPickerPreference mPrefPieColorText;
+ private Preference mPrefPieColorReset;
private CheckBoxPreference mPrefGbThemeDark;
private ListPreference mPrefRecentClear;
+ private ListPreference mPrefRambar;
private PreferenceScreen mPrefCatPhone;
private CheckBoxPreference mPrefRoamingWarningDisable;
+ private CheckBoxPreference mPrefBrightnessMasterSwitch;
+ private SeekBarPreference mPrefBrightnessMin;
+ private SeekBarPreference mPrefScreenDimLevel;
+ private AutoBrightnessDialogPreference mPrefAutoBrightness;
+ private PreferenceScreen mPrefCatLockscreen;
+ private PreferenceScreen mPrefCatDisplay;
+ private PreferenceScreen mPrefCatBrightness;
+ private CheckBoxPreference mPrefCrtOff;
+ private PreferenceScreen mPrefCatMedia;
+ private CheckBoxPreference mPrefSafeMediaVolume;
+ private ListPreference mPrefExpandedDesktop;
+ private PreferenceCategory mPrefCatNavbarKeys;
+ private PreferenceCategory mPrefCatNavbarColor;
+ private PreferenceCategory mPrefCatNavbarDimen;
+ private CheckBoxPreference mPrefNavbarEnable;
+ private CheckBoxPreference mPrefMusicVolumeSteps;
+ private AppPickerPreference[] mPrefLockscreenTargetsApp;
+ private SeekBarPreference mPrefLockscreenTargetsVerticalOffset;
+ private SeekBarPreference mPrefLockscreenTargetsHorizontalOffset;
+ private CheckBoxPreference mPrefMobileDataSlow2gDisable;
+ private PreferenceCategory mPrefCatPhoneTelephony;
+ private PreferenceCategory mPrefCatPhoneMessaging;
+ private PreferenceCategory mPrefCatPhoneMobileData;
+ private ListPreference mPrefNetworkModeTileMode;
+ private MultiSelectListPreference mPrefQsTileBehaviourOverride;
+ private ListPreference mPrefQsNetworkModeSimSlot;
+ private CheckBoxPreference mPrefSbColorSkipBattery;
+ private ListPreference mPrefSbSignalColorMode;
+ private CheckBoxPreference mPrefUnplugTurnsOnScreen;
+ private MultiSelectListPreference mPrefCallVibrations;
+ private Preference mPrefQsTileOrder;
+ private ListPreference mPrefSbClockDow;
+ private ListPreference mPrefSbLockPolicy;
+ private ListPreference mPrefDataTrafficPosition;
+ private ListPreference mPrefDataTrafficSize;
+ private CheckBoxPreference mPrefLinkVolumes;
+ private CheckBoxPreference mPrefVolumePanelExpandable;
+ private CheckBoxPreference mPrefVolumePanelFullyExpandable;
+ private CheckBoxPreference mPrefVolumePanelAutoexpand;
+ private CheckBoxPreference mPrefHomeDoubletapDisable;
+ private PreferenceScreen mPrefCatAppLauncher;
+ private AppPickerPreference[] mPrefAppLauncherSlot;
+ private File callerPhotoFile;
+ private CheckBoxPreference mPrefCallerUnknownPhotoEnable;
+ private Preference mPrefCallerUnknownPhoto;
+ private SeekBarPreference mPrefTmSbLauncher;
+ private SeekBarPreference mPrefTmSbLockscreen;
+ private SeekBarPreference mPrefTmNbLauncher;
+ private SeekBarPreference mPrefTmNbLockscreen;
+ private PreferenceScreen mPrefCatStatusbarColors;
+ private ColorPickerPreference mPrefSbIconColorSecondary;
+ private ColorPickerPreference mPrefSbDaColorSecondary;
+ private PreferenceScreen mPrefCatTransparencyManager;
@SuppressWarnings("deprecation")
@Override
@@ -341,11 +776,11 @@ public void onCreate(Bundle savedInstanceState) {
mPrefs = getPreferenceScreen().getSharedPreferences();
mBatteryStyle = (ListPreference) findPreference(PREF_KEY_BATTERY_STYLE);
+ mPrefBatteryPercent = (CheckBoxPreference) findPreference(PREF_KEY_BATTERY_PERCENT_TEXT);
mLowBatteryWarning = (ListPreference) findPreference(PREF_KEY_LOW_BATTERY_WARNING_POLICY);
mSignalIconAutohide = (MultiSelectListPreference) findPreference(PREF_KEY_SIGNAL_ICON_AUTOHIDE);
mQuickSettings = (MultiSelectListPreference) findPreference(PREF_KEY_QUICK_SETTINGS);
mStatusbarBgColor = (ColorPickerPreference) findPreference(PREF_KEY_STATUSBAR_BGCOLOR);
- mStatusbarBgColor.setAlphaSliderEnabled(true);
mPrefAboutGb = (Preference) findPreference(PREF_KEY_ABOUT_GRAVITYBOX);
@@ -373,7 +808,7 @@ public void onCreate(Bundle savedInstanceState) {
}
mPrefCatLockscreenBg =
- (PreferenceCategory) findPreference(PREF_CAT_KEY_LOCKSCREEN_BACCKGROUND);
+ (PreferenceCategory) findPreference(PREF_CAT_KEY_LOCKSCREEN_BACKGROUND);
mPrefLockscreenBg = (ListPreference) findPreference(PREF_KEY_LOCKSCREEN_BACKGROUND);
mPrefLockscreenBgColor =
(ColorPickerPreference) findPreference(PREF_KEY_LOCKSCREEN_BACKGROUND_COLOR);
@@ -384,24 +819,48 @@ public void onCreate(Bundle savedInstanceState) {
wallpaperTemporary = new File(getActivity().getCacheDir() + "/lockwallpaper.tmp");
notifBgImagePortrait = new File(getActivity().getFilesDir() + "/notifwallpaper");
notifBgImageLandscape = new File(getActivity().getFilesDir() + "/notifwallpaper_landscape");
+ callerPhotoFile = new File(getActivity().getFilesDir() + "/caller_photo");
- mPrefBrightnessMin = (EditTextPreference) findPreference(PREF_KEY_BRIGHTNESS_MIN);
-
+ mPrefCatHwKeyActions = (PreferenceScreen) findPreference(PREF_CAT_HWKEY_ACTIONS);
+ mPrefCatHwKeyMenu = (PreferenceCategory) findPreference(PREF_CAT_HWKEY_MENU);
mPrefHwKeyMenuLongpress = (ListPreference) findPreference(PREF_KEY_HWKEY_MENU_LONGPRESS);
mPrefHwKeyMenuDoubletap = (ListPreference) findPreference(PREF_KEY_HWKEY_MENU_DOUBLETAP);
+ mPrefCatHwKeyHome = (PreferenceCategory) findPreference(PREF_CAT_HWKEY_HOME);
+ mPrefHwKeyHomeLongpress = (ListPreference) findPreference(PREF_KEY_HWKEY_HOME_LONGPRESS);
+ mPrefHwKeyHomeLongpressKeyguard = (CheckBoxPreference) findPreference(PREF_KEY_HWKEY_HOME_LONGPRESS_KEYGUARD);
+ mPrefCatHwKeyBack = (PreferenceCategory) findPreference(PREF_CAT_HWKEY_BACK);
mPrefHwKeyBackLongpress = (ListPreference) findPreference(PREF_KEY_HWKEY_BACK_LONGPRESS);
+ mPrefHwKeyBackDoubletap = (ListPreference) findPreference(PREF_KEY_HWKEY_BACK_DOUBLETAP);
+ mPrefCatHwKeyRecents = (PreferenceCategory) findPreference(PREF_CAT_HWKEY_RECENTS);
+ mPrefHwKeyRecentsSingletap = (ListPreference) findPreference(PREF_KEY_HWKEY_RECENTS_SINGLETAP);
+ mPrefHwKeyRecentsLongpress = (ListPreference) findPreference(PREF_KEY_HWKEY_RECENTS_LONGPRESS);
mPrefHwKeyDoubletapSpeed = (ListPreference) findPreference(PREF_KEY_HWKEY_DOUBLETAP_SPEED);
mPrefHwKeyKillDelay = (ListPreference) findPreference(PREF_KEY_HWKEY_KILL_DELAY);
+ mPrefCatHwKeyVolume = (PreferenceCategory) findPreference(PREF_CAT_HWKEY_VOLUME);
+ mPrefHomeDoubletapDisable = (CheckBoxPreference) findPreference(PREF_KEY_HWKEY_HOME_DOUBLETAP_DISABLE);
mPrefPhoneFlip = (ListPreference) findPreference(PREF_KEY_PHONE_FLIP);
+ mPrefSbFollowStockBattery = (CheckBoxPreference) findPreference(PREF_KEY_STATUSBAR_COLOR_FOLLOW_STOCK_BATTERY);
mPrefSbIconColorEnable = (CheckBoxPreference) findPreference(PREF_KEY_STATUSBAR_ICON_COLOR_ENABLE);
mPrefSbIconColor = (ColorPickerPreference) findPreference(PREF_KEY_STATUSBAR_ICON_COLOR);
mPrefSbDaColor = (ColorPickerPreference) findPreference(PREF_KEY_STATUSBAR_DATA_ACTIVITY_COLOR);
+ mPrefSbColorSkipBattery = (CheckBoxPreference) findPreference(PREF_KEY_STATUSBAR_COLOR_SKIP_BATTERY);
+ mPrefSbSignalColorMode = (ListPreference) findPreference(PREF_KEY_STATUSBAR_SIGNAL_COLOR_MODE);
mPrefCatFixes = (PreferenceScreen) findPreference(PREF_CAT_KEY_FIXES);
+ mPrefFixDateTimeCrash = (CheckBoxPreference) findPreference(PREF_KEY_FIX_DATETIME_CRASH);
+ mPrefFixCallerIDPhone = (CheckBoxPreference) findPreference(PREF_KEY_FIX_CALLER_ID_PHONE);
+ mPrefFixCallerIDMms = (CheckBoxPreference) findPreference(PREF_KEY_FIX_CALLER_ID_MMS);
+ mPrefFixMmsWakelock = (CheckBoxPreference) findPreference(PREF_KEY_FIX_MMS_WAKELOCK);
+ mPrefFixCalendar = (CheckBoxPreference) findPreference(PREF_KEY_FIX_CALENDAR);
+ mPrefFixTtsSettings = (CheckBoxPreference) findPreference(PREF_KEY_FIX_TTS_SETTINGS);
+ mPrefFixDevOpts = (CheckBoxPreference) findPreference(PREF_KEY_FIX_DEV_OPTS);
mPrefCatStatusbar = (PreferenceScreen) findPreference(PREF_CAT_KEY_STATUSBAR);
mPrefCatStatusbarQs = (PreferenceScreen) findPreference(PREF_CAT_KEY_STATUSBAR_QS);
+ mPrefCatStatusbarColors = (PreferenceScreen) findPreference(PREF_CAT_KEY_STATUSBAR_COLORS);
+ mPrefAutoSwitchQs = (CheckBoxPreference) findPreference(PREF_KEY_QUICK_SETTINGS_AUTOSWITCH);
+ mPrefQuickPulldown = (ListPreference) findPreference(PREF_KEY_QUICK_PULLDOWN);
mPrefCatNotifDrawerStyle = (PreferenceScreen) findPreference(PREF_CAT_KEY_NOTIF_DRAWER_STYLE);
mPrefNotifBackground = (ListPreference) findPreference(PREF_KEY_NOTIF_BACKGROUND);
@@ -412,32 +871,284 @@ public void onCreate(Bundle savedInstanceState) {
mPrefDisableRoamingIndicators = (CheckBoxPreference) findPreference(PREF_KEY_DISABLE_ROAMING_INDICATORS);
mPrefButtonBacklightMode = (ListPreference) findPreference(PREF_KEY_BUTTON_BACKLIGHT_MODE);
+ mPrefButtonBacklightNotif = (CheckBoxPreference) findPreference(PREF_KEY_BUTTON_BACKLIGHT_NOTIFICATIONS);
- mPrefPieEnabled = (CheckBoxPreference) findPreference(PREF_KEY_PIE_CONTROL_ENABLE);
- mPrefPieNavBarDisabled = (CheckBoxPreference) findPreference(PREF_KEY_NAVBAR_DISABLE);
+ mPrefPieEnabled = (ListPreference) findPreference(PREF_KEY_PIE_CONTROL_ENABLE);
mPrefPieHwKeysDisabled = (CheckBoxPreference) findPreference(PREF_KEY_HWKEYS_DISABLE);
+ mPrefPieCustomKey = (ListPreference) findPreference(PREF_KEY_PIE_CONTROL_CUSTOM_KEY);
+ mPrefPieColorBg = (ColorPickerPreference) findPreference(PREF_KEY_PIE_COLOR_BG);
+ mPrefPieColorFg = (ColorPickerPreference) findPreference(PREF_KEY_PIE_COLOR_FG);
+ mPrefPieColorOutline = (ColorPickerPreference) findPreference(PREF_KEY_PIE_COLOR_OUTLINE);
+ mPrefPieColorSelected = (ColorPickerPreference) findPreference(PREF_KEY_PIE_COLOR_SELECTED);
+ mPrefPieColorText = (ColorPickerPreference) findPreference(PREF_KEY_PIE_COLOR_TEXT);
+ mPrefPieColorReset = (Preference) findPreference(PREF_KEY_PIE_COLOR_RESET);
mPrefGbThemeDark = (CheckBoxPreference) findPreference(PREF_KEY_GB_THEME_DARK);
File file = new File(getActivity().getFilesDir() + "/" + FILE_THEME_DARK_FLAG);
mPrefGbThemeDark.setChecked(file.exists());
mPrefRecentClear = (ListPreference) findPreference(PREF_KEY_RECENTS_CLEAR_ALL);
+ mPrefRambar = (ListPreference) findPreference(PREF_KEY_RAMBAR);
mPrefCatPhone = (PreferenceScreen) findPreference(PREF_CAT_KEY_PHONE);
mPrefRoamingWarningDisable = (CheckBoxPreference) findPreference(PREF_KEY_ROAMING_WARNING_DISABLE);
- // Remove MTK specific preferences for non-mtk device
+ mPrefBrightnessMasterSwitch = (CheckBoxPreference) findPreference(PREF_KEY_BRIGHTNESS_MASTER_SWITCH);
+ mPrefBrightnessMin = (SeekBarPreference) findPreference(PREF_KEY_BRIGHTNESS_MIN);
+ mPrefBrightnessMin.setMinimum(getResources().getInteger(R.integer.screen_brightness_min));
+ mPrefScreenDimLevel = (SeekBarPreference) findPreference(PREF_KEY_SCREEN_DIM_LEVEL);
+ mPrefScreenDimLevel.setMinimum(getResources().getInteger(R.integer.screen_brightness_dim_min));
+ mPrefAutoBrightness = (AutoBrightnessDialogPreference) findPreference(PREF_KEY_AUTOBRIGHTNESS);
+
+ mPrefCatLockscreen = (PreferenceScreen) findPreference(PREF_CAT_KEY_LOCKSCREEN);
+ mPrefCatDisplay = (PreferenceScreen) findPreference(PREF_CAT_KEY_DISPLAY);
+ mPrefCatBrightness = (PreferenceScreen) findPreference(PREF_CAT_KEY_BRIGHTNESS);
+ mPrefCrtOff = (CheckBoxPreference) findPreference(PREF_KEY_CRT_OFF_EFFECT);
+ mPrefUnplugTurnsOnScreen = (CheckBoxPreference) findPreference(PREF_KEY_UNPLUG_TURNS_ON_SCREEN);
+ mPrefCatMedia = (PreferenceScreen) findPreference(PREF_CAT_KEY_MEDIA);
+ mPrefSafeMediaVolume = (CheckBoxPreference) findPreference(PREF_KEY_SAFE_MEDIA_VOLUME);
+ mPrefMusicVolumeSteps = (CheckBoxPreference) findPreference(PREF_KEY_MUSIC_VOLUME_STEPS);
+ mPrefLinkVolumes = (CheckBoxPreference) findPreference(PREF_KEY_LINK_VOLUMES);
+ mPrefVolumePanelExpandable = (CheckBoxPreference) findPreference(PREF_KEY_VOLUME_PANEL_EXPANDABLE);
+ mPrefVolumePanelFullyExpandable = (CheckBoxPreference) findPreference(PREF_KEY_VOLUME_PANEL_FULLY_EXPANDABLE);
+ mPrefVolumePanelAutoexpand = (CheckBoxPreference) findPreference(PREF_KEY_VOLUME_PANEL_AUTOEXPAND);
+
+ mPrefExpandedDesktop = (ListPreference) findPreference(PREF_KEY_EXPANDED_DESKTOP);
+
+ mPrefCatNavbarKeys = (PreferenceCategory) findPreference(PREF_CAT_KEY_NAVBAR_KEYS);
+ mPrefCatNavbarColor = (PreferenceCategory) findPreference(PREF_CAT_KEY_NAVBAR_COLOR);
+ mPrefCatNavbarDimen = (PreferenceCategory) findPreference(PREF_CAT_KEY_NAVBAR_DIMEN);
+ mPrefNavbarEnable = (CheckBoxPreference) findPreference(PREF_KEY_NAVBAR_ENABLE);
+
+ mPrefLockscreenTargetsApp = new AppPickerPreference[5];
+ for (int i=0; i<=4; i++) {
+ mPrefLockscreenTargetsApp[i] = (AppPickerPreference) findPreference(
+ PREF_KEY_LOCKSCREEN_TARGETS_APP[i]);
+ String title = String.format(
+ getString(R.string.pref_lockscreen_ring_targets_app_title), (i+1));
+ mPrefLockscreenTargetsApp[i].setTitle(title);
+ mPrefLockscreenTargetsApp[i].setDialogTitle(title);
+ }
+ mPrefLockscreenTargetsVerticalOffset = (SeekBarPreference) findPreference(
+ PREF_KEY_LOCKSCREEN_TARGETS_VERTICAL_OFFSET);
+ mPrefLockscreenTargetsHorizontalOffset = (SeekBarPreference) findPreference(
+ PREF_KEY_LOCKSCREEN_TARGETS_HORIZONTAL_OFFSET);
+
+ mPrefCatPhoneTelephony = (PreferenceCategory) findPreference(PREF_CAT_KEY_PHONE_TELEPHONY);
+ mPrefCatPhoneMessaging = (PreferenceCategory) findPreference(PREF_CAT_KEY_PHONE_MESSAGING);
+ mPrefCatPhoneMobileData = (PreferenceCategory) findPreference(PREF_CAT_KEY_PHONE_MOBILE_DATA);
+ mPrefMobileDataSlow2gDisable = (CheckBoxPreference) findPreference(PREF_KEY_MOBILE_DATA_SLOW2G_DISABLE);
+ mPrefCallVibrations = (MultiSelectListPreference) findPreference(PREF_KEY_CALL_VIBRATIONS);
+ mPrefCallerUnknownPhotoEnable = (CheckBoxPreference) findPreference(PREF_KEY_CALLER_UNKNOWN_PHOTO_ENABLE);
+ mPrefCallerUnknownPhoto = (Preference) findPreference(PREF_KEY_CALLER_UNKNOWN_PHOTO);
+
+ mPrefNetworkModeTileMode = (ListPreference) findPreference(PREF_KEY_NETWORK_MODE_TILE_MODE);
+ mPrefQsTileBehaviourOverride =
+ (MultiSelectListPreference) findPreference(PREF_KEY_QS_TILE_BEHAVIOUR_OVERRIDE);
+ mPrefQsNetworkModeSimSlot = (ListPreference) findPreference(PREF_KEY_QS_NETWORK_MODE_SIM_SLOT);
+ mPrefQsTileOrder = (Preference) findPreference(PREF_KEY_QUICK_SETTINGS_TILE_ORDER);
+
+ mPrefSbClockDow = (ListPreference) findPreference(PREF_KEY_STATUSBAR_CLOCK_DOW);
+ mPrefSbLockPolicy = (ListPreference) findPreference(PREF_KEY_STATUSBAR_LOCK_POLICY);
+ mPrefDataTrafficPosition = (ListPreference) findPreference(PREF_KEY_DATA_TRAFFIC_POSITION);
+ mPrefDataTrafficSize = (ListPreference) findPreference(PREF_KEY_DATA_TRAFFIC_SIZE);
+
+ mPrefCatAppLauncher = (PreferenceScreen) findPreference(PREF_CAT_KEY_APP_LAUNCHER);
+ mPrefAppLauncherSlot = new AppPickerPreference[PREF_KEY_APP_LAUNCHER_SLOT.size()];
+ for (int i = 0; i < mPrefAppLauncherSlot.length; i++) {
+ AppPickerPreference appPref = new AppPickerPreference(getActivity(), null);
+ appPref.setKey(PREF_KEY_APP_LAUNCHER_SLOT.get(i));
+ appPref.setTitle(String.format(
+ getActivity().getString(R.string.pref_app_launcher_slot_title), i + 1));
+ appPref.setDialogTitle(appPref.getTitle());
+ appPref.setDefaultSummary(getActivity().getString(R.string.app_picker_none));
+ appPref.setSummary(getActivity().getString(R.string.app_picker_none));
+ mPrefAppLauncherSlot[i] = appPref;
+ mPrefCatAppLauncher.addPreference(mPrefAppLauncherSlot[i]);
+ }
+
+ mPrefCatTransparencyManager = (PreferenceScreen) findPreference(PREF_CAT_KEY_TRANSPARENCY_MANAGER);
+ mPrefTmSbLauncher = (SeekBarPreference) findPreference(PREF_KEY_TM_STATUSBAR_LAUNCHER);
+ mPrefTmSbLockscreen = (SeekBarPreference) findPreference(PREF_KEY_TM_STATUSBAR_LOCKSCREEN);
+ mPrefTmNbLauncher = (SeekBarPreference) findPreference(PREF_KEY_TM_NAVBAR_LAUNCHER);
+ mPrefTmNbLockscreen = (SeekBarPreference) findPreference(PREF_KEY_TM_NAVBAR_LOCKSCREEN);
+
+ mPrefSbIconColorSecondary = (ColorPickerPreference) findPreference(PREF_KEY_STATUSBAR_ICON_COLOR_SECONDARY);
+ mPrefSbDaColorSecondary = (ColorPickerPreference) findPreference(PREF_KEY_STATUSBAR_DATA_ACTIVITY_COLOR_SECONDARY);
+
+ // Remove Phone specific preferences on Tablet devices
+ if (sSystemProperties.isTablet) {
+ mPrefCatStatusbarQs.removePreference(mPrefAutoSwitchQs);
+ mPrefCatStatusbarQs.removePreference(mPrefQuickPulldown);
+ }
+
+ // Filter preferences according to feature availability
+ if (!Utils.hasFlash(getActivity())) {
+ mPrefCatHwKeyHome.removePreference(mPrefHwKeyHomeLongpressKeyguard);
+ }
+ if (!Utils.hasVibrator(getActivity())) {
+ mPrefCatPhoneTelephony.removePreference(mPrefCallVibrations);
+ }
+ if (!Utils.hasTelephonySupport(getActivity())) {
+ mPrefCatPhone.removePreference(mPrefCatPhoneTelephony);
+ mPrefCatMedia.removePreference(mPrefLinkVolumes);
+ mPrefCatFixes.removePreference(mPrefFixCallerIDPhone);
+ }
+ if (!isAppInstalled(APP_MESSAGING)) {
+ mPrefCatPhone.removePreference(mPrefCatPhoneMessaging);
+ mPrefCatFixes.removePreference(mPrefFixCallerIDMms);
+ mPrefCatFixes.removePreference(mPrefFixMmsWakelock);
+ }
+ if (Utils.isWifiOnly(getActivity())) {
+ // Remove preferences that don't apply to wifi-only devices
+ getPreferenceScreen().removePreference(mPrefCatPhone);
+ mPrefCatStatusbarQs.removePreference(mPrefNetworkModeTileMode);
+ mPrefCatStatusbar.removePreference(mSignalIconAutohide);
+ mPrefCatStatusbar.removePreference(mPrefDisableRoamingIndicators);
+ mPrefCatPhoneMobileData.removePreference(mPrefMobileDataSlow2gDisable);
+ mPrefCatStatusbarQs.removePreference(mPrefQsNetworkModeSimSlot);
+ mPrefCatFixes.removePreference(mPrefFixCallerIDPhone);
+ mPrefCatFixes.removePreference(mPrefFixCallerIDMms);
+ mPrefCatFixes.removePreference(mPrefFixMmsWakelock);
+ }
+
+ // Remove MTK specific preferences for non-MTK devices
if (!Utils.isMtkDevice()) {
getPreferenceScreen().removePreference(mPrefCatFixes);
mPrefCatStatusbar.removePreference(mSignalIconAutohide);
mPrefCatStatusbar.removePreference(mPrefDisableRoamingIndicators);
- mQuickSettings.setEntries(R.array.qs_tile_aosp_entries);
- mQuickSettings.setEntryValues(R.array.qs_tile_aosp_values);
- mPrefCatPhone.removePreference(mPrefRoamingWarningDisable);
+ mQuickSettings.setEntries(Build.VERSION.SDK_INT > 18 ?
+ R.array.qs_tile_aosp_entries_kk : R.array.qs_tile_aosp_entries);
+ mQuickSettings.setEntryValues(Build.VERSION.SDK_INT > 18 ?
+ R.array.qs_tile_aosp_values_kk : R.array.qs_tile_aosp_values);
+ mPrefCatPhoneTelephony.removePreference(mPrefRoamingWarningDisable);
+ mPrefCatStatusbarQs.removePreference(mPrefQsNetworkModeSimSlot);
} else {
+ // Remove Gemini specific preferences for non-Gemini MTK devices
+ if (!sSystemProperties.hasGeminiSupport) {
+ mPrefCatStatusbar.removePreference(mSignalIconAutohide);
+ mPrefCatStatusbar.removePreference(mPrefDisableRoamingIndicators);
+ mPrefCatPhoneMobileData.removePreference(mPrefMobileDataSlow2gDisable);
+ mPrefCatStatusbarQs.removePreference(mPrefQsNetworkModeSimSlot);
+ mPrefCatStatusbarColors.removePreference(mPrefSbIconColorSecondary);
+ mPrefCatStatusbarColors.removePreference(mPrefSbDaColorSecondary);
+ }
+
+ // Remove preferences not needed for MT6572
+ if (Utils.isMt6572Device()) {
+ mPrefCatStatusbar.removePreference(mSignalIconAutohide);
+ }
+
+ // Remove preferences not needed for ZTE V987
+ if (Build.MODEL.contains("V987") && Build.DISPLAY.contains("ZTE-CN-9B18D-P188F04")) {
+ mPrefCatFixes.removePreference(mPrefFixDateTimeCrash);
+ mPrefCatFixes.removePreference(mPrefFixTtsSettings);
+ mPrefCatFixes.removePreference(mPrefFixDevOpts);
+ }
+
mQuickSettings.setEntries(R.array.qs_tile_entries);
mQuickSettings.setEntryValues(R.array.qs_tile_values);
+ mPrefCatStatusbarQs.removePreference(mPrefQsTileBehaviourOverride);
+ }
+
+ // Remove preferences not compatible with Android 4.1
+ if (Build.VERSION.SDK_INT < 17) {
+ getPreferenceScreen().removePreference(mPrefCatLockscreen);
+ mPrefCatStatusbar.removePreference(mPrefCatStatusbarQs);
+ mPrefCatStatusbar.removePreference(mPrefCatNotifDrawerStyle);
+ mPrefCatDisplay.removePreference(mPrefCatBrightness);
+ mPrefCatDisplay.removePreference(mPrefCrtOff);
+ mPrefCatMedia.removePreference(mPrefSafeMediaVolume);
+ }
+
+ // Remove preferences not compatible with Android < 4.3+
+ if (Build.VERSION.SDK_INT < 18) {
+ mPrefCatHwKeyHome.removePreference(mPrefHomeDoubletapDisable);
+ }
+
+ // Remove preferences not compatible with KitKat
+ if (Build.VERSION.SDK_INT > 18) {
+ getPreferenceScreen().removePreference(mPrefCatTransparencyManager);
+ mPrefCatDisplay.removePreference(mPrefButtonBacklightNotif);
+ mPrefCatStatusbarColors.removePreference(mPrefSbFollowStockBattery);
+ mPrefCatStatusbarColors.removePreference(mStatusbarBgColor);
+ getPreferenceScreen().removePreference(mPrefCatPhone);
+ }
+
+ // Remove more music volume steps option if necessary
+ if (!Utils.shouldAllowMoreVolumeSteps()) {
+ mPrefs.edit().putBoolean(PREF_KEY_MUSIC_VOLUME_STEPS, false).commit();
+ mPrefCatMedia.removePreference(mPrefMusicVolumeSteps);
+ }
+
+ // Remove tiles based on device features
+ List qsEntries = new ArrayList(Arrays.asList(
+ mQuickSettings.getEntries()));
+ List qsEntryValues = new ArrayList(Arrays.asList(
+ mQuickSettings.getEntryValues()));
+ Set qsPrefs = mPrefs.getStringSet(PREF_KEY_QUICK_SETTINGS, null);
+ if (!Utils.hasFlash(getActivity())) {
+ qsEntries.remove(getString(R.string.qs_tile_torch));
+ qsEntryValues.remove("torch_tileview");
+ if (qsPrefs != null && qsPrefs.contains("torch_tileview")) {
+ qsPrefs.remove("torch_tileview");
+ }
+ }
+ if (!Utils.hasGPS(getActivity())) {
+ qsEntries.remove(getString(R.string.qs_tile_gps));
+ qsEntryValues.remove("gps_tileview");
+ if (Utils.isMtkDevice()) {
+ qsEntries.remove(getString(R.string.qs_tile_gps_alt));
+ qsEntryValues.remove("gps_textview");
+ }
+ if (qsPrefs != null) {
+ if (qsPrefs.contains("gps_tileview")) qsPrefs.remove("gps_tileview");
+ if (qsPrefs.contains("gps_textview")) qsPrefs.remove("gps_textview");
+ }
+ }
+ if (Utils.isWifiOnly(getActivity())) {
+ qsEntries.remove(getString(R.string.qs_tile_mobile_data));
+ qsEntries.remove(getString(R.string.qs_tile_network_mode));
+ qsEntryValues.remove("data_conn_textview");
+ qsEntryValues.remove("network_mode_tileview");
+ if (qsPrefs != null) {
+ if (qsPrefs.contains("data_conn_textview")) qsPrefs.remove("data_conn_textview");
+ if (qsPrefs.contains("network_mode_tileview")) qsPrefs.remove("network_mode_tileview");
+ }
+ }
+ // and update saved prefs in case it was previously checked in previous versions
+ mPrefs.edit().putStringSet(PREF_KEY_QUICK_SETTINGS, qsPrefs).commit();
+ mQuickSettings.setEntries(qsEntries.toArray(new CharSequence[qsEntries.size()]));
+ mQuickSettings.setEntryValues(qsEntryValues.toArray(new CharSequence[qsEntryValues.size()]));
+
+ // Remove actions for HW keys based on device features
+ mPrefHwKeyMenuLongpress.setEntries(R.array.hwkey_action_entries);
+ mPrefHwKeyMenuLongpress.setEntryValues(R.array.hwkey_action_values);
+ List actEntries = new ArrayList(Arrays.asList(
+ mPrefHwKeyMenuLongpress.getEntries()));
+ List actEntryValues = new ArrayList(Arrays.asList(
+ mPrefHwKeyMenuLongpress.getEntryValues()));
+ if (!Utils.hasFlash(getActivity())) {
+ actEntries.remove(getString(R.string.hwkey_action_torch));
+ actEntryValues.remove("11");
}
+ CharSequence[] actionEntries = actEntries.toArray(new CharSequence[actEntries.size()]);
+ CharSequence[] actionEntryValues = actEntryValues.toArray(new CharSequence[actEntryValues.size()]);
+ mPrefHwKeyMenuLongpress.setEntries(actionEntries);
+ mPrefHwKeyMenuLongpress.setEntryValues(actionEntryValues);
+ // other preferences have the exact same entries and entry values
+ mPrefHwKeyMenuDoubletap.setEntries(actionEntries);
+ mPrefHwKeyMenuDoubletap.setEntryValues(actionEntryValues);
+ mPrefHwKeyHomeLongpress.setEntries(actionEntries);
+ mPrefHwKeyHomeLongpress.setEntryValues(actionEntryValues);
+ mPrefHwKeyBackLongpress.setEntries(actionEntries);
+ mPrefHwKeyBackLongpress.setEntryValues(actionEntryValues);
+ mPrefHwKeyBackDoubletap.setEntries(actionEntries);
+ mPrefHwKeyBackDoubletap.setEntryValues(actionEntryValues);
+ mPrefHwKeyRecentsSingletap.setEntries(actionEntries);
+ mPrefHwKeyRecentsSingletap.setEntryValues(actionEntryValues);
+ mPrefHwKeyRecentsLongpress.setEntries(actionEntries);
+ mPrefHwKeyRecentsLongpress.setEntryValues(actionEntryValues);
setDefaultValues();
}
@@ -463,15 +1174,28 @@ public void onPause() {
}
private void setDefaultValues() {
- if (mPrefs.getStringSet(PREF_KEY_QUICK_SETTINGS, null) == null) {
+ if (mPrefs.getStringSet(PREF_KEY_QUICK_SETTINGS, null) == null ||
+ (Build.VERSION.SDK_INT > 18 && !mPrefs.getBoolean("qs_tiles_kitkat_set", false))) {
Editor e = mPrefs.edit();
- Set defVal = new HashSet(
- Arrays.asList(getResources().getStringArray(
- Utils.isMtkDevice() ? R.array.qs_tile_values : R.array.qs_tile_aosp_values)));
+ String[] values = getResources().getStringArray(
+ Utils.isMtkDevice() ? R.array.qs_tile_values :
+ Build.VERSION.SDK_INT > 18 ?
+ R.array.qs_tile_aosp_values_kk : R.array.qs_tile_aosp_values);
+ Set defVal = new HashSet(Arrays.asList(values));
e.putStringSet(PREF_KEY_QUICK_SETTINGS, defVal);
+ e.putString(TileOrderActivity.PREF_KEY_TILE_ORDER, Utils.join(values, ","));
+ e.putBoolean("qs_tiles_kitkat_set", true);
e.commit();
mQuickSettings.setValues(defVal);
}
+
+ boolean value = mPrefs.getBoolean(PREF_KEY_NAVBAR_ENABLE, sSystemProperties.hasNavigationBar);
+ mPrefs.edit().putBoolean(PREF_KEY_NAVBAR_ENABLE, value).commit();
+ mPrefNavbarEnable.setChecked(value);
+
+ value = mPrefs.getBoolean(PREF_KEY_UNPLUG_TURNS_ON_SCREEN, sSystemProperties.unplugTurnsOnScreen);
+ mPrefs.edit().putBoolean(PREF_KEY_UNPLUG_TURNS_ON_SCREEN, value).commit();
+ mPrefUnplugTurnsOnScreen.setChecked(value);
}
private void updatePreferences(String key) {
@@ -523,10 +1247,26 @@ private void updatePreferences(String key) {
mPrefHwKeyMenuDoubletap.setSummary(mPrefHwKeyMenuDoubletap.getEntry());
}
+ if (key == null || key.equals(PREF_KEY_HWKEY_HOME_LONGPRESS)) {
+ mPrefHwKeyHomeLongpress.setSummary(mPrefHwKeyHomeLongpress.getEntry());
+ }
+
if (key == null || key.equals(PREF_KEY_HWKEY_BACK_LONGPRESS)) {
mPrefHwKeyBackLongpress.setSummary(mPrefHwKeyBackLongpress.getEntry());
}
+ if (key == null || key.equals(PREF_KEY_HWKEY_BACK_DOUBLETAP)) {
+ mPrefHwKeyBackDoubletap.setSummary(mPrefHwKeyBackDoubletap.getEntry());
+ }
+
+ if (key == null || key.equals(PREF_KEY_HWKEY_RECENTS_SINGLETAP)) {
+ mPrefHwKeyRecentsSingletap.setSummary(mPrefHwKeyRecentsSingletap.getEntry());
+ }
+
+ if (key == null || key.equals(PREF_KEY_HWKEY_RECENTS_LONGPRESS)) {
+ mPrefHwKeyRecentsLongpress.setSummary(mPrefHwKeyRecentsLongpress.getEntry());
+ }
+
if (key == null || key.equals(PREF_KEY_HWKEY_DOUBLETAP_SPEED)) {
mPrefHwKeyDoubletapSpeed.setSummary(getString(R.string.pref_hwkey_doubletap_speed_summary)
+ " (" + mPrefHwKeyDoubletapSpeed.getEntry() + ")");
@@ -545,6 +1285,10 @@ private void updatePreferences(String key) {
if (key == null || key.equals(PREF_KEY_STATUSBAR_ICON_COLOR_ENABLE)) {
mPrefSbIconColor.setEnabled(mPrefSbIconColorEnable.isChecked());
mPrefSbDaColor.setEnabled(mPrefSbIconColorEnable.isChecked());
+ mPrefSbColorSkipBattery.setEnabled(mPrefSbIconColorEnable.isChecked());
+ mPrefSbSignalColorMode.setEnabled(mPrefSbIconColorEnable.isChecked());
+ mPrefSbIconColorSecondary.setEnabled(mPrefSbIconColorEnable.isChecked());
+ mPrefSbDaColorSecondary.setEnabled(mPrefSbIconColorEnable.isChecked());
}
if (key == null || key.equals(PREF_KEY_NOTIF_BACKGROUND)) {
@@ -573,15 +1317,9 @@ private void updatePreferences(String key) {
}
if (key == null || key.equals(PREF_KEY_PIE_CONTROL_ENABLE)) {
- if (!mPrefPieEnabled.isChecked()) {
- if (mPrefPieNavBarDisabled.isChecked()) {
- Editor e = mPrefs.edit();
- e.putBoolean(PREF_KEY_NAVBAR_DISABLE, false);
- e.commit();
- mPrefPieNavBarDisabled.setChecked(false);
- Toast.makeText(getActivity(), getString(
- R.string.reboot_required), Toast.LENGTH_SHORT).show();
- }
+ final int pieMode =
+ Integer.valueOf(mPrefs.getString(PREF_KEY_PIE_CONTROL_ENABLE, "0"));
+ if (pieMode == 0) {
if (mPrefPieHwKeysDisabled.isChecked()) {
Editor e = mPrefs.edit();
e.putBoolean(PREF_KEY_HWKEYS_DISABLE, false);
@@ -589,16 +1327,113 @@ private void updatePreferences(String key) {
mPrefPieHwKeysDisabled.setChecked(false);
}
mPrefPieHwKeysDisabled.setEnabled(false);
- mPrefPieNavBarDisabled.setEnabled(false);
} else {
- mPrefPieNavBarDisabled.setEnabled(true);
mPrefPieHwKeysDisabled.setEnabled(true);
}
+ mPrefPieEnabled.setSummary(mPrefPieEnabled.getEntry());
}
if (key == null || key.equals(PREF_KEY_RECENTS_CLEAR_ALL)) {
mPrefRecentClear.setSummary(mPrefRecentClear.getEntry());
}
+
+ if (key == null || key.equals(PREF_KEY_RAMBAR)) {
+ mPrefRambar.setSummary(mPrefRambar.getEntry());
+ }
+
+ if (key == null || key.equals(PREF_KEY_BRIGHTNESS_MASTER_SWITCH)) {
+ final boolean enabled = mPrefBrightnessMasterSwitch.isChecked();
+ mPrefBrightnessMin.setEnabled(enabled);
+ mPrefScreenDimLevel.setEnabled(enabled);
+ mPrefAutoBrightness.setEnabled(enabled);
+ }
+
+ if (key == null || key.equals(PREF_KEY_EXPANDED_DESKTOP)) {
+ mPrefExpandedDesktop.setSummary(mPrefExpandedDesktop.getEntry());
+ }
+
+ if (key == null || key.equals(PREF_KEY_NAVBAR_OVERRIDE)
+ || key.equals(PREF_KEY_NAVBAR_ENABLE)) {
+ final boolean override = mPrefs.getBoolean(PREF_KEY_NAVBAR_OVERRIDE, false);
+ mPrefNavbarEnable.setEnabled(override);
+ mPrefCatNavbarKeys.setEnabled(override && mPrefNavbarEnable.isChecked());
+ mPrefCatNavbarColor.setEnabled(override && mPrefNavbarEnable.isChecked());
+ mPrefCatNavbarDimen.setEnabled(override && mPrefNavbarEnable.isChecked());
+ }
+
+ if (key == null || key.equals(PREF_KEY_LOCKSCREEN_TARGETS_ENABLE)) {
+ final boolean enabled = mPrefs.getBoolean(PREF_KEY_LOCKSCREEN_TARGETS_ENABLE, false);
+ for(Preference p : mPrefLockscreenTargetsApp) {
+ p.setEnabled(enabled);
+ }
+ }
+ mPrefLockscreenTargetsVerticalOffset.setEnabled(true);
+ mPrefLockscreenTargetsHorizontalOffset.setEnabled(true);
+
+ if (key == null || key.equals(PREF_KEY_NETWORK_MODE_TILE_MODE)) {
+ mPrefNetworkModeTileMode.setSummary(mPrefNetworkModeTileMode.getEntry());
+ }
+
+ if (key == null || key.equals(PREF_KEY_QS_NETWORK_MODE_SIM_SLOT)) {
+ mPrefQsNetworkModeSimSlot.setSummary(
+ String.format(getString(R.string.pref_qs_network_mode_sim_slot_summary),
+ mPrefQsNetworkModeSimSlot.getEntry()));
+ }
+
+ if (Utils.isMtkDevice()) {
+ final boolean mtkBatteryPercent = Settings.Secure.getInt(getActivity().getContentResolver(),
+ ModBatteryStyle.SETTING_MTK_BATTERY_PERCENTAGE, 0) == 1;
+ if (mtkBatteryPercent) {
+ mPrefs.edit().putBoolean(PREF_KEY_BATTERY_PERCENT_TEXT, false).commit();
+ mPrefBatteryPercent.setChecked(false);
+ Intent intent = new Intent();
+ intent.setAction(ACTION_PREF_BATTERY_STYLE_CHANGED);
+ intent.putExtra("batteryPercent", false);
+ getActivity().sendBroadcast(intent);
+ }
+ mPrefBatteryPercent.setEnabled(!mtkBatteryPercent);
+ }
+
+ if (key == null || key.equals(PREF_KEY_STATUSBAR_CLOCK_DOW)) {
+ mPrefSbClockDow.setSummary(mPrefSbClockDow.getEntry());
+ }
+
+ if (key == null || key.equals(PREF_KEY_STATUSBAR_LOCK_POLICY)) {
+ mPrefSbLockPolicy.setSummary(mPrefSbLockPolicy.getEntry());
+ }
+
+ if (key == null || key.equals(PREF_KEY_DATA_TRAFFIC_POSITION)) {
+ mPrefDataTrafficPosition.setSummary(mPrefDataTrafficPosition.getEntry());
+ }
+
+ if (key == null || key.equals(PREF_KEY_DATA_TRAFFIC_SIZE)) {
+ mPrefDataTrafficSize.setSummary(mPrefDataTrafficSize.getEntry());
+ }
+
+ if (key == null || key.equals(PREF_KEY_VOLUME_PANEL_EXPANDABLE)) {
+ mPrefVolumePanelAutoexpand.setEnabled(mPrefVolumePanelExpandable.isChecked());
+ mPrefVolumePanelFullyExpandable.setEnabled(mPrefVolumePanelExpandable.isChecked());
+ }
+
+ if (key == null || key.equals(PREF_KEY_STATUSBAR_SIGNAL_COLOR_MODE)) {
+ mPrefSbSignalColorMode.setSummary(mPrefSbSignalColorMode.getEntry());
+ }
+
+ if (key == null || key.equals(PREF_KEY_PIE_CONTROL_CUSTOM_KEY)) {
+ mPrefPieCustomKey.setSummary(mPrefPieCustomKey.getEntry());
+ }
+
+ if (key == null || key.equals(PREF_KEY_CALLER_UNKNOWN_PHOTO_ENABLE)) {
+ mPrefCallerUnknownPhoto.setEnabled(mPrefCallerUnknownPhotoEnable.isChecked());
+ }
+
+ if (key == null || key.equals(PREF_KEY_TM_MODE)) {
+ final int tmMode = Integer.valueOf(mPrefs.getString(PREF_KEY_TM_MODE, "3"));
+ mPrefTmSbLauncher.setEnabled((tmMode & TransparencyManager.MODE_STATUSBAR) != 0);
+ mPrefTmSbLockscreen.setEnabled((tmMode & TransparencyManager.MODE_STATUSBAR) != 0);
+ mPrefTmNbLauncher.setEnabled((tmMode & TransparencyManager.MODE_NAVBAR) != 0);
+ mPrefTmNbLockscreen.setEnabled((tmMode & TransparencyManager.MODE_NAVBAR) != 0);
+ }
}
@Override
@@ -619,8 +1454,7 @@ public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
intent.putExtra("autohidePrefs", autohidePrefs);
} else if (key.equals(PREF_KEY_QUICK_SETTINGS)) {
intent.setAction(ACTION_PREF_QUICKSETTINGS_CHANGED);
- String[] qsPrefs = mQuickSettings.getValues().toArray(new String[0]);
- intent.putExtra(EXTRA_QS_PREFS, qsPrefs);
+ intent.putExtra(EXTRA_QS_PREFS, TileOrderActivity.updateTileList(prefs));
} else if (key.equals(PREF_KEY_QUICK_SETTINGS_TILES_PER_ROW)) {
intent.setAction(ACTION_PREF_QUICKSETTINGS_CHANGED);
intent.putExtra(EXTRA_QS_COLS, Integer.valueOf(
@@ -633,9 +1467,17 @@ public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
intent.setAction(ACTION_PREF_QUICKSETTINGS_CHANGED);
intent.putExtra(EXTRA_QUICK_PULLDOWN, Integer.valueOf(
prefs.getString(PREF_KEY_QUICK_PULLDOWN, "0")));
+ } else if (key.equals(PREF_KEY_QUICK_SETTINGS_TILE_STYLE)) {
+ intent.setAction(ACTION_PREF_QUICKSETTINGS_CHANGED);
+ intent.putExtra(EXTRA_QS_TILE_STYLE, Integer.valueOf(
+ prefs.getString(PREF_KEY_QUICK_SETTINGS_TILE_STYLE, "0")));
} else if (key.equals(PREF_KEY_STATUSBAR_BGCOLOR)) {
intent.setAction(ACTION_PREF_STATUSBAR_COLOR_CHANGED);
intent.putExtra(EXTRA_SB_BG_COLOR, prefs.getInt(PREF_KEY_STATUSBAR_BGCOLOR, Color.BLACK));
+ } else if (key.equals(PREF_KEY_STATUSBAR_COLOR_FOLLOW_STOCK_BATTERY)) {
+ intent.setAction(ACTION_PREF_STATUSBAR_COLOR_CHANGED);
+ intent.putExtra(EXTRA_SB_COLOR_FOLLOW, prefs.getBoolean(
+ PREF_KEY_STATUSBAR_COLOR_FOLLOW_STOCK_BATTERY, false));
} else if (key.equals(PREF_KEY_STATUSBAR_ICON_COLOR_ENABLE)) {
intent.setAction(ACTION_PREF_STATUSBAR_COLOR_CHANGED);
intent.putExtra(EXTRA_SB_ICON_COLOR_ENABLE,
@@ -644,18 +1486,64 @@ public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
intent.setAction(ACTION_PREF_STATUSBAR_COLOR_CHANGED);
intent.putExtra(EXTRA_SB_ICON_COLOR, prefs.getInt(PREF_KEY_STATUSBAR_ICON_COLOR,
getResources().getInteger(R.integer.COLOR_HOLO_BLUE_LIGHT)));
+ } else if (key.equals(PREF_KEY_STATUS_ICON_STYLE)) {
+ intent.setAction(ACTION_PREF_STATUSBAR_COLOR_CHANGED);
+ intent.putExtra(EXTRA_SB_ICON_STYLE, Integer.valueOf(
+ prefs.getString(PREF_KEY_STATUS_ICON_STYLE, "0")));
+ } else if (key.equals(PREF_KEY_STATUSBAR_ICON_COLOR_SECONDARY)) {
+ intent.setAction(ACTION_PREF_STATUSBAR_COLOR_CHANGED);
+ intent.putExtra(EXTRA_SB_ICON_COLOR_SECONDARY,
+ prefs.getInt(PREF_KEY_STATUSBAR_ICON_COLOR_SECONDARY,
+ getResources().getInteger(R.integer.COLOR_HOLO_BLUE_LIGHT)));
} else if (key.equals(PREF_KEY_STATUSBAR_DATA_ACTIVITY_COLOR)) {
intent.setAction(ACTION_PREF_STATUSBAR_COLOR_CHANGED);
intent.putExtra(EXTRA_SB_DATA_ACTIVITY_COLOR,
prefs.getInt(PREF_KEY_STATUSBAR_DATA_ACTIVITY_COLOR, Color.WHITE));
+ } else if (key.equals(PREF_KEY_STATUSBAR_DATA_ACTIVITY_COLOR_SECONDARY)) {
+ intent.setAction(ACTION_PREF_STATUSBAR_COLOR_CHANGED);
+ intent.putExtra(EXTRA_SB_DATA_ACTIVITY_COLOR_SECONDARY,
+ prefs.getInt(PREF_KEY_STATUSBAR_DATA_ACTIVITY_COLOR_SECONDARY, Color.WHITE));
+ } else if (key.equals(PREF_KEY_STATUSBAR_COLOR_SKIP_BATTERY)) {
+ intent.setAction(ACTION_PREF_STATUSBAR_COLOR_CHANGED);
+ intent.putExtra(EXTRA_SB_COLOR_SKIP_BATTERY,
+ prefs.getBoolean(PREF_KEY_STATUSBAR_COLOR_SKIP_BATTERY, false));
+ } else if (key.equals(PREF_KEY_STATUSBAR_SIGNAL_COLOR_MODE)) {
+ intent.setAction(ACTION_PREF_STATUSBAR_COLOR_CHANGED);
+ intent.putExtra(EXTRA_SB_SIGNAL_COLOR_MODE,
+ Integer.valueOf(prefs.getString(PREF_KEY_STATUSBAR_SIGNAL_COLOR_MODE, "0")));
+ } else if (key.equals(PREF_KEY_TM_STATUSBAR_LAUNCHER)) {
+ intent.setAction(ACTION_PREF_STATUSBAR_COLOR_CHANGED);
+ intent.putExtra(EXTRA_TM_SB_LAUNCHER, prefs.getInt(PREF_KEY_TM_STATUSBAR_LAUNCHER, 0));
+ } else if (key.equals(PREF_KEY_TM_STATUSBAR_LOCKSCREEN)) {
+ intent.setAction(ACTION_PREF_STATUSBAR_COLOR_CHANGED);
+ intent.putExtra(EXTRA_TM_SB_LOCKSCREEN, prefs.getInt(PREF_KEY_TM_STATUSBAR_LOCKSCREEN, 0));
+ } else if (key.equals(PREF_KEY_TM_NAVBAR_LAUNCHER)) {
+ intent.setAction(ACTION_PREF_STATUSBAR_COLOR_CHANGED);
+ intent.putExtra(EXTRA_TM_NB_LAUNCHER, prefs.getInt(PREF_KEY_TM_NAVBAR_LAUNCHER, 0));
+ } else if (key.equals(PREF_KEY_TM_NAVBAR_LOCKSCREEN)) {
+ intent.setAction(ACTION_PREF_STATUSBAR_COLOR_CHANGED);
+ intent.putExtra(EXTRA_TM_NB_LOCKSCREEN, prefs.getInt(PREF_KEY_TM_NAVBAR_LOCKSCREEN, 0));
} else if (key.equals(PREF_KEY_STATUSBAR_CENTER_CLOCK)) {
- intent.setAction(ACTION_PREF_CENTER_CLOCK_CHANGED);
+ intent.setAction(ACTION_PREF_CLOCK_CHANGED);
intent.putExtra(EXTRA_CENTER_CLOCK,
prefs.getBoolean(PREF_KEY_STATUSBAR_CENTER_CLOCK, false));
} else if (key.equals(PREF_KEY_STATUSBAR_CLOCK_DOW)) {
- intent.setAction(ACTION_PREF_CLOCK_DOW);
- intent.putExtra(EXTRA_CLOCK_DOW,
- prefs.getBoolean(PREF_KEY_STATUSBAR_CLOCK_DOW, false));
+ intent.setAction(ACTION_PREF_CLOCK_CHANGED);
+ intent.putExtra(EXTRA_CLOCK_DOW, Integer.valueOf(
+ prefs.getString(PREF_KEY_STATUSBAR_CLOCK_DOW, "0")));
+ } else if (key.equals(PREF_KEY_STATUSBAR_CLOCK_AMPM_HIDE)) {
+ intent.setAction(ACTION_PREF_CLOCK_CHANGED);
+ intent.putExtra(EXTRA_AMPM_HIDE, prefs.getBoolean(
+ PREF_KEY_STATUSBAR_CLOCK_AMPM_HIDE, false));
+ } else if (key.equals(PREF_KEY_STATUSBAR_CLOCK_HIDE)) {
+ intent.setAction(ACTION_PREF_CLOCK_CHANGED);
+ intent.putExtra(EXTRA_CLOCK_HIDE, prefs.getBoolean(PREF_KEY_STATUSBAR_CLOCK_HIDE, false));
+ } else if (key.equals(PREF_KEY_STATUSBAR_CLOCK_LINK)) {
+ intent.setAction(ACTION_PREF_CLOCK_CHANGED);
+ intent.putExtra(EXTRA_CLOCK_LINK, prefs.getString(PREF_KEY_STATUSBAR_CLOCK_LINK, null));
+ } else if (key.equals(PREF_KEY_ALARM_ICON_HIDE)) {
+ intent.setAction(ACTION_PREF_CLOCK_CHANGED);
+ intent.putExtra(EXTRA_ALARM_HIDE, prefs.getBoolean(PREF_KEY_ALARM_ICON_HIDE, false));
} else if (key.equals(PREF_KEY_SAFE_MEDIA_VOLUME)) {
intent.setAction(ACTION_PREF_SAFE_MEDIA_VOLUME_CHANGED);
intent.putExtra(EXTRA_SAFE_MEDIA_VOLUME_ENABLED,
@@ -668,10 +1556,34 @@ public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
intent.setAction(ACTION_PREF_HWKEY_MENU_DOUBLETAP_CHANGED);
intent.putExtra(EXTRA_HWKEY_VALUE, Integer.valueOf(
prefs.getString(PREF_KEY_HWKEY_MENU_DOUBLETAP, "0")));
+ } else if (key.equals(PREF_KEY_HWKEY_HOME_LONGPRESS)) {
+ intent.setAction(ACTION_PREF_HWKEY_HOME_LONGPRESS_CHANGED);
+ intent.putExtra(EXTRA_HWKEY_VALUE, Integer.valueOf(
+ prefs.getString(PREF_KEY_HWKEY_HOME_LONGPRESS, "0")));
+ } else if (key.equals(PREF_KEY_HWKEY_HOME_LONGPRESS_KEYGUARD)) {
+ intent.setAction(ACTION_PREF_HWKEY_HOME_LONGPRESS_CHANGED);
+ intent.putExtra(EXTRA_HWKEY_HOME_LONGPRESS_KG, prefs.getBoolean(
+ GravityBoxSettings.PREF_KEY_HWKEY_HOME_LONGPRESS_KEYGUARD, false));
+ } else if (key.equals(PREF_KEY_HWKEY_HOME_DOUBLETAP_DISABLE)) {
+ intent.setAction(ACTION_PREF_HWKEY_HOME_DOUBLETAP_CHANGED);
+ intent.putExtra(EXTRA_HWKEY_HOME_DOUBLETAP_DISABLE,
+ prefs.getBoolean(PREF_KEY_HWKEY_HOME_DOUBLETAP_DISABLE, false));
} else if (key.equals(PREF_KEY_HWKEY_BACK_LONGPRESS)) {
intent.setAction(ACTION_PREF_HWKEY_BACK_LONGPRESS_CHANGED);
intent.putExtra(EXTRA_HWKEY_VALUE, Integer.valueOf(
prefs.getString(PREF_KEY_HWKEY_BACK_LONGPRESS, "0")));
+ } else if (key.equals(PREF_KEY_HWKEY_BACK_DOUBLETAP)) {
+ intent.setAction(ACTION_PREF_HWKEY_BACK_DOUBLETAP_CHANGED);
+ intent.putExtra(EXTRA_HWKEY_VALUE, Integer.valueOf(
+ prefs.getString(PREF_KEY_HWKEY_BACK_DOUBLETAP, "0")));
+ } else if (key.equals(PREF_KEY_HWKEY_RECENTS_SINGLETAP)) {
+ intent.setAction(ACTION_PREF_HWKEY_RECENTS_SINGLETAP_CHANGED);
+ intent.putExtra(EXTRA_HWKEY_VALUE, Integer.valueOf(
+ prefs.getString(PREF_KEY_HWKEY_RECENTS_SINGLETAP, "0")));
+ } else if (key.equals(PREF_KEY_HWKEY_RECENTS_LONGPRESS)) {
+ intent.setAction(ACTION_PREF_HWKEY_RECENTS_LONGPRESS_CHANGED);
+ intent.putExtra(EXTRA_HWKEY_VALUE, Integer.valueOf(
+ prefs.getString(PREF_KEY_HWKEY_RECENTS_LONGPRESS, "0")));
} else if (key.equals(PREF_KEY_HWKEY_DOUBLETAP_SPEED)) {
intent.setAction(ACTION_PREF_HWKEY_DOUBLETAP_SPEED_CHANGED);
intent.putExtra(EXTRA_HWKEY_VALUE, Integer.valueOf(
@@ -687,7 +1599,18 @@ public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
} else if (key.equals(PREF_KEY_VOLUME_PANEL_EXPANDABLE)) {
intent.setAction(ACTION_PREF_VOLUME_PANEL_MODE_CHANGED);
intent.putExtra(EXTRA_EXPANDABLE,
- prefs.getBoolean(PREF_KEY_VOLUME_PANEL_EXPANDABLE, true));
+ prefs.getBoolean(PREF_KEY_VOLUME_PANEL_EXPANDABLE, false));
+ } else if (key.equals(PREF_KEY_VOLUME_PANEL_FULLY_EXPANDABLE)) {
+ intent.setAction(ACTION_PREF_VOLUME_PANEL_MODE_CHANGED);
+ intent.putExtra(EXTRA_EXPANDABLE_FULLY,
+ prefs.getBoolean(PREF_KEY_VOLUME_PANEL_FULLY_EXPANDABLE, false));
+ } else if (key.equals(PREF_KEY_VOLUME_PANEL_AUTOEXPAND)) {
+ intent.setAction(ACTION_PREF_VOLUME_PANEL_MODE_CHANGED);
+ intent.putExtra(EXTRA_AUTOEXPAND,
+ prefs.getBoolean(PREF_KEY_VOLUME_PANEL_AUTOEXPAND, false));
+ } else if (key.equals(PREF_KEY_VOLUME_ADJUST_MUTE)) {
+ intent.setAction(ACTION_PREF_VOLUME_PANEL_MODE_CHANGED);
+ intent.putExtra(EXTRA_MUTED, prefs.getBoolean(PREF_KEY_VOLUME_ADJUST_MUTE, false));
} else if (key.equals(PREF_KEY_LINK_VOLUMES)) {
intent.setAction(ACTION_PREF_LINK_VOLUMES_CHANGED);
intent.putExtra(EXTRA_LINKED,
@@ -712,25 +1635,53 @@ public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
prefs.getBoolean(PREF_KEY_DISABLE_ROAMING_INDICATORS, false));
} else if (key.equals(PREF_KEY_PIE_CONTROL_ENABLE)) {
intent.setAction(ACTION_PREF_PIE_CHANGED);
- boolean enabled = prefs.getBoolean(PREF_KEY_PIE_CONTROL_ENABLE, false);
- intent.putExtra(EXTRA_PIE_ENABLE, enabled);
- if (!enabled) {
+ int mode = Integer.valueOf(prefs.getString(PREF_KEY_PIE_CONTROL_ENABLE, "0"));
+ intent.putExtra(EXTRA_PIE_ENABLE, mode);
+ if (mode == 0) {
intent.putExtra(EXTRA_PIE_HWKEYS_DISABLE, false);
}
- } else if (key.equals(PREF_KEY_PIE_CONTROL_SEARCH)) {
+ } else if (key.equals(PREF_KEY_PIE_CONTROL_CUSTOM_KEY)) {
+ intent.setAction(ACTION_PREF_PIE_CHANGED);
+ intent.putExtra(EXTRA_PIE_CUSTOM_KEY_MODE, Integer.valueOf(
+ prefs.getString(PREF_KEY_PIE_CONTROL_CUSTOM_KEY, "0")));
+ } else if (key.equals(PREF_KEY_PIE_CONTROL_MENU)) {
intent.setAction(ACTION_PREF_PIE_CHANGED);
- intent.putExtra(EXTRA_PIE_SEARCH, prefs.getBoolean(PREF_KEY_PIE_CONTROL_SEARCH, false));
+ intent.putExtra(EXTRA_PIE_MENU, prefs.getBoolean(PREF_KEY_PIE_CONTROL_MENU, false));
} else if (key.equals(PREF_KEY_PIE_CONTROL_TRIGGERS)) {
intent.setAction(ACTION_PREF_PIE_CHANGED);
String[] triggers = prefs.getStringSet(
PREF_KEY_PIE_CONTROL_TRIGGERS, new HashSet()).toArray(new String[0]);
intent.putExtra(EXTRA_PIE_TRIGGERS, triggers);
+ } else if (key.equals(PREF_KEY_PIE_CONTROL_TRIGGER_SIZE)) {
+ intent.setAction(ACTION_PREF_PIE_CHANGED);
+ intent.putExtra(EXTRA_PIE_TRIGGER_SIZE,
+ prefs.getInt(PREF_KEY_PIE_CONTROL_TRIGGER_SIZE, 5));
} else if (key.equals(PREF_KEY_PIE_CONTROL_SIZE)) {
intent.setAction(ACTION_PREF_PIE_CHANGED);
intent.putExtra(EXTRA_PIE_SIZE, prefs.getInt(PREF_KEY_PIE_CONTROL_SIZE, 1000));
} else if (key.equals(PREF_KEY_HWKEYS_DISABLE)) {
intent.setAction(ACTION_PREF_PIE_CHANGED);
intent.putExtra(EXTRA_PIE_HWKEYS_DISABLE, prefs.getBoolean(PREF_KEY_HWKEYS_DISABLE, false));
+ } else if (key.equals(PREF_KEY_PIE_COLOR_BG)) {
+ intent.setAction(ACTION_PREF_PIE_CHANGED);
+ intent.putExtra(EXTRA_PIE_COLOR_BG, prefs.getInt(PREF_KEY_PIE_COLOR_BG,
+ getResources().getColor(R.color.pie_background_color)));
+ } else if (key.equals(PREF_KEY_PIE_COLOR_FG)) {
+ intent.setAction(ACTION_PREF_PIE_CHANGED);
+ intent.putExtra(EXTRA_PIE_COLOR_FG, prefs.getInt(PREF_KEY_PIE_COLOR_FG,
+ getResources().getColor(R.color.pie_foreground_color)));
+ } else if (key.equals(PREF_KEY_PIE_COLOR_OUTLINE)) {
+ intent.setAction(ACTION_PREF_PIE_CHANGED);
+ intent.putExtra(EXTRA_PIE_COLOR_OUTLINE, prefs.getInt(PREF_KEY_PIE_COLOR_OUTLINE,
+ getResources().getColor(R.color.pie_outline_color)));
+ } else if (key.equals(PREF_KEY_PIE_COLOR_SELECTED)) {
+ intent.setAction(ACTION_PREF_PIE_CHANGED);
+ intent.putExtra(EXTRA_PIE_COLOR_SELECTED, prefs.getInt(PREF_KEY_PIE_COLOR_SELECTED,
+ getResources().getColor(R.color.pie_selected_color)));
+ } else if (key.equals(PREF_KEY_PIE_COLOR_TEXT)) {
+ intent.setAction(ACTION_PREF_PIE_CHANGED);
+ intent.putExtra(EXTRA_PIE_COLOR_TEXT, prefs.getInt(PREF_KEY_PIE_COLOR_TEXT,
+ getResources().getColor(R.color.pie_text_color)));
} else if (key.equals(PREF_KEY_BUTTON_BACKLIGHT_MODE)) {
intent.setAction(ACTION_PREF_BUTTON_BACKLIGHT_CHANGED);
intent.putExtra(EXTRA_BB_MODE, prefs.getString(
@@ -754,6 +1705,77 @@ public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
} else if (key.equals(PREF_KEY_QUICKAPP_SLOT4)) {
intent.setAction(ACTION_PREF_QUICKAPP_CHANGED);
intent.putExtra(EXTRA_QUICKAPP_SLOT4, prefs.getString(PREF_KEY_QUICKAPP_SLOT4, null));
+ } else if (key.equals(PREF_KEY_EXPANDED_DESKTOP)) {
+ intent.setAction(ACTION_PREF_EXPANDED_DESKTOP_MODE_CHANGED);
+ intent.putExtra(EXTRA_ED_MODE, Integer.valueOf(
+ prefs.getString(PREF_KEY_EXPANDED_DESKTOP, "0")));
+ } else if (key.equals(PREF_KEY_NAVBAR_HEIGHT)) {
+ intent.setAction(ACTION_PREF_NAVBAR_CHANGED);
+ intent.putExtra(EXTRA_NAVBAR_HEIGHT, prefs.getInt(PREF_KEY_NAVBAR_HEIGHT, 100));
+ } else if (key.equals(PREF_KEY_NAVBAR_HEIGHT_LANDSCAPE)) {
+ intent.setAction(ACTION_PREF_NAVBAR_CHANGED);
+ intent.putExtra(EXTRA_NAVBAR_HEIGHT_LANDSCAPE,
+ prefs.getInt(PREF_KEY_NAVBAR_HEIGHT_LANDSCAPE, 100));
+ } else if (key.equals(PREF_KEY_NAVBAR_WIDTH)) {
+ intent.setAction(ACTION_PREF_NAVBAR_CHANGED);
+ intent.putExtra(EXTRA_NAVBAR_WIDTH, prefs.getInt(PREF_KEY_NAVBAR_WIDTH, 100));
+ } else if (key.equals(PREF_KEY_NAVBAR_MENUKEY)) {
+ intent.setAction(ACTION_PREF_NAVBAR_CHANGED);
+ intent.putExtra(EXTRA_NAVBAR_MENUKEY, prefs.getBoolean(PREF_KEY_NAVBAR_MENUKEY, false));
+ } else if (key.equals(PREF_KEY_NAVBAR_LAUNCHER_ENABLE)) {
+ intent.setAction(ACTION_PREF_NAVBAR_CHANGED);
+ intent.putExtra(EXTRA_NAVBAR_LAUNCHER_ENABLE,
+ prefs.getBoolean(PREF_KEY_NAVBAR_LAUNCHER_ENABLE, false));
+ } else if (key.equals(PREF_KEY_NAVBAR_COLOR_ENABLE)) {
+ intent.setAction(ACTION_PREF_NAVBAR_CHANGED);
+ intent.putExtra(EXTRA_NAVBAR_COLOR_ENABLE,
+ prefs.getBoolean(PREF_KEY_NAVBAR_COLOR_ENABLE, false));
+ } else if (key.equals(PREF_KEY_NAVBAR_KEY_COLOR)) {
+ intent.setAction(ACTION_PREF_NAVBAR_CHANGED);
+ intent.putExtra(EXTRA_NAVBAR_KEY_COLOR,
+ prefs.getInt(PREF_KEY_NAVBAR_KEY_COLOR,
+ getResources().getColor(R.color.navbar_key_color)));
+ } else if (key.equals(PREF_KEY_NAVBAR_KEY_GLOW_COLOR)) {
+ intent.setAction(ACTION_PREF_NAVBAR_CHANGED);
+ intent.putExtra(EXTRA_NAVBAR_KEY_GLOW_COLOR,
+ prefs.getInt(PREF_KEY_NAVBAR_KEY_GLOW_COLOR,
+ getResources().getColor(R.color.navbar_key_glow_color)));
+ } else if (key.equals(PREF_KEY_NAVBAR_BG_COLOR)) {
+ intent.setAction(ACTION_PREF_NAVBAR_CHANGED);
+ intent.putExtra(EXTRA_NAVBAR_BG_COLOR,
+ prefs.getInt(PREF_KEY_NAVBAR_BG_COLOR,
+ getResources().getColor(R.color.navbar_bg_color)));
+ } else if (PREF_KEY_APP_LAUNCHER_SLOT.contains(key)) {
+ intent.setAction(ACTION_PREF_APP_LAUNCHER_CHANGED);
+ intent.putExtra(EXTRA_APP_LAUNCHER_SLOT,
+ PREF_KEY_APP_LAUNCHER_SLOT.indexOf(key));
+ intent.putExtra(EXTRA_APP_LAUNCHER_APP, prefs.getString(key, null));
+ } else if (key.equals(PREF_KEY_STATUSBAR_BRIGHTNESS)) {
+ intent.setAction(ACTION_PREF_STATUSBAR_BRIGHTNESS_CHANGED);
+ intent.putExtra(EXTRA_SB_BRIGHTNESS, prefs.getBoolean(PREF_KEY_STATUSBAR_BRIGHTNESS, false));
+ } else if (key.equals(PREF_KEY_NETWORK_MODE_TILE_MODE)) {
+ intent.setAction(ACTION_PREF_QUICKSETTINGS_CHANGED);
+ intent.putExtra(EXTRA_NMT_MODE, Integer.valueOf(
+ prefs.getString(PREF_KEY_NETWORK_MODE_TILE_MODE, "0")));
+ } else if (key.equals(PREF_KEY_DISPLAY_ALLOW_ALL_ROTATIONS)) {
+ intent.setAction(ACTION_PREF_DISPLAY_ALLOW_ALL_ROTATIONS_CHANGED);
+ intent.putExtra(EXTRA_ALLOW_ALL_ROTATIONS,
+ prefs.getBoolean(PREF_KEY_DISPLAY_ALLOW_ALL_ROTATIONS, false));
+ } else if (key.equals(PREF_KEY_QS_NETWORK_MODE_SIM_SLOT)) {
+ intent.setAction(ACTION_PREF_QS_NETWORK_MODE_SIM_SLOT_CHANGED);
+ intent.putExtra(EXTRA_SIM_SLOT, Integer.valueOf(
+ prefs.getString(PREF_KEY_QS_NETWORK_MODE_SIM_SLOT, "0")));
+ } else if (key.equals(PREF_KEY_DATA_TRAFFIC_ENABLE)) {
+ intent.setAction(ACTION_PREF_DATA_TRAFFIC_CHANGED);
+ intent.putExtra(EXTRA_DT_ENABLE, prefs.getBoolean(PREF_KEY_DATA_TRAFFIC_ENABLE, false));
+ } else if (key.equals(PREF_KEY_DATA_TRAFFIC_POSITION)) {
+ intent.setAction(ACTION_PREF_DATA_TRAFFIC_CHANGED);
+ intent.putExtra(EXTRA_DT_POSITION, Integer.valueOf(
+ prefs.getString(PREF_KEY_DATA_TRAFFIC_POSITION, "0")));
+ } else if (key.equals(PREF_KEY_DATA_TRAFFIC_SIZE)) {
+ intent.setAction(ACTION_PREF_DATA_TRAFFIC_CHANGED);
+ intent.putExtra(EXTRA_DT_SIZE, Integer.valueOf(
+ prefs.getString(PREF_KEY_DATA_TRAFFIC_SIZE, "14")));
}
if (intent.getAction() != null) {
getActivity().sendBroadcast(intent);
@@ -778,25 +1800,14 @@ public void onClick(DialogInterface dialog, int which) {
mDialog.show();
}
- if (key.equals(PREF_KEY_BRIGHTNESS_MIN)) {
- String strVal = prefs.getString(PREF_KEY_BRIGHTNESS_MIN, "20");
- try {
- int val = Integer.valueOf(strVal);
- int newVal = val;
- if (val < 10) newVal = 10;
- if (val > 80) newVal = 80;
- if (val != newVal) {
- Editor editor = prefs.edit();
- editor.putString(PREF_KEY_BRIGHTNESS_MIN, String.valueOf(newVal));
- editor.commit();
- mPrefBrightnessMin.setText(String.valueOf(newVal));
- }
- } catch (NumberFormatException e) {
- Editor editor = prefs.edit();
- editor.putString(PREF_KEY_BRIGHTNESS_MIN, "20");
- editor.commit();
- mPrefBrightnessMin.setText("20");
- }
+ if (key.equals(PREF_KEY_BRIGHTNESS_MIN) &&
+ prefs.getInt(PREF_KEY_BRIGHTNESS_MIN, 20) < 20) {
+ AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
+ builder.setTitle(R.string.important);
+ builder.setMessage(R.string.screen_brightness_min_warning);
+ builder.setPositiveButton(android.R.string.ok, null);
+ mDialog = builder.create();
+ mDialog.show();
}
if (rebootKeys.contains(key))
@@ -844,8 +1855,32 @@ public boolean onPreferenceTreeClick(PreferenceScreen prefScreen, Preference pre
}
}
getActivity().recreate();
+ } else if (pref == mPrefQsTileOrder) {
+ intent = new Intent(getActivity(), TileOrderActivity.class);
+ } else if (pref == mPrefPieColorReset) {
+ final Resources res = getResources();
+ final int bgColor = res.getColor(R.color.pie_background_color);
+ final int fgColor = res.getColor(R.color.pie_foreground_color);
+ final int outlineColor = res.getColor(R.color.pie_outline_color);
+ final int selectedColor = res.getColor(R.color.pie_selected_color);
+ final int textColor = res.getColor(R.color.pie_text_color);
+ mPrefPieColorBg.setValue(bgColor);
+ mPrefPieColorFg.setValue(fgColor);
+ mPrefPieColorOutline.setValue(outlineColor);
+ mPrefPieColorSelected.setValue(selectedColor);
+ mPrefPieColorText.setValue(textColor);
+ Intent pieIntent = new Intent(ACTION_PREF_PIE_CHANGED);
+ pieIntent.putExtra(EXTRA_PIE_COLOR_BG, bgColor);
+ pieIntent.putExtra(EXTRA_PIE_COLOR_FG, fgColor);
+ pieIntent.putExtra(EXTRA_PIE_COLOR_OUTLINE, outlineColor);
+ pieIntent.putExtra(EXTRA_PIE_COLOR_SELECTED, selectedColor);
+ pieIntent.putExtra(EXTRA_PIE_COLOR_TEXT, textColor);
+ getActivity().sendBroadcast(pieIntent);
+ } else if (pref == mPrefCallerUnknownPhoto) {
+ setCustomCallerImage();
+ return true;
}
-
+
if (intent != null) {
try {
startActivity(intent);
@@ -888,7 +1923,7 @@ private void setCustomLockscreenImage() {
// Lock screen for tablets visible section are different in landscape/portrait,
// image need to be cropped correctly, like wallpaper setup for scrolling in background in home screen
// other wise it does not scale correctly
- if (Utils.isTablet(getActivity())) {
+ if (Utils.isTabletUI(getActivity())) {
width = getActivity().getWallpaperDesiredMinimumWidth();
height = getActivity().getWallpaperDesiredMinimumHeight();
float spotlightX = (float) display.getWidth() / width;
@@ -910,7 +1945,7 @@ private void setCustomLockscreenImage() {
wallpaperTemporary.setWritable(true, false);
intent.putExtra(MediaStore.EXTRA_OUTPUT,Uri.fromFile(wallpaperTemporary));
intent.putExtra("return-data", false);
- getActivity().startActivityFromFragment(this, intent, LOCKSCREEN_BACKGROUND);
+ getActivity().startActivityFromFragment(this, intent, REQ_LOCKSCREEN_BACKGROUND);
} catch (Exception e) {
Toast.makeText(getActivity(), getString(
R.string.lockscreen_background_result_not_successful),
@@ -946,7 +1981,7 @@ private void setCustomNotifBgPortrait() {
wallpaperTemporary.createNewFile();
wallpaperTemporary.setWritable(true, false);
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(wallpaperTemporary));
- startActivityForResult(intent, NOTIF_BG_IMAGE_PORTRAIT);
+ startActivityForResult(intent, REQ_NOTIF_BG_IMAGE_PORTRAIT);
} catch (Exception e) {
Toast.makeText(getActivity(), getString(
R.string.lockscreen_background_result_not_successful),
@@ -982,7 +2017,7 @@ private void setCustomNotifBgLandscape() {
wallpaperTemporary.createNewFile();
wallpaperTemporary.setWritable(true, false);
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(wallpaperTemporary));
- startActivityForResult(intent, NOTIF_BG_IMAGE_LANDSCAPE);
+ startActivityForResult(intent, REQ_NOTIF_BG_IMAGE_LANDSCAPE);
} catch (Exception e) {
Toast.makeText(getActivity(), getString(
R.string.lockscreen_background_result_not_successful),
@@ -991,9 +2026,38 @@ private void setCustomNotifBgLandscape() {
}
}
+ private void setCustomCallerImage() {
+ int width = getResources().getDimensionPixelSize(R.dimen.caller_id_photo_width);
+ int height = getResources().getDimensionPixelSize(R.dimen.caller_id_photo_height);
+ Intent intent = new Intent(Intent.ACTION_PICK,
+ android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
+ intent.setType("image/*");
+ intent.putExtra("crop", "true");
+ boolean isPortrait = getResources()
+ .getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT;
+ intent.putExtra("aspectX", isPortrait ? width : height);
+ intent.putExtra("aspectY", isPortrait ? height : width);
+ intent.putExtra("outputX", isPortrait ? width : height);
+ intent.putExtra("outputY", isPortrait ? height : width);
+ intent.putExtra("scale", true);
+ intent.putExtra("scaleUpIfNeeded", true);
+ intent.putExtra("outputFormat", Bitmap.CompressFormat.PNG.toString());
+ try {
+ wallpaperTemporary.createNewFile();
+ wallpaperTemporary.setWritable(true, false);
+ intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(wallpaperTemporary));
+ startActivityForResult(intent, REQ_CALLER_PHOTO);
+ } catch (Exception e) {
+ Toast.makeText(getActivity(), getString(
+ R.string.caller_unkown_photo_result_not_successful),
+ Toast.LENGTH_SHORT).show();
+ e.printStackTrace();
+ }
+ }
+
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
- if (requestCode == LOCKSCREEN_BACKGROUND) {
+ if (requestCode == REQ_LOCKSCREEN_BACKGROUND) {
if (resultCode == Activity.RESULT_OK) {
if (wallpaperTemporary.exists()) {
wallpaperTemporary.renameTo(wallpaperImage);
@@ -1010,7 +2074,7 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) {
R.string.lockscreen_background_result_not_successful),
Toast.LENGTH_SHORT).show();
}
- } else if (requestCode == NOTIF_BG_IMAGE_PORTRAIT) {
+ } else if (requestCode == REQ_NOTIF_BG_IMAGE_PORTRAIT) {
if (resultCode == Activity.RESULT_OK) {
if (wallpaperTemporary.exists()) {
wallpaperTemporary.renameTo(notifBgImagePortrait);
@@ -1029,7 +2093,7 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) {
}
Intent intent = new Intent(ACTION_NOTIF_BACKGROUND_CHANGED);
getActivity().sendBroadcast(intent);
- } else if (requestCode == NOTIF_BG_IMAGE_LANDSCAPE) {
+ } else if (requestCode == REQ_NOTIF_BG_IMAGE_LANDSCAPE) {
if (resultCode == Activity.RESULT_OK) {
if (wallpaperTemporary.exists()) {
wallpaperTemporary.renameTo(notifBgImageLandscape);
@@ -1048,6 +2112,23 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) {
}
Intent intent = new Intent(ACTION_NOTIF_BACKGROUND_CHANGED);
getActivity().sendBroadcast(intent);
+ } else if (requestCode == REQ_CALLER_PHOTO) {
+ if (resultCode == Activity.RESULT_OK) {
+ if (wallpaperTemporary.exists()) {
+ wallpaperTemporary.renameTo(callerPhotoFile);
+ }
+ callerPhotoFile.setReadable(true, false);
+ Toast.makeText(getActivity(), getString(
+ R.string.caller_unknown_photo_result_successful),
+ Toast.LENGTH_SHORT).show();
+ } else {
+ if (wallpaperTemporary.exists()) {
+ wallpaperTemporary.delete();
+ }
+ Toast.makeText(getActivity(), getString(
+ R.string.caller_unkown_photo_result_not_successful),
+ Toast.LENGTH_SHORT).show();
+ }
}
}
}
diff --git a/src/com/ceco/gm2/gravitybox/KeyButtonView.java b/src/com/ceco/gm2/gravitybox/KeyButtonView.java
new file mode 100644
index 0000000000..30489bf6e5
--- /dev/null
+++ b/src/com/ceco/gm2/gravitybox/KeyButtonView.java
@@ -0,0 +1,242 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ * Copyright (C) 2013 Peter Gregus for GravityBox Project (C3C076@xda)
+ *
+ * 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.ceco.gm2.gravitybox;
+
+import de.robv.android.xposed.XposedBridge;
+import android.animation.AnimatorSet;
+import android.animation.ObjectAnimator;
+import android.content.Context;
+import android.content.res.Resources;
+import android.graphics.drawable.Drawable;
+import android.graphics.Canvas;
+import android.graphics.PorterDuff;
+import android.graphics.RectF;
+import android.os.SystemClock;
+import android.view.HapticFeedbackConstants;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.ViewConfiguration;
+import android.widget.ImageView;
+
+public class KeyButtonView extends ImageView {
+ private static final String PACKAGE_NAME = "com.android.systemui";
+ private static final String TAG = "GB:KeyButtonView";
+
+ final float GLOW_MAX_SCALE_FACTOR = 1.8f;
+ final float BUTTON_QUIESCENT_ALPHA = 0.70f;
+
+ long mDownTime;
+ int mTouchSlop;
+ Drawable mGlowBG;
+ int mGlowWidth, mGlowHeight;
+ float mGlowAlpha = 0f, mGlowScale = 1f, mDrawingAlpha = 1f;
+ RectF mRect = new RectF(0f,0f,0f,0f);
+ AnimatorSet mPressedAnim;
+ Resources mResources;
+ boolean mLongPressConsumed;
+
+ Runnable mCheckLongPress = new Runnable() {
+ public void run() {
+ if (isPressed()) {
+ mLongPressConsumed = performLongClick();
+ }
+ }
+ };
+
+ public KeyButtonView(Context context) {
+ super(context);
+
+ mResources = context.getResources();
+
+ mGlowBG = mResources.getDrawable(mResources.getIdentifier(
+ "ic_sysbar_highlight", "drawable", PACKAGE_NAME));
+ if (mGlowBG != null) {
+ setDrawingAlpha(BUTTON_QUIESCENT_ALPHA);
+ mGlowWidth = mGlowBG.getIntrinsicWidth();
+ mGlowHeight = mGlowBG.getIntrinsicHeight();
+ }
+
+ setClickable(true);
+ mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();
+ }
+
+ @Override
+ protected void onDraw(Canvas canvas) {
+ if (mGlowBG != null) {
+ canvas.save();
+ final int w = getWidth();
+ final int h = getHeight();
+ final float aspect = (float)mGlowWidth / mGlowHeight;
+ final int drawW = (int)(h*aspect);
+ final int drawH = h;
+ final int margin = (drawW-w)/2;
+ canvas.scale(mGlowScale, mGlowScale, w*0.5f, h*0.5f);
+ mGlowBG.setBounds(-margin, 0, drawW-margin, drawH);
+ mGlowBG.setAlpha((int)(mDrawingAlpha * mGlowAlpha * 255));
+ mGlowBG.draw(canvas);
+ canvas.restore();
+ mRect.right = w;
+ mRect.bottom = h;
+ }
+ super.onDraw(canvas);
+ }
+
+ public float getDrawingAlpha() {
+ if (mGlowBG == null) return 0;
+ return mDrawingAlpha;
+ }
+
+ @SuppressWarnings("deprecation")
+ public void setDrawingAlpha(float x) {
+ if (mGlowBG == null) return;
+ // Calling setAlpha(int), which is an ImageView-specific
+ // method that's different from setAlpha(float). This sets
+ // the alpha on this ImageView's drawable directly
+ setAlpha((int) (x * 255));
+ mDrawingAlpha = x;
+ }
+
+ public float getGlowAlpha() {
+ if (mGlowBG == null) return 0;
+ return mGlowAlpha;
+ }
+
+ public void setGlowAlpha(float x) {
+ if (mGlowBG == null) return;
+ mGlowAlpha = x;
+ invalidate();
+ }
+
+ public float getGlowScale() {
+ if (mGlowBG == null) return 0;
+ return mGlowScale;
+ }
+
+ @SuppressWarnings("unused")
+ public void setGlowScale(float x) {
+ if (mGlowBG == null) return;
+ mGlowScale = x;
+ final float w = getWidth();
+ final float h = getHeight();
+ if (GLOW_MAX_SCALE_FACTOR <= 1.0f) {
+ // this only works if we know the glow will never leave our bounds
+ invalidate();
+ } else {
+ final float rx = (w * (GLOW_MAX_SCALE_FACTOR - 1.0f)) / 2.0f + 1.0f;
+ final float ry = (h * (GLOW_MAX_SCALE_FACTOR - 1.0f)) / 2.0f + 1.0f;
+ invalidateGlobalRegion(
+ this,
+ new RectF(getLeft() - rx,
+ getTop() - ry,
+ getRight() + rx,
+ getBottom() + ry));
+
+ // also invalidate our immediate parent to help avoid situations where nearby glows
+ // interfere
+ ((View)getParent()).invalidate();
+ }
+ }
+
+ public void setPressed(boolean pressed) {
+ if (mGlowBG != null) {
+ if (pressed != isPressed()) {
+ if (mPressedAnim != null && mPressedAnim.isRunning()) {
+ mPressedAnim.cancel();
+ }
+ final AnimatorSet as = mPressedAnim = new AnimatorSet();
+ if (pressed) {
+ if (mGlowScale < GLOW_MAX_SCALE_FACTOR)
+ mGlowScale = GLOW_MAX_SCALE_FACTOR;
+ if (mGlowAlpha < BUTTON_QUIESCENT_ALPHA)
+ mGlowAlpha = BUTTON_QUIESCENT_ALPHA;
+ setDrawingAlpha(1f);
+ as.playTogether(
+ ObjectAnimator.ofFloat(this, "glowAlpha", 1f),
+ ObjectAnimator.ofFloat(this, "glowScale", GLOW_MAX_SCALE_FACTOR)
+ );
+ as.setDuration(50);
+ } else {
+ as.playTogether(
+ ObjectAnimator.ofFloat(this, "glowAlpha", 0f),
+ ObjectAnimator.ofFloat(this, "glowScale", 1f),
+ ObjectAnimator.ofFloat(this, "drawingAlpha", BUTTON_QUIESCENT_ALPHA)
+ );
+ as.setDuration(500);
+ }
+ as.start();
+ }
+ }
+ super.setPressed(pressed);
+ }
+
+ public boolean onTouchEvent(MotionEvent ev) {
+ final int action = ev.getAction();
+ int x, y;
+
+ switch (action) {
+ case MotionEvent.ACTION_DOWN:
+ //Slog.d("KeyButtonView", "press");
+ mDownTime = SystemClock.uptimeMillis();
+ setPressed(true);
+ performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY);
+ removeCallbacks(mCheckLongPress);
+ mLongPressConsumed = false;
+ postDelayed(mCheckLongPress, ViewConfiguration.getLongPressTimeout());
+ break;
+ case MotionEvent.ACTION_MOVE:
+ x = (int)ev.getX();
+ y = (int)ev.getY();
+ setPressed(x >= -mTouchSlop
+ && x < getWidth() + mTouchSlop
+ && y >= -mTouchSlop
+ && y < getHeight() + mTouchSlop);
+ break;
+ case MotionEvent.ACTION_CANCEL:
+ setPressed(false);
+ removeCallbacks(mCheckLongPress);
+ break;
+ case MotionEvent.ACTION_UP:
+ final boolean doIt = isPressed() && !mLongPressConsumed;
+ setPressed(false);
+ if (doIt) {
+ performClick();
+ }
+ removeCallbacks(mCheckLongPress);
+ break;
+ }
+
+ return true;
+ }
+
+ private static void invalidateGlobalRegion(View view, RectF childBounds) {
+ while (view.getParent() != null && view.getParent() instanceof View) {
+ view = (View) view.getParent();
+ view.getMatrix().mapRect(childBounds);
+ view.invalidate((int) Math.floor(childBounds.left),
+ (int) Math.floor(childBounds.top),
+ (int) Math.ceil(childBounds.right),
+ (int) Math.ceil(childBounds.bottom));
+ }
+ }
+
+ public void setGlowColor(int color) {
+ if (mGlowBG != null) {
+ mGlowBG.setColorFilter(color, PorterDuff.Mode.SRC_ATOP);
+ }
+ }
+}
diff --git a/src/com/ceco/gm2/gravitybox/KitKatBattery.java b/src/com/ceco/gm2/gravitybox/KitKatBattery.java
new file mode 100644
index 0000000000..a79bbf37af
--- /dev/null
+++ b/src/com/ceco/gm2/gravitybox/KitKatBattery.java
@@ -0,0 +1,330 @@
+/*
+ * Copyright (C) 2013 The Android Open Source Project
+ * Copyright (C) 2013 Peter Gregus for GravityBox Project (C3C076@xda)
+ *
+ * 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.ceco.gm2.gravitybox;
+
+import com.ceco.gm2.gravitybox.StatusBarIconManager.ColorInfo;
+import com.ceco.gm2.gravitybox.StatusBarIconManager.IconManagerListener;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.Paint;
+import android.graphics.Path;
+import android.graphics.PorterDuff;
+import android.graphics.PorterDuffXfermode;
+import android.graphics.Rect;
+import android.graphics.RectF;
+import android.graphics.Typeface;
+import android.os.BatteryManager;
+import android.os.Build;
+import android.util.AttributeSet;
+import android.view.View;
+
+public class KitKatBattery extends View implements IconManagerListener {
+ public static final String TAG = "GB:KitKatBattery";
+
+ public static final boolean SINGLE_DIGIT_PERCENT = false;
+ public static final boolean SHOW_100_PERCENT = false;
+
+ public static final int[] LEVELS = new int[] { 4, 15, 100 };
+ public static final int[] COLORS = new int[] { 0xFFFF3300, 0xFFFF3300, 0xFFFFFFFF };
+ public static final int BOLT_COLOR = 0xB2000000;
+ public static final int FULL = 96;
+ public static final int EMPTY = 4;
+
+ public static final float SUBPIXEL = 0.4f; // inset rects for softer edges
+
+ private int[] mColors;
+
+ private boolean mShowPercent = true;
+ private Paint mFramePaint, mBatteryPaint, mWarningTextPaint, mTextPaint, mBoltPaint;
+ private int mButtonHeight;
+ private float mTextHeight, mWarningTextHeight;
+
+ private int mHeight;
+ private int mWidth;
+ private String mWarningString;
+ private int mChargeColor;
+ private final float[] mBoltPoints;
+ private final Path mBoltPath = new Path();
+
+ private final RectF mFrame = new RectF();
+ private final RectF mButtonFrame = new RectF();
+ private final RectF mClipFrame = new RectF();
+ private final Rect mBoltFrame = new Rect();
+
+ private class BatteryTracker extends BroadcastReceiver {
+ public static final int UNKNOWN_LEVEL = -1;
+
+ // current battery status
+ int level = UNKNOWN_LEVEL;
+ int plugType;
+ boolean plugged;
+
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ final String action = intent.getAction();
+ if (action.equals(Intent.ACTION_BATTERY_CHANGED)) {
+ level = (int)(100f
+ * intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0)
+ / intent.getIntExtra(BatteryManager.EXTRA_SCALE, 100));
+
+ plugType = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, 0);
+ plugged = plugType != 0;
+
+ postInvalidate();
+ }
+ }
+ }
+
+ BatteryTracker mTracker = new BatteryTracker();
+
+ @Override
+ public void onAttachedToWindow() {
+ super.onAttachedToWindow();
+
+ IntentFilter filter = new IntentFilter();
+ filter.addAction(Intent.ACTION_BATTERY_CHANGED);
+ final Intent sticky = getContext().registerReceiver(mTracker, filter);
+ if (sticky != null) {
+ // preload the battery level
+ mTracker.onReceive(getContext(), sticky);
+ }
+ }
+
+ @Override
+ public void onDetachedFromWindow() {
+ super.onDetachedFromWindow();
+
+ getContext().unregisterReceiver(mTracker);
+ }
+
+ public KitKatBattery(Context context) {
+ this(context, null, 0);
+ }
+
+ public KitKatBattery(Context context, AttributeSet attrs) {
+ this(context, attrs, 0);
+ }
+
+ public KitKatBattery(Context context, AttributeSet attrs, int defStyle) {
+ super(context, attrs, defStyle);
+
+ mWarningString = "!";
+
+ mFramePaint = new Paint(Paint.ANTI_ALIAS_FLAG);
+ mFramePaint.setDither(true);
+ mFramePaint.setStrokeWidth(0);
+ mFramePaint.setStyle(Paint.Style.FILL_AND_STROKE);
+ mFramePaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_ATOP));
+
+ mBatteryPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
+ mBatteryPaint.setDither(true);
+ mBatteryPaint.setStrokeWidth(0);
+ mBatteryPaint.setStyle(Paint.Style.FILL_AND_STROKE);
+
+ mTextPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
+ Typeface font = Typeface.create("sans-serif-condensed", Typeface.NORMAL);
+ mTextPaint.setTypeface(font);
+ mTextPaint.setTextAlign(Paint.Align.CENTER);
+
+ mWarningTextPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
+ font = Typeface.create("sans-serif", Typeface.BOLD);
+ mWarningTextPaint.setTypeface(font);
+ mWarningTextPaint.setTextAlign(Paint.Align.CENTER);
+
+ mBoltPaint = new Paint();
+ mBoltPaint.setAntiAlias(true);
+ mBoltPoints = loadBoltPoints();
+ setLayerType(View.LAYER_TYPE_SOFTWARE, null);
+
+ setColor(Build.VERSION.SDK_INT > 18 ? Color.WHITE :
+ context.getResources().getColor(android.R.color.holo_blue_dark));
+ }
+
+ public void setColor(int mainColor) {
+ COLORS[COLORS.length-1] = mainColor;
+
+ final int N = LEVELS.length;
+ mColors = new int[2*N];
+ for (int i=0; i= FULL) {
+ drawFrac = 1f;
+ } else if (level <= EMPTY) {
+ drawFrac = 0f;
+ }
+
+ c.drawRect(mButtonFrame, drawFrac == 1f ? mBatteryPaint : mFramePaint);
+
+ mClipFrame.set(mFrame);
+ mClipFrame.top += (mFrame.height() * (1f - drawFrac));
+
+ c.save(Canvas.CLIP_SAVE_FLAG);
+ c.clipRect(mClipFrame);
+ c.drawRect(mFrame, mBatteryPaint);
+ c.restore();
+
+ if (tracker.plugged) {
+ // draw the bolt
+ final int bl = (int)(mFrame.left + mFrame.width() / 4.5f);
+ final int bt = (int)(mFrame.top + mFrame.height() / 6f);
+ final int br = (int)(mFrame.right - mFrame.width() / 7f);
+ final int bb = (int)(mFrame.bottom - mFrame.height() / 10f);
+ if (mBoltFrame.left != bl || mBoltFrame.top != bt
+ || mBoltFrame.right != br || mBoltFrame.bottom != bb) {
+ mBoltFrame.set(bl, bt, br, bb);
+ mBoltPath.reset();
+ mBoltPath.moveTo(
+ mBoltFrame.left + mBoltPoints[0] * mBoltFrame.width(),
+ mBoltFrame.top + mBoltPoints[1] * mBoltFrame.height());
+ for (int i = 2; i < mBoltPoints.length; i += 2) {
+ mBoltPath.lineTo(
+ mBoltFrame.left + mBoltPoints[i] * mBoltFrame.width(),
+ mBoltFrame.top + mBoltPoints[i + 1] * mBoltFrame.height());
+ }
+ mBoltPath.lineTo(
+ mBoltFrame.left + mBoltPoints[0] * mBoltFrame.width(),
+ mBoltFrame.top + mBoltPoints[1] * mBoltFrame.height());
+ }
+ c.drawPath(mBoltPath, mBoltPaint);
+ } else if (level <= EMPTY) {
+ final float x = mWidth * 0.5f;
+ final float y = (mHeight + mWarningTextHeight) * 0.48f;
+ c.drawText(mWarningString, x, y, mWarningTextPaint);
+ } else if (mShowPercent && !(tracker.level == 100 && !SHOW_100_PERCENT)) {
+ mTextPaint.setTextSize(height *
+ (SINGLE_DIGIT_PERCENT ? 0.75f
+ : (tracker.level == 100 ? 0.38f : 0.5f)));
+ mTextPaint.setColor(level < 33 ? Color.WHITE : Color.BLACK);
+ mTextHeight = -mTextPaint.getFontMetrics().ascent;
+
+ final String str = String.valueOf(SINGLE_DIGIT_PERCENT ? (level/10) : level);
+ final float x = mWidth * 0.5f;
+ final float y = (mHeight + mTextHeight) * 0.47f;
+ c.drawText(str,
+ x,
+ y,
+ mTextPaint);
+ }
+ }
+
+ @Override
+ public void onIconManagerStatusChanged(int flags, ColorInfo colorInfo) {
+ if ((flags & StatusBarIconManager.FLAG_ICON_COLOR_CHANGED) != 0) {
+ setColor(colorInfo.coloringEnabled ?
+ colorInfo.iconColor[0] : colorInfo.defaultIconColor);
+ }
+ }
+}
diff --git a/src/com/ceco/gm2/gravitybox/LinearColorBar.java b/src/com/ceco/gm2/gravitybox/LinearColorBar.java
new file mode 100644
index 0000000000..6b23345445
--- /dev/null
+++ b/src/com/ceco/gm2/gravitybox/LinearColorBar.java
@@ -0,0 +1,187 @@
+/*
+ * Copyright (C) 2013 AOKP Project
+ * Copyright (C) 2013 Peter Gregus for GravityBox Project (C3C076@xda)
+ * 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.ceco.gm2.gravitybox;
+
+import android.content.Context;
+import android.graphics.Canvas;
+import android.graphics.LinearGradient;
+import android.graphics.Paint;
+import android.graphics.Path;
+import android.graphics.Rect;
+import android.graphics.Shader;
+import android.util.AttributeSet;
+import android.util.DisplayMetrics;
+import android.widget.LinearLayout;
+
+public class LinearColorBar extends LinearLayout {
+ static final int LEFT_COLOR = 0xff0099cc;
+ static final int MIDDLE_COLOR = 0xff0099cc;
+ static final int RIGHT_COLOR = 0xff888888;
+
+ private float mRedRatio;
+ private float mYellowRatio;
+ private float mGreenRatio;
+
+ private boolean mShowingGreen;
+
+ final Rect mRect = new Rect();
+ final Paint mPaint = new Paint();
+
+ int mLastInterestingLeft, mLastInterestingRight;
+ int mLineWidth;
+
+ final Path mColorPath = new Path();
+ final Path mEdgePath = new Path();
+ final Paint mColorGradientPaint = new Paint();
+ final Paint mEdgeGradientPaint = new Paint();
+
+ public LinearColorBar(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ setWillNotDraw(false);
+ mPaint.setStyle(Paint.Style.FILL);
+ mColorGradientPaint.setStyle(Paint.Style.FILL);
+ mColorGradientPaint.setAntiAlias(true);
+ mEdgeGradientPaint.setStyle(Paint.Style.STROKE);
+ mLineWidth = getResources().getDisplayMetrics().densityDpi >= DisplayMetrics.DENSITY_HIGH
+ ? 2 : 1;
+ mEdgeGradientPaint.setStrokeWidth(mLineWidth);
+ mEdgeGradientPaint.setAntiAlias(true);
+ }
+
+ public void setRatios(float red, float yellow, float green) {
+ mRedRatio = red;
+ mYellowRatio = yellow;
+ mGreenRatio = green;
+ invalidate();
+ }
+
+ public void setShowingGreen(boolean showingGreen) {
+ if (mShowingGreen != showingGreen) {
+ mShowingGreen = showingGreen;
+ updateIndicator();
+ invalidate();
+ }
+ }
+
+ private void updateIndicator() {
+ int off = getPaddingTop() - getPaddingBottom();
+ if (off < 0) off = 0;
+ mRect.top = off;
+ mRect.bottom = getHeight();
+ if (mShowingGreen) {
+ mColorGradientPaint.setShader(new LinearGradient(
+ 0, 0, 0, off-2, RIGHT_COLOR&0xffffff, RIGHT_COLOR, Shader.TileMode.CLAMP));
+ } else {
+ mColorGradientPaint.setShader(new LinearGradient(
+ 0, 0, 0, off-2, MIDDLE_COLOR&0xffffff, MIDDLE_COLOR, Shader.TileMode.CLAMP));
+ }
+ mEdgeGradientPaint.setShader(new LinearGradient(
+ 0, 0, 0, off/2, 0x00a0a0a0, 0xffa0a0a0, Shader.TileMode.CLAMP));
+ }
+
+ @Override
+ protected void onSizeChanged(int w, int h, int oldw, int oldh) {
+ super.onSizeChanged(w, h, oldw, oldh);
+ updateIndicator();
+ }
+
+ @Override
+ protected void onDraw(Canvas canvas) {
+ super.onDraw(canvas);
+
+ int width = getWidth();
+
+ int left = 0;
+
+ int right = left + (int)(width*mRedRatio);
+ int right2 = right + (int)(width*mYellowRatio);
+ int right3 = right2 + (int)(width*mGreenRatio);
+
+ int indicatorLeft, indicatorRight;
+ if (mShowingGreen) {
+ indicatorLeft = right2;
+ indicatorRight = right3;
+ } else {
+ indicatorLeft = right;
+ indicatorRight = right2;
+ }
+
+ if (mLastInterestingLeft != indicatorLeft || mLastInterestingRight != indicatorRight) {
+ mColorPath.reset();
+ mEdgePath.reset();
+ if (indicatorLeft < indicatorRight) {
+ final int midTopY = mRect.top;
+ final int midBottomY = 0;
+ final int xoff = 2;
+ mColorPath.moveTo(indicatorLeft, mRect.top);
+ mColorPath.cubicTo(indicatorLeft, midBottomY,
+ -xoff, midTopY,
+ -xoff, 0);
+ mColorPath.lineTo(width+xoff-1, 0);
+ mColorPath.cubicTo(width+xoff-1, midTopY,
+ indicatorRight, midBottomY,
+ indicatorRight, mRect.top);
+ mColorPath.close();
+ final float lineOffset = mLineWidth+.5f;
+ mEdgePath.moveTo(-xoff+lineOffset, 0);
+ mEdgePath.cubicTo(-xoff+lineOffset, midTopY,
+ indicatorLeft+lineOffset, midBottomY,
+ indicatorLeft+lineOffset, mRect.top);
+ mEdgePath.moveTo(width+xoff-1-lineOffset, 0);
+ mEdgePath.cubicTo(width+xoff-1-lineOffset, midTopY,
+ indicatorRight-lineOffset, midBottomY,
+ indicatorRight-lineOffset, mRect.top);
+ }
+ mLastInterestingLeft = indicatorLeft;
+ mLastInterestingRight = indicatorRight;
+ }
+
+ if (!mEdgePath.isEmpty()) {
+ canvas.drawPath(mEdgePath, mEdgeGradientPaint);
+ canvas.drawPath(mColorPath, mColorGradientPaint);
+ }
+
+ if (left < right) {
+ mRect.left = left;
+ mRect.right = right;
+ mPaint.setColor(LEFT_COLOR);
+ canvas.drawRect(mRect, mPaint);
+ width -= (right-left);
+ left = right;
+ }
+
+ right = right2;
+
+ if (left < right) {
+ mRect.left = left;
+ mRect.right = right;
+ mPaint.setColor(MIDDLE_COLOR);
+ canvas.drawRect(mRect, mPaint);
+ width -= (right-left);
+ left = right;
+ }
+
+
+ right = left + width;
+ if (left < right) {
+ mRect.left = left;
+ mRect.right = right;
+ mPaint.setColor(RIGHT_COLOR);
+ canvas.drawRect(mRect, mPaint);
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/com/ceco/gm2/gravitybox/MemInfoReader.java b/src/com/ceco/gm2/gravitybox/MemInfoReader.java
new file mode 100644
index 0000000000..1640a41dad
--- /dev/null
+++ b/src/com/ceco/gm2/gravitybox/MemInfoReader.java
@@ -0,0 +1,110 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.ceco.gm2.gravitybox;
+
+import java.io.FileInputStream;
+
+import android.os.StrictMode;
+
+public class MemInfoReader {
+ byte[] mBuffer = new byte[1024];
+
+ private long mTotalSize;
+ private long mFreeSize;
+ private long mCachedSize;
+
+ private boolean matchText(byte[] buffer, int index, String text) {
+ int N = text.length();
+ if ((index+N) >= buffer.length) {
+ return false;
+ }
+ for (int i=0; i= '0' && buffer[index] <= '9') {
+ int start = index;
+ index++;
+ while (index < buffer.length && buffer[index] >= '0'
+ && buffer[index] <= '9') {
+ index++;
+ }
+ String str = new String(buffer, 0, start, index-start);
+ return ((long)Integer.parseInt(str)) * 1024;
+ }
+ index++;
+ }
+ return 0;
+ }
+
+ public void readMemInfo() {
+ // Permit disk reads here, as /proc/meminfo isn't really "on
+ // disk" and should be fast. TODO: make BlockGuard ignore
+ // /proc/ and /sys/ files perhaps?
+ StrictMode.ThreadPolicy savedPolicy = StrictMode.allowThreadDiskReads();
+ try {
+ mTotalSize = 0;
+ mFreeSize = 0;
+ mCachedSize = 0;
+ FileInputStream is = new FileInputStream("/proc/meminfo");
+ int len = is.read(mBuffer);
+ is.close();
+ final int BUFLEN = mBuffer.length;
+ int count = 0;
+ for (int i=0; i classAudioService = XposedHelpers.findClass(CLASS_AUDIO_SERVICE, null);
- XResources.setSystemWideReplacement("android", "bool", "config_safe_media_volume_enabled", true);
-
- if (prefs.getBoolean(GravityBoxSettings.PREF_KEY_MUSIC_VOLUME_STEPS, false)) {
- initMusicStream();
- }
-
- final Class> classAudioService = XposedHelpers.findClass(CLASS_AUDIO_SERVICE, null);
- mSafeMediaVolumeEnabled = prefs.getBoolean(GravityBoxSettings.PREF_KEY_SAFE_MEDIA_VOLUME, false);
- log("Safe headset media volume set to: " + mSafeMediaVolumeEnabled);
-
- XposedBridge.hookAllConstructors(classAudioService, new XC_MethodHook() {
-
- @Override
- protected void afterHookedMethod(MethodHookParam param) throws Throwable {
- Context context = (Context) XposedHelpers.getObjectField(param.thisObject, "mContext");
- if (context == null) return;
-
- IntentFilter intentFilter = new IntentFilter();
- intentFilter.addAction(GravityBoxSettings.ACTION_PREF_SAFE_MEDIA_VOLUME_CHANGED);
- context.registerReceiver(mBroadcastReceiver, intentFilter);
- log("AudioService constructed. Broadcast receiver registered");
+ if (prefs.getBoolean(GravityBoxSettings.PREF_KEY_MUSIC_VOLUME_STEPS, false)
+ && Utils.shouldAllowMoreVolumeSteps()) {
+ initMusicStream();
}
- });
-
- XposedHelpers.findAndHookMethod(classAudioService, "enforceSafeMediaVolume", new XC_MethodHook() {
- @Override
- protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
- if (!mSafeMediaVolumeEnabled) {
- param.setResult(null);
- return;
+ XposedBridge.hookAllConstructors(classAudioService, new XC_MethodHook() {
+
+ @Override
+ protected void afterHookedMethod(MethodHookParam param) throws Throwable {
+ Context context = (Context) XposedHelpers.getObjectField(param.thisObject, "mContext");
+ if (context == null) return;
+
+ IntentFilter intentFilter = new IntentFilter();
+ intentFilter.addAction(GravityBoxSettings.ACTION_PREF_SAFE_MEDIA_VOLUME_CHANGED);
+ context.registerReceiver(mBroadcastReceiver, intentFilter);
+ if (DEBUG) log("AudioService constructed. Broadcast receiver registered");
}
- }
- });
-
- XposedHelpers.findAndHookMethod(classAudioService, "checkSafeMediaVolume",
- int.class, int.class, int.class, new XC_MethodHook() {
+ });
- @Override
- protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
- if (!mSafeMediaVolumeEnabled) {
- param.setResult(true);
- return;
- }
+ if (Build.VERSION.SDK_INT > 16) {
+ XResources.setSystemWideReplacement("android", "bool", "config_safe_media_volume_enabled", true);
+ mSafeMediaVolumeEnabled = prefs.getBoolean(GravityBoxSettings.PREF_KEY_SAFE_MEDIA_VOLUME, false);
+ if (DEBUG) log("Safe headset media volume set to: " + mSafeMediaVolumeEnabled);
+ XposedHelpers.findAndHookMethod(classAudioService, "enforceSafeMediaVolume", new XC_MethodHook() {
+
+ @Override
+ protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
+ if (!mSafeMediaVolumeEnabled) {
+ param.setResult(null);
+ return;
+ }
+ }
+ });
+
+ XposedHelpers.findAndHookMethod(classAudioService, "checkSafeMediaVolume",
+ int.class, int.class, int.class, new XC_MethodHook() {
+
+ @Override
+ protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
+ if (!mSafeMediaVolumeEnabled) {
+ param.setResult(true);
+ return;
+ }
+ }
+ });
}
- });
+ } catch(Throwable t) {
+ XposedBridge.log(t);
+ }
}
private static void initMusicStream() {
@@ -102,7 +124,7 @@ private static void initMusicStream() {
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
param.args[1] = VOLUME_STEPS;
param.args[2] = VOLUME_STEPS;
- log("RemotePlaybackState constructed. Music stream volume steps set to " + VOLUME_STEPS);
+ if (DEBUG) log("RemotePlaybackState constructed. Music stream volume steps set to " + VOLUME_STEPS);
}
});
@@ -115,13 +137,13 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable {
XposedHelpers.callStaticMethod(
classAudioSystem, "initStreamVolume", STREAM_MUSIC, 0, VOLUME_STEPS);
XposedHelpers.callMethod(param.thisObject, "readSettings");
- log("Volume for music stream initialized with steps set to " + VOLUME_STEPS);
+ if (DEBUG) log("Volume for music stream initialized with steps set to " + VOLUME_STEPS);
}
}
});
- } catch(Exception e) {
- XposedBridge.log(e);
+ } catch(Throwable t) {
+ XposedBridge.log(t);
}
}
}
\ No newline at end of file
diff --git a/src/com/ceco/gm2/gravitybox/ModAudioSettings.java b/src/com/ceco/gm2/gravitybox/ModAudioSettings.java
index 818d6bfd59..886e873d4a 100644
--- a/src/com/ceco/gm2/gravitybox/ModAudioSettings.java
+++ b/src/com/ceco/gm2/gravitybox/ModAudioSettings.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright (C) 2013 Peter Gregus for GravityBox Project (C3C076@xda)
+ * 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.ceco.gm2.gravitybox;
import android.content.res.Resources;
@@ -10,7 +25,7 @@
import de.robv.android.xposed.XC_MethodHook.Unhook;
public class ModAudioSettings {
- private static final String TAG = "ModAudioSettings";
+ private static final String TAG = "GB:ModAudioSettings";
public static final String PACKAGE_NAME = "com.android.settings";
private static final String CLASS_VOLUME_PREF = "com.mediatek.audioprofile.RingerVolumePreference";
private static final String CLASS_VOLUMIZER = "com.mediatek.audioprofile.RingerVolumePreference$SeekBarVolumizer";
@@ -27,7 +42,13 @@ private static void log (String message) {
public static void init(final XSharedPreferences prefs, final ClassLoader classLoader) {
try {
final Class> classVolumePref = XposedHelpers.findClass(CLASS_VOLUME_PREF, classLoader);
- final Class> classVolumizer = XposedHelpers.findClass(CLASS_VOLUMIZER, classLoader);
+ final Class> classVolumizer;
+ try {
+ classVolumizer = XposedHelpers.findClass(CLASS_VOLUMIZER, classLoader);
+ } catch (Throwable t) {
+ if (DEBUG) log("classVolumizer doesn't exist, exiting...");
+ return;
+ }
XposedHelpers.findAndHookMethod(classVolumePref, "onBindDialogView", View.class, new XC_MethodHook() {
@@ -87,8 +108,8 @@ protected void beforeHookedMethod(MethodHookParam param2) throws Throwable {
if (DEBUG) log ("mAudioManager setAudioProfileStreamVolume: " +
param2.args[0] + "," + param2.args[1] + "," + param2.args[2]);
if ((Integer)param2.args[0] != streamType) {
- log("setVolume: mAudioManager.setAudioProfileStreamVolume: " +
- "Attempt to set volume of foreign Stream Type - ignoring");
+ if (DEBUG) log("setVolume: mAudioManager.setAudioProfileStreamVolume: " +
+ "Attempt to set volume of foreign Stream Type - ignoring");
param2.args[0] = streamType;
}
}
@@ -122,8 +143,8 @@ String.class, int.class, int.class, new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param2) throws Throwable {
if ((Integer) param2.args[1] != streamType) {
- log("revertVolume: setStreamVolume: " +
- "Attempt to set volume of foreign Stream Type - ignoring");
+ if (DEBUG) log("revertVolume: setStreamVolume: " +
+ "Attempt to set volume of foreign Stream Type - ignoring");
param2.args[1] = streamType;
}
}
@@ -156,8 +177,8 @@ String.class, int.class, int.class, new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param2) throws Throwable {
if ((Integer) param2.args[1] != streamType) {
- log("saveVolume: setStreamVolume: " +
- "Attempt to set volume of foreign Stream Type - ignoring");
+ if (DEBUG) log("saveVolume: setStreamVolume: " +
+ "Attempt to set volume of foreign Stream Type - ignoring");
param2.args[1] = streamType;
}
}
@@ -172,8 +193,8 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable {
}
}
});
- } catch (Exception e) {
- XposedBridge.log(e);
+ } catch (Throwable t) {
+ XposedBridge.log(t);
}
}
}
\ No newline at end of file
diff --git a/src/com/ceco/gm2/gravitybox/ModBatteryStyle.java b/src/com/ceco/gm2/gravitybox/ModBatteryStyle.java
index 1911d14fd2..95f1aacd7b 100644
--- a/src/com/ceco/gm2/gravitybox/ModBatteryStyle.java
+++ b/src/com/ceco/gm2/gravitybox/ModBatteryStyle.java
@@ -1,14 +1,30 @@
-package com.ceco.gm2.gravitybox;
-
-import static de.robv.android.xposed.XposedHelpers.findClass;
-import static de.robv.android.xposed.XposedHelpers.findAndHookMethod;
+/*
+ * Copyright (C) 2013 Peter Gregus for GravityBox Project (C3C076@xda)
+ * 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.
+ */
-import java.util.ArrayList;
+package com.ceco.gm2.gravitybox;
+import android.annotation.SuppressLint;
import android.content.BroadcastReceiver;
import android.content.Intent;
import android.content.Context;
import android.content.IntentFilter;
+import android.graphics.Color;
+import android.os.BatteryManager;
+import android.os.Build;
+import android.provider.Settings;
+import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
@@ -21,16 +37,31 @@
import de.robv.android.xposed.XposedHelpers;
import de.robv.android.xposed.callbacks.XC_InitPackageResources.InitPackageResourcesParam;
import de.robv.android.xposed.callbacks.XC_LayoutInflated;
-import de.robv.android.xposed.callbacks.XCallback;
public class ModBatteryStyle {
+ private static final String TAG = "GB:ModBatteryStyle";
public static final String PACKAGE_NAME = "com.android.systemui";
public static final String CLASS_PHONE_STATUSBAR = "com.android.systemui.statusbar.phone.PhoneStatusBar";
- public static final String CLASS_BATTERY_CONTROLLER = "com.android.systemui.statusbar.policy.BatteryController";
+ public static final String CLASS_BATTERY_CONTROLLER =
+ "com.android.systemui.statusbar.policy.BatteryController";
+ private static final boolean DEBUG = false;
+
+ private static final String ACTION_MTK_BATTERY_PERCENTAGE_SWITCH =
+ "mediatek.intent.action.BATTERY_PERCENTAGE_SWITCH";
+ public static final String EXTRA_MTK_BATTERY_PERCENTAGE_STATE = "state";
+ public static final String SETTING_MTK_BATTERY_PERCENTAGE = "battery_percentage";
private static int mBatteryStyle;
- private static boolean mBatteryPercentText;
- private static Object mBatteryController;
+ private static boolean mBatteryPercentTextEnabled;
+ private static boolean mMtkPercentTextEnabled;
+ private static StatusbarBatteryPercentage mPercentText;
+ private static CmCircleBattery mCircleBattery;
+ private static View mStockBattery;
+ private static KitKatBattery mKitKatBattery;
+
+ private static void log(String message) {
+ XposedBridge.log(TAG + ": " + message);
+ }
private static BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
@@ -39,22 +70,44 @@ public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(GravityBoxSettings.ACTION_PREF_BATTERY_STYLE_CHANGED)) {
if (intent.hasExtra("batteryStyle")) {
mBatteryStyle = intent.getIntExtra("batteryStyle", 1);
- XposedBridge.log("ModBatteryStyle: mBatteryStyle changed to: " + mBatteryStyle);
+ if (DEBUG) log("mBatteryStyle changed to: " + mBatteryStyle);
}
if (intent.hasExtra("batteryPercent")) {
- mBatteryPercentText = intent.getBooleanExtra("batteryPercent", false);
- XposedBridge.log("ModBatteryStyle: mBatteryPercentText changed to: " + mBatteryPercentText);
+ mBatteryPercentTextEnabled = intent.getBooleanExtra("batteryPercent", false);
+ if (DEBUG) log("mBatteryPercentText changed to: " + mBatteryPercentTextEnabled);
}
- updateBatteryStyle();
+ updateBatteryStyle(null);
+ } else if (intent.getAction().equals(ACTION_MTK_BATTERY_PERCENTAGE_SWITCH)) {
+ mMtkPercentTextEnabled = intent.getIntExtra(EXTRA_MTK_BATTERY_PERCENTAGE_STATE, 0) == 1;
+ if (DEBUG) log("mMtkPercentText changed to: " + mMtkPercentTextEnabled);
+ updateBatteryStyle(null);
}
}
};
public static void initResources(XSharedPreferences prefs, InitPackageResourcesParam resparam) {
try {
- String layout = Utils.isMtkDevice() ? "gemini_super_status_bar" : "super_status_bar";
+ // Before anything else, let's make sure we're not dealing with a Lenovo device
+ // Lenovo is known for doing some deep customizations into UI, so let's just check
+ // if is possible to hook a specific layout and work with it in that case
+ String layout = "lenovo_gemini_super_status_bar";
+ try{
+ resparam.res.hookLayout(PACKAGE_NAME, "layout", layout, new XC_LayoutInflated() {
+
+ @Override
+ public void handleLayoutInflated(LayoutInflatedParam liparam) throws Throwable {
+ if (DEBUG) log("Lenovo custom layout found");
+ }
+ });
+ } catch (Throwable t) {
+ // Specific layout not found, so let's work with standard layout
+ layout = Utils.hasGeminiSupport() ? "gemini_super_status_bar" : "super_status_bar";
+ }
+ final String[] batteryPercentTextIds = new String[] { "percentage", "battery_text" };
+
resparam.res.hookLayout(PACKAGE_NAME, "layout", layout, new XC_LayoutInflated() {
+ @SuppressLint("NewApi")
@Override
public void handleLayoutInflated(LayoutInflatedParam liparam) throws Throwable {
@@ -62,158 +115,177 @@ public void handleLayoutInflated(LayoutInflatedParam liparam) throws Throwable {
liparam.res.getIdentifier("signal_battery_cluster", "id", PACKAGE_NAME));
// inject percent text if it doesn't exist
- TextView percText = (TextView) vg.findViewById(liparam.res.getIdentifier(
- "percentage", "id", PACKAGE_NAME));
- if (percText == null) {
- percText = new TextView(vg.getContext());
- percText.setTag("percentage");
+ for (String bptId : batteryPercentTextIds) {
+ final int bptResId = liparam.res.getIdentifier(
+ bptId, "id", PACKAGE_NAME);
+ if (bptResId != 0) {
+ View v = vg.findViewById(bptResId);
+ if (v != null && v instanceof TextView) {
+ mPercentText = new StatusbarBatteryPercentage((TextView) v);
+ mPercentText.getView().setTag("percentage");
+ if (DEBUG) log("Battery percent text found as: " + bptId);
+ break;
+ }
+ }
+ }
+ if (mPercentText == null) {
+ TextView percentTextView = new TextView(vg.getContext());
+ percentTextView.setTag("percentage");
LinearLayout.LayoutParams lParams = new LinearLayout.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
- percText.setLayoutParams(lParams);
- percText.setPadding(4, 0, 0, 0);
- percText.setTextSize(1, 16);
- percText.setTextColor(StatusBarIconManager.DEFAULT_ICON_COLOR);
- percText.setVisibility(View.GONE);
- vg.addView(percText);
- XposedBridge.log("ModBatteryStyle: Battery percent text injected");
+ percentTextView.setLayoutParams(lParams);
+ percentTextView.setPadding(6, 0, 0, 0);
+ percentTextView.setTextSize(1, 16);
+ percentTextView.setTextColor(Build.VERSION.SDK_INT > 18 ? Color.WHITE :
+ vg.getContext().getResources().getColor(android.R.color.holo_blue_dark));
+ percentTextView.setVisibility(View.GONE);
+ mPercentText = new StatusbarBatteryPercentage(percentTextView);
+ vg.addView(mPercentText.getView());
+ if (DEBUG) log("Battery percent text injected");
}
- ModStatusbarColor.setPercentage(percText);
+ ModStatusbarColor.registerIconManagerListener(mPercentText);
// GM2 specific - if there's already view with id "circle_battery", remove it
- ImageView exView = (ImageView) vg.findViewById(liparam.res.getIdentifier(
- "circle_battery", "id", PACKAGE_NAME));
- if (exView != null) {
- XposedBridge.log("ModBatteryStyle: circle_battery view found - removing");
- vg.removeView(exView);
+ if (Build.DISPLAY.toLowerCase().contains("gravitymod")) {
+ ImageView exView = (ImageView) vg.findViewById(liparam.res.getIdentifier(
+ "circle_battery", "id", PACKAGE_NAME));
+ if (exView != null) {
+ if (DEBUG) log("GM2 circle_battery view found - removing");
+ vg.removeView(exView);
+ }
}
// inject circle battery view
- CmCircleBattery circleBattery = new CmCircleBattery(vg.getContext());
- circleBattery.setTag("circle_battery");
+ mCircleBattery = new CmCircleBattery(vg.getContext());
+ mCircleBattery.setTag("circle_battery");
LinearLayout.LayoutParams lParams = new LinearLayout.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
- circleBattery.setLayoutParams(lParams);
- circleBattery.setPadding(4, 0, 0, 0);
- ModStatusbarColor.setCircleBattery(circleBattery);
- vg.addView(circleBattery);
- XposedBridge.log("ModBatteryStyle: CmCircleBattery injected");
+ lParams.gravity = Gravity.CENTER_VERTICAL;
+ mCircleBattery.setLayoutParams(lParams);
+ mCircleBattery.setPadding(4, 0, 0, 0);
+ mCircleBattery.setVisibility(View.GONE);
+ ModStatusbarColor.registerIconManagerListener(mCircleBattery);
+ vg.addView(mCircleBattery);
+ if (DEBUG) log("CmCircleBattery injected");
+
+ // inject KitKat battery view
+ mKitKatBattery = new KitKatBattery(vg.getContext());
+ mKitKatBattery.setTag("kitkat_battery");
+ final float density = liparam.res.getDisplayMetrics().density;
+ lParams = new LinearLayout.LayoutParams((int)(density * 10.5f),
+ (int)(density * 16));
+ if (Build.VERSION.SDK_INT > 16) {
+ lParams.setMarginStart((int)(density * 4));
+ } else {
+ lParams.leftMargin = Math.round(density * 4);
+ }
+ if (Utils.hasGeminiSupport()) {
+ lParams.bottomMargin = 2;
+ }
+ mKitKatBattery.setLayoutParams(lParams);
+ mKitKatBattery.setVisibility(View.GONE);
+ ModStatusbarColor.registerIconManagerListener(mKitKatBattery);
+ vg.addView(mKitKatBattery);
// find battery
- ImageView battery = (ImageView) vg.findViewById(
+ mStockBattery = vg.findViewById(
liparam.res.getIdentifier("battery", "id", PACKAGE_NAME));
- ModStatusbarColor.setBattery(battery);
+ if (mStockBattery != null) {
+ mStockBattery.setTag("stock_battery");
+ ModStatusbarColor.setBattery(mStockBattery);
+ }
}
});
- } catch (Exception e) {
- XposedBridge.log(e);
+ } catch (Throwable t) {
+ XposedBridge.log(t);
}
}
public static void init(final XSharedPreferences prefs, ClassLoader classLoader) {
+ if (DEBUG) log("init");
- XposedBridge.log("ModBatteryStyle: init");
-
try {
-
- Class> phoneStatusBarClass = findClass(CLASS_PHONE_STATUSBAR, classLoader);
- Class> batteryControllerClass = findClass(CLASS_BATTERY_CONTROLLER, classLoader);
-
- findAndHookMethod(phoneStatusBarClass, "makeStatusBarView", new XC_MethodHook(XCallback.PRIORITY_HIGHEST) {
-
- @Override
- protected void afterHookedMethod(MethodHookParam param) throws Throwable {
-
- Object mBatteryController = XposedHelpers.getObjectField(param.thisObject, "mBatteryController");
- View mStatusBarView = (View) XposedHelpers.getObjectField(param.thisObject, "mStatusBarView");
-
- ImageView circleBattery = (ImageView) mStatusBarView.findViewWithTag("circle_battery");
- if (circleBattery != null) {
- XposedHelpers.callMethod(mBatteryController, "addIconView", circleBattery);
- XposedBridge.log("ModBatteryStyle: BatteryController.addIconView(circleBattery)");
- }
-
- TextView percText = (TextView) mStatusBarView.findViewWithTag("percentage");
- if (percText != null) {
- // add percent text only in case there is no other label view present
- // which might be another percent text coming from stock ROM with id other than "percentage"
- @SuppressWarnings("unchecked")
- ArrayList mLabelViews =
- (ArrayList) XposedHelpers.getObjectField(mBatteryController, "mLabelViews");
- if (mLabelViews.isEmpty()) {
- XposedHelpers.callMethod(mBatteryController, "addLabelView", percText);
- XposedBridge.log("ModBatteryStyle: BatteryController.addLabelView(percText)");
- }
- }
- }
- });
+ Class> batteryControllerClass = XposedHelpers.findClass(CLASS_BATTERY_CONTROLLER, classLoader);
XposedBridge.hookAllConstructors(batteryControllerClass, new XC_MethodHook() {
@Override
protected void afterHookedMethod(final MethodHookParam param) throws Throwable {
- mBatteryController = param.thisObject;
-
prefs.reload();
- mBatteryStyle = Integer.valueOf(prefs.getString(GravityBoxSettings.PREF_KEY_BATTERY_STYLE, "1"));
- mBatteryPercentText = prefs.getBoolean(GravityBoxSettings.PREF_KEY_BATTERY_PERCENT_TEXT, false);
- // handle obsolete settings
- if (mBatteryStyle == 4) {
- mBatteryStyle = GravityBoxSettings.BATTERY_STYLE_STOCK;
- }
+ mBatteryStyle = Integer.valueOf(prefs.getString(
+ GravityBoxSettings.PREF_KEY_BATTERY_STYLE, "1"));
+ mBatteryPercentTextEnabled = prefs.getBoolean(
+ GravityBoxSettings.PREF_KEY_BATTERY_PERCENT_TEXT, false);
+
+ Context context = (Context) param.args[0];
+ mMtkPercentTextEnabled = Utils.isMtkDevice() ?
+ Settings.Secure.getInt(context.getContentResolver(),
+ SETTING_MTK_BATTERY_PERCENTAGE, 0) == 1 : false;
- Context context = (Context) XposedHelpers.getObjectField(mBatteryController, "mContext");
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(GravityBoxSettings.ACTION_PREF_BATTERY_STYLE_CHANGED);
+ if (Utils.isMtkDevice()) {
+ intentFilter.addAction(ACTION_MTK_BATTERY_PERCENTAGE_SWITCH);
+ }
context.registerReceiver(mBroadcastReceiver, intentFilter);
- XposedBridge.log("ModBatteryStyle: BatteryController constructed");
+ updateBatteryStyle(null);
+ if (DEBUG) log("BatteryController constructed");
}
});
- findAndHookMethod(batteryControllerClass, "onReceive", Context.class, Intent.class, new XC_MethodHook() {
-
+ XposedHelpers.findAndHookMethod(batteryControllerClass, "onReceive",
+ Context.class, Intent.class, new XC_MethodHook() {
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
- updateBatteryStyle();
+ Integer level = null;
+ Intent intent = (Intent) param.args[1];
+ if (intent != null) {
+ level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0);
+ }
+ updateBatteryStyle(level);
}
});
}
- catch (Exception e) {
- XposedBridge.log(e);
+ catch (Throwable t) {
+ XposedBridge.log(t);
}
}
- private static void updateBatteryStyle() {
- if (mBatteryController == null) return;
+ private static void updateBatteryStyle(Integer level) {
+ try {
+ if (mStockBattery != null) {
+ mStockBattery.setVisibility((mBatteryStyle == GravityBoxSettings.BATTERY_STYLE_STOCK) ?
+ View.VISIBLE : View.GONE);
+ }
- @SuppressWarnings("unchecked")
- ArrayList mIconViews =
- (ArrayList) XposedHelpers.getObjectField(mBatteryController, "mIconViews");
- @SuppressWarnings("unchecked")
- ArrayList mLabelViews =
- (ArrayList) XposedHelpers.getObjectField(mBatteryController, "mLabelViews");
+ if (mCircleBattery != null) {
+ mCircleBattery.setVisibility((mBatteryStyle == GravityBoxSettings.BATTERY_STYLE_CIRCLE ||
+ mBatteryStyle == GravityBoxSettings.BATTERY_STYLE_CIRCLE_PERCENT) ?
+ View.VISIBLE : View.GONE);
+ mCircleBattery.setPercentage(
+ mBatteryStyle == GravityBoxSettings.BATTERY_STYLE_CIRCLE_PERCENT);
+ }
- if (!mIconViews.isEmpty()) {
- mIconViews.get(0).setVisibility(
- (mBatteryStyle == GravityBoxSettings.BATTERY_STYLE_STOCK) ?
- View.VISIBLE : View.GONE);
+ if (mKitKatBattery != null) {
+ mKitKatBattery.setVisibility((mBatteryStyle == GravityBoxSettings.BATTERY_STYLE_KITKAT ||
+ mBatteryStyle == GravityBoxSettings.BATTERY_STYLE_KITKAT_PERCENT) ?
+ View.VISIBLE : View.GONE);
+ mKitKatBattery.setShowPercent(
+ mBatteryStyle == GravityBoxSettings.BATTERY_STYLE_KITKAT_PERCENT);
+ }
- if (mIconViews.size() >= 2) {
- ImageView iv = mIconViews.get(1);
- if (iv instanceof CmCircleBattery) {
- iv.setVisibility((mBatteryStyle == GravityBoxSettings.BATTERY_STYLE_CIRCLE ||
- mBatteryStyle == GravityBoxSettings.BATTERY_STYLE_CIRCLE_PERCENT) ?
- View.VISIBLE : View.GONE);
- ((CmCircleBattery)iv).setPercentage(
- mBatteryStyle == GravityBoxSettings.BATTERY_STYLE_CIRCLE_PERCENT);
+ if (mPercentText != null) {
+ if (level != null) {
+ mPercentText.getView().setText(level + "%");
}
+ mPercentText.getView().setVisibility(
+ (mBatteryPercentTextEnabled || mMtkPercentTextEnabled) ?
+ View.VISIBLE : View.GONE);
}
- }
-
- if (!mLabelViews.isEmpty()) {
- mLabelViews.get(0).setVisibility(
- (mBatteryPercentText ? View.VISIBLE : View.GONE));
+ } catch (Throwable t) {
+ XposedBridge.log(t);
}
}
-}
\ No newline at end of file
+}
diff --git a/src/com/ceco/gm2/gravitybox/ModCallCard.java b/src/com/ceco/gm2/gravitybox/ModCallCard.java
index 3643f991a4..5466bdcb20 100644
--- a/src/com/ceco/gm2/gravitybox/ModCallCard.java
+++ b/src/com/ceco/gm2/gravitybox/ModCallCard.java
@@ -1,8 +1,31 @@
+/*
+ * Copyright (C) 2013 Peter Gregus for GravityBox Project (C3C076@xda)
+ * 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.ceco.gm2.gravitybox;
+import java.io.File;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
import android.graphics.Color;
+import android.os.Build;
import android.view.View;
import android.view.ViewGroup;
+import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import de.robv.android.xposed.XC_MethodHook;
@@ -11,29 +34,35 @@
import de.robv.android.xposed.XposedHelpers;
public class ModCallCard {
- private static final String TAG = "ModCallCard";
+ private static final String TAG = "GB:ModCallCard";
public static final String PACKAGE_NAME = "com.android.phone";
private static final String CLASS_CALLCARD = "com.android.phone.CallCard";
- private static final String CLASS_PHONE_CONSTANTS_STATE =
- "com.android.internal.telephony.PhoneConstants$State";
+ private static final String CLASS_PHONE_CONSTANTS_STATE = Build.VERSION.SDK_INT > 16 ?
+ "com.android.internal.telephony.PhoneConstants$State" :
+ "com.android.internal.telephony.Phone$State";
private static final String CLASS_CALL = "com.android.internal.telephony.Call";
private static final String CLASS_IN_CALL_TOUCH_UI = "com.android.phone.InCallTouchUi";
+ private static final boolean DEBUG = false;
private static Class> phoneConstStateClass;
private static Class> callClass;
public static void initZygote() {
- XposedBridge.log(TAG + ": initZygote");
- phoneConstStateClass = XposedHelpers.findClass(CLASS_PHONE_CONSTANTS_STATE, null);
- callClass = XposedHelpers.findClass(CLASS_CALL, null);
+ try {
+ if (DEBUG) XposedBridge.log(TAG + ": initZygote");
+ phoneConstStateClass = XposedHelpers.findClass(CLASS_PHONE_CONSTANTS_STATE, null);
+ callClass = XposedHelpers.findClass(CLASS_CALL, null);
+ } catch (Throwable t) {
+ XposedBridge.log(t);
+ }
}
public static void init(final XSharedPreferences prefs, ClassLoader classLoader) {
- XposedBridge.log(TAG + ": init");
+ if (DEBUG) XposedBridge.log(TAG + ": init");
try {
- Class> callCardClass = XposedHelpers.findClass(CLASS_CALLCARD, classLoader);
- Class> inCallTouchUiClass = XposedHelpers.findClass(CLASS_IN_CALL_TOUCH_UI, classLoader);
+ final Class> callCardClass = XposedHelpers.findClass(CLASS_CALLCARD, classLoader);
+ final Class> inCallTouchUiClass = XposedHelpers.findClass(CLASS_IN_CALL_TOUCH_UI, classLoader);
XposedHelpers.findAndHookMethod(callCardClass, "updateCallInfoLayout", phoneConstStateClass,
new XC_MethodHook() {
@@ -42,7 +71,7 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable {
prefs.reload();
if (!prefs.getBoolean(GravityBoxSettings.PREF_KEY_CALLER_FULLSCREEN_PHOTO, false))
return;
- XposedBridge.log(TAG + ": CallCard: after updateCallInfoLayout");
+ if (DEBUG) XposedBridge.log(TAG + ": CallCard: after updateCallInfoLayout");
LinearLayout layout = (LinearLayout) param.thisObject;
ViewGroup.MarginLayoutParams mlParams =
@@ -61,7 +90,7 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable {
prefs.reload();
if (!prefs.getBoolean(GravityBoxSettings.PREF_KEY_CALLER_FULLSCREEN_PHOTO, false))
return;
- XposedBridge.log(TAG + ": CallCard: after updateCallBannerBackground");
+ if (DEBUG) XposedBridge.log(TAG + ": CallCard: after updateCallBannerBackground");
TextView simIndicator =
(TextView) XposedHelpers.getObjectField(param.thisObject, "mSimIndicator");
@@ -88,7 +117,7 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable {
callClass, new XC_MethodHook() {
@Override
protected void afterHookedMethod(final MethodHookParam param) throws Throwable {
- XposedBridge.log(TAG + ": InCallTouchUi: after showIncomingCallWidget");
+ if (DEBUG) XposedBridge.log(TAG + ": InCallTouchUi: after showIncomingCallWidget");
prefs.reload();
boolean showFullscreen =
prefs.getBoolean(GravityBoxSettings.PREF_KEY_CALLER_FULLSCREEN_PHOTO, false);
@@ -96,12 +125,45 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable {
View incomingCallWidget =
(View) XposedHelpers.getObjectField(param.thisObject, "mIncomingCallWidget");
if (incomingCallWidget != null) {
- incomingCallWidget.setBackgroundColor(showFullscreen ? Color.TRANSPARENT : Color.BLACK);
+ if (showFullscreen) {
+ incomingCallWidget.setBackgroundColor(Color.TRANSPARENT);
+ } else if (Build.DISPLAY.toLowerCase().contains("gravitymod")) {
+ incomingCallWidget.setBackgroundColor(Color.BLACK);
+ }
+ }
+ }
+ });
+
+ XposedHelpers.findAndHookMethod(callCardClass, "showImage",
+ ImageView.class, int.class, new XC_MethodHook() {
+ @Override
+ protected void beforeHookedMethod(final MethodHookParam param) throws Throwable {
+ if (!prefs.getBoolean(
+ GravityBoxSettings.PREF_KEY_CALLER_UNKNOWN_PHOTO_ENABLE, false) ||
+ param.args[0] == null) return;
+
+ final ImageView iv = (ImageView) param.args[0];
+ final Context context = iv.getContext();
+ final int resId = context.getResources().getIdentifier(
+ "picture_unknown", "drawable", PACKAGE_NAME);
+
+ if (resId == (Integer) param.args[1]) {
+ Context gbContext = context.createPackageContext(GravityBox.PACKAGE_NAME, 0);
+ final String path = gbContext.getFilesDir() + "/caller_photo";
+ File f = new File(path);
+ if (f.exists()) {
+ Bitmap b = BitmapFactory.decodeFile(path);
+ if (b != null) {
+ XposedHelpers.callStaticMethod(callCardClass, "showImage", iv, b);
+ param.setResult(null);
+ return;
+ }
+ }
}
}
});
- } catch (Exception e) {
- XposedBridge.log(e);
+ } catch (Throwable t) {
+ XposedBridge.log(t);
}
}
}
\ No newline at end of file
diff --git a/src/com/ceco/gm2/gravitybox/ModCellConnService.java b/src/com/ceco/gm2/gravitybox/ModCellConnService.java
index 65466d32cc..a9a176a8ff 100644
--- a/src/com/ceco/gm2/gravitybox/ModCellConnService.java
+++ b/src/com/ceco/gm2/gravitybox/ModCellConnService.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright (C) 2013 Peter Gregus for GravityBox Project (C3C076@xda)
+ * 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.ceco.gm2.gravitybox;
import android.app.Activity;
@@ -9,7 +24,7 @@
public class ModCellConnService {
public static final String PACKAGE_NAME = "com.mediatek.CellConnService";
- private static final String TAG = "ModCellConnService";
+ private static final String TAG = "GB:ModCellConnService";
private static final String CLASS_CONFIRM_DLG = "com.mediatek.CellConnService.ConfirmDlgActivity";
private static final boolean DEBUG = false;
@@ -43,8 +58,8 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
}
}
});
- } catch (Exception e) {
- XposedBridge.log(e);
+ } catch (Throwable t) {
+ XposedBridge.log(t);
}
}
}
\ No newline at end of file
diff --git a/src/com/ceco/gm2/gravitybox/ModCenterClock.java b/src/com/ceco/gm2/gravitybox/ModCenterClock.java
deleted file mode 100644
index 25afbe0a1a..0000000000
--- a/src/com/ceco/gm2/gravitybox/ModCenterClock.java
+++ /dev/null
@@ -1,251 +0,0 @@
-package com.ceco.gm2.gravitybox;
-
-import java.util.Calendar;
-import java.util.Locale;
-import java.util.TimeZone;
-
-import de.robv.android.xposed.XC_MethodHook;
-import de.robv.android.xposed.XSharedPreferences;
-import de.robv.android.xposed.XposedBridge;
-import de.robv.android.xposed.XposedHelpers;
-import de.robv.android.xposed.callbacks.XC_LayoutInflated;
-import de.robv.android.xposed.callbacks.XC_InitPackageResources.InitPackageResourcesParam;
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.content.res.Resources;
-import android.text.Spannable;
-import android.text.SpannableStringBuilder;
-import android.text.format.DateFormat;
-import android.text.style.RelativeSizeSpan;
-import android.view.Gravity;
-import android.view.View;
-import android.view.ViewGroup;
-import android.view.ViewGroup.LayoutParams;
-import android.view.animation.Animation;
-import android.widget.LinearLayout;
-import android.widget.TextView;
-
-public class ModCenterClock {
- public static final String PACKAGE_NAME = "com.android.systemui";
- private static final String TAG = "ModCenterClock";
- private static final String CLASS_PHONE_STATUSBAR = "com.android.systemui.statusbar.phone.PhoneStatusBar";
- private static final String CLASS_TICKER = "com.android.systemui.statusbar.phone.PhoneStatusBar$MyTicker";
-
- private static ViewGroup mIconArea;
- private static ViewGroup mRootView;
- private static LinearLayout mLayoutClock;
- private static TextView mClock;
- private static Object mPhoneStatusBar;
- private static Context mContext;
- private static int mAnimPushUpOut;
- private static int mAnimPushDownIn;
- private static int mAnimFadeIn;
- private static boolean mClockCentered = false;
- private static int mClockOriginalPaddingLeft;
- private static boolean mClockShowDow = false;
-
- private static void log(String message) {
- XposedBridge.log(TAG + ": " + message);
- }
-
- private static BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
-
- @Override
- public void onReceive(Context context, Intent intent) {
- log("Broadcast received: " + intent.toString());
- if (intent.getAction().equals(GravityBoxSettings.ACTION_PREF_CENTER_CLOCK_CHANGED)) {
- setClockPosition(intent.getBooleanExtra(GravityBoxSettings.EXTRA_CENTER_CLOCK, false));
- } else if (intent.getAction().equals(GravityBoxSettings.ACTION_PREF_CLOCK_DOW)) {
- mClockShowDow = intent.getBooleanExtra(GravityBoxSettings.EXTRA_CLOCK_DOW, false);
- if (mClock != null) {
- XposedHelpers.callMethod(mClock, "updateClock");
- }
- }
- }
- };
-
- public static void initResources(final XSharedPreferences prefs, final InitPackageResourcesParam resparam) {
- try {
- String layout = Utils.isMtkDevice() ? "gemini_super_status_bar" : "super_status_bar";
- resparam.res.hookLayout(PACKAGE_NAME, "layout", layout, new XC_LayoutInflated() {
-
- @Override
- public void handleLayoutInflated(LayoutInflatedParam liparam) throws Throwable {
- prefs.reload();
- mClockShowDow = prefs.getBoolean(GravityBoxSettings.PREF_KEY_STATUSBAR_CLOCK_DOW, false);
-
- mIconArea = (ViewGroup) liparam.view.findViewById(
- liparam.res.getIdentifier("system_icon_area", "id", PACKAGE_NAME));
- if (mIconArea == null) return;
-
- mRootView = (ViewGroup) mIconArea.getParent().getParent();
- if (mRootView == null) return;
-
- mClock = (TextView) mIconArea.findViewById(
- liparam.res.getIdentifier("clock", "id", PACKAGE_NAME));
- if (mClock == null) return;
- ModStatusbarColor.setClock(mClock);
- // use this additional field to identify the instance of Clock that resides in status bar
- XposedHelpers.setAdditionalInstanceField(mClock, "sbClock", true);
- mClockOriginalPaddingLeft = mClock.getPaddingLeft();
-
- // inject new clock layout
- mLayoutClock = new LinearLayout(liparam.view.getContext());
- mLayoutClock.setLayoutParams(new LinearLayout.LayoutParams(
- LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
- mLayoutClock.setGravity(Gravity.CENTER);
- mLayoutClock.setVisibility(View.GONE);
- mRootView.addView(mLayoutClock);
- log("mLayoutClock injected");
-
- XposedHelpers.findAndHookMethod(mClock.getClass(), "getSmallTime", new XC_MethodHook() {
- @Override
- protected void afterHookedMethod(MethodHookParam param) throws Throwable {
- // is this a status bar Clock instance?
- // yes, if it contains our additional sbClock field
- Object sbClock = XposedHelpers.getAdditionalInstanceField(param.thisObject, "sbClock");
- if (sbClock != null) {
- Calendar calendar = Calendar.getInstance(TimeZone.getDefault());
- String clockText = param.getResult().toString();
- String amPm = calendar.getDisplayName(
- Calendar.AM_PM, Calendar.SHORT, Locale.getDefault());
- int amPmIndex = clockText.indexOf(amPm);
- // insert AM/PM if missing
- if (!DateFormat.is24HourFormat(mClock.getContext()) && amPmIndex == -1) {
- clockText += " " + amPm;
- amPmIndex = clockText.indexOf(amPm);
- }
- CharSequence dow = "";
- if (mClockShowDow) {
- dow = calendar.getDisplayName(
- Calendar.DAY_OF_WEEK, Calendar.SHORT, Locale.getDefault()) + " ";
- }
- clockText = dow + clockText;
- SpannableStringBuilder sb = new SpannableStringBuilder(clockText);
- sb.setSpan(new RelativeSizeSpan(0.7f), 0, dow.length(),
- Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
- if (amPmIndex > -1) {
- int offset = Character.isWhitespace(clockText.charAt(dow.length() + amPmIndex - 1)) ?
- 1 : 0;
- sb.setSpan(new RelativeSizeSpan(0.7f), dow.length() + amPmIndex - offset,
- dow.length() + amPmIndex + amPm.length(),
- Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
- }
- param.setResult(sb);
- }
- }
- });
-
- setClockPosition(prefs.getBoolean(
- GravityBoxSettings.PREF_KEY_STATUSBAR_CENTER_CLOCK, false));
- }
- });
- } catch (Exception e) {
- XposedBridge.log(e);
- }
- }
-
- public static void init(final XSharedPreferences prefs, final ClassLoader classLoader) {
- try {
- final Class> phoneStatusBarClass =
- XposedHelpers.findClass(CLASS_PHONE_STATUSBAR, classLoader);
- final Class> tickerClass =
- XposedHelpers.findClass(CLASS_TICKER, classLoader);
-
- final Class>[] loadAnimParamArgs = new Class>[2];
- loadAnimParamArgs[0] = int.class;
- loadAnimParamArgs[1] = Animation.AnimationListener.class;
-
- XposedHelpers.findAndHookMethod(phoneStatusBarClass, "makeStatusBarView", new XC_MethodHook() {
-
- @Override
- protected void afterHookedMethod(MethodHookParam param) throws Throwable {
- mPhoneStatusBar = param.thisObject;
- mContext = (Context) XposedHelpers.getObjectField(mPhoneStatusBar, "mContext");
- Resources res = mContext.getResources();
- mAnimPushUpOut = res.getIdentifier("push_up_out", "anim", "android");
- mAnimPushDownIn = res.getIdentifier("push_down_in", "anim", "android");
- mAnimFadeIn = res.getIdentifier("fade_in", "anim", "android");
-
- IntentFilter intentFilter = new IntentFilter();
- intentFilter.addAction(GravityBoxSettings.ACTION_PREF_CENTER_CLOCK_CHANGED);
- intentFilter.addAction(GravityBoxSettings.ACTION_PREF_CLOCK_DOW);
- mContext.registerReceiver(mBroadcastReceiver, intentFilter);
- }
- });
-
- XposedHelpers.findAndHookMethod(tickerClass, "tickerStarting", new XC_MethodHook() {
-
- @Override
- protected void afterHookedMethod(MethodHookParam param) throws Throwable {
- if (mLayoutClock == null || !mClockCentered) return;
-
- mLayoutClock.setVisibility(View.GONE);
- Animation anim = (Animation) XposedHelpers.callMethod(
- mPhoneStatusBar, "loadAnim", loadAnimParamArgs, mAnimPushUpOut, null);
- mLayoutClock.startAnimation(anim);
- }
- });
-
- XposedHelpers.findAndHookMethod(tickerClass, "tickerDone", new XC_MethodHook() {
-
- @Override
- protected void afterHookedMethod(MethodHookParam param) throws Throwable {
- if (mLayoutClock == null || !mClockCentered) return;
-
- mLayoutClock.setVisibility(View.VISIBLE);
- Animation anim = (Animation) XposedHelpers.callMethod(
- mPhoneStatusBar, "loadAnim", loadAnimParamArgs, mAnimPushDownIn, null);
- mLayoutClock.startAnimation(anim);
- }
- });
-
- XposedHelpers.findAndHookMethod(tickerClass, "tickerHalting", new XC_MethodHook() {
-
- @Override
- protected void afterHookedMethod(MethodHookParam param) throws Throwable {
- if (mLayoutClock == null || !mClockCentered) return;
-
- mLayoutClock.setVisibility(View.VISIBLE);
- Animation anim = (Animation) XposedHelpers.callMethod(
- mPhoneStatusBar, "loadAnim", loadAnimParamArgs, mAnimFadeIn, null);
- mLayoutClock.startAnimation(anim);
- }
- });
- }
- catch (Exception e) {
- XposedBridge.log(e);
- }
- }
-
- private static void setClockPosition(boolean center) {
- if (mClockCentered == center || mClock == null ||
- mIconArea == null || mLayoutClock == null) {
- return;
- }
-
- if (center) {
- mClock.setGravity(Gravity.CENTER);
- mClock.setLayoutParams(new LinearLayout.LayoutParams(
- LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
- mClock.setPadding(0, 0, 0, 0);
- mIconArea.removeView(mClock);
- mLayoutClock.addView(mClock);
- mLayoutClock.setVisibility(View.VISIBLE);
- log("Clock set to center position");
- } else {
- mClock.setGravity(Gravity.LEFT | Gravity.CENTER_VERTICAL);
- mClock.setLayoutParams(new LinearLayout.LayoutParams(
- LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT));
- mClock.setPadding(mClockOriginalPaddingLeft, 0, 0, 0);
- mLayoutClock.removeView(mClock);
- mIconArea.addView(mClock);
- mLayoutClock.setVisibility(View.GONE);
- log("Clock set to normal position");
- }
-
- mClockCentered = center;
- }
-}
\ No newline at end of file
diff --git a/src/com/ceco/gm2/gravitybox/ModClearAllRecents.java b/src/com/ceco/gm2/gravitybox/ModClearAllRecents.java
index 0c961cf5c2..d218a682d9 100644
--- a/src/com/ceco/gm2/gravitybox/ModClearAllRecents.java
+++ b/src/com/ceco/gm2/gravitybox/ModClearAllRecents.java
@@ -1,16 +1,39 @@
+/*
+ * Copyright (C) 2013 Peter Gregus for GravityBox Project (C3C076@xda)
+ * 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.ceco.gm2.gravitybox;
+import java.util.List;
+
+
+import android.app.ActivityManager;
+import android.content.Context;
import android.content.res.Resources;
import android.os.Build;
import android.os.Handler;
+import android.text.format.Formatter;
import android.util.TypedValue;
import android.view.Gravity;
+import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ImageView.ScaleType;
+import android.widget.TextView;
import de.robv.android.xposed.XC_MethodHook;
import de.robv.android.xposed.XSharedPreferences;
@@ -19,11 +42,28 @@
import de.robv.android.xposed.XC_MethodHook.MethodHookParam;
public class ModClearAllRecents {
- private static final String TAG = "ModClearAllRecents";
+ private static final String TAG = "GB:ModClearAllRecents";
public static final String PACKAGE_NAME = "com.android.systemui";
public static final String CLASS_RECENT_VERTICAL_SCROLL_VIEW = "com.android.systemui.recent.RecentsVerticalScrollView";
public static final String CLASS_RECENT_HORIZONTAL_SCROLL_VIEW = "com.android.systemui.recent.RecentsHorizontalScrollView";
public static final String CLASS_RECENT_PANEL_VIEW = "com.android.systemui.recent.RecentsPanelView";
+ private static final boolean DEBUG = false;
+
+ private static XSharedPreferences mPrefs;
+ private static ImageView mRecentsClearButton;
+
+ // RAM bar
+ private static TextView mBackgroundProcessText;
+ private static TextView mForegroundProcessText;
+ private static ActivityManager mAm;
+ private static MemInfoReader mMemInfoReader;
+ private static Context mGbContext;
+ private static LinearColorBar mRamUsageBar;
+ private static Handler mHandler;
+ private static int[] mRamUsageBarPaddings;
+ private static int mClearAllRecentsSizePx;
+ private static int mRamUsageBarVerticalMargin;
+ private static int mRamUsageBarHorizontalMargin;
private static void log(String message) {
XposedBridge.log(TAG + ": " + message);
@@ -31,42 +71,43 @@ private static void log(String message) {
public static void init(final XSharedPreferences prefs, ClassLoader classLoader) {
try {
+ mPrefs = prefs;
Class> recentPanelViewClass = XposedHelpers.findClass(CLASS_RECENT_PANEL_VIEW, classLoader);
Class> recentVerticalScrollView = XposedHelpers.findClass(CLASS_RECENT_VERTICAL_SCROLL_VIEW, classLoader);
Class> recentHorizontalScrollView = XposedHelpers.findClass(CLASS_RECENT_HORIZONTAL_SCROLL_VIEW, classLoader);
- XposedHelpers.findAndHookMethod(recentPanelViewClass, "showImpl", boolean.class, new XC_MethodHook() {
+ mMemInfoReader = new MemInfoReader();
+
+ if (Build.VERSION.SDK_INT > 16) {
+ XposedHelpers.findAndHookMethod(recentPanelViewClass, "showImpl",
+ boolean.class, recentsPanelViewShowHook);
+ } else {
+ XposedHelpers.findAndHookMethod(recentPanelViewClass, "showIfReady",
+ recentsPanelViewShowHook);
+ }
+
+ XposedBridge.hookAllConstructors(recentPanelViewClass, new XC_MethodHook() {
@Override
- protected void beforeHookedMethod(final MethodHookParam param) throws Throwable {
- if ((Boolean)param.args[0]) {
- prefs.reload();
- int gravity = Integer.valueOf(prefs.getString(
- GravityBoxSettings.PREF_KEY_RECENTS_CLEAR_ALL, "53"));
- FrameLayout fl = (FrameLayout) param.thisObject;
- ImageView iv = (ImageView) fl.findViewWithTag("clearAllButton");
- if (iv == null) {
- log("WTF? Clear all recents button not found!");
- return;
- }
+ protected void afterHookedMethod(final MethodHookParam param) throws Throwable {
+ final View v = (View) param.thisObject;
+ Context context = v.getContext();
+ mGbContext = context.createPackageContext(GravityBox.PACKAGE_NAME, Context.CONTEXT_IGNORE_SECURITY);
+ mHandler = new Handler();
+ mAm = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
- if (gravity == GravityBoxSettings.RECENT_CLEAR_OFF) {
- iv.setVisibility(View.GONE);
- } else {
- FrameLayout.LayoutParams lparams = (FrameLayout.LayoutParams) iv.getLayoutParams();
- lparams.gravity = gravity;
- if ((gravity & Gravity.TOP) != 0) {
- int marginTop = (int) TypedValue.applyDimension(
- TypedValue.COMPLEX_UNIT_DIP,
- prefs.getInt(GravityBoxSettings.PREF_KEY_RECENTS_CLEAR_MARGIN_TOP, 0),
- iv.getResources().getDisplayMetrics());
- lparams.setMargins(0, marginTop, 0, 0);
- } else {
- lparams.setMargins(0, 0, 0, 0);
- }
- iv.setLayoutParams(lparams);
- iv.setVisibility(View.VISIBLE);
- }
- }
+ final Resources res = context.getResources();
+ mRamUsageBarPaddings = new int[4];
+ mRamUsageBarPaddings[0] = mRamUsageBarPaddings[2] = (int) TypedValue.applyDimension(
+ TypedValue.COMPLEX_UNIT_DIP, 4, res.getDisplayMetrics());
+ mRamUsageBarPaddings[1] = mRamUsageBarPaddings[3] = (int) TypedValue.applyDimension(
+ TypedValue.COMPLEX_UNIT_DIP, 1, res.getDisplayMetrics());
+ mClearAllRecentsSizePx = (int) TypedValue.applyDimension(
+ TypedValue.COMPLEX_UNIT_DIP, 50, res.getDisplayMetrics());
+ mRamUsageBarVerticalMargin = (int) TypedValue.applyDimension(
+ TypedValue.COMPLEX_UNIT_DIP, 15, res.getDisplayMetrics());
+ mRamUsageBarHorizontalMargin = (int) TypedValue.applyDimension(
+ TypedValue.COMPLEX_UNIT_DIP, 10, res.getDisplayMetrics());
+ if (DEBUG) log("Recents panel view constructed");
}
});
@@ -81,21 +122,20 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable {
if (Build.DISPLAY.toLowerCase().contains("gravitymod")) {
View rcv = vg.findViewById(res.getIdentifier("recents_clear", "id", PACKAGE_NAME));
if (rcv != null) {
- log("recents_clear ImageView found (GM2?) - removing");
+ if (DEBUG) log("recents_clear ImageView found (GM2?) - removing");
vg.removeView(rcv);
}
}
// create and inject new ImageView and set onClick listener to handle action
- ImageView imgView = new ImageView(vg.getContext());
- imgView.setImageDrawable(res.getDrawable(res.getIdentifier("ic_notify_clear", "drawable", PACKAGE_NAME)));
- int sizePx = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 50, res.getDisplayMetrics());
- FrameLayout.LayoutParams lParams = new FrameLayout.LayoutParams(sizePx, sizePx);
- imgView.setLayoutParams(lParams);
- imgView.setScaleType(ScaleType.CENTER);
- imgView.setClickable(true);
- imgView.setTag("clearAllButton");
- imgView.setOnClickListener(new View.OnClickListener() {
+ mRecentsClearButton = new ImageView(vg.getContext());
+ mRecentsClearButton.setImageDrawable(res.getDrawable(res.getIdentifier("ic_notify_clear", "drawable", PACKAGE_NAME)));
+ FrameLayout.LayoutParams lParams = new FrameLayout.LayoutParams(
+ mClearAllRecentsSizePx, mClearAllRecentsSizePx);
+ mRecentsClearButton.setLayoutParams(lParams);
+ mRecentsClearButton.setScaleType(ScaleType.CENTER);
+ mRecentsClearButton.setClickable(true);
+ mRecentsClearButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
@@ -105,8 +145,27 @@ public void onClick(View v) {
mRecentsContainer.removeViewInLayout(null);
}
});
- vg.addView(imgView);
- log("clearAllButton ImageView injected");
+ mRecentsClearButton.setVisibility(View.GONE);
+ vg.addView(mRecentsClearButton);
+ if (DEBUG) log("clearAllButton ImageView injected");
+
+ // create and inject RAM bar
+ mRamUsageBar = new LinearColorBar(vg.getContext(), null);
+ mRamUsageBar.setOrientation(LinearLayout.HORIZONTAL);
+ mRamUsageBar.setClipChildren(false);
+ mRamUsageBar.setClipToPadding(false);
+ mRamUsageBar.setPadding(mRamUsageBarPaddings[0], mRamUsageBarPaddings[1],
+ mRamUsageBarPaddings[2], mRamUsageBarPaddings[3]);
+ FrameLayout.LayoutParams flp = new FrameLayout.LayoutParams(
+ FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.WRAP_CONTENT);
+ mRamUsageBar.setLayoutParams(flp);
+ LayoutInflater inflater = LayoutInflater.from(mGbContext);
+ inflater.inflate(R.layout.linear_color_bar, mRamUsageBar, true);
+ vg.addView(mRamUsageBar);
+ mForegroundProcessText = (TextView) mRamUsageBar.findViewById(R.id.foregroundText);
+ mBackgroundProcessText = (TextView) mRamUsageBar.findViewById(R.id.backgroundText);
+ mRamUsageBar.setVisibility(View.GONE);
+ if (DEBUG) log("RAM bar injected");
}
});
@@ -125,17 +184,94 @@ protected void beforeHookedMethod(final MethodHookParam param) throws Throwable
handleDismissChild(param);
}
});
- } catch (Exception e) {
- XposedBridge.log(e);
+
+ // When to update RAM bar values
+ XposedHelpers.findAndHookMethod(recentPanelViewClass, "clearRecentTasksList",
+ updateRambarHook);
+ XposedHelpers.findAndHookMethod(recentPanelViewClass, "handleSwipe",
+ View.class, updateRambarHook);
+ if (Build.VERSION.SDK_INT > 16) {
+ XposedHelpers.findAndHookMethod(recentPanelViewClass, "refreshViews",
+ updateRambarHook);
+ }
+ } catch (Throwable t) {
+ XposedBridge.log(t);
}
}
+ private static XC_MethodHook updateRambarHook = new XC_MethodHook() {
+ @Override
+ protected void afterHookedMethod(final MethodHookParam param) throws Throwable {
+ if (mHandler != null) {
+ mHandler.post(updateRamBarTask);
+ }
+ }
+ };
+
+ private static XC_MethodHook recentsPanelViewShowHook = new XC_MethodHook() {
+ @Override
+ protected void afterHookedMethod(final MethodHookParam param) throws Throwable {
+ try {
+ boolean show = false;
+ if (Build.VERSION.SDK_INT < 17) {
+ show = XposedHelpers.getBooleanField(param.thisObject, "mWaitingToShow")
+ && XposedHelpers.getBooleanField(param.thisObject, "mReadyToShow");
+ } else {
+ show = (Boolean) param.args[0];
+ }
+ if (show) {
+ mPrefs.reload();
+ updateButtonLayout((View) param.thisObject);
+ updateRamBarLayout();
+ }
+ } catch (Throwable t) {
+ XposedBridge.log(t);
+ }
+ }
+ };
+
+ private static void updateButtonLayout(View container) {
+ if (mRecentsClearButton == null) return;
+
+ int gravity = Integer.valueOf(mPrefs.getString(
+ GravityBoxSettings.PREF_KEY_RECENTS_CLEAR_ALL, "53"));
+ List> recentTaskDescriptions = (List>) XposedHelpers.getObjectField(
+ container, "mRecentTaskDescriptions");
+ boolean visible = (recentTaskDescriptions != null && recentTaskDescriptions.size() > 0);
+ if (Build.VERSION.SDK_INT < 17) {
+ visible |= XposedHelpers.getBooleanField(container, "mFirstScreenful");
+ }
+ if (gravity != GravityBoxSettings.RECENT_CLEAR_OFF && visible) {
+ FrameLayout.LayoutParams lparams =
+ (FrameLayout.LayoutParams) mRecentsClearButton.getLayoutParams();
+ lparams.gravity = gravity;
+ if (gravity == 51 || gravity == 53) {
+ int marginTop = (int) TypedValue.applyDimension(
+ TypedValue.COMPLEX_UNIT_DIP,
+ mPrefs.getInt(GravityBoxSettings.PREF_KEY_RECENTS_CLEAR_MARGIN_TOP, 0),
+ mRecentsClearButton.getResources().getDisplayMetrics());
+ lparams.setMargins(0, marginTop, 0, 0);
+ } else {
+ int marginBottom = (int) TypedValue.applyDimension(
+ TypedValue.COMPLEX_UNIT_DIP,
+ mPrefs.getInt(GravityBoxSettings.PREF_KEY_RECENTS_CLEAR_MARGIN_BOTTOM, 0),
+ mRecentsClearButton.getResources().getDisplayMetrics());
+ lparams.setMargins(0, 0, 0, marginBottom);
+ }
+ mRecentsClearButton.setLayoutParams(lparams);
+ mRecentsClearButton.setVisibility(View.VISIBLE);
+ } else {
+ mRecentsClearButton.setVisibility(View.GONE);
+ }
+ if (DEBUG) log("Clear all recents button layout updated");
+ }
+
private static void handleDismissChild(final MethodHookParam param) {
// skip if non-null view passed - fall back to original method
if (param.args[0] != null)
return;
- log("handleDismissChild - removing all views");
+ if (DEBUG) log("handleDismissChild - removing all views");
LinearLayout mLinearLayout = (LinearLayout) XposedHelpers.getObjectField(param.thisObject, "mLinearLayout");
Handler handler = new Handler();
@@ -158,7 +294,77 @@ public void run() {
}, 150 * i);
}
+ if (mHandler != null) {
+ mHandler.post(updateRamBarTask);
+ }
+
// don't call original method
param.setResult(null);
}
-}
\ No newline at end of file
+
+ private static void updateRamBarLayout() {
+ if (mRamUsageBar == null) return;
+
+ final int rbGravity = Integer.valueOf(mPrefs.getString(
+ GravityBoxSettings.PREF_KEY_RAMBAR, "0"));
+ if (rbGravity == 0) {
+ mRamUsageBar.setVisibility(View.GONE);
+ } else {
+ final int caGravity = Integer.valueOf(mPrefs.getString(
+ GravityBoxSettings.PREF_KEY_RECENTS_CLEAR_ALL, "53"));
+ final boolean caOnTop = (caGravity & Gravity.TOP) == Gravity.TOP;
+ final boolean caOnLeft = (caGravity & Gravity.LEFT) == Gravity.LEFT;
+ final boolean rbOnTop = (rbGravity == Gravity.TOP);
+ final boolean sibling = mRecentsClearButton.getVisibility() == View.VISIBLE &&
+ ((caOnTop && rbOnTop) || (!caOnTop && !rbOnTop));
+ final int marginTop = rbOnTop ? (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
+ mPrefs.getInt(GravityBoxSettings.PREF_KEY_RECENTS_CLEAR_MARGIN_TOP, 0),
+ mRamUsageBar.getResources().getDisplayMetrics()) : 0;
+ final int marginBottom = !rbOnTop ? (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
+ mPrefs.getInt(GravityBoxSettings.PREF_KEY_RECENTS_CLEAR_MARGIN_BOTTOM, 0),
+ mRamUsageBar.getResources().getDisplayMetrics()) : 0;
+
+ FrameLayout.LayoutParams flp = (FrameLayout.LayoutParams) mRamUsageBar.getLayoutParams();
+ flp.gravity = rbGravity;
+ flp.setMargins(
+ sibling && caOnLeft ? mClearAllRecentsSizePx : mRamUsageBarHorizontalMargin,
+ rbOnTop ? (mRamUsageBarVerticalMargin + marginTop) : 0,
+ sibling && !caOnLeft ? mClearAllRecentsSizePx : mRamUsageBarHorizontalMargin,
+ rbOnTop ? 0 : (mRamUsageBarVerticalMargin + marginBottom)
+ );
+ mRamUsageBar.setLayoutParams(flp);
+ mRamUsageBar.setVisibility(View.VISIBLE);
+ mHandler.post(updateRamBarTask);
+ }
+ if (DEBUG) log("RAM bar layout updated");
+ }
+
+ private static final Runnable updateRamBarTask = new Runnable() {
+ @Override
+ public void run() {
+ if (mRamUsageBar == null || mRamUsageBar.getVisibility() == View.GONE) {
+ return;
+ }
+
+ ActivityManager.MemoryInfo memInfo = new ActivityManager.MemoryInfo();
+ mAm.getMemoryInfo(memInfo);
+ long secServerMem = 0;//XposedHelpers.getLongField(memInfo, "secondaryServerThreshold");
+ mMemInfoReader.readMemInfo();
+ long availMem = mMemInfoReader.getFreeSize() + mMemInfoReader.getCachedSize() -
+ secServerMem;
+ long totalMem = mMemInfoReader.getTotalSize();
+
+ String sizeStr = Formatter.formatShortFileSize(mGbContext, totalMem-availMem);
+ mForegroundProcessText.setText(mGbContext.getResources().getString(
+ R.string.service_foreground_processes, sizeStr));
+ sizeStr = Formatter.formatShortFileSize(mGbContext, availMem);
+ mBackgroundProcessText.setText(mGbContext.getResources().getString(
+ R.string.service_background_processes, sizeStr));
+
+ float fTotalMem = totalMem;
+ float fAvailMem = availMem;
+ mRamUsageBar.setRatios((fTotalMem - fAvailMem) / fTotalMem, 0, 0);
+ if (DEBUG) log("RAM bar values updated");
+ }
+ };
+}
diff --git a/src/com/ceco/gm2/gravitybox/ModDisplay.java b/src/com/ceco/gm2/gravitybox/ModDisplay.java
index 29cecff1aa..24a532eb42 100644
--- a/src/com/ceco/gm2/gravitybox/ModDisplay.java
+++ b/src/com/ceco/gm2/gravitybox/ModDisplay.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright (C) 2013 Peter Gregus for GravityBox Project (C3C076@xda)
+ * 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.ceco.gm2.gravitybox;
import android.content.BroadcastReceiver;
@@ -6,8 +21,12 @@
import android.content.IntentFilter;
import android.content.res.Resources;
import android.content.res.XResources;
+import android.graphics.Color;
+import android.os.Build;
import android.os.Bundle;
+import android.os.Handler;
import android.os.PowerManager;
+import android.os.PowerManager.WakeLock;
import android.os.ResultReceiver;
import de.robv.android.xposed.XC_MethodHook;
import de.robv.android.xposed.XC_MethodReplacement;
@@ -16,9 +35,10 @@
import de.robv.android.xposed.XposedHelpers;
public class ModDisplay {
- private static final String TAG = "ModDisplay";
+ private static final String TAG = "GB:ModDisplay";
private static final String CLASS_DISPLAY_POWER_CONTROLLER = "com.android.server.power.DisplayPowerController";
private static final String CLASS_LIGHT_SERVICE_LIGHT = "com.android.server.LightsService$Light";
+ private static final String CLASS_LIGHT_SERVICE = "com.android.server.LightsService";
private static final boolean DEBUG = false;
public static final String ACTION_GET_AUTOBRIGHTNESS_CONFIG = "gravitybox.intent.action.GET_AUTOBRIGHTNESS_CONFIG";
@@ -36,7 +56,6 @@ public class ModDisplay {
private static String mButtonBacklightMode;
private static boolean mButtonBacklightNotif;
private static PowerManager mPm;
- private static boolean mPendingNotif = false;
private static void log(String message) {
XposedBridge.log(TAG + ": " + message);
@@ -46,7 +65,7 @@ private static void log(String message) {
@Override
public void onReceive(Context context, Intent intent) {
- log("Broadcast received: " + intent.toString());
+ if (DEBUG) log("Broadcast received: " + intent.toString());
if(intent.getAction().equals(ACTION_GET_AUTOBRIGHTNESS_CONFIG) &&
intent.hasExtra("receiver")) {
ResultReceiver receiver = intent.getParcelableExtra("receiver");
@@ -66,93 +85,189 @@ public void onReceive(Context context, Intent intent) {
} else if (intent.getAction().equals(GravityBoxSettings.ACTION_PREF_BUTTON_BACKLIGHT_CHANGED)) {
if (intent.hasExtra(GravityBoxSettings.EXTRA_BB_MODE)) {
mButtonBacklightMode = intent.getStringExtra(GravityBoxSettings.EXTRA_BB_MODE);
+ updateButtonBacklight();
}
- if (intent.hasExtra(GravityBoxSettings.EXTRA_BB_NOTIF)) {
+ if (intent.hasExtra(GravityBoxSettings.EXTRA_BB_NOTIF) && Build.VERSION.SDK_INT < 19) {
mButtonBacklightNotif = intent.getBooleanExtra(GravityBoxSettings.EXTRA_BB_NOTIF, false);
if (!mButtonBacklightNotif) {
mPendingNotif = false;
+ updateButtonBacklight();
}
}
+ } else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)
+ || intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
+ updateButtonBacklight(intent.getAction().equals(Intent.ACTION_SCREEN_ON));
+ }
+ }
+ };
+
+ private static void updateButtonBacklight() {
+ updateButtonBacklight(true);
+ }
+
+ private static void updateButtonBacklight(boolean isScreenOn) {
+ if (mLight == null || mPendingNotif) return;
+
+ try {
+ Integer color = null;
+ if (mButtonBacklightMode.equals(GravityBoxSettings.BB_MODE_ALWAYS_ON)) {
+ color = isScreenOn ? 0xff6e6e6e : 0;
+ } else if (mButtonBacklightMode.equals(GravityBoxSettings.BB_MODE_DISABLE)) {
+ color = 0;
+ } else if (!isScreenOn) {
+ color = 0;
+ }
+
+ if (color != null) {
+ Object ls = XposedHelpers.getSurroundingThis(mLight);
+ int np = XposedHelpers.getIntField(ls, "mNativePointer");
+ XposedHelpers.callMethod(ls, "setLight_native",
+ np, LIGHT_ID_BUTTONS, color, 0, 0, 0, 0);
+ }
+ } catch (Throwable t) {
+ XposedBridge.log(t);
+ }
+ }
+
+ private static boolean mPendingNotif = false;
+ private static Object mLight;
+ private static Handler mHandler;
+ private static int mPendingNotifColor = 0;
+ private static WakeLock mWakeLock;
+ private static Runnable mPendingNotifRunnable = new Runnable() {
+ @Override
+ public void run() {
+ if (mLight == null) return;
+ try {
+ Object ls = XposedHelpers.getSurroundingThis(mLight);
+ int np = XposedHelpers.getIntField(ls, "mNativePointer");
+ if (!mPendingNotif) {
+ mHandler.removeCallbacks(this);
+ mPendingNotifColor =
+ mButtonBacklightMode.equals(GravityBoxSettings.BB_MODE_ALWAYS_ON)
+ && mPm.isScreenOn() ? 0xff6e6e6e : 0;
+ XposedHelpers.callMethod(ls, "setLight_native",
+ np, LIGHT_ID_BUTTONS, mPendingNotifColor, 0, 0, 0, 0);
+ } else {
+ if (mPendingNotifColor == 0) {
+ mPendingNotifColor = 0xff6e6e6e;
+ XposedHelpers.callMethod(ls, "setLight_native",
+ np, LIGHT_ID_BUTTONS, mPendingNotifColor, 0, 0, 0, 0);
+ mHandler.postDelayed(mPendingNotifRunnable, 500);
+ } else {
+ mPendingNotifColor = 0;
+ XposedHelpers.callMethod(ls, "setLight_native",
+ np, LIGHT_ID_BUTTONS, mPendingNotifColor, 0, 0, 0, 0);
+ mHandler.postDelayed(mPendingNotifRunnable, 3000);
+ }
+ }
+ } catch(Exception e) {
+ XposedBridge.log(e);
}
}
-
};
public static void initZygote(final XSharedPreferences prefs) {
try {
- final Class> classDisplayPowerController =
- XposedHelpers.findClass(CLASS_DISPLAY_POWER_CONTROLLER, null);
+ final Class> classDisplayPowerController = Build.VERSION.SDK_INT > 16 ?
+ XposedHelpers.findClass(CLASS_DISPLAY_POWER_CONTROLLER, null) : null;
final Class> classLight = XposedHelpers.findClass(CLASS_LIGHT_SERVICE_LIGHT, null);
+ final Class> classLightService = XposedHelpers.findClass(CLASS_LIGHT_SERVICE, null);
+
+ final boolean brightnessSettingsEnabled =
+ prefs.getBoolean(GravityBoxSettings.PREF_KEY_BRIGHTNESS_MASTER_SWITCH, false);
- String brightnessMin = prefs.getString(GravityBoxSettings.PREF_KEY_BRIGHTNESS_MIN, "20");
mButtonBacklightMode = prefs.getString(
GravityBoxSettings.PREF_KEY_BUTTON_BACKLIGHT_MODE, GravityBoxSettings.BB_MODE_DEFAULT);
mButtonBacklightNotif = prefs.getBoolean(
- GravityBoxSettings.PREF_KEY_BUTTON_BACKLIGHT_NOTIFICATIONS, false);
-
- try {
- int bMin = Integer.valueOf(brightnessMin);
+ GravityBoxSettings.PREF_KEY_BUTTON_BACKLIGHT_NOTIFICATIONS, false) &&
+ Build.VERSION.SDK_INT < 19;
+
+ if (brightnessSettingsEnabled && classDisplayPowerController != null) {
+ int brightnessMin = prefs.getInt(GravityBoxSettings.PREF_KEY_BRIGHTNESS_MIN, 20);
XResources.setSystemWideReplacement(
- "android", "integer", "config_screenBrightnessSettingMinimum", bMin);
- log("Minimum brightness value set to: " + bMin);
- } catch (NumberFormatException e) {
- XposedBridge.log(e);
- }
+ "android", "integer", "config_screenBrightnessSettingMinimum", brightnessMin);
+ if (DEBUG) log("Minimum brightness value set to: " + brightnessMin);
- XposedBridge.hookAllConstructors(classDisplayPowerController, new XC_MethodHook() {
- @Override
- protected void afterHookedMethod(final MethodHookParam param) throws Throwable {
- log("DisplayPowerController constructed");
- if (param.args.length < 2) {
- log("Unsupported parameters. Aborting.");
- return;
- }
- mContext = (Context) param.args[1];
- if (mContext == null) {
- log("Context is null. Aborting.");
- return;
- }
+ int screenDim = prefs.getInt(GravityBoxSettings.PREF_KEY_SCREEN_DIM_LEVEL, 10);
+ XResources.setSystemWideReplacement(
+ "android", "integer", "config_screenBrightnessDim", screenDim);
+ if (DEBUG) log("Screen dim level set to: " + screenDim);
- mDisplayPowerController = param.thisObject;
- mScreenBrightnessRangeMinimum = XposedHelpers.getIntField(
- param.thisObject, "mScreenBrightnessRangeMinimum");
- mScreenBrightnessRangeMaximum = XposedHelpers.getIntField(
- param.thisObject, "mScreenBrightnessRangeMaximum");
-
- prefs.reload();
- String config = prefs.getString(GravityBoxSettings.PREF_KEY_AUTOBRIGHTNESS, null);
- if (config != null) {
- String[] luxValues = config.split("\\|")[0].split(",");
- String[] brightnessValues = config.split("\\|")[1].split(",");
- int[] luxArray = new int[luxValues.length];
- int index = 0;
- for(String s : luxValues) {
- luxArray[index++] = Integer.valueOf(s);
+ XposedBridge.hookAllConstructors(classDisplayPowerController, new XC_MethodHook() {
+ @Override
+ protected void afterHookedMethod(final MethodHookParam param) throws Throwable {
+ if (DEBUG) log("DisplayPowerController constructed");
+ if (param.args.length < 2) {
+ log("Unsupported parameters. Aborting.");
+ return;
+ }
+ mContext = (Context) param.args[1];
+ if (mContext == null) {
+ log("Context is null. Aborting.");
+ return;
+ }
+
+ mDisplayPowerController = param.thisObject;
+
+ if (brightnessSettingsEnabled) {
+ mScreenBrightnessRangeMinimum = XposedHelpers.getIntField(
+ param.thisObject, "mScreenBrightnessRangeMinimum");
+ mScreenBrightnessRangeMaximum = XposedHelpers.getIntField(
+ param.thisObject, "mScreenBrightnessRangeMaximum");
+
+ prefs.reload();
+ String config = prefs.getString(GravityBoxSettings.PREF_KEY_AUTOBRIGHTNESS, null);
+ if (config != null) {
+ String[] luxValues = config.split("\\|")[0].split(",");
+ String[] brightnessValues = config.split("\\|")[1].split(",");
+ int[] luxArray = new int[luxValues.length];
+ int index = 0;
+ for(String s : luxValues) {
+ luxArray[index++] = Integer.valueOf(s);
+ }
+ int[] brightnessArray = new int[brightnessValues.length];
+ index = 0;
+ for(String s : brightnessValues) {
+ brightnessArray[index++] = Integer.valueOf(s);
+ }
+ updateAutobrightnessConfig(luxArray, brightnessArray);
+ }
}
- int[] brightnessArray = new int[brightnessValues.length];
- index = 0;
- for(String s : brightnessValues) {
- brightnessArray[index++] = Integer.valueOf(s);
+
+ IntentFilter intentFilter = new IntentFilter();
+ intentFilter.addAction(ACTION_GET_AUTOBRIGHTNESS_CONFIG);
+ if (brightnessSettingsEnabled) {
+ intentFilter.addAction(ACTION_SET_AUTOBRIGHTNESS_CONFIG);
}
- updateAutobrightnessConfig(luxArray, brightnessArray);
+ mContext.registerReceiver(mBroadcastReceiver, intentFilter);
}
+ });
- IntentFilter intentFilter = new IntentFilter();
- intentFilter.addAction(ACTION_GET_AUTOBRIGHTNESS_CONFIG);
- intentFilter.addAction(ACTION_SET_AUTOBRIGHTNESS_CONFIG);
- intentFilter.addAction(GravityBoxSettings.ACTION_PREF_BUTTON_BACKLIGHT_CHANGED);
- mContext.registerReceiver(mBroadcastReceiver, intentFilter);
- }
- });
-
- XposedHelpers.findAndHookMethod(classDisplayPowerController,
- "clampScreenBrightness", int.class, new XC_MethodReplacement() {
+ XposedHelpers.findAndHookMethod(classDisplayPowerController,
+ "clampScreenBrightness", int.class, new XC_MethodReplacement() {
+
+ @Override
+ protected Object replaceHookedMethod(MethodHookParam param) throws Throwable {
+ return XposedHelpers.callMethod(param.thisObject, "clamp", param.args[0],
+ mScreenBrightnessRangeMinimum, mScreenBrightnessRangeMaximum);
+ }
+ });
+ }
- @Override
- protected Object replaceHookedMethod(MethodHookParam param) throws Throwable {
- return XposedHelpers.callMethod(param.thisObject, "clamp", param.args[0],
- mScreenBrightnessRangeMinimum, mScreenBrightnessRangeMaximum);
- }
+ XposedBridge.hookAllConstructors(classLightService, new XC_MethodHook() {
+ @Override
+ protected void afterHookedMethod(final MethodHookParam param) throws Throwable {
+ Context context = (Context) XposedHelpers.getObjectField(param.thisObject, "mContext");
+ if (context != null) {
+ IntentFilter intentFilter = new IntentFilter();
+ intentFilter.addAction(GravityBoxSettings.ACTION_PREF_BUTTON_BACKLIGHT_CHANGED);
+ intentFilter.addAction(Intent.ACTION_SCREEN_ON);
+ intentFilter.addAction(Intent.ACTION_SCREEN_OFF);
+ context.registerReceiver(mBroadcastReceiver, intentFilter);
+ if (DEBUG) log("LightsService constructed. Broadcast receiver registered.");
+ }
+ }
});
XposedHelpers.findAndHookMethod(classLight, "setLightLocked",
@@ -160,8 +275,9 @@ int.class, int.class, int.class, int.class, int.class, new XC_MethodHook() {
@Override
protected void beforeHookedMethod(final MethodHookParam param) throws Throwable {
+ if (mLight == null) mLight = param.thisObject;
int id = XposedHelpers.getIntField(param.thisObject, "mId");
- if (DEBUG ) log("lightId=" + id + "; color=" + param.args[0] +
+ if (DEBUG) log("lightId=" + id + "; color=" + param.args[0] +
"; mode=" + param.args[1] + "; " + "onMS=" + param.args[2] +
"; offMS=" + param.args[3] + "; bMode=" + param.args[4]);
@@ -171,13 +287,14 @@ protected void beforeHookedMethod(final MethodHookParam param) throws Throwable
mPm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
}
- if (id == LIGHT_ID_BUTTONS) {
- if (mButtonBacklightMode.equals(GravityBoxSettings.BB_MODE_DISABLE) && !mPendingNotif) {
+ if (id == LIGHT_ID_BUTTONS && !mPendingNotif) {
+ if (mButtonBacklightMode.equals(GravityBoxSettings.BB_MODE_DISABLE)) {
param.args[0] = param.args[1] = param.args[2] = param.args[3] = param.args[4] = 0;
if (DEBUG) log("Button backlight disabled. Turning off");
return;
} else if (mButtonBacklightMode.equals(GravityBoxSettings.BB_MODE_ALWAYS_ON)) {
- if (mPm.isScreenOn() && ((Integer)param.args[0] == 0)) {
+ int color = (Integer)param.args[0];
+ if (mPm.isScreenOn() && (color == 0 || color == Color.BLACK)) {
if (DEBUG) log("Button backlight always on and screen is on. Turning on");
param.args[0] = 0xff6e6e6e;
return;
@@ -186,40 +303,31 @@ protected void beforeHookedMethod(final MethodHookParam param) throws Throwable
}
if (mButtonBacklightNotif) {
- int color = -1;
- if (mPendingNotif && mPm.isScreenOn()) {
- mPendingNotif = false;
- log("Notification pending and screen is on. Canceling pending notification.");
- if (!mButtonBacklightMode.equals(GravityBoxSettings.BB_MODE_ALWAYS_ON)) {
- log("Turning off button backlight");
- color = 0;
- }
- } else if (id == LIGHT_ID_NOTIFICATIONS || id == LIGHT_ID_ATTENTION) {
- if ((Integer)param.args[0] != 0 && !mPm.isScreenOn()) {
- mPendingNotif = true;
- log("New notification and screen is off. Turning on button backlight");
- color = (Integer)param.args[0];
- } else {
+ if (mHandler == null) mHandler = new Handler();
+ if (id == LIGHT_ID_NOTIFICATIONS || id == LIGHT_ID_ATTENTION) {
+ if ((Integer)param.args[0] != 0) {
+ if (!mPendingNotif) {
+ if (DEBUG) log("New notification. Entering PendingNotif state");
+ mPendingNotif = true;
+ mWakeLock = mPm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "GbModDisplay");
+ mWakeLock.acquire(3600000);
+ mHandler.removeCallbacks(mPendingNotifRunnable);
+ mHandler.post(mPendingNotifRunnable);
+ }
+ } else if (mPendingNotif) {
+ if (DEBUG) log("Notification dismissed. Leaving PendingNotif state");
mPendingNotif = false;
- log("Notification dismissed or screen on");
- if (!mPm.isScreenOn() ||
- !mButtonBacklightMode.equals(GravityBoxSettings.BB_MODE_ALWAYS_ON)) {
- color = 0;
- log("Turning off button backlight");
+ if (mWakeLock.isHeld()) {
+ mWakeLock.release();
}
+ mWakeLock = null;
}
}
- if (color != -1) {
- Object ls = XposedHelpers.getSurroundingThis(param.thisObject);
- int np = XposedHelpers.getIntField(ls, "mNativePointer");
- XposedHelpers.callMethod(ls, "setLight_native",
- np, LIGHT_ID_BUTTONS, color, 0, 0, 0, 0);
- }
}
}
});
- } catch (Exception e) {
- XposedBridge.log(e);
+ } catch (Throwable t) {
+ XposedBridge.log(t);
}
}
@@ -252,6 +360,6 @@ private static void updateAutobrightnessConfig(int[] lux, int[] brightness) {
mScreenBrightnessRangeMinimum = (Integer) XposedHelpers.callMethod(
mDisplayPowerController, "clampAbsoluteBrightness", screenBrightnessMinimum);
- log("Autobrightness config updated");
+ if (DEBUG) log("Autobrightness config updated");
}
}
\ No newline at end of file
diff --git a/src/com/ceco/gm2/gravitybox/ModElectronBeam.java b/src/com/ceco/gm2/gravitybox/ModElectronBeam.java
index c0d4c65c78..fe4168201a 100644
--- a/src/com/ceco/gm2/gravitybox/ModElectronBeam.java
+++ b/src/com/ceco/gm2/gravitybox/ModElectronBeam.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright (C) 2013 Peter Gregus for GravityBox Project (C3C076@xda)
+ * 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.ceco.gm2.gravitybox;
import android.animation.ObjectAnimator;
@@ -7,7 +22,7 @@
import de.robv.android.xposed.XposedHelpers;
public class ModElectronBeam {
- private static final String TAG = "ModElectronBeam";
+ private static final String TAG = "GB:ModElectronBeam";
private static final String CLASS_DISPLAY_POWER_STATE = "com.android.server.power.DisplayPowerState";
private static final String CLASS_DISPLAY_POWER_CONTROLLER = "com.android.server.power.DisplayPowerController";
@@ -39,8 +54,8 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable {
}
}
});
- } catch (Exception e) {
- XposedBridge.log(e);
+ } catch (Throwable t) {
+ XposedBridge.log(t);
}
}
}
\ No newline at end of file
diff --git a/src/com/ceco/gm2/gravitybox/ModExpandedDesktop.java b/src/com/ceco/gm2/gravitybox/ModExpandedDesktop.java
new file mode 100644
index 0000000000..4a74ba02d5
--- /dev/null
+++ b/src/com/ceco/gm2/gravitybox/ModExpandedDesktop.java
@@ -0,0 +1,738 @@
+/*
+ * Copyright (C) 2013 Peter Gregus for GravityBox Project (C3C076@xda)
+ * 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.ceco.gm2.gravitybox;
+
+import android.content.BroadcastReceiver;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.database.ContentObserver;
+import android.graphics.Rect;
+import android.os.Binder;
+import android.os.Build;
+import android.os.Handler;
+import android.provider.Settings;
+import android.util.DisplayMetrics;
+import android.view.Surface;
+import android.view.View;
+import android.view.WindowManager;
+import de.robv.android.xposed.XC_MethodHook;
+import de.robv.android.xposed.XC_MethodHook.Unhook;
+import de.robv.android.xposed.XC_MethodReplacement;
+import de.robv.android.xposed.XSharedPreferences;
+import de.robv.android.xposed.XposedBridge;
+import de.robv.android.xposed.XposedHelpers;
+
+public class ModExpandedDesktop {
+ private static final String TAG = "GB:ModExpandedDesktop";
+ private static final String CLASS_PHONE_WINDOW_MANAGER = "com.android.internal.policy.impl.PhoneWindowManager";
+ private static final String CLASS_POLICY_WINDOW_STATE = "android.view.WindowManagerPolicy$WindowState";
+ private static final String CLASS_WINDOW_MANAGER_FUNCS = "android.view.WindowManagerPolicy.WindowManagerFuncs";
+ private static final String CLASS_IWINDOW_MANAGER = "android.view.IWindowManager";
+ private static final String CLASS_LOCAL_POWER_MANAGER = "android.os.LocalPowerManager";
+
+ private static final boolean DEBUG = false;
+
+ private static Context mContext;
+ private static Object mPhoneWindowManager;
+ private static SettingsObserver mSettingsObserver;
+ private static boolean mExpandedDesktop;
+ private static int mExpandedDesktopMode;
+ private static Unhook mNavbarShowLwHook;
+ private static Unhook mStatusbarShowLwHook;
+ private static boolean mNavbarOverride;
+ private static float mNavbarHeightScaleFactor = 1;
+ private static float mNavbarHeightLandscapeScaleFactor = 1;
+ private static float mNavbarWidthScaleFactor = 1;
+
+ public static final String SETTING_EXPANDED_DESKTOP_STATE = "gravitybox_expanded_desktop_state";
+ private static final int SEND_NEW_CONFIGURATION = 18;
+
+ private static void log(String message) {
+ XposedBridge.log(TAG + ": " + message);
+ }
+
+ static class SettingsObserver extends ContentObserver {
+
+ public SettingsObserver(Handler handler) {
+ super(handler);
+ }
+
+ void observe() {
+ final ContentResolver resolver = mContext.getContentResolver();
+ resolver.registerContentObserver(Settings.System.getUriFor(
+ SETTING_EXPANDED_DESKTOP_STATE), false, this);
+ updateSettings();
+ }
+
+ @Override
+ public void onChange(boolean selfChange) {
+ updateSettings();
+ }
+ }
+
+ private static BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ if (DEBUG) log("Broadcast received: " + intent.toString());
+ if (intent.getAction().equals(GravityBoxSettings.ACTION_PREF_EXPANDED_DESKTOP_MODE_CHANGED)
+ && intent.hasExtra(GravityBoxSettings.EXTRA_ED_MODE)) {
+ final int expandedDesktopMode = intent.getIntExtra(
+ GravityBoxSettings.EXTRA_ED_MODE, GravityBoxSettings.ED_DISABLED);
+ final boolean forceUpdateDisplayMetrics = expandedDesktopMode != mExpandedDesktopMode;
+ mExpandedDesktopMode = expandedDesktopMode;
+ updateSettings(forceUpdateDisplayMetrics);
+ } else if (intent.getAction().equals(ModStatusbarColor.ACTION_PHONE_STATUSBAR_VIEW_MADE)) {
+ updateSettings(true);
+ } else if (intent.getAction().equals(GravityBoxSettings.ACTION_PREF_NAVBAR_CHANGED)) {
+ if (intent.hasExtra(GravityBoxSettings.EXTRA_NAVBAR_HEIGHT)) {
+ mNavbarHeightScaleFactor =
+ (float)intent.getIntExtra(GravityBoxSettings.EXTRA_NAVBAR_HEIGHT, 100) / 100f;
+ }
+ if (intent.hasExtra(GravityBoxSettings.EXTRA_NAVBAR_HEIGHT_LANDSCAPE)) {
+ mNavbarHeightLandscapeScaleFactor = (float)intent.getIntExtra(
+ GravityBoxSettings.EXTRA_NAVBAR_HEIGHT_LANDSCAPE, 100) / 100f;
+ }
+ if (intent.hasExtra(GravityBoxSettings.EXTRA_NAVBAR_WIDTH)) {
+ mNavbarWidthScaleFactor =
+ (float)intent.getIntExtra(GravityBoxSettings.EXTRA_NAVBAR_WIDTH, 100) / 100f;
+ }
+ updateSettings(true);
+ }
+ }
+ };
+
+ private static void updateSettings() {
+ updateSettings(false);
+ }
+
+ private static void updateSettings(boolean forceUpdateDisplayMetrics) {
+ if (mContext == null || mPhoneWindowManager == null) return;
+
+ try {
+ final boolean expandedDesktop = Settings.System.getInt(mContext.getContentResolver(),
+ SETTING_EXPANDED_DESKTOP_STATE, 0) == 1;
+ if (mExpandedDesktopMode == GravityBoxSettings.ED_DISABLED && expandedDesktop) {
+ Settings.System.putInt(mContext.getContentResolver(),
+ SETTING_EXPANDED_DESKTOP_STATE, 0);
+ return;
+ }
+
+ boolean updateDisplayMetrics = false | forceUpdateDisplayMetrics;
+ if (mExpandedDesktop != expandedDesktop) {
+ mExpandedDesktop = expandedDesktop;
+ updateDisplayMetrics = true;
+ }
+
+ XposedHelpers.callMethod(mPhoneWindowManager, "updateSettings");
+
+ int[] navigationBarWidthForRotation = (int[]) XposedHelpers.getObjectField(
+ mPhoneWindowManager, "mNavigationBarWidthForRotation");
+ int[] navigationBarHeightForRotation = (int[]) XposedHelpers.getObjectField(
+ mPhoneWindowManager, "mNavigationBarHeightForRotation");
+ final int portraitRotation = XposedHelpers.getIntField(mPhoneWindowManager, "mPortraitRotation");
+ final int upsideDownRotation = XposedHelpers.getIntField(mPhoneWindowManager, "mUpsideDownRotation");
+ final int landscapeRotation = XposedHelpers.getIntField(mPhoneWindowManager, "mLandscapeRotation");
+ final int seascapeRotation = XposedHelpers.getIntField(mPhoneWindowManager, "mSeascapeRotation");
+
+ if (expandedDesktopHidesNavigationBar()) {
+ navigationBarWidthForRotation[portraitRotation]
+ = navigationBarWidthForRotation[upsideDownRotation]
+ = navigationBarWidthForRotation[landscapeRotation]
+ = navigationBarWidthForRotation[seascapeRotation]
+ = navigationBarHeightForRotation[portraitRotation]
+ = navigationBarHeightForRotation[upsideDownRotation]
+ = navigationBarHeightForRotation[landscapeRotation]
+ = navigationBarHeightForRotation[seascapeRotation] = 0;
+ } else {
+ final int resWidthId = mContext.getResources().getIdentifier(
+ "navigation_bar_width", "dimen", "android");
+ final int resHeightId = mContext.getResources().getIdentifier(
+ "navigation_bar_height", "dimen", "android");
+ final int resHeightLandscapeId = mContext.getResources().getIdentifier(
+ "navigation_bar_height_landscape", "dimen", "android");
+
+ navigationBarHeightForRotation[portraitRotation] =
+ navigationBarHeightForRotation[upsideDownRotation] =
+ (int) (mContext.getResources().getDimensionPixelSize(resHeightId)
+ * mNavbarHeightScaleFactor);
+ navigationBarHeightForRotation[landscapeRotation] =
+ navigationBarHeightForRotation[seascapeRotation] =
+ (int) (mContext.getResources().getDimensionPixelSize(resHeightLandscapeId)
+ * mNavbarHeightLandscapeScaleFactor);
+
+ navigationBarWidthForRotation[portraitRotation] =
+ navigationBarWidthForRotation[upsideDownRotation] =
+ navigationBarWidthForRotation[landscapeRotation] =
+ navigationBarWidthForRotation[seascapeRotation] =
+ (int) (mContext.getResources().getDimensionPixelSize(resWidthId)
+ * mNavbarWidthScaleFactor);
+ }
+
+ XposedHelpers.setObjectField(mPhoneWindowManager, "mNavigationBarWidthForRotation", navigationBarWidthForRotation);
+ XposedHelpers.setObjectField(mPhoneWindowManager, "mNavigationBarHeightForRotation", navigationBarHeightForRotation);
+
+ XposedHelpers.callMethod(mPhoneWindowManager, "updateRotation", false);
+ if (updateDisplayMetrics) {
+ updateDisplayMetrics(XposedHelpers.getObjectField(mPhoneWindowManager, "mWindowManager"));
+ }
+ } catch (Throwable t) {
+ XposedBridge.log(t);
+ }
+ }
+
+ public static void initZygote(final XSharedPreferences prefs) {
+ try {
+ final Class> classPhoneWindowManager = XposedHelpers.findClass(CLASS_PHONE_WINDOW_MANAGER, null);
+
+ mNavbarOverride = prefs.getBoolean(GravityBoxSettings.PREF_KEY_NAVBAR_OVERRIDE, false);
+ if (mNavbarOverride) {
+ mNavbarHeightScaleFactor =
+ (float) prefs.getInt(GravityBoxSettings.PREF_KEY_NAVBAR_HEIGHT, 100) / 100f;
+ mNavbarHeightLandscapeScaleFactor =
+ (float) prefs.getInt(GravityBoxSettings.PREF_KEY_NAVBAR_HEIGHT_LANDSCAPE, 100) / 100f;
+ mNavbarWidthScaleFactor =
+ (float) prefs.getInt(GravityBoxSettings.PREF_KEY_NAVBAR_WIDTH, 100) / 100f;
+ }
+
+ mExpandedDesktopMode = GravityBoxSettings.ED_DISABLED;
+ try {
+ mExpandedDesktopMode = Integer.valueOf(prefs.getString(
+ GravityBoxSettings.PREF_KEY_EXPANDED_DESKTOP, "0"));
+ } catch (NumberFormatException nfe) {
+ log("Invalid value for PREF_KEY_EXPANDED_DESKTOP preference");
+ }
+
+ if (Build.VERSION.SDK_INT > 16) {
+ XposedHelpers.findAndHookMethod(classPhoneWindowManager, "init",
+ Context.class, CLASS_IWINDOW_MANAGER, CLASS_WINDOW_MANAGER_FUNCS, phoneWindowManagerInitHook);
+ } else {
+ XposedHelpers.findAndHookMethod(classPhoneWindowManager, "init",
+ Context.class, CLASS_IWINDOW_MANAGER, CLASS_WINDOW_MANAGER_FUNCS,
+ CLASS_LOCAL_POWER_MANAGER, phoneWindowManagerInitHook);
+ }
+
+ XposedHelpers.findAndHookMethod(classPhoneWindowManager,
+ Build.VERSION.SDK_INT > 16 ?
+ "finishPostLayoutPolicyLw" : "finishAnimationLw", new XC_MethodHook() {
+ @Override
+ protected void beforeHookedMethod(final MethodHookParam param) throws Throwable {
+ final Object statusBar = XposedHelpers.getObjectField(param.thisObject, "mStatusBar");
+ if (statusBar == null || !expandedDesktopHidesStatusbar()) return;
+
+ mStatusbarShowLwHook = XposedHelpers.findAndHookMethod(
+ statusBar.getClass(), "showLw", boolean.class, new XC_MethodReplacement() {
+ @Override
+ protected Object replaceHookedMethod(MethodHookParam param2) throws Throwable {
+ if (param2.thisObject == statusBar) {
+ return XposedHelpers.callMethod(param2.thisObject, "hideLw", true);
+ } else {
+ return XposedBridge.invokeOriginalMethod(param2.method, param2.thisObject, param2.args);
+ }
+ }
+ });
+ }
+ @Override
+ protected void afterHookedMethod(final MethodHookParam param) throws Throwable {
+ if (mStatusbarShowLwHook != null) {
+ mStatusbarShowLwHook.unhook();
+ mStatusbarShowLwHook = null;
+ }
+ }
+ });
+
+ if (Build.VERSION.SDK_INT > 16) {
+ XposedHelpers.findAndHookMethod(classPhoneWindowManager, "beginLayoutLw",
+ boolean.class, int.class, int.class, int.class, beginLayoutLwHook);
+ } else {
+ XposedHelpers.findAndHookMethod(classPhoneWindowManager, "beginLayoutLw",
+ int.class, int.class, int.class, beginLayoutLwHook);
+ }
+
+ XposedHelpers.findAndHookMethod(classPhoneWindowManager, "layoutWindowLw",
+ CLASS_POLICY_WINDOW_STATE, WindowManager.LayoutParams.class,
+ CLASS_POLICY_WINDOW_STATE, new XC_MethodHook() {
+ @Override
+ protected void afterHookedMethod(final MethodHookParam param) throws Throwable {
+ final boolean isDefaultDisplay = Build.VERSION.SDK_INT > 16 ?
+ (Boolean) XposedHelpers.callMethod(param.args[0], "isDefaultDisplay") : true;
+ if (!mExpandedDesktop
+ || param.args[0] == XposedHelpers.getObjectField(param.thisObject, "mStatusBar")
+ || param.args[0] == XposedHelpers.getObjectField(param.thisObject, "mNavigationBar")
+ || !isDefaultDisplay) return;
+
+ final WindowManager.LayoutParams attrs = (WindowManager.LayoutParams) param.args[1];
+ if (attrs.type == WindowManager.LayoutParams.TYPE_INPUT_METHOD) return;
+
+ final int fl = ((WindowManager.LayoutParams) param.args[1]).flags;
+ final int sysUiFl = (Integer) XposedHelpers.callMethod(param.args[0], "getSystemUiVisibility");
+ final Rect pf = (Rect) XposedHelpers.getObjectField(param.thisObject, "mTmpParentFrame");
+ final Rect df = (Rect) XposedHelpers.getObjectField(param.thisObject, "mTmpDisplayFrame");
+ final Rect cf = (Rect) XposedHelpers.getObjectField(param.thisObject, "mTmpContentFrame");
+ final Rect vf = (Rect) XposedHelpers.getObjectField(param.thisObject, "mTmpVisibleFrame");
+ final Rect of = Build.VERSION.SDK_INT > 17 ?
+ (Rect) XposedHelpers.getObjectField(param.thisObject, "mTmpOverscanFrame") : null;
+
+ boolean shouldRecomputeFrame = false;
+ if ((fl & (WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN |
+ WindowManager.LayoutParams.FLAG_FULLSCREEN |
+ WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR))
+ == (WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN |
+ WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR)
+ && (sysUiFl & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0) {
+ if (param.args[2] == null
+ && attrs.type >= WindowManager.LayoutParams.FIRST_APPLICATION_WINDOW
+ && attrs.type <= WindowManager.LayoutParams.LAST_SUB_WINDOW) {
+ pf.left = df.left = Build.VERSION.SDK_INT > 17 ?
+ XposedHelpers.getIntField(param.thisObject, "mOverscanScreenLeft") :
+ XposedHelpers.getIntField(param.thisObject, "mUnrestrictedScreenLeft");
+ pf.right = df.right = pf.left + Build.VERSION.SDK_INT > 17 ?
+ XposedHelpers.getIntField(param.thisObject, "mOverscanScreenWidth") :
+ XposedHelpers.getIntField(param.thisObject, "mUnrestrictedScreenWidth");
+ pf.top = df.top = Build.VERSION.SDK_INT > 17 ?
+ XposedHelpers.getIntField(param.thisObject, "mOverscanScreenTop") :
+ XposedHelpers.getIntField(param.thisObject, "mUnrestrictedScreenTop");
+ pf.bottom = df.bottom = pf.top + Build.VERSION.SDK_INT > 17 ?
+ XposedHelpers.getIntField(param.thisObject, "mOverscanScreenHeight") :
+ XposedHelpers.getIntField(param.thisObject, "mUnrestrictedScreenHeight");
+ if (Build.VERSION.SDK_INT > 17) {
+ of.left = XposedHelpers.getIntField(param.thisObject, "mUnrestrictedScreenLeft");
+ of.top = XposedHelpers.getIntField(param.thisObject, "mUnrestrictedScreenTop");
+ of.right = of.left +
+ XposedHelpers.getIntField(param.thisObject, "mUnrestrictedScreenWidth");
+ of.bottom = of.top +
+ XposedHelpers.getIntField(param.thisObject, "mUnrestrictedScreenHeight");
+ }
+ if (expandedDesktopHidesStatusbar()) {
+ cf.top = pf.top;
+ }
+ shouldRecomputeFrame = true;
+ }
+ } else if ((fl & WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN) != 0 || (sysUiFl
+ & (View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
+ | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION)) != 0) {
+ if (attrs.type >= WindowManager.LayoutParams.FIRST_APPLICATION_WINDOW
+ && attrs.type <= WindowManager.LayoutParams.LAST_SUB_WINDOW) {
+ pf.left = df.left = Build.VERSION.SDK_INT > 17 ?
+ XposedHelpers.getIntField(param.thisObject, "mOverscanScreenLeft") :
+ XposedHelpers.getIntField(param.thisObject, "mUnrestrictedScreenLeft");
+ pf.right = df.right = pf.left + Build.VERSION.SDK_INT > 17 ?
+ XposedHelpers.getIntField(param.thisObject, "mOverscanScreenWidth") :
+ XposedHelpers.getIntField(param.thisObject, "mUnrestrictedScreenWidth");
+ pf.top = df.top = Build.VERSION.SDK_INT > 17 ?
+ XposedHelpers.getIntField(param.thisObject, "mOverscanScreenTop") :
+ XposedHelpers.getIntField(param.thisObject, "mUnrestrictedScreenTop");
+ pf.bottom = df.bottom = pf.top + Build.VERSION.SDK_INT > 17 ?
+ XposedHelpers.getIntField(param.thisObject, "mOverscanScreenHeight") :
+ XposedHelpers.getIntField(param.thisObject, "mUnrestrictedScreenHeight");
+ if (Build.VERSION.SDK_INT > 17) {
+ of.set(pf);
+ }
+ if (expandedDesktopHidesNavigationBar()) {
+ cf.set(pf);
+ }
+ shouldRecomputeFrame = true;
+ }
+ }
+
+ if (shouldRecomputeFrame) {
+ XposedHelpers.callMethod(param.thisObject, "applyStableConstraints",
+ sysUiFl, fl, cf);
+ vf.set(cf);
+ if (Build.VERSION.SDK_INT > 17) {
+ XposedHelpers.callMethod(param.args[0], "computeFrameLw", pf, df, of, cf, vf);
+ } else {
+ XposedHelpers.callMethod(param.args[0], "computeFrameLw", pf, df, cf, vf);
+ }
+ if (DEBUG) log("layoutWindowLw recomputing frame");
+ }
+ }
+ });
+
+ XposedHelpers.findAndHookMethod(classPhoneWindowManager, "getContentInsetHintLw",
+ WindowManager.LayoutParams.class, Rect.class, new XC_MethodReplacement() {
+ @Override
+ protected Object replaceHookedMethod(MethodHookParam param) throws Throwable {
+ if (!mExpandedDesktop) {
+ XposedBridge.invokeOriginalMethod(param.method, param.thisObject, param.args);
+ return null;
+ }
+
+ try {
+ final WindowManager.LayoutParams attrs = (WindowManager.LayoutParams) param.args[0];
+ final Rect contentInset = (Rect) param.args[1];
+ final int fl = attrs.flags;
+ final int systemUiVisibility = (attrs.systemUiVisibility |
+ XposedHelpers.getIntField(attrs, "subtreeSystemUiVisibility"));
+
+ if ((fl & (WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN |
+ WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR))
+ == (WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN |
+ WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR)) {
+ int availRight, availBottom;
+ if (shouldHideNavigationBarLw(systemUiVisibility)) {
+ availRight = XposedHelpers.getIntField(param.thisObject, "mUnrestrictedScreenLeft")
+ + XposedHelpers.getIntField(param.thisObject, "mUnrestrictedScreenWidth");
+ availBottom = XposedHelpers.getIntField(param.thisObject, "mUnrestrictedScreenTop")
+ + XposedHelpers.getIntField(param.thisObject, "mUnrestrictedScreenHeight");
+ } else {
+ availRight = XposedHelpers.getIntField(param.thisObject, "mRestrictedScreenLeft")
+ + XposedHelpers.getIntField(param.thisObject, "mRestrictedScreenWidth");
+ availBottom = XposedHelpers.getIntField(param.thisObject, "mRestrictedScreenTop")
+ + XposedHelpers.getIntField(param.thisObject, "mRestrictedScreenHeight");
+ }
+ if ((systemUiVisibility & View.SYSTEM_UI_FLAG_LAYOUT_STABLE) != 0) {
+ if ((fl & WindowManager.LayoutParams.FLAG_FULLSCREEN) != 0) {
+ contentInset.set(XposedHelpers.getIntField(param.thisObject, "mStableFullscreenLeft"),
+ XposedHelpers.getIntField(param.thisObject, "mStableFullscreenTop"),
+ availRight - XposedHelpers.getIntField(param.thisObject, "mStableFullscreenRight"),
+ availBottom - XposedHelpers.getIntField(param.thisObject, "mStableFullscreenBottom"));
+ } else {
+ contentInset.set(XposedHelpers.getIntField(param.thisObject, "mStableLeft"),
+ XposedHelpers.getIntField(param.thisObject, "mStableTop"),
+ availRight - XposedHelpers.getIntField(param.thisObject, "mStableRight"),
+ availBottom - XposedHelpers.getIntField(param.thisObject, "mStableBottom"));
+ }
+ } else if ((fl & WindowManager.LayoutParams.FLAG_FULLSCREEN) != 0) {
+ contentInset.setEmpty();
+ } else if ((systemUiVisibility & (View.SYSTEM_UI_FLAG_FULLSCREEN
+ | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN)) == 0) {
+ contentInset.set(XposedHelpers.getIntField(param.thisObject, "mCurLeft"),
+ XposedHelpers.getIntField(param.thisObject, "mCurTop"),
+ availRight - XposedHelpers.getIntField(param.thisObject, "mCurRight"),
+ availBottom - XposedHelpers.getIntField(param.thisObject, "mCurBottom"));
+ } else {
+ contentInset.set(XposedHelpers.getIntField(param.thisObject, "mCurLeft"),
+ XposedHelpers.getIntField(param.thisObject, "mCurTop"),
+ availRight - XposedHelpers.getIntField(param.thisObject, "mCurRight"),
+ availBottom - XposedHelpers.getIntField(param.thisObject, "mCurBottom"));
+ }
+ return null;
+ }
+ contentInset.setEmpty();
+ } catch(Throwable t) {
+ if (DEBUG) log(t.getMessage());
+ XposedBridge.invokeOriginalMethod(param.method, param.thisObject, param.args);
+ }
+
+ return null;
+ }
+ });
+ } catch (Throwable t) {
+ XposedBridge.log(t);
+ }
+ }
+
+ private static XC_MethodHook phoneWindowManagerInitHook = new XC_MethodHook() {
+ @Override
+ protected void afterHookedMethod(MethodHookParam param) throws Throwable {
+ try {
+ mContext = (Context) XposedHelpers.getObjectField(param.thisObject, "mContext");
+ mPhoneWindowManager = param.thisObject;
+
+ IntentFilter intentFilter = new IntentFilter();
+ intentFilter.addAction(GravityBoxSettings.ACTION_PREF_EXPANDED_DESKTOP_MODE_CHANGED);
+ intentFilter.addAction(ModStatusbarColor.ACTION_PHONE_STATUSBAR_VIEW_MADE);
+ if (mNavbarOverride) {
+ intentFilter.addAction(GravityBoxSettings.ACTION_PREF_NAVBAR_CHANGED);
+ }
+ mContext.registerReceiver(mBroadcastReceiver, intentFilter);
+
+ mSettingsObserver = new SettingsObserver(
+ (Handler) XposedHelpers.getObjectField(param.thisObject, "mHandler"));
+ mSettingsObserver.observe();
+
+ if (DEBUG) log("Phone window manager initialized");
+ } catch (Throwable t) {
+ XposedBridge.log(t);
+ }
+ }
+ };
+
+ private static XC_MethodHook beginLayoutLwHook = new XC_MethodHook() {
+ @Override
+ protected void beforeHookedMethod(final MethodHookParam param) throws Throwable {
+ try {
+ final boolean isDefaultDisplay = Build.VERSION.SDK_INT > 16 ?
+ (Boolean) param.args[0] : true;
+ if (!isDefaultDisplay || !expandedDesktopHidesNavigationBar()) return;
+
+ final Object navigationBar = XposedHelpers.getObjectField(param.thisObject, "mNavigationBar");
+ if (navigationBar == null) return;
+
+ mNavbarShowLwHook = XposedHelpers.findAndHookMethod(navigationBar.getClass(),
+ "showLw", boolean.class, new XC_MethodHook() {
+ @Override
+ protected void beforeHookedMethod(final MethodHookParam param2) throws Throwable {
+ if (param2.thisObject == navigationBar) {
+ param2.setResult(false);
+ XposedHelpers.callMethod(navigationBar, "hideLw", true);
+ return;
+ }
+ }
+ });
+ } catch (Throwable t) {
+ XposedBridge.log(t);
+ }
+ }
+
+ @Override
+ protected void afterHookedMethod(final MethodHookParam param) throws Throwable {
+ try {
+ if (mNavbarShowLwHook != null) {
+ mNavbarShowLwHook.unhook();
+ mNavbarShowLwHook = null;
+ }
+
+ final boolean isDefaultDisplay = Build.VERSION.SDK_INT > 16 ?
+ (Boolean) param.args[0] : true;
+
+ if (!isDefaultDisplay) return;
+
+ if (expandedDesktopHidesStatusbar()) {
+ final Object statusBar = XposedHelpers.getObjectField(param.thisObject, "mStatusBar");
+ if (statusBar != null) {
+ XposedHelpers.setIntField(param.thisObject, "mStableTop", 0);
+ }
+ }
+
+ if (expandedDesktopHidesNavigationBar() && Build.VERSION.SDK_INT > 16) {
+ final Object navigationBar = XposedHelpers.getObjectField(param.thisObject, "mNavigationBar");
+ if (navigationBar != null) {
+ int overscanLeft = 0;
+ int overscanTop = 0;
+ int overscanRight = 0;
+ int overscanBottom = 0;
+ if (Build.VERSION.SDK_INT > 17) {
+ switch ((Integer) param.args[3]) {
+ case Surface.ROTATION_90:
+ overscanLeft = XposedHelpers.getIntField(param.thisObject, "mOverscanTop");
+ overscanTop = XposedHelpers.getIntField(param.thisObject, "mOverscanRight");
+ overscanRight = XposedHelpers.getIntField(param.thisObject, "mOverscanBottom");
+ overscanBottom = XposedHelpers.getIntField(param.thisObject, "mOverscanLeft");
+ break;
+ case Surface.ROTATION_180:
+ overscanLeft = XposedHelpers.getIntField(param.thisObject, "mOverscanRight");
+ overscanTop = XposedHelpers.getIntField(param.thisObject, "mOverscanBottom");
+ overscanRight = XposedHelpers.getIntField(param.thisObject, "mOverscanLeft");
+ overscanBottom = XposedHelpers.getIntField(param.thisObject, "mOverscanTop");
+ break;
+ case Surface.ROTATION_270:
+ overscanLeft = XposedHelpers.getIntField(param.thisObject, "mOverscanBottom");
+ overscanTop = XposedHelpers.getIntField(param.thisObject, "mOverscanLeft");
+ overscanRight = XposedHelpers.getIntField(param.thisObject, "mOverscanTop");
+ overscanBottom = XposedHelpers.getIntField(param.thisObject, "mOverscanRight");
+ break;
+ default:
+ overscanLeft = XposedHelpers.getIntField(param.thisObject, "mOverscanLeft");
+ overscanTop = XposedHelpers.getIntField(param.thisObject, "mOverscanTop");
+ overscanRight = XposedHelpers.getIntField(param.thisObject, "mOverscanRight");
+ overscanBottom = XposedHelpers.getIntField(param.thisObject, "mOverscanBottom");
+ break;
+ }
+ }
+
+ final boolean navbarOnBottom = XposedHelpers.getBooleanField(param.thisObject, "mNavigationBarOnBottom");
+ final int displayWidth = (Integer)param.args[1];
+ final int displayHeight = (Integer)param.args[2];
+ if (navbarOnBottom) {
+ XposedHelpers.setIntField(param.thisObject, "mDockBottom",
+ (displayHeight - overscanBottom));
+ XposedHelpers.setIntField(param.thisObject, "mRestrictedScreenHeight",
+ (displayHeight - overscanTop - overscanBottom));
+ if (Build.VERSION.SDK_INT > 17) {
+ XposedHelpers.setIntField(param.thisObject, "mRestrictedOverscanScreenHeight",
+ displayHeight);
+ }
+ XposedHelpers.setIntField(param.thisObject, "mSystemBottom", displayHeight);
+ XposedHelpers.setIntField(param.thisObject, "mContentBottom",
+ (displayHeight - overscanBottom));
+ XposedHelpers.setIntField(param.thisObject, "mCurBottom",
+ (displayHeight - overscanBottom));
+ } else {
+ XposedHelpers.setIntField(param.thisObject, "mDockRight",
+ (displayWidth - overscanRight));
+ XposedHelpers.setIntField(param.thisObject, "mRestrictedScreenWidth",
+ (displayWidth - overscanLeft - overscanRight));
+ if (Build.VERSION.SDK_INT > 17) {
+ XposedHelpers.setIntField(param.thisObject, "mRestrictedOverscanScreenWidth",
+ displayWidth);
+ }
+ XposedHelpers.setIntField(param.thisObject, "mSystemRight", displayWidth);
+ XposedHelpers.setIntField(param.thisObject, "mContentRight",
+ (displayWidth - overscanRight));
+ XposedHelpers.setIntField(param.thisObject, "mCurRight",
+ (displayWidth - overscanRight));
+ }
+ Object tmpNavFrame = XposedHelpers.getObjectField(param.thisObject, "mTmpNavigationFrame");
+ if (Build.VERSION.SDK_INT > 17) {
+ XposedHelpers.callMethod(navigationBar, "computeFrameLw",
+ tmpNavFrame, tmpNavFrame, tmpNavFrame, tmpNavFrame, tmpNavFrame);
+ } else {
+ XposedHelpers.callMethod(navigationBar, "computeFrameLw",
+ tmpNavFrame, tmpNavFrame, tmpNavFrame, tmpNavFrame);
+ }
+ }
+ }
+ } catch (Throwable t) {
+ XposedBridge.log(t);
+ }
+ }
+ };
+
+ private static boolean shouldHideNavigationBarLw(int systemUiVisibility) {
+ if (expandedDesktopHidesNavigationBar()) {
+ return true;
+ }
+
+ if (mPhoneWindowManager != null
+ && XposedHelpers.getBooleanField(mPhoneWindowManager, "mCanHideNavigationBar")) {
+ if ((systemUiVisibility & View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION) != 0) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ private static boolean expandedDesktopHidesStatusbar() {
+ return (mExpandedDesktop
+ && (mExpandedDesktopMode & GravityBoxSettings.ED_STATUSBAR) != 0);
+ }
+
+ private static boolean expandedDesktopHidesNavigationBar() {
+ return (mExpandedDesktop
+ && (mExpandedDesktopMode & GravityBoxSettings.ED_NAVBAR) != 0);
+ }
+
+ private static class ApplicationDisplayMetrics {
+ boolean rotated;
+ int dh;
+ int dw;
+ int appWidth;
+ int appHeight;
+ }
+
+ private static void updateDisplayMetrics(Object windowManager) {
+ if (windowManager == null || Build.VERSION.SDK_INT < 17
+ || Build.VERSION.SDK_INT > 18) return;
+
+ final long origId = Binder.clearCallingIdentity();
+ boolean changed = false;
+
+ final Object windowMap = XposedHelpers.getObjectField(windowManager, "mWindowMap");
+ synchronized (windowMap) {
+ final Object displayContent = XposedHelpers.callMethod(windowManager, "getDefaultDisplayContentLocked");
+ final Object displayInfo = displayContent != null ?
+ XposedHelpers.callMethod(displayContent, "getDisplayInfo") : null;
+ final int oldWidth = displayInfo != null ? XposedHelpers.getIntField(displayInfo, "appWidth") : -1;
+ final int oldHeight = displayInfo != null ? XposedHelpers.getIntField(displayInfo, "appHeight") : -1;
+ final ApplicationDisplayMetrics metrics =
+ updateApplicationDisplayMetricsLocked(windowManager, displayContent);
+
+ if (metrics != null && oldWidth >= 0 && oldHeight >= 0) {
+ changed = oldWidth != metrics.appWidth || oldHeight != metrics.appHeight;
+ }
+
+ if (changed) {
+ if (DEBUG ) log("Sending new configuration");
+ Handler h = (Handler) XposedHelpers.getObjectField(windowManager, "mH");
+ h.sendEmptyMessage(SEND_NEW_CONFIGURATION);
+ }
+
+ Binder.restoreCallingIdentity(origId);
+ }
+ }
+
+ private static ApplicationDisplayMetrics updateApplicationDisplayMetricsLocked(
+ Object windowManager, Object displayContent) {
+ if (!XposedHelpers.getBooleanField(windowManager, "mDisplayReady")) {
+ return null;
+ }
+
+ final ApplicationDisplayMetrics m = calculateDisplayMetrics(windowManager, displayContent);
+ final Object displayInfo = XposedHelpers.callMethod(displayContent, "getDisplayInfo");
+ final Object policy = XposedHelpers.getObjectField(windowManager, "mPolicy");
+ final int rotation = XposedHelpers.getIntField(windowManager, "mRotation");
+
+ m.appWidth = (Integer) XposedHelpers.callMethod(policy, "getNonDecorDisplayWidth", m.dw, m.dh, rotation);
+ m.appHeight = (Integer) XposedHelpers.callMethod(policy, "getNonDecorDisplayHeight", m.dw, m.dh, rotation);
+
+ synchronized(XposedHelpers.getObjectField(displayContent, "mDisplaySizeLock")) {
+ XposedHelpers.setIntField(displayInfo, "rotation", rotation);
+ XposedHelpers.setIntField(displayInfo, "logicalWidth", m.dw);
+ XposedHelpers.setIntField(displayInfo, "logicalHeight", m.dh);
+ XposedHelpers.setIntField(displayInfo, "logicalDensityDpi",
+ XposedHelpers.getIntField(displayContent, "mBaseDisplayDensity"));
+ XposedHelpers.setIntField(displayInfo, "appWidth", m.appWidth);
+ XposedHelpers.setIntField(displayInfo, "appHeight", m.appHeight);
+ Class>[] params = new Class>[2];
+ params[0] = DisplayMetrics.class;
+ params[1] = XposedHelpers.findClass("android.view.CompatibilityInfoHolder", null);
+ XposedHelpers.callMethod(displayInfo, "getLogicalMetrics", params,
+ XposedHelpers.getObjectField(windowManager, "mRealDisplayMetrics"), null);
+ XposedHelpers.callMethod(displayInfo, "getAppMetrics", params,
+ XposedHelpers.getObjectField(windowManager, "mDisplayMetrics"), null);
+ Object displayManagerService = XposedHelpers.getObjectField(windowManager, "mDisplayManagerService");
+ XposedHelpers.callMethod(displayManagerService, "setDisplayInfoOverrideFromWindowManager",
+ XposedHelpers.callMethod(displayContent, "getDisplayId"), displayInfo);
+
+ if (Build.VERSION.SDK_INT < 18) {
+ Object animator = XposedHelpers.getObjectField(windowManager, "mAnimator");
+ XposedHelpers.callMethod(animator, "setDisplayDimensions", m.dw, m.dh, m.appWidth, m.appHeight);
+ }
+ }
+
+ if (DEBUG) log("updateApplicationDisplayMetricsLocked: m=" + m.toString());
+ return m;
+ }
+
+ private static ApplicationDisplayMetrics calculateDisplayMetrics(
+ Object windowManager, Object displayContent) {
+ final ApplicationDisplayMetrics dm = new ApplicationDisplayMetrics();
+
+ final int rotation = XposedHelpers.getIntField(windowManager, "mRotation");
+ dm.rotated = (rotation == Surface.ROTATION_90 || rotation == Surface.ROTATION_270);
+ final int realdw = dm.rotated ?
+ XposedHelpers.getIntField(displayContent, "mBaseDisplayHeight") :
+ XposedHelpers.getIntField(displayContent, "mBaseDisplayWidth");
+ final int realdh = dm.rotated ?
+ XposedHelpers.getIntField(displayContent, "mBaseDisplayWidth") :
+ XposedHelpers.getIntField(displayContent, "mBaseDisplayHeight");
+
+ dm.dw = realdw;
+ dm.dh = realdh;
+
+ if(XposedHelpers.getBooleanField(windowManager, "mAltOrientation")) {
+ if (realdw > realdh) {
+ // Turn landscape into portrait.
+ int maxw = (int)(realdh/1.3f);
+ if (maxw < realdw) {
+ dm.dw = maxw;
+ }
+ } else {
+ // Turn portrait into landscape.
+ int maxh = (int)(realdw/1.3f);
+ if (maxh < realdh) {
+ dm.dh = maxh;
+ }
+ }
+ }
+
+ return dm;
+ }
+}
diff --git a/src/com/ceco/gm2/gravitybox/ModHwKeys.java b/src/com/ceco/gm2/gravitybox/ModHwKeys.java
index 72cdb9afb1..41e00406b8 100644
--- a/src/com/ceco/gm2/gravitybox/ModHwKeys.java
+++ b/src/com/ceco/gm2/gravitybox/ModHwKeys.java
@@ -1,40 +1,71 @@
+/*
+ * Copyright (C) 2013 Peter Gregus for GravityBox Project (C3C076@xda)
+ * 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.ceco.gm2.gravitybox;
+import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
import android.app.ActivityManager;
import android.app.ActivityManager.RunningAppProcessInfo;
+import android.content.ActivityNotFoundException;
import android.content.BroadcastReceiver;
+import android.content.ComponentName;
+import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
+import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.content.res.Resources;
+import android.hardware.input.InputManager;
+import android.os.Build;
import android.os.Handler;
+import android.os.IBinder;
import android.os.PowerManager;
import android.os.Process;
import android.os.SystemClock;
+import android.provider.Settings;
import android.view.HapticFeedbackConstants;
import android.view.KeyEvent;
import android.view.ViewConfiguration;
import android.widget.Toast;
import de.robv.android.xposed.XC_MethodHook;
+import de.robv.android.xposed.XC_MethodReplacement;
import de.robv.android.xposed.XSharedPreferences;
import de.robv.android.xposed.XposedBridge;
import de.robv.android.xposed.XposedHelpers;
import de.robv.android.xposed.callbacks.XCallback;
public class ModHwKeys {
- private static final String TAG = "ModHwKeys";
+ private static final String TAG = "GB:ModHwKeys";
private static final String CLASS_PHONE_WINDOW_MANAGER = "com.android.internal.policy.impl.PhoneWindowManager";
private static final String CLASS_ACTIVITY_MANAGER_NATIVE = "android.app.ActivityManagerNative";
private static final String CLASS_WINDOW_STATE = "android.view.WindowManagerPolicy$WindowState";
private static final String CLASS_WINDOW_MANAGER_FUNCS = "android.view.WindowManagerPolicy.WindowManagerFuncs";
private static final String CLASS_IWINDOW_MANAGER = "android.view.IWindowManager";
+ private static final String CLASS_LOCAL_POWER_MANAGER = "android.os.LocalPowerManager";
private static final boolean DEBUG = false;
private static final int FLAG_WAKE = 0x00000001;
private static final int FLAG_WAKE_DROPPED = 0x00000002;
+ public static final String ACTION_SCREENSHOT = "gravitybox.intent.action.SCREENSHOT";
+ public static final String ACTION_SHOW_POWER_MENU = "gravitybox.intent.action.SHOW_POWER_MENU";
+
+ private static final String SEPARATOR = "#C3C0#";
private static Class> classActivityManagerNative;
private static Object mPhoneWindowManager;
@@ -43,16 +74,44 @@ public class ModHwKeys {
private static String mStrAppKilled;
private static String mStrNothingToKill;
private static String mStrNoPrevApp;
+ private static String mStrCustomAppNone;
+ private static String mStrCustomAppMissing;
+ private static String mStrExpandedDesktopDisabled;
private static boolean mIsMenuLongPressed = false;
private static boolean mIsMenuDoubleTap = false;
private static boolean mIsBackLongPressed = false;
+ private static boolean mIsBackDoubleTap = false;
+ private static boolean mWasBackDoubleTap = false;
+ private static boolean mIsRecentsLongPressed = false;
+ private static boolean mIsHomeLongPressed = false;
private static int mMenuLongpressAction = 0;
private static int mMenuDoubletapAction = 0;
+ private static int mHomeLongpressAction = 0;
+ private static int mHomeLongpressActionKeyguard = 0;
+ private static boolean mHomeDoubletapDisabled;
+ private static int mHomeDoubletapDefaultAction;
private static int mBackLongpressAction = 0;
+ private static int mBackDoubletapAction = 0;
+ private static int mRecentsSingletapAction = 0;
+ private static int mRecentsLongpressAction = 0;
private static int mDoubletapSpeed = GravityBoxSettings.HWKEY_DOUBLETAP_SPEED_DEFAULT;
private static int mKillDelay = GravityBoxSettings.HWKEY_KILL_DELAY_DEFAULT;
private static boolean mVolumeRockerWakeDisabled = false;
private static boolean mHwKeysEnabled = true;
+ private static XSharedPreferences mPrefs;
+ private static AppLauncher mAppLauncher;
+ private static int mPieMode;
+ private static int mExpandedDesktopMode;
+ private static boolean mMenuKeyPressed;
+ private static boolean mBackKeyPressed;
+
+ private static List mKillIgnoreList = new ArrayList(Arrays.asList(
+ "com.android.systemui",
+ "com.mediatek.bluetooth",
+ "android.process.acore",
+ "com.google.process.gapps",
+ "com.android.smspush"
+ ));
private static void log(String message) {
XposedBridge.log(TAG + ": " + message);
@@ -60,20 +119,27 @@ private static void log(String message) {
private static enum HwKey {
MENU,
- BACK
+ HOME,
+ BACK,
+ RECENTS
}
private static enum HwKeyTrigger {
MENU_LONGPRESS,
MENU_DOUBLETAP,
- BACK_LONGPRESS
+ HOME_LONGPRESS,
+ HOME_LONGPRESS_KEYGUARD,
+ BACK_LONGPRESS,
+ BACK_DOUBLETAP,
+ RECENTS_SINGLETAP,
+ RECENTS_LONGPRESS
}
private static BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
- log("Broadcast received: " + intent.toString());
+ if (DEBUG) log("Broadcast received: " + intent.toString());
String action = intent.getAction();
int value = GravityBoxSettings.HWKEY_ACTION_DEFAULT;
@@ -83,39 +149,112 @@ public void onReceive(Context context, Intent intent) {
if (action.equals(GravityBoxSettings.ACTION_PREF_HWKEY_MENU_LONGPRESS_CHANGED)) {
mMenuLongpressAction = value;
- log("Menu long-press action set to: " + value);
+ if (DEBUG) log("Menu long-press action set to: " + value);
} else if (action.equals(GravityBoxSettings.ACTION_PREF_HWKEY_MENU_DOUBLETAP_CHANGED)) {
mMenuDoubletapAction = value;
- log("Menu double-tap action set to: " + value);
+ if (DEBUG) log("Menu double-tap action set to: " + value);
+ } else if (action.equals(GravityBoxSettings.ACTION_PREF_HWKEY_HOME_LONGPRESS_CHANGED)) {
+ if (intent.hasExtra(GravityBoxSettings.EXTRA_HWKEY_VALUE)) {
+ mHomeLongpressAction = value;
+ if (DEBUG) log("Home long-press action set to: " + value);
+ }
+ if (intent.hasExtra(GravityBoxSettings.EXTRA_HWKEY_HOME_LONGPRESS_KG)) {
+ mHomeLongpressActionKeyguard = intent.getBooleanExtra(
+ GravityBoxSettings.EXTRA_HWKEY_HOME_LONGPRESS_KG, false) ?
+ GravityBoxSettings.HWKEY_ACTION_TORCH :
+ GravityBoxSettings.HWKEY_ACTION_DEFAULT;
+ if (DEBUG) log("Home long-press action while keyguard on set to: " +
+ mHomeLongpressActionKeyguard);
+ }
+ } else if (action.equals(GravityBoxSettings.ACTION_PREF_HWKEY_HOME_DOUBLETAP_CHANGED)) {
+ if (intent.hasExtra(GravityBoxSettings.EXTRA_HWKEY_HOME_DOUBLETAP_DISABLE)) {
+ mHomeDoubletapDisabled = intent.getBooleanExtra(
+ GravityBoxSettings.EXTRA_HWKEY_HOME_DOUBLETAP_DISABLE, false);
+ if (Build.VERSION.SDK_INT > 17 && mPhoneWindowManager != null) {
+ try {
+ XposedHelpers.setIntField(mPhoneWindowManager, "mDoubleTapOnHomeBehavior",
+ mHomeDoubletapDisabled ? 0 : mHomeDoubletapDefaultAction);
+ } catch (Throwable t) {
+ log("PhoneWindowManager: Error settings mDoubleTapOnHomeBehavior: " +
+ t.getMessage());
+ }
+ }
+ }
} else if (action.equals(GravityBoxSettings.ACTION_PREF_HWKEY_BACK_LONGPRESS_CHANGED)) {
mBackLongpressAction = value;
- log("Back long-press action set to: " + value);
+ if (DEBUG) log("Back long-press action set to: " + value);
+ } else if (action.equals(GravityBoxSettings.ACTION_PREF_HWKEY_BACK_DOUBLETAP_CHANGED)) {
+ mBackDoubletapAction = value;
+ if (DEBUG) log("Back double-tap action set to: " + value);
+ } else if (action.equals(GravityBoxSettings.ACTION_PREF_HWKEY_RECENTS_SINGLETAP_CHANGED)) {
+ mRecentsSingletapAction = value;
+ if (DEBUG) log("Recents single-tap action set to: " + value);
+ } else if (action.equals(GravityBoxSettings.ACTION_PREF_HWKEY_RECENTS_LONGPRESS_CHANGED)) {
+ mRecentsLongpressAction = value;
+ if (DEBUG) log("Recents long-press action set to: " + value);
} else if (action.equals(GravityBoxSettings.ACTION_PREF_HWKEY_DOUBLETAP_SPEED_CHANGED)) {
mDoubletapSpeed = value;
- log("Doubletap speed set to: " + value);
+ if (DEBUG) log("Doubletap speed set to: " + value);
} else if (action.equals(GravityBoxSettings.ACTION_PREF_HWKEY_KILL_DELAY_CHANGED)) {
mKillDelay = value;
- log("Kill delay set to: " + value);
+ if (DEBUG) log("Kill delay set to: " + value);
} else if (action.equals(GravityBoxSettings.ACTION_PREF_VOLUME_ROCKER_WAKE_CHANGED)) {
mVolumeRockerWakeDisabled = intent.getBooleanExtra(
GravityBoxSettings.EXTRA_VOLUME_ROCKER_WAKE_DISABLE, false);
- log("mVolumeRockerWakeDisabled set to: " + mVolumeRockerWakeDisabled);
- } else if (action.equals(GravityBoxSettings.ACTION_PREF_PIE_CHANGED) &&
- intent.hasExtra(GravityBoxSettings.EXTRA_PIE_HWKEYS_DISABLE)) {
- mHwKeysEnabled = !intent.getBooleanExtra(GravityBoxSettings.EXTRA_PIE_HWKEYS_DISABLE, false);
+ if (DEBUG) log("mVolumeRockerWakeDisabled set to: " + mVolumeRockerWakeDisabled);
+ } else if (action.equals(GravityBoxSettings.ACTION_PREF_PIE_CHANGED)) {
+ if (intent.hasExtra(GravityBoxSettings.EXTRA_PIE_HWKEYS_DISABLE)) {
+ mHwKeysEnabled = !intent.getBooleanExtra(GravityBoxSettings.EXTRA_PIE_HWKEYS_DISABLE, false);
+ }
+ if (intent.hasExtra(GravityBoxSettings.EXTRA_PIE_ENABLE)) {
+ mPieMode = intent.getIntExtra(GravityBoxSettings.EXTRA_PIE_ENABLE, 0);
+ }
+ } else if (action.equals(ACTION_SCREENSHOT) && mPhoneWindowManager != null) {
+ try {
+ XposedHelpers.callMethod(mPhoneWindowManager, "takeScreenshot");
+ } catch (Throwable t) {
+ log("Error executing PhoneWindowManager.takeScreenshot(): " + t.getMessage());
+ }
+ } else if (action.equals(GravityBoxSettings.ACTION_PREF_DISPLAY_ALLOW_ALL_ROTATIONS_CHANGED)) {
+ final boolean allowAllRotations = intent.getBooleanExtra(
+ GravityBoxSettings.EXTRA_ALLOW_ALL_ROTATIONS, false);
+ try {
+ XposedHelpers.setIntField(mPhoneWindowManager, "mAllowAllRotations",
+ allowAllRotations ? 1 : 0);
+ } catch (Throwable t) {
+ log("Error settings PhoneWindowManager.mAllowAllRotations: " + t.getMessage());
+ }
+ } else if (action.equals(ACTION_SHOW_POWER_MENU) && mPhoneWindowManager != null) {
+ try {
+ XposedHelpers.callMethod(mPhoneWindowManager, "showGlobalActionsDialog");
+ } catch (Throwable t) {
+ log("Error executing PhoneWindowManager.showGlobalActionsDialog(): " + t.getMessage());
+ }
+ } else if (action.equals(GravityBoxSettings.ACTION_PREF_EXPANDED_DESKTOP_MODE_CHANGED)) {
+ mExpandedDesktopMode = intent.getIntExtra(
+ GravityBoxSettings.EXTRA_ED_MODE, GravityBoxSettings.ED_DISABLED);
}
}
};
public static void initZygote(final XSharedPreferences prefs) {
try {
+ mPrefs = prefs;
try {
mMenuLongpressAction = Integer.valueOf(
prefs.getString(GravityBoxSettings.PREF_KEY_HWKEY_MENU_LONGPRESS, "0"));
mMenuDoubletapAction = Integer.valueOf(
prefs.getString(GravityBoxSettings.PREF_KEY_HWKEY_MENU_DOUBLETAP, "0"));
+ mHomeLongpressAction = Integer.valueOf(
+ prefs.getString(GravityBoxSettings.PREF_KEY_HWKEY_HOME_LONGPRESS, "0"));
mBackLongpressAction = Integer.valueOf(
prefs.getString(GravityBoxSettings.PREF_KEY_HWKEY_BACK_LONGPRESS, "0"));
+ mBackDoubletapAction = Integer.valueOf(
+ prefs.getString(GravityBoxSettings.PREF_KEY_HWKEY_BACK_DOUBLETAP, "0"));
+ mRecentsSingletapAction = Integer.valueOf(
+ prefs.getString(GravityBoxSettings.PREF_KEY_HWKEY_RECENTS_SINGLETAP, "0"));
+ mRecentsLongpressAction = Integer.valueOf(
+ prefs.getString(GravityBoxSettings.PREF_KEY_HWKEY_RECENTS_LONGPRESS, "0"));
mDoubletapSpeed = Integer.valueOf(
prefs.getString(GravityBoxSettings.PREF_KEY_HWKEY_DOUBLETAP_SPEED, "400"));
mKillDelay = Integer.valueOf(
@@ -124,49 +263,67 @@ public static void initZygote(final XSharedPreferences prefs) {
XposedBridge.log(e);
}
+ mHomeLongpressActionKeyguard = prefs.getBoolean(
+ GravityBoxSettings.PREF_KEY_HWKEY_HOME_LONGPRESS_KEYGUARD, false) ?
+ GravityBoxSettings.HWKEY_ACTION_TORCH : GravityBoxSettings.HWKEY_ACTION_DEFAULT;
+ mHomeDoubletapDisabled = prefs.getBoolean(
+ GravityBoxSettings.PREF_KEY_HWKEY_HOME_DOUBLETAP_DISABLE, false);
mVolumeRockerWakeDisabled = prefs.getBoolean(
GravityBoxSettings.PREF_KEY_VOLUME_ROCKER_WAKE_DISABLE, false);
mHwKeysEnabled = !prefs.getBoolean(GravityBoxSettings.PREF_KEY_HWKEYS_DISABLE, false);
+ mPieMode = ModPieControls.PIE_DISABLED;
+ try {
+ mPieMode = Integer.valueOf(prefs.getString(GravityBoxSettings.PREF_KEY_PIE_CONTROL_ENABLE, "0"));
+ } catch (NumberFormatException nfe) {
+ log("Invalid preference value for Pie Mode");
+ }
+
+ mExpandedDesktopMode = GravityBoxSettings.ED_DISABLED;
+ try {
+ mExpandedDesktopMode = Integer.valueOf(prefs.getString(
+ GravityBoxSettings.PREF_KEY_EXPANDED_DESKTOP, "0"));
+ } catch (NumberFormatException nfe) {
+ log("Invalid value for PREF_KEY_EXPANDED_DESKTOP preference");
+ }
+
final Class> classPhoneWindowManager = XposedHelpers.findClass(CLASS_PHONE_WINDOW_MANAGER, null);
classActivityManagerNative = XposedHelpers.findClass(CLASS_ACTIVITY_MANAGER_NATIVE, null);
- XposedHelpers.findAndHookMethod(classPhoneWindowManager, "init",
- Context.class, CLASS_IWINDOW_MANAGER, CLASS_WINDOW_MANAGER_FUNCS, new XC_MethodHook() {
-
- @Override
- protected void afterHookedMethod(MethodHookParam param) throws Throwable {
- mPhoneWindowManager = param.thisObject;
- mContext = (Context) XposedHelpers.getObjectField(mPhoneWindowManager, "mContext");
- mGbContext = mContext.createPackageContext(GravityBox.PACKAGE_NAME, Context.CONTEXT_IGNORE_SECURITY);
-
- Resources res = mGbContext.getResources();
- mStrAppKilled = res.getString(R.string.app_killed);
- mStrNothingToKill = res.getString(R.string.nothing_to_kill);
- mStrNoPrevApp = res.getString(R.string.no_previous_app_found);
-
- IntentFilter intentFilter = new IntentFilter();
- intentFilter.addAction(GravityBoxSettings.ACTION_PREF_HWKEY_MENU_LONGPRESS_CHANGED);
- intentFilter.addAction(GravityBoxSettings.ACTION_PREF_HWKEY_MENU_DOUBLETAP_CHANGED);
- intentFilter.addAction(GravityBoxSettings.ACTION_PREF_HWKEY_BACK_LONGPRESS_CHANGED);
- intentFilter.addAction(GravityBoxSettings.ACTION_PREF_HWKEY_DOUBLETAP_SPEED_CHANGED);
- intentFilter.addAction(GravityBoxSettings.ACTION_PREF_HWKEY_KILL_DELAY_CHANGED);
- intentFilter.addAction(GravityBoxSettings.ACTION_PREF_VOLUME_ROCKER_WAKE_CHANGED);
- intentFilter.addAction(GravityBoxSettings.ACTION_PREF_PIE_CHANGED);
- mContext.registerReceiver(mBroadcastReceiver, intentFilter);
-
- log("Phone window manager initialized");
- }
- });
+ if (Build.VERSION.SDK_INT > 16) {
+ XposedHelpers.findAndHookMethod(classPhoneWindowManager, "init",
+ Context.class, CLASS_IWINDOW_MANAGER, CLASS_WINDOW_MANAGER_FUNCS, phoneWindowManagerInitHook);
+ } else {
+ XposedHelpers.findAndHookMethod(classPhoneWindowManager, "init",
+ Context.class, CLASS_IWINDOW_MANAGER, CLASS_WINDOW_MANAGER_FUNCS,
+ CLASS_LOCAL_POWER_MANAGER, phoneWindowManagerInitHook);
+ }
XposedHelpers.findAndHookMethod(classPhoneWindowManager, "interceptKeyBeforeQueueing",
KeyEvent.class, int.class, boolean.class, new XC_MethodHook(XCallback.PRIORITY_HIGHEST) {
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
KeyEvent event = (KeyEvent) param.args[0];
+ int keyCode = event.getKeyCode();
+ boolean down = event.getAction() == KeyEvent.ACTION_DOWN;
+ boolean keyguardOn = (Boolean) XposedHelpers.callMethod(mPhoneWindowManager, "keyguardOn");
+ Handler handler = (Handler) XposedHelpers.getObjectField(param.thisObject, "mHandler");
+ if (DEBUG) log("interceptKeyBeforeQueueing: keyCode=" + keyCode +
+ "; action=" + event.getAction());
+
+ if (keyCode == KeyEvent.KEYCODE_VOLUME_UP) {
+ if (!down) {
+ handler.removeCallbacks(mResetBrightnessRunnable);
+ } else {
+ if (event.getRepeatCount() == 0) {
+ handler.postDelayed(mResetBrightnessRunnable, 7000);
+ }
+ }
+ }
+
if (mVolumeRockerWakeDisabled &&
- (event.getKeyCode() == KeyEvent.KEYCODE_VOLUME_UP ||
- event.getKeyCode() == KeyEvent.KEYCODE_VOLUME_DOWN)) {
+ (keyCode == KeyEvent.KEYCODE_VOLUME_UP ||
+ keyCode == KeyEvent.KEYCODE_VOLUME_DOWN)) {
int policyFlags = (Integer) param.args[1];
policyFlags &= ~FLAG_WAKE;
policyFlags &= ~FLAG_WAKE_DROPPED;
@@ -174,13 +331,34 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
return;
}
- if (event.getKeyCode() == KeyEvent.KEYCODE_HOME) {
- if (!mHwKeysEnabled && event.getAction() == KeyEvent.ACTION_UP &&
- event.getRepeatCount() == 0 &&
- (event.getFlags() & KeyEvent.FLAG_FROM_SYSTEM) != 0) {
- if (DEBUG) log("HOME KeyEvent coming from HW key and keys disabled. Ignoring.");
- param.setResult(0);
- return;
+ if (keyCode == KeyEvent.KEYCODE_HOME) {
+ if (!down) {
+ handler.removeCallbacks(mHomeLongPressKeyguard);
+ if (mIsHomeLongPressed) {
+ mIsHomeLongPressed = false;
+ param.setResult(0);
+ return;
+ }
+ if (!areHwKeysEnabled() &&
+ event.getRepeatCount() == 0 &&
+ (event.getFlags() & KeyEvent.FLAG_FROM_SYSTEM) != 0) {
+ if (DEBUG) log("HOME KeyEvent coming from HW key and keys disabled. Ignoring.");
+ param.setResult(0);
+ return;
+ }
+ } else if (keyguardOn) {
+ if (event.getRepeatCount() == 0) {
+ mIsHomeLongPressed = false;
+ if (mHomeLongpressActionKeyguard != GravityBoxSettings.HWKEY_ACTION_DEFAULT) {
+ handler.postDelayed(mHomeLongPressKeyguard,
+ getLongpressTimeoutForAction(mHomeLongpressActionKeyguard));
+ }
+ } else {
+ if (mHomeLongpressActionKeyguard != GravityBoxSettings.HWKEY_ACTION_DEFAULT) {
+ param.setResult(0);
+ }
+ return;
+ }
}
}
}
@@ -196,89 +374,244 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
KeyEvent event = (KeyEvent) param.args[1];
int keyCode = event.getKeyCode();
boolean down = event.getAction() == KeyEvent.ACTION_DOWN;
+ boolean isFromSystem = (event.getFlags() & KeyEvent.FLAG_FROM_SYSTEM) != 0;
Handler mHandler = (Handler) XposedHelpers.getObjectField(param.thisObject, "mHandler");
+ if (DEBUG) log("interceptKeyBeforeDispatching: keyCode=" + keyCode +
+ "; isInjected=" + (((Integer)param.args[2] & 0x01000000) != 0) +
+ "; fromSystem=" + isFromSystem);
- if (keyCode == KeyEvent.KEYCODE_MENU) {
- if (!hasAction(HwKey.MENU) && mHwKeysEnabled) return;
+ if (keyCode == KeyEvent.KEYCODE_MENU && isFromSystem &&
+ (hasAction(HwKey.MENU) || !areHwKeysEnabled())) {
if (!down) {
+ mMenuKeyPressed = false;
mHandler.removeCallbacks(mMenuLongPress);
if (mIsMenuLongPressed) {
+ mIsMenuLongPressed = false;
param.setResult(-1);
return;
}
- if (!mHwKeysEnabled &&
- event.getRepeatCount() == 0 &&
- ((event.getFlags() & KeyEvent.FLAG_FROM_SYSTEM) != 0)) {
- if (DEBUG) log("MENU KeyEvent coming from HW key and keys disabled. Ignoring.");
- param.setResult(-1);
- return;
+ if (event.getRepeatCount() == 0) {
+ if (!areHwKeysEnabled()) {
+ if (DEBUG) log("MENU KeyEvent coming from HW key and keys disabled. Ignoring.");
+ param.setResult(-1);
+ return;
+ } else if (mIsMenuDoubleTap) {
+ // we are still waiting for double-tap
+ if (DEBUG) log("MENU doubletap pending. Ignoring.");
+ param.setResult(-1);
+ return;
+ }
}
} else {
if (event.getRepeatCount() == 0) {
+ mMenuKeyPressed = true;
if (mIsMenuDoubleTap) {
performAction(HwKeyTrigger.MENU_DOUBLETAP);
mHandler.removeCallbacks(mMenuDoubleTapReset);
mIsMenuDoubleTap = false;
+ param.setResult(-1);
+ return;
} else {
mIsMenuLongPressed = false;
- mIsMenuDoubleTap = true;
- mHandler.postDelayed(mMenuLongPress, getLongpressTimeoutForAction(mMenuLongpressAction));
- mHandler.postDelayed(mMenuDoubleTapReset, mDoubletapSpeed);
+ mIsMenuDoubleTap = false;
+ if (mMenuDoubletapAction != GravityBoxSettings.HWKEY_ACTION_DEFAULT) {
+ mIsMenuDoubleTap = true;
+ mHandler.postDelayed(mMenuDoubleTapReset, mDoubletapSpeed);
+ param.setResult(-1);
+ }
+ if (mMenuLongpressAction != GravityBoxSettings.HWKEY_ACTION_DEFAULT) {
+ mHandler.postDelayed(mMenuLongPress,
+ getLongpressTimeoutForAction(mMenuLongpressAction));
+ }
}
} else {
- param.setResult(-1);
+ if (mMenuLongpressAction != GravityBoxSettings.HWKEY_ACTION_DEFAULT) {
+ param.setResult(-1);
+ }
return;
}
}
}
- if (keyCode == KeyEvent.KEYCODE_BACK) {
- if (!hasAction(HwKey.BACK) && mHwKeysEnabled) return;
+ if (keyCode == KeyEvent.KEYCODE_BACK && isFromSystem &&
+ (hasAction(HwKey.BACK) || !areHwKeysEnabled())) {
if (!down) {
+ mBackKeyPressed = false;
mHandler.removeCallbacks(mBackLongPress);
if (mIsBackLongPressed) {
- param.setResult(-1);
- return;
+ mIsBackLongPressed = false;
+ } else if (areHwKeysEnabled() && !mIsBackDoubleTap && !mWasBackDoubleTap) {
+ // inject BACK key event as it was previously eaten by us
+ if (DEBUG) log("Triggering original DOWN/UP events for BACK key");
+ injectKey(KeyEvent.KEYCODE_BACK);
+ } else {
+ if (DEBUG) log("BACK KeyEvent coming from HW key and keys disabled; " +
+ "or pending double-tap. Ignoring.");
}
- if (!mHwKeysEnabled &&
- event.getRepeatCount() == 0 &&
- ((event.getFlags() & KeyEvent.FLAG_FROM_SYSTEM) != 0)) {
- if (DEBUG) log("BACK KeyEvent coming from HW key and keys disabled. Ignoring.");
- param.setResult(-1);
- return;
+ } else {
+ if (event.getRepeatCount() == 0) {
+ mBackKeyPressed = true;
+ mWasBackDoubleTap = mIsBackDoubleTap;
+ if (mIsBackDoubleTap) {
+ performAction(HwKeyTrigger.BACK_DOUBLETAP);
+ mHandler.removeCallbacks(mBackDoubleTapReset);
+ mIsBackDoubleTap = false;
+ param.setResult(-1);
+ return;
+ } else {
+ mIsBackLongPressed = false;
+ mIsBackDoubleTap = false;
+ if (mBackDoubletapAction != GravityBoxSettings.HWKEY_ACTION_DEFAULT) {
+ mIsBackDoubleTap = true;
+ mHandler.postDelayed(mBackDoubleTapReset, mDoubletapSpeed);
+ }
+ if (mBackLongpressAction != GravityBoxSettings.HWKEY_ACTION_DEFAULT) {
+ mHandler.postDelayed(mBackLongPress,
+ getLongpressTimeoutForAction(mBackLongpressAction));
+ }
+ }
}
+ }
+ param.setResult(-1);
+ return;
+ }
+
+ if (keyCode == KeyEvent.KEYCODE_APP_SWITCH) {
+ if (!hasAction(HwKey.RECENTS) && areHwKeysEnabled()) return;
+
+ if (!down) {
+ mHandler.removeCallbacks(mRecentsLongPress);
+ if (!mIsRecentsLongPressed) {
+ if (!areHwKeysEnabled() &&
+ event.getRepeatCount() == 0 &&
+ ((event.getFlags() & KeyEvent.FLAG_FROM_SYSTEM) != 0)) {
+ if (DEBUG) log("APP_SWITCH KeyEvent coming from HW key and keys disabled. Ignoring.");
+ param.setResult(-1);
+ return;
+ }
+ if (mRecentsSingletapAction != GravityBoxSettings.HWKEY_ACTION_DEFAULT) {
+ performAction(HwKeyTrigger.RECENTS_SINGLETAP);
+ } else {
+ toggleRecentApps();
+ }
+ }
+ mIsRecentsLongPressed = false;
} else {
if (event.getRepeatCount() == 0) {
- mIsBackLongPressed = false;
- mHandler.postDelayed(mBackLongPress, getLongpressTimeoutForAction(mBackLongpressAction));
- } else {
- param.setResult(-1);
- return;
+ mIsRecentsLongPressed = false;
+ if (mRecentsLongpressAction != GravityBoxSettings.HWKEY_ACTION_DEFAULT) {
+ mHandler.postDelayed(mRecentsLongPress,
+ getLongpressTimeoutForAction(mRecentsLongpressAction));
+ }
}
}
+ param.setResult(-1);
+ return;
}
}
});
- XposedHelpers.findAndHookMethod(classPhoneWindowManager,
- "isWakeKeyWhenScreenOff", int.class, new XC_MethodHook() {
+ XposedHelpers.findAndHookMethod(classPhoneWindowManager, "handleLongPressOnHome", new XC_MethodReplacement() {
@Override
- protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
- int keyCode = (Integer) param.args[0];
- if (mVolumeRockerWakeDisabled &&
- (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN ||
- keyCode == KeyEvent.KEYCODE_VOLUME_UP)) {
- param.setResult(false);
+ protected Object replaceHookedMethod(MethodHookParam param) throws Throwable {
+ if (!hasAction(HwKey.HOME)) {
+ XposedBridge.invokeOriginalMethod(param.method, param.thisObject, param.args);
+ return null;
+ }
+
+ if (Build.VERSION.SDK_INT > 17) {
+ XposedHelpers.setBooleanField(param.thisObject, "mHomeConsumed", true);
+ } else {
+ XposedHelpers.setBooleanField(param.thisObject, "mHomeLongPressed", true);
}
+ performAction(HwKeyTrigger.HOME_LONGPRESS);
+
+ return null;
}
});
- } catch (Exception e) {
- XposedBridge.log(e);
+ if (Build.VERSION.SDK_INT > 16) {
+ XposedHelpers.findAndHookMethod(classPhoneWindowManager,
+ "isWakeKeyWhenScreenOff", int.class, new XC_MethodHook() {
+
+ @Override
+ protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
+ int keyCode = (Integer) param.args[0];
+ if (mVolumeRockerWakeDisabled &&
+ (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN ||
+ keyCode == KeyEvent.KEYCODE_VOLUME_UP)) {
+ param.setResult(false);
+ }
+ }
+ });
+ }
+
+ if (Build.VERSION.SDK_INT > 17) {
+ XposedHelpers.findAndHookMethod(classPhoneWindowManager,
+ "readConfigurationDependentBehaviors", new XC_MethodHook() {
+ @Override
+ protected void afterHookedMethod(MethodHookParam param) throws Throwable {
+ mHomeDoubletapDefaultAction = XposedHelpers.getIntField(
+ param.thisObject, "mDoubleTapOnHomeBehavior");
+ if (mHomeDoubletapDisabled) {
+ XposedHelpers.setIntField(param.thisObject, "mDoubleTapOnHomeBehavior", 0);
+ }
+ }
+ });
+ }
+ } catch (Throwable t) {
+ XposedBridge.log(t);
+ }
+ }
+
+ private static XC_MethodHook phoneWindowManagerInitHook = new XC_MethodHook() {
+ @Override
+ protected void afterHookedMethod(MethodHookParam param) throws Throwable {
+ mPhoneWindowManager = param.thisObject;
+ mContext = (Context) XposedHelpers.getObjectField(mPhoneWindowManager, "mContext");
+ mGbContext = mContext.createPackageContext(GravityBox.PACKAGE_NAME, Context.CONTEXT_IGNORE_SECURITY);
+ XposedHelpers.setIntField(mPhoneWindowManager, "mAllowAllRotations",
+ mPrefs.getBoolean(GravityBoxSettings.PREF_KEY_DISPLAY_ALLOW_ALL_ROTATIONS, false) ? 1 : 0);
+
+ Resources res = mGbContext.getResources();
+ mStrAppKilled = res.getString(R.string.app_killed);
+ mStrNothingToKill = res.getString(R.string.nothing_to_kill);
+ mStrNoPrevApp = res.getString(R.string.no_previous_app_found);
+ mStrCustomAppNone = res.getString(R.string.hwkey_action_custom_app_none);
+ mStrCustomAppMissing = res.getString(R.string.hwkey_action_custom_app_missing);
+ mStrExpandedDesktopDisabled = res.getString(R.string.hwkey_action_expanded_desktop_disabled);
+
+ mAppLauncher = new AppLauncher(mContext, mPrefs);
+
+ IntentFilter intentFilter = new IntentFilter();
+ intentFilter.addAction(GravityBoxSettings.ACTION_PREF_HWKEY_MENU_LONGPRESS_CHANGED);
+ intentFilter.addAction(GravityBoxSettings.ACTION_PREF_HWKEY_MENU_DOUBLETAP_CHANGED);
+ intentFilter.addAction(GravityBoxSettings.ACTION_PREF_HWKEY_HOME_LONGPRESS_CHANGED);
+ intentFilter.addAction(GravityBoxSettings.ACTION_PREF_HWKEY_HOME_DOUBLETAP_CHANGED);
+ intentFilter.addAction(GravityBoxSettings.ACTION_PREF_HWKEY_BACK_LONGPRESS_CHANGED);
+ intentFilter.addAction(GravityBoxSettings.ACTION_PREF_HWKEY_BACK_DOUBLETAP_CHANGED);
+ intentFilter.addAction(GravityBoxSettings.ACTION_PREF_HWKEY_RECENTS_SINGLETAP_CHANGED);
+ intentFilter.addAction(GravityBoxSettings.ACTION_PREF_HWKEY_RECENTS_LONGPRESS_CHANGED);
+ intentFilter.addAction(GravityBoxSettings.ACTION_PREF_HWKEY_DOUBLETAP_SPEED_CHANGED);
+ intentFilter.addAction(GravityBoxSettings.ACTION_PREF_HWKEY_KILL_DELAY_CHANGED);
+ intentFilter.addAction(GravityBoxSettings.ACTION_PREF_VOLUME_ROCKER_WAKE_CHANGED);
+ intentFilter.addAction(GravityBoxSettings.ACTION_PREF_PIE_CHANGED);
+ intentFilter.addAction(ACTION_SCREENSHOT);
+ intentFilter.addAction(ACTION_SHOW_POWER_MENU);
+ intentFilter.addAction(GravityBoxSettings.ACTION_PREF_DISPLAY_ALLOW_ALL_ROTATIONS_CHANGED);
+ intentFilter.addAction(GravityBoxSettings.ACTION_PREF_EXPANDED_DESKTOP_MODE_CHANGED);
+ mContext.registerReceiver(mBroadcastReceiver, intentFilter);
+
+ if (DEBUG) log("Phone window manager initialized");
}
+ };
+
+ private static boolean areHwKeysEnabled() {
+ return (mHwKeysEnabled ||
+ !ModPieControls.isPieEnabled(mContext, mPieMode, mExpandedDesktopMode));
}
private static Runnable mMenuLongPress = new Runnable() {
@@ -295,8 +628,14 @@ public void run() {
@Override
public void run() {
- if (DEBUG) log("menu key double tap timed out");
mIsMenuDoubleTap = false;
+ // doubletap timed out and since we blocked default MENU key action while waiting for doubletap
+ // let's inject it now additionally, but only in case it's not still pressed as we might still be waiting
+ // for long-press action
+ if (!mMenuKeyPressed && areHwKeysEnabled()) {
+ if (DEBUG) log("MENU key double tap timed out and key not pressed; injecting MENU key");
+ injectKey(KeyEvent.KEYCODE_MENU);
+ }
}
};
@@ -310,16 +649,87 @@ public void run() {
}
};
+ private static Runnable mBackDoubleTapReset = new Runnable() {
+
+ @Override
+ public void run() {
+ mIsBackDoubleTap = false;
+ // doubletap timed out and since we blocked default BACK key action while waiting for doubletap
+ // let's inject it now additionally, but only in case it's not still pressed as we might still be waiting
+ // for long-press action
+ if (!mBackKeyPressed && areHwKeysEnabled()) {
+ if (DEBUG) log("BACK key double tap timed out and key not pressed; injecting BACK key");
+ injectKey(KeyEvent.KEYCODE_BACK);
+ }
+ }
+ };
+
+ private static Runnable mRecentsLongPress = new Runnable() {
+
+ @Override
+ public void run() {
+ if (DEBUG) log("mRecentsLongPress runnable launched");
+ mIsRecentsLongPressed = true;
+ performAction(HwKeyTrigger.RECENTS_LONGPRESS);
+ }
+ };
+
+ private static Runnable mHomeLongPressKeyguard = new Runnable() {
+
+ @Override
+ public void run() {
+ if (DEBUG) log("mHomeLongPressKeyguard runnable launched");
+ mIsHomeLongPressed = true;
+ performAction(HwKeyTrigger.HOME_LONGPRESS_KEYGUARD);
+ }
+ };
+
+ private static Runnable mResetBrightnessRunnable = new Runnable() {
+
+ @Override
+ public void run() {
+ try {
+ Class> classSm = XposedHelpers.findClass("android.os.ServiceManager", null);
+ Class> classIpm = XposedHelpers.findClass("android.os.IPowerManager.Stub", null);
+ IBinder b = (IBinder) XposedHelpers.callStaticMethod(
+ classSm, "getService", Context.POWER_SERVICE);
+ Object power = XposedHelpers.callStaticMethod(classIpm, "asInterface", b);
+ if (power != null) {
+ Settings.System.putInt(mContext.getContentResolver(),
+ Settings.System.SCREEN_BRIGHTNESS_MODE, 0);
+ final String bcMethod = Build.VERSION.SDK_INT > 16 ?
+ "setTemporaryScreenBrightnessSettingOverride" : "setBacklightBrightness";
+ XposedHelpers.callMethod(power, bcMethod, 100);
+ Settings.System.putInt(mContext.getContentResolver(),
+ Settings.System.SCREEN_BRIGHTNESS, 100);
+ if (DEBUG) log("Screen brightness reset to manual with level set to 100");
+ }
+ } catch (Throwable t) {
+ XposedBridge.log(t);
+ }
+ }
+ };
+
private static int getActionForHwKeyTrigger(HwKeyTrigger keyTrigger) {
int action = GravityBoxSettings.HWKEY_ACTION_DEFAULT;
- if (keyTrigger == HwKeyTrigger.MENU_LONGPRESS) {
- action = mMenuLongpressAction;
- } else if (keyTrigger == HwKeyTrigger.MENU_DOUBLETAP) {
- action = mMenuDoubletapAction;
- } else if (keyTrigger == HwKeyTrigger.BACK_LONGPRESS) {
- action = mBackLongpressAction;
- }
+ if (keyTrigger == HwKeyTrigger.MENU_LONGPRESS) {
+ action = mMenuLongpressAction;
+ } else if (keyTrigger == HwKeyTrigger.MENU_DOUBLETAP) {
+ action = mMenuDoubletapAction;
+ } else if (keyTrigger == HwKeyTrigger.HOME_LONGPRESS) {
+ action = mHomeLongpressAction;
+ } else if (keyTrigger == HwKeyTrigger.HOME_LONGPRESS_KEYGUARD) {
+ action = mHomeLongpressActionKeyguard;
+ } else if (keyTrigger == HwKeyTrigger.BACK_LONGPRESS) {
+ action = mBackLongpressAction;
+ } else if (keyTrigger == HwKeyTrigger.BACK_DOUBLETAP) {
+ action = mBackDoubletapAction;
+ } else if (keyTrigger == HwKeyTrigger.RECENTS_SINGLETAP) {
+ action = mRecentsSingletapAction;
+ } else if (keyTrigger == HwKeyTrigger.RECENTS_LONGPRESS) {
+ action = mRecentsLongpressAction;
+ }
if (DEBUG) log("Action for HWKEY trigger " + keyTrigger + " = " + action);
return action;
@@ -330,8 +740,14 @@ private static boolean hasAction(HwKey key) {
if (key == HwKey.MENU) {
retVal |= getActionForHwKeyTrigger(HwKeyTrigger.MENU_LONGPRESS) != GravityBoxSettings.HWKEY_ACTION_DEFAULT;
retVal |= getActionForHwKeyTrigger(HwKeyTrigger.MENU_DOUBLETAP) != GravityBoxSettings.HWKEY_ACTION_DEFAULT;
+ } else if (key == HwKey.HOME) {
+ retVal |= getActionForHwKeyTrigger(HwKeyTrigger.HOME_LONGPRESS) != GravityBoxSettings.HWKEY_ACTION_DEFAULT;
} else if (key == HwKey.BACK) {
retVal |= getActionForHwKeyTrigger(HwKeyTrigger.BACK_LONGPRESS) != GravityBoxSettings.HWKEY_ACTION_DEFAULT;
+ retVal |= getActionForHwKeyTrigger(HwKeyTrigger.BACK_DOUBLETAP) != GravityBoxSettings.HWKEY_ACTION_DEFAULT;
+ } else if (key == HwKey.RECENTS) {
+ retVal |= getActionForHwKeyTrigger(HwKeyTrigger.RECENTS_SINGLETAP) != GravityBoxSettings.HWKEY_ACTION_DEFAULT;
+ retVal |= getActionForHwKeyTrigger(HwKeyTrigger.RECENTS_LONGPRESS) != GravityBoxSettings.HWKEY_ACTION_DEFAULT;
}
if (DEBUG) log("HWKEY " + key + " has action = " + retVal);
@@ -359,6 +775,23 @@ private static void performAction(HwKeyTrigger keyTrigger) {
killForegroundApp();
} else if (action == GravityBoxSettings.HWKEY_ACTION_SLEEP) {
goToSleep();
+ } else if (action == GravityBoxSettings.HWKEY_ACTION_RECENT_APPS) {
+ toggleRecentApps();
+ } else if (action == GravityBoxSettings.HWKEY_ACTION_CUSTOM_APP
+ || action == GravityBoxSettings.HWKEY_ACTION_CUSTOM_APP2) {
+ launchCustomApp(action);
+ } else if (action == GravityBoxSettings.HWKEY_ACTION_MENU) {
+ injectKey(KeyEvent.KEYCODE_MENU);
+ } else if (action == GravityBoxSettings.HWKEY_ACTION_EXPANDED_DESKTOP) {
+ toggleExpandedDesktop();
+ } else if (action == GravityBoxSettings.HWKEY_ACTION_TORCH) {
+ toggleTorch();
+ } else if (action == GravityBoxSettings.HWKEY_ACTION_APP_LAUNCHER) {
+ showAppLauncher();
+ } else if (action == GravityBoxSettings.HWKEY_ACTION_HOME) {
+ injectKey(KeyEvent.KEYCODE_HOME);
+ } else if (action == GravityBoxSettings.HWKEY_ACTION_BACK) {
+ injectKey(KeyEvent.KEYCODE_BACK);
}
}
@@ -388,9 +821,11 @@ private static void killForegroundApp() {
public void run() {
try {
final Intent intent = new Intent(Intent.ACTION_MAIN);
+ final PackageManager pm = mContext.getPackageManager();
String defaultHomePackage = "com.android.launcher";
intent.addCategory(Intent.CATEGORY_HOME);
- final ResolveInfo res = mContext.getPackageManager().resolveActivity(intent, 0);
+
+ final ResolveInfo res = pm.resolveActivity(intent, 0);
if (res.activityInfo != null && !res.activityInfo.packageName.equals("android")) {
defaultHomePackage = res.activityInfo.packageName;
}
@@ -401,31 +836,37 @@ public void run() {
List apps = (List)
XposedHelpers.callMethod(mgr, "getRunningAppProcesses");
- boolean targetKilled = false;
+ String targetKilled = null;
for (RunningAppProcessInfo appInfo : apps) {
int uid = appInfo.uid;
// Make sure it's a foreground user application (not system,
// root, phone, etc.)
if (uid >= Process.FIRST_APPLICATION_UID && uid <= Process.LAST_APPLICATION_UID
&& appInfo.importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND &&
- !appInfo.processName.equals("com.android.systemui") &&
- !appInfo.processName.equals("com.mediatek.bluetooth") &&
+ !mKillIgnoreList.contains(appInfo.processName) &&
!appInfo.processName.equals(defaultHomePackage)) {
- log("Killing process ID " + appInfo.pid + ": " + appInfo.processName);
+ if (DEBUG) log("Killing process ID " + appInfo.pid + ": " + appInfo.processName);
Process.killProcess(appInfo.pid);
- targetKilled = true;
+ targetKilled = appInfo.processName;
+ try {
+ targetKilled = (String) pm.getApplicationLabel(
+ pm.getApplicationInfo(targetKilled, 0));
+ } catch (PackageManager.NameNotFoundException nfe) {
+ //
+ }
break;
}
}
- if (targetKilled) {
+ if (targetKilled != null) {
Class>[] paramArgs = new Class>[3];
paramArgs[0] = XposedHelpers.findClass(CLASS_WINDOW_STATE, null);
paramArgs[1] = int.class;
paramArgs[2] = boolean.class;
XposedHelpers.callMethod(mPhoneWindowManager, "performHapticFeedbackLw",
paramArgs, null, HapticFeedbackConstants.FLAG_IGNORE_GLOBAL_SETTING, true);
- Toast.makeText(mContext, mStrAppKilled, Toast.LENGTH_SHORT).show();
+ Toast.makeText(mContext,
+ String.format(mStrAppKilled, targetKilled), Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(mContext, mStrNothingToKill, Toast.LENGTH_SHORT).show();
}
@@ -485,4 +926,126 @@ private static void goToSleep() {
XposedBridge.log(e);
}
}
-}
\ No newline at end of file
+
+ private static void toggleRecentApps() {
+ try {
+ if (Build.VERSION.SDK_INT > 17) {
+ XposedHelpers.callMethod(mPhoneWindowManager, "toggleRecentApps");
+ } else {
+ Object statusbar = XposedHelpers.callMethod(mPhoneWindowManager, "getStatusBarService");
+ if (statusbar != null) {
+ XposedHelpers.callMethod(statusbar, "toggleRecentApps");
+ }
+ }
+ } catch (Throwable t) {
+ XposedBridge.log(t);
+ }
+ }
+
+ private static void launchCustomApp(final int action) {
+ Handler handler = (Handler) XposedHelpers.getObjectField(mPhoneWindowManager, "mHandler");
+ if (handler == null) return;
+ mPrefs.reload();
+
+ handler.post(
+ new Runnable() {
+ @Override
+ public void run() {
+ try {
+ String appInfo = (action == GravityBoxSettings.HWKEY_ACTION_CUSTOM_APP) ?
+ mPrefs.getString(GravityBoxSettings.PREF_KEY_HWKEY_CUSTOM_APP, null) :
+ mPrefs.getString(GravityBoxSettings.PREF_KEY_HWKEY_CUSTOM_APP2, null);
+ if (appInfo == null) {
+ Toast.makeText(mContext, mStrCustomAppNone, Toast.LENGTH_SHORT).show();
+ return;
+ }
+
+ String[] splitValue = appInfo.split(SEPARATOR);
+ ComponentName cn = new ComponentName(splitValue[0], splitValue[1]);
+ Intent i = new Intent();
+ i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
+ i.setComponent(cn);
+ mContext.startActivity(i);
+ } catch (ActivityNotFoundException e) {
+ Toast.makeText(mContext, mStrCustomAppMissing, Toast.LENGTH_SHORT).show();
+ } catch (Throwable t) {
+ XposedBridge.log(t);
+ }
+ }
+ }
+ );
+ }
+
+ private static void injectKey(final int keyCode) {
+ Handler handler = (Handler) XposedHelpers.getObjectField(mPhoneWindowManager, "mHandler");
+ if (handler == null) return;
+
+ handler.post(new Runnable() {
+ @Override
+ public void run() {
+ try {
+ final long eventTime = SystemClock.uptimeMillis();
+ final InputManager inputManager = (InputManager)
+ mContext.getSystemService(Context.INPUT_SERVICE);
+ XposedHelpers.callMethod(inputManager, "injectInputEvent",
+ new KeyEvent(eventTime - 50, eventTime - 50, KeyEvent.ACTION_DOWN,
+ keyCode, 0), 0);
+ XposedHelpers.callMethod(inputManager, "injectInputEvent",
+ new KeyEvent(eventTime - 50, eventTime - 25, KeyEvent.ACTION_UP,
+ keyCode, 0), 0);
+ } catch (Throwable t) {
+ XposedBridge.log(t);
+ }
+ }
+ });
+ }
+
+ private static void toggleExpandedDesktop() {
+ Handler handler = (Handler) XposedHelpers.getObjectField(mPhoneWindowManager, "mHandler");
+ if (handler == null) return;
+
+ handler.post(new Runnable() {
+ @Override
+ public void run() {
+ try {
+ final ContentResolver resolver = mContext.getContentResolver();
+ final int edMode = Integer.valueOf(mPrefs.getString(
+ GravityBoxSettings.PREF_KEY_EXPANDED_DESKTOP, "0"));
+ if (edMode == GravityBoxSettings.ED_DISABLED) {
+ Toast.makeText(mContext, mStrExpandedDesktopDisabled, Toast.LENGTH_SHORT).show();
+ } else {
+ final int edState = Settings.System.getInt(resolver,
+ ModExpandedDesktop.SETTING_EXPANDED_DESKTOP_STATE, 0);
+ Settings.System.putInt(resolver,
+ ModExpandedDesktop.SETTING_EXPANDED_DESKTOP_STATE,
+ (edState == 1) ? 0 : 1);
+ }
+ } catch (Throwable t) {
+ XposedBridge.log(t);
+ }
+ }
+ });
+ }
+
+ private static void toggleTorch() {
+ try {
+ Intent intent = new Intent(mGbContext, TorchService.class);
+ intent.setAction(TorchService.ACTION_TOGGLE_TORCH);
+ mGbContext.startService(intent);
+ } catch (Throwable t) {
+ log("Error toggling Torch: " + t.getMessage());
+ }
+ }
+
+ private static void showAppLauncher() {
+ Handler handler = (Handler) XposedHelpers.getObjectField(mPhoneWindowManager, "mHandler");
+ if (handler == null || mAppLauncher == null) return;
+
+ handler.post(new Runnable() {
+ @Override
+ public void run() {
+ mAppLauncher.showDialog();
+ }
+ });
+ }
+}
diff --git a/src/com/ceco/gm2/gravitybox/ModLockscreen.java b/src/com/ceco/gm2/gravitybox/ModLockscreen.java
index 3cdbbef384..da68145282 100644
--- a/src/com/ceco/gm2/gravitybox/ModLockscreen.java
+++ b/src/com/ceco/gm2/gravitybox/ModLockscreen.java
@@ -1,49 +1,161 @@
+/*
+ * Copyright (C) 2013 Peter Gregus for GravityBox Project (C3C076@xda)
+ * 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.ceco.gm2.gravitybox;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Hashtable;
+import java.util.List;
+
+import com.ceco.gm2.gravitybox.preference.AppPickerPreference;
+
+import android.app.Activity;
+import android.appwidget.AppWidgetHostView;
+import android.appwidget.AppWidgetProviderInfo;
+import android.content.ComponentName;
import android.content.Context;
+import android.content.Intent;
+import android.content.pm.ActivityInfo;
+import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
+import android.content.res.Resources;
import android.content.res.XResources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
+import android.graphics.Canvas;
import android.graphics.Color;
+import android.graphics.Paint;
+import android.graphics.RectF;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
+import android.os.Build;
import android.os.Bundle;
+import android.os.Handler;
+import android.text.Editable;
+import android.text.TextWatcher;
+import android.util.TypedValue;
+import android.view.View.OnLongClickListener;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
+import android.view.View;
import android.view.ViewManager;
import android.view.WindowManager;
import android.widget.FrameLayout;
+import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.ImageView.ScaleType;
+import android.widget.TextView;
import de.robv.android.xposed.XC_MethodHook;
import de.robv.android.xposed.XC_MethodReplacement;
import de.robv.android.xposed.XSharedPreferences;
import de.robv.android.xposed.XposedBridge;
import de.robv.android.xposed.XposedHelpers;
+import de.robv.android.xposed.callbacks.XC_InitPackageResources.InitPackageResourcesParam;
public class ModLockscreen {
- private static final String TAG = "ModLockscreen";
- private static final String CLASS_KGVIEW_MANAGER = "com.android.internal.policy.impl.keyguard.KeyguardViewManager";
- private static final String CLASS_KG_HOSTVIEW = "com.android.internal.policy.impl.keyguard.KeyguardHostView";
+ private static final String CLASS_PATH = Build.VERSION.SDK_INT > 18 ?
+ "com.android.keyguard" : "com.android.internal.policy.impl.keyguard";
+ private static final String TAG = "GB:ModLockscreen";
+ public static final String PACKAGE_NAME = Build.VERSION.SDK_INT > 18 ? "com.android.keyguard" : "android";
+
+ private static final String CLASS_KGVIEW_MANAGER = CLASS_PATH + ".KeyguardViewManager";
+ private static final String CLASS_KG_HOSTVIEW = CLASS_PATH + ".KeyguardHostView";
+ private static final String CLASS_KG_SELECTOR_VIEW = CLASS_PATH + ".KeyguardSelectorView";
+ private static final String CLASS_TARGET_DRAWABLE = Utils.isMtkDevice() ?
+ "com.android.internal.policy.impl.keyguard.TargetDrawable" :
+ "com.android.internal.widget.multiwaveview.TargetDrawable";
+ private static final String CLASS_TRIGGER_LISTENER = CLASS_PATH + ".KeyguardSelectorView$1";
+ private static final String CLASS_KG_ABS_KEY_INPUT_VIEW = CLASS_PATH + ".KeyguardAbsKeyInputView";
+ private static final String CLASS_KGVIEW_MEDIATOR = CLASS_PATH + ".KeyguardViewMediator";
+ private static final String CLASS_KG_UPDATE_MONITOR = CLASS_PATH + ".KeyguardUpdateMonitor";
+ private static final String CLASS_KG_UPDATE_MONITOR_CB = CLASS_PATH + ".KeyguardUpdateMonitorCallback";
+ private static final String CLASS_KG_UPDATE_MONITOR_BATTERY_STATUS =
+ CLASS_PATH + ".KeyguardUpdateMonitor.BatteryStatus";
+ private static final String CLASS_KG_VIEW_BASE = CLASS_PATH + ".KeyguardViewBase";
+ private static final String CLASS_KG_WIDGET_PAGER = CLASS_PATH + ".KeyguardWidgetPager";
+ private static final boolean DEBUG = false;
+ private static final boolean DEBUG_ARC = false;
+
+ private static final int STATUSBAR_DISABLE_RECENT = 0x01000000;
+ private static final int STATUSBAR_DISABLE_NOTIFICATION_TICKER = 0x00080000;
+ private static final int STATUSBAR_DISABLE_EXPAND = 0x00010000;
+ private static final int STATUSBAR_DISABLE_SEARCH = 0x02000000;
+ private static final int STATUSBAR_DISABLE_CLOCK = 0x00800000;
+
+ private static final List CLOCK_WIDGETS = new ArrayList(Arrays.asList(
+ "com.android.deskclock",
+ "com.dvtonder.chronus",
+ "net.nurik.roman.dashclock",
+ "com.roymam.android.notificationswidget"
+ ));
private static XSharedPreferences mPrefs;
+ private static Hashtable mAppInfoCache = new Hashtable();
+ private static Class>[] mLaunchActivityArgs = new Class>[]
+ { Intent.class, boolean.class, boolean.class, Handler.class, Runnable.class };
+ private static Constructor> mTargetDrawableConstructor;
+ private static Object mKeyguardHostView;
+
+ // Battery Arc
+ private static HandleDrawable mHandleDrawable;
+ private static Paint mArcPaint;
+ private static RectF mArcRect;
+ private static float mArcAngle = 0f;
+ private static Object mInfoCallback;
+ private static float mBatteryLevel;
+ private static boolean mArcVisible;
+ private static boolean mArcEnabled;
+ private static View mGlowPadView;
private static void log(String message) {
XposedBridge.log(TAG + ": " + message);
}
- public static void initZygote(final XSharedPreferences prefs) {
- log("initZygote");
+ public static void initPackageResources(final XSharedPreferences prefs, final InitPackageResourcesParam resparam) {
+ try {
+ boolean enableMenuKey = prefs.getBoolean(
+ GravityBoxSettings.PREF_KEY_LOCKSCREEN_MENU_KEY, false);
+ resparam.res.setReplacement(PACKAGE_NAME, "bool", "config_disableMenuKeyInLockScreen", !enableMenuKey);
+ } catch (Throwable t) {
+ XposedBridge.log(t);
+ }
+ }
+ public static void init(final XSharedPreferences prefs, final ClassLoader classLoader) {
try {
mPrefs = prefs;
- final Class> kgViewManagerClass = XposedHelpers.findClass(CLASS_KGVIEW_MANAGER, null);
- final Class> kgHostViewClass = XposedHelpers.findClass(CLASS_KG_HOSTVIEW, null);
+ final Class> kgViewManagerClass = XposedHelpers.findClass(CLASS_KGVIEW_MANAGER, classLoader);
+ final Class> kgHostViewClass = XposedHelpers.findClass(CLASS_KG_HOSTVIEW, classLoader);
+ final Class> kgSelectorViewClass = XposedHelpers.findClass(CLASS_KG_SELECTOR_VIEW, classLoader);
+ final Class> triggerListenerClass = XposedHelpers.findClass(CLASS_TRIGGER_LISTENER, classLoader);
+ final Class> kgAbsKeyInputViewClass = XposedHelpers.findClass(CLASS_KG_ABS_KEY_INPUT_VIEW, classLoader);
+ final Class> kgViewMediatorClass = XposedHelpers.findClass(CLASS_KGVIEW_MEDIATOR, classLoader);
+ final Class> kgUpdateMonitorClass = XposedHelpers.findClass(CLASS_KG_UPDATE_MONITOR, classLoader);
+ final Class> kgUpdateMonitorCbClass = XposedHelpers.findClass(CLASS_KG_UPDATE_MONITOR_CB, classLoader);
+ final Class> kgViewBaseClass = XposedHelpers.findClass(CLASS_KG_VIEW_BASE, classLoader);
+ final Class> kgWidgetPagerClass = XposedHelpers.findClass(CLASS_KG_WIDGET_PAGER, classLoader);
boolean enableMenuKey = prefs.getBoolean(
GravityBoxSettings.PREF_KEY_LOCKSCREEN_MENU_KEY, false);
- XResources.setSystemWideReplacement("android", "bool", "config_disableMenuKeyInLockScreen", !enableMenuKey);
+
+ if (Build.VERSION.SDK_INT < 19) {
+ XResources.setSystemWideReplacement(PACKAGE_NAME, "bool", "config_disableMenuKeyInLockScreen", !enableMenuKey);
+ }
XposedHelpers.findAndHookMethod(kgViewManagerClass, "maybeCreateKeyguardLocked",
boolean.class, boolean.class, Bundle.class, new XC_MethodHook() {
@@ -68,7 +180,7 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable {
windowLayoutParams.flags |= WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER;
}
viewManager.updateViewLayout(keyGuardHost, windowLayoutParams);
- log("maybeCreateKeyguardLocked: layout updated");
+ if (DEBUG) log("maybeCreateKeyguardLocked: layout updated");
}
});
@@ -89,7 +201,7 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable {
int color = mPrefs.getInt(
GravityBoxSettings.PREF_KEY_LOCKSCREEN_BACKGROUND_COLOR, Color.BLACK);
keyguardView.setBackgroundColor(color);
- log("inflateKeyguardView: background color set");
+ if (DEBUG) log("inflateKeyguardView: background color set");
} else if (bgType.equals(GravityBoxSettings.LOCKSCREEN_BG_IMAGE)) {
try {
Context context = (Context) XposedHelpers.getObjectField(param.thisObject, "mContext");
@@ -107,7 +219,7 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable {
mLockScreenWallpaperImage.setImageDrawable(d);
flayout.addView(mLockScreenWallpaperImage, -1, -1);
keyguardView.addView(flayout,0);
- log("inflateKeyguardView: background image set");
+ if (DEBUG) log("inflateKeyguardView: background image set");
} catch (NameNotFoundException e) {
XposedBridge.log(e);
}
@@ -128,11 +240,32 @@ protected Object replaceHookedMethod(MethodHookParam param) throws Throwable {
XposedHelpers.findAndHookMethod(kgHostViewClass, "onFinishInflate", new XC_MethodHook() {
@Override
protected void afterHookedMethod(final MethodHookParam param) throws Throwable {
+ mKeyguardHostView = param.thisObject;
Object slidingChallenge = XposedHelpers.getObjectField(
param.thisObject, "mSlidingChallengeLayout");
minimizeChallengeIfDesired(slidingChallenge);
+
+ if (slidingChallenge != null) {
+ try {
+ // find lock button and assign long click listener
+ // we assume there's only 1 ImageButton in sliding challenge layout
+ // we have to do it this way since there's no ID assigned in layout XML
+ final ViewGroup vg = (ViewGroup) slidingChallenge;
+ final int childCount = vg.getChildCount();
+ for (int i = 0; i < childCount; i++) {
+ View v = vg.getChildAt(i);
+ if (v instanceof ImageButton) {
+ v.setOnLongClickListener(mLockButtonLongClickListener);
+ break;
+ }
+ }
+ } catch (Throwable t) {
+ XposedBridge.log(t);
+ }
+ }
}
});
+
XposedHelpers.findAndHookMethod(kgHostViewClass, "onScreenTurnedOn", new XC_MethodHook() {
@Override
protected void afterHookedMethod(final MethodHookParam param) throws Throwable {
@@ -141,18 +274,516 @@ protected void afterHookedMethod(final MethodHookParam param) throws Throwable {
minimizeChallengeIfDesired(slidingChallenge);
}
});
- } catch (Exception e) {
- XposedBridge.log(e);
+
+ XposedHelpers.findAndHookMethod(kgSelectorViewClass, "onFinishInflate", new XC_MethodHook() {
+ @Override
+ protected void afterHookedMethod(final MethodHookParam param) throws Throwable {
+ if (DEBUG) log("KeyGuardSelectorView onFinishInflate()");
+ prefs.reload();
+
+ final Context context = (Context) XposedHelpers.getObjectField(param.thisObject, "mContext");
+ final Resources res = context.getResources();
+ mGlowPadView = (View) XposedHelpers.getObjectField(param.thisObject, "mGlowPadView");
+
+ // apply custom bottom/right margin to shift unlock ring upwards/left
+ try {
+ final FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) mGlowPadView.getLayoutParams();
+ final int bottomMarginOffsetPx = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
+ prefs.getInt(GravityBoxSettings.PREF_KEY_LOCKSCREEN_TARGETS_VERTICAL_OFFSET, 0),
+ res.getDisplayMetrics());
+ final int rightMarginOffsetPx = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
+ prefs.getInt(GravityBoxSettings.PREF_KEY_LOCKSCREEN_TARGETS_HORIZONTAL_OFFSET, 0),
+ res.getDisplayMetrics());
+ lp.setMargins(lp.leftMargin, lp.topMargin, lp.rightMargin - rightMarginOffsetPx,
+ lp.bottomMargin - bottomMarginOffsetPx);
+ mGlowPadView.setLayoutParams(lp);
+ } catch (Throwable t) {
+ log("Lockscreen targets: error while trying to modify GlowPadView layout" + t.getMessage());
+ }
+
+ mArcEnabled = prefs.getBoolean(GravityBoxSettings.PREF_KEY_LOCKSCREEN_BATTERY_ARC, false);
+ // prepare Battery Arc
+ if (mArcEnabled) {
+ mArcVisible = true;
+ if (mHandleDrawable == null) {
+ mHandleDrawable = new HandleDrawable(
+ XposedHelpers.getObjectField(mGlowPadView, "mHandleDrawable"));
+ mInfoCallback = XposedHelpers.newInstance(kgUpdateMonitorCbClass);
+
+ mArcPaint = new Paint();
+ mArcPaint.setStrokeWidth(10.0f);
+ mArcPaint.setStyle(Paint.Style.STROKE);
+ mArcRect = new RectF(mHandleDrawable.getPositionX() - mHandleDrawable.getWidth()/2,
+ mHandleDrawable.getPositionY() - mHandleDrawable.getHeight()/2,
+ mHandleDrawable.getPositionX() + mHandleDrawable.getWidth()/2,
+ mHandleDrawable.getPositionY() + mHandleDrawable.getHeight()/2);
+
+ XposedHelpers.findAndHookMethod(
+ mGlowPadView.getClass(), "onDraw", Canvas.class, glowPadViewOnDrawHook);
+ XposedHelpers.findAndHookMethod(mGlowPadView.getClass(), "showTargets",
+ boolean.class, glowPadViewShowTargetsHook);
+ XposedHelpers.findAndHookMethod(mGlowPadView.getClass(), "hideTargets",
+ boolean.class, boolean.class, glowPadViewHideTargetsHook);
+
+ if (DEBUG_ARC) log("Battery Arc initialized");
+ }
+ if (DEBUG_ARC) log("Battery Arc ready");
+ }
+
+ // finish if lockscreen targets disabled
+ if (!prefs.getBoolean(
+ GravityBoxSettings.PREF_KEY_LOCKSCREEN_TARGETS_ENABLE, false)) return;
+
+ @SuppressWarnings("unchecked")
+ final ArrayList